Skip to content

Commit

Permalink
Link devices & groups to bridge
Browse files Browse the repository at this point in the history
  • Loading branch information
mundschenk-at committed Dec 3, 2023
1 parent 43b0b08 commit a04c876
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 15 deletions.
7 changes: 7 additions & 0 deletions lib/extension/homeassistant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ export default class HomeAssistant extends Extension {
private zigbee2MQTTVersion: string;
private discoveryOrigin: {name: string, sw: string, url: string};
private bridge: Bridge;
private bridgeIdentifier: string;

constructor(zigbee: Zigbee, mqtt: MQTT, state: State, publishEntityState: PublishEntityState,
eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>,
Expand All @@ -131,6 +132,7 @@ export default class HomeAssistant extends Extension {
this.zigbee2MQTTVersion = (await utils.getZigbee2MQTTVersion(false)).version;
this.discoveryOrigin = {name: 'Zigbee2MQTT', sw: this.zigbee2MQTTVersion, url: 'https://www.zigbee2mqtt.io'};
this.bridge = this.getBridgeEntity(await this.zigbee.getCoordinatorVersion());
this.bridgeIdentifier = this.getDevicePayload(this.bridge).identifiers[0];
this.eventBus.onDeviceRemoved(this, this.onDeviceRemoved);
this.eventBus.onMQTTMessage(this, this.onMQTTMessage);
this.eventBus.onEntityRenamed(this, this.onEntityRenamed);
Expand Down Expand Up @@ -1656,6 +1658,11 @@ export default class HomeAssistant extends Extension {
delete payload.configuration_url;
}

// Link devices & groups to bridge.
if (entity !== this.bridge) {
payload.via_device = this.bridgeIdentifier;
}

return payload;
}

Expand Down
70 changes: 55 additions & 15 deletions test/homeassistant.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ describe('HomeAssistant extension', () => {
"sw_version": version,
"model": "Group",
"manufacturer": "Zigbee2MQTT",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"max_mireds": 454,
"min_mireds": 250,
Expand Down Expand Up @@ -134,6 +135,7 @@ describe('HomeAssistant extension', () => {
"sw_version": version,
"model": "Group",
"manufacturer": "Zigbee2MQTT",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic":"zigbee2mqtt/ha_discovery_group",
"name":null,
Expand Down Expand Up @@ -169,6 +171,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
'enabled_by_default': true,
Expand Down Expand Up @@ -198,6 +201,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -226,6 +230,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -255,6 +260,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -285,6 +291,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand All @@ -306,7 +313,8 @@ describe('HomeAssistant extension', () => {
"manufacturer":"Xiaomi",
"model":"Aqara double key wired wall switch without neutral wire. Doesn't work as a router and doesn't support power meter (QBKG03LM)",
"name":"wall_switch_double",
"sw_version": null
"sw_version": null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic":"zigbee2mqtt/wall_switch_double",
"name":"Left",
Expand Down Expand Up @@ -336,7 +344,8 @@ describe('HomeAssistant extension', () => {
"manufacturer":"Xiaomi",
"model":"Aqara double key wired wall switch without neutral wire. Doesn't work as a router and doesn't support power meter (QBKG03LM)",
"name":"wall_switch_double",
"sw_version": null
"sw_version": null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic":"zigbee2mqtt/wall_switch_double",
"name":"Right",
Expand Down Expand Up @@ -373,6 +382,7 @@ describe('HomeAssistant extension', () => {
"model":"TRADFRI LED bulb E26/E27 980 lumen, dimmable, white spectrum, opal white (LED1545G12)",
"name":"bulb",
"sw_version": null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"effect":true,
"effect_list":[
Expand Down Expand Up @@ -431,6 +441,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -459,6 +470,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -487,6 +499,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -545,6 +558,7 @@ describe('HomeAssistant extension', () => {
'sw_version': 'test',
'model': 'custom model',
'manufacturer': 'From Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
'expire_after': 90,
Expand Down Expand Up @@ -572,6 +586,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'custom model',
'manufacturer': 'Not from Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'origin': origin,
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
Expand Down Expand Up @@ -618,6 +633,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
'enabled_by_default': true,
Expand Down Expand Up @@ -647,6 +663,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -689,7 +706,8 @@ describe('HomeAssistant extension', () => {
"manufacturer": "Xiaomi",
"model": "Aqara single key wired wall switch without neutral wire. Doesn't work as a router and doesn't support power meter (QBKG04LM)",
"name": "my_switch",
"sw_version": null
"sw_version": null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic": "zigbee2mqtt/my_switch",
"name": "my_light_name_override",
Expand Down Expand Up @@ -772,7 +790,8 @@ describe('HomeAssistant extension', () => {
"name":"fan",
"sw_version": null,
"model":"Universal wink enabled white ceiling fan premier remote control (99432)",
"manufacturer":"Hampton Bay"
"manufacturer":"Hampton Bay",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -805,7 +824,8 @@ describe('HomeAssistant extension', () => {
"manufacturer":"TuYa",
"model":"Radiator valve with thermostat (TS0601_thermostat)",
"name":"TS0601_thermostat",
"sw_version":null
"sw_version":null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"preset_mode_command_topic":"zigbee2mqtt/TS0601_thermostat/set/preset",
"preset_modes":[
Expand Down Expand Up @@ -874,7 +894,8 @@ describe('HomeAssistant extension', () => {
name: 'smart vent',
sw_version: null,
model: 'Smart vent (SV01)',
manufacturer: 'Keen Home'
manufacturer: 'Keen Home',
via_device: 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand All @@ -894,7 +915,8 @@ describe('HomeAssistant extension', () => {
"manufacturer": "Siglis",
"model": "zigfred plus smart in-wall switch (ZFP-1A-CH)",
"name": "zigfred_plus",
"sw_version": null
"sw_version": null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic": "zigbee2mqtt/zigfred_plus/l6",
"name": "L6",
Expand Down Expand Up @@ -946,6 +968,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -1074,6 +1097,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -1211,6 +1235,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability_mode': 'all',
'availability': [{topic: 'zigbee2mqtt/bridge/state'}, {topic: 'zigbee2mqtt/weather_sensor/availability'}],
Expand Down Expand Up @@ -1294,6 +1319,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -1328,7 +1354,8 @@ describe('HomeAssistant extension', () => {
"name":"weather_sensor_renamed",
"sw_version": null,
"model":"Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)",
"manufacturer":"Xiaomi"
"manufacturer":"Xiaomi",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
}
}),
{ retain: true, qos: 1 },
Expand All @@ -1355,6 +1382,7 @@ describe('HomeAssistant extension', () => {
"sw_version": version,
"model": "Group",
"manufacturer": "Zigbee2MQTT",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic":"zigbee2mqtt/ha_discovery_group_new",
"max_mireds": 454,
Expand Down Expand Up @@ -1428,6 +1456,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -1459,7 +1488,8 @@ describe('HomeAssistant extension', () => {
"name":"bulb",
'sw_version': null,
"model":"TRADFRI LED bulb E26/E27 980 lumen, dimmable, white spectrum, opal white (LED1545G12)",
"manufacturer":"IKEA"
"manufacturer":"IKEA",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
'device_class': 'update',
Expand Down Expand Up @@ -1501,7 +1531,8 @@ describe('HomeAssistant extension', () => {
"name":"button",
"sw_version": null,
"model":"Aqara wireless switch (WXKG11LM)",
"manufacturer":"Xiaomi"
"manufacturer":"Xiaomi",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
}
};

Expand All @@ -1526,7 +1557,8 @@ describe('HomeAssistant extension', () => {
"name":"button",
"sw_version": null,
"model":"Aqara wireless switch (WXKG11LM)",
"manufacturer":"Xiaomi"
"manufacturer":"Xiaomi",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
}
};

Expand Down Expand Up @@ -1691,7 +1723,8 @@ describe('HomeAssistant extension', () => {
"name":"button",
"sw_version": null,
"model":"Aqara wireless switch (WXKG11LM)",
"manufacturer":"Xiaomi"
"manufacturer":"Xiaomi",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
}
};

Expand Down Expand Up @@ -1866,6 +1899,7 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae'
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -1895,6 +1929,7 @@ describe('HomeAssistant extension', () => {
"sw_version": version,
"model": "Group",
"manufacturer": "Zigbee2MQTT",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"json_attributes_topic":"zigbee2mqtt/ha_discovery_group",
"max_mireds": 454,
Expand Down Expand Up @@ -1948,6 +1983,7 @@ describe('HomeAssistant extension', () => {
"sw_version": version,
"model": "Group",
"manufacturer": "Zigbee2MQTT",
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"max_mireds": 454,
"min_mireds": 250,
Expand Down Expand Up @@ -2008,7 +2044,8 @@ describe('HomeAssistant extension', () => {
"manufacturer":"IKEA",
"model":"TRADFRI LED bulb E26/E27 980 lumen, dimmable, white spectrum, opal white (LED1545G12)",
"name":"bulb",
"sw_version":null
"sw_version":null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"effect":true,
"effect_list":[
Expand Down Expand Up @@ -2058,7 +2095,8 @@ describe('HomeAssistant extension', () => {
"manufacturer":"IKEA",
"model":"TRADFRI LED bulb E26/E27 980 lumen, dimmable, white spectrum, opal white (LED1545G12)",
"name":"bulb",
"sw_version": null
"sw_version": null,
"via_device": "zigbee2mqtt_bridge_0x00124b00120144ae",
},
"enabled_by_default":false,
"icon":"mdi:clock",
Expand Down Expand Up @@ -2106,7 +2144,8 @@ describe('HomeAssistant extension', () => {
'sw_version': null,
'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)',
'manufacturer': 'Xiaomi',
'configuration_url': 'http://zigbee.mqtt/#/device/0x0017880104e45522/info'
'configuration_url': 'http://zigbee.mqtt/#/device/0x0017880104e45522/info',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'availability': [{topic: 'zigbee2mqtt/bridge/state'}],
};
Expand Down Expand Up @@ -2144,6 +2183,7 @@ describe('HomeAssistant extension', () => {
'sw_version': '5.127.1.26581',
'model': 'Hue Go (7146060PH)',
'manufacturer': 'Philips',
'via_device': 'zigbee2mqtt_bridge_0x00124b00120144ae',
},
'origin': origin,
'availability': [ { 'topic': 'zigbee2mqtt/bridge/state' } ]
Expand Down

0 comments on commit a04c876

Please sign in to comment.