From 03fa9ee7a9b19887ed2d7974d953b0d73998448c Mon Sep 17 00:00:00 2001 From: Daniel Lando Date: Tue, 11 Oct 2022 10:55:39 +0200 Subject: [PATCH] fix(mqtt): possible write fails when publishing to `/set` (#2720) * fix(mqtt): possible write fails when publishing to `/set` * fix: make it null safe --- lib/ZwaveClient.ts | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/ZwaveClient.ts b/lib/ZwaveClient.ts index 838faaec26..293b75eff0 100644 --- a/lib/ZwaveClient.ts +++ b/lib/ZwaveClient.ts @@ -3324,11 +3324,27 @@ class ZwaveClient extends TypedEventEmitter { this._dumpNode(zwaveNode) const values = zwaveNode.getDefinedValueIDs() + const delayedUpdates = [] for (const zwaveValue of values) { - this._addValue(zwaveNode, zwaveValue, existingValues) + const res = this._addValue( + zwaveNode, + zwaveValue, + existingValues, + true + ) + + if (res?.updated) { + delayedUpdates.push( + this.emitValueChanged.bind(this, res.valueId, node, true) + ) + } } + // emit value updated events when all values are added + // this prevents to have undefined target values when using mqtt + delayedUpdates.forEach((fn) => fn()) + // add it to know devices types (if not already present) if (!this._devices[node.deviceId]) { this._devices[node.deviceId] = { @@ -4232,7 +4248,8 @@ class ZwaveClient extends TypedEventEmitter { zwaveValue: TranslatedValueID, oldValues?: { [key: string]: ZUIValueId - } + }, + skipUpdate = false ) { const node = this._nodes.get(zwaveNode.id) @@ -4259,10 +4276,17 @@ class ZwaveClient extends TypedEventEmitter { `Node ${zwaveNode.id}: value added ${valueId.id} => ${valueId.value}` ) - if (updated) { + if (!skipUpdate && updated) { this.emitValueChanged(valueId, node, true) } + + return { + updated, + valueId, + } } + + return null } /**