Skip to content

Timeouts, Objekt, Logik und Schleifen ​

Diese Seite beschreibt die 18 Ergänzungen von 0.1.13 (damals 68 Blocktypen). Aktuell sind es 105 mit den weiteren Mathematik-, Text-, Listen- und Schleifenblocks aus 0.1.14.

Seit 0.1.13 ergänzen 18 neue Blocks den Editor, insgesamt 68 Blocktypen. Bilder und Funktionen aller Blocks. Grundlage sind die tatsächlichen Timeout-, Objekt-, Logik- und Switch-Blocks des ioBroker-JavaScript-Adapters. Die folgende Zuordnung erklärt Ähnlichkeiten und Grenzen; ioBroker-JavaScript wird nicht importiert.

Timeouts ​

ioBrokerUGSo Blocks für HAUnterschied
Pause, Einheit ms/sec/minPause mit ms/Sekunden/Minuten/Stunden und andockbarem WertNative HA-delay. Der aktuelle Ablauf wartet; keine Blockierung des Browsers.
Ausführen timeout in …, feste/variable DauerPause, anschließend AktionenHA führt die folgenden Schritte nacheinander aus. Kein unabhängig laufender Callback und kein benannter Timeout-Handle.
Stop timeoutHA-Script stoppen für ein separat gestartetes Script; Diesen Lauf stoppen für den aktuellen LaufStop beendet den gesamten aktuellen Lauf. Keine selektive Löschung eines ioBroker-Timeouts.
Verzögerung als HandleKein Handle-BlockHA-Scripts oder Timer-Helfer über System/Aktionen verwenden. Ein Timer-Helfer startet keinen eingebetteten Callback.
Ausführen Intervall alle …Wiederhole solange/bis und Pause im KörperSequentielle Wiederholung: Aktionsdauer plus Pause bestimmt den Abstand. Kein setInterval und keine parallelen überlappenden Ticks.
Stop zyklische AusführungSchleifenbedingung ändern oder separates HA-Script stoppenDiesen Lauf stoppen stoppt auch äußere Schleifen; entspricht keinem lokalen break.
Intervall als HandleKein Handle-BlockSeparat gestartete Scripts können über script.turn_off beendet werden.
Zusätzlich in UGSoWarte bis, begrenzte Wiederholung, Für jeden EintragNative HA-Steuerung einschließlich Timeout-Haken und Laufabbruch als Fehler.

Warte bis verwendet HA wait_template und einen verpflichtenden Timeout. Ohne „bei Timeout weiter“ endet der Lauf, sobald die Frist abläuft. Mit Haken folgen die nächsten Aktionen auch bei nicht erfüllter Bedingung. Entitätsabhängige Bedingungen verwenden: reine Zeit-/now()-Templates werden während wait_template nicht kontinuierlich neu ausgewertet. HA stellt danach wait.completed bereit, nutzbar im Template-Block. HA-Warten und Wiederholungen.

Solange prüft vor jedem Durchlauf; bis prüft danach und führt den Körper mindestens einmal aus. Eine Pause im Körper verhindert eine enge Dauerschleife. Millisekunden sind Mindestverzögerungen, keine Echtzeitgarantie. Ein HA-Neustart beendet laufende delays/waits; für persistente Zeitplanung separate Timer-/Auslöser-Strategien einsetzen. Timer-Helfer.

Konstante Dauer: 0–86400 Sekunden mit expliziter Einheit. Konstante Wiederholungsanzahl: 1–10000 ganze Durchläufe. Andockbare Variablen und Templates müssen gültige Laufzeitzahlen liefern; Prüfung und mögliche Fehler erfolgen in HA. Die Grenzen für Konstanten sind Editorgrenzen, keine garantierten Laufzeitlimits für Templates.

Objekt ​

ioBrokerUGSo BlockVerhalten
Neues Objekt mit ZahnradNeues Objekt mit Zahnrad und +/−0–100 Attribute, eindeutige frei benannte Schlüssel, beliebige Werte einschließlich verschachtelter Objekte/Listen.
Setze Attribut des Objekts auf WertSetze Attribut in Variable aufNeue HA-Variablenzuweisung an eine vorher gesetzte Objektvariable. Andere Variablenkopien bleiben unverändert.
Entferne AttributEntferne Attribut aus VariableNeues Dictionary ohne den Schlüssel; fehlt er, bleibt der Inhalt gleich.
Objekt hat AttributObjekt hat AttributBoolean-Test auf einen eigenen Dictionary-Schlüssel.
Attribute des ObjektsAttribute des ObjektsListe der Schlüssel, für die Für-jeden-Eintrag-Schleife verwendbar.
Attribut lesen, in ioBroker unter SystemAttribut von ObjektSchlüsselzugriff statt unsicherem Punktzugriff; fehlender Schlüssel ergibt null. Auch Namen wie keys/items funktionieren.

Diese Objekte sind lokale Werte eines Automationslaufs. Sie erzeugen keine Entitäten, verändern keine HA-Entity-Attribute und entsprechen nicht ioBroker-Datenpunktdefinitionen. Der Setter verwendet eine Variablenauswahl, damit die neue Zuweisung ein eindeutiges Ziel hat. Die Variable zuvor auf Neues Objekt, einen Dictionary-Templatewert oder JSON nach Objekt setzen. Ein anderer Typ erzeugt einen HA-Templatefehler.

