Günstige WLAN-Steckdosen /Plugs in homee einzubinden ist seit jeher immer mal wieder Thema. Im Bereich der anderen Funkstandards gibt es nicht immer gute Alternativen:
-
Zigbee: Funk ist mir zu störanfällig, die Osram Plugs sind günstig, aber sch****.
-
Zwave: Da gibt es einige Möglichkeiten, allen voran Fibaro. Gerade günstig sind die nicht und mit der Zwave Zuverlässigkeit hapert es insbesondere in Gruppenschaltungen.
-
Enocean: Nach dem Rückzug von Permundo ist die Auswahl doch sehr begrenzt und teuer ist Enocean sowieso immer.
Also was tun?
WLAN-Steckdosen gibt es wie Sand am Meer, man braucht nur mal bei Amazon zu suchen. Von Design und Größe her, gibt es auch ansehnliche und kompakte Plug. Der Preis um 10 € ist top.
Hier eine immer aktuelle Liste mit Geräten, die die Tasmota Firmware (s.u.) unterstützen:
Nach etwas Recherche, habe ich herausgefunden, dass viele dieser Firmen, die WLAN-Plugs anbieten (Gosund, BlitzWolf, Teckin, Meross, Homecube, usw.) die tuya Api verwenden.
Tollerweise gibt es in NodeRed einen node, der diese Api unterstüzt.
Es wird auch genau beschrieben, wie man DeviceID und DeviceKey auslesen kann (diese braucht man zur Ansteuerung).
Hat man schon einen Raspberry Pi mit NodeRed laufen, ist die ganze Sache relativ simple. Man benötigt für das unten genannte Vorgehen:
-
- node-red-contrib-tuya-smart -> Einbindung der WLAN-Plugs in NodeRed
-
- node-red-contrib-enocean -> virtuelle Enocean-Geräte in home (Danke an @micha und Holger-Will)
-
- Enocean-Stick am Pi
A.) Erstellung virtueller Enocean-Geräte in homee:
Diese werden auf Basis von Nodon 1Relais (Enocean) erzeugt, die nur die Funktion on/off haben.
DEPRECATED
B.) Kopplung dieser Geräte mittel des enocean-js node mit den Wifi Plugs.
=> Einbindung in homee über virtuelle Geräte und hih-Simulation!
Der Flow sieht dann so aus… Rückkanal zur Übermittlung des Status bei manuellem Schalten ist implementiert.
Hier der Flow in der Library:
https://flows.nodered.org/flow/82d3280f35592ff1a87c28fedd4bfaaf
Die Wifi-Plug mit tuya api arbeiten cloudbasiert…
Das bringt leider folgende Probleme mit sich:
- Will man tatsächlich Geräte mit Servern in China gekoppelt wissen?
- Wenn keine Internetverbindung da ist, könnten die Plugs nicht schalten, selbst bei funktionierendem WLAN.
Die Lösung des Problems: Entfernung des Cloudzwangs mittels Firmware-Austausch!
Das klingt kompliziert, ist aber eigentlich recht simpel. Man schafft es gut 5 Plugs in 15-20 min anzupassen. Stichwort ist hier: sonor-tasmota Firmware. Im Gegensatz zu den Sonoff-Geräten erfolgt das Ganze bei den Tuya-Geräten rein softwarebasiert ohne Änderungen an der Hardware (Löten).
Hier findet man eine tolle Anleitung:
Basis hierfür ist:
Voraussetzungen/ Praktisches Vorgehen:
Man braucht einen Raspberry Pi, der per Lan-Kabel angeschlossen ist. Die WLAN-Schnittstelle wird später für die Verbindung zum Plug gebraucht.
Am besten nimmt man eine leere SD-Karte und setzt ein Raspi-Image nur für diesen Zweck auf (Schutz der Produktiv-Installation mit NodeRed). Das wars dann schon… die einzelnen Schritte der obigen Anleitung ausführen und schon ist der Plug mit der sonoff-tasmota Firmware geflashed.
Auf dem Pi/ im Netzwerk muss noch ein MQTT-Server laufen.
Danach taucht der Plug als WLAN-Hotspot (sonoff-xxxx) in den Netzwerken auf. Einfach verbinden… es öffnet sich die Konfigurationsseite (192.168.4.1) des Plugs, um hier des Haus-WLAN einzutragen.
Danach ist der Plug im WLAN eingebunden. Über den Aufruf der IP-Adresse gelangt man zur Konfigurationsseite für alle Einstellungen:
Unter Konfiguration sind lediglich die beiden Punkte MQTT und Module wichtig. Im MQTT trägt man den eigenen Server ein und vergibt ein Topic. Im Modul muss noch der Steckdosen-Typ konfiguriert werden (siehe Liste hier: Compatible devices (HTTPS firmware) · ct-Open-Source/tuya-convert Wiki · GitHub).
In meinem Fall habe ich Teckin Plugs, die funktionieren mit dem Modul "Blitzwolf SHP (45).
Das wars dann schon. Der Plug ist einsatzbereit.
In NodeRed benutzt man den sonoff node (node-red-contrib-sonoff-tasmota (node) - Node-RED).
Dort wird lediglich der MQTT und das vergebene Topic eingetragen… Fertig!!!
Hier ein Beispielflow:
[{"id":"ba5041b3.4e2298","type":"enocean-in","z":"6599b5ef.5a30b4","serialport":"36056171.b343b6","name":"","x":110,"y":300,"wires":[["b68a9dc8.82fd3"]]},{"id":"b68a9dc8.82fd3","type":"enocean-actor","z":"6599b5ef.5a30b4","name":"Stehleuchte Wohnzimmer","channel":"29","adt":false,"x":330,"y":300,"wires":[["4c819774.1b64e","4a4ce5c.2bd301c"],[]]},{"id":"b7b6e466.19656","type":"inject","z":"6599b5ef.5a30b4","name":"LRN CH21","topic":"","payload":"{\"type\":\"LRN\",\"eep\":\"d2-01-0f\",\"senderId\":\"0186fbde\",\"name\":\"Zentrale\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":360,"wires":[["b68a9dc8.82fd3"]]},{"id":"4c819774.1b64e","type":"function","z":"6599b5ef.5a30b4","name":"","func":"if ( msg.meta.destinationId ===\"ff9ed495\"&& msg.meta.payload === \"010001\")\n{\nreturn {payload: true};\n}\nif ( msg.meta.destinationId ===\"ff9ed495\"&& msg.meta.payload === \"010000\")\n{\nreturn {payload: false};\n}","outputs":1,"noerr":0,"x":550,"y":300,"wires":[["f0a1e741.c6cb6"]]},{"id":"4a4ce5c.2bd301c","type":"function","z":"6599b5ef.5a30b4","name":"Status an/aus","func":"const Enocean = global.get('Enocean')\nvar channel = 21\n\nvar tel1 = Enocean.RadioERP1.from(\"550009070156d20460e4050f13a40101ffffffff50001f\")\nvar tel2 = Enocean.RadioERP1.from(\"550009070156d2046080050f13a40101ffffffff52006e\")\ntel1.senderId = global.get(\"enocean-base-id\") + channel\ntel2.senderId = global.get(\"enocean-base-id\") + channel\n\nif ( msg.meta.destinationId ===\"ff9ed495\"&& msg.meta.payload === \"010001\"){\nreturn {payload: tel1.toString()};\n}\nif ( msg.meta.destinationId ===\"ff9ed495\"&& msg.meta.payload === \"010000\"){\nreturn {payload: tel2.toString()};\n}\n","outputs":1,"noerr":0,"x":580,"y":260,"wires":[["f47a419f.ab76c8"]]},{"id":"f47a419f.ab76c8","type":"enocean-out","z":"6599b5ef.5a30b4","serialport":"36056171.b343b6","name":"","logOutput":false,"x":750,"y":260,"wires":[[]]},{"id":"f0a1e741.c6cb6","type":"Sonoff device","z":"6599b5ef.5a30b4","mode":"0","broker":"76a704cf.621b6c","device":"SLWZ","name":"","onValue":"ON","offValue":"OFF","cmdPrefix":"cmnd","statPrefix":"stat","telePrefix":"tele","x":750,"y":300,"wires":[[]]},{"id":"36056171.b343b6","type":"enocean-config-node","z":"","serialport":"/dev/ttyUSB0"},{"id":"76a704cf.621b6c","type":"mqtt-broker","z":"","name":"","broker":"192.168.1.27","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}]
Viel Spaß beim Basteln!!!
Fragen und Anmerkungen gerne im Thread oder im Slack Channel.
[UPDATE] 27.06.2019
Anstatt von Wifi-Plugs für die Steckdosen, funktioniert das obige Vorgehen auch mit Shelly Wifi-UP-Relais, die mit der Tasmota-Firmware geflashed wurden.
(entweder man macht es selber oder kauft sie fertig).
Mehr Infos und warum die Shellys sinnvoller sind als die sonoff findet ihr hier:
Shelly 1 Open Source WiFi
Shelly 1 ist ein kleiner (41x36x17mm) WiFi-Switch basierend auf dem ESP8266-Chip der einfach hinter einer Steckdose oder einem Schalter…
Sonoff vs. Shelly
[UPDATE] 19.10.2019
Die aktuelle Tuya-Firmware kann mit der aktuellen Version von tuya-convert umgangen werden. Die aktuelle Liste der unterstützten Devices ist oben verlinkt.
Als Plugs bieten sich entweder die oben genannten Gosund SP 111 (aka Blitzwolf BW SHP-6) oder die Teckin SP 22 (aka Blitzwolf BW SHP-5, aka Gosund SP 1).