Erste Ideen zum zielführenden erstellen von Skripts für Shelly Geräte der zweiten Generation.

Es wird ein Shelly Plus 1 (PM) zugrunde gelegt. Falls du einen Shelly Plus 2 PM nutzt, verwende den ersten Eingang und den ersten Ausgang, jeweils mit der Id = 0! Andernfalls musst du in deinem Skript die Id 1 statt 0 verwenden.

Vorbereitungen:
Schließe für Funktionsprüfungen an den Ausgang einen elektrischen Verbraucher an, bspw. eine Leuchte!
Verbinde den Eingang (SW) mit einem Schalter!
Versorge den Shelly mit einer geeigneten Betriebsspannung!
Teste die Funktion des Shelly! Er muss die Leuchte nach Betätigung des Schalters schalten.
Erst dann, wenn diese Funktion sichergestellt ist, fahre mit den Implementationen der unten aufgelisteten Projekte fort!

Darin sind evtl. Konfigurationsschritte vorzunehmen, in jedem Fall aber zumindest ein Skript zu erstellen. Mitunter kannst du ein bereits erstelltes Skript in einem anderen Projekt übernehmen (kopieren) und anpassen. Mehr Übung ergibt allerdings der Beginn mit einem leeren Skript und die händische Eingabe des Codes. Unabhängig davon, wie du dabei vorgehst, solltest du dafür sorgen, dass nie mehr als ein Skript läuft, damit du weniger verwirrt werden kannst. 😋

Hilfreiche Informationen kannst du u.a. auf der Dokumentations-Website  von Allterco Robotics finden, s.a. die Liste an nützlichen Verweisen zu Shelly Geräten auf dieser Website. Zum JSON Format sollte sich im WWW einiges per Suchmaschine finden lassen. Ich bin selbstverständlich auch bereit, hierzu während eines Treffens Auskunft zu geben.


  1. Die Veränderung des Schaltausgangs soll per print() Aufruf in der Konsole mit für Laien verständlichem Text angezeigt werden. Es sind verschiedene auslösende Ereignisse möglich - Spannungsänderung am SW-Eingang (Schalter), Button im Web-UI, RPC-Aufruf in Browser-Adresszeile, Sprachassistent. Nutze zum experimentieren möglichst viele davon!
    Skriptname: output_status
    1. Es soll ausschließlich der aktuelle Zustand des Ausgangs ausgegeben werden. 
      Ein gezielter Zugriff auf die geeignete Information erfolgt per Punktnotation, wie event.xxx. xxx steht für einen Teil der importierten Datenstruktur im JSON Format, den du selbst als geeignet herausfinden sollst.

    2. Nun soll die Ursache, also der Auslöser des Schaltens zusätzlich per print() ausgegeben werden.
      Hierzu ist die erweiterte Auswertung des importierten Parameterwertes (event) zielführend.


  2. Der Ausgang soll ausschließlich per Skript geschaltet werden, nicht unmittelbar per Schalter.
    Skriptname: switch_control
    1. Trenne in der Shelly Konfiguration die funktionale Verbindung des Schalteingangs (SW) mit dem Schaltausgang (I - O)!
      Nun darf die Betätigung des Schalters den Zustand der Leuchte nicht mehr verändern, da zwischen Eingang und Ausgang keine funktionale Verbindung besteht. Erst wenn dies der Fall ist, fahre mit dem nächsten Schritt fort!
      Hinweis: Die Firmware erfasst nach wie vor Änderungen am Eingang (SW) als Ereignis, verbindet dies jedoch nicht mehr mit dem Schalten des Ausgangs.

    2. Erstelle ein Skript mit Eventhandler und dessen Registrierung in der Firmware!
      Der Eventhandler, die sog. callback Funktion, soll zunächst ausschließlich die Information ausgeben, welcher Zustand am Eingang vorliegt. Hierzu ist der importierte Parameter zu nutzen.

    3. Erweitere das Skript nun so, dass dein Eventhandler mit Änderung des Eingangszustandes den Ausgang umschaltet (toggle)! Bei Erfolg schaltet der Shelly nun wie gewohnt, mit dem Unterschied, dass nun das Skript diese Funktionalität implementiert. Dies kannst du leicht testen, indem du zwischenzeitlich das Skript anhältst. Dann darf sich der Ausgangszustand nicht mehr ändern, wenn du den Schalter betätigst.

      Hiermit hat dein Skript die Steuerung des Ausgangs auf Grund von Eingangssignaländerungen übernommen, hier  die Betätigung des angeschlossenen Schalters. Prinzipiell besteht nun die Möglichkeit, das Schalten per Schalter zu sperren und freizugeben. Ein solches Freigeben bzw. Sperren ist bspw. per Zeitpläne (Schedule Jobs) oder per Nachricht an den Shelly möglich.


       
  3. Vielleicht fällt uns noch ein weiteres Projekt ein, welches wenig Programmieraufwand erfordert. 😇


Es gibt keinen besten Weg, aber viele ungeschickte, mitunter umständliche Wege mit Unfallpotential.
Versuche, zumindest einen einfachen, geeigneten Weg zu finden!
Bemühe dich dabei um unterschiedliche Perspektiven! 🙃