Die unveränderliche Jinja-Sandbox erlaubt keine direkte Mutation über update/pop. UGSo erzeugt deshalb Dictionary-Kopien und weist diese neu zu. Keine JavaScript-Objektmutation und kein HA-Systemzugriff.

Logik und Original-Blockly ​

Die originalen Blockly-Logikdefinitionen umfassen Falls/sonst-falls/sonst, feste Falls/sonst-Variante, Vergleich, UND/ODER, NICHT, Boolean, null und bedingte Wertauswahl. Diese Grundfunktionen sind bei UGSo bereits vorhanden: Falls unter Aktionen, die Werte unter Logik, die erweiterbaren UND/ODER/NICHT-Gruppen unter Bedingungen und zusätzlich Logik. Auswahl und Verbindungsformen stammen von der originalen Blockly-Library; HA-YAML/Jinja wird von UGSo erzeugt.

ioBroker-ErweiterungUGSoSemantik
UND/ODER mit ZahnradBestehende erweiterbare Gruppe, auch unter Logik1–100 Boolean-Eingänge; +/− und Zahnrad zum Umordnen.
der Fall ist / im Falle von / machenDer Fall ist1–100 Fälle mit +/− und Zahnrad, optional belegter sonst-Körper. Erste Übereinstimmung gewinnt; kein JavaScript-Fallthrough.
min ≤ wert ≤ maxBereichsvergleichBeide Grenzen separat strikt oder einschließlich. Keine automatische Text-in-Zahl-Konvertierung; Nach Zahl bei Sensor-/Templatewerten einsetzen.
wenn leer … dann …Ersatzwert mit ModusauswahlStandard null/nicht gesetzt erhält 0/falsch/leeren Text. „leer/falsch/0“ ersetzt auch leere Listen und Dictionaries.

ioBroker verwendet beim Ersatzwert JavaScript-ODER: leere Arrays/Objekte sind dort wahr. Jinja/Python behandelt diese als falsch. Der zusätzliche Null-Modus verhindert, dass gültige Zahlen/Boolean versehentlich ersetzt werden. Nicht verfügbare Sensorzustände wie unknown/unavailable sind Texte; sie sind keine null-Werte und werden nicht automatisch ersetzt.

Fallvergleiche verwenden HA/Jinja-Gleichheit; Boolean und Zahlen können sich anders verhalten als beim JavaScript-switch. Der Testausdruck wird pro geprüftem HA-Zweig ausgewertet. Wechselnde Werte vorher in einer Variablen speichern und diese als Fallwert einsetzen, wenn alle Fälle denselben Schnappschuss vergleichen sollen.

Schleifen und Listen ​

Aus dem originalen Blockly-Schleifenumfang sind jetzt Wiederhole Anzahl, solange/bis und Für jeden Eintrag übertragen. Liste erstellen, Listenlänge und Liste ist leer orientieren sich an den originalen Listenblocks. Diese Funktionen gibt es auch in ioBroker-Kategorien außerhalb der drei gezeigten Menüs; sie werden nicht als ausschließliches ioBroker-Defizit dargestellt.

Liste erstellen unterstützt 0–100 beliebige Einträge mit Zahnrad/+−. Für jeden Eintrag erwartet eine Liste; aktueller Wert und 1-basierter Index stehen als HA repeat.item und repeat.index im Template-Block zur Verfügung. Länge/Leer prüfen echte Listen statt Text oder Dictionaries. Jinja kann daraus Laufzeitfehler melden, wenn der Eingang einen anderen Typ liefert.

yaml
actions:
  - variables:
      daten: '{{ {"attribute1": "alt"} }}'
  - variables:
      daten: '{{ dict((daten if daten is mapping else none), **{"attribute1": "neu"}) }}'
  - repeat:
      count: 3
      sequence:
        - delay:
            milliseconds: 1000
        - action: system_log.write
          data:
            message: '{{ repeat.index }}'
            level: info

Speicherung und offene Funktionen ​

Projekt-JSON bewahrt Blockformen, Reihenfolge und Attributnamen. YAML öffnet Pausen, waits, Stop und Wiederholungen direkt als entsprechende Blocks. Fallauswahl öffnet als bestehender Falls/choose-Block; komplexe Objekt-/Listen-/Logikwerte öffnen als allgemeine Templates. Das YAML-Verhalten bleibt erhalten, die ursprüngliche Form lässt sich daraus nicht eindeutig rekonstruieren. Seit 0.1.39 werden kombinierte Dauermappings, echte for_each-Listen und zusätzliche unterstützte HA-Optionsfelder unverändert erhalten. Erweiterte Abläufe und Jinja.

Periodische Auslöser, timer.finished und parallele Zweige sind inzwischen vorhanden. Benannte Timer werden über native HA-timer-Aktionen bedient; lokale break/continue-Semantik bleibt vorgemerkt. Feste ganzzahlige Zählschleifen und Listenbearbeitung sind seit 0.1.14 ergänzt. Diesen Lauf stoppen wird ausdrücklich nicht als break/continue ausgegeben. Eigene Entitätszustands-/Attribut-Wertblocks bleiben getrennte Aufgaben. Der Original-Blockly-Grundumfang enthält selbst keine ioBroker-Timeout-Engine und keine entsprechenden ioBroker-Objektblocks; das sind Erweiterungen des Adapters.

Verifiziert: Modell-/YAML-/Projekt-Rundläufe, Eingabefehler, unveränderliche Jinja-Sandbox mit Laufzeitwerten sowie Browserbedienung, Mutator und Undo. Ein Test gegen eine echte HA-Instanz ist noch offen.