mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-07-02 10:01:37 +00:00
Homeassistant discovery: allow multiple homeassistant sensor/devics per device. #9
This commit is contained in:
+17
-11
@@ -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
@@ -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]
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user