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 4, 2023
1 parent 22585c1 commit 187534b
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 @@ -115,6 +115,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 @@ -133,6 +134,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 @@ -1663,6 +1665,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 @@ -90,6 +90,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 @@ -135,6 +136,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 @@ -170,6 +172,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 @@ -199,6 +202,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 @@ -227,6 +231,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 @@ -256,6 +261,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 @@ -286,6 +292,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 @@ -307,7 +314,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 @@ -337,7 +345,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 @@ -374,6 +383,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 @@ -432,6 +442,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 @@ -460,6 +471,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 @@ -488,6 +500,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 @@ -546,6 +559,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 @@ -573,6 +587,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 @@ -619,6 +634,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 @@ -648,6 +664,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 @@ -690,7 +707,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 @@ -773,7 +791,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 @@ -806,7 +825,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 @@ -875,7 +895,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 @@ -895,7 +916,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 @@ -947,6 +969,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 @@ -1075,6 +1098,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 @@ -1212,6 +1236,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 @@ -1295,6 +1320,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 @@ -1329,7 +1355,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 @@ -1356,6 +1383,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 @@ -1429,6 +1457,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 @@ -1460,7 +1489,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 @@ -1502,7 +1532,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 @@ -1527,7 +1558,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 @@ -1692,7 +1724,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 @@ -1867,6 +1900,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 @@ -1896,6 +1930,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 @@ -1949,6 +1984,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 @@ -2009,7 +2045,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 @@ -2059,7 +2096,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 @@ -2107,7 +2145,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 @@ -2145,6 +2184,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 187534b

Please sign in to comment.