Shellies der zweiten Generation

  • Ich habe mich mit den Möglichkeiten der Shellies der zweiten Generation beschäftigt. Die bisher von mir genutzten Geräte sind Shelly 1 Plus und Shelly i4. Diese beinhalten den Mikrocontroller ESP32, welcher erheblich mehr Ressourcen besitzt als der in die Jahre gekommene ESP8266.

    Die neuen Shellies bieten u.a. die Möglichkeit, die Funktionalitäten durch zusätzliche Scripts zu erweitern bzw. den eigenen Bedürfnissen anzupassen. Hierfür steht die Programmiersprache Shelly Script zur Verfügung, ein stark reduziertes JavaScript mit zusätzlichen Funktionen. Diese zusätzlichen Funktionen nutzen in der Firmware verfügbare Informationen und Ereignisse. Die Sprache ist einigermaßen gut beschrieben unter Shelly Script Language Features.

    Ich beschäftige mich nach wie vor privat mit komfortablen Steuerungen von Gartenbewässerungen, die auch aus der Ferne nutzbar sind. Hierfür habe ich drei virtuelle Geräte (VG) implementiert, die per MQTT kommunizieren. Jedes VG ist per Script implementiert.

    • "switch" ist ein Schalter, der auf Schaltereignisse und auf Schalten-Nachrichten reagiert. Er erfasst jeweils die Einschaltzeit und die Einschaltdauer. Beide Informationen sendet er nach dem Ausschalten. So ist immer ablesbar, wann und wie lange zuletzt bewässert wurde.
    • "mono" ist ein parametrierbares Monoflop. Mit dem Einschalten wird es getriggert und sendet nach Ablauf der eingestellten Dauer eine Nachricht, die bspw. "switch" zum ausschalten bewegt. Nach der Triggerung läuft ein Abwärtszähler, der nach jeder Periode, bspw. 1 Minute, um 1 herunterzählt und eine Nachricht mit dem Zählerstand sendet. So ist die Restdauer jederzeit im Minutentakt ablesbar.
    • "timer" ist eine Schaltuhr für 24h. Sie sendet eine Schalten-Nachricht zur eingestellten Zeit und eine Nachricht mit der Einschaltdauer, welche bspw. "mono" empfängt und damit getriggert wird.

    Diese drei VG implementieren als Gruppe auf einem Shelly 1 Plus die fernsteuerbare Bewässerungssteuerung. Der Anwender braucht ein MQTT fähiges Frontend um sie zu nutzen. Dies kann eine Smartphone App oder eine Website sein, die die Bedienungselemente zur Verfügung stellt. Ich verwende hierfür die Android App "mqtt dash" und Node-RED.

    Die oben kurz beschriebenen VG können auch auf verschiedenen Shellies verteilt werden, bspw. "mono" und "timer" auf einem Shelly i4, "switch" auf einem Shelly 1 Plus. Entscheidend ist die MQTT Kommunikation. Die drei VG besitzen ein definiertes Verhalten bei MQTT Ausfall, also falls der Broker oder das Netzwerk ausfällt. Ein wesentlicher Vorteil solcher Scripts besteht in der flexiblen Anpassbarkeit an die Wünsche des Anwenders.

    Falls jemand an diesen Scripts interessiert ist, stelle ich diese gerne zur Verfügung. Sie sind inzwischen ausgiebig getestet. Auch sind sie bei Bedarf erweiterbar. Ich werde vielleicht noch Zufallssteuerungen für das Schalten von Beleuchtung bei Abwesenheit implementieren.

    Falls Fragen zur Script-Programmierung bestehen, gebe ich gerne Auskunft, soweit ich kann.


    Zusatzhinweis:

    Zur Erfassung des Zeitpunktes des letzten Einschaltens verwende ich einen kleinen, von mir auf einem Raspberry Pi erstellten Dienst, der bei eintreffender MQTT Nachricht im JSON Format das Datum und, wenn man will, die Uhrzeit sendet, beides oder mehr nach Belieben formatierbar. Diesen kleinen MQTT basierten Dienst nutze ich, weil auf einem Shelly zwar die Uhrzeit und der Unix Zeitstempel, nicht aber das Tagesdatum erfragbar sind. Wenn kein Tagesdatum gebraucht wird, kann auf den kleinen Dienst verzichtet werden. Diesen Dienst betreffend danke ich JoergZ für seine Mitwirkung.


    Screenshot von MQTT Dash kurz nach dem Einschalten per Schaltuhr (timer)
    Hier steht m ausnahmsweise für Minuten, s für Sekunden.