Visuelle Programmierung für Sonoff Basic

Visuelle Programmierung für Sonoff Basic
Ein Artikel darüber, wie man aus einem günstigen chinesischen Gerät einen programmierbaren logischen Controller erstellen kann. Ein solches Gerät findet Anwendung sowohl in der Hausautomatisierung als auch als praktisches Projekt im Informatikunterricht der Schule.
Zur Information: standardmäßig arbeitet das Programm Sonoff Basic über eine mobile App mit einem chinesischen Cloud-Service. Nach der vorgeschlagenen Umrüstung wird die gesamte weitere Interaktion mit diesem Gerät im Browser möglich sein.

Abschnitt I. Anschluss von Sonoff an den MGT24-Dienst

Schritt 1. Erstellung eines Dashboards

Registrieren Sie sich auf der Website mgt24 (wenn Sie noch nicht registriert sind) und melden Sie sich mit Ihrem Konto an.
AnmeldungVisuelle Programmierung für Sonoff Basic

Um ein Dashboard für das neue Gerät zu erstellen, klicken Sie auf die Schaltfläche „+“.
Beispiel für die Erstellung eines DashboardsVisuelle Programmierung für Sonoff Basic

Sobald das Dashboard erstellt ist, wird es in der Liste Ihrer Dashboards angezeigt.

Im Tab „Installation“ des erstellten Dashboards finden Sie die Felder „Geräte-ID“ und „Autorisierungsschlüssel“. Diese Informationen sind später zur Konfiguration des Sonoff-Geräts erforderlich.
Beispiel-TabVisuelle Programmierung für Sonoff Basic

Schritt 2. Firmware des Geräts

Laden Sie mit dem Tool XTCOM_UTIL die Firmware des Sonoff Basic PLC auf das Gerät. Dafür benötigen Sie einen USB-TTL-Converter. Hier ist Anleitung und eine Videoanleitung..

Schritt 3. Geräteeinrichtung

Versorgen Sie das Gerät mit Strom. Sobald die LED aufleuchtet, drücken Sie die Taste und halten Sie sie gedrückt, bis die LED gleichmäßig zu blinken beginnt.
In diesem Moment erscheint ein neues WLAN-Netzwerk mit dem Namen „PLC Sonoff Basic“. Verbinden Sie Ihren Computer mit diesem Netzwerk.
Entschlüsselung der LED-Anzeige

LED-Anzeige
Gerätezustand

periodisches doppeltes Blinken
keine Verbindung zum Router

leuchtet kontinuierlich
Verbindung zum Router hergestellt

periodisches gleichmäßiges Blinken
WLAN-Access-Point-Modus

ausgeschaltet
keine Stromversorgung

Öffnen Sie Ihren Internetbrowser und geben Sie in die Adresszeile „192.168.4.1“ ein. Gehen Sie zu den Einstellungen des Gerätes.

Füllen Sie die Felder wie folgt aus:

  • „Netzwerkname“ und „Passwort“ (zur Verbindung des Geräts mit Ihrem heimischen WLAN-Router).
  • „Geräte-ID“ und „Autorisierungsschlüssel“ (zur Autorisierung des Geräts beim MGT24-Dienst).

Beispiel für die Netzwerkeinstellungen des GerätsVisuelle Programmierung für Sonoff Basic

Speichern Sie die Einstellungen und starten Sie das Gerät neu.
Hier eine Videoanleitung..

Schritt 4. Anschluss der Sensoren (optional)

Die aktuelle Firmware unterstützt bis zu vier Temperatursensoren ds18b20. Hier eine Videoanleitung. ist die Montage der Sensoren. Offensichtlich wird dies der komplizierteste Schritt sein, da er von Ihnen geschickte Hände und einen Lötkolben erfordert.

Abschnitt II. Visuelle Programmierung

Schritt 1. Erstellung von Skripten

Als Programmiersprache wird Blocklyverwendet, diese Umgebung ist einfach zu erlernen, sodass Sie keine Programmiererfahrung benötigen, um einfache Skripte zu erstellen.

Ich habe spezielle Blöcke für das Schreiben und Lesen von Geräteparametern hinzugefügt. Der Zugriff auf jeden Parameter erfolgt über den Namen. Für die Parameter ferner Geräte werden zusammengesetzte Namen verwendet: „parameter@gerät“.
Dropdown-Liste der ParameterVisuelle Programmierung für Sonoff Basic

Beispiel eines Skripts für zyklisches Ein- und Ausschalten einer Last (1Hz):
Visuelle Programmierung für Sonoff Basic

Beispiel eines Skripts, das die Arbeit zweier separater Geräte synchronisiert. Insbesondere wiederholt das Relais des Zielgeräts das Verhalten des Relais des entfernten Geräts.
Visuelle Programmierung für Sonoff Basic

Skript für den Thermostat (ohne Hysterese):
Visuelle Programmierung für Sonoff Basic

Um komplexere Skripte zu erstellen, können Variablen, Schleifen, Funktionen (mit Argumenten) und andere Konstrukte verwendet werden. Ich werde hier nicht alles detailliert aufschreiben, im Internet gibt es bereits recht viele Lernmaterialien zu Blockly.

