Bitte hier nicht antworten
Dieser Thread soll den blutigen Anfängern in Sachen Blockly ein wenig Starthilfe bieten und helfen, die ersten Hürden zu meistern und die häufigsten Fallstricke zu vermeiden.
Fragen/Anmerkungen/Änderungen/Ergänzugen bitte ausschließlich hier!
Dokumentation
Du bist neu bei Blockly?
Dann mach Dir die Mühe und schau Dir die Doku an, bevor Du im Forum einen neuen Beitrag eröffnest.
Die Erfahrung zeigt, dass immer wieder die gleichen "Probleme" behandelt werden.
https://www.iobroker.net/#de/documentation/logic/blockly.md
Script starten/stoppen/pausieren
Ein Blockly-Script wird in ioBroker (genau wie ein reines JavaScript) grundsätzlich zunächst erstellt und dann auch gestartet. Danach läuft es dauerhaft und wird (außer in sehr seltenen Ausnahmefällen) nicht gestoppt oder neu gestartet.
ACHTUNG: Scripte - egal welcher Art - gehören nur in sehr seltenen Ausnahmefällen in den Ordner "global". Du solltest Dir eine sinnvolle Ordnerstruktur - im Normalfall unterhalb von "common" - ausdenken.
Namensgebung:
Die Namen von Scripten sollten keine Leer- oder gar Sonderzeichen enthalten. Das gilt insbesondere für Umlaute.
Statt einem Leerzeichen solltest Du einen Binde- oder Unterstrich verwenden.
Diese Regel gilt grundsätzlich auch für Datenpunkte und Variablen!
Wobei man bei Variablen auch auf den Bindestrich verzichten sollte. Der wird zwar intern in einen Unterstrich gewandelt, aber wenn man später mal in JS programmiert, erzeugt man sich schnell eine Subtraktion.
Trigger und Zeitpläne
Alles was auf Ereignisse reagieren bzw. zu bestimmten Zeiten oder zyklisch ablaufen soll, benötigt einen "Trigger" oder "Zeitplan".
ACHTUNG: Was außerhalb dieser Blöcke platziert wird, wird genau 1x - beim Start des Script - ausgeführt.
Mehr dazu hier
Werte auslesen
Werte aus Datenpunkten werden (in den meisten Fällen) mit diesem Baustein gelesen:
ACHTUNG:
Wenn der Wert desjenigen DP benötigt wird, der mit dem Trigger überwacht wird, muss der Wert nicht mit dem "Wert von" Baustein gelesen werden.
Stattdessen verwendest Du diesen Baustein:
und änderst ihn anschließend von "Objekt ID" auf "Wert".
(Ab Version 7.5 des JS-Adapters ist "Wert" hier bereits die Vorgabe).
Wenn der Trigger ausgelöst wurde, sind (so ziemlich) alle Eigenschaften des betroffenen DP bereits bekannt.
Hier nochmal zu lesen ist unnötig und kann zu Fehlern führen.
ACHTUNG:
Das hier ist etwas völlig anderes und liefert das komplette Objekt - also den ganzen DP und nicht nur seinen Wert:
Mehr dazu hier
Werte schreiben (Datenpunkte ändern)
Grundsätzlich gibt es zwei unterschiedliche Wege, einen Wert in einen DP zu schreiben.
Steuere
Dieser Baustein wird für alle DP verwendet, die einem Adapter "gehören". Das gilt auch für Alias-Datenpunkte, die auf einen Adapter-DP zeigen.
Aktualisiere
Verwende diesen Baustein nur für eigene DP, die Du unterhalb von 0_userdata.0
selbst angelegt hast.
Mehr dazu hier
Variablen
Variablen dienen dazu, ermittelte oder berechnete Werte für die weitere Verarbeitung vorzuhalten.
Variablen werden manuell erstellt und sind im gesamten Script gültig.
Variablen sollten überall dort eingesetzt werden, wo ansonsten der Wert aus einem DP mehrfach ausgelesen werden müsste.
Auch die Les- und Wartbarkeit eines Scriptes lässt sich durch die Verwendung von Variablen deutlich verbessern.
Insbesondere komplexe Prüfungen werden durch Variablen deutlich besser lesbar und damit verständlicher.
Mehr dazu hier
... to be continued