Skip to content

Commit

Permalink
Update zigbee2mqtt.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
Luligu committed Mar 28, 2024
1 parent b71742c commit c1b2a54
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/zigbee2mqtt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import { EventEmitter } from 'events';
import { AnsiLogger, TimestampFormat, rs, db, dn, gn, er, zb, hk, id, idn, ign, REVERSE, REVERSEOFF } from 'node-ansi-logger';
import { BridgeExtension, KeyValue, Topology } from './zigbee2mqttTypes.js';
import { mkdir } from 'fs/promises';
import { Payload } from './payloadTypes.js';

const writeFile = util.promisify(fs.writeFile);

Expand Down Expand Up @@ -545,14 +546,21 @@ export class Zigbee2MQTT extends EventEmitter {
try {
return JSON.parse(text);
} catch (error) {
this.log.debug(`tryJsonParse: parsing error from ${text}`);
this.log.error('tryJsonParse: parsing error:', error);
return {};
}
}

private messageHandler(topic: string, payload: Buffer) {
if (topic.startsWith(this.mqttTopic + '/bridge/state')) {
const data = this.tryJsonParse(payload.toString());
const payloadString = payload.toString();
let data: Payload = {};
if (payloadString.startsWith('{') && payloadString.endsWith('}')) {
data = this.tryJsonParse(payload.toString());
} else {
data = { state: payloadString };
}
//this.log.debug('classZigbee2MQTT=>Message bridge/state', data);
if (data.state === 'online') {
this.z2mIsOnline = true;
Expand Down Expand Up @@ -803,7 +811,13 @@ export class Zigbee2MQTT extends EventEmitter {
this.log.warn(`handleDeviceMessage ${id}#${deviceIndex + 1}${rs} entity ${dn}${entity}${rs} service ${zb}${service}${rs} payload null`);
return;
}
const data = this.tryJsonParse(payload.toString()); // TODO crash on device rename
const payloadString = payload.toString();
let data: Payload = {};
if (payloadString.startsWith('{') && payloadString.endsWith('}')) {
data = this.tryJsonParse(payload.toString());
} else {
data = { state: payloadString };
}
if (service === 'availability') {
if (data.state === 'online') {
this.z2mDevices[deviceIndex].isAvailabilityEnabled = true;
Expand Down Expand Up @@ -831,7 +845,13 @@ export class Zigbee2MQTT extends EventEmitter {
this.log.warn(`handleGroupMessage ${id}#${groupIndex + 1}${rs} entity ${gn}${entity}${rs} service ${zb}${service}${rs} payload null`);
return;
}
const data = this.tryJsonParse(payload.toString());
const payloadString = payload.toString();
let data: Payload = {};
if (payloadString.startsWith('{') && payloadString.endsWith('}')) {
data = this.tryJsonParse(payload.toString());
} else {
data = { state: payloadString };
}
data['last_seen'] = new Date().toISOString();
if (service === 'availability') {
if (data.state === 'online') {
Expand Down

0 comments on commit c1b2a54

Please sign in to comment.