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;
+61 -30
View File
@@ -1,3 +1,59 @@
const homeassistant = {
'binary_sensor_occupancy': {
type: 'binary_sensor',
object_id: 'occupancy',
discovery_payload: {
payload_on: 'motion',
payload_off: 'no_motion',
value_template: '{{ value_json.occupancy }}',
device_class: 'motion',
json_attributes: ['battery']
}
},
'sensor_illuminance': {
type: 'sensor',
object_id: 'illuminance',
discovery_payload: {
unit_of_measurement: 'lx',
icon: 'mdi:theme-light-dark',
value_template: '{{ value_json.illuminance }}',
json_attributes: ['battery'],
}
},
'binary_sensor_state': {
type: 'binary_sensor',
object_id: 'state',
discovery_payload: {
payload_on: 'open',
payload_off: 'closed',
value_template: '{{ value_json.state }}',
device_class: 'door',
json_attributes: ['battery']
}
},
'light_brightness_colortemp_xy': {
type: 'light',
object_id: 'light',
discovery_payload: {
brightness: true,
color_temp: true,
xy: true,
platform: 'mqtt_json',
command_topic: true
}
},
'light_brightness_colortemp': {
type: 'light',
object_id: 'light',
discovery_payload: {
brightness: true,
color_temp: true,
platform: 'mqtt_json',
command_topic: true
}
},
};
const devices = {
'lumi.sensor_switch': {
model: 'WXKG01LM',
@@ -21,7 +77,8 @@ const devices = {
model: 'RTCGQ01LM',
vendor: 'Xiaomi',
description: 'MiJia human body movement sensor',
supports: 'occupancy, motion and no motion'
supports: 'occupancy',
homeassistant: [homeassistant.binary_sensor_occupancy]
},
'lumi.sensor_magnet': {
model: 'MCCGQ01LM',
@@ -34,47 +91,21 @@ const devices = {
vendor: 'Xiaomi',
description: 'Aqara door & window contact sensor',
supports: 'open and closed state',
homeassistant: {
type: 'binary_sensor',
discovery_payload: {
payload_on: 'open',
payload_off: 'closed',
value_template: '{{ value_json.state }}',
device_class: 'door',
json_attributes: ['battery']
}
}
homeassistant: [homeassistant.binary_sensor_state]
},
'TRADFRI bulb E27 WS opal 980lm': {
model: 'LED1545G12',
vendor: 'IKEA',
description: 'TRADFRI LED bulb E27 980 lumen, dimmable, white spectrum, opal white',
supports: 'on/off, brightness, color temperature',
homeassistant: {
type: 'light',
discovery_payload: {
brightness: true,
color_temp: true,
platform: 'mqtt_json',
command_topic: true
}
}
homeassistant: [homeassistant.light_brightness_colortemp]
},
'LLC020': {
model: '7146060PH',
vendor: 'Philips',
description: 'Hue Go',
supports: 'on/off, brightness, color temperature, color xy',
homeassistant: {
type: 'light',
discovery_payload: {
brightness: true,
color_temp: true,
xy: true,
platform: 'mqtt_json',
command_topic: true
}
}
homeassistant: [homeassistant.light_brightness_colortemp_xy]
},
}