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