Homeassistant discovery: allow multiple homeassistant sensor/devics per device. #9

This commit is contained in:
Koen Kanters
2018-04-21 09:13:14 +02:00
parent 14f14e909d
commit bc3fca9d68
2 changed files with 78 additions and 41 deletions
+17 -11
View File
@@ -72,17 +72,7 @@ class Controller {
// Home assistant MQTT discovery
if (settings.get().homeassistant_discovery && mappedModel.homeassistant &&
!this.hassDiscoveryCache[device.ieeeAddr]) {
const topic = `${mappedModel.homeassistant.type}/${device.ieeeAddr}/config`;
const payload = mappedModel.homeassistant.discovery_payload;
payload.state_topic = `${settings.get().mqtt.base_topic}/${friendlyName}`;
payload.availability_topic = `${settings.get().mqtt.base_topic}/bridge/state`;
payload.name = friendlyName;
if (payload.command_topic) {
payload.command_topic = `${settings.get().mqtt.base_topic}/${friendlyName}/set`;
}
this.mqtt.publish(topic, JSON.stringify(payload), true, null, 'homeassistant');
this.homeassistantDiscover(mappedModel, device, friendlyName);
this.hassDiscoveryCache[device.ieeeAddr] = true;
}
@@ -164,6 +154,22 @@ class Controller {
this.zigbee.publish(deviceID, message.cId, message.cmd, message.zclData, callback);
});
}
homeassistantDiscover(mappedModel, device, friendlyName) {
mappedModel.homeassistant.forEach((discover) => {
const topic = `${discover.type}/${device.ieeeAddr}/${discover.object_id}/config`;
const payload = discover.discovery_payload;
payload.state_topic = `${settings.get().mqtt.base_topic}/${friendlyName}`;
payload.availability_topic = `${settings.get().mqtt.base_topic}/bridge/state`;
payload.name = friendlyName;
if (payload.command_topic) {
payload.command_topic = `${settings.get().mqtt.base_topic}/${friendlyName}/set`;
}
this.mqtt.publish(topic, JSON.stringify(payload), true, null, 'homeassistant');
});
}
}
module.exports = Controller;