Schritt 2. Ausführungsreihenfolge der Skripte

Das Skript läuft im kontinuierlichen Modus, und sobald es sein Ende erreicht, wird es erneut gestartet. Dabei gibt es zwei Blöcke, die die Ausführung des Skripts vorübergehend anhalten können: „delay“ und „pause.“
Der Block „delay“ wird für Millisekunden- oder Mikrosekundeverzögerungen verwendet. Dieser Block hält den Zeitintervall strikt ein und blockiert die Operation des gesamten Geräts.
Der Block „pause“ wird für Sekundenverzögerungen (auch kürzer) verwendet und blockiert nicht die Ausführung anderer Prozesse im Gerät.
Wenn das Skript eine Endlosschleife enthält, in deren Körper kein „pause“ steht, initiiert der Interpreter selbstständig eine kurze Pause.
Im Falle eines Erschöpfens des zugewiesenen Stapels wird der Interpreter die Ausführung eines solchen speicherhungrigen Skripts stoppen (seien Sie vorsichtig mit rekursiven Funktionen).

Schritt 3. Fehlersuche bei Skripten

Zur Fehlersuche eines bereits auf das Gerät geladenen Skripts kann die Programmverfolgung Schritt für Schritt gestartet werden. Dies ist äußerst nützlich, wenn sich das Verhalten des Skripts als nicht so herausstellt, wie es der Autor beabsichtigt hat. In diesem Fall ermöglicht die Verfolgung dem Autor, schnell die Fehlerquelle zu finden und den Fehler im Skript zu beheben.

Skript zur Berechnung der Fakultät im Debugging-Modus:
Visuelle Programmierung für Sonoff Basic

Das Debugging-Tool ist sehr einfach und besteht aus drei Haupttasten: „Start“, „Ein Schritt vorwärts“ und „Stopp“ (vergessen wir nicht die „Eingabe“ und „Ausgabe“ aus dem Debugging-Modus). Neben der schrittweisen Verfolgung kann an jedem Block ein Haltepunkt gesetzt werden (Durch Klicken mit der Maus auf den Block).
Um die aktuellen Parameterwerte (Sensoren, Relais) auf dem Monitor anzuzeigen, verwenden Sie den Block „print“.
Hier Überblicksvideo über die Verwendung des Debuggers.

Bereich für Neugierige. Was steckt darunter?

Damit die Skripte auf dem Zielgerät funktionieren, wurde ein Bytecode-Interpreter und ein Assembler mit 38 Instruktionen entwickelt. In den Quellcode von blockly wurde ein spezialisierter Codegenerator eingebaut, der visuelle Blöcke in Assemblieranweisungen umwandelt. Diese Assemblersprache wird dann in Bytecode umgewandelt und zur Ausführung an das Gerät übertragen.
Die Architektur dieser virtuellen Maschine ist recht einfach, und es macht wenig Sinn, sie zu beschreiben. Im Internet finden Sie viele Artikel über das Design von einfachsten virtuellen Maschinen.
Für den Stack meiner virtuellen Maschine reserviere ich normalerweise 1000 Byte, das reicht dicke aus. Natürlich können tiefe Rekursionen jeden Stack erschöpfen, aber es ist unwahrscheinlich, dass sie ein praktisches Anwendungsgebiet finden.

Der endgültige Bytecode ist ziemlich kompakt. Zum Beispiel beträgt der Bytecode zur Berechnung der gleichen Fakultät nur 49 Byte. Dies ist seine visuelle Darstellungsform:
Visuelle Programmierung für Sonoff Basic

Und das ist sein Assemblerprogramm:

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

Wenn die assemblermäßige Darstellungsform keinen praktischen Wert hat, bietet die Registerkarte „javascrit“ im Gegensatz dazu eine vertrautere Ansicht als visuelle Blöcke:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

Was die Leistung betrifft. Beim Start eines einfachen Szenarios für den Blinkgeber erhielt ich auf dem Oszilloskop-Bildschirm einen Rechtecksignal von 47 kHz (bei einer Taktfrequenz des Prozessors von 80 MHz).
Visuelle Programmierung für Sonoff BasicVisuelle Programmierung für Sonoff Basic
Ich halte das für ein gutes Ergebnis, immerhin ist diese Geschwindigkeit fast zehnmal schneller als die von Lua und Espruino.

Der abschließende Teil

Zusammenfassend möchte ich sagen, dass die Verwendung von Szenarien uns nicht nur ermöglicht, die Logik eines einzelnen Geräts zu programmieren, sondern auch die Verbindung mehrerer Geräte zu einem gemeinsamen Mechanismus, wo einige Geräte das Verhalten anderer beeinflussen.
Ich möchte auch anmerken, dass die gewählte Methode zur Speicherung der Szenarien (direkt in den Geräten und nicht auf dem Server) das Umschalten bereits funktionierender Geräte auf einen anderen Server, beispielsweise auf einen Heim-Raspberry, erleichtert; hier Anleitung.

Das ist alles, ich freue mich auf Ratschläge und konstruktive Kritik.

Quelle: habr.com

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster