Neues IoT-Thema: SONOFF Relais

Ich habe mir bei meinem Lieblings-Chinesen drei SONOFF bestellt. Preis pro Stück ca. 6EUR inkl. Versand.

Die Dinger können WLAN und haben ein Relais an Bord, das angeblich 10A schalten kann. In meinen Exemplaren ist die Platine zwischen den Leiterbahnen der 230V-Leitungen tatsächlich ausgefräst (Luftbrücke), das ist bei anderen Bildern im Netz noch nicht so. Trotzdem muss man die 10A ja nicht ausnutzen 😉

Auspacken

Die Platine aus dem Gehäuse zu entfernen, ist kein Problem, geht ohne Schäden. Mein Ziel ist neben dem Schalten meiner „Multimedia-Ecke“ (die in ungenutzem Zustand gefühlt zuviel Strom verbraucht) auch die Erfassung der Wohnzimmertemperatur. Für die Nutzung ist auf der Platine noch ein Lötauge rausgeführt. Ein zweites GPIO könnte man gewinnen, indem man die LED abknipst/auslötet, ein drittes GPIO durch Entfernen des Tasters, der eigentlich gedacht ist für das manuelle Ein/Ausschalten des Relais. Von all dem nehme ich vorerst Abstand.
Da das Modul auch vorgesehen ist, um einen Funksender zu betreiben (für die klassischen Steckdosenempfänger), bin ich guter Dinge, dass sich an den unbestückten Lötaugen weitere Hardware anschliessen läßt.

Flashen

Um die Dinger zu flashen und in der Standard-Arduino-IDE programmieren zu können, sollten als erster Schritt Pin-Outs eingelötet werden. Eine feine Lötspitze vorausgesetzt und mit ein bisschen Geschick klappt das ohne Probleme.

Der nächste Schritt ist nun ein USB 2.0 to TTL UART Adapter. Wichtig ist, dass er auch 3.3Volt kann.
Mein Exemplar ist ein https://www.amazon.de/dp/B00AFRXKFU/ref=cm_sw_em_r_mt_dp_pjYRybK7VY6EC
Wichtig ist beim Verbinden, dass der 5Volt Ausgang NICHT mit dem SONOFF verbunden wird, sondern an Stelle dessen der 3.3Volt Pin (der im Falle meines Adapters als Lötauge ausgeführt wurde).
Und ganz wichtig: Man verbindet RXD mit TXD und TXD mit RXD. Das hat mich viel Zeit gekostet 😉

Zum ersten Flashen habe ich den Knopf am SONOFF gedrückt und dann den UART-Adapter in den USB-Port gesteckt. Wenn beim ersten Flash-Versuch die grüne LED auf dem SONOFF blinkt, befindet es sich NICHT im Boot-Modus, sondern in seinem Standard-Verhalten bei Verwendung der Original-Software.

Dann hat was nicht geklappt. UBS-Stecker raus, Knopf auf dem SONOFF drücken und USB-Stecker rein. Dann sollte es klappen. Andere haben sich einen Schalter in die 3.3Volt Leitung eingebaut, um das Rein/Rausziehen des USB-Adapters zu sparen.

Mit der ARDUINO-IDE hatte ich jedoch keinen Erfolg, das Ding zu flashen. Der Upload-Vorgang sah vielversprechend aus, kam aber nicht zum Ende. Ich aktivierte in den Voreinstellungen zusätzliche DEBUG-Meldungen während des Uploads und kam so zumindest an den Programmaufruf des esptools ran.

Der direkte Aufruf von der Konsole klappte dann. Warum, konnte ich nicht eruieren…

martin@martin-Latitude-E6510:~/.arduino15/packages/esp8266/tools/esptool/0.4.9$ ./esptool -vv -cd ck -cb 115200 -cp /dev/ttyUSB0 -ca 0x00000 -cf /tmp/arduino_build_831511/sonoff_test2.ino.bin
esptool v0.4.9 - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
setting board to ck
setting baudrate from 115200 to 115200
setting port from /dev/ttyUSB0 to /dev/ttyUSB0
setting address from 0x00000000 to 0x00000000
espcomm_upload_file
espcomm_upload_mem
opening port /dev/ttyUSB0 at 115200
tcgetattr
tcsetattr
serial open
opening bootloader
resetting board
trying to connect
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
espcomm_send_command: receiving 2 bytes of data
warning: espcomm_send_command: wrong direction/command: 0x01 0x03, expected 0x01 0x08
trying to connect
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
espcomm_send_command: receiving 2 bytes of data
Uploading 226336 bytes from /tmp/arduino_build_831511/sonoff_test2.ino.bin to flash at 0x00000000
erasing flash
size: 037420 address: 000000
first_sector_index: 0
total_sector_count: 56
head_sector_count: 16
adjusted_sector_count: 40
erase_size: 028000
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
setting timeout 15000
setting timeout 100
espcomm_send_command: receiving 2 bytes of data
writing flash
................................................................................ [ 36% ]
................................................................................ [ 72% ]
..............................................................                   [ 100% ]
starting app without reboot
espcomm_send_command: sending command header
espcomm_send_command: sending command payload
espcomm_send_command: receiving 2 bytes of data
closing bootloader

Die Software

Bleibt die Frage, was man denn da nun so drauf flasht.

Ich will das Ding mit HTTP-Requests ein- und ausschalten können und den aktuellen Schaltzustand abfragen. Ausserdem will ich die Temperatur abfragen mit einem Dallas DS18B20. Der Sensor kommt an GPIO14, den ich ja schon über die Stiftleiste rausgeführt habe. Die Beschaltung ist klassisch parasitär, also die beiden äußeren Beinchen auf Masse, das innere Beinchen (DATA) an GPIO14 mit einem Pullup-Widerstand von 470Ohm. Entgegen der gängigen Empfehlung von 4.7kOhm hab ich es auch mit 3,3kOhm versucht, keine Chance… Ich habe ordinäres zweiadriges Kabel mit einer Länge von ca. 20cm.

