Sonoff: Unterschied zwischen den Versionen

Aus FHEMWiki
K (diverse kleine Korrekturen; Verwendung von <syntaxhighlight> und <code> an einigen Stellen)
 
(227 dazwischenliegende Versionen von 17 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''sonoff Switch, dieser Artikel beschreibt die Ankopplung des kostengünstigen sonoff Switch an FHEM mit ESPEasy.'''
{{Infobox Modul
|ModPurpose=Ankopplung der Sonoff Module an FHEM
|ModType=
|ModForumArea=ESP8266
|ModTechName=Sonoff
|ModOwner=Reinhart
}}


'''Einleitung'''


Seit einiger Zeit werden von der [https://www.itead.cc/sonoff-wifi-wireless-switch.html Fa. Itead] kostengünstige "sonoff" Produkte angeboten die glücklicherweise den [http://dl.itead.cc/IM151116002/0A-ESP8266_Specifications_v4.1.pdf ESP8266 Chip] On Board haben und somit die ideale Grundlage für [http://www.esp8266.nu/index.php/Main_Page ESPEasy] und für [https://forum.fhem.de/index.php/board,46.0.html Fhem] darstellen.
Die [https://www.itead.cc/sonoff-wifi-wireless-switch.html Fa. Itead] bietet kostengünstige "Sonoff" Produkte an, die den [http://dl.itead.cc/IM151116002/0A-ESP8266_Specifications_v4.1.pdf ESP8266 Chip] On Board haben und somit die ideale Grundlage für [http://www.esp8266.nu/index.php/Main_Page ESPEasy] und für FHEM<ref>Foren-Board: {{Link2Forum|Area=Sonstiges}}</ref> darstellen. Unverändert nutzen diese Geräte allerdings eine in China basierende Cloudlösung und müssen für die Benutzung in FHEM umgeflasht werden. Dieser Artikel beschreibt die Ankopplung der Sonoff Module an FHEM mit ESPEasy oder [[MQTT Einführung|MQTT]] mit Tasmota ('''T'''heo '''A'''rends '''S'''onoff '''M'''QTT '''O'''ver '''T'''he '''A'''ir - einer offenen Firmware von [https://github.com/arendst arendst]). Hierbei sind Grundkenntnisse beim Arduino (um die Firmware neu zu flashen) sowie im Umgang mit 230V notwendig.
 
'''Bitte unbedingt die elektrotechnischen Sicherheitsrichtlinien beachten und einhalten!'''
[[Datei:sonoff_sw_15.jpg|thumb|left|alt=Warnung Netzspannung]]
<div style="clear:both;"></div>
'''Achtung: An dem Modul liegt Netzspannung an, die lebensgefährlich ist. Es dürfen nur entsprechend ausgebildete Personen dieses Modul in Betrieb nehmen. Zum Umbau und zur Softwareaktualisierung darf keine Netzspannung angeschlossen sein'''
 
Wie gefährlich das hantieren mit Netzspannung sein kann, zeigt das Beispiel eines [http://mysku.ru/blog/china-stores/45762.html russischen Anwenders]. Er hat beim Flashen die Netzspannung am Modul gelassen und somit (über die Verbindung mit dem Netzteil des Laptops) lebensgefährliche Spannung auf die FTDI Schnittstelle gebracht. Das Modul ist dabei abgeraucht!




'''Nützliche Links zum Hersteller:'''
'''Links des Herstellers'''


[https://www.itead.cc/blog/user-guide-for-sonoff-slampher User Manual von Itead]
[https://www.itead.cc/blog/user-guide-for-sonoff-slampher User Manual von Itead]
Zeile 13: Zeile 27:




=Hardware=
==Modelle (mit Produktübersicht) ==
'''Bitte unbedingt die elektrotechnischen Sicherheitsrichtlinien beachten und einhalten!'''
 
<div style="clear:both;"></div>
Eine Übersichtliste der verschiedenen Produkte mit technischen Kurzangaben.
[[Datei:sonoff_sw_15.jpg|thumb|left|alt=Warnung Netzspannung]]
 
{| class="wikitable" style="text-align:right"
! Produkt Name !! Beschreibung !! Spannungsversorgung !!  Imax !! Pmax !! Frequenz !! Schaltplan !! Link
|-
| Sonoff || WWW-Schalter || 90~250V AC || 10A || 2200W || 2.4Ghz || [http://wiki.iteadstudio.com/Sonoff Plan] || [https://www.itead.cc/smart-home/sonoff-wifi-wireless-switch.html Link]
|-
| Sonoff RF || 433 MHz Fernbed. || 90~250V AC || 10A || 2200W || 2.4Ghz || [http://wiki.iteadstudio.com/Sonoff_RF Plan] || [https://www.itead.cc/smart-home/im151116003.html Link]
|-
| Sonoff SV || Niederspannungsschalter|| 5~24V DC || 10A || 240W DC || 2.4Ghz || [http://wiki.iteadstudio.com/Sonoff_SV Plan] || [https://www.itead.cc/smart-home/sonoff-sv.html Link]
|-
| Sonoff TH10/TH16 || WWW-Schalter mit Temp.&Luftf. ||  90~250V AC || 10A/16A || 2200W(10A)/3500W(16A) || 2.4Ghz || [http://wiki.iteadstudio.com/Sonoff_TH_10/16 Plan] || [https://www.itead.cc/smart-home/sonoff-th.html Link]
|-
|  Sonoff Dual || Doppel-WWW-Schalter ||  90~250V AC || 16A || 3500W || 2.4Ghz || [https://www.itead.cc/wiki/Sonoff_Dual Plan] || [https://www.itead.cc/sonoff-dual.html Link]
|-
|  Sonoff Pow || WWW-Schalter und Strommessgerät ||  90~250V AC || 16A || 3500W || 2.4Ghz || [https://www.itead.cc/wiki/Sonoff_Pow Plan] || [https://www.itead.cc/sonoff-pow.html Link]
|-
|  Sonoff LED || WWW-LED-Dimmer ||  180~265V AC || 0.3-0.6A || 42W || 2.4Ghz ||  kein || [https://www.itead.cc/sonoff-led.html Link]
|-
|  Sonoff Touch || WWW-Wandschalter ||  90~250V AC || 2A || 400W || 2.4Ghz || kein || [https://www.itead.cc/sonoff-touch.html Link]
|-
|  Slampher || WWW-433MHz-Lichtfassung ||  90~250V AC || 2A || 200W || 2.4Ghz || [http://wiki.iteadstudio.com/Slampher Plan] || [https://www.itead.cc/smart-home/slampher-wifi-wireless-light-holder.html Link]
|-
|  S20 Smart Socket || Smart socket || 90~250V AC || 10A || 2000W || 2.4Ghz || kein || [https://www.itead.cc/smart-home/smart-socket-eu.html EU-Stecker]
|-
|  iFan || Smart Lüfter ||  185~264V AC ||﹤1A || 60W || 2.4Ghz || kein || [https://www.itead.cc/smart-home/smart-socket-eu.html EU-Stecker]
|-
| Motor/Pump Control Switch || clockwise/anticlockwise running ||  5V/7~32V DC || 10A || 50~320W || 2.4Ghz || kein || [https://www.itead.cc/smart-home/motor-reversing-wifi-wireless-switch.html Link]
|-
| 1 Chnl Inching/self-locking Switch || Access control ||  5V/12V DC || 10A || 50/120W || 2.4Ghz || kein || [https://www.itead.cc/smart-home/inching-self-locking-wifi-wireless-switch.html Link]  
|-
|  4 Chnl Inching/self-locking/inter-locking Switch || Access control, rolling door control ||  5V/5~32V DC/90~250V AC || 10A || 50~320W/2500W || 2.4Ghz || kein || [https://www.itead.cc/ifan.html Link]  
|-
| &nbsp; || || || || || || ||
|-
|}
 
<div style="clear:both;"></div>
<div style="clear:both;"></div>


==Modelle==


===Model: IM151116002: Erstes Modell===
===Model IM151116002: Erstes Modell===
[https://www.itead.cc/sonoff-wifi-wireless-switch.html Sonoff WiFi Wireless Smart Switch for MQTT COAP Smart Home]
Link zum Hersteller: [https://www.itead.cc/sonoff-wifi-wireless-switch.html Sonoff WiFi Wireless Smart Switch for MQTT COAP Smart Home]
[[Datei:sonoff_sw_0.jpg|thumb|left|alt=sonoff Switch]]
[[Datei:sonoff_sw_0.jpg|thumb|left|alt=sonoff Switch]]
Das Sonoff Modul ist in einem zweckmäßigen Gehäuse verbaut.
<div style="clear:both;"></div>
<div style="clear:both;"></div>
Das sonoff Modul ist in einem zweckmäßigen und gefälligem Gehäuse verbaut!


====Platine====
[[Datei:sonoff_sw_1.jpg|thumb|left|alt=sonoff Switch von vorne]]
[[Datei:sonoff_sw_1.jpg|thumb|left|alt=sonoff Switch von vorne]]


Die Platine ist sehr übersichtlich aufgebaut und der Hersteller hat auch alle Vorbereitungen zum Flashen einer alternativen Software vorgesehen (über serielle Schnittstelle via FTDI-Modul). Mit einer alternativen Software wie ESPEasy ist eine direkte Ankopplung des '''sonoff''' an FHEM somit ein leicht durchführbarer Vorgang.
Die Platine ist sehr übersichtlich aufgebaut und der Hersteller hat zudem Vorbereitungen zum Flashen einer alternativen Software vorgesehen (über serielle Schnittstelle via FTDI-Modul). Mit einer alternativen Software wie ESPEasy kann '''Sonoff''' an FHEM leicht angebunden werden.
<div style="clear:both;"></div>
<div style="clear:both;"></div>


[[Datei:sonoff_sw_3.jpg|thumb|left|alt=sonoff Switch von hinten]]
[[Datei:sonoff_sw_3.jpg|thumb|left|alt=sonoff Switch von hinten]]
'''Achtung: An dem Modul liegt Netzspannung an die lebensgefährlich ist. Es dürfen nur entsprechend ausgebildete Personen dieses Modul in Betrieb nehmen. Zum Umbau und zur Softwareaktualisierung darf keine Netzspannung angeschlossen sein'''
Die stromführenden Leitungen wurden mit Lötzinn vom Hersteller verstärkt um die angegebenen Stromstärken mit geringer Hitzeentwicklung zu transportieren.


Die stromführenden Leitungen wurden mit Lötzinn vom Hersteller verstärkt um die angegebenen Stromstärken mit geringer Hitzeentwicklung zu transportieren.
'''Achtung: Bitte vor den Arbeiten kontrollieren, dass an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!'''
<div style="clear:both;"></div>


<div style="clear:both;"></div>
<div style="clear:both;"></div>
'''


===Model: IM160712005: TH 10A/16A ===
===Model IM160712005: TH 10A/16A ===
[https://www.itead.cc/sonoff-th.html Sonoff TH 10A/16A WiFi Smart Switch]
Link zum Hersteller: [https://www.itead.cc/sonoff-th.html Sonoff TH 10A/16A WiFi Smart Switch]


====TH10 / TH16 weitere GPIO zugänglich machen====
[[Datei:Sonoff_TH_10A-16A_kleiner.jpg|thumb|left|alt=TH10 / TH16 weitere GPIO zugänglich machen]]
[[Datei:Sonoff_TH_10A-16A_kleiner.jpg|thumb|left|alt=TH10 / TH16 weitere GPIO zugänglich machen]]
Der Hersteller hat zwar schon Platine für eine weitere Stiftleiste vorbereitet, jedoch muss diese noch bestückt werden und kann dann genutzt werden um verdeckte GPIO zugänglich zu machen. Die Verdrahtung kann dem Bild entnommen werden.
Der Hersteller hat eine Platine für eine weitere Stiftleiste vorbereitet, die jedoch bestückt werden muss. Die nicht beschalteten Stifte können dann genutzt werden, um die "verdeckten" GPIO zugänglich zu machen. Die Verdrahtung kann dem Bild entnommen werden.<br>
<div style="clear:both;"></div>''
'''Achtung: Bitte vor den Arbeiten kontrollieren, dass an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!'''
'''''Achtung''': Bitte vor den Arbeiten kontrollieren, das an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!
<div style="clear:both;"></div>
<div style="clear:both;"></div>''
 
<div style="clear:both;"></div>
 
===Model IM160811001: Sonoff Dual ===
Link zum Hersteller: [https://www.itead.cc/sonoff-dual.html Sonoff Dual WiFi Wireless Smart Swtich] (sic!)
 
<div style="clear:both;"></div>
 
<div style="clear:both;"></div>
 
===Model IM160810001: Sonoff Pow ===
Link zum Hersteller: [https://www.itead.cc/sonoff-pow.html Sonoff POW WiFi Switch with Power Consumption Measurement]
[[Datei:sonoff_sw_30.jpg|thumb|left|alt=SONOFF POW]]Ein sehr interessantes und kostengünstiges Modul zur Messung der aktuellen Leistung. Das Modul kann via MQTT in FHEM angebunden werden. Ein Beispiel zur Einbindung ist [http://www.fhemwiki.de/wiki/Sonoff#Sonoff_POW_einrichten unten] im Wiki beschrieben.
 
<div style="clear:both;"></div>
===weitere Modelle===
Weitere Modelle finden sich auf der [https://www.itead.cc/search/result/?cat=&q=sonoff Homepage des Hersstellers]


===Model: IM160811001: Sonoff Dual ===
=Neuprogrammierung der Sonoff-Modelle=
[https://www.itead.cc/sonoff-dual.html Sonoff Dual WiFi Wireless Smart Swtich]
==Einleitung: Welche Firmware? ==
===Übersicht===
Vorab: Es gibt derzeit (August 2018) drei Möglichkeiten, die Geräte von Sonoff mit eigener Firmware zu versehen. Entweder man verwendet MQTT gemeinsam mit TASMOTA oder man verwendet ESPEasy. Beide Firmware-Produkte werden derzeit weiterentwickelt und müssen geflasht werden. Es scheint so zu sein, dass bei den POW-Geräten die Sensoren nicht korrekt erkannt werden und sich dort MQTT anbietet. Jedoch sollte in den Foren geprüft werden, ob diese eindeutige Präferenz durch Weiterentwicklung noch aufrecht erhalten werden kann.  


===Model: IM160810001: Sonoff Pow ===
Ein dritter Weg zum Flashen ist erst kürzlich entdeckt worden und wird auf der Webseite [https://github.com/mirko/SonOTA/wiki] beschrieben, in diesem Wiki fehlen noch entsprechende Erläuterungen. Er beruht darauf, dass Sonoff regelmäßig nach einer neuen Firmware fragt und dazu einen Server in China kontaktiert. Per DNS-Spoofing lenkt man diese Anfrage auf einen heimischen Rechner, auf dem ein Skript läuft. Dieses Skript bedient die Anfrage und überträgt ein erstes Image. In einem zweiten Schritt verbindet man sich dann mit dem Rechner zu der SSID, welche Sonoff aufmacht und die Zielfirmware wird geladen. Die Schritte sollte kann man sich unter der genannten Adresse beim verlinkten Issue #20 anschauen.
[https://www.itead.cc/sonoff-pow.html Sonoff Pow WiFi Switch with Power Consumption Measurement]


===Model: weitere Modelle===
Link frühere Software: [https://github.com/arendst/Sonoff-MQTT-OTA-Arduino Sonoff-MQTT-OTA-Arduino]
[https://www.itead.cc/search/result/?cat=&q=sonoff Sonoff Weitere Modelle finden sich auf der Homepage des Hersstellers]


==Vorbereitungen zum Flashen==
===Stromversorgung===
[[Datei:sonoff_sw_2.jpg|thumb|left|alt=serielle Schnittstelle]]
 
Während des Flashvorganges benötigt das Sonoff-Modul eine Stromversorgung. Dabei darf unter keinen Umständen die Netzspannung von 230V verwendet werden. Selbst die 5V aus einem USB-Anschluss sind zu hoch, da das Modul sonst Gefahr läuft unbrauchbar zu werden. Es sind ausschließlich 3.3V zu verwenden.
 
Der FTDI Chip kann laut Datenblatt höchstens 50 mA liefern, das ESP Modul zieht aber bis zu 300 mA Spitzenstrom und verbraucht schon im normalen Modus ca. 50-70 mA. Einige Anwender haben gute Erfahrungen mit einfachen USB-TTL-Konvertern gemacht, andere beschreiben unverständliche Fehlermeldungen. Auch kann es sein, dass der Flashvorgang ohne Fehler läuft, der Flash aber anschließend korrupt ist und das Modul unklares Verhalten zeigt. In dem Fall die Spannungsversorgung 3.3 Volt prüfen! Auch das USB Kabel kann eine Fehlerursache sein.
 
'''Sollte der Flashvorgang mit einem USB-TTL-Konverter nicht funktionieren, ist zuerst eine stabile 3.3V-Versorgung auszuprobieren''' (beispielsweise durch einen Arduino). RxTx werden nach wie vor mit dem USB-TTL-Adapter verbunden (gekreuzt). Zum Flashen sind dann GND vom Arduino und vom USB-TTL-Adapter zu verbinden.


Hier auf der Platine sind die benötigten Signale für ein FTDI Modul schon vorhanden. Der quadratische Pin gleich über dem Taster ist die Spannungsversorgung zum Flashen vom FDTI von 3.3V Es muss daher unbedingt ein FTDI Modul genommen werden, dass nicht nur einen Jumper für 3.3V besitzt sondern auch die Spannung auf 3.3V herab setzt. Ist dies nicht der Fall, läuft man Gefahr das Modul unbrauchbar zu machen. Es ist daher zu empfehlen einen Spannungsteiler mit 2 Widerständen oder einen Pegelwandler zwischenschalten.
<div style="clear:both;"></div>
<div style="clear:both;"></div>


==Signale der Schnittstelle==
===Schnittstelle ===
von oben nach unten auf der Steckerleiste des sonoff U4 (Model: IM151116002).
[[Datei:sonoff_sw_2.jpg|thumb|left|alt=serielle Schnittstelle]]
 
Die abgebildete Platine zeigt die benötigten Signale für ein FTDI Modul (Model: IM151116002).


  Pin5 = vorbereitet für GPIO
  Pin5 = vorbereitet für GPIO
Zeile 75: Zeile 144:
  Pin1 = 3.3V
  Pin1 = 3.3V


Siehe dazu auch den [https://forum.fhem.de/index.php/topic,55036.0.html Link aus dem Forum]:
Siehe dazu auch den {{Link2Forum|Topic=55036|LinkText=Link aus dem Forum}}:
<div style="clear:both;"></div>
<div style="clear:both;"></div>


==Platine mit Stiftleiste bestücken==
[[Datei:sonoff_sw_4.jpg|thumb|left|alt=Platine mit Stiftleiste bestücken]]
[[Datei:sonoff_sw_4.jpg|thumb|left|alt=Platine mit Stiftleiste bestücken]]
Der Hersteller hat zwar schon die Platine vorbereitet, jedoch muss sie noch mit einer Stiftleiste bestückt werden um das FTDI Modul bequem verbinden zu können. Nachdem einmal ESPEasy geflasht worden ist, kann es in Zukunft via WEB geflasht werden und die Stiftleiste ist dann nicht mehr erforderlich. Aufgrund der geringen Kosten fällt dies jedoch nicht ins Gewicht.<br>
Der Hersteller hat zwar die Platine vorbereitet, diese muss jedoch mit einer Stiftleiste bestückt werden, um das FTDI Modul bequem verbinden zu können. Die Stiftleiste muss allerdings selber nachgerüstet werden. Nachdem das ESPEasy zum ersten Mal geflasht wurde, kann es in Zukunft via WEB (OTA) geflasht werden und die Stiftleiste ist dann eigentlich nicht mehr erforderlich. <br>
Für die Module TH10/TH16 sind die Lötpunkte für die Stiftleiste schon beschriftet. Die Stiftleiste selber muss allerdings auch nachgerüstet werden.
Für die Module TH10/TH16 sind die Lötpunkte für die Stiftleiste schon beschriftet.  
<div style="clear:both;"></div>''
<div style="clear:both;"></div>
'''''Achtung''': Bitte vor den Arbeiten kontrollieren, das an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!
'''''Achtung: Bitte vor den Arbeiten kontrollieren, dass an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!'''''
<div style="clear:both;"></div>''
<div style="clear:both;"></div>
 
===Arduino als USB-TTL ===
 
Sollte kein USB-TTL-Adapter vorhanden sein, kann man zum Flashen auch einen Arduino "missbrauchen". Dazu wird RESET und GND verbunden, siehe [http://www.instructables.com/id/Turn-Arduino-into-USB-to-TTL-Adapter-with-1-wire/ diese Webseite]. Der Vorteil dieser Lösung besteht darin, dass die PINS für 5V und 3.3V deutlich voneinander getrennt sind.
 
===Erfolgs- und Fehlermeldungen ===
 
[[Datei:FehlersucheHochladen.png|thumb|left|alt=Fehlersuche aktivieren]]
Eine sehr typische Fehlermeldung während des Flashvorganges ist
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
Das Tückische an dieser Fehlermeldung ist, dass sie nahezu keine Hinweise darauf gibt, weshalb der Upload fehlgeschlagen ist. In sehr vielen Fällen können die Fehler auf ganz klassische Probleme zurückgeführt werden: so wurde Tx beim Chip nicht mit Rx, sondern wieder Tx beim Arduino verbunden oder es wurde der falsche COM-Port ausgewählt, der falsche Uploader, die Stromversorgung war zu gering (siehe oben) etc. pp. Die Arduino-IDE erlaubt es, genaue Angaben beim Hochladen auszulesen (siehe Screenshot oben, Haken bei "Hochladen"). Ohne diese Angaben ist eine Fehlersuche typischerweise aussichtslos.
 
Im Erfolgsfall erscheint in der Arduino IDE in etwa der folgende Text (hier bei einem Sonoff S20):
 
/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware
*** danach folgt sehr viel Text zum kompilieren ***
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/tty.usbserial to /dev/cu.SLAB_USBtoUART
setting address from 0x00000000 to 0x00000000
espcomm_upload_file
espcomm_upload_mem
opening port /dev/cu.SLAB_USBtoUART 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
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 487120 bytes from /var/folders/l6/myrckv8d12z9_06fl49fm36h0000gn/T/arduino_build_558323/sonoff.ino.bin to flash at 0x00000000
erasing flash
size: 076ed0 address: 000000
first_sector_index: 0
total_sector_count: 119
head_sector_count: 16
adjusted_sector_count: 103
erase_size: 067000
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
................................................................................ [ 16% ]
................................................................................ [ 33% ]
................................................................................ [ 50% ]
................................................................................ [ 67% ]
................................................................................ [ 84% ]
............................................................................    [ 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
 
 
=== Vorsicht: Umflashen, Updates und Upgrades ===
Es kann Situationen geben, in denen man von einer Firmware auf eine andere umsteigen möchte. Dies ist nicht unproblematisch!
 
Sowohl ESPEasy als auch TASMOTA bieten normalerweise einen eigenen OTA (over-the-air) Zugang an. Dort muss das Modul nicht ausgebaut werden, damit man an der seriellen Schnittstelle Kabel anbringt, sondern man lädt die neue Firmware über einen Browser hoch. Ein solches update kann dann ferngesteuert erfolgen, während der Sonoff weiter eingebaut bleibt.
 
Will man dagegen grundsätzliche Änderungen an der Firmware vornehmen (Umstieg von TASMOTA zu ESPEasy oder anders herum) sollte der Flashspeicher vollständig geleeert werden. Anderenfalls sind dubiose, schwer erklärbare Fehlermeldungen die Folge. Ein vollständiges Löschen des Flashspeichers kann nicht OTA erfolgen, hierzu muss man an die serielle Schnittstelle gelangen.
 
Das Programm esptool (zu den Programmoptionen [[http://manpages.ubuntu.com/manpages/bionic/man1/esptool.1.html]])  erlaubt ein solches Löschen in zwei Schritten. Dazu sei angenommen, dass es sich um einen schwarzen ESP-01 mit 1MB Speicher handelt (mehr über die verschiedenen Hardware-Varianten auf [[https://www.letscontrolit.com/wiki/index.php/ESP_Hardware]]). Dann lautet der erste Befehl, mit dem der Flashspeicher gelöscht wird, wie folgt
./esptool -vv -cd none -bm dout -bz 1M  -cb 57600 -cp /dev/cu.SL_USBtoUART -ce
Allerdings setzt dies voraus, dass der Flashspeicher 1 MB groß ist und man eine entsprechende leere 1MB Datei besitzt. Man sollte danach ein weiteres Mal den Flashspeicher mit einer leeren Datei überschreiben, die beispielsweise von ESPEasy bereitgestellt wird:
./esptool -vv -cd none -bm dout -bz 1M  -cb 57600 -cp /dev/cu.SL_USBtoUART -ca 0x00000 -cf ./blank_1MB.bin
In beiden Fällen wurde angenommen, dass der Flashprogrammer ein USB-2-UART Stick ist, der an dem konkreten Rechner unter dem Verzeichnis /dev/cu.SL_USBtoUART zu finden ist. Hier muss man nachschauen, wie das Verzeichnis auf dem eigenen Rechner lautet.
 
Angeblich ist auch der folgende Befehl
./esptool.py erase_flash
erfolgreich. Dies erfordert das Tool [https://github.com/espressif/esptool esptool.py]
 
Es wird berichtet, dass auch das Betriebssystem Einfluss auf das Ergebnis hat (was eigentlich nicht sein kann), siehe dazu [https://github.com/arendst/Sonoff-Tasmota/issues/3385 Eintrag von arendst commented on 2 Aug 2018].
 
Bei Sonoff-Devices ab Februar 2018 erfordert die Programmierung das Flash-Tool aus diesem [http://www.letscontrolit.com/forum/viewtopic.php?f=5&t=3386&hilit=Same+problems+using+the+flashtool+from+letscontrolit&start=10#p18240 Forumsbeitrag].
 
Bei der Programmierung ist wie folgt vorzugehen:
* Interface-Adapter (z.B. FTDI232) anschließen
* Button am Device drücken und gedrückt halten
* USB-Stecker des FTDI232 am PC einstecken, den Button weiterhin gedrückt halten (so wird das Device in den Programmiermodus versetzt)
* Flash-Tool wie im Forumsbeitrag angegeben einsetzen, um ESPEasy aufzuspielen und Fertigmeldung abwarten
* Button loslassen
* USB-Stecker kurz aus- und wieder einstecken
* Dann sollte sich das Device nach kurzer Zeit als Access Point ESP_Easy_0 anbieten
 
==MQTT und TASMOTA==
 
TASMOTA ist neben ESPEasy eine der beiden Firmwares, mit denen Sonoff Gerät gut in FHEM integriert werden können. Während TASMOTA stärker Wert auf Weboberflächen und gute Handhabbarkeit legt und typischerweise sofort einsetzbar ist, liegt der Schwerpunkt bei ESPEasy eher auf einer weiten Einbindung möglicher Sensoren und bedarf (wenige) Anpassungen. Beide Firmwares werden stetig ausgebaut und es ist nicht einfach, hier einen klaren Vorzug zu geben. TASMOTA scheint unter FHEM-Nutzern etwas verbreiterter zu sein.
 
TASMOTA kommuniziert mit FHEM via MQTT. Hier gibt es zwei Möglichkeiten.
# Man kann einen separaten Broker installieren und FHEM kommuniziert mit diesem Broker. Üblicherweise verwendet man hier mosquitto und die FHEM-Module mit dem Namen MQTT. Auf der Webseite [https://waschto.eu/sonoff-funkschalter-auf-esp8266-basis] ist die Installation inklusive des MQTT-Brokers sehr ausführlich beschrieben - bis hin zum Flashen des Sonoff-Gerätes. Insbesondere die Einrichtung der Arduino-Umgebung und das Flashen selbst setzt einige Grundkenntnisse in Linux und Arduino-Programmierung voraus, da sich mit den neuen Updates Verzeichnis- und Dateinamen geändert haben und diverse Dateien verschoben und umbenannt werden müssen. 
# Man kann FHEM als Broker nutzen. Hier sind die Module mit dem Namen MQTT2 zu verwenden.
 
Generell kann man sagen, dass bei einer Neuinstallation dem zweiten Weg der Vorzug gegeben werden sollte. Wer dagegen bereits eine Installation besitzt, wird vielleicht weiterhin MQTT in der klassischen Variante nutzen wollen. Mehr dazu in dem Forenthemen {{Link2Forum|Topic=93151|LinkText="Frage zu MQTT und MQTT2"}} und {{Link2Forum|Topic=94768|LinkText="Lohnt sich der Umstieg von mosquitto zu MQTT2?"}}. Hier wird nur die Einrichtung von MQTT beschrieben, weil diese um einiges aufwendiger als MQTT2 ist. MQTT2 ist durch [[MQTT2-Module - Praxisbeispiele#attrTemplate|attrTemplate]] nahezu selbsterklärend.
 
In diesem Wiki befindet sich eine Kurzeinführung zur Installation eines MQTT-Brokers auf der Wiki-Seite von [[MQTT Einführung]].
 
Link: [https://github.com/arendst/Sonoff-Tasmota Tasmota]
 
<div style="clear:both;"></div>
 
===Flashen mit Arends Sketch===
Die Einrichtung des Arduino-Sketches ist keine leichte Fingerübung, da sich diverse Dateinamen und Speicherorte mit Updates gegenüber den hier und in anderen Beschreibungen genannten geändert haben können (und werden...). Es wird auf die sehr  [https://waschto.eu/sonoff-funkschalter-auf-esp8266-basis umfangreiche Erläuterung von waschto.eu] verwiesen, wobei einige weitere (kleinere) Änderungen auch dort nicht dokumentiert sind, sich aber aus dem Sinnzusammenhang der Fehlermeldungen erschließen lassen. Alle hier gezeigten Bildschirmfotos und Beispiele beziehen sich auf Basis der Version Tasmota (Stand 22.02.2017).
 
Der Sketch kann hier [https://github.com/arendst/Sonoff-Tasmota.git geladen werden.]
 
[https://github.com/arendst/Sonoff-Tasmota Arends Tasmota Github] Wenn nur der ESP mit tasmota geflasht werden soll (keine Verwendung des arduinos), dann kann man eine webbasierte Lösung verwenden. Zu diesem Zweck muss aber der ESP8266 eine USB-Verbindung mit dem PC aufweisen: <nowiki>https://arendst.github.io/Tasmota/</nowiki>
 
[[Datei:sonoff_bv_01.jpg|thumb|left|alt=Arduino Boardverwalter]]
In der Arduino IDE unter Datei / Voreinstellungen im Feld "Zusätzliche Boardverwalter-URLs:" den Link: http://arduino.esp8266.com/stable/package_esp8266com_index.json einfügen.
 
Dann unter '''Werkzeuge / Board / Boardverwalter''' ganz am Ende der Liste die Librarys für "esp8266 by ESP8266 Community" die letzte Version zu installieren. {{Link2Forum|Topic=46205|Message=534707|LinkText=Link zum Board}}.
Im Tasmota Verzeichnis \lib werden auch die zum compilieren benötigten Librarys zur Verfügung gestellt.
 
Das gesamte Sonoff Verzeichnis aus [https://github.com/arendst/Sonoff-Tasmota/archive/master.zip Arendts Sketch] entpacken (ist wie hier verlinkt ein Zipfile) und dann aus diesem Verzeichnis die sonoff.ino öffnen. Es können dann alle zu dem Sketch zugehörigen Dateien angesehen/editiert werden.
 
<div style="clear:both;"></div>
Anschließend sollte noch die Datei '''user_config.h''' (im Unterverzeichnis "sonoff") editiert werden. Die Abschnitte         
 
// Wifi
// Syslog
// Ota
// MQTT
 
müssen mit der eigenen "'''Ip-Adresse-Server'''", "'''SSID'''" und "'''password'''" angepasst werden, das erleichtert den ersten Connect mit dem Modul. Seit der Version 2.1.2 können die WIFI Einstellungen 2-fach angegeben werden, somit wechselt das Device automatisch auf den 2. Wifi Hotspot wenn der erste nicht erreicht wird.
 
<syntaxhighlight lang="perl">
#define STA_SSID              "SSID"      // Wifi SSID
#define STA_PASS              "password"  // Wifi password
#define WIFI_HOSTNAME          "%s-%04d"        // Expands to <MQTT_TOPIC>-<last 4 decimal chars of MAC address>
#define WIFI_CONFIG_TOOL      WIFI_WPSCONFIG    // Default tool if wifi fails to connect (WIFI_SMARTCONFIG, WIFI_MANAGER or WIFI_WPSCONFIG)
 
// Syslog
#define SYS_LOG_HOST          "Ip-Adresse-Server"
#define SYS_LOG_PORT          514
#define SYS_LOG_LEVEL          LOG_LEVEL_NONE
#define SERIAL_LOG_LEVEL      LOG_LEVEL_INFO
#define WEB_LOG_LEVEL          LOG_LEVEL_INFO
 
// Ota
#if (ARDUINO >= 168)
#define OTA_URL              "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".ino.bin"
#else
#define OTA_URL              "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".cpp.bin"
#endif
 
// MQTT
#define MQTT_HOST              "Ip-Adresse-Server"
#define MQTT_PORT              1883
</syntaxhighlight>
 
'''Wichtig:''' Im Userprofile des Arduino Compilers (%userprofile%\Documents\Arduino\libraries\pubsubclient\src\PubSubClient.h) die Max Packet Size auf 512 erhöht werden!
<syntaxhighlight lang="perl">
#define MQTT_MAX_PACKET_SIZE 512
#define MQTT_KEEPALIVE 120
</syntaxhighlight>
Anpassung der max. Packet Size auf 512 und das Keepalive auf 120
 
Im Anschluss wird der Sketch mit der Arduino IDE (getestet mit 1.6.12) compiliert und die Binary dann exportiert (Sketch / compilierte Binärdatei exportieren). Die erzeugte .bin Datei dann mit dem Tool "ESP8266Flasher.exe" flashen, so wie auch bei ESPEasy. Sehr gut funktioniert auch das ESPtool. Wer nicht compilieren will, kann auch im Unterverzeichnis ./api/arduino/ die fertige Binary ( sonoff.ino ) benutzen, aber dann ohne Voreinstellung der lokalen IPs.
<div style="clear:both;"></div>
 
[[Datei:sonoff_sw_22.jpg|thumb|left|alt=Arends Menü]]
 
'''Achtung:''' sollten Probleme mit dem ersten Login im Webinterface auftreten, hat der Autor vorgesorgt und mit speziellem wiederholten Tastendruck können verschiedene Modi aufgerufen werden: zB:
 
'''3 x Taste kurz drücken''' und eine Smartconfig wird gestartet und die '''SSID''' und das '''Passwort''' kann über diese [https://play.google.com/store/apps/details?id=com.cmmakerclub.iot.esptouch Android App] eingegeben werden.
 
'''4 x Taste kurz drücken''' und man bringt den Device in den '''Access Point Mode''' mit der IP-Adresse '''192.168.4.1'''.
 
Bis zu sieben verschiedene Modi sind möglich, mehr dazu in Arends Wiki.
 
[https://github.com/arendst/Sonoff-Tasmota/wiki/Button-usage Link zum Wiki Arends, Button]
<div style="clear:both;"></div>
 
===MQTT testen===
[[Datei:sonoff_sw_20.jpg|thumb|left|alt=Arends Menü]]
 
Nach erfolgtem Flash des Moduls kann das Webinterface des Moduls zum ersten Mal aufgerufen werden (im Router nach der IP des Moduls suchen).
 
Es bieten sich hier mehrere Möglichkeiten die die weitere Einrichtung des Moduls unterstützen. Einfach die Menüpunkte durchprobieren, sie erklären sich von selbst. Für erste Tests empfiehlt sich die lokale Konsole um die Ereignisse aus Sicht des Moduls mit verfolgen zu können. Alles was hier gesendet wird, sollte ebenfalls am Server mitgeloggt werden können. Wenn bis hierher alles funktioniert, kann dann mir der Konfiguration in FHEM beginnen.
 
Der Name des Moduls kann unter "Configuration" -> "Configure MQTT" -> "Topic (sonoff)" nachgeschaut und geändert werden. In FHEM wird beim definieren des Moduls dieser Name in den subscribeReadings bzw. publishSets eingegeben um die Verbindung zum Modul herzustellen.
<div style="clear:both;"></div>
 
Am Server jetzt eine Konsole öffnen und folgende Topic (alle) einstellen.
:<code>mosquitto_sub -d -v -t \# </code>
Mit dieser Einstellung werden alle Topics geloggt!  
 
<syntaxhighlight lang="bash">
pi@raspberry ~ $ mosquitto_sub -d -v -t \#
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/DHT/TEMPERATURE', ... (6 bytes))
tele/sonoff_dht/DHT/TEMPERATURE 21.8 C
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/DHT/HUMIDITY', ... (6 bytes))
tele/sonoff_dht/DHT/HUMIDITY 41.7 %
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/TIME', ... (19 bytes))
tele/sonoff_dht/TIME 2017-02-22T16:05:43
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes))
tele/sonoffpow3/STATE {"Time":"2017-02-22T16:05:44", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}}
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes))
tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:05:44", "Yesterday":0.083, "Today":0.055, "Period":0, "Power":0, "Factor":0.00, "Voltage":229, "Current":0.000}
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (14 bytes))
stat/TestSwitch/RESULT {"POWER":"ON"}
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (2 bytes))
stat/TestSwitch/POWER ON
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes))
tele/sonoffpow3/STATE {"Time":"2017-02-22T16:07:14", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}}
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes))
tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:07:14", "Yesterday":0.083, "Today":0.055, "Period":0, "Power":3, "Factor":0.20, "Voltage":227, "Current":0.072}
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (15 bytes))
stat/TestSwitch/RESULT {"POWER":"OFF"}
Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (3 bytes))
stat/TestSwitch/POWER OFF
</syntaxhighlight>
 
Interessant sind für uns nun diese Einträge "stat/TestSwitch/POWER ON" , dazu am Taster des Sonoff manuell umschalten. Dies entspricht genau der Syntax wie sie im Anschluss in FHEM dann zu verwenden ist.
 
Mit diesen Einstellungen können dann entweder nach Telemetriedaten oder nach Statusmeldungen gefiltert werden. Dies ist jedoch nur notwendig wenn bereits andere MQTT Devices am Broker hängen und es sonst zu unübersichtlich wird.
mosquitto_sub -h localhost -t tele/sonoff/#    = Telemetriedaten
mosquitto_sub -h localhost -t stat/sonoff/#    = Statusmeldungen
<div style="clear:both;"></div>
 
[[Datei:sonoff_sw_21.jpg|thumb|left|alt=Arends Log]]
Sehr nützlich das lokale Log zur Fehlersuche und Inbetriebnahme.
 
<div style="clear:both;"></div>
 
===Anbindung FHEM===
[[Datei:sonoff_sw_24.jpg|thumb|left|alt=FHEM sonoff Schalter]]
Dieser einfache Schalter kommuniziert bidirektional mit dem Sonoff Device.
<div style="clear:both;"></div>
 
[[Datei:sonoff_sw_25.jpg|thumb|left|alt=FHEM sonoff Schalter]]
Die Readings in diesem verwendeten Beispiel zeigen sich wie in FHEM gewohnt.
<div style="clear:both;"></div>
 
Die Einrichtung in FHEM wird von den Modulen 00_MQTT.pm, 10_MQTT_BRIDGE und 10_MQTT_DEVICE.pm unterstützt.
Ebenso wird das Modul 98_expandJSON.pm benötigt um den {{Link2Forum|Topic=66761|LinkText=JSON String zu filtern}}.
 
Alternativ kann eine Einbindung über die [[MQTT#FHEM als MQTT-Server|MQTT2-Modulfamilie]] erfolgen. In diesem Fall benötigt man keinen eigenen Broker und FHEM stellt die Verbindung selbständig her. Mehr Informationen findet man auf der Seite [[MQTT2-Module - Praxisbeispiele]]. Hier wird jetzt die frühere Einbindung via [[MQTT (Modul)|MQTT]] vorgestellt.
 
* siehe: {{Link2Forum|Topic=27532|LinkText="neues Modul MQTT - Bridge zwischen mqtt und fhem"}}
 
<syntaxhighlight lang="perl">
### 1. Broker anlegen ###
define myBroker MQTT 10.0.0.5:1883
 
### 2. FHEM Device mit MQTT verbinden ###
define Sonoff_Switch MQTT_DEVICE
attr Sonoff_Switch IODev myBroker
attr Sonoff_Switch devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
attr Sonoff_Switch icon hue_filled_br30
attr Sonoff_Switch publishSet ON OFF cmnd/TestSwitch/POWER1
attr Sonoff_Switch room MQTT
attr Sonoff_Switch subscribeReading_Licht stat/Sonoff_Switch/POWER1
attr Sonoff_Switch subscribeReading_Sensor tele/Sonoff_Switch/SENSOR
attr Sonoff_Switch subscribeReading_Status stat/Sonoff_Switch/STATUS
attr Sonoff_Switch webCmd ON:OFF
Der hier dargestellte Beispielcode realisiert die Kommunikation zwischen FHEM und dem Sonoff Modul via MQTT Broker. Zu beachten ist hier, dass '''subscribeReading_Licht''' und '''subscribeReading_state''' unterschiedliche Syntax des Topic Strings haben!
</syntaxhighlight>
 
==ESPEasy==
ESPEasy ist neben TASMOTA eine der beiden Firmwares, mit denen Sonoff Gerät gut in FHEM integriert werden können. Während TASMOTA stärker Wert auf Weboberflächen und gute Handhabbarkeit legt, liegt der Schwerpunkt bei ESPEasy eher auf einer weiten Einbindung möglicher Sensoren. Beide Firmwares werden stetig ausgebaut und es ist nicht einfach, hier einen klaren Vorzug zu geben. TASMOTA scheint unter FHEM-Nutzern etwas verbreiterter zu sein. 


=Software=
===ESPEasy flashen===
==ESPEasy flashen==
[[Datei:sonoff_sw_6.jpg|thumb|left|alt=sonoff mit angestecktem FDTI Adapter]]
[[Datei:sonoff_sw_6.jpg|thumb|left|alt=sonoff mit angestecktem FDTI Adapter]]
Die Spannungsversorgung des sonoff Moduls wird hier vom FTDI Konverter mit 3.3V über die Verbindungskabel zum Pfostenstecker durchgeführt.  
Die Spannungsversorgung des Sonoff Moduls wird hier vom FTDI Konverter mit 3.3V über die Verbindungskabel zum Pfostenstecker durchgeführt. Siehe obigen Hinweis: [[Sonoff#internal|Vorbereitungen zum Flashen]] Anmerkung: In diesem Bild wurde die Stromversorgung durch den einfachen FTDI-Chip vorgenommen. Sollte dies zu unverständlichen Problemen führen, muss man die Spannungsversorgung prüfen (siehe [https://wiki.fhem.de/wiki/Sonoff#Stromversorgung oben]).


Der FTDI Adapter wird dann mit der USB Schnittstelle mit dem Computer verbunden.
Der FTDI Adapter wird dann mit der USB Schnittstelle mit dem Computer verbunden.


Zum Compilieren wird in der Arduino Umgebung auch die Arduino Json Library 5.6.4+ benötigt. Eine genaue Anleitung kann {{Link2Forum|Topic=55728|Message=473220|LinkText=hier}} nachgelesen werden. Es sollte stets die aktuelle Version der Arduino Umgebung verwendet werden, bzw. die Librarys auf Aktuellen Stand gehalten werden.
<div style="clear:both;"></div>
<div style="clear:both;"></div>


===mit Arduino compilieren===
===mit Arduino compilieren===
[[Datei:sonoff_sw_10.jpg|thumb|left|alt=Einstellung Arduino IDE]]
[[Datei:sonoff_sw_10.jpg|thumb|left|alt=Einstellung Arduino IDE]]
Wer selber mit der Arduino IDE compilieren will bitte folgende Einstellungen beachten. Die anschließenden Arbeiten sind dann gleich wie bei Abschnitt '''fertige Binary'''.
Wer selber mit der Arduino IDE compilieren will, bitte folgende Einstellungen beachten. Die Sketche befinden sich [https://github.com/arendst/Sonoff-MQTT-OTA-Arduino hier]. Die anschließenden Arbeiten sind dann gleich wie bei Abschnitt '''fertige Binary'''.


Unbedingt die neueste Arduino Json Library benutzen! Es gibt zwar keine Compilerfehler, aber es kommt anschließend zu Fehlfunktionen in der ESP Bridge!
Unbedingt die neueste [https://github.com/bblanchon/ArduinoJson Arduino Json Library] benutzen (siehe oben). Es gibt zwar keine Compiler Fehler, aber es kommt anschließend zu Fehlfunktionen in der ESP Bridge! Die Installation der entsprechenden Arduino-Bibliotheken kann man [https://arduino-hannover.de/2015/04/08/arduino-ide-mit-dem-esp8266/ hier] nachlesen.
 
Bitte beachten: einige neue Slampher-Module haben den ESP8285 verbaut - demzufolge muss dann dieser Chip ausgewählt werden.


<div style="clear:both;"></div>
<div style="clear:both;"></div>
Zeile 112: Zeile 461:
  Upload Speed: 115200
  Upload Speed: 115200
<div style="clear:both;"></div>
<div style="clear:both;"></div>
===fertige Binary flashen===
===fertige Binary flashen===
[[Datei:sonoff_sw_7.jpg|thumb|left|alt=NodeMCU Firmware Flasher]]
[[Datei:sonoff_sw_7.jpg|thumb|left|alt=NodeMCU Firmware Flasher]]
Zeile 117: Zeile 467:


Siehe dazu auch den [http://www.esp8266.nu/index.php/Main_Page Link von ESPEasy] und das [https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/flash-firmware Handbuch] für den Flasher.
Siehe dazu auch den [http://www.esp8266.nu/index.php/Main_Page Link von ESPEasy] und das [https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/flash-firmware Handbuch] für den Flasher.
In manchen Versionen von ESPEasy (zB.R120) ist auch ein Flasher beigelegt, welcher zwar keine grafische Oberfläche hat aber hervorragend funktioniert. Wenn andere versagen, geht es mit diesem Flasher immer noch, einfach probieren!
<div style="clear:both;"></div>
<div style="clear:both;"></div>
  Netzspannung darf 'NICHT' angeschlossen sein!!!
  Netzspannung darf 'NICHT' angeschlossen sein!!!
Zeile 125: Zeile 478:
  Sonoff vom FTDI trennen
  Sonoff vom FTDI trennen
<div style="clear:both;"></div>
<div style="clear:both;"></div>
Wenn einmal die Firmware auf das sonoff Modul geflasht worden ist, kann in Zukunft ESPEasy direkt unter Tools via HTTP dies durchführen. Es muss dazu kein FTDI Konverter mehr verwendet werden.
Wenn einmal die Firmware auf das Sonoff Modul geflasht worden ist, kann in Zukunft ESPEasy direkt unter Tools via HTTP dies durchführen. Es muss dazu kein FTDI Konverter mehr verwendet werden.


==ESPEasy==
===ESPEasy einstellen===
[[Datei:sonoff_sw_11.jpg|thumb|left|alt=ESPEasy Devices]]
[[Datei:sonoff_sw_11.jpg|thumb|left|alt=ESPEasy Devices]]
Wenn das Modul fertig geflasht ist und die Verbindung zum Modul hergestellt ist, können die Einstellungen in ESPEasy durchgeführt werden.
Wenn das Modul fertig geflasht ist und die Verbindung zum Modul hergestellt ist, können die Einstellungen in ESPEasy durchgeführt werden.
Dazu am Webinterface anmelden und zunächst die 2 Devices definieren.
Dazu am Webinterface anmelden und zunächst die zwei Devices definieren.


Der Hersteller hat für das '''Relaise GPIO 12''' und für die '''grüne Led GPIO 13''' vorgesehen. Der '''Taster ist an GPIO 0''' angeschlossen.
Der Hersteller hat für das '''Relaise GPIO 12''' und für die '''grüne Led GPIO 13''' vorgesehen. Der '''Taster ist an GPIO 0''' angeschlossen.
Zeile 139: Zeile 492:
Bei den Devices sollten die hier dargestellte Einstellungen beachtet werden. Der Switch (PUMP) sollte auf Input gestellt werden, sodass die anschließenden und benötigten Rules aktiviert werden können.
Bei den Devices sollten die hier dargestellte Einstellungen beachtet werden. Der Switch (PUMP) sollte auf Input gestellt werden, sodass die anschließenden und benötigten Rules aktiviert werden können.


Da beide Devicenamen gleich benannt wurden (PUMP) wird in Fhem nur ein Device angelegt! Die dazugehörenden Valunames sind unterschiedlich (Relay, Key).
Da beide Devicenamen gleich benannt wurden (PUMP) wird in FHEM nur ein Device angelegt! Die dazugehörenden Valuenames sind unterschiedlich (Relay, Key).


<div style="clear:both;"></div>
<div style="clear:both;"></div>
Zeile 145: Zeile 498:
===Device Taster===
===Device Taster===
[[Datei:sonoff_sw_13.jpg|thumb|left|alt=Device Key]]
[[Datei:sonoff_sw_13.jpg|thumb|left|alt=Device Key]]
Der Taste muss natürlich nur konfiguriert werden, wenn auch händisch am sonoff geschaltet werden soll. Wird dies nicht benötigt, können auch die Rules geändert bzw. angepasst werden. Doch alleine zu Testzwecken ist es eine nützliche Sache.
Der Taste muss natürlich nur konfiguriert werden, wenn auch händisch am Modul geschaltet werden soll. Wird dies nicht benötigt, können auch die Rules geändert bzw. angepasst werden. Doch alleine zu Testzwecken ist es eine nützliche Sache.
<div style="clear:both;"></div>
<div style="clear:both;"></div>


===Rules===
===Rules===
[[Datei:sonoff_sw_14.jpg|thumb|left|alt=Rules]]
[[Datei:sonoff_sw_14.jpg|thumb|left|alt=Rules]]
Da das sonoff Modul auch einen eingebauten Taster hat und somit auch lokal bedient werden kann, sollte man zunächst unter '''Tools / Advanced das Häckchen Rules''' aktivieren, erst dann wird der Tab sichtbar und es können Rules erstellt werden.
Damit der Sonoff unabhängig von FHEM schaltet, kann festgelegt werden, wie er sich intern verhält. Ein solches Gerät wird zB von CreationX angeboten: Dort wird der Sonoff zwischen die Zuleitung zur Lampe gelegt. Liegt in der Zuleitung Spannung an (weil jemand einen klassischen Lichtschalter gedrückt hat), signalisiert ein Spannungswandler ein Signal. Dieses Signal wiederum wird genutzt, um GPIO0 auf LOW (GND) oder HIGH zu legen.
<div style="clear:both;"></div>
 
Intern regel nun eine rule, dass bei einem solchen Signal das Sonoff-Relais schaltet bzw freigegeben wird. Wenn man nun die Lampe an das Sonoff-Relais schaltet, verhält sich der Lichtschalter so wie ohne Sonoff: Wird geschaltet, geht das Licht an. Der Vorteil des Sonoff besteht darin, dass neben den klassischen Lichtschaltern nun auch via FHEM geschaltet werden kann.
 
Die rule ist dabei wie folgt zu definieren. Dabei wird angenommen, dass an GPIO0 das Signal anliegen wird. Dazu muss ein ''device'' in ESPEasy definiert werden, dass dieses Signal empfängt. Das device ist dabei ein Switch (nach dem Schaltvorgang bleibt der Schaltzustand erhalten) oder ein Taster (nach dem Schaltvorgang kehrt man in den ursprünglichen Schaltzustand zurück). Das device in ESPEasy kennt drei Bezeichnungen: ''device'' (das ist der Typ oder die Art und Weise des devices, es sind beispielsweise auch Sensoren als devices möglich), ''name'' (damit wird das device angesprochen) sowie ''value'' (das ist dann der Schaltzustand). Will man auf den Schaltzustand zugreifen, erfolgt dies mit der Syntax name#value. Weitere Details zu den Programmierung von rules findet man auf der Webseite von letscontrolit: [[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules]]


Da das Sonoff Modul auch einen eingebauten Taster hat und somit auch lokal bedient werden kann, sollte man zunächst unter '''Tools / Advanced das Häkchen Rules''' aktivieren, erst dann wird der Tab sichtbar und es können Rules erstellt werden.
<syntaxhighlight lang="perl">
  on PUMP#Key do
  on PUMP#Key do
   if [PUMP#Relay]=1
   if [PUMP#Relay]=1
Zeile 167: Zeile 525:
   endif
   endif
  endon
  endon
Diese Rules ermöglichen, das bei lokaler Bedienung durch den Taster auch die '''Led''' richtig geschaltet wird.
</syntaxhighlight>
Diese Rules ermöglichen, dass bei lokaler Bedienung durch den Taster auch die '''Led''' richtig geschaltet wird.
Mit 'on PUMP#Key do' wird geprüft ob die Taste gedrückt ist und schaltet dann entsprechend die Led. Mit den Rules können auch Timer oder sonstige Spielereien realisiert werden. Siehe dazu das [http://www.esp8266.nu/index.php/Tutorial_Rules Tutorial] von ESPeasy.
Mit 'on PUMP#Key do' wird geprüft ob die Taste gedrückt ist und schaltet dann entsprechend die Led. Mit den Rules können auch Timer oder sonstige Spielereien realisiert werden. Siehe dazu das [http://www.esp8266.nu/index.php/Tutorial_Rules Tutorial] von ESPeasy.
<div style="clear:both;"></div>
==Fhem==
[[Datei:sonoff_sw_9.jpg|thumb|left|alt=Fhem Konfiguration]]
Dies ist eine einfache Darstellung wie Fhem automatisch den Device erstellt.
Damit Fhem mit ESPEasy und dem sonoff Modul kommunizieren kann, muss in der fhem.cfg vorerst nur die espBridge mit dem hier dargestellten Eintrag aktiviert werden.
<div style="clear:both;"></div>
define espBridge ESPEasy bridge 8383
Dies ist eigentlich die einzige Zeile die in fhem.cfg angelegt werden muss. Die restliche Konfiguration wird von Fhem automatisch generiert.


===Anbindung FHEM===
[[Datei:sonoff_sw_9.jpg|thumb|right|alt=FHEM Konfiguration]]
Dies ist eine einfache Darstellung wie FHEM automatisch den Device erstellt.


Damit FHEM mit ESPEasy und dem Sonoff Modul kommunizieren kann, muss in der fhem.cfg vorerst nur die EspBridge mit dem hier dargestellten Eintrag aktiviert werden.
:<code>define espBridge ESPEasy bridge 8383</code>
Dies ist eigentlich die einzige Zeile die in fhem.cfg angelegt werden muss. Die restliche Konfiguration wird von FHEM automatisch generiert.
<syntaxhighlight lang="perl">
  ##########################################
  ##########################################
  ###            ESPEASY              ####
  ###            ESPEASY              ####
Zeile 195: Zeile 551:
  attr ESPEasy_sonoff_1_PUMP stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Relay","")}
  attr ESPEasy_sonoff_1_PUMP stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Relay","")}
  attr ESPEasy_sonoff_1_PUMP webCmd :
  attr ESPEasy_sonoff_1_PUMP webCmd :
</syntaxhighlight>
hier ein Beispiel wie es auch manuell leicht modifiziert werden kann.
[[Datei:sonoff_sw_8.jpg|thumb|right|alt=Sonoff Readings]]
Die Readings werden durch die Bridge (Modul ESPEasy) automatisch angelegt.
Es besteht hier noch genug Spielraum um z.B. auch noch Temperatursensoren an das Modul anzuschließen und ebenfalls in FHEM darzustellen.
=Beispiele=
==Einrichtung Sonoff POW==
[[Datei:sonoff_sw_31.jpg|thumb|left|alt=Sonoff POW]]
'''Bei einer Charge des Sonoff POW gibt es Kontaktprobleme beim Sicherungshalter. ITAED hat deshalb eine Rückrufaktion gestartet: [https://www.itead.cc/blog/sonoff-th16-and-pow-recall-notice Link zur Rückrufaktion]. Bitte unbedingt die Kontaktierung des Sicherungshalter überprüfen bzw. neuen Sicherungshalter einsetzen!'''
Das Modul kommt in gewohnter ITAED Qualität, eine derart kostengünstige Energiemessung wird bei Smart Home Anwendern gerne eingesetzt. Die Originalsoftware habe ich nicht einmal getestet, da damit eine Anbindung an FHEM leider nicht möglich ist (wer will schon die Steuerbefehle seiner Schalter an eine nicht dokumentierte chinesische Cloud senden).
<div style="clear:both;"></div>
[[Datei:sonoff_sw_33.jpg|thumb|left|alt=Sonoff POW]]
Bitte auf keinen Fall das Modul während der Arbeiten an die Netzspannung anschließen. Zum Flashen genügt (und nur diese) die Versorgungsspannung des USB-TTL Konverters. Wie auf dem Foto gut erkennbar, wurde dieses Modul ohne Einlöten einer Pfostensteckerleiste geflasht. Die Steckverbindung wird einfach in die Lötaugen gesteckt und mit einem Gummiring fixiert, da ja spätere Flashvorgänge im Webif des Models funktionieren und so die Arbeit eingespart werden kann. Es steht jedoch nichts im Wege die Pfostensteckerleiste einzulöten.
<div style="clear:both;"></div>
Die Anschlüsse am Modul sind wie folgt belegt.
o GND
o TxD
o RxD
o VDD
Für den Flashvorgang gelten die selben Regeln wie schon beim Sonoff Switch oben erwähnt (3,3V!).
<div style="clear:both;"></div>
===Software===
[[Datei:sonoff_sw_35.jpg|thumb|left|alt=Sonoff POW FHEM]]
Als Software steht im Augenblick nur der Sketch von Arends zur Verfügung, liefert aber alles was das Herz begehrt und ist ist einfach zu handhaben. Hier eine eine einfache Darstellung mit der aktuellen Leistung und dem Tagesverbrauch. Zusätzlich besteht auch noch die Möglichkeit den angeschlossenen Verbraucher Ein- oder Auszuschalten.
<div style="clear:both;"></div>
[[Datei:sonoff_pow_02.jpg|thumb|left|alt=Sonoff POW Webif]]
Seit Version 2.0.19a ist auch die Leistungsanzeige im WEBIF wie im Bild links integriert. Auch der Energieverbrauch des Vortages wird mit angezeigt. Alle hier angezeigten Daten werden auch zyklisch im MQTT String an FHEM übergeben.
Zusätzlich kann im Sketch auch das Feature "'''Power_Limit'''" aktiviert werden. Mit dem Power_Limit wird eine zusätzliche Nachricht erzeugt, wenn ein bestimmter einstellbarer Grenzwert über- oder unterschritten wird.
Es lassen sich dadurch Meldungen wie "Waschmaschine fertig" oder ähnliches ohne weitere Schwellwert Überwachungen in FHEM ableiten. Die Meldungen kommen in MQTT mit "'''POWER_LOW ON'''" bzw. "'''POWER_LOW OFF'''".
<div style="clear:both;"></div>
Bei erstmaligen Start des Moduls muss der Typ des Modules von "SONOFF" auf "'''SONOFF_Pow'''" geändert werden, damit die Software weiß mit welchem Modul es zu tun hat und kann dann die entsprechenden Berechnungen durchführen. Die Leistungsdaten kommen ja in Form einer Frequenz aus dem Baustein und müssen im Sketch (xsns_hlw8102.ino) umgerechnet werden.
                                           
<div style="clear:both;"></div>
[[Datei:sonoff_sw_36.jpg|thumb|left|alt=Sonoff POW Attribute]]
Dieses Bild zeigt die Attribute die vom Modul via MQTT an FHEM geliefert werden.
<div style="clear:both;"></div>
aktuell gelieferter JSON String vom Sketch der alle Messdaten beinhaltet.
{"Time":"2017-02-22T16:38:47", "Yesterday":"2.286", "Today":"1.593", "Period":9, "Power":231, "Factor":"1.00", "Voltage":231, "Current":"0.866"}
und hier das zugehörige Reading.
tele/sonoffpow/ENERGY   
     
Hier ein Mitschnitt des Datenverkehrs zum Broker zwecks Kontrolle der korrekten Funktion der Module und der Software.
<syntaxhighlight lang="text">
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/STATE', ... (103 bytes))
tele/sonoffpow/STATE {"Time":"2017-02-22T16:39:15", "Uptime":79, "LIGHT":"OFF", "Wifi":{"AP":2, "SSID":"Liwest", "RSSI":54}}
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/ENERGY', ... (140 bytes))
tele/sonoffpow/ENERGY {"Time":"2017-02-22T16:39:15", "Yesterday":"1.391", "Today":"1.191", "Period":0, "Power":0, "Factor":"0.00", "Voltage":0, "Current":"0.000"}
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_wall1/STATE', ... (105 bytes))
tele/sonoff_wall1/STATE {"Time":"2017-02-22T16:39:15", "Uptime":96, "POWER":"OFF", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":100}}
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes))
tele/sonoffpow3/STATE {"Time":"2017-02-22T16:39:20", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}}
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes))
tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:39:20", "Yesterday":0.083, "Today":0.057, "Period":0, "Power":0, "Factor":0.00, "Voltage":230, "Current":0.000}
</syntaxhighlight>
Die Einstellungen können mit folgender Syntax angefordert werden (zwei Terminalfenster öffnen, eines zum protokollieren und eines zum senden der Befehle).
mosquitto_sub -d -v -t \#  MQTT Datenverkehr protokolieren
mosquitto_pub -q 2 -t cmnd/sonoffpow/status/set -m "8"      = SonoffPOW Status jetzt auslesen
mosquitto_pub -q 2 -t cmnd/sonoffpow/TelePeriod/set -m "60" = Timer setzen, alle 60 Sekunden Daten senden
Die Kommandos können direkt am Broker (Terminalfenster Putty etc.) abgesetzt werden.
<div style="clear:both;"></div>
=== Kalibrieren und Genauigkeit ===
Ab Version 2.0.11 kann nun auch der POW kalibriert werden.
Dazu kann man 2 Konsolenfenster öffnen, im ersten aktiviert man das Protokoll für den Datenverkehr
:<code>mosquitto_sub -d -v -t \#  MQTT Datenverkehr protokollieren </code>
Dann kann mit folgenden Befehlen die HLW Referenz Pulsfrequenz gesetzt werden.
mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWUCAL/set -m "2100"    default = 1950
mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWICAL/set -m "2450"    default = 3500
mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWPCAL/set -m "13500"    default = 12345
Entweder man hat eine definierte Last zur Verfügung oder besser man misst mit einem Leistungsmesser nach. Die Spannung kann man mit einem Multimeter nachmessen (sollte 230 V sein) und der Strom wird errechnet (bei 100 Watt I = P / U ) = 100/230 = 0,4347.
Die Referenzwerte solange geringfügig ändern bis die Ausgabe passt. Für die Ausgabe wird einfach eine Statusabfrage durchgeführt.
:<code>mosquitto_pub -q 2 -t cmnd/sonoffpow/status/set -m "8"</code>
Befehl für die Statusabfrage
cmnd/sonoffpow/status/set 8
Received PUBLISH (d0, q0, r0, m0, 'stat/sonoffpow/STATUS', ... (103 bytes))
stat/sonoffpow/STATUS PWR: Voltage 225 V, Current 0.427 A, Current Power 98 W, Total Power Today 0.080 kWh, Power Factor 1.00
Ergebnis der Statusabfrage mit Spannung, Strom und Leistung.
<div style="clear:both;"></div>
Bei sehr kleinen Wattzahlen (unterhalb von 10 W) ist der POW etwas ungenau. Es empfiehlt sich hier, nicht die Größe Power zu verwenden, sondern die Veränderung der Größe Total zu betrachten. Wird diese über mehrere Perioden gemittelt, so kann auch für einstellige Watt Werte ein relativ genaues Ergebnis erzielt werden. Um dies zu erreichen, sind mehrere Schritte nötig.
* Zuerst muss die Übertragungsfrequenz des Sonoff eingestellt werden. Hier ist Probieren angesagt, in einem Beispiel wurde eine Frequenz von 90s pro Datensatz verwendet. Hierzu ruft man beispielsweise die Seite
::<code>http://<ip-Adresse-des-Sonoff>/cm?cmnd=Teleperiod%2090</code>
:auf. Die nach dem Leerzeichen %20 stehende 90 steht für 90s. Ein Aufruf ohne Zeit liefert die gegenwärtige Telemetry-Periode zurück.
* Danach ist die Genauigkeit der Leistungsmessung am Sonoff auf die höchstmögliche Größe einzustellen (siehe auch [https://github.com/arendst/Sonoff-Tasmota/wiki/Commands den Wiki von TASMOTA]). Dies geschieht durch
::<code>http://<ip-Adresse-des-Sonoff>/cm?cmnd=WattRes%201</code>
:sowie
::<code>http://<ip-Adresse-des-Sonoff>/cm?cmnd=EnergyRes%205 </code>
* Im nächsten Schritt muss ein Reading für die Veränderung des Total-Wertes definiert werden. Die geschieht beispielsweise durch
::<code>attr <device_name_des_Sonoff_pow> userReadings myPower:Time.* difference { 1000*ReadingsVal("Sonoff_pow1","Total",0);;;;}, myPower.av:Time.* {movingAverage("Sonoff_pow1","myPower",360)}</code>
* Hierbei wird gleichzeitig neben dem Reading myPower auch eine Reading myPower.av für den gleitenden Mittelwert definiert. Der Differenzwert wird mit 1000 multipliziert, damit die Anzeige in Wh und nicht kWh erfolgt. Der Mittelwert wird dabei über 360s gestreckt. Sowohl die 90s oben als auch die 360s müssen durch probieren der konkreten Situation angepasst werden. Die Funktion movingAverage selbst muss in 99_myUtils.pm definiert werden, siehe dazu "[[Gleitende Mittelwerte berechnen und loggen]]". Weiterführende Hinweise in diesem {{Link2Forum|Topic=100758|Message=75443|LinkText=Forenthema}}.
===FHEM Anbindung===
Ein Beispiel einer einfachen Anbindung via JSON an FHEM. MQTT von Arends ist insofern notwendig, da in der Software ESPEasy und der Bridge noch keine Implementierung der Frequenzumrechnung enthalten ist.
<syntaxhighlight lang="text">
define Sonoff_Pow MQTT_DEVICE
attr Sonoff_Pow IODev myBroker
attr Sonoff_Pow icon measure_power
attr Sonoff_Pow publishSet ON OFF cmnd/sonoffpow/POWER
attr Sonoff_Pow stateFormat {sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef))}
attr Sonoff_Pow subscribeReading_ENERGY tele/sonoffpow/ENERGY
attr Sonoff_Pow subscribeReading_POWER stat/sonoffpow/POWER
attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/POWER
attr Sonoff_Pow webCmd ON:OFF
</syntaxhighlight>
Zusätzlich kann hier noch das Relais mit "ON" und "OFF" ein- ausgeschaltet werden.
Ebenso notwendig ist das Setzen der Regexp für den JSON Konverter.
:<code>define ej3 expandJSON Sonoff.*:.*:.[{].*} </code>
hier wird alles was mit dem Namen Sonoff beginnt gefiltert und automatisch alle darin enthaltenen Readings erstellt.
:<code>define ej3 expandJSON Sonoff.*:ENERGY.*:.[{].*} (Power|Yesterday|Today) </code>
oder so, da werden nur die Readings Power, Yesterday und Today erstellt.
Somit ist auch klar, dass in FHEM auch JSON installiert sein muss. Ebenso können die verschiedenen Regexp im [https://github.com/ddtlabs/expandJSON Wiki] nachgelesen werden.
* siehe: {{Link2Forum|Topic=66761|LinkText=siehe Foren-Thema}}.
'''Source Reading:'''
device:reading:.{.*}
.*WifiIOT.*:sensor.*:.{.*}
sonoff_.*:.*:.{.*}
dev.*:(sensor1|sensor2|teleme.*):.{.*}
(dev.*|[Dd]evice.*):json:.{.*}
(devX:jsonX:.{.*}|devY.*:jsonY:.{.*Wifi.*{.*SSID.*}.*})
'''Target Reading:'''
.*power.*
(Current|Voltage|Wifi.*) 
'''Komplette Definition des Filters:'''
define ej1 expandJSON device:sourceReading:.\{.*} targetReading
define ej3 expandJSON .*\.SEN\..*:.*:.\{.*}
define ej3 expandJSON sonoff_.*:sensor.*:.\{.*} (power.*|current|voltage)
define ej3 expandJSON Sonoff.*:.*:.\{.*} (Power|Current|Voltage|Yesterday|Today|Total|AnalogInput0|RSSI|.*Humidity|.*Temperature|Counter1|Period)
letzteres Filter definiert so ziemlich alle wichtigen Sonoff Messdaten
===Netz-Anschluss===
[[Datei:sonoff_sw_34.jpg|thumb|left|alt=Sonoff POW Netzanschluss]]
Erst wenn alle Arbeiten an der Hard- und Software abgeschlossen sind, kann man das Modul an die Netzspannung anschließen. Wer es sich einfach machen will, nimmt eine Industriell gefertigte 230 V Verlängerung  (zwischen 1,5 - 3 Meter) und schneidet sie in der Mitte durch. Nach dem ab-isolieren der flexiblen Drähte sollte diese '''mit Aderendhülsen''' versehen werden (müssen aber exakt passen, da hier kaum Platz in den Klemmen ist).
Mit einem kleinen Schraubendreher kann man die Feder der Klemmen niederdrücken und das verzinnte Drahtende tief ich die Öffnung stecken. Es dürfen keine Drahtlitzen aus den Öffnungen sichtbar sein, Kurzschlussgefahr! Ebenso sollte eine Zugprobe durchgeführt werden ob die Klemme auch richtig eingerastet ist.
'''ACHTUNG: diese Arbeiten müssen von einem ausgebildeten Fachpersonal (Elektriker) durchgeführt werden, Lebensgefahr!'''
<div style="clear:both;"></div>
===ReadingsGroup mit Schaltmöglichkeit===
[[Datei:sonoff_pow_03.jpg|thumb|left|alt=readingsGroup mit Schalter]]
Die ReadingsGroup kann auch gleich mit einem Schalter versehen werden um den POW Ein- oder Aus schalten zu können. Dazu ist aber eine andere Einstellung im Sketch erforderlich.
<div style="clear:both;"></div>
In der "'''user_config.h'''" muss an dieser Stelle auch die "'''PUB_PREFIX'''" auf die gleiche Topic wie "PUB_PREFIX2" eingestellt werden. Durch diese Maßnahme wird erreicht, dass sofort nach dem Knopfdruck auch der Status mit der Topic "tele" übertragen wird. Würde der weiterhin mit "stat" übertragen, kann er in der Readingsgroup nur sehr umständlich weiter behandelt werden. Dadurch wird erreicht, dass der Schalter sofort nach dem Schaltvorgang und der Rückmeldung (Status) auch seine Farbe ändert. Wird dieser Eintrag vergessen, ändert der Schalter erst nach Eintreffen der nächsten zyklischen Abfrage seinen Status/Farbe.
#define SUB_PREFIX            "cmnd"      // Sonoff devices subscribe to:- SUB_PREFIX/MQTT_TOPIC and SUB_PREFIX/MQTT_GRPTOPIC
#define PUB_PREFIX            "tele"      // Sonoff devices publish to:- PUB_PREFIX/MQTT_TOPIC
#define PUB_PREFIX2            "tele"      // Sonoff devices publish telemetry data to:- PUB_PREFIX2/MQTT_TOPIC/UPTIME, POWER/LIGHT and TIME
hier die PUB_PREFIX mit der geänderten Topic "tele" anstatt "stat"
<syntaxhighlight lang="html">
define SonoffPows readingsGroup <%measure_power>,<aktuell>,<Tag>,<Gestern>,<Strom>,<Durchschnitt>,<max.P>,<Zyklus>,<Faktor>,<Status>,< hr > .*(Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3|Sonoff_Pow4):Power,Today,Yesterday,Current,Power_avg_day,Power_max_day,Period,Factor,LIGHT
attr SonoffPows commands {'LIGHT.ON' => 'set $DEVICE OFF','LIGHT.OFF' => 'set $DEVICE ON'}
attr SonoffPows mapping %ALIAS
attr SonoffPows nameStyle style="color:yellow"
attr SonoffPows room Energie,MQTT
attr SonoffPows valueFormat {'Power' =>"%.0f W", 'Today' =>"%.2f Kw",'Yesterday' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'Power_max_day' => "%.0f W",'Power_avg_day' => "%.2f W",'Power'=>"%.0f W",'Factor' => "%.2f "}
attr SonoffPows valueIcon {'LIGHT.ON' => 'rc_GREEN@green', 'LIGHT.OFF' => 'rc_RED@red'}
attr SonoffPows valueStyle { if($READING eq "Power" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Power" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Today" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Today" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Today" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Current" && $VALUE <= 0.45){'style="color:green;;text-align:right"'}elsif( $READING eq "Current" && $VALUE > 0.45 && $VALUE < 0.87 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "Current" && $VALUE >= 0.87){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Period" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Period" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Period" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"'}}
</syntaxhighlight>
Dieses Beispiel ist für '''Tasmota mit JSON''' ausgelegt und benötigt ebenso wie oben die Erweiterung "average".
define Sonoff_Pow_CURRENT_POWER average Sonoff_Pow:Power.*
damit werden der Durchschnitt und min max für Tasmota mit JSON erzeugt.
<div style="clear:both;"></div>
===FTUI===
[[Datei:sonoff_pow_energy.JPG|thumb|left|alt=Tablett FTUI]]
Wer möchte kann die Energieanzeigen auch mit der {{Link2Forum|Topic=34233|LinkText=Tablett UI}} für eine Tablet Ansicht gestalten. Mit dieser stehen viele Möglichkeiten zu einer attraktiven Darstellung zur Verfügung.
Hier ein Beispiel welches mit den Widget "[http://www.fhemwiki.de/wiki/FHEM_Tablet_UI#Widget_THERMOSTAT thermostat]" dargestellt ist.
<div style="clear:both;"></div>
==Sonoff Slampher==
Anmerkung: Seit April 2017 ist eine neue Version des Slampher im Umlauf (v 2.0 2017-04-14, deutlich auf der Platine zu erkennen), die etwas anders geflasht werden muss. Siehe hierzu [http://homeautomation.proboards.com/thread/259/program-slampher-socket-esp8285-esp8266 diesen Blogeintrag.] Zum einen ist der ESP8285 statt des ESP8266 verbaut; zum anderen muss unten nicht der rechte Pin des R20, sondern der linke Pin des R9 mit GND verbunden werden.
[[Datei:sonoff_sl_53.jpg|thumb|left|alt=Sonoff SLAMPHER]]
Dieses Modul ist eine Besonderheit was das Flashen betrifft, denn mit Hilfe des Tasters kann der ESP8266 NICHT in den Flashmode gebracht werden. Der Taster ist intern anderweitig verdrahtet und somit für diesen Zweck nicht zu gebrauchen. Wie hier links im Bild zu sehen ist, muss der rechte Pin des R20 (oben im Bild) während des Anschlusses der Spannung Vcc auf Masse gelegt werden. Eine Möglichkeit ist, ein Stückchen Draht anzulöten und diesen dann beim Einstecken auf den Masse-Pin des USB-Konverters zu legen.
Pinbelegung des Steckers von oben nach unten:
o - GND
o - TxD
o - RxD
'''o''' - Vdd
<div style="clear:both;"></div>
[[Datei:sonoff_sl_51.jpg|thumb|left|alt=Sonoff SLAMPHER R20]]
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier ist genau ersichtlich, wo der R20 auf der Platine platziert ist. }}
Hier noch einmal schön zu sehen wo der R20 (der ist nicht eingelötet sondern leer) exakt auf der Platine liegt, gemeint ist der rechte Pin. Hier kann auch leicht gelötet werden, da keine empfindlichen Bauteile in der Nähe sind und auch genug Platz vorhanden ist. (Achtung: Beim Slampher v2.0 muss der linke Pin des R9 auf Masse gelegt werden, siehe oben!).
<div style="clear:both;"></div>
[[Datei:sonoff_sl_50.jpg|thumb|left|alt=Sonoff SLAMPHER R20]]
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier ist genau ersichtlich, wo der Draht am R20 aufgelötet wurde }}
Hier ist ein kleines Stück Schaltdraht auf den Pin bereits aufgelötet und bereit zum flashen!
In diesem Beispiel wurde keine Pfostensteckerleiste auf die Platine aufgelötet, sondern nur durchgesteckt und mit einem Gummiring  zum Relais fixiert, das erspart den Lötvorgang, weil in Zukunft dann ohnehin OTA geflasht werden kann.
Also Pin20 auf Masse legen und USB-Konverter an den PC einstecken, dann den Draht von der Masse entfernen. Der ESP8266 sollte jetzt im Flashmodus bereit stehen und kann wie bereits oben beschrieben geflasht werden.
<div style="clear:both;"></div>
===Sonoff Slampher Software===
[[Datei:sonoff_sl_54.jpg|thumb|left|alt=Sonoff SLAMPHER FHEM]]
Als Software wird Arends Sketch installiert (Kommunikation über MQTT), da zum derzeitigen Zeitpunkt ESPEasy das Modul noch nicht integriert hat und somit auch nicht ansteuern kann.
<div style="clear:both;"></div>
define Sonoff_SL MQTT_DEVICE
attr Sonoff_SL IODev myBroker
attr Sonoff_SL devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
attr Sonoff_SL icon hue_filled_br30
attr Sonoff_SL publishSet ON OFF cmnd/sonoffsl/POWER1
attr Sonoff_SL room Bewegung,_Sonoff
attr Sonoff_SL stateFormat Licht
attr Sonoff_SL subscribeReading_Licht tele/sonoffsl/POWER1
attr Sonoff_SL subscribeReading_state cmnd/sonoffsl/POWER1
attr Sonoff_SL webCmd ON:OFF
Hier ein Beispiel wie in FHEM der Slampher eingebunden werden kann. In diesem Beispiel wird davon ausgegangen, dass im Modul die Topic "sonoffsl" benannt wurde. Wer einen anderen Namen haben möchte, muss dies dann auch in FHEM entsprechend anpassen.
<div style="clear:both;"></div>
==Sonoff Th10/16 ==
[[Datei:sonoff_th_01.jpg|thumb|left|alt=Sonoff TH10]]
Das Modul kann durch Drücken des Tasters während dem Einstecken des USB-Konverters in den Flashmodus gebracht werden.
Der Th10/16 kann mit zwei unterschiedlichen Typen von Sensoren bestückt werden, hier im Beispiel mit dem externen Temperaturfühler DS18B20.
Wie im Bild klar zu sehen ist, kann das Webif auch zur Darstellung via Mobile verwendet werden. Mit "Toggle" wird Ein- oder Aus geschaltet und  darunter ist die aktuelle Temperatur ersichtlich. Für diese Ansicht muss keine MQTT Verbindung eingerichtet werden, da die Kommunikation hier rein über HTTP erfolgt.
Die unten dargestellten Beispiele für FHEM beziehen sich auf Arends Sketch, also über MQTT. Dieses Modul kann aber genauso leicht über ESPEasy und der ESPEasy-Bridge eingebunden werden.
<div style="clear:both;"></div>
Pinbelegung des Steckers von oben nach unten:
o - GND
o - TxD
o - RxD
'''o''' - Vdd
<div style="clear:both;"></div>
[[Datei:sonoff_th_02.jpg|thumb|left|alt=Sonoff TH10]]
{{Randnotiz|RNTyp=[g|Info]|RNText=Einbindung in FHEM via MQTT! }}
<div style="clear:both;"></div>
### Temperatur und Luftfeuchte vom Sonoff Switch ###
define Sonoff_Temp MQTT_DEVICE
attr Sonoff_Temp IODev myBroker
attr Sonoff_Temp alias Pool Wasser
attr Sonoff_Temp eventMap ON:on OFF:off
attr Sonoff_Temp icon temperature_humidity
attr Sonoff_Temp publishSet ON OFF cmnd/sonoffth/POWER1
attr Sonoff_Temp room _Sonoff
attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"temperature",0))}
attr Sonoff_Temp subscribeReading_SENSOR tele/sonoffth/SENSOR
attr Sonoff_Temp subscribeReading_state cmnd/sonoffth/POWER1
Beispiel für FHEM mit Temperaturanzeige mit DS18B20
define Sonoff_Switch MQTT_DEVICE
attr Sonoff_Switch IODev myBroker
attr Sonoff_Switch alias Pool Licht
attr Sonoff_Switch devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_Switch eventMap ON:on OFF:off
attr Sonoff_Switch icon light_ceiling
attr Sonoff_Switch publishSet ON OFF cmnd/sonoffth/POWER1
attr Sonoff_Switch room _Sonoff
attr Sonoff_Switch stateFormat Licht
attr Sonoff_Switch subscribeReading_Licht tele/sonoffth/POWER1
attr Sonoff_Switch subscribeReading_state cmnd/sonoffth/POWER1
attr Sonoff_Switch webCmd ON:OFF
Der Schalter nochmals separat dargestellt, je nach Geschmack.
<div style="clear:both;"></div>
==Sonoff 4CH 4-Kanal Schaltmodul==
===Besonderheiten ===
[[Datei:sonoff_ch4_1.jpg|thumb|left|alt=Sonoff CH4]]
{{Randnotiz|RNTyp=[g|Info]|RNText=Achtung andere Einstellungen der Arduino IDE: Select Board "Generic ESP8285 Module" (=Flash Mode "DOUT") and Flash Size "1M (64K SPIFFS)"n! }}
Der Sonoff 4CH ist mit seinen 4 Kanälen ein sehr preiswertes Modul im Gehäuse und für Hutschienenmontage. Anstatt des üblichen ESP8266 besitzt dieses Modul schon den moderneren '''ESP8285'''. Es müssen daher in der Arduino IDE andere Einstellungen vorgenommen werden. Unter Board wird hier das "'''Generic 8285 Module'''" mit '''1M und 64K Spiffs''' angewählt. Der Flashmode "'''DOUT'''" wird dann automatisch eingestellt, bzw. ausgeblendet.
'''Es ist daher unbedingt notwendig den Sketch mit den geänderten Einstellungen selbst zu compilieren, ansonsten stürzt das Modul nach Auswahl des Typs ab und wird nicht mehr rebooten können!'''
Das Modul ist etwas größer als die anderen Sonoff Produkte und besitzt mit 14,5 x 9 cm schon beachtliche Einbau Maße.
<div style="clear:both;"></div>
[[Datei:sonoff_ch4_2.jpg|thumb|left|alt=Sonoff 4CH FDTI]]
Als weitere Besonderheit sei hier erwähnt, dass die Signale '''RxD auf RxD und TxD auf TxD''' des FTDI Konverters zu verbinden sind. Wie bei allen Sonoff Modulen darf man '''zum flashen keine Netzspannung anschließen''', sondern nur über die Versorgungsspannung des FDTI Konverters mit 3,3 V versorgen (Jumper richtig setzen). Die Stiftleiste für den FTDI Anschluss ist hier schon eingelötet.
In den Flashmodus gelangt man durch Drücken der '''Taste FW/IO0''' während des Einstecken des USB Anschlusses.
<div style="clear:both;"></div>
[[Datei:sonoff_ch4_3.jpg|thumb|left|alt=Sonoff 4CH Arends]]
Hier die Ansicht des Webinterface des Arends Sketches!
Bei der Software sei erwähnt, dass die getestete Version 3.1.16 nur bei Kanal 1 den Modus "PulseTime" beherrscht. Wer also gepulste Ausgänge (zB: elektrische Garage/Toröffner) benötigt muss diese per Software nachbilden oder mit dem Kanal 1 auskommen. Eine "Pulsetime 10" ist ein guter Wert dafür (etwa 1 Sekunde).
Als Alternative kann mit dieser HTML Seite des Webservers am Modul des CH4 schon mit jedem Browser fähigen Handy (Android, iPhone, Windows) aufgerufen werden und somit alle Funktionen gesteuert werden.
<div style="clear:both;"></div>
[[Datei:sonoff_ch4_4.jpg|thumb|left|alt=Sonoff CH4 Software APP]]
Hier dargestellt die Original Software die Sonoff zum Modul liefert (EWeLink) und über ihre Cloud verbindet. Leider kann hier keine gepulste Ausgabe erfolgen. Mit einem Countdown kann zwar der Ausgang wieder abgeschaltet werden, die kleinste Zeiteinheit ist aber 1 Minute und somit für einen Impuls leider nicht zu gebrauchen. Ebenso kann mit dieser Software keine Einbindung in FHEM erfolgen, obwohl es eine nette anschauliche Darstellung ist.
<div style="clear:both;"></div>
=== Anbindung FHEM===
Beispiel zur Anbindung in FHEM für den 4CH, hier werden einfach 4 einzelne Schalter definiert!
define Sonoff_ch1 MQTT_DEVICE
attr Sonoff_ch1 IODev myBroker
attr Sonoff_ch1 alias Sonoff CH1
attr Sonoff_ch1 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch1 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch1 group Toröffner
attr Sonoff_ch1 icon light_ceiling
attr Sonoff_ch1 publishSet ON OFF cmnd/sonoffch4/POWER1
attr Sonoff_ch1 stateFormat Power
attr Sonoff_ch1 subscribeReading_Power tele/sonoffch4/POWER1
attr Sonoff_ch1 subscribeReading_state cmnd/sonoffch4/POWER1
attr Sonoff_ch1 webCmd Ein:Aus
define Sonoff_ch2 MQTT_DEVICE
attr Sonoff_ch2 IODev myBroker
attr Sonoff_ch2 alias Sonoff CH2
attr Sonoff_ch2 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch2 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch2 group Toröffner
attr Sonoff_ch2 icon light_ceiling
attr Sonoff_ch2 publishSet ON OFF cmnd/sonoffch4/POWER2
attr Sonoff_ch2 stateFormat Power
attr Sonoff_ch2 subscribeReading_Power tele/sonoffch4/POWER2
attr Sonoff_ch2 subscribeReading_state cmnd/sonoffch4/POWER2
attr Sonoff_ch2 webCmd Ein:Aus
define Sonoff_ch3 MQTT_DEVICE
attr Sonoff_ch3 IODev myBroker
attr Sonoff_ch3 alias Sonoff CH3
attr Sonoff_ch3 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch3 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch3 group Toröffner
attr Sonoff_ch3 icon light_ceiling
attr Sonoff_ch3 publishSet ON OFF cmnd/sonoffch4/POWER3
attr Sonoff_ch3 stateFormat Power
attr Sonoff_ch3 subscribeReading_Power tele/sonoffch4/POWER3
attr Sonoff_ch3 subscribeReading_state cmnd/sonoffch4/POWER3
attr Sonoff_ch3 webCmd Ein:Aus
define Sonoff_ch4 MQTT_DEVICE
attr Sonoff_ch4 IODev myBroker
attr Sonoff_ch4 alias Sonoff CH4
attr Sonoff_ch4 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch4 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch4 group Toröffner
attr Sonoff_ch4 icon light_ceiling
attr Sonoff_ch4 publishSet on off cmnd/sonoffch4/POWER4
attr Sonoff_ch4 stateFormat Power
attr Sonoff_ch4 subscribeReading_Power tele/sonoffch4/POWER4
attr Sonoff_ch4 subscribeReading_state cmnd/sonoffch4/POWER4
attr Sonoff_ch4 webCmd Ein:Aus
<div style="clear:both;"></div>
==Sonoff B1==
===Besonderheiten ===
[[Datei:SonoffB1.JPG|mini| Sonoff B1 mit angelöteten Kabeln]]
Der Sonoff B1 ist eine LED-Lampe in einer E27-Fassung, deren Farbe (in Grenzen) durch FHEM gesteuert werden kann. Die Lichtausbeute dieser Lampe ist gering, ein normal großes Zimmer kann damit nicht farblich ausgeleuchtet werden (dies gelingt nur mit kaltweißem oder warmweißem Licht), siehe [http://tinkerman.cat/sonoff-b1-lights-and-shades/ diesen Blog] 
Zuerst ist die Abdeckung der Lampe durch "brute force" zu entfernen. Dabei ist nichts zu drehen, zu schrauben oder zu hebeln, die lichtweiße Abdeckung ist einfach gesteckt (siehe beispielsweise [https://www.igorkromin.net/index.php/2017/10/02/how-to-open-the-sonoff-b1-wifi-led-bulb-to-access-its-internal-circuitry/ diese Anleitung]). Danach kann Sonoff wie üblich geflasht werden, da alle Kontakte ausreichend beschriftet sind. Es empfiehlt sich, zum flashen die Kontakte anzulöten.
Nach dem Flashen kann die LED mit den üblichen MQTT-Kommandos angesteuert werden.
===Farbechtheit ===
Die Farbe bei Sonoff B1 ist, was die RGB-LEDs (red-green-blue) angeht, nicht hell. Farben wie gelb können praktisch nicht erzeugt werden. Angesteuert werden kann die Sonoff mit einem Webkommando
http://<ip-Adresse>/cm?cmnd=Color%2000000000FF
wobei die ersten 8 Stellen den RGB-Farbcode angeben, die nächsten beiden die Stärke des kaltweißen Lichts und die letzten beiden Stellen die Stärke des warmweißen Lichts wiedergeben. Allerdings scheinen die gelben LEDs praktisch kein Licht zu emittieren. Die kalt- und warmweißen LEDs überstrahlen die Farb-LEDs um ein Mehrfaches: Um also Farben zu erzeugen, müssen die weißen LEDs ausgeschaltet werden (Farbcode 0000 am Ende).
===Einbindung in FHEM ===
Die Einbindung des Sonoff B1 in FHEM ist leider nicht unmittelbar möglich. Hier existiert bisher eine Behelfslösung, die in diesem {{Link2Forum|Topic=77570|Message=696560|LinkText=siehe Forenbeitrag}} genauer beschrieben ist.
==Sonoff S20==
Der Sonoff S20 ist eine Neuentwicklung von Itead, bei dem keine weiteren Kabel für den Netzanschluss benötigt werden. Vielmehr befindet sich der gesamte Sonoff in einem Gehäuse. Dieses Gehäuse kann mit drei Schrauben geöffnet werden, dann ist wieder die serielle Schnittstelle zum Flashen erkennbar.
[[Datei:SonoffS20 auseinander.JPG|mini| Sonoff S20 auseinander genommen]]
Es empfiehlt sich, auf die vier Anschlüsse eine Stiftleiste anzulöten (dies muss aber nicht sein). Danach gelingt der Flashvorgang wie oben beschrieben.
[[Datei:SonoffS20Stiftleiste.jpg|thumb|left| Sonoff S20 mit angelöteter Stiftleiste]]
<div style="clear:both;"></div>
=Erweiterungen mit Sensoren=
Wozu überhaupt den Switch erweitern wenn es auch die Modelle TH10 und TH16 gibt?
Manche Personen können dadurch dem Basteltrieb nachkommen, aber das wesentliche ist der Preis, da die Switches doch fast um die Hälfte billiger sind. Die Sensoren kosten ebenfalls kaum nennenswerte Beträge.
Oder es hat schon jemand Switches im Einsatz und möchte jetzt zusätzlich die Temperatur erfassen!
<div style="clear:both;"></div>
==Sonoff Switch mit Temperatur + Luftfeuchte==
=== Hardware erweitern mit DHT22 ===
[[Datei:sonoff_sw_4.PNG|thumb|left|alt=Sonoff Switch Pinleiste mit Temperatur]]
Am Sonoff Switch wurde ja schon eine Stiftleiste zum flashen eingelötet. Diese Stiftleiste bietet schon alle Anschlüsse welche für die Temperatur- und Luftfeuchtemessung benötigt werden. Am 5. Anschluss der Stiftleiste ist das Signal "SCL" (GPIO14) herausgeführt, welches für den DHT22 zur Erfassung der Messdaten benötigt wird. Der Sensor wird mit einem einem 3-poligen Kabel (zB: ein Steckkabel für ein Breadboard oder direkt anlöten) verbunden. Damit der DHT22 korrekt funktioniert, wird ein Widerstand mit 4,7 K Ohm zwischen Vdd und Data am DHT22 zusätzlich benötigt.
<div style="clear:both;"></div>
[[Datei:sonoff_sw_45.jpg|thumb|left|alt=AM2302 / DHT22]]
Ansicht des DHT22 (AM2302) mit den aufgesteckten Verbindungskabeln. Von links nach rechts sind das
1 = VCC 3,3 V
2 = Data
3 = nc (nicht belegt)
4 = GND
Pin1 (VCC) des DHT22 muss also auf Pin1 der Stiftleiste, Pin2 (Data) auf Pin5 und Pin4 (GND) auf Pin4.
Pin2 und Pin1 soll hier noch der Widerstand aufgelötet werden.
1 ------- 1 (VDD)
2 ------- 5 (GPIO14)
3
4 ------- 4 (GND)
DHT22  Stiftleiste
<div style="clear:both;"></div>
[[Datei:sonoff_sw_44.jpg|thumb|left|alt=umgebautes Modul]]
Diese Darstellung zeigt das umgebaute und bereits verschlossene Modul. Auf der Seite des Tasters (bitte nur hier, da auf der anderen Seite die 230 V verlaufen und neben der Lebensgefahr auch den Sensor beeinflussen) ist hier einfach mit einer Eisensäge ein Schlitz eingesägt, der dient in diesem Falle als Kabeldurchführung. Ein Schlitz ist besser als ein Loch, da der Oberteil des Gehäuses sich leichter aufsetzen lässt. Wer ein längeres Kabel benötigt, kann natürlich auch ein 3-poliges Telefonkabel (oder Mikrokabel oder sonstiges) verwenden. Der Sensor sollte etwas Abstand zum Gehäuse haben, da dieses auch eine Eigenerwärmung hat. Wer es ganz originalgetreu lösen will, kann auch eine 3-polige Mini Buchse für Klinkenstecker (3,5mm) einbauen so wie sie am TH10/16 vorhanden ist.
<div style="clear:both;"></div>
=== Software anpassen am Beispiel MQTT ===
[[Datei:sonoff_sw_40.jpg|thumb|left|alt=Sonoff MQTT]]
Die richtige Auswahl des Sensors und des verwendeten GPIO erfolgt im WEBIF des Modules und wird seit Tasmota nur mehr dort eingestellt. Eventuell sollte das aktuell verwendete [https://github.com/ddtlabs/expandJSON/ JSON Filter] geändert/erweitert werde (siehe beim Modul POW).
<div style="clear:both;"></div>
=== Software Anpassung DHT22 in FHEM ===
[[Datei:sonoff_sw_41.jpg|thumb|left|alt=umgebautes Modul]]
Links in der Hardcopy sind die Readings die nach der Anpassung von FHEM (Broker) befüllt werden sollten.
<div style="clear:both;"></div>
### Temperatur und Luftfeuchte vom Sonoff Switch ###
define Sonoff_Temp MQTT_DEVICE
attr Sonoff_Temp IODev myBroker
attr Sonoff_Temp icon temperature_humidity
attr Sonoff_Temp room MQTT
attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0))}
attr Sonoff_Temp subscribeReading_Sensor tele/sonoff/SENSOR
Hier die zusätzliche Erweiterung um die Temperatur und die Luftfeuchte in FHEM. Der in der Topic verwendete Name "sonoff" muss natürlich der Einstellung in der Software am Switch entsprechen. Bei Verwendung mehrerer Switches muss natürlich auch der Name bei jedem geändert werden.
Als Regexp für JSON kann dieser Filter eingesetzt werden.
define ej3 expandJSON .*\.SEN\..*:.*:.{.*}
<div style="clear:both;"></div>
=== Logfile für die Temperatur ===
define SVG_FileLog_Sonoff_Temp SVG myDbLog:SVG_FileLog_Sonoff_Temp:HISTORY
attr SVG_FileLog_Sonoff_Temp room MQTT
Und schließlich fehlt noch das Logfile, damit der Temperaturverlauf auch in schönen Plots dargestellt werden kann.
Das hier verwendete Beispiel funktioniert nur mit einer DbLog.
<div style="clear:both;"></div>
==Sonoff Switch als Thermostat verwenden mit MQTT==
[[Datei:sonoff_sw_55.jpg|thumb|left|alt=Thermostat]]
Mit diesem einfachen Beispiel wird ein Pelett Ofen mit einem externen Thermostat (sonoff Switch oder TH10/16) gesteuert. Zum besseren Überblick wird die Steuerung in einzelne Module getrennt, es könnte aber auch einiges zu einer einzigen Definition zusammen gefasst werden. Der Thermostat könnte auch als Frostwächter benutzt werden und ein anderes Heizgerät steuern.
<div style="clear:both;"></div>
###################################
### Sonoff Thermostat Regelung ####
###################################
define Sonoff_dht MQTT_DEVICE
attr Sonoff_dht IODev myBroker
attr Sonoff_dht alias Raumtemperatur
attr Sonoff_dht group Thermostat
attr Sonoff_dht icon temperature_humidity
attr Sonoff_dht publishSet ON OFF cmnd/sonoff_dht/POWER1
attr Sonoff_dht room _Sonoff
attr Sonoff_dht stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0),  ReadingsVal($name,"humidity",0))}
attr Sonoff_dht subscribeReading_Sensor tele/sonoff_dht/SENSOR
attr Sonoff_dht subscribeReading_state cmnd/sonoff_dht/POWER1
FHEM Definition zur Erfassung der Temperatur und der Luftfeuchte. Damit dieses Beispiel funktioniert, ist am Sonoff Modul die Topic "'''sonoff_dht'''" zu setzen. Dieser Temperaturwert dient dem Thermostat als ISTWert.
define Sonoff_Sw MQTT_DEVICE
attr Sonoff_Sw IODev myBroker
attr Sonoff_Sw alias Pellets Ofen
attr Sonoff_Sw devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_Sw eventMap ON:on OFF:off
attr Sonoff_Sw group Thermostat
attr Sonoff_Sw icon sani_boiler_temp
attr Sonoff_Sw publishSet ON OFF cmnd/sonoff_dht/POWER1
attr Sonoff_Sw room _Sonoff
attr Sonoff_Sw stateFormat Licht
attr Sonoff_Sw subscribeReading_Licht tele/sonoff_dht/POWER1
attr Sonoff_Sw subscribeReading_state cmnd/sonoff_dht/POWER1
attr Sonoff_Sw webCmd ON:OFF
FHEM Definition zum Absetzen der Befehle für das Relais (Thermostat) Ein- / Aus. Wenn das zu steuernde Geräte einen potentialfreien Thermostatanschluss benötigt (in den meisten Fällen), muss noch ein Relais dazwischen geschaltet werden um die Trennung der Netzspannung zu gewährleisten.
define ThermostatPellets dummy
attr ThermostatPellets alias Pellets Ofen Sollwert
attr ThermostatPellets group Thermostat
attr ThermostatPellets icon temp_control
attr ThermostatPellets room _Sonoff
attr ThermostatPellets setList state:0,5,10,12,13,14,15,16,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,23,24,25,26,27
attr ThermostatPellets webCmd state
Die Sollwertvorgabe für das Thermostat durch einen Dummy, damit können die gewünschten Temperaturen eingestellt werden.
### sofort ausführen wenn neuer Sollwert eingestellt wird ###
define Thermostat_on_notify notify ThermostatPellets IF (ReadingsVal("Sonoff_Sw","state",0) eq "OFF" && (ReadingsVal("Sonoff_dht","temperature",0) <= Value("ThermostatPellets"))) (set Sonoff_Sw ON)
define Thermostat_off_notify notify ThermostatPellets IF (ReadingsVal("Sonoff_Sw","state",0) eq "ON" && (ReadingsVal("Sonoff_dht","temperature",0) > Value("ThermostatPellets"))) (set Sonoff_Sw OFF)
Mit einem notify wird die manuelle Änderung des Sollwertes überwacht und sofort reagiert.
## zyklisch prüfen ob Sollwert erreicht wurde ###
define Thermostat_on at +*00:15:00 IF (ReadingsVal("Sonoff_Sw","Licht",0) eq "OFF" && (ReadingsVal("Sonoff_dht","temperature",0) <= Value("ThermostatPellets"))) (set Sonoff_Sw ON)
define Thermostat_off at +*00:15:00 IF (Value("Sonoff_Sw") eq "ON" && (ReadingsVal("Sonoff_dht","temperature",0) > Value("ThermostatPellets"))) (set Sonoff_Sw OFF)
Hier noch die Soll- Ist Wertvergleiche zur Steuerung. Es wird alle 15 Minuten überprüft ob die Temperatur erreicht ist. Bei einer trägen Heizung sollten 15 Minuten ausreichend sein, wer will kann dies aber auch alle 5 oder 10 Minuten prüfen.
Da des öfteren die Bezeichnungen der Readings im Sketch geändert werden ( zB:temperature ), bitte die richtige Schreibweise ( Groß/Klein ) in den Readings kontrollieren und gegebenenfalls hier anpassen.
<div style="clear:both;"></div>
==Sonoff Switch mit Bewegungsmelder HC-SR501==
[[Datei:sonoff_pir_1.jpg|thumb|left|alt=Bewegungsmelder]]
Basierend auf dem Wall Switch MQTT Sketch von Arends wurde hier ein Sonoff BASIC + PIR HC-SR501 in eine größere Verteilerdose (auch Abzweigdose) eingebaut, der Sonoff wurde dabei etwas gekürzt. Die Bewegungsmelder sind ab etwa 70 Cent erhältlich.
Der Sketch kann auch den Blink Modus. Damit kann man im Alarmfall z.B. Alle Strahler rings ums Haus blinken lassen.
Mehr dazu kann hier im {{Link2Forum|Topic=63824|LinkText=Forum}}im Diskussionsthread nachgelesen werden.
<div style="clear:both;"></div>
[[Datei:sonoff_pir_2.jpg|thumb|left|alt=Bewegungsmelder]]
Ein Beispiel wir der Bewegungsmelder in der Feuchtraumdose montiert werden kann. Wird der Bewegungsmelder abgesetzt vom Switch montiert, ist darauf zu achten das die Kabel nicht zu lange werden.
<div style="clear:both;"></div>


hier ein Beispiel wie es auch manuell leicht modifiziert werden kann.
===Spannungsversorgung des HC-SR501===
[[Datei:sonoff_pir_4.jpg|thumb|left|alt=5V für Bewegungsmelder]]
Der HC-SR501 wird vom Sonoff versorgt, wobei hier die 3,3 V nicht immer ausreichen. Es ist deshalb am HC-SR501 eine Diode zu überbrücken, dann reichen die 3,3V vom Sonoff. Es können aber auch am Sonoff die 5V angezapft werden. Hier im Bild dargestellt wo die 5V angezapft werden können.
<div style="clear:both;"></div>
 
[[Datei:sonoff_pir_5.jpg|thumb|left|alt=3,3V für Bewegungsmelder]]
Hier eine kleine Übersicht der wichtigsten Teile und deren Platzierung am HC-SR501.
Den PIR kann man auch mit 3,3V betreiben wenn man die Diode am Eingang nach Vcc überbrückt, dann reicht die Spannung für einen reibungslosen Betrieb völlig aus. Dies gilt für den HC-SR501, wird ein anderer PIR verwendet muss man nachschauen ob das auch möglich ist, ansonsten die 5V Variante wählen.
 
<div style="clear:both;"></div>
===Einbindung des HC-SR501 in FHEM===
# ------------- Sonoff_pir mit Bewegungsmelder ---------------
define Sonoff_pir MQTT_DEVICE
attr Sonoff_pir IODev myBroker
attr Sonoff_pir eventMap ON:on OFF:off
attr Sonoff_pir group Sonoff
attr Sonoff_pir icon hue_filled_br30
attr Sonoff_pir publishSet ON OFF cmnd/sonoff_pir/1/POWER
attr Sonoff_pir room MQTT
attr Sonoff_pir stateFormat Licht
attr Sonoff_pir subscribeReading_Licht stat/sonoff_pir/POWER
attr Sonoff_pir subscribeReading_state cmnd/sonoff_pir/1/POWER
attr Sonoff_pir webCmd :
 
Ein Beispiel wie der Sonoff Switch in FHEM eingebunden wird. Wenn im Sketch der Prefix von stat auf tele geändert wurde, ist dies auch hier durchzuführen ( subscribeReading_Licht tele/sonoff_pir/POWER ), ansonsten bleibt es so wie im Beispiel. Getestet wurde dieses Beispiel mit Version 5.5.2i. Die Topic sollte auf den Namen "sonoff_pir" eingestellt werden. Bei anderen Namen ist dies entsprechend in FHEM anzupassen.
 
Mit dem Kommando '''SwitchTopic Alarm_SO2''' ( direkt im Webinterface des Sonoff ) wird der Wall Switch GPIO14 vom Sonoff entkoppelt und somit sendet der Bewegungsmelder direkt an FHEM --> Motion_pir MQTT_DEVICE.
Bei den älteren Versionen vor Tasmota war das noch das Kommando ButtonTopic.
 
Es sollte auch unbedingt kontrolliert werden, wie die Ausgabe des Alarmes in der Console erfolgt. Erscheint hier die Meldung "cmnd/Alarm_SO2/POWER TOGGLE" dann muss mit dem Kommando "'''SwitchMode 1'''" das Ausgabeformat umgeschaltet werden, erst dann kommt das gewünschte Format "ON" und "OFF".
 
# ------------------ Motion_pir MQTT_DEVICE -----------------
define Motion_pir MQTT_DEVICE
attr Motion_pir IODev myBroker
attr Motion_pir devStateIcon on:on-for-timer off:off
attr Motion_pir eventMap ON:on OFF:off
attr Motion_pir group Sonoff
attr Motion_pir icon people_sensor
attr Motion_pir room MQTT
attr Motion_pir stateFormat Alarm
attr Motion_pir subscribeReading_Alarm cmnd/Alarm_SO2/POWER1
Die Motion_pir dient nun zur eigentlichen Einschaltung des Lichtes und sendet das Kommando '''cmnd/Alarm_SO2/POWER1''' an den entkoppelten GPIO 14 des Switch.
 
 
# ------------------ DoIf zur Motion Abfrage -----------------
define di_Sonoff_pir_Alarm DOIF ([Motion_pir:"on"] and [Tag_Nacht:twilight_weather] < 35) (set Sonoff_pir on) DOELSEIF ([Motion_pir:"off"] and [Tag_Nacht:twilight_weather] < 35) (set Sonoff_pir off)
attr di_Sonoff_pir_Alarm comment Abhängig von Helligkeitssensor wird nachts,bei Bewegung das Licht eingeschaltet!
attr di_Sonoff_pir_Alarm group Sonoff
attr di_Sonoff_pir_Alarm room MQTT
Zusätzlich kann nun mit einem '''DOIF''' verknüpft werden um das Ganze mit Tag_Nacht:twilight_weather dann in Abhängigkeit der Helligkeit zu schalten. Selbstverständlich kann jede andere Quelle mit einem Helligkeitswert verwendet werden.
 
===Alarmausgabe über Grouptopic===
# ------------------------ Sonoffs Group ----------------------
define Sonoffs MQTT_DEVICE
attr Sonoffs IODev myBroker
attr Sonoffs eventMap ON:on OFF:off
attr Sonoffs group Sonoff
attr Sonoffs icon hue_filled_br30
attr Sonoffs publishSet ON OFF cmnd/sonoffs/POWER1
attr Sonoffs room MQTT
attr Sonoffs stateFormat state
attr Sonoffs subscribeReading_Licht stat/sonoffs/POWER1
attr Sonoffs subscribeReading_state cmnd/sonoffs/POWER1
Wer möchte kann auch mit der Group Topic mehrere Switches mit Bewegungsmelder zusammenfassen und alle Lampen im Alarmfall gemeinsam in den Blinkmodus schalten. cmnd/sonoffs ist das Kommando für die Group Topic, sofern diese vom User nicht verändert wurde.
<div style="clear:both;"></div>
 
==Sonoff Switch als IR-Sender verwenden ==
===Einrichtung ===
 
[[Datei:sonoff_ir_1.jpg|thumb|left|alt=IR]]
Mit einem normalen Sonoff Basic Modul kann dies zu einer IR Fernbedienung hochgerüstet werden.
 
Der einfache Schaltplan ist [https://raw.githubusercontent.com/altelch/SonoffIR/master/SonoffIR-Schematics.png hier] zu finden und der Nachbau ist sehr einfach. Man kann aber auch aus einer alten FB die IR-Diode ausbauen und zusammen schalten. Ein kleines Howto ist in [https://github.com/altelch/SonoffIR diesem Wiki] auf Github zu finden.
 
Verwendet wird dazu der Arends Sketch.
 
Als erstes sucht man sich auf [http://lirc.sourceforge.net/remotes/ LIRC]die entsprechenden FB-Codes, im Beispiel hier für einen Samsung TV 55" Curved UHD HU8580. Die FB ist zwar nicht exakt dieselbe, aber die Befehle passen soweit. Im Webif des Sonoff Modules ist beim angeschlossenen GPIO der IR-Diode "8 IRremote" einzustellen.
 
Link zum {{Link2Forum|Topic=67316|LinkText=Forums Thread}}
<div style="clear:both;"></div>
Wichtig sind dabei folgende Daten:
name  Samsung_BN59-00940A
bits          16
pre_data_bits  16
pre_data      0xE0E0
Power On/Off  0x40BF[/code]
 
Nun stellt man sich den Sendestring zusammen:
predata+Befehl =  E0E0'''40BF''' (hex) = 3772793023 (dec) und 32 Bit Datenlänge.
 
Der JSON String für den IRSend ist laut [https://github.com/arendst/Sonoff-Tasmota/wiki/Commands Arends Wiki] folgender.
IRsend    | {"protocol": "<proto>", | Send IR remote control as JSON encapsulated command.
          |  "bits": 1..32        | <proto> is NEC, SONY, RC5, RC6, DISH, JVC or SAMSUNG
          |  "data": 1..(2^32)-1}  | bits are the required number of data bits.
          |                        | data is the data frame as 32 bit unsigned integer.
          |                        | See http://www.lirc.org/ for more info.
 
das ergibt dann unseren Befehl für die Kommandozeile am Modul. Die Bitlänge für Pre und Data sind ebenfalls zu addieren (16 + 16 = 32 Bit) und beim Arends Sketch muss im JSON Format gesendet werden:
 
'''irsend  {"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'''
 
hier für die Kommandozeile am Broker alte Version Tasmota bis 4.x:
'''mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}''''
oder hier für die Kommandozeile am Broker Version Tasmota ab 5.x:
'''mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}''''
TestSwitch ist hier der verwendete Name des Sonoff Moduls, wird ein anderer Name verwendet ist dieser hier anzupassen.
 
Jedes mal wenn nun der Befehl gesendet wird, wird entweder Ein- oder Aus geschaltet. Die Verzögerung über Wlan ist vernachlässigbar. Ebenso können die Kanäle oder die Lautstärke verstellt werden. Im Prinzip funktionieren alle Befehle die auf der FB vorhanden sind.
<div style="clear:both;"></div>


===FHEM Beispiel===
[[Datei:sonoff_ir_2.jpg|thumb|left|alt=IR]]
Hier ein Beispiel wie der Code für die Fernbedienung in FHEM eingebunden werden kann.
define RC_TV remotecontrol
attr RC_TV rc_iconpath icons/remotecontrol
attr RC_TV rc_iconprefix black_btn_
attr RC_TV room Entwicklung
attr RC_TV row00 KEY_POWER:POWEROFF,:blank,:blank
attr RC_TV row02 :blank,:blank,:blank
attr RC_TV row03 KEY_1:1,KEY_2:2,KEY_3:3
attr RC_TV row04 KEY_4:4,KEY_5:5,KEY_6:6
attr RC_TV row05 KEY_7:7,KEY_8:8,KEY_9:9
attr RC_TV row06 :blank,KEY_0:0,:blank
attr RC_TV row07 :blank,:blank,:blank
attr RC_TV row08 KEY_VOLUMEUP:UP,KEY_MUTE:MUTE,KEY_CHANNELUP:CHUP
attr RC_TV row09 KEY_VOLUMEDOWN:DOWN,:blank,KEY_CHANNELDOWN:CHDOWN


[[Datei:sonoff_sw_8.jpg|thumb|left|alt=sonoff Readings]]
define Samsung_TV notify RC_TV "/opt/fhem/ircmd.sh $EVENT"
<div style="clear:both;"></div>
In einem externen Shell Script werden die Parameter übergeben und der Sendestring für den IRSend zusammen gestellt. Das Script ins FHEM Home Verzeichnis kopieren ( /opt/fhem ) und die Rechte auf 755 setzen.
[https://wiki.fhem.de/wiki/Remotecontrol Link zum Wiki] einer universellen Fernbedienung.


Die Readings werden durch die Bridge (Modul ESPEasy) automatisch angelegt.
#!/bin/sh -e
if [ "$1" = "KEY_POWER" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'
fi
# E0E0E01F  3772833823
if [ "$1" = "KEY_VOLUMEUP" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772833823}'
fi
# E0E0D02F  3772829743
if [ "$1" = "KEY_VOLUMEDOWN" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772829743}'
fi
# E0E0F00F  3772837903
if [ "$1" = "KEY_MUTE" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772837903}'
fi
# E0E020DF  3772784863
if [ "$1" = "KEY_1" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772784863}'
fi
# E0E0A05F  3772817503
if [ "$1" = "KEY_2" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772817503}'
fi 
# E0E0609F  3772801183
if [ "$1" = "KEY_3" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772801183}'
fi
# E0E010EF  3772780783
if [ "$1" = "KEY_4" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772780783}'
fi
# E0E0906F  3772813423
if [ "$1" = "KEY_5" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772813423}'
fi
# E0E050AF  3772797103
if [ "$1" = "KEY_6" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772797103}'
fi
# E0E030CF  3772788943
if [ "$1" = "KEY_7" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772788943}'
fi
# E0E0B04F  3772821583
if [ "$1" = "KEY_8" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772821583}'
fi
# E0E0708F  3772805263
if [ "$1" = "KEY_9" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772805263}'
fi       
# E0E08877  3772811383
if [ "$1" = "KEY_0" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772811383}'
fi
# E0E048B7  3772795063
if [ "$1" = "KEY_CHANNELUP" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772795063}'
fi
# E0E008F7  3772778743
if [ "$1" = "KEY_CHANNELDOWN" ]; then
  mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772778743}'
fi 
Das Script kann sehr leicht für jede andere FB abgeändert werden und auch noch zusätzliche Tasten eingebunden werden. Bitte nicht auf die vorangestellten Pre-Data-Bits vergessen. Auf die Verwendung des Scriptes kann auch verzichtet werden, wenn der JSON String in FHEM direkt zusammen gestellt wird. Für den Nachbau ist es aber leichter verständlicher und kann auch leicht selber an die eigene FB angepasst werden.


Es besteht hier noch genug Spielraum um zB. auch noch Temperatursensoren an das Modul anzuschließen und ebenfalls in Fhem darzustellen.
<div style="clear:both;"></div>
<div style="clear:both;"></div>
{{Hinweis|Alternative Methoden ohne externes shell-script sind für [[MQTT_DEVICE]] [[IR-MQTT-Gateway|hier]] zu finden, dies wäre für [[MQTT2_DEVICE]] anzupassen, hier ist ein attrTemplate (''tasmota_ir'') verfügbar, das exemplarisch bestimmte Kommandos auch direkt am Device anbietet. Alternativ könnte auch die ''publish''-Option eines der MQTT-Interfaces genutzt werden.}}
==Sonoff Development Board==
===Einrichtung===
[[Datei:sonoff_dev_1.jpg|thumb|left|alt=Dev. Board]]
Das Board kommt ohne Software und muss zunächst mit einem Sketch bespielt werden. Hier kurz beschrieben der Arends Sketch, es funktioniert aber mit ESPEasy genau so gut.
Damit die vielen GPIO's auch nach freiem Wunsch zugeordnet werden können, müssen die erforderten Einstellungen da allerdings in der sonoff_template.h bekannt gegeben werden. Hier wurde der GPIO12 und 13 einem Relais zugeordnet. Der Rest kann dann frei im Webif konfiguriert werden (Type = User Test).
Link zum [https://www.itead.cc/wiki/Sonoff_DEV Wiki des Herstellers]
Link zum [https://www.itead.cc/wiki/images/3/30/01.73.02.0101_Sonoff_DEV_Schematic.pdf Schaltplan]
<div style="clear:both;"></div>
Anschlüsse und GPIO's am Board.
3V3    VDD  3.3V Power supply output 
GND    GND  Power supply pin 
  4    GPIO4  GPIO4 
  5    GPIO5  GPIO5 
12    GPIO12 GPIO12/HSPIQ 
13    GPIO13 GPIO13/HSPID 
14    GPIO14 GPIO14/HSPICLK 
ADC    ADC  Detect analog input voltage(0~1V) 
RX    U0RXD  Flash programming UART RX;GPIO3 
TX    U0TXD  Flash programming UART TX;GPIO1;SPICS1 
E-FW  GPIO0  GPIO0/SPICS2/Serial programming enable pin 
RESET RESET  External reset signal(low active) 
[[Datei:sonoff_dev_2.jpg|thumb|left|alt=Dev. Board]]
hier können die wesentlichen Funktionen (Relaisfunktion oder freier GPIO) konfiguriert werden. Man zählt die GPIO's von oben nach unten und wenn einer nicht benötigt wird, wird eine 0 angegeben.
<div style="clear:both;"></div>
{ "User Test",      // Sonoff Basic User Test
    GPIO_KEY1,        // GPIO00 Button
    0,
    GPIO_USER,        // GPIO02 Optional sensor
    GPIO_USER,        // GPIO03 Serial TXD and Optional sensor
    GPIO_USER,        // GPIO04 Optional sensor
    GPIO_USER,        // GPIO05 Optional sensor
    0, 0, 0, 0, 0, 0,
    '''GPIO_REL2''',        // GPIO12 Relay 2 (0 = Off, 1 = On)
    '''GPIO_REL1''',        // GPIO13 Relay 1 (0 = Off, 1 = On)
    GPIO_USER,        // GPIO14 Optional sensor
    0, 0
  }
Hier wurde am Modul "'''User Test'''" in der Datei "sonoff_template.h" abgeändert, um 2 Relais über GIPO12 und GPIO13 ansteuern zu können.
Gedacht ist es als Entwicklerboard, es ist aber auch genau so gut für den produktiven Einsatz geeignet, hat aber kein eingebautes Netzteil. Es ist zum flashen '''kein externes FTDI Modul notwendig''', das hat es bereits an Board und es muss lediglich der USB Treiber für Windows installiert werden. Geflasht wird dann mit dem USB Kabel der Spannungsversorgung.
Die 4-pol. Stecker haben das '''Rastermaß 2.0 mm'''.
<div style="clear:both;"></div>
<div style="clear:both;"></div>
===Anbindung FHEM===
je nach Anwendungszweck wird entweder ein normaler Schalter oder wie bei DHT16 (?) beschrieben ein oder mehrere Sensoren angebunden.
Beim Arends Sketch ist zu beachten, dass pro Sensorgruppe nur ein Sensor angeschlossen werden kann.
•DHT11 Temperature and Humidity -  DHT11 (1)  in group 1
•DHT21 Temperature and Humidity -  AM2301 (2) in group 1
•AM2301 Temperature and Humidity - AM2301 (2) in group 1
•DHT22 Temperature and Humidity -  DHT22 (3)  in group 1
•AM2302 Temperature and Humidity - DHT22 (3)  in group 1
•AM2321 Temperature and Humidity - DHT22 (3)  in group 1
•DS18B20 Temperature          - DS18x20 (4)  in group 2
Enable option  USE_DS18x20  in  user_config.h  for multiple sensors using OneWire library
•DS18S20 Temperature          -  DS18x20 (4)  in group 2
Enable option  USE_DS18x20  in  user_config.h  using OneWire library
•External switch              -  Switch (9)
Use  SwitchMode  to tune it's behaviour
•HC-SR501 PIR Motion Detection -  Switch (9)
Use  SwitchMode  to tune it's behaviour
Beispiel: 2 DHT22 funktionieren nicht, aber ein DHT22 und ein DS18b20 schon. Wer mehrere Sensoren benötigt, muss auf ESPEasy ausweichen.
----


<references />


[[Kategorie:Other Components]]
[[Kategorie:Other Components]]
[[Kategorie:IP Components]]
[[Kategorie:IP Components]]
[[Kategorie:MQTT]]

Aktuelle Version vom 6. August 2021, 16:37 Uhr

Sonoff
Zweck / Funktion
Ankopplung der Sonoff Module an FHEM
Allgemein
Typ undefiniert
Details
Dokumentation ModUndef
Support (Forum) ESP8266
Modulname Sonoff
Ersteller Reinhart
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Einleitung

Die Fa. Itead bietet kostengünstige "Sonoff" Produkte an, die den ESP8266 Chip On Board haben und somit die ideale Grundlage für ESPEasy und für FHEM[1] darstellen. Unverändert nutzen diese Geräte allerdings eine in China basierende Cloudlösung und müssen für die Benutzung in FHEM umgeflasht werden. Dieser Artikel beschreibt die Ankopplung der Sonoff Module an FHEM mit ESPEasy oder MQTT mit Tasmota (Theo Arends Sonoff MQTT Over The Air - einer offenen Firmware von arendst). Hierbei sind Grundkenntnisse beim Arduino (um die Firmware neu zu flashen) sowie im Umgang mit 230V notwendig.

Bitte unbedingt die elektrotechnischen Sicherheitsrichtlinien beachten und einhalten!

Warnung Netzspannung

Achtung: An dem Modul liegt Netzspannung an, die lebensgefährlich ist. Es dürfen nur entsprechend ausgebildete Personen dieses Modul in Betrieb nehmen. Zum Umbau und zur Softwareaktualisierung darf keine Netzspannung angeschlossen sein

Wie gefährlich das hantieren mit Netzspannung sein kann, zeigt das Beispiel eines russischen Anwenders. Er hat beim Flashen die Netzspannung am Modul gelassen und somit (über die Verbindung mit dem Netzteil des Laptops) lebensgefährliche Spannung auf die FTDI Schnittstelle gebracht. Das Modul ist dabei abgeraucht!


Links des Herstellers

User Manual von Itead

Sonoff Schaltplan


Modelle (mit Produktübersicht)

Eine Übersichtliste der verschiedenen Produkte mit technischen Kurzangaben.

Produkt Name Beschreibung Spannungsversorgung Imax Pmax Frequenz Schaltplan Link
Sonoff WWW-Schalter 90~250V AC 10A 2200W 2.4Ghz Plan Link
Sonoff RF 433 MHz Fernbed. 90~250V AC 10A 2200W 2.4Ghz Plan Link
Sonoff SV Niederspannungsschalter 5~24V DC 10A 240W DC 2.4Ghz Plan Link
Sonoff TH10/TH16 WWW-Schalter mit Temp.&Luftf. 90~250V AC 10A/16A 2200W(10A)/3500W(16A) 2.4Ghz Plan Link
Sonoff Dual Doppel-WWW-Schalter 90~250V AC 16A 3500W 2.4Ghz Plan Link
Sonoff Pow WWW-Schalter und Strommessgerät 90~250V AC 16A 3500W 2.4Ghz Plan Link
Sonoff LED WWW-LED-Dimmer 180~265V AC 0.3-0.6A 42W 2.4Ghz kein Link
Sonoff Touch WWW-Wandschalter 90~250V AC 2A 400W 2.4Ghz kein Link
Slampher WWW-433MHz-Lichtfassung 90~250V AC 2A 200W 2.4Ghz Plan Link
S20 Smart Socket Smart socket 90~250V AC 10A 2000W 2.4Ghz kein EU-Stecker
iFan Smart Lüfter 185~264V AC ﹤1A 60W 2.4Ghz kein EU-Stecker
Motor/Pump Control Switch clockwise/anticlockwise running 5V/7~32V DC 10A 50~320W 2.4Ghz kein Link
1 Chnl Inching/self-locking Switch Access control 5V/12V DC 10A 50/120W 2.4Ghz kein Link
4 Chnl Inching/self-locking/inter-locking Switch Access control, rolling door control 5V/5~32V DC/90~250V AC 10A 50~320W/2500W 2.4Ghz kein Link
 


Model IM151116002: Erstes Modell

Link zum Hersteller: Sonoff WiFi Wireless Smart Switch for MQTT COAP Smart Home

sonoff Switch

Das Sonoff Modul ist in einem zweckmäßigen Gehäuse verbaut.

sonoff Switch von vorne

Die Platine ist sehr übersichtlich aufgebaut und der Hersteller hat zudem Vorbereitungen zum Flashen einer alternativen Software vorgesehen (über serielle Schnittstelle via FTDI-Modul). Mit einer alternativen Software wie ESPEasy kann Sonoff an FHEM leicht angebunden werden.

sonoff Switch von hinten

Die stromführenden Leitungen wurden mit Lötzinn vom Hersteller verstärkt um die angegebenen Stromstärken mit geringer Hitzeentwicklung zu transportieren.

Achtung: Bitte vor den Arbeiten kontrollieren, dass an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!

Model IM160712005: TH 10A/16A

Link zum Hersteller: Sonoff TH 10A/16A WiFi Smart Switch

TH10 / TH16 weitere GPIO zugänglich machen

Der Hersteller hat eine Platine für eine weitere Stiftleiste vorbereitet, die jedoch bestückt werden muss. Die nicht beschalteten Stifte können dann genutzt werden, um die "verdeckten" GPIO zugänglich zu machen. Die Verdrahtung kann dem Bild entnommen werden.
Achtung: Bitte vor den Arbeiten kontrollieren, dass an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!

Model IM160811001: Sonoff Dual

Link zum Hersteller: Sonoff Dual WiFi Wireless Smart Swtich (sic!)

Model IM160810001: Sonoff Pow

Link zum Hersteller: Sonoff POW WiFi Switch with Power Consumption Measurement

SONOFF POW

Ein sehr interessantes und kostengünstiges Modul zur Messung der aktuellen Leistung. Das Modul kann via MQTT in FHEM angebunden werden. Ein Beispiel zur Einbindung ist unten im Wiki beschrieben.

weitere Modelle

Weitere Modelle finden sich auf der Homepage des Hersstellers

Neuprogrammierung der Sonoff-Modelle

Einleitung: Welche Firmware?

Übersicht

Vorab: Es gibt derzeit (August 2018) drei Möglichkeiten, die Geräte von Sonoff mit eigener Firmware zu versehen. Entweder man verwendet MQTT gemeinsam mit TASMOTA oder man verwendet ESPEasy. Beide Firmware-Produkte werden derzeit weiterentwickelt und müssen geflasht werden. Es scheint so zu sein, dass bei den POW-Geräten die Sensoren nicht korrekt erkannt werden und sich dort MQTT anbietet. Jedoch sollte in den Foren geprüft werden, ob diese eindeutige Präferenz durch Weiterentwicklung noch aufrecht erhalten werden kann.

Ein dritter Weg zum Flashen ist erst kürzlich entdeckt worden und wird auf der Webseite [1] beschrieben, in diesem Wiki fehlen noch entsprechende Erläuterungen. Er beruht darauf, dass Sonoff regelmäßig nach einer neuen Firmware fragt und dazu einen Server in China kontaktiert. Per DNS-Spoofing lenkt man diese Anfrage auf einen heimischen Rechner, auf dem ein Skript läuft. Dieses Skript bedient die Anfrage und überträgt ein erstes Image. In einem zweiten Schritt verbindet man sich dann mit dem Rechner zu der SSID, welche Sonoff aufmacht und die Zielfirmware wird geladen. Die Schritte sollte kann man sich unter der genannten Adresse beim verlinkten Issue #20 anschauen.

Link frühere Software: Sonoff-MQTT-OTA-Arduino

Stromversorgung

Während des Flashvorganges benötigt das Sonoff-Modul eine Stromversorgung. Dabei darf unter keinen Umständen die Netzspannung von 230V verwendet werden. Selbst die 5V aus einem USB-Anschluss sind zu hoch, da das Modul sonst Gefahr läuft unbrauchbar zu werden. Es sind ausschließlich 3.3V zu verwenden.

Der FTDI Chip kann laut Datenblatt höchstens 50 mA liefern, das ESP Modul zieht aber bis zu 300 mA Spitzenstrom und verbraucht schon im normalen Modus ca. 50-70 mA. Einige Anwender haben gute Erfahrungen mit einfachen USB-TTL-Konvertern gemacht, andere beschreiben unverständliche Fehlermeldungen. Auch kann es sein, dass der Flashvorgang ohne Fehler läuft, der Flash aber anschließend korrupt ist und das Modul unklares Verhalten zeigt. In dem Fall die Spannungsversorgung 3.3 Volt prüfen! Auch das USB Kabel kann eine Fehlerursache sein.

Sollte der Flashvorgang mit einem USB-TTL-Konverter nicht funktionieren, ist zuerst eine stabile 3.3V-Versorgung auszuprobieren (beispielsweise durch einen Arduino). RxTx werden nach wie vor mit dem USB-TTL-Adapter verbunden (gekreuzt). Zum Flashen sind dann GND vom Arduino und vom USB-TTL-Adapter zu verbinden.

Schnittstelle

serielle Schnittstelle

Die abgebildete Platine zeigt die benötigten Signale für ein FTDI Modul (Model: IM151116002).

Pin5 = vorbereitet für GPIO
Pin4 = Masse
Pin3 = TxD
Pin2 = RxD
Pin1 = 3.3V

Siehe dazu auch den Link aus dem Forum:

Platine mit Stiftleiste bestücken

Der Hersteller hat zwar die Platine vorbereitet, diese muss jedoch mit einer Stiftleiste bestückt werden, um das FTDI Modul bequem verbinden zu können. Die Stiftleiste muss allerdings selber nachgerüstet werden. Nachdem das ESPEasy zum ersten Mal geflasht wurde, kann es in Zukunft via WEB (OTA) geflasht werden und die Stiftleiste ist dann eigentlich nicht mehr erforderlich.
Für die Module TH10/TH16 sind die Lötpunkte für die Stiftleiste schon beschriftet.

Achtung: Bitte vor den Arbeiten kontrollieren, dass an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!

Arduino als USB-TTL

Sollte kein USB-TTL-Adapter vorhanden sein, kann man zum Flashen auch einen Arduino "missbrauchen". Dazu wird RESET und GND verbunden, siehe diese Webseite. Der Vorteil dieser Lösung besteht darin, dass die PINS für 5V und 3.3V deutlich voneinander getrennt sind.

Erfolgs- und Fehlermeldungen

Fehlersuche aktivieren

Eine sehr typische Fehlermeldung während des Flashvorganges ist

warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed

Das Tückische an dieser Fehlermeldung ist, dass sie nahezu keine Hinweise darauf gibt, weshalb der Upload fehlgeschlagen ist. In sehr vielen Fällen können die Fehler auf ganz klassische Probleme zurückgeführt werden: so wurde Tx beim Chip nicht mit Rx, sondern wieder Tx beim Arduino verbunden oder es wurde der falsche COM-Port ausgewählt, der falsche Uploader, die Stromversorgung war zu gering (siehe oben) etc. pp. Die Arduino-IDE erlaubt es, genaue Angaben beim Hochladen auszulesen (siehe Screenshot oben, Haken bei "Hochladen"). Ohne diese Angaben ist eine Fehlersuche typischerweise aussichtslos.

Im Erfolgsfall erscheint in der Arduino IDE in etwa der folgende Text (hier bei einem Sonoff S20):

/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware 
*** danach folgt sehr viel Text zum kompilieren *** 
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/tty.usbserial to /dev/cu.SLAB_USBtoUART
	setting address from 0x00000000 to 0x00000000
	espcomm_upload_file
	espcomm_upload_mem
opening port /dev/cu.SLAB_USBtoUART 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
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 487120 bytes from /var/folders/l6/myrckv8d12z9_06fl49fm36h0000gn/T/arduino_build_558323/sonoff.ino.bin to flash at 0x00000000
	erasing flash
	size: 076ed0 address: 000000
	first_sector_index: 0
	total_sector_count: 119
	head_sector_count: 16
	adjusted_sector_count: 103
	erase_size: 067000
	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
................................................................................ [ 16% ]
................................................................................ [ 33% ]
................................................................................ [ 50% ]
................................................................................ [ 67% ]
................................................................................ [ 84% ]
............................................................................     [ 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


Vorsicht: Umflashen, Updates und Upgrades

Es kann Situationen geben, in denen man von einer Firmware auf eine andere umsteigen möchte. Dies ist nicht unproblematisch!

Sowohl ESPEasy als auch TASMOTA bieten normalerweise einen eigenen OTA (over-the-air) Zugang an. Dort muss das Modul nicht ausgebaut werden, damit man an der seriellen Schnittstelle Kabel anbringt, sondern man lädt die neue Firmware über einen Browser hoch. Ein solches update kann dann ferngesteuert erfolgen, während der Sonoff weiter eingebaut bleibt.

Will man dagegen grundsätzliche Änderungen an der Firmware vornehmen (Umstieg von TASMOTA zu ESPEasy oder anders herum) sollte der Flashspeicher vollständig geleeert werden. Anderenfalls sind dubiose, schwer erklärbare Fehlermeldungen die Folge. Ein vollständiges Löschen des Flashspeichers kann nicht OTA erfolgen, hierzu muss man an die serielle Schnittstelle gelangen.

Das Programm esptool (zu den Programmoptionen [[2]]) erlaubt ein solches Löschen in zwei Schritten. Dazu sei angenommen, dass es sich um einen schwarzen ESP-01 mit 1MB Speicher handelt (mehr über die verschiedenen Hardware-Varianten auf [[3]]). Dann lautet der erste Befehl, mit dem der Flashspeicher gelöscht wird, wie folgt

./esptool -vv -cd none -bm dout -bz 1M  -cb 57600 -cp /dev/cu.SL_USBtoUART -ce

Allerdings setzt dies voraus, dass der Flashspeicher 1 MB groß ist und man eine entsprechende leere 1MB Datei besitzt. Man sollte danach ein weiteres Mal den Flashspeicher mit einer leeren Datei überschreiben, die beispielsweise von ESPEasy bereitgestellt wird:

./esptool -vv -cd none -bm dout -bz 1M  -cb 57600 -cp /dev/cu.SL_USBtoUART -ca 0x00000 -cf ./blank_1MB.bin

In beiden Fällen wurde angenommen, dass der Flashprogrammer ein USB-2-UART Stick ist, der an dem konkreten Rechner unter dem Verzeichnis /dev/cu.SL_USBtoUART zu finden ist. Hier muss man nachschauen, wie das Verzeichnis auf dem eigenen Rechner lautet.

Angeblich ist auch der folgende Befehl

./esptool.py erase_flash

erfolgreich. Dies erfordert das Tool esptool.py

Es wird berichtet, dass auch das Betriebssystem Einfluss auf das Ergebnis hat (was eigentlich nicht sein kann), siehe dazu Eintrag von arendst commented on 2 Aug 2018.

Bei Sonoff-Devices ab Februar 2018 erfordert die Programmierung das Flash-Tool aus diesem Forumsbeitrag.

Bei der Programmierung ist wie folgt vorzugehen:

  • Interface-Adapter (z.B. FTDI232) anschließen
  • Button am Device drücken und gedrückt halten
  • USB-Stecker des FTDI232 am PC einstecken, den Button weiterhin gedrückt halten (so wird das Device in den Programmiermodus versetzt)
  • Flash-Tool wie im Forumsbeitrag angegeben einsetzen, um ESPEasy aufzuspielen und Fertigmeldung abwarten
  • Button loslassen
  • USB-Stecker kurz aus- und wieder einstecken
  • Dann sollte sich das Device nach kurzer Zeit als Access Point ESP_Easy_0 anbieten

MQTT und TASMOTA

TASMOTA ist neben ESPEasy eine der beiden Firmwares, mit denen Sonoff Gerät gut in FHEM integriert werden können. Während TASMOTA stärker Wert auf Weboberflächen und gute Handhabbarkeit legt und typischerweise sofort einsetzbar ist, liegt der Schwerpunkt bei ESPEasy eher auf einer weiten Einbindung möglicher Sensoren und bedarf (wenige) Anpassungen. Beide Firmwares werden stetig ausgebaut und es ist nicht einfach, hier einen klaren Vorzug zu geben. TASMOTA scheint unter FHEM-Nutzern etwas verbreiterter zu sein.

TASMOTA kommuniziert mit FHEM via MQTT. Hier gibt es zwei Möglichkeiten.

  1. Man kann einen separaten Broker installieren und FHEM kommuniziert mit diesem Broker. Üblicherweise verwendet man hier mosquitto und die FHEM-Module mit dem Namen MQTT. Auf der Webseite [4] ist die Installation inklusive des MQTT-Brokers sehr ausführlich beschrieben - bis hin zum Flashen des Sonoff-Gerätes. Insbesondere die Einrichtung der Arduino-Umgebung und das Flashen selbst setzt einige Grundkenntnisse in Linux und Arduino-Programmierung voraus, da sich mit den neuen Updates Verzeichnis- und Dateinamen geändert haben und diverse Dateien verschoben und umbenannt werden müssen.
  2. Man kann FHEM als Broker nutzen. Hier sind die Module mit dem Namen MQTT2 zu verwenden.

Generell kann man sagen, dass bei einer Neuinstallation dem zweiten Weg der Vorzug gegeben werden sollte. Wer dagegen bereits eine Installation besitzt, wird vielleicht weiterhin MQTT in der klassischen Variante nutzen wollen. Mehr dazu in dem Forenthemen "Frage zu MQTT und MQTT2" und "Lohnt sich der Umstieg von mosquitto zu MQTT2?". Hier wird nur die Einrichtung von MQTT beschrieben, weil diese um einiges aufwendiger als MQTT2 ist. MQTT2 ist durch attrTemplate nahezu selbsterklärend.

In diesem Wiki befindet sich eine Kurzeinführung zur Installation eines MQTT-Brokers auf der Wiki-Seite von MQTT Einführung.

Link: Tasmota

Flashen mit Arends Sketch

Die Einrichtung des Arduino-Sketches ist keine leichte Fingerübung, da sich diverse Dateinamen und Speicherorte mit Updates gegenüber den hier und in anderen Beschreibungen genannten geändert haben können (und werden...). Es wird auf die sehr umfangreiche Erläuterung von waschto.eu verwiesen, wobei einige weitere (kleinere) Änderungen auch dort nicht dokumentiert sind, sich aber aus dem Sinnzusammenhang der Fehlermeldungen erschließen lassen. Alle hier gezeigten Bildschirmfotos und Beispiele beziehen sich auf Basis der Version Tasmota (Stand 22.02.2017).

Der Sketch kann hier geladen werden.

Arends Tasmota Github Wenn nur der ESP mit tasmota geflasht werden soll (keine Verwendung des arduinos), dann kann man eine webbasierte Lösung verwenden. Zu diesem Zweck muss aber der ESP8266 eine USB-Verbindung mit dem PC aufweisen: https://arendst.github.io/Tasmota/

Arduino Boardverwalter

In der Arduino IDE unter Datei / Voreinstellungen im Feld "Zusätzliche Boardverwalter-URLs:" den Link: http://arduino.esp8266.com/stable/package_esp8266com_index.json einfügen.

Dann unter Werkzeuge / Board / Boardverwalter ganz am Ende der Liste die Librarys für "esp8266 by ESP8266 Community" die letzte Version zu installieren. Link zum Board. Im Tasmota Verzeichnis \lib werden auch die zum compilieren benötigten Librarys zur Verfügung gestellt.

Das gesamte Sonoff Verzeichnis aus Arendts Sketch entpacken (ist wie hier verlinkt ein Zipfile) und dann aus diesem Verzeichnis die sonoff.ino öffnen. Es können dann alle zu dem Sketch zugehörigen Dateien angesehen/editiert werden.

Anschließend sollte noch die Datei user_config.h (im Unterverzeichnis "sonoff") editiert werden. Die Abschnitte

// Wifi
// Syslog
// Ota
// MQTT

müssen mit der eigenen "Ip-Adresse-Server", "SSID" und "password" angepasst werden, das erleichtert den ersten Connect mit dem Modul. Seit der Version 2.1.2 können die WIFI Einstellungen 2-fach angegeben werden, somit wechselt das Device automatisch auf den 2. Wifi Hotspot wenn der erste nicht erreicht wird.

#define STA_SSID               "SSID"      // Wifi SSID
#define STA_PASS               "password"  // Wifi password
#define WIFI_HOSTNAME          "%s-%04d"         // Expands to <MQTT_TOPIC>-<last 4 decimal chars of MAC address>
#define WIFI_CONFIG_TOOL       WIFI_WPSCONFIG    // Default tool if wifi fails to connect (WIFI_SMARTCONFIG, WIFI_MANAGER or WIFI_WPSCONFIG)

// Syslog
#define SYS_LOG_HOST           "Ip-Adresse-Server"
#define SYS_LOG_PORT           514
#define SYS_LOG_LEVEL          LOG_LEVEL_NONE
#define SERIAL_LOG_LEVEL       LOG_LEVEL_INFO
#define WEB_LOG_LEVEL          LOG_LEVEL_INFO

// Ota
#if (ARDUINO >= 168)
 #define OTA_URL              "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".ino.bin"
#else
 #define OTA_URL              "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".cpp.bin"
#endif

// MQTT
#define MQTT_HOST              "Ip-Adresse-Server"
#define MQTT_PORT              1883

Wichtig: Im Userprofile des Arduino Compilers (%userprofile%\Documents\Arduino\libraries\pubsubclient\src\PubSubClient.h) die Max Packet Size auf 512 erhöht werden!

#define MQTT_MAX_PACKET_SIZE 512
#define MQTT_KEEPALIVE 120

Anpassung der max. Packet Size auf 512 und das Keepalive auf 120

Im Anschluss wird der Sketch mit der Arduino IDE (getestet mit 1.6.12) compiliert und die Binary dann exportiert (Sketch / compilierte Binärdatei exportieren). Die erzeugte .bin Datei dann mit dem Tool "ESP8266Flasher.exe" flashen, so wie auch bei ESPEasy. Sehr gut funktioniert auch das ESPtool. Wer nicht compilieren will, kann auch im Unterverzeichnis ./api/arduino/ die fertige Binary ( sonoff.ino ) benutzen, aber dann ohne Voreinstellung der lokalen IPs.

Arends Menü

Achtung: sollten Probleme mit dem ersten Login im Webinterface auftreten, hat der Autor vorgesorgt und mit speziellem wiederholten Tastendruck können verschiedene Modi aufgerufen werden: zB:

3 x Taste kurz drücken und eine Smartconfig wird gestartet und die SSID und das Passwort kann über diese Android App eingegeben werden.

4 x Taste kurz drücken und man bringt den Device in den Access Point Mode mit der IP-Adresse 192.168.4.1.

Bis zu sieben verschiedene Modi sind möglich, mehr dazu in Arends Wiki.

Link zum Wiki Arends, Button

MQTT testen

Arends Menü

Nach erfolgtem Flash des Moduls kann das Webinterface des Moduls zum ersten Mal aufgerufen werden (im Router nach der IP des Moduls suchen).

Es bieten sich hier mehrere Möglichkeiten die die weitere Einrichtung des Moduls unterstützen. Einfach die Menüpunkte durchprobieren, sie erklären sich von selbst. Für erste Tests empfiehlt sich die lokale Konsole um die Ereignisse aus Sicht des Moduls mit verfolgen zu können. Alles was hier gesendet wird, sollte ebenfalls am Server mitgeloggt werden können. Wenn bis hierher alles funktioniert, kann dann mir der Konfiguration in FHEM beginnen.

Der Name des Moduls kann unter "Configuration" -> "Configure MQTT" -> "Topic (sonoff)" nachgeschaut und geändert werden. In FHEM wird beim definieren des Moduls dieser Name in den subscribeReadings bzw. publishSets eingegeben um die Verbindung zum Modul herzustellen.

Am Server jetzt eine Konsole öffnen und folgende Topic (alle) einstellen.

mosquitto_sub -d -v -t \#

Mit dieser Einstellung werden alle Topics geloggt!

 pi@raspberry ~ $ mosquitto_sub -d -v -t \#
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/DHT/TEMPERATURE', ... (6 bytes))
 tele/sonoff_dht/DHT/TEMPERATURE 21.8 C
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/DHT/HUMIDITY', ... (6 bytes))
 tele/sonoff_dht/DHT/HUMIDITY 41.7 %
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/TIME', ... (19 bytes))
 tele/sonoff_dht/TIME 2017-02-22T16:05:43
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes))
 tele/sonoffpow3/STATE {"Time":"2017-02-22T16:05:44", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}}
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes))
 tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:05:44", "Yesterday":0.083, "Today":0.055, "Period":0, "Power":0, "Factor":0.00, "Voltage":229, "Current":0.000}
 Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (14 bytes))
 stat/TestSwitch/RESULT {"POWER":"ON"}
 Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (2 bytes))
 stat/TestSwitch/POWER ON
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes))
 tele/sonoffpow3/STATE {"Time":"2017-02-22T16:07:14", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}}
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes))
 tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:07:14", "Yesterday":0.083, "Today":0.055, "Period":0, "Power":3, "Factor":0.20, "Voltage":227, "Current":0.072}
 Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (15 bytes))
 stat/TestSwitch/RESULT {"POWER":"OFF"}
 Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (3 bytes))
 stat/TestSwitch/POWER OFF

Interessant sind für uns nun diese Einträge "stat/TestSwitch/POWER ON" , dazu am Taster des Sonoff manuell umschalten. Dies entspricht genau der Syntax wie sie im Anschluss in FHEM dann zu verwenden ist.

Mit diesen Einstellungen können dann entweder nach Telemetriedaten oder nach Statusmeldungen gefiltert werden. Dies ist jedoch nur notwendig wenn bereits andere MQTT Devices am Broker hängen und es sonst zu unübersichtlich wird.

mosquitto_sub -h localhost -t tele/sonoff/#    = Telemetriedaten
mosquitto_sub -h localhost -t stat/sonoff/#    = Statusmeldungen
Arends Log

Sehr nützlich das lokale Log zur Fehlersuche und Inbetriebnahme.

Anbindung FHEM

FHEM sonoff Schalter

Dieser einfache Schalter kommuniziert bidirektional mit dem Sonoff Device.

FHEM sonoff Schalter

Die Readings in diesem verwendeten Beispiel zeigen sich wie in FHEM gewohnt.

Die Einrichtung in FHEM wird von den Modulen 00_MQTT.pm, 10_MQTT_BRIDGE und 10_MQTT_DEVICE.pm unterstützt. Ebenso wird das Modul 98_expandJSON.pm benötigt um den JSON String zu filtern.

Alternativ kann eine Einbindung über die MQTT2-Modulfamilie erfolgen. In diesem Fall benötigt man keinen eigenen Broker und FHEM stellt die Verbindung selbständig her. Mehr Informationen findet man auf der Seite MQTT2-Module - Praxisbeispiele. Hier wird jetzt die frühere Einbindung via MQTT vorgestellt.

 ### 1. Broker anlegen ###
 define myBroker MQTT 10.0.0.5:1883

 ### 2. FHEM Device mit MQTT verbinden ###
 define Sonoff_Switch MQTT_DEVICE
 attr Sonoff_Switch IODev myBroker
 attr Sonoff_Switch devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
 attr Sonoff_Switch icon hue_filled_br30
 attr Sonoff_Switch publishSet ON OFF cmnd/TestSwitch/POWER1
 attr Sonoff_Switch room MQTT
 attr Sonoff_Switch subscribeReading_Licht stat/Sonoff_Switch/POWER1
 attr Sonoff_Switch subscribeReading_Sensor tele/Sonoff_Switch/SENSOR
 attr Sonoff_Switch subscribeReading_Status stat/Sonoff_Switch/STATUS
 attr Sonoff_Switch webCmd ON:OFF
Der hier dargestellte Beispielcode realisiert die Kommunikation zwischen FHEM und dem Sonoff Modul via MQTT Broker. Zu beachten ist hier, dass '''subscribeReading_Licht''' und '''subscribeReading_state''' unterschiedliche Syntax des Topic Strings haben!

ESPEasy

ESPEasy ist neben TASMOTA eine der beiden Firmwares, mit denen Sonoff Gerät gut in FHEM integriert werden können. Während TASMOTA stärker Wert auf Weboberflächen und gute Handhabbarkeit legt, liegt der Schwerpunkt bei ESPEasy eher auf einer weiten Einbindung möglicher Sensoren. Beide Firmwares werden stetig ausgebaut und es ist nicht einfach, hier einen klaren Vorzug zu geben. TASMOTA scheint unter FHEM-Nutzern etwas verbreiterter zu sein.

ESPEasy flashen

sonoff mit angestecktem FDTI Adapter

Die Spannungsversorgung des Sonoff Moduls wird hier vom FTDI Konverter mit 3.3V über die Verbindungskabel zum Pfostenstecker durchgeführt. Siehe obigen Hinweis: Vorbereitungen zum Flashen Anmerkung: In diesem Bild wurde die Stromversorgung durch den einfachen FTDI-Chip vorgenommen. Sollte dies zu unverständlichen Problemen führen, muss man die Spannungsversorgung prüfen (siehe oben).

Der FTDI Adapter wird dann mit der USB Schnittstelle mit dem Computer verbunden.

Zum Compilieren wird in der Arduino Umgebung auch die Arduino Json Library 5.6.4+ benötigt. Eine genaue Anleitung kann hier nachgelesen werden. Es sollte stets die aktuelle Version der Arduino Umgebung verwendet werden, bzw. die Librarys auf Aktuellen Stand gehalten werden.

mit Arduino compilieren

Einstellung Arduino IDE

Wer selber mit der Arduino IDE compilieren will, bitte folgende Einstellungen beachten. Die Sketche befinden sich hier. Die anschließenden Arbeiten sind dann gleich wie bei Abschnitt fertige Binary.

Unbedingt die neueste Arduino Json Library benutzen (siehe oben). Es gibt zwar keine Compiler Fehler, aber es kommt anschließend zu Fehlfunktionen in der ESP Bridge! Die Installation der entsprechenden Arduino-Bibliotheken kann man hier nachlesen.

Bitte beachten: einige neue Slampher-Module haben den ESP8285 verbaut - demzufolge muss dann dieser Chip ausgewählt werden.

Generic ESP8266 Module
Flash Mode: QIO
Flash Frequency: 40 MHz
CPU Frequency: 80 MHz
Flash Size: 1M (64K SPIFFS)
Debug Port: disabled
Debug Level: none
Reset Mode: ck
Upload Speed: 115200

fertige Binary flashen

NodeMCU Firmware Flasher

Es empfiehlt sich eine fertige Binary von ESPEasy aufzuspielen. In diesem Wiki wurde R140 verwendet.

Siehe dazu auch den Link von ESPEasy und das Handbuch für den Flasher.

In manchen Versionen von ESPEasy (zB.R120) ist auch ein Flasher beigelegt, welcher zwar keine grafische Oberfläche hat aber hervorragend funktioniert. Wenn andere versagen, geht es mit diesem Flasher immer noch, einfach probieren!

Netzspannung darf 'NICHT' angeschlossen sein!!!
Taster am Sonoff gedrückt halten
FTDI Adapter verbinden
Taster am Sonoff los lassen
Sketch übertragen
Sonoff vom FTDI trennen

Wenn einmal die Firmware auf das Sonoff Modul geflasht worden ist, kann in Zukunft ESPEasy direkt unter Tools via HTTP dies durchführen. Es muss dazu kein FTDI Konverter mehr verwendet werden.

ESPEasy einstellen

ESPEasy Devices

Wenn das Modul fertig geflasht ist und die Verbindung zum Modul hergestellt ist, können die Einstellungen in ESPEasy durchgeführt werden. Dazu am Webinterface anmelden und zunächst die zwei Devices definieren.

Der Hersteller hat für das Relaise GPIO 12 und für die grüne Led GPIO 13 vorgesehen. Der Taster ist an GPIO 0 angeschlossen.

Device Schalter

Device Relais

Bei den Devices sollten die hier dargestellte Einstellungen beachtet werden. Der Switch (PUMP) sollte auf Input gestellt werden, sodass die anschließenden und benötigten Rules aktiviert werden können.

Da beide Devicenamen gleich benannt wurden (PUMP) wird in FHEM nur ein Device angelegt! Die dazugehörenden Valuenames sind unterschiedlich (Relay, Key).

Device Taster

Device Key

Der Taste muss natürlich nur konfiguriert werden, wenn auch händisch am Modul geschaltet werden soll. Wird dies nicht benötigt, können auch die Rules geändert bzw. angepasst werden. Doch alleine zu Testzwecken ist es eine nützliche Sache.

Rules

Rules

Damit der Sonoff unabhängig von FHEM schaltet, kann festgelegt werden, wie er sich intern verhält. Ein solches Gerät wird zB von CreationX angeboten: Dort wird der Sonoff zwischen die Zuleitung zur Lampe gelegt. Liegt in der Zuleitung Spannung an (weil jemand einen klassischen Lichtschalter gedrückt hat), signalisiert ein Spannungswandler ein Signal. Dieses Signal wiederum wird genutzt, um GPIO0 auf LOW (GND) oder HIGH zu legen.

Intern regel nun eine rule, dass bei einem solchen Signal das Sonoff-Relais schaltet bzw freigegeben wird. Wenn man nun die Lampe an das Sonoff-Relais schaltet, verhält sich der Lichtschalter so wie ohne Sonoff: Wird geschaltet, geht das Licht an. Der Vorteil des Sonoff besteht darin, dass neben den klassischen Lichtschaltern nun auch via FHEM geschaltet werden kann.

Die rule ist dabei wie folgt zu definieren. Dabei wird angenommen, dass an GPIO0 das Signal anliegen wird. Dazu muss ein device in ESPEasy definiert werden, dass dieses Signal empfängt. Das device ist dabei ein Switch (nach dem Schaltvorgang bleibt der Schaltzustand erhalten) oder ein Taster (nach dem Schaltvorgang kehrt man in den ursprünglichen Schaltzustand zurück). Das device in ESPEasy kennt drei Bezeichnungen: device (das ist der Typ oder die Art und Weise des devices, es sind beispielsweise auch Sensoren als devices möglich), name (damit wird das device angesprochen) sowie value (das ist dann der Schaltzustand). Will man auf den Schaltzustand zugreifen, erfolgt dies mit der Syntax name#value. Weitere Details zu den Programmierung von rules findet man auf der Webseite von letscontrolit: [[5]]

Da das Sonoff Modul auch einen eingebauten Taster hat und somit auch lokal bedient werden kann, sollte man zunächst unter Tools / Advanced das Häkchen Rules aktivieren, erst dann wird der Tab sichtbar und es können Rules erstellt werden.

 on PUMP#Key do
  if [PUMP#Relay]=1
    gpio,12,0
  else
    gpio,12,1
  endif
 endon
 on PUMP#Relay do
  if [PUMP#Relay]=1 
    gpio,13,0
  else
    gpio,13,1
  endif
 endon

Diese Rules ermöglichen, dass bei lokaler Bedienung durch den Taster auch die Led richtig geschaltet wird. Mit 'on PUMP#Key do' wird geprüft ob die Taste gedrückt ist und schaltet dann entsprechend die Led. Mit den Rules können auch Timer oder sonstige Spielereien realisiert werden. Siehe dazu das Tutorial von ESPeasy.

Anbindung FHEM

FHEM Konfiguration

Dies ist eine einfache Darstellung wie FHEM automatisch den Device erstellt.

Damit FHEM mit ESPEasy und dem Sonoff Modul kommunizieren kann, muss in der fhem.cfg vorerst nur die EspBridge mit dem hier dargestellten Eintrag aktiviert werden.

define espBridge ESPEasy bridge 8383

Dies ist eigentlich die einzige Zeile die in fhem.cfg angelegt werden muss. Die restliche Konfiguration wird von FHEM automatisch generiert.

 ##########################################
 ###             ESPEASY               ####
 ##########################################
 
 define ESPEasy_sonoff_1_PUMP ESPEasy 10.0.0.37 80 espBridge sonoff_1_PUMP
 attr ESPEasy_sonoff_1_PUMP IODev espBridge
 attr ESPEasy_sonoff_1_PUMP devStateIcon on:rc_GREEN:off off:rc_RED:on absent:rc_BLUE:off gpio:rc_YELLOW:off
 attr ESPEasy_sonoff_1_PUMP eventMap /gpio 12 on:on/gpio 12 off:off/gpio 12 gpio:off/gpio 12 output:off/
 attr ESPEasy_sonoff_1_PUMP group ESPEasy Device
 attr ESPEasy_sonoff_1_PUMP icon hue_filled_outlet
 attr ESPEasy_sonoff_1_PUMP room ESPEasy
 attr ESPEasy_sonoff_1_PUMP setState 0
 attr ESPEasy_sonoff_1_PUMP stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Relay","")}
 attr ESPEasy_sonoff_1_PUMP webCmd :

hier ein Beispiel wie es auch manuell leicht modifiziert werden kann.

Sonoff Readings

Die Readings werden durch die Bridge (Modul ESPEasy) automatisch angelegt.

Es besteht hier noch genug Spielraum um z.B. auch noch Temperatursensoren an das Modul anzuschließen und ebenfalls in FHEM darzustellen.

Beispiele

Einrichtung Sonoff POW

Sonoff POW

Bei einer Charge des Sonoff POW gibt es Kontaktprobleme beim Sicherungshalter. ITAED hat deshalb eine Rückrufaktion gestartet: Link zur Rückrufaktion. Bitte unbedingt die Kontaktierung des Sicherungshalter überprüfen bzw. neuen Sicherungshalter einsetzen!

Das Modul kommt in gewohnter ITAED Qualität, eine derart kostengünstige Energiemessung wird bei Smart Home Anwendern gerne eingesetzt. Die Originalsoftware habe ich nicht einmal getestet, da damit eine Anbindung an FHEM leider nicht möglich ist (wer will schon die Steuerbefehle seiner Schalter an eine nicht dokumentierte chinesische Cloud senden).

Sonoff POW

Bitte auf keinen Fall das Modul während der Arbeiten an die Netzspannung anschließen. Zum Flashen genügt (und nur diese) die Versorgungsspannung des USB-TTL Konverters. Wie auf dem Foto gut erkennbar, wurde dieses Modul ohne Einlöten einer Pfostensteckerleiste geflasht. Die Steckverbindung wird einfach in die Lötaugen gesteckt und mit einem Gummiring fixiert, da ja spätere Flashvorgänge im Webif des Models funktionieren und so die Arbeit eingespart werden kann. Es steht jedoch nichts im Wege die Pfostensteckerleiste einzulöten.

Die Anschlüsse am Modul sind wie folgt belegt.

o GND
o TxD
o RxD
o VDD

Für den Flashvorgang gelten die selben Regeln wie schon beim Sonoff Switch oben erwähnt (3,3V!).

Software

Sonoff POW FHEM

Als Software steht im Augenblick nur der Sketch von Arends zur Verfügung, liefert aber alles was das Herz begehrt und ist ist einfach zu handhaben. Hier eine eine einfache Darstellung mit der aktuellen Leistung und dem Tagesverbrauch. Zusätzlich besteht auch noch die Möglichkeit den angeschlossenen Verbraucher Ein- oder Auszuschalten.

Sonoff POW Webif

Seit Version 2.0.19a ist auch die Leistungsanzeige im WEBIF wie im Bild links integriert. Auch der Energieverbrauch des Vortages wird mit angezeigt. Alle hier angezeigten Daten werden auch zyklisch im MQTT String an FHEM übergeben.

Zusätzlich kann im Sketch auch das Feature "Power_Limit" aktiviert werden. Mit dem Power_Limit wird eine zusätzliche Nachricht erzeugt, wenn ein bestimmter einstellbarer Grenzwert über- oder unterschritten wird.

Es lassen sich dadurch Meldungen wie "Waschmaschine fertig" oder ähnliches ohne weitere Schwellwert Überwachungen in FHEM ableiten. Die Meldungen kommen in MQTT mit "POWER_LOW ON" bzw. "POWER_LOW OFF".

Bei erstmaligen Start des Moduls muss der Typ des Modules von "SONOFF" auf "SONOFF_Pow" geändert werden, damit die Software weiß mit welchem Modul es zu tun hat und kann dann die entsprechenden Berechnungen durchführen. Die Leistungsdaten kommen ja in Form einer Frequenz aus dem Baustein und müssen im Sketch (xsns_hlw8102.ino) umgerechnet werden.

Sonoff POW Attribute

Dieses Bild zeigt die Attribute die vom Modul via MQTT an FHEM geliefert werden.

aktuell gelieferter JSON String vom Sketch der alle Messdaten beinhaltet.

{"Time":"2017-02-22T16:38:47", "Yesterday":"2.286", "Today":"1.593", "Period":9, "Power":231, "Factor":"1.00", "Voltage":231, "Current":"0.866"}

und hier das zugehörige Reading.

tele/sonoffpow/ENERGY    
      

Hier ein Mitschnitt des Datenverkehrs zum Broker zwecks Kontrolle der korrekten Funktion der Module und der Software.

Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/STATE', ... (103 bytes))
 tele/sonoffpow/STATE {"Time":"2017-02-22T16:39:15", "Uptime":79, "LIGHT":"OFF", "Wifi":{"AP":2, "SSID":"Liwest", "RSSI":54}}
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/ENERGY', ... (140 bytes))
 tele/sonoffpow/ENERGY {"Time":"2017-02-22T16:39:15", "Yesterday":"1.391", "Today":"1.191", "Period":0, "Power":0, "Factor":"0.00", "Voltage":0, "Current":"0.000"}
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_wall1/STATE', ... (105 bytes))
 tele/sonoff_wall1/STATE {"Time":"2017-02-22T16:39:15", "Uptime":96, "POWER":"OFF", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":100}}
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes))
 tele/sonoffpow3/STATE {"Time":"2017-02-22T16:39:20", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}}
 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes))
 tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:39:20", "Yesterday":0.083, "Today":0.057, "Period":0, "Power":0, "Factor":0.00, "Voltage":230, "Current":0.000}

Die Einstellungen können mit folgender Syntax angefordert werden (zwei Terminalfenster öffnen, eines zum protokollieren und eines zum senden der Befehle).

mosquitto_sub -d -v -t \#  MQTT Datenverkehr protokolieren
mosquitto_pub -q 2 -t cmnd/sonoffpow/status/set -m "8"      = SonoffPOW Status jetzt auslesen
mosquitto_pub -q 2 -t cmnd/sonoffpow/TelePeriod/set -m "60" = Timer setzen, alle 60 Sekunden Daten senden 

Die Kommandos können direkt am Broker (Terminalfenster Putty etc.) abgesetzt werden.

Kalibrieren und Genauigkeit

Ab Version 2.0.11 kann nun auch der POW kalibriert werden. Dazu kann man 2 Konsolenfenster öffnen, im ersten aktiviert man das Protokoll für den Datenverkehr

mosquitto_sub -d -v -t \# MQTT Datenverkehr protokollieren

Dann kann mit folgenden Befehlen die HLW Referenz Pulsfrequenz gesetzt werden.

mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWUCAL/set -m "2100"     default = 1950
mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWICAL/set -m "2450"     default = 3500
mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWPCAL/set -m "13500"    default = 12345 

Entweder man hat eine definierte Last zur Verfügung oder besser man misst mit einem Leistungsmesser nach. Die Spannung kann man mit einem Multimeter nachmessen (sollte 230 V sein) und der Strom wird errechnet (bei 100 Watt I = P / U ) = 100/230 = 0,4347. Die Referenzwerte solange geringfügig ändern bis die Ausgabe passt. Für die Ausgabe wird einfach eine Statusabfrage durchgeführt.

mosquitto_pub -q 2 -t cmnd/sonoffpow/status/set -m "8"

Befehl für die Statusabfrage

cmnd/sonoffpow/status/set 8
Received PUBLISH (d0, q0, r0, m0, 'stat/sonoffpow/STATUS', ... (103 bytes))
stat/sonoffpow/STATUS PWR: Voltage 225 V, Current 0.427 A, Current Power 98 W, Total Power Today 0.080 kWh, Power Factor 1.00

Ergebnis der Statusabfrage mit Spannung, Strom und Leistung.

Bei sehr kleinen Wattzahlen (unterhalb von 10 W) ist der POW etwas ungenau. Es empfiehlt sich hier, nicht die Größe Power zu verwenden, sondern die Veränderung der Größe Total zu betrachten. Wird diese über mehrere Perioden gemittelt, so kann auch für einstellige Watt Werte ein relativ genaues Ergebnis erzielt werden. Um dies zu erreichen, sind mehrere Schritte nötig.

  • Zuerst muss die Übertragungsfrequenz des Sonoff eingestellt werden. Hier ist Probieren angesagt, in einem Beispiel wurde eine Frequenz von 90s pro Datensatz verwendet. Hierzu ruft man beispielsweise die Seite
http://<ip-Adresse-des-Sonoff>/cm?cmnd=Teleperiod%2090
auf. Die nach dem Leerzeichen %20 stehende 90 steht für 90s. Ein Aufruf ohne Zeit liefert die gegenwärtige Telemetry-Periode zurück.
  • Danach ist die Genauigkeit der Leistungsmessung am Sonoff auf die höchstmögliche Größe einzustellen (siehe auch den Wiki von TASMOTA). Dies geschieht durch
http://<ip-Adresse-des-Sonoff>/cm?cmnd=WattRes%201
sowie
http://<ip-Adresse-des-Sonoff>/cm?cmnd=EnergyRes%205
  • Im nächsten Schritt muss ein Reading für die Veränderung des Total-Wertes definiert werden. Die geschieht beispielsweise durch
attr <device_name_des_Sonoff_pow> userReadings myPower:Time.* difference { 1000*ReadingsVal("Sonoff_pow1","Total",0);;;;}, myPower.av:Time.* {movingAverage("Sonoff_pow1","myPower",360)}
  • Hierbei wird gleichzeitig neben dem Reading myPower auch eine Reading myPower.av für den gleitenden Mittelwert definiert. Der Differenzwert wird mit 1000 multipliziert, damit die Anzeige in Wh und nicht kWh erfolgt. Der Mittelwert wird dabei über 360s gestreckt. Sowohl die 90s oben als auch die 360s müssen durch probieren der konkreten Situation angepasst werden. Die Funktion movingAverage selbst muss in 99_myUtils.pm definiert werden, siehe dazu "Gleitende Mittelwerte berechnen und loggen". Weiterführende Hinweise in diesem Forenthema.

FHEM Anbindung

Ein Beispiel einer einfachen Anbindung via JSON an FHEM. MQTT von Arends ist insofern notwendig, da in der Software ESPEasy und der Bridge noch keine Implementierung der Frequenzumrechnung enthalten ist.

 define Sonoff_Pow MQTT_DEVICE
 attr Sonoff_Pow IODev myBroker
 attr Sonoff_Pow icon measure_power
 attr Sonoff_Pow publishSet ON OFF cmnd/sonoffpow/POWER
 attr Sonoff_Pow stateFormat {sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef))}
 attr Sonoff_Pow subscribeReading_ENERGY tele/sonoffpow/ENERGY
 attr Sonoff_Pow subscribeReading_POWER stat/sonoffpow/POWER
 attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/POWER
 attr Sonoff_Pow webCmd ON:OFF

Zusätzlich kann hier noch das Relais mit "ON" und "OFF" ein- ausgeschaltet werden.

Ebenso notwendig ist das Setzen der Regexp für den JSON Konverter.

define ej3 expandJSON Sonoff.*:.*:.[{].*}

hier wird alles was mit dem Namen Sonoff beginnt gefiltert und automatisch alle darin enthaltenen Readings erstellt.

define ej3 expandJSON Sonoff.*:ENERGY.*:.[{].*} (Power|Yesterday|Today)

oder so, da werden nur die Readings Power, Yesterday und Today erstellt. Somit ist auch klar, dass in FHEM auch JSON installiert sein muss. Ebenso können die verschiedenen Regexp im Wiki nachgelesen werden.

Source Reading:
device:reading:.{.*} 
.*WifiIOT.*:sensor.*:.{.*} 
sonoff_.*:.*:.{.*} 
dev.*:(sensor1|sensor2|teleme.*):.{.*} 
(dev.*|[Dd]evice.*):json:.{.*} 
(devX:jsonX:.{.*}|devY.*:jsonY:.{.*Wifi.*{.*SSID.*}.*}) 
Target Reading:
.*power.* 
(Current|Voltage|Wifi.*)  
Komplette Definition des Filters:
define ej1 expandJSON device:sourceReading:.\{.*} targetReading 
define ej3 expandJSON .*\.SEN\..*:.*:.\{.*} 
define ej3 expandJSON sonoff_.*:sensor.*:.\{.*} (power.*|current|voltage)
define ej3 expandJSON Sonoff.*:.*:.\{.*} (Power|Current|Voltage|Yesterday|Today|Total|AnalogInput0|RSSI|.*Humidity|.*Temperature|Counter1|Period)

letzteres Filter definiert so ziemlich alle wichtigen Sonoff Messdaten

Netz-Anschluss

Sonoff POW Netzanschluss

Erst wenn alle Arbeiten an der Hard- und Software abgeschlossen sind, kann man das Modul an die Netzspannung anschließen. Wer es sich einfach machen will, nimmt eine Industriell gefertigte 230 V Verlängerung (zwischen 1,5 - 3 Meter) und schneidet sie in der Mitte durch. Nach dem ab-isolieren der flexiblen Drähte sollte diese mit Aderendhülsen versehen werden (müssen aber exakt passen, da hier kaum Platz in den Klemmen ist). Mit einem kleinen Schraubendreher kann man die Feder der Klemmen niederdrücken und das verzinnte Drahtende tief ich die Öffnung stecken. Es dürfen keine Drahtlitzen aus den Öffnungen sichtbar sein, Kurzschlussgefahr! Ebenso sollte eine Zugprobe durchgeführt werden ob die Klemme auch richtig eingerastet ist.

ACHTUNG: diese Arbeiten müssen von einem ausgebildeten Fachpersonal (Elektriker) durchgeführt werden, Lebensgefahr!

ReadingsGroup mit Schaltmöglichkeit

readingsGroup mit Schalter

Die ReadingsGroup kann auch gleich mit einem Schalter versehen werden um den POW Ein- oder Aus schalten zu können. Dazu ist aber eine andere Einstellung im Sketch erforderlich.

In der "user_config.h" muss an dieser Stelle auch die "PUB_PREFIX" auf die gleiche Topic wie "PUB_PREFIX2" eingestellt werden. Durch diese Maßnahme wird erreicht, dass sofort nach dem Knopfdruck auch der Status mit der Topic "tele" übertragen wird. Würde der weiterhin mit "stat" übertragen, kann er in der Readingsgroup nur sehr umständlich weiter behandelt werden. Dadurch wird erreicht, dass der Schalter sofort nach dem Schaltvorgang und der Rückmeldung (Status) auch seine Farbe ändert. Wird dieser Eintrag vergessen, ändert der Schalter erst nach Eintreffen der nächsten zyklischen Abfrage seinen Status/Farbe.

#define SUB_PREFIX             "cmnd"       // Sonoff devices subscribe to:- SUB_PREFIX/MQTT_TOPIC and SUB_PREFIX/MQTT_GRPTOPIC
#define PUB_PREFIX             "tele"       // Sonoff devices publish to:- PUB_PREFIX/MQTT_TOPIC
#define PUB_PREFIX2            "tele"       // Sonoff devices publish telemetry data to:- PUB_PREFIX2/MQTT_TOPIC/UPTIME, POWER/LIGHT and TIME

hier die PUB_PREFIX mit der geänderten Topic "tele" anstatt "stat"


define SonoffPows readingsGroup <%measure_power>,<aktuell>,<Tag>,<Gestern>,<Strom>,<Durchschnitt>,<max.P>,<Zyklus>,<Faktor>,<Status>,< hr > .*(Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3|Sonoff_Pow4):Power,Today,Yesterday,Current,Power_avg_day,Power_max_day,Period,Factor,LIGHT
 attr SonoffPows commands {'LIGHT.ON' => 'set $DEVICE OFF','LIGHT.OFF' => 'set $DEVICE ON'}
 attr SonoffPows mapping %ALIAS
 attr SonoffPows nameStyle style="color:yellow"
 attr SonoffPows room Energie,MQTT
 attr SonoffPows valueFormat {'Power' =>"%.0f W", 'Today' =>"%.2f Kw",'Yesterday' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'Power_max_day' => "%.0f W",'Power_avg_day' => "%.2f W",'Power'=>"%.0f W",'Factor' => "%.2f "}
 attr SonoffPows valueIcon {'LIGHT.ON' => 'rc_GREEN@green', 'LIGHT.OFF' => 'rc_RED@red'}
 attr SonoffPows valueStyle { if($READING eq "Power" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Power" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Today" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Today" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Today" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Current" && $VALUE <= 0.45){'style="color:green;;text-align:right"'}elsif( $READING eq "Current" && $VALUE > 0.45 && $VALUE < 0.87 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "Current" && $VALUE >= 0.87){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Period" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Period" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Period" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"'}}

Dieses Beispiel ist für Tasmota mit JSON ausgelegt und benötigt ebenso wie oben die Erweiterung "average".

define Sonoff_Pow_CURRENT_POWER average Sonoff_Pow:Power.*

damit werden der Durchschnitt und min max für Tasmota mit JSON erzeugt.

FTUI

Tablett FTUI

Wer möchte kann die Energieanzeigen auch mit der Tablett UI für eine Tablet Ansicht gestalten. Mit dieser stehen viele Möglichkeiten zu einer attraktiven Darstellung zur Verfügung. Hier ein Beispiel welches mit den Widget "thermostat" dargestellt ist.

Sonoff Slampher

Anmerkung: Seit April 2017 ist eine neue Version des Slampher im Umlauf (v 2.0 2017-04-14, deutlich auf der Platine zu erkennen), die etwas anders geflasht werden muss. Siehe hierzu diesen Blogeintrag. Zum einen ist der ESP8285 statt des ESP8266 verbaut; zum anderen muss unten nicht der rechte Pin des R20, sondern der linke Pin des R9 mit GND verbunden werden.

Sonoff SLAMPHER

Dieses Modul ist eine Besonderheit was das Flashen betrifft, denn mit Hilfe des Tasters kann der ESP8266 NICHT in den Flashmode gebracht werden. Der Taster ist intern anderweitig verdrahtet und somit für diesen Zweck nicht zu gebrauchen. Wie hier links im Bild zu sehen ist, muss der rechte Pin des R20 (oben im Bild) während des Anschlusses der Spannung Vcc auf Masse gelegt werden. Eine Möglichkeit ist, ein Stückchen Draht anzulöten und diesen dann beim Einstecken auf den Masse-Pin des USB-Konverters zu legen.

Pinbelegung des Steckers von oben nach unten:

o - GND
o - TxD
o - RxD
o - Vdd
Sonoff SLAMPHER R20
Info green.pngHier ist genau ersichtlich, wo der R20 auf der Platine platziert ist.

Hier noch einmal schön zu sehen wo der R20 (der ist nicht eingelötet sondern leer) exakt auf der Platine liegt, gemeint ist der rechte Pin. Hier kann auch leicht gelötet werden, da keine empfindlichen Bauteile in der Nähe sind und auch genug Platz vorhanden ist. (Achtung: Beim Slampher v2.0 muss der linke Pin des R9 auf Masse gelegt werden, siehe oben!).

Sonoff SLAMPHER R20
Info green.pngHier ist genau ersichtlich, wo der Draht am R20 aufgelötet wurde

Hier ist ein kleines Stück Schaltdraht auf den Pin bereits aufgelötet und bereit zum flashen!

In diesem Beispiel wurde keine Pfostensteckerleiste auf die Platine aufgelötet, sondern nur durchgesteckt und mit einem Gummiring zum Relais fixiert, das erspart den Lötvorgang, weil in Zukunft dann ohnehin OTA geflasht werden kann.

Also Pin20 auf Masse legen und USB-Konverter an den PC einstecken, dann den Draht von der Masse entfernen. Der ESP8266 sollte jetzt im Flashmodus bereit stehen und kann wie bereits oben beschrieben geflasht werden.

Sonoff Slampher Software

Sonoff SLAMPHER FHEM

Als Software wird Arends Sketch installiert (Kommunikation über MQTT), da zum derzeitigen Zeitpunkt ESPEasy das Modul noch nicht integriert hat und somit auch nicht ansteuern kann.

define Sonoff_SL MQTT_DEVICE
attr Sonoff_SL IODev myBroker
attr Sonoff_SL devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
attr Sonoff_SL icon hue_filled_br30
attr Sonoff_SL publishSet ON OFF cmnd/sonoffsl/POWER1
attr Sonoff_SL room Bewegung,_Sonoff
attr Sonoff_SL stateFormat Licht
attr Sonoff_SL subscribeReading_Licht tele/sonoffsl/POWER1
attr Sonoff_SL subscribeReading_state cmnd/sonoffsl/POWER1
attr Sonoff_SL webCmd ON:OFF

Hier ein Beispiel wie in FHEM der Slampher eingebunden werden kann. In diesem Beispiel wird davon ausgegangen, dass im Modul die Topic "sonoffsl" benannt wurde. Wer einen anderen Namen haben möchte, muss dies dann auch in FHEM entsprechend anpassen.

Sonoff Th10/16

Sonoff TH10

Das Modul kann durch Drücken des Tasters während dem Einstecken des USB-Konverters in den Flashmodus gebracht werden. Der Th10/16 kann mit zwei unterschiedlichen Typen von Sensoren bestückt werden, hier im Beispiel mit dem externen Temperaturfühler DS18B20.

Wie im Bild klar zu sehen ist, kann das Webif auch zur Darstellung via Mobile verwendet werden. Mit "Toggle" wird Ein- oder Aus geschaltet und darunter ist die aktuelle Temperatur ersichtlich. Für diese Ansicht muss keine MQTT Verbindung eingerichtet werden, da die Kommunikation hier rein über HTTP erfolgt.

Die unten dargestellten Beispiele für FHEM beziehen sich auf Arends Sketch, also über MQTT. Dieses Modul kann aber genauso leicht über ESPEasy und der ESPEasy-Bridge eingebunden werden.

Pinbelegung des Steckers von oben nach unten:

o - GND
o - TxD
o - RxD
o - Vdd
Sonoff TH10
Info green.pngEinbindung in FHEM via MQTT!
### Temperatur und Luftfeuchte vom Sonoff Switch ###
define Sonoff_Temp MQTT_DEVICE
attr Sonoff_Temp IODev myBroker
attr Sonoff_Temp alias Pool Wasser
attr Sonoff_Temp eventMap ON:on OFF:off
attr Sonoff_Temp icon temperature_humidity
attr Sonoff_Temp publishSet ON OFF cmnd/sonoffth/POWER1
attr Sonoff_Temp room _Sonoff
attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"temperature",0))}
attr Sonoff_Temp subscribeReading_SENSOR tele/sonoffth/SENSOR
attr Sonoff_Temp subscribeReading_state cmnd/sonoffth/POWER1

Beispiel für FHEM mit Temperaturanzeige mit DS18B20

define Sonoff_Switch MQTT_DEVICE
attr Sonoff_Switch IODev myBroker
attr Sonoff_Switch alias Pool Licht
attr Sonoff_Switch devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_Switch eventMap ON:on OFF:off
attr Sonoff_Switch icon light_ceiling
attr Sonoff_Switch publishSet ON OFF cmnd/sonoffth/POWER1
attr Sonoff_Switch room _Sonoff
attr Sonoff_Switch stateFormat Licht
attr Sonoff_Switch subscribeReading_Licht tele/sonoffth/POWER1
attr Sonoff_Switch subscribeReading_state cmnd/sonoffth/POWER1
attr Sonoff_Switch webCmd ON:OFF

Der Schalter nochmals separat dargestellt, je nach Geschmack.

Sonoff 4CH 4-Kanal Schaltmodul

Besonderheiten

Sonoff CH4
Info green.pngAchtung andere Einstellungen der Arduino IDE: Select Board "Generic ESP8285 Module" (=Flash Mode "DOUT") and Flash Size "1M (64K SPIFFS)"n!


Der Sonoff 4CH ist mit seinen 4 Kanälen ein sehr preiswertes Modul im Gehäuse und für Hutschienenmontage. Anstatt des üblichen ESP8266 besitzt dieses Modul schon den moderneren ESP8285. Es müssen daher in der Arduino IDE andere Einstellungen vorgenommen werden. Unter Board wird hier das "Generic 8285 Module" mit 1M und 64K Spiffs angewählt. Der Flashmode "DOUT" wird dann automatisch eingestellt, bzw. ausgeblendet.

Es ist daher unbedingt notwendig den Sketch mit den geänderten Einstellungen selbst zu compilieren, ansonsten stürzt das Modul nach Auswahl des Typs ab und wird nicht mehr rebooten können!


Das Modul ist etwas größer als die anderen Sonoff Produkte und besitzt mit 14,5 x 9 cm schon beachtliche Einbau Maße.

Sonoff 4CH FDTI

Als weitere Besonderheit sei hier erwähnt, dass die Signale RxD auf RxD und TxD auf TxD des FTDI Konverters zu verbinden sind. Wie bei allen Sonoff Modulen darf man zum flashen keine Netzspannung anschließen, sondern nur über die Versorgungsspannung des FDTI Konverters mit 3,3 V versorgen (Jumper richtig setzen). Die Stiftleiste für den FTDI Anschluss ist hier schon eingelötet.

In den Flashmodus gelangt man durch Drücken der Taste FW/IO0 während des Einstecken des USB Anschlusses.

Sonoff 4CH Arends

Hier die Ansicht des Webinterface des Arends Sketches! Bei der Software sei erwähnt, dass die getestete Version 3.1.16 nur bei Kanal 1 den Modus "PulseTime" beherrscht. Wer also gepulste Ausgänge (zB: elektrische Garage/Toröffner) benötigt muss diese per Software nachbilden oder mit dem Kanal 1 auskommen. Eine "Pulsetime 10" ist ein guter Wert dafür (etwa 1 Sekunde).

Als Alternative kann mit dieser HTML Seite des Webservers am Modul des CH4 schon mit jedem Browser fähigen Handy (Android, iPhone, Windows) aufgerufen werden und somit alle Funktionen gesteuert werden.

Sonoff CH4 Software APP

Hier dargestellt die Original Software die Sonoff zum Modul liefert (EWeLink) und über ihre Cloud verbindet. Leider kann hier keine gepulste Ausgabe erfolgen. Mit einem Countdown kann zwar der Ausgang wieder abgeschaltet werden, die kleinste Zeiteinheit ist aber 1 Minute und somit für einen Impuls leider nicht zu gebrauchen. Ebenso kann mit dieser Software keine Einbindung in FHEM erfolgen, obwohl es eine nette anschauliche Darstellung ist.

Anbindung FHEM

Beispiel zur Anbindung in FHEM für den 4CH, hier werden einfach 4 einzelne Schalter definiert!

define Sonoff_ch1 MQTT_DEVICE
attr Sonoff_ch1 IODev myBroker
attr Sonoff_ch1 alias Sonoff CH1
attr Sonoff_ch1 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch1 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch1 group Toröffner
attr Sonoff_ch1 icon light_ceiling
attr Sonoff_ch1 publishSet ON OFF cmnd/sonoffch4/POWER1
attr Sonoff_ch1 stateFormat Power
attr Sonoff_ch1 subscribeReading_Power tele/sonoffch4/POWER1
attr Sonoff_ch1 subscribeReading_state cmnd/sonoffch4/POWER1
attr Sonoff_ch1 webCmd Ein:Aus
define Sonoff_ch2 MQTT_DEVICE
attr Sonoff_ch2 IODev myBroker
attr Sonoff_ch2 alias Sonoff CH2
attr Sonoff_ch2 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch2 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch2 group Toröffner
attr Sonoff_ch2 icon light_ceiling
attr Sonoff_ch2 publishSet ON OFF cmnd/sonoffch4/POWER2
attr Sonoff_ch2 stateFormat Power
attr Sonoff_ch2 subscribeReading_Power tele/sonoffch4/POWER2
attr Sonoff_ch2 subscribeReading_state cmnd/sonoffch4/POWER2
attr Sonoff_ch2 webCmd Ein:Aus
define Sonoff_ch3 MQTT_DEVICE
attr Sonoff_ch3 IODev myBroker
attr Sonoff_ch3 alias Sonoff CH3
attr Sonoff_ch3 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch3 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch3 group Toröffner
attr Sonoff_ch3 icon light_ceiling
attr Sonoff_ch3 publishSet ON OFF cmnd/sonoffch4/POWER3
attr Sonoff_ch3 stateFormat Power
attr Sonoff_ch3 subscribeReading_Power tele/sonoffch4/POWER3
attr Sonoff_ch3 subscribeReading_state cmnd/sonoffch4/POWER3
attr Sonoff_ch3 webCmd Ein:Aus
define Sonoff_ch4 MQTT_DEVICE
attr Sonoff_ch4 IODev myBroker
attr Sonoff_ch4 alias Sonoff CH4
attr Sonoff_ch4 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_ch4 eventMap ON:on OFF:off ON:Ein OFF:Aus
attr Sonoff_ch4 group Toröffner
attr Sonoff_ch4 icon light_ceiling
attr Sonoff_ch4 publishSet on off cmnd/sonoffch4/POWER4
attr Sonoff_ch4 stateFormat Power
attr Sonoff_ch4 subscribeReading_Power tele/sonoffch4/POWER4
attr Sonoff_ch4 subscribeReading_state cmnd/sonoffch4/POWER4
attr Sonoff_ch4 webCmd Ein:Aus


Sonoff B1

Besonderheiten

Sonoff B1 mit angelöteten Kabeln

Der Sonoff B1 ist eine LED-Lampe in einer E27-Fassung, deren Farbe (in Grenzen) durch FHEM gesteuert werden kann. Die Lichtausbeute dieser Lampe ist gering, ein normal großes Zimmer kann damit nicht farblich ausgeleuchtet werden (dies gelingt nur mit kaltweißem oder warmweißem Licht), siehe diesen Blog

Zuerst ist die Abdeckung der Lampe durch "brute force" zu entfernen. Dabei ist nichts zu drehen, zu schrauben oder zu hebeln, die lichtweiße Abdeckung ist einfach gesteckt (siehe beispielsweise diese Anleitung). Danach kann Sonoff wie üblich geflasht werden, da alle Kontakte ausreichend beschriftet sind. Es empfiehlt sich, zum flashen die Kontakte anzulöten.

Nach dem Flashen kann die LED mit den üblichen MQTT-Kommandos angesteuert werden.

Farbechtheit

Die Farbe bei Sonoff B1 ist, was die RGB-LEDs (red-green-blue) angeht, nicht hell. Farben wie gelb können praktisch nicht erzeugt werden. Angesteuert werden kann die Sonoff mit einem Webkommando

http://<ip-Adresse>/cm?cmnd=Color%2000000000FF

wobei die ersten 8 Stellen den RGB-Farbcode angeben, die nächsten beiden die Stärke des kaltweißen Lichts und die letzten beiden Stellen die Stärke des warmweißen Lichts wiedergeben. Allerdings scheinen die gelben LEDs praktisch kein Licht zu emittieren. Die kalt- und warmweißen LEDs überstrahlen die Farb-LEDs um ein Mehrfaches: Um also Farben zu erzeugen, müssen die weißen LEDs ausgeschaltet werden (Farbcode 0000 am Ende).

Einbindung in FHEM

Die Einbindung des Sonoff B1 in FHEM ist leider nicht unmittelbar möglich. Hier existiert bisher eine Behelfslösung, die in diesem siehe Forenbeitrag genauer beschrieben ist.

Sonoff S20

Der Sonoff S20 ist eine Neuentwicklung von Itead, bei dem keine weiteren Kabel für den Netzanschluss benötigt werden. Vielmehr befindet sich der gesamte Sonoff in einem Gehäuse. Dieses Gehäuse kann mit drei Schrauben geöffnet werden, dann ist wieder die serielle Schnittstelle zum Flashen erkennbar.

Sonoff S20 auseinander genommen

Es empfiehlt sich, auf die vier Anschlüsse eine Stiftleiste anzulöten (dies muss aber nicht sein). Danach gelingt der Flashvorgang wie oben beschrieben.

Sonoff S20 mit angelöteter Stiftleiste

Erweiterungen mit Sensoren

Wozu überhaupt den Switch erweitern wenn es auch die Modelle TH10 und TH16 gibt?

Manche Personen können dadurch dem Basteltrieb nachkommen, aber das wesentliche ist der Preis, da die Switches doch fast um die Hälfte billiger sind. Die Sensoren kosten ebenfalls kaum nennenswerte Beträge.

Oder es hat schon jemand Switches im Einsatz und möchte jetzt zusätzlich die Temperatur erfassen!


Sonoff Switch mit Temperatur + Luftfeuchte

Hardware erweitern mit DHT22

Sonoff Switch Pinleiste mit Temperatur

Am Sonoff Switch wurde ja schon eine Stiftleiste zum flashen eingelötet. Diese Stiftleiste bietet schon alle Anschlüsse welche für die Temperatur- und Luftfeuchtemessung benötigt werden. Am 5. Anschluss der Stiftleiste ist das Signal "SCL" (GPIO14) herausgeführt, welches für den DHT22 zur Erfassung der Messdaten benötigt wird. Der Sensor wird mit einem einem 3-poligen Kabel (zB: ein Steckkabel für ein Breadboard oder direkt anlöten) verbunden. Damit der DHT22 korrekt funktioniert, wird ein Widerstand mit 4,7 K Ohm zwischen Vdd und Data am DHT22 zusätzlich benötigt.

AM2302 / DHT22

Ansicht des DHT22 (AM2302) mit den aufgesteckten Verbindungskabeln. Von links nach rechts sind das

1 = VCC 3,3 V
2 = Data
3 = nc (nicht belegt)
4 = GND

Pin1 (VCC) des DHT22 muss also auf Pin1 der Stiftleiste, Pin2 (Data) auf Pin5 und Pin4 (GND) auf Pin4. Pin2 und Pin1 soll hier noch der Widerstand aufgelötet werden.

1 ------- 1 (VDD)
2 ------- 5 (GPIO14)
3
4 ------- 4 (GND)
DHT22  Stiftleiste
umgebautes Modul

Diese Darstellung zeigt das umgebaute und bereits verschlossene Modul. Auf der Seite des Tasters (bitte nur hier, da auf der anderen Seite die 230 V verlaufen und neben der Lebensgefahr auch den Sensor beeinflussen) ist hier einfach mit einer Eisensäge ein Schlitz eingesägt, der dient in diesem Falle als Kabeldurchführung. Ein Schlitz ist besser als ein Loch, da der Oberteil des Gehäuses sich leichter aufsetzen lässt. Wer ein längeres Kabel benötigt, kann natürlich auch ein 3-poliges Telefonkabel (oder Mikrokabel oder sonstiges) verwenden. Der Sensor sollte etwas Abstand zum Gehäuse haben, da dieses auch eine Eigenerwärmung hat. Wer es ganz originalgetreu lösen will, kann auch eine 3-polige Mini Buchse für Klinkenstecker (3,5mm) einbauen so wie sie am TH10/16 vorhanden ist.

Software anpassen am Beispiel MQTT

Sonoff MQTT

Die richtige Auswahl des Sensors und des verwendeten GPIO erfolgt im WEBIF des Modules und wird seit Tasmota nur mehr dort eingestellt. Eventuell sollte das aktuell verwendete JSON Filter geändert/erweitert werde (siehe beim Modul POW).

Software Anpassung DHT22 in FHEM

umgebautes Modul

Links in der Hardcopy sind die Readings die nach der Anpassung von FHEM (Broker) befüllt werden sollten.

### Temperatur und Luftfeuchte vom Sonoff Switch ###
define Sonoff_Temp MQTT_DEVICE
attr Sonoff_Temp IODev myBroker
attr Sonoff_Temp icon temperature_humidity
attr Sonoff_Temp room MQTT
attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0))}
attr Sonoff_Temp subscribeReading_Sensor tele/sonoff/SENSOR

Hier die zusätzliche Erweiterung um die Temperatur und die Luftfeuchte in FHEM. Der in der Topic verwendete Name "sonoff" muss natürlich der Einstellung in der Software am Switch entsprechen. Bei Verwendung mehrerer Switches muss natürlich auch der Name bei jedem geändert werden.

Als Regexp für JSON kann dieser Filter eingesetzt werden.

define ej3 expandJSON .*\.SEN\..*:.*:.{.*} 

Logfile für die Temperatur

define SVG_FileLog_Sonoff_Temp SVG myDbLog:SVG_FileLog_Sonoff_Temp:HISTORY
attr SVG_FileLog_Sonoff_Temp room MQTT

Und schließlich fehlt noch das Logfile, damit der Temperaturverlauf auch in schönen Plots dargestellt werden kann. Das hier verwendete Beispiel funktioniert nur mit einer DbLog.

Sonoff Switch als Thermostat verwenden mit MQTT

Thermostat

Mit diesem einfachen Beispiel wird ein Pelett Ofen mit einem externen Thermostat (sonoff Switch oder TH10/16) gesteuert. Zum besseren Überblick wird die Steuerung in einzelne Module getrennt, es könnte aber auch einiges zu einer einzigen Definition zusammen gefasst werden. Der Thermostat könnte auch als Frostwächter benutzt werden und ein anderes Heizgerät steuern.

###################################
### Sonoff Thermostat Regelung ####
###################################
define Sonoff_dht MQTT_DEVICE
attr Sonoff_dht IODev myBroker
attr Sonoff_dht alias Raumtemperatur
attr Sonoff_dht group Thermostat
attr Sonoff_dht icon temperature_humidity
attr Sonoff_dht publishSet ON OFF cmnd/sonoff_dht/POWER1
attr Sonoff_dht room _Sonoff
attr Sonoff_dht stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0),  ReadingsVal($name,"humidity",0))}
attr Sonoff_dht subscribeReading_Sensor tele/sonoff_dht/SENSOR
attr Sonoff_dht subscribeReading_state cmnd/sonoff_dht/POWER1

FHEM Definition zur Erfassung der Temperatur und der Luftfeuchte. Damit dieses Beispiel funktioniert, ist am Sonoff Modul die Topic "sonoff_dht" zu setzen. Dieser Temperaturwert dient dem Thermostat als ISTWert.


define Sonoff_Sw MQTT_DEVICE
attr Sonoff_Sw IODev myBroker
attr Sonoff_Sw alias Pellets Ofen
attr Sonoff_Sw devStateIcon on:rc_GREEN:off off:rc_RED:on
attr Sonoff_Sw eventMap ON:on OFF:off
attr Sonoff_Sw group Thermostat
attr Sonoff_Sw icon sani_boiler_temp
attr Sonoff_Sw publishSet ON OFF cmnd/sonoff_dht/POWER1
attr Sonoff_Sw room _Sonoff
attr Sonoff_Sw stateFormat Licht
attr Sonoff_Sw subscribeReading_Licht tele/sonoff_dht/POWER1
attr Sonoff_Sw subscribeReading_state cmnd/sonoff_dht/POWER1
attr Sonoff_Sw webCmd ON:OFF

FHEM Definition zum Absetzen der Befehle für das Relais (Thermostat) Ein- / Aus. Wenn das zu steuernde Geräte einen potentialfreien Thermostatanschluss benötigt (in den meisten Fällen), muss noch ein Relais dazwischen geschaltet werden um die Trennung der Netzspannung zu gewährleisten.

define ThermostatPellets dummy
attr ThermostatPellets alias Pellets Ofen Sollwert
attr ThermostatPellets group Thermostat
attr ThermostatPellets icon temp_control
attr ThermostatPellets room _Sonoff
attr ThermostatPellets setList state:0,5,10,12,13,14,15,16,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,23,24,25,26,27
attr ThermostatPellets webCmd state

Die Sollwertvorgabe für das Thermostat durch einen Dummy, damit können die gewünschten Temperaturen eingestellt werden.

### sofort ausführen wenn neuer Sollwert eingestellt wird ###
define Thermostat_on_notify notify ThermostatPellets IF (ReadingsVal("Sonoff_Sw","state",0) eq "OFF" && (ReadingsVal("Sonoff_dht","temperature",0) <= Value("ThermostatPellets"))) (set Sonoff_Sw ON)
define Thermostat_off_notify notify ThermostatPellets IF (ReadingsVal("Sonoff_Sw","state",0) eq "ON" && (ReadingsVal("Sonoff_dht","temperature",0) > Value("ThermostatPellets"))) (set Sonoff_Sw OFF)

Mit einem notify wird die manuelle Änderung des Sollwertes überwacht und sofort reagiert.

## zyklisch prüfen ob Sollwert erreicht wurde ###
define Thermostat_on at +*00:15:00 IF (ReadingsVal("Sonoff_Sw","Licht",0) eq "OFF" && (ReadingsVal("Sonoff_dht","temperature",0) <= Value("ThermostatPellets"))) (set Sonoff_Sw ON)
define Thermostat_off at +*00:15:00 IF (Value("Sonoff_Sw") eq "ON" && (ReadingsVal("Sonoff_dht","temperature",0) > Value("ThermostatPellets"))) (set Sonoff_Sw OFF)

Hier noch die Soll- Ist Wertvergleiche zur Steuerung. Es wird alle 15 Minuten überprüft ob die Temperatur erreicht ist. Bei einer trägen Heizung sollten 15 Minuten ausreichend sein, wer will kann dies aber auch alle 5 oder 10 Minuten prüfen. Da des öfteren die Bezeichnungen der Readings im Sketch geändert werden ( zB:temperature ), bitte die richtige Schreibweise ( Groß/Klein ) in den Readings kontrollieren und gegebenenfalls hier anpassen.

Sonoff Switch mit Bewegungsmelder HC-SR501

Bewegungsmelder

Basierend auf dem Wall Switch MQTT Sketch von Arends wurde hier ein Sonoff BASIC + PIR HC-SR501 in eine größere Verteilerdose (auch Abzweigdose) eingebaut, der Sonoff wurde dabei etwas gekürzt. Die Bewegungsmelder sind ab etwa 70 Cent erhältlich.

Der Sketch kann auch den Blink Modus. Damit kann man im Alarmfall z.B. Alle Strahler rings ums Haus blinken lassen.

Mehr dazu kann hier im Forumim Diskussionsthread nachgelesen werden.

Bewegungsmelder

Ein Beispiel wir der Bewegungsmelder in der Feuchtraumdose montiert werden kann. Wird der Bewegungsmelder abgesetzt vom Switch montiert, ist darauf zu achten das die Kabel nicht zu lange werden.

Spannungsversorgung des HC-SR501

5V für Bewegungsmelder

Der HC-SR501 wird vom Sonoff versorgt, wobei hier die 3,3 V nicht immer ausreichen. Es ist deshalb am HC-SR501 eine Diode zu überbrücken, dann reichen die 3,3V vom Sonoff. Es können aber auch am Sonoff die 5V angezapft werden. Hier im Bild dargestellt wo die 5V angezapft werden können.

3,3V für Bewegungsmelder

Hier eine kleine Übersicht der wichtigsten Teile und deren Platzierung am HC-SR501. Den PIR kann man auch mit 3,3V betreiben wenn man die Diode am Eingang nach Vcc überbrückt, dann reicht die Spannung für einen reibungslosen Betrieb völlig aus. Dies gilt für den HC-SR501, wird ein anderer PIR verwendet muss man nachschauen ob das auch möglich ist, ansonsten die 5V Variante wählen.

Einbindung des HC-SR501 in FHEM

# ------------- Sonoff_pir mit Bewegungsmelder ---------------
define Sonoff_pir MQTT_DEVICE
attr Sonoff_pir IODev myBroker
attr Sonoff_pir eventMap ON:on OFF:off
attr Sonoff_pir group Sonoff
attr Sonoff_pir icon hue_filled_br30
attr Sonoff_pir publishSet ON OFF cmnd/sonoff_pir/1/POWER
attr Sonoff_pir room MQTT
attr Sonoff_pir stateFormat Licht
attr Sonoff_pir subscribeReading_Licht stat/sonoff_pir/POWER
attr Sonoff_pir subscribeReading_state cmnd/sonoff_pir/1/POWER
attr Sonoff_pir webCmd :

Ein Beispiel wie der Sonoff Switch in FHEM eingebunden wird. Wenn im Sketch der Prefix von stat auf tele geändert wurde, ist dies auch hier durchzuführen ( subscribeReading_Licht tele/sonoff_pir/POWER ), ansonsten bleibt es so wie im Beispiel. Getestet wurde dieses Beispiel mit Version 5.5.2i. Die Topic sollte auf den Namen "sonoff_pir" eingestellt werden. Bei anderen Namen ist dies entsprechend in FHEM anzupassen.

Mit dem Kommando SwitchTopic Alarm_SO2 ( direkt im Webinterface des Sonoff ) wird der Wall Switch GPIO14 vom Sonoff entkoppelt und somit sendet der Bewegungsmelder direkt an FHEM --> Motion_pir MQTT_DEVICE. Bei den älteren Versionen vor Tasmota war das noch das Kommando ButtonTopic.

Es sollte auch unbedingt kontrolliert werden, wie die Ausgabe des Alarmes in der Console erfolgt. Erscheint hier die Meldung "cmnd/Alarm_SO2/POWER TOGGLE" dann muss mit dem Kommando "SwitchMode 1" das Ausgabeformat umgeschaltet werden, erst dann kommt das gewünschte Format "ON" und "OFF".

# ------------------ Motion_pir MQTT_DEVICE -----------------
define Motion_pir MQTT_DEVICE
attr Motion_pir IODev myBroker
attr Motion_pir devStateIcon on:on-for-timer off:off
attr Motion_pir eventMap ON:on OFF:off
attr Motion_pir group Sonoff
attr Motion_pir icon people_sensor
attr Motion_pir room MQTT
attr Motion_pir stateFormat Alarm
attr Motion_pir subscribeReading_Alarm cmnd/Alarm_SO2/POWER1

Die Motion_pir dient nun zur eigentlichen Einschaltung des Lichtes und sendet das Kommando cmnd/Alarm_SO2/POWER1 an den entkoppelten GPIO 14 des Switch.


# ------------------ DoIf zur Motion Abfrage -----------------
define di_Sonoff_pir_Alarm DOIF ([Motion_pir:"on"] and [Tag_Nacht:twilight_weather] < 35) (set Sonoff_pir on) DOELSEIF ([Motion_pir:"off"] and [Tag_Nacht:twilight_weather] < 35) (set Sonoff_pir off)
attr di_Sonoff_pir_Alarm comment Abhängig von Helligkeitssensor wird nachts,bei Bewegung das Licht eingeschaltet!
attr di_Sonoff_pir_Alarm group Sonoff
attr di_Sonoff_pir_Alarm room MQTT

Zusätzlich kann nun mit einem DOIF verknüpft werden um das Ganze mit Tag_Nacht:twilight_weather dann in Abhängigkeit der Helligkeit zu schalten. Selbstverständlich kann jede andere Quelle mit einem Helligkeitswert verwendet werden.

Alarmausgabe über Grouptopic

# ------------------------ Sonoffs Group ----------------------
define Sonoffs MQTT_DEVICE
attr Sonoffs IODev myBroker
attr Sonoffs eventMap ON:on OFF:off
attr Sonoffs group Sonoff
attr Sonoffs icon hue_filled_br30
attr Sonoffs publishSet ON OFF cmnd/sonoffs/POWER1
attr Sonoffs room MQTT
attr Sonoffs stateFormat state
attr Sonoffs subscribeReading_Licht stat/sonoffs/POWER1
attr Sonoffs subscribeReading_state cmnd/sonoffs/POWER1

Wer möchte kann auch mit der Group Topic mehrere Switches mit Bewegungsmelder zusammenfassen und alle Lampen im Alarmfall gemeinsam in den Blinkmodus schalten. cmnd/sonoffs ist das Kommando für die Group Topic, sofern diese vom User nicht verändert wurde.

Sonoff Switch als IR-Sender verwenden

Einrichtung

IR

Mit einem normalen Sonoff Basic Modul kann dies zu einer IR Fernbedienung hochgerüstet werden.

Der einfache Schaltplan ist hier zu finden und der Nachbau ist sehr einfach. Man kann aber auch aus einer alten FB die IR-Diode ausbauen und zusammen schalten. Ein kleines Howto ist in diesem Wiki auf Github zu finden.

Verwendet wird dazu der Arends Sketch.

Als erstes sucht man sich auf LIRCdie entsprechenden FB-Codes, im Beispiel hier für einen Samsung TV 55" Curved UHD HU8580. Die FB ist zwar nicht exakt dieselbe, aber die Befehle passen soweit. Im Webif des Sonoff Modules ist beim angeschlossenen GPIO der IR-Diode "8 IRremote" einzustellen.

Link zum Forums Thread

Wichtig sind dabei folgende Daten:

name  Samsung_BN59-00940A
bits           16
pre_data_bits  16
pre_data       0xE0E0
Power On/Off   0x40BF[/code]

Nun stellt man sich den Sendestring zusammen:

predata+Befehl =  E0E040BF (hex) = 3772793023 (dec) und 32 Bit Datenlänge.
Der JSON String für den IRSend ist laut Arends Wiki folgender.
IRsend    | {"protocol": "<proto>", | Send IR remote control as JSON encapsulated command.
          |   "bits": 1..32         | <proto> is NEC, SONY, RC5, RC6, DISH, JVC or SAMSUNG
          |   "data": 1..(2^32)-1}  | bits are the required number of data bits.
          |                         | data is the data frame as 32 bit unsigned integer.
          |                         | See http://www.lirc.org/ for more info.

das ergibt dann unseren Befehl für die Kommandozeile am Modul. Die Bitlänge für Pre und Data sind ebenfalls zu addieren (16 + 16 = 32 Bit) und beim Arends Sketch muss im JSON Format gesendet werden:

irsend  {"protocol": "SAMSUNG","bits": 32, "data": 3772793023}

hier für die Kommandozeile am Broker alte Version Tasmota bis 4.x:

mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'

oder hier für die Kommandozeile am Broker Version Tasmota ab 5.x:

mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'

TestSwitch ist hier der verwendete Name des Sonoff Moduls, wird ein anderer Name verwendet ist dieser hier anzupassen.

Jedes mal wenn nun der Befehl gesendet wird, wird entweder Ein- oder Aus geschaltet. Die Verzögerung über Wlan ist vernachlässigbar. Ebenso können die Kanäle oder die Lautstärke verstellt werden. Im Prinzip funktionieren alle Befehle die auf der FB vorhanden sind.

FHEM Beispiel

IR

Hier ein Beispiel wie der Code für die Fernbedienung in FHEM eingebunden werden kann.

define RC_TV remotecontrol
attr RC_TV rc_iconpath icons/remotecontrol
attr RC_TV rc_iconprefix black_btn_
attr RC_TV room Entwicklung
attr RC_TV row00 KEY_POWER:POWEROFF,:blank,:blank
attr RC_TV row02 :blank,:blank,:blank
attr RC_TV row03 KEY_1:1,KEY_2:2,KEY_3:3
attr RC_TV row04 KEY_4:4,KEY_5:5,KEY_6:6
attr RC_TV row05 KEY_7:7,KEY_8:8,KEY_9:9
attr RC_TV row06 :blank,KEY_0:0,:blank
attr RC_TV row07 :blank,:blank,:blank
attr RC_TV row08 KEY_VOLUMEUP:UP,KEY_MUTE:MUTE,KEY_CHANNELUP:CHUP
attr RC_TV row09 KEY_VOLUMEDOWN:DOWN,:blank,KEY_CHANNELDOWN:CHDOWN
define Samsung_TV notify RC_TV "/opt/fhem/ircmd.sh $EVENT"

In einem externen Shell Script werden die Parameter übergeben und der Sendestring für den IRSend zusammen gestellt. Das Script ins FHEM Home Verzeichnis kopieren ( /opt/fhem ) und die Rechte auf 755 setzen. Link zum Wiki einer universellen Fernbedienung.

#!/bin/sh -e
if [ "$1" = "KEY_POWER" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'
fi
# E0E0E01F   3772833823
if [ "$1" = "KEY_VOLUMEUP" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772833823}'
fi
# E0E0D02F   3772829743
if [ "$1" = "KEY_VOLUMEDOWN" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772829743}'
fi
# E0E0F00F   3772837903
if [ "$1" = "KEY_MUTE" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772837903}'
fi
# E0E020DF   3772784863
if [ "$1" = "KEY_1" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772784863}'
fi
# E0E0A05F   3772817503
if [ "$1" = "KEY_2" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772817503}'
fi   
# E0E0609F   3772801183
if [ "$1" = "KEY_3" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772801183}'
fi 
# E0E010EF   3772780783
if [ "$1" = "KEY_4" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772780783}'
fi 
# E0E0906F   3772813423
if [ "$1" = "KEY_5" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772813423}'
fi 
# E0E050AF   3772797103
if [ "$1" = "KEY_6" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772797103}'
fi 
# E0E030CF   3772788943
if [ "$1" = "KEY_7" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772788943}'
fi
# E0E0B04F   3772821583
if [ "$1" = "KEY_8" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772821583}'
fi 
# E0E0708F   3772805263
if [ "$1" = "KEY_9" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772805263}'
fi         
# E0E08877   3772811383
if [ "$1" = "KEY_0" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772811383}'
fi
# E0E048B7   3772795063
if [ "$1" = "KEY_CHANNELUP" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772795063}'
fi
# E0E008F7   3772778743
if [ "$1" = "KEY_CHANNELDOWN" ]; then
 mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772778743}'
fi  

Das Script kann sehr leicht für jede andere FB abgeändert werden und auch noch zusätzliche Tasten eingebunden werden. Bitte nicht auf die vorangestellten Pre-Data-Bits vergessen. Auf die Verwendung des Scriptes kann auch verzichtet werden, wenn der JSON String in FHEM direkt zusammen gestellt wird. Für den Nachbau ist es aber leichter verständlicher und kann auch leicht selber an die eigene FB angepasst werden.

Info blue.png
Alternative Methoden ohne externes shell-script sind für MQTT_DEVICE hier zu finden, dies wäre für MQTT2_DEVICE anzupassen, hier ist ein attrTemplate (tasmota_ir) verfügbar, das exemplarisch bestimmte Kommandos auch direkt am Device anbietet. Alternativ könnte auch die publish-Option eines der MQTT-Interfaces genutzt werden.


Sonoff Development Board

Einrichtung

Dev. Board

Das Board kommt ohne Software und muss zunächst mit einem Sketch bespielt werden. Hier kurz beschrieben der Arends Sketch, es funktioniert aber mit ESPEasy genau so gut.

Damit die vielen GPIO's auch nach freiem Wunsch zugeordnet werden können, müssen die erforderten Einstellungen da allerdings in der sonoff_template.h bekannt gegeben werden. Hier wurde der GPIO12 und 13 einem Relais zugeordnet. Der Rest kann dann frei im Webif konfiguriert werden (Type = User Test).

Link zum Wiki des Herstellers

Link zum Schaltplan

Anschlüsse und GPIO's am Board.

3V3    VDD   3.3V Power supply output  
GND    GND   Power supply pin  
 4    GPIO4  GPIO4  
 5    GPIO5  GPIO5  
12    GPIO12 GPIO12/HSPIQ  
13    GPIO13 GPIO13/HSPID  
14    GPIO14 GPIO14/HSPICLK  
ADC    ADC   Detect analog input voltage(0~1V)  
RX    U0RXD  Flash programming UART RX;GPIO3  
TX    U0TXD  Flash programming UART TX;GPIO1;SPICS1  
E-FW  GPIO0  GPIO0/SPICS2/Serial programming enable pin  
RESET RESET  External reset signal(low active)  


Dev. Board

hier können die wesentlichen Funktionen (Relaisfunktion oder freier GPIO) konfiguriert werden. Man zählt die GPIO's von oben nach unten und wenn einer nicht benötigt wird, wird eine 0 angegeben.

{ "User Test",       // Sonoff Basic User Test
    GPIO_KEY1,        // GPIO00 Button
    0,
    GPIO_USER,        // GPIO02 Optional sensor
    GPIO_USER,        // GPIO03 Serial TXD and Optional sensor
    GPIO_USER,        // GPIO04 Optional sensor
    GPIO_USER,        // GPIO05 Optional sensor
    0, 0, 0, 0, 0, 0,
    GPIO_REL2,        // GPIO12 Relay 2 (0 = Off, 1 = On)
    GPIO_REL1,        // GPIO13 Relay 1 (0 = Off, 1 = On)
    GPIO_USER,        // GPIO14 Optional sensor
    0, 0
 }

Hier wurde am Modul "User Test" in der Datei "sonoff_template.h" abgeändert, um 2 Relais über GIPO12 und GPIO13 ansteuern zu können.

Gedacht ist es als Entwicklerboard, es ist aber auch genau so gut für den produktiven Einsatz geeignet, hat aber kein eingebautes Netzteil. Es ist zum flashen kein externes FTDI Modul notwendig, das hat es bereits an Board und es muss lediglich der USB Treiber für Windows installiert werden. Geflasht wird dann mit dem USB Kabel der Spannungsversorgung.

Die 4-pol. Stecker haben das Rastermaß 2.0 mm.

Anbindung FHEM

je nach Anwendungszweck wird entweder ein normaler Schalter oder wie bei DHT16 (?) beschrieben ein oder mehrere Sensoren angebunden. Beim Arends Sketch ist zu beachten, dass pro Sensorgruppe nur ein Sensor angeschlossen werden kann.

•DHT11 Temperature and Humidity -  DHT11 (1)  in group 1
•DHT21 Temperature and Humidity -  AM2301 (2) in group 1
•AM2301 Temperature and Humidity - AM2301 (2) in group 1
•DHT22 Temperature and Humidity -  DHT22 (3)  in group 1
•AM2302 Temperature and Humidity - DHT22 (3)  in group 1
•AM2321 Temperature and Humidity - DHT22 (3)  in group 1
•DS18B20 Temperature           - DS18x20 (4)  in group 2
Enable option  USE_DS18x20  in  user_config.h  for multiple sensors using OneWire library
•DS18S20 Temperature          -  DS18x20 (4)  in group 2
Enable option  USE_DS18x20  in  user_config.h  using OneWire library
•External switch               -  Switch (9) 
Use  SwitchMode  to tune it's behaviour
•HC-SR501 PIR Motion Detection -  Switch (9) 
Use  SwitchMode  to tune it's behaviour

Beispiel: 2 DHT22 funktionieren nicht, aber ein DHT22 und ein DS18b20 schon. Wer mehrere Sensoren benötigt, muss auf ESPEasy ausweichen.


  1. Foren-Board: Sonstiges