Shelly 1 in NodeRed integrieren

Abb: Shelly 1 (Shelly)

Das Shelly 1 Modul ist ein kleiner WiFi-Schalter für die Home-Automation und kann in Unterputzdosen für Lichtschalter integriert werden. Das WiFi-Modul im Shelly 1 arbeitet mit einem in Bastlerkreisen beliebten ESP8266. Mit einer App kann der WiFi-Schalter bedient und der Zustand der Schalter abgefragt werden. In den Schalter ist ein Relais mit einem einpoligen Schließer integriert mit dem man Lasten bis 3,5kW (230V AC, 16A) potentialfrei schalten kann. Es lassen sich damit auch Lasten in Gleichspannungskreisen schalten, allerdings nur bis 192W (12V DC, 16A), da die Kabelquerschnitte der Anschlüsse zu gering sind. Die Versorgung des Shelly 1 kann über 230V oder über eine Gleichspannnungen von 12V oder 24V-60V versorgt werden. Dazu muss intern ein Jumper umgelegt werden. Der Ruhestromverbrauch liegt bei ca. 1W.

Das Shelly 1 Modul kann auch über die Cloud mit Amazon Alexa oder Google Home mit Sprachbefehlen gesteuert werden. Eine Cloud-Anbindung ist nicht zwingend notwendig. Man kann das Shelly Modul auch mit HTTP-Befehlen steuern. In dem Artikel geht es genau darum und wie man das mit NodeRed realisiert.

Neben dem Schaltausgang (0 I) gibt es noch eine Reihe weiterer IO-Pins vom ESP8266 die in eigenen Erweiterungen genutzt werden können. So lassen sich z.B. 1-Wire Temperatursensoren DS18B20 direkt mit den IO-Pins verbinden. Die Firmware des Shelly unterstützt diese Sensoren ohne weiter Änderungen und die Messwerte werden auf der Weboberfläche angezeigt. Nachfolgend sind die technischen  Daten in Kurzform aufgelistet.

  • Eingangsspannung über Jumper umschaltbar
    • 110-230 V ±10%, 50/60Hz AC
    • 24-60V DC
    • 12V DC
  • Kompatibel zu allen wichtigen internationalen Spannungs-Standards
  • Maximale Schaltlast: 16 A, 110-265 V, 50/60 HZ AC
  • Maximale Schaltlast: 16 A, 12 V DC, 24 – 60 V DC
  • Betriebstemperatur: -40 bis +40°C
  • Abmessungen (LxBxH): 40 x 36 x 17 mm
  • Mindest-Montageöffnung: Ø 50mm
  • Funk-/Wi-Fi-Protokoll: 802.11 b/g/n, 2.4 GHz
  • Funkreichweite: bis zu 50 m Freifeld und bis zu 30 m in Innenräumen
  • Leistungsaufnahme Ruhebetrieb: <1 W
  • Erweiterungsport für digitale IO-Signale (3,3V TTL Pegel)
    • 3,3V
    • GND
    • GPIO 0
    • GPIO 1 (TXD)
    • GPIO 3 (RXD)

Shelly auf 12V Versorgung einstellen

Bei Auslieferung ist der Spannungs-Selktor auf 230V AC eingestellt. Wir müssen den Jumper entsprechend zum Bild auf die Position für 12V setzen.

Abb: Bedeutung der Stiftleisten

Abb: Belegung der Versorgungsspannungen für 12V

 

Shelly 1 ins eigene Netzwerk bringen

Wie das im Einzelnen geht, wird in der ShellyDokumentation ausreichend gut beschrieben. Für die spätere Arbeit mit NodeRed empfiehlt sich eine feste IP-Adresse.

Abb: Startseite

Abb: Internet & Security Seite

Achtung! Bei der Eingabe der Netzwerkparameter muss man umsichtig vorgehen. Hat man die WiFi SSID oder das Passwort falsch eingegeben, so sperr man sich aus und hat keine Möglichkeit mehr sich mit dem Shelly zu verbinden. Ein Hard-Reset auf Werkseinstellungen geht nur über eine umständliche Prozedur. Dazu muss  man die Stromversorgung ausschalten und wieder einschalten und dann innerhalb einer Minute 5 x den Schalter am Eingang SW betätigen. Das richtige Timing ist aber Glückssache und benötigt mehrere Versuche bis man erfolgreich ist. Im schlimmsten Fall lässt sich der Shelly nicht mehr aktivieren und man muss die Firmware neu flashen. Wie das geht ist in dieser Flash-Anleitung beschrieben.

