Homeassisant: rediscover devices on MQTT reconnect. #105

This commit is contained in:
Koenkk
2018-06-11 20:20:18 +02:00
parent b7252379b9
commit cd13286ca7
2 changed files with 22 additions and 20 deletions
+18 -17
View File
@@ -50,40 +50,41 @@ class Controller {
this.configureDevice(device);
});
// Enable zigbee join.
if (settings.get().permit_join) {
logger.warn('`permit_join` set to `true` in configuration.yaml.');
logger.warn('Allowing new devices to join.');
logger.warn('Set `permit_join` to `false` once you joined all devices.');
this.zigbee.permitJoin(true);
}
// Start timers.
this.pollTimer(true);
this.softResetTimeout(true);
// Connect to MQTT broker
const subscriptions = [
`${settings.get().mqtt.base_topic}/+/set`,
`${settings.get().mqtt.base_topic}/+/+/set`,
`${settings.get().mqtt.base_topic}/bridge/config/+`,
];
this.mqtt.connect(this.handleMQTTMessage, subscriptions, () => this.handleStarted());
this.mqtt.connect(this.handleMQTTMessage, subscriptions, () => this.handleMQTTConnected());
}
});
}
handleStarted() {
// Home Assistant MQTT discovery on startup.
handleMQTTConnected() {
// Home Assistant MQTT discovery on MQTT connected.
if (settings.get().homeassistant) {
// MQTT discovery of all paired devices on startup.
this.zigbee.getAllClients().forEach((device) => {
const mappedModel = zigbeeShepherdConverters.findByZigbeeModel(device.modelId);
if (mappedModel) {
homeassistant.discover(device.ieeeAddr, mappedModel.model, this.mqtt);
homeassistant.discover(device.ieeeAddr, mappedModel.model, this.mqtt, true);
}
});
}
// Enable zigbee join.
if (settings.get().permit_join) {
logger.warn('`permit_join` set to `true` in configuration.yaml.');
logger.warn('Allowing new devices to join.');
logger.warn('Set `permit_join` to `false` once you joined all devices.');
this.zigbee.permitJoin(true);
}
// Start timers.
this.pollTimer(true);
this.softResetTimeout(true);
}
softResetTimeout(start) {
@@ -238,7 +239,7 @@ class Controller {
// Home Assistant MQTT discovery
if (settings.get().homeassistant) {
homeassistant.discover(device.ieeeAddr, mappedModel.model, this.mqtt);
homeassistant.discover(device.ieeeAddr, mappedModel.model, this.mqtt, false);
}
// After this point we cant handle message withoud cid anymore.
+4 -3
View File
@@ -262,9 +262,10 @@ const mapping = {
// A map of all discoverd devices
const discovered = {};
function discover(deviceID, model, mqtt) {
function discover(deviceID, model, mqtt, force) {
// Check if already discoverd and check if there are configs.
if (discovered[deviceID] || !mapping[model] || !settings.getDevice(deviceID)) {
const discover = force || !discovered[deviceID];
if (!discover || !mapping[model] || !settings.getDevice(deviceID)) {
return;
}
@@ -313,6 +314,6 @@ function clear(deviceID, model, mqtt) {
module.exports = {
mapping: mapping,
discover: (deviceID, model, mqtt) => discover(deviceID, model, mqtt),
discover: (deviceID, model, mqtt, force) => discover(deviceID, model, mqtt, force),
clear: (deviceID, model, mqtt) => clear(deviceID, model, mqtt),
};