Moin,
erstmal danke für diese Skript. Idee und Umsetzung ist hervorragend. ich habe mich in der vergangene Woche etwas an das ausprobieren gemacht.
Meine Lampen habe ich über die Enums eingebunden dafür habe ich jeweils den direkten Schaltaktor der Lampe .on bzw. .state in das enum kopiert.
Die Lampen werden erkannt und im Snapshot abgelegt (ich habe mir den Pfad nach javascript Verzeichniss
const DP_STORAGE: string = 'javascript.0.Anwesenheitssimulation.Snapshot_DB';
abgelegt, finde ich persönlich etwas angenehmer den Datenpunkt dort liegen zu haben. Technisch sollte das egal sein.
Dann ist mir ein Fehler aufgefallen. Ich habe angefangen mit 2 dimmbaren Lampen zu testen. Die erste ist über hue verknüpft und die zweite ist mittels zigbee verknüpft.
Um es etwas übersichtlicher zu machen verzichte ich hier auf hue und beschreibe mein Problem mit dem Zigbee Leuchtmittel.
Der Status (on/off) wurde immer korrekt vom Skript erkannt. Der Dimmwert wurde jedoch nicht erkannt.
Das hat zu folgendem Snapshot geführt:
,"75":[{"zigbee2mqtt.0.0xxxxxxxxxxxxxxxcb.state":{"on":true}}]
,"76":[{"zigbee2mqtt.0.0xxxxxxxxxxxxxxxcb.state":{"on":true}}]
,"77":[{"zigbee2mqtt.0.0xxxxxxxxxxxxxxxcb.state":{"on":true}}]
Also Fehlersuche durchgeführt. Das Ergebnis dann doch relativ simpel.
Scheinbar ist Javascript (manchmal) CaseSensitiv. In der Zeile 93 werden die Namen des datenpunkte für den Dimmwert zusammengebaut.
const briCandidates = ['LEVEL', 'ACTUAL', 'BRIGHTNESS', 'DIMMER', 'SET'];
der von Zigbee angelegte Datenpunkt heißt jedoch
.brightness
also habe ich die Zeile entsprechend geändert und das .brightness mit eingefügt.
const briCandidates = ['LEVEL', 'ACTUAL', 'BRIGHTNESS', 'brightness', 'bri', 'DIMMER', 'SET'];
und schon wird der Dimmwert der Zigbeeleuchte erkannt. Der Snapshot sah dann wie folgt aus:
,"82":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true}}]
,"83":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true}}]
,"84":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true,"bri":25}}] //Änderung mit .brightness aktiv
,"85":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true,"bri":25}}]
,"86":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true}}] //Rückgängig machen zur Verifizierung
,"87":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true,"bri":25}}]
,"88":[{"zigbee2mqtt.0.0xf0d1b800001d0ccb.state":{"on":true,"bri":25}}]
Anschließend habe ich noch .bri hinzugefügt. denn nun wird auch der Dimmwert der hue Lampe erkannt. Denn Hue verwendet den Namen .bri um das dimmen anzusteuern.
Meine Zeile sieht nun so aus.
const briCandidates = ['LEVEL', 'ACTUAL', 'BRIGHTNESS', 'brightness', 'bri', 'DIMMER', 'SET'];
Die anderen Namen habe ich nicht in Verwendung. daher habe ich sie nicht angepasst. Ggf könne wir hier ja eine Sammlung erstellen die alle Schreibweisen enthält. .BRIGHTNESS lässt sich ja auch .Brightness schreiben.
Warum scheint Javascript nur manchmal CaseSensitiv zu sein? in Zeile 84&85 wird der Pfad für den Status der Lampe gebaut.
if (obj && obj.type === 'channel') {
if (existsState(`${id}.STATE`)) powerId = `${id}.STATE`;
else if (existsState(`${id}.ON`)) powerId = `${id}.ON`;
}
An dieser Stelle ist on und state ebenfalls als CapsLock geschrieben. hue verwendet die Bezeichnung .on und zigbee verwendet .state (beides vollständig klein geschrieben). An dieser Stelle funktioniert die Erkennung des Zustandes jedoch.