Was soll das Programm können?
In diesem Kapitel befasse ich mich mit der Programmierung meiner NodeMCU. Im Gegensatz zu der Programmierung mit Arduino, wo das Steuerprogramm direkt in die NodeMCU gespeichert wird, steuern wir hier den NodeMCU aus dem ioBroker. Dazu ist es erforderlich eine Routine mit dem Hilfsprogramm Blockly zu erstellen. Da meine Kenntnisse in Hinblick auf Programmierung nicht all zu groß sind, kann es sein das mein Programm nicht den Erwartungen der Profis entspricht, aber es funktioniert und soll lediglich den Umgang in Blockly nahe bringen. Vermutlich kann man auch auf anderem Wege zum Ziel finden.
Ich will dies nun an Hand des Projektes aus dem vorherigen Kapitel C4b tun. Die rote und die grüne LED sollen in Abhängigkeit von der Temperatur leuchten. Und zwar soll die Grüne leuchten wenn die Temperatur größer 20° C beträgt, während die Rote leuchten soll wenn es 20° C oder weniger ist. Dabei soll jeweils nur eine LED leuchten.
Telemetriezeit:
Die Telemetriezeit kann von 300 auf 10 (kleinste Einstellung) heruntersetzt werden, damit die NodeMCU sich alle 10 Sekunden berichtigt (siehe Bild). Ansonsten würde eine Änderung nur alle 5 Minuten erfolgen, was bei diesem Beispiel zu lange dauert.
Nach einer längeren Testphase stellte sich allerdings heraus, dass eine etwas höhere Telemetriezeit (z.B 30) die NodeMCU stabiler laufen lässt. Einen Messwert alle 30 Sekunden ist für eine Temperaturmessung auch völlig ausreichend.
Arbeiten mit Blockly:
Zunächst lege ich einen neuen Skript an.
Neuen Skript füllen:
Ich wähle zunächst einen Kommentar um mein Projekt zu beschreiben und weitere Kommentare damit ich den Überblick nicht verlieren was in meinem Programmablauf vor sich geht. Diesen Kommentar zihe ich in die Arbeitsfläche (Bild 3).
Als nächstes lege ich einen Trigger auf meine Arbeitsfläche. Der Trigger soll auf ein Ereignis warten. Wenn dieses Eintritt soll er den weiteren Programmablauf starten (Bild 4).
Nun bearbeite ich meinen Trigger auf der Arbeitsfläche. Dazu wähle ich als erstes Object ID aus. (Bild 5)
Nach Anklicken, öffnet sich das Fenter der „ioBroker Objekte“. Darin wähle ich das Objekt auf welches der Trigger reagieren soll. In meinem Fall die Temperatur des ESP8266-x (Bild 6). Noch mit OK bestätigen und unter Object ID steht nun das Temperatur von ESP8266-x Oblekt.
Im Trigger änder ich außerdem von „wurde geändert“ auf „wurde aktualisiert“. Jetzt startet der Trigger bei jeder Aktualisierung des Temperaturwertes und nicht erst wenn sich der Wert tatsächlich ändert. Also entsprechend unserer Telemetriezeit (s.o.). So erreiche ich wesentlich mehr Prüfvorgänge. Das Programm sieht nun so wie in Bild 7 aus.
Im nächsten Schritt lege ich das Programm an, das nach Ansprechen des Triggers ablaufen soll.
Ich ziehe dazu die Logik „falls – mache“ auf die Arbeitsfläche (Bild 8).
Außerdem benötige ich noch eine Logik zum Vergleich der gemessenen Temperatur mit der von mir festgelegten. Dazu füge ich den Wertevergleich in mein Programm ein (Bild 9).
Nun sieht das Programm wie in Bild 10 aus. Die beiden leeren Felder (1 u. 2) müssen noch befüllt werden (Bild 10).
In Feld 1 kommt der Wert von Objekt ID (Bild 11).
Als Ojekt ID wähle ich wieder den Temperatursensor wie oben beschrieben aus (Bild 12).
Die Einstellung Wert belasse ich, da ein Zahlenwert ausgewertet wird. Nämlich die Temperatur mit meinem Schwellwert.
In das Feld 2 im Bild 12 soll mit einem Zahlen-Wert verglichen werden, daher muß hier die mathematische funktion Zahl eingesetzt werden (Bild 13).
Außerdem ist die Einstellung für den Vergleich von = auf > (größer) zu setzen.
Das ganzes Programm sieht nun so wie in Bild 14 aus und besagt, wenn der Wert der Temperatur größer 20 °C ist dann mache folgendes.
Ich weiss, wenn der Wert meiner festgelegten Temperatur größer 20 °C ist soll irgendwas passieren. Was das ist muss ich nun weiter festlegen.
In meinem Fall soll etwas gesteuert werden. Und Zwar soll die grüne LED leuchten. Demzufolge benötige ich einen Steuer-Block (Bild 15). Diesen Ziehe ich nun in den „falls – mache“ Block (Bild 16).
In dem Steuer Block ändere ich als erstes die „Objekt ID“ für die grüne LED unter „ESP8266-x Power1“ und bestätige mit OK (Bild 16 u. 17).
Als nächstes setze ich in das Feld, das ich mit 3 gekennzeichnet habe eine Logik ein, die mir sagt, ob mein Schalter die Stellung „wahr“ oder „falsch“ einnehmen soll (Bild 18). Wahr bedeutet LED leuchtet, falsch sie leuchtet nicht.
In Bild 19 ist nun das bisherige Programm zu sehen. Meine grüne LED leuchtet wenn die Temperatur größer 20 °C ist. Aber was ist mit der roten LED? Die soll aus sein. Auch dieser Zustand ist dem Programmablauf mitzuteilen.
Um weiter Blöcke zu erstellen, kann ich es mir ab hier einfach machen. Ich habe die Grüne LED zum Leuchten gebracht. Mit dem gleichen Block kann ich nun die rote LED aus Schalten. Hier sind allerdings die Parameter zu ändern. Ich kopiere kurzer Hand meinen Steuer-Block mit: Markieren – rechte Maustaste – Kopieren (Bild 20).
Die duplizierte Zeile ziehe ich nun unter die erste und ändere die Parameter. Das bis hier hin fertige Programm, sieht wie in Bild 21 aus.
Das Programm schaltet nun bei Überschreitung von 20 °C die grüne LED an und die rote LED aus. Soweit so gut. Ich habe aber noch einen weiteren Zustand. Ist die Temperatur gleich oder kleiner 20 °C, soll das Spielchen genau anderst herum ablaufen. Da dies nur eine Umkehr meines bisherigen Programms ist, sind die benötigten Blöcke schon vorhanden. Lediglich wieder mit anderen Parametern.
Ich kopiere somit den erstellten falls-mache Block, wie bereits beschrieben (Bild 22).
Den duplizierten „falls – mache“ Block ziehe ich in meinen bereits erstellten Trigger-Block, nicht unter ihn!
Nun noch die Parameter ändern (Bild 23) und mein Programm ist fertig (Bild 24).
Zum Schluss noch Speichern und das Skript aktivieren.
Damit ist das kleine Programm fertig und ich kann testen ob es auch das macht was es soll.
Ich habe mit diesem Skript noch einmal die prinzipielle Arbeitsweise mit Blockly und auch was mit einem NodeMCU ESP8266 möglich ist zeigen wollen.
Achtet aber darauf, wenn ihr Steuerungen entwerft, was ihr steuert und welche Konsequenzen eine fehlerhafte Steuerung mit sich bringen kann. Gerade bei Temperatursteuerungen lauern erhebliche Gefahren.