NEWS
[Vorlage] Anwesenheitssimulation mit dauerhaftem Lernen
-
@Nashra
Hi,
die Meldung ist völlig harmlos und ganz leicht zu erklären.
Das Skript teilt den Tag in 15-Minuten-Blöcke (die sogenannten "Slots") auf. Slot 66 entspricht dabei exakt 16:30 Uhr.
Wenn du zuhause bist (Lern-Modus), macht das Skript alle 15 Minuten einen Snapshot aller Lampen und Rollläden und speichert die Zustände in dem jeweiligen Slot ab. Wenn du dann abwesend bist (Ghost-Modus), schaut das Skript um 16:30 Uhr in Slot 66 nach, welchen Zustand es aus der Vergangenheit laden und abspielen soll.
Die Warnung "Slot 66 ist leer" bedeutet schlichtweg: Das Skript hat in seiner Datenbank für genau diese Uhrzeit noch keine einzige Aufzeichnung gefunden.
Das hat meistens einen dieser Gründe:- Laufzeit: Das Skript läuft noch nicht lange genug im Lern-Modus. Wenn du es z. B. erst gestern Abend eingerichtet hast, konnte es 16:30 Uhr noch gar nicht "miterleben" und aufzeichnen.
- Abwesenheit: Du bist um 16:30 Uhr generell nie zuhause. Das Skript zeichnet nur auf, wenn der Anwesenheits-Datenpunkt auf true steht.
- Downtime: Der ioBroker oder das Skript liefen an den vergangenen Tagen genau um diese Uhrzeit nicht.
Du musst hier gar nichts unternehmen. Das Skript überspringt diesen Durchlauf, belässt das Haus für die nächsten 15 Minuten einfach in dem Zustand, in dem es gerade ist, und macht um 16:45 Uhr (Slot 67) ganz normal weiter. Du kannst die Warnung also einfach ignorieren.
@mrMuppet
Danke für die gute Erklärung
-
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
.brightnessalso 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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden