Skip to content

Commit

Permalink
Make retain device specific.
Browse files Browse the repository at this point in the history
  • Loading branch information
Koenkk committed Apr 14, 2018
1 parent 39600b3 commit 8356fda
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
1 change: 0 additions & 1 deletion data/configuration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ default:
mqtt:
server: "mqtt://localhost"
base_topic: xiaomi
retain: false
serial:
port: /dev/ttyACM0
allowJoin: true
Expand Down
14 changes: 8 additions & 6 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ function handleReady() {
}

function handleConnect() {
mqttPublish(`${settings.mqtt.base_topic}/bridge/state`, 'online');
mqttPublish(`${settings.mqtt.base_topic}/bridge/state`, 'online', true);
}

function handleMessage(msg) {
Expand All @@ -122,7 +122,8 @@ function handleMessage(msg) {
logger.info(`New device with address ${device.ieeeAddr} connected!`);

settings.devices[device.ieeeAddr] = {
friendly_name: device.ieeeAddr
friendly_name: device.ieeeAddr,
retain: false,
};

writeConfig();
Expand Down Expand Up @@ -154,13 +155,14 @@ function handleMessage(msg) {

// Parse generic information from message.
const friendlyName = settings.devices[device.ieeeAddr].friendly_name;
const retain = settings.devices[device.ieeeAddr].retain;
const topic = `${settings.mqtt.base_topic}/${friendlyName}`;
const publish = (payload) => {
if (attributeStore[device.ieeeAddr]) {
payload = {...attributeStore[device.ieeeAddr], ...payload};
}

mqttPublish(topic, JSON.stringify(payload));
mqttPublish(topic, JSON.stringify(payload), retain);
}

// Get payload for the message.
Expand All @@ -186,20 +188,20 @@ function handleQuit() {
logger.error('zigbee-shepherd stopped')
}

mqttPublish(`${settings.mqtt.base_topic}/bridge/state`, 'offline');
mqttPublish(`${settings.mqtt.base_topic}/bridge/state`, 'offline', true);
process.exit();
});
}

function mqttPublish(topic, payload) {
function mqttPublish(topic, payload, retain) {
if (client.reconnecting) {
logger.error(`Not connected to MQTT server!`);
logger.error(`Cannot send message: topic: '${topic}', payload: '${payload}`);
return;
}

logger.info(`MQTT publish, topic: '${topic}', payload: '${payload}'`);
client.publish(topic, payload, {retain: settings.mqtt.retain});
client.publish(topic, payload, {retain: retain});
}

function writeConfig() {
Expand Down

0 comments on commit 8356fda

Please sign in to comment.