Temperatursensor anschließen und konfigurieren

Wird die original Shelly-Firmware benutzt, so ist zur Benutzung der Temperatursensoren DS18B20 immer das Shelly Temperatur Sensor Addon notwendig. Das Addon kann sowohl mit 12V als auch mit 230V betrieben werden und stellt sicher, dass die Anschlussdrähte der Sensoren galvanisch isoliert sind und keine 230V dort anliegen. Grundsätzlich lassen sich bis zu 3 Sensoren parallel anschließen und werden von der Firmware automatisch erkannt. Die Sensoren sind entsprechend den Aderfarben zu verbinden.

Abb. Shelly Temperatur Sensor Addon

Abb. Temperatursensor DS18B20

Wer noch zusätzlich die Luftfeuchtigkeit messen möchte kann anstatt des Sensors DS18B20  den DHT22 (AM2302) verwenden. Der DHT22 wird genau so angeschlossen wir der DS18B20.  Allerdings lässt sich nur ein Sensor einbinden.

Abb. Sensor DHT22 (AM2302) für Temperatur und Luftfeuchte

Angeschlossene Sensoren werden automatisch erkannt und können unter Temparature automation konfiguriert werden.

Abb: Temperature automation

Wenn das Temperature-Addon angeschlossen ist, sieht man bereits im Hauptfenster des Shelly eine Temperaturanzeige und die entsprechenden Schaltflächen tauchen auf. Unter „Temperature-Automation“ kann man für den Schaltausgang des Shelly-Relais Schwellwerte einstellen.

Steuerung über HTTP-Requests in NodeRed

Das Prinzip ist es an den jeweiligen Shelly HTTP-Requests abzusetzen. Die Befehle dazu kann man in der Online-Doc abrufen:

https://shelly-api-docs.shelly.cloud/gen1/#shelly1-shelly1pm

In Node-Red geht es so:

Über einen Inject-Node generiert man den zu nutzenden Befehl als String, z.B. „on“ zum Anschalten. In einem Function-Node baut man dann den httl-Befehlsstring zusammen. Man nutzt dazu die url-Methode des msg-Objektes. So kann man den Shelly aktiv steuern.

Wer nicht mit NodeRed vertraut ist, sollte sich dazu das Einführungsvideos zu NodeRed ansehen. https://open-boat-projects.org/de/#NodeRed

Funktions-Code

var x = msg.payload; //lokale Variable für den mitgegebenen On/Off-String
var IP = „192.168.0.31“; // IP-Adresse des Shelly
msg.url= „http://“+ IP + „/relay/0“; // String aufbauen
msg.payload = „turn=“ + x; // Payload des msg-Objektes mit Befehl für Schalter versehen.
return msg;

Auslesen der Temperatur

var IP = „192.168.0.31“; //s.o.
msg.url= „http://“+ IP + „/status/ext_temperature“; // Befehlsstring für Auslesen der Temp.
return msg;

Hinter den Funktionsnode kommt dann ein http-request-Node. Der sendet den Befehl an den Shelly.Am Ausgang des HTTP-Request liest dann ein weiterer Funtkions-Node die Temperatur aus:

msg.payload = msg.payload.ext_temperature[0].tC;
return msg;

Abb: Funktion-Node in NodeRed

Nachfolgend ist der Funktions-Code des oberen Bildes zu sehen. Wer keine Lust zum Abtippen hat, kann den Funktions-Code über den folgenden Link kopieren und in einen Flow integrieren.

Function_Code

