A Node.js library for Home Assistant MQTT discovery, ported from the original Python ha-mqtt-discoverable library. Depends on mqtt.js
for MQTT support.
npm install @ginden/ha-mqtt-discoverable
Automatically generated using typedoc are available through GitHub Pages.
Discoverable
de facto extends built-in EventEmitter
class (using some indirection).
All subclasses of Subscriber
(entities that can be updated from Home Assistant) emit the following events:
command.json
- emitted when a command is received from Home Assistant. The payload is the parsed JSON object.command.string
- emitted when a command is received from Home Assistant. The payload is the raw string.command.raw
- emitted when a command is received from Home Assistant, but the payload cannot be parsed. The payload is raw Buffer.All subclasses of Discoverable
emit the following events:
error
- emitted when an error occurs. The payload is the error object.connected
- emitted when the entity is connected to the MQTT broker. The payload is the discoverable itself.write-config
- emitted when the entity is written to the MQTT broker. The payload is [Discoverable, config: Record<string, any>]
.Quite a lot! While I implemented all features from the original library, there is still a lot to do here.
See TODO.md for a more detailed list.
Simple example:
import { connect } from 'mqtt';
import {
DeviceInfo,
HaDiscoverableGlobalSettings,
NumberInfo,
Number,
} from '@ginden/ha-mqtt-discoverable';
// Connect to the MQTT broker
const client = await connect(`mqtt://localhost:1883`);
const settings = HaDiscoverableGlobalSettings.fromProperties({
client,
});
const numberInfo = NumberInfo.create({
device: DeviceInfo.create({
name: 'Fake device',
identifiers: ['fake-device'],
}),
name: 'Counter',
min: 0,
max: 100,
});
let i = 0;
const numberSensor = new Number(numberInfo, settings).on('command.json', (payload: number) => {
i = payload;
console.log('Command received:', payload);
});
await numberSensor.setValue(i);
await setInterval(() => {
i = (i + 1) % numberInfo.max;
}, 1000);
Contributions and suggestions are welcome! Please open an issue or pull request on GitHub.
Quick overview of available commands:
npm run prepare
- build the projectnpm run lint
- run ESLintnpm run lint:fix
- run ESLint and fix issuesnpm run prettier
- run Prettier with --write
flagApache 2.0