Weiter zum Inhalt
  • Home
  • Aktuell
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Anwesenheitssimulation mit dauerhaftem Lernen

NEWS

  • Monatsrückblick Juli / August 2026 ist online!
    BluefoxB
    Bluefox
    9
    1
    319

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    1.3k

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.8k

[Vorlage] Anwesenheitssimulation mit dauerhaftem Lernen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascripttemplatesecurity
22 Beiträge 8 Kommentatoren 2.2k Aufrufe 18 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M mrMuppet

    @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:

    1. 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.
    2. Abwesenheit: Du bist um 16:30 Uhr generell nie zuhause. Das Skript zeichnet nur auf, wenn der Anwesenheits-Datenpunkt auf true steht.
    3. 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.
    NashraN Offline
    NashraN Offline
    Nashra
    Most Active Forum Testing
    schrieb am zuletzt editiert von
    #21

    @mrMuppet
    Danke für die gute Erklärung 👍

    Gruß Ralf
    Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    1 Antwort Letzte Antwort
    0
    • G Offline
      G Offline
      Gaunt
      schrieb am zuletzt editiert von
      #22

      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.

      1 Antwort Letzte Antwort
      0

      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
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      388

      Online

      33.0k

      Benutzende

      83.7k

      Themen

      1.3m

      Beiträge
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
      ioBroker Community 2014-2026
      logo
      • Anmelden

      • Du hast noch kein Konto? Registrieren

      • Anmelden oder registrieren, um zu suchen
      • Erster Beitrag
        Letzter Beitrag
      0
      • Home
      • Aktuell
      • Ungelesen 0
      • Kategorien
      • Unreplied
      • Beliebt
      • GitHub
      • Docu
      • Hilfe