[{„id“:“2d5582c5.552e9e“,“type“:“tab“,“label“:“Flow2″,“disabled“:false,“info“:““},{„id“:“3f56ec23.9d8fd4″,“type“:“inject“,“z“:“2d5582c5.552e9e“,“name“:““,“topic“:““,“payload“:““,“payloadType“:“str“,“repeat“:““,“crontab“:““,“once“:false,“onceDelay“:0.1,“x“:160,“y“:100,“wires“:[[„daf4fe1d.bb8a58“]]},{„id“:“34d63f43.6c2678″,“type“:“inject“,“z“:“2d5582c5.552e9e“,“name“:“ON“,“topic“:““,“payload“:“on“,“payloadType“:“str“,“repeat“:““,“crontab“:““,“once“:false,“onceDelay“:0.1,“x“:150,“y“:180,“wires“:[[„3c697908.5ee006“]]},{„id“:“b5c39d9.b98e4e“,“type“:“inject“,“z“:“2d5582c5.552e9e“,“name“:“OFF“,“topic“:““,“payload“:“off“,“payloadType“:“str“,“repeat“:““,“crontab“:““,“once“:false,“onceDelay“:0.1,“x“:150,“y“:240,“wires“:[[„3c697908.5ee006“]]},{„id“:“3c697908.5ee006″,“type“:“function“,“z“:“2d5582c5.552e9e“,“name“:“turn relay on/off“,“func“:“var x = msg.payload;\nvar IP = \“192.168.0.31\“;\nmsg.url= \“http://\“+ IP+ \“/relay/0\“;\n\nmsg.payload = \“turn=\“ + x;\nreturnmsg;“,“outputs“:1,“noerr“:0,“x“:380,“y“:200,“wires“:[[„1e5b82ec.3dbaed“]]},{„id“:“daf4fe1d.bb8a58″,“type“:“function“,“z“:“2d5582c5.552e9e“,“name“:“get device status“,“func“:“\nvar IP =\“192.168.0.30\“;\nmsg.url= \“http://\“+ IP + \“/status\“;\n\n\nreturnmsg;“,“outputs“:1,“noerr“:0,“x“:390,“y“:100,“wires“:[[„1e5b82ec.3dbaed“]]},{„id“:“1e5b82ec.3dbaed“,“type“:“httprequest“,“z“:“2d5582c5.552e9e“,“name“:““,“method“:“POST“,“ret“:“obj“,“paytoqs“:false,“url“:““,“tls“:““,“proxy“:““,“authType“:““,“x“:610,“y“:140,“wires“:[[]]},{„id“:“36de9059.095b5″,“type“:“debug“,“z“:“2d5582c5.552e9e“,“name“:““,“active“:true,“tosidebar“:true,“console“:false,“tostatus“:false,“complete“:“false“,“x“:850,“y“:440,“wires“:[]},{„id“:“9aa0c78f.df782″,“type“:“inject“,“z“:“2d5582c5.552e9e“,“name“:“TempDachholen“,“topic“:““,“payload“:““,“payloadType“:“date“,“repeat“:“600″,“crontab“:““,“once“:true,“onceDelay“:0.1,“x“:150,“y“:340,“wires“:[[„66bbd8ad.fc06d8“]]},{„id“:“66bbd8ad.fc06d8″,“type“:“function“,“z“:“2d5582c5.552e9e“,“name“:“get Shelly35 Tempstatus“,“func“:“\nvar IP =\“192.168.0.31\“;\nmsg.url= \“http://\“+ IP + \“/status/ext_temperature\“;\n\nreturnmsg;“,“outputs“:1,“noerr“:0,“x“:370,“y“:340,“wires“:[[„92dd8216.8ad5b“]]},{„id“:“92dd8216.8ad5b“,“type“:“httprequest“,“z“:“2d5582c5.552e9e“,“name“:““,“method“:“POST“,“ret“:“obj“,“paytoqs“:false,“url“:““,“tls“:““,“proxy“:““,“authType“:““,“x“:590,“y“:340,“wires“:[[„f4cbc3c1.b9e0c“]]},{„id“:“f4cbc3c1.b9e0c“,“type“:“function“,“z“:“2d5582c5.552e9e“,“name“:“Temperatur Shelly35auslesen“,“func“:“msg.payload = msg.payload.ext_temperature[0].tC;\nreturnmsg;“,“outputs“:1,“noerr“:0,“x“:830,“y“:340,“wires“:[[„36de9059.095b5“]]}]

Abb: Funktions-Code des Flows

Weiterführende Informationen

Auf ähnliche Art lasen sich noch einige andere Funktionen an Bord automatisieren wie z.B. eine Heizung, Lüftung, Batterieladung oder Bilgenentwässerung. Wer die Cloud-Anbindung aktiviert hat, kann dann noch zusätzlich alle Funktionen remote über das Internet steuern und sich ggf. per Mail informieren lassen. Für den Shelly 1 findet man bei Thingiverse 3D-Druckvorlagen für einen Hutschienenhalter. So kann die Installation fachgerecht in einer Unterinstallation erfolgen.

Abb: Hutschienenhalter für Shelly 1 mit Temperatur Addon Modul

Hier noch einige Weiterführende Informationen zu Shelly: