Blockly – System-Blöcke
In dieser Artikelserie möchte ich das Thema Blockly in ioBroker näher erklären. Im Artikel werden wir uns gemeinsam die System-Blöcke ansehen.
1. Debug output
Im ersten kleinen Beispiel zeige ich Dir, wie Du Dir die aktuelle Uhrzeit in einem Script ausgeben kannst. Im Beispiel habe ich dazu einen Trigger auf den Datenpunkt Sensor.Bodenfeuchtigkeit angelegt, der bei einer Veränderung die aktuelle Uhrzeit über den Debug output Block in das ioBroker Log ausgibt. Als Art des Log-Eintrags kann zwischen info, debug, warn und error unterschieden werden.
2. Kommentar
Mit dem Kommentar-Block kannst Du im Blockly-Script eigene Kommentare und Informationen integrieren. Im folgenden Script verwende ich den Kommentar-Block für die Beschriftung von Triggern.
3. Steuere
Der Steuere Block wird verwendet um ein Gerät zu steuern (ack=true). Über den Block kann zum Beispiel ein Gerät ein- oder ausgeschaltet werden. Für den zu schreibenden Wert können feste Werte (true/false) oder auch eigene Variablen verwendet werden. Im folgenden Beispiel verwende ich den Block zur Steuerung eines Lichts über den Astro-Block.
Des weiteren kann hier auch eine Verzögerung des Steuerns-Vorgang aktiviert werden. Damit ist es möglich den Steuern-Vorgang zeitlich zu verzögern.
4. Umschalten
Mit dem Umschalten-Block wird der Wert eines Datenpunktes umgeschaltet. In meinem Beispiel funktioniert der Taster als Ein- und Ausschalter für eine Lampe. Wird der Taster gedrückt wenn die Lampe ausgeschaltet ist, so wird die Lampe eingeschaltet. Ist die Lampe eingeschaltet, so wird sie ausgeschaltet. Auch hier kann wieder eine Verzögerung für den Schaltvorgang aktiviert werden.
5. Aktualisieren
Mit dem Block aktualisieren wird der Wert eines Datenpunkt gesetzt. Im folgenden Beispiel verwende ich wieder den Taster um damit den Zeitpunkt des Tastendrucks in einem eigenen Datenpunkt zu dokumentieren. Im Datenpunkt wird der Zeitstempel des Tastendrucks vermerkt.
6. Binde Object
Mit dem Block Binde Object kann zwei Datenpunkte synchronisiert werden. Mit dem hier dargestellten Beispiel-Script wird das State des Fernsehers mit dem State der Stehlampe synchronisiert. Wenn der Fernseher eingeschaltet wird, wird automatisch auch die Stehlampe eingeschaltet. Mit der Einstellung „nur Änderungen“ wird die Synchronisierung nur für Wert-Änderungen aktiviert.
7. Schreibe
Der Block Schreibe steuert oder aktualisiert den angegebenen Datenpunkt mit übergebenen Wert. Zudem kann hier ebenfalls eine Verzögerung in Millisekunden hinterlegt werden. Die Einstellung löschen falls läuft wird verwendet um die Verzögerung zu beenden, falls der Wert nochmals geändert wurde.
8. Datenpunkt erzeugen
Mit dem Block Datenpunkt erzeugen können wir über ein Script einen eigenen Datenpunkt anlegen. Hierfür muss die Objekt ID fest im Block hinterlegt werden. Mit der Einstellung Init-Wert wird der Wert nach der Erzeugung initialisiert. Über die Common Einstellung können zusätzliche Definitionen über ein JSON-Zeichenkette mitgegeben werden. Im Beispiel verwende ich hier folgende Einstellungen für das Setzen des minimalen, maximalen und der Einheit des Datenpunkts:
{ "type": "number", "min": 0, "max": 100, "unit": "%" }
Innerhalb des Blocks können dann noch weitere Blöcke hinterlegt werden, die nach Fertigstellung der Datenpunkt Erzeugung ausgeführt werden.
9. Wert von Objekt ID
Mit dem Block „Wert vom Objekt ID“ können wir im Script einen beliebigen Datenpunkt auslesen und den Wert zurückgeben. Über das DropDown-Menü können wir hier den eigentlichen Wert, den Zeitstempel der letzten Änderung sowie auch die Quelle oder das Ack-Flag auslesen. Im folgenden Beispiel sende ich mir den aktuellen Zisternen Füllstand über den Taster.
10. RegExp
Block für eine reguläre Expression. Dieser Block kann zum Beispiel als Auslösebedingung für einen Trigger eingesetzt werden. Im folgenden Artikel wird das Thema ausführlicher beschrieben:
- Einführung in Blockly
- Logik
- Trigger
- Funktionen
- Zeitplanung zur Schaltung von Aktoren
- Fehlersuche mit dem Debug-Output Block
- Blockly-Script optimieren und vereinfachen
- Trigger
- Trigger auf mehrere Datenpunkte
- Mit dem ID-Selektor auf Veränderungen reagieren
- Trigger auf mehrere Datenpunkte
- Debug output
- Kommentar
- Steuere
- Umschalten
- Aktualisieren
- Binde Object
- Schreibe
- Datenpunkt erzeugen
- Wert von Object ID
- Zeichenfolge parsen
- Zeichenfolgen anhängen
- Zeichenfolgen verbinden
- Länge einer Zeichenfolge ermitteln
- Zeichenfolge umwandeln
- Leerzeichen an Zeichenfolge entfernen
- Zeichenfolge bestimmtes Zeichen/Zeichenfolge ermitteln
- Buchstaben oder Zeichenfolge in Zeichenfolge suchen
- Nach mehreren Zeichenfolgen suchen
- Aktuelles Datum und Uhrzeit ermitteln
- Aktuelle Uhrzeit vergleichen
- Konvertierung von Datumsformaten
- Aktuelle Zeit von Astrozeitpunkt
- Sekunden zum Datum addieren
- Konvertierung nach Zahl
- Konvertierung nach Logikwert
- Konvertierung nach String
- Typ von Block
- Konvertierung nach Datum/Zeit
- Konvertierung Datum/Zeit nach…
- Länge einer Liste ermitteln
- Inhalt einer Liste sortieren
- Liste aus Zeichenfolge mit Trennzeichen ermitteln
- Werte aus Liste auslesen
- Summe über Liste
- Wiederhole X mal
- Wiederhole solange
- Definierte Schleife (For-Schleife)
- Liste per Schleife durchlaufen
- Summen bilden
- Mathematische Konstanten für Berechnungen
- Wert erhöhen/verringern
- Runden von Werten
- Zufallszahl generieren
- Rest einer Division
- E-Mails versenden
- Nachrichten mit dem Telegram-Adapter versenden
- Telegram Nachrichten formatieren
- Web-Request für HTTP-Requests
- URL Encode mit JavaScript-Funktions Block
- ComingHome Lichtsteuerung
- Fernsterüberwachung mit Benachrichtigung
- VIS View Wechsel
- Aktion nur einmal pro Tag ausführen
- Warnung bei geöffneter Tür nach eingestelltem Zeitraum
- Vergleich von 3 Werten
- Aktion verzögert ausführen
- Zahl/Wert in Klartext
- Abendliche Prüfung auf geöffnete Fenster oder Türen
- Benachrichtigung wenn Tür länger als 1 Minute offen steht
- Erinnerung Mülleimer-Leerung
- Eigenes Logging in ioBroker – Teil 2 – Nutzung in Blockly
- Weihnachtsbeleuchtung steuern
- Adapter-Updates per Telegram-Nachricht empfangen
- Telegram Nachrichten an bestimmte Personen oder Gruppen versenden
Ich hoffe Dir gefällt der Artikel. Ich freue mich über Deinen Kommentar oder Fragen zum Thema 🙂
Ich habe noch eine Anmerkung zum Ack-Flag: Der Parameter „write“ im zu ändernden Object muss auf „true“ gesetzt werden (oder sein). Sonst wird im Log ein Fehler gemeldet und das Ack-Flag nicht gesetzt. Habe den Fehler gemacht und erst gedacht, dass ich den falschen Block zum Ändern benutzt hätte.
Hallo,
wie kann man eine Bindung aufheben (Punkt 6.) und gegen eine andere Bindung ersetzen?
Ich habe es versucht mit einer zweiten Anweisung, aber anscheinend werden beide Bindungen aufrecht erhalten.
mfg
Thomas
Hallo
Erstmal danke das du dir soviel Mühe gibst.
Habe schon das ein oder anderen von deinem Blog gelernt. Trotzdem habe ich gerade ein Problem wo ich einfach nicht weiterkomme. Möchte gerne das meine Siemens Waschmaschie iq 700 die ich schon bei iobroker drin habe wenn sie fertig ist eine WhatsApp schreibt Maschine ist feritg. Das läuft auch so ganz gut es gibt aber 2 Zustände im State run und finished und jedesmal wenn sich der Wert ändert bekomme ich die Nachricht Maschine ist fertig möchte aber nur eine Meldung haben wenn sie auf den Wert finished springt schaffe es aber nicht im Blockly was zu bauen was den Wert explizit finished abruft.
Das du nen Tipp Gruß stefan