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

60GB SSD 8Gb DDR4