Den Code stelle ich hier bei Gelegenheit zur Verfügung. Den Code im Klartext darzustellen, vergällt mir immer wieder WordPress trotz freundlichem PlugIn… Da wird alles in der Darstellung zerschossen…

Die Hardware

Nun soll nicht unerwähnt bleiben, dass das SONOFF einen Nachteil hat: Es schleift nicht die Schutzleitung (die grün/gelbe) durch. Das heisst, ein Defekt am angeschlossenen Gerät (z.B. einer Lampe) führt nicht zum Auslösen des FI-Kontakt im Zählerschrank und ist damit lebensgefährlich. Alle Geräte, die über einen EURO-Stecker verfügen, sind davon ausgenommen, weil bauartbedingt der Hersteller garantiert, dass das Gerät im Falle eines Fehlers keine Spannung an berührungsempfindlichen Teilen führt. Im Falle von Schutzkontaktsteckern (Schuko-Steckern) ist das nicht der Fall, hier muss zwingend auch die „Erde“ verbunden sein.

Also, entweder nur Geräte mit EURO-Stecker anschliessen oder den Schutzkontakt selber durchführen. Wenn man das kompakte Gehäuse des SONOFF beibehalten will, wird das schon eng.

Ich will an den SONOFF einen Dreier-Stromverteiler anschliessen. Weil ich 1. nicht ausschliessen kann, dass irgendjemand ein Gerät mit Schutzkontakt in den Verteiler steckt und 2. meinen DENON-Verstärker anschliessen will, der ohnehin über einen Schutzkontaktstecker verfügt, muss ich mir also Gedanken über „Erde“ machen.

Grundsätzlich bieten Ein- und Ausgang des Gehäuses hinreichend Platz, eine weitere Leitung ein- und auszuführen. Auf beiden Seiten würden sie auch von der (Plastik-)Zugenlastung profitieren. Innerhalb des Gehäuses wird es knapp: Sofern keine zusätzliche Hardware an den I/O-Pins angeschlossen wird und man das SONOFF-Relais ohne 433MHz-Komponenten hat, kann es mit einer Lüsterklemme klappen. Meine Bestückung enthält nur einen Pullup-Widerstand wg. der Temperaturmessung und würde gerade noch den Einsatz einer Lüsterklemme zur Verbindung des Schutzleiters zulassen.

Da aber die Zugentlastung auch für den Schutzleiter gegeben ist, entscheide ich mich für eine Lötverbindung des aus- und eingehenden Leiters mit ein wenig Schrumpfschlauch.

Ein Bekannter…

… ist ein sparsamer und sicherheitsbewusster Mensch. Er schaltet seinen DSL-Router nur ein, wenn er zu Hause ist. Und eben auch wieder ab, wenn er geht. Möglicherweise hat er das derzeit mit einer Zeitschaltuhr automatisiert (wobei die mechanischen echt Stromfresser sind). Die Telefonie spielt keine Rolle, weil er ein Home-Roaming nutzt.

Nun würde er gern diesen Vorgang automatisieren. Wenn er kommt, soll sich der Router automatisch einschalten, wenn er geht, wieder abschalten. Unsere ersten Ideen waren eine Schaltung zu entwickeln, die per Bluetooth eine Anwesenheitserkennung durchführt. Vorteil: Ein Bluetooth device läßt sich erkennen auch ohne, dass eine Kopplung stattfindet. Nachteil: Bluetooth muss auf dem Handy aktiviert sein, was ich aus Akkulaufzeitgründen unterlasse.

Nun wär so ein SONOFF eine Variante, weil es für tatsächlich nur 6EUR (die Programmierung würde ich für ihn machen) einen WLAN-Schalter anbietet und nur 0,4Watt verbraucht. Eine mögliche Lösung wäre, dass das SONOFF ein eigenes WLAN Netz aufspannt und das Telefon des Bekannten beim Betreten der Wohnung erkannt wird, weil sich sein Telefon dank „intelligenter Netzumschaltung“  damit verbindet. Nach Erkennung schaltet sich das WLAN des SONOFF ab und aktiviert per Relais den Router. Erneut, – dank „intelligenter Netzumschaltung“-, findet nun das Telefon den frisch gestarteten Router sowie alle anderen Geräte.

Nachteil: das SONOFF-WLAN wäre u.U. hackbar (was aber erheblichen Aufwand bedeutet). Was im schlimmsten Fall aber „nur“ dazu führt, dass der Router des Bekannten aktiviert wird.

Problem: Wie sieht’s aus beim Verlassen des Hauses? Das WLAN des SONOFF ist deaktiviert, weil es ja gerade per Relais den Router aktiviert hat. Eine Präsenzerkennung ist hier nicht mehr möglich.

Wenn es technisch möglich wäre, per Accesspoint auch nicht angemeldete Geräte zu detektieren (was ich nicht weiss, bei Bluetooth wäre es jedenfalls möglich), könnte man eine Lösung finden. Aber dann dürfte man den AP im SONOFF nicht deaktivieren, denn sonst wäre ein Detektieren der Abwesenheit unmöglich. Das Aufrechterhalten des WLAN-AP im SONOFF bedeutet wiederum, dass sich das Telefon nicht per „automatische Netzwahl“ mit dem eigentlichen Heimnetz verbindet.

Also doch eine Lösung per Bluetooth?

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.