Implement Home Assistant device registry. #646

This commit is contained in:
Koen Kanters
2018-12-07 23:17:29 +01:00
parent ef57083ae9
commit 753e8c3da7
+19 -9
View File
@@ -1,6 +1,7 @@
const zigbeeShepherdConverters = require('zigbee-shepherd-converters');
const settings = require('../util/settings');
const logger = require('../util/logger');
const zigbee2mqttVersion = require('../../package.json').version;
const configurations = {
// Binary sensor
@@ -429,23 +430,23 @@ class HomeAssistant {
// MQTT discovery of all paired devices on startup.
this.zigbee.getAllClients().forEach((device) => {
const mappedDevice = zigbeeShepherdConverters.findByZigbeeModel(device.modelId);
if (mappedDevice) {
this.discover(device.ieeeAddr, mappedDevice.model, true);
const mappedModel = zigbeeShepherdConverters.findByZigbeeModel(device.modelId);
if (mappedModel) {
this.discover(device.ieeeAddr, mappedModel, true);
}
});
}
discover(ieeeAddr, model, force=false) {
discover(ieeeAddr, mappedModel, force=false) {
// Check if already discoverd and check if there are configs.
const discover = force || !this.discovered[ieeeAddr];
if (!discover || !mapping[model] || !settings.getDevice(ieeeAddr)) {
if (!discover || !mapping[mappedModel.model] || !settings.getDevice(ieeeAddr)) {
return;
}
const friendlyName = settings.getDevice(ieeeAddr).friendly_name;
mapping[model].forEach((config) => {
mapping[mappedModel.model].forEach((config) => {
const topic = `${config.type}/${ieeeAddr}/${config.object_id}/config`;
const payload = {...config.discovery_payload};
payload.state_topic = `${settings.get().mqtt.base_topic}/${friendlyName}`;
@@ -457,6 +458,15 @@ class HomeAssistant {
// Set unique_id
payload.unique_id = `${ieeeAddr}_${config.object_id}_${settings.get().mqtt.base_topic}`;
// Attributes for device registry
payload.device = {
identifiers: `zigbee2mqtt_${ieeeAddr}`,
name: friendlyName,
sw_version: `Zigbee2mqtt ${zigbee2mqttVersion}`,
model: `${mappedModel.description} (${mappedModel.model})`,
manufacturer: mappedModel.vendor,
};
if (payload.command_topic) {
payload.command_topic = `${settings.get().mqtt.base_topic}/${friendlyName}/`;
@@ -494,9 +504,9 @@ class HomeAssistant {
return true;
}
onZigbeeMessage(message, device, mappedDevice) {
if (device && mappedDevice) {
this.discover(device.ieeeAddr, mappedDevice.model);
onZigbeeMessage(message, device, mappedModel) {
if (device && mappedModel) {
this.discover(device.ieeeAddr, mappedModel);
}
}