Sonoff: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Anpassungen für Tasmota)
Zeile 330: Zeile 330:


'''Links zu Theo Arend Github'''
'''Links zu Theo Arend Github'''
[https://github.com/arendst/Sonoff-MQTT-OTA-Arduino Download MQTT Sketch]


[https://github.com/arendst/Sonoff-MQTT-OTA-Arduino Arend GitHub]
[https://github.com/arendst/Sonoff-MQTT-OTA-Arduino Arend GitHub]
Zeile 337: Zeile 335:
[https://github.com/arendst/Sonoff-MQTT-OTA-Arduino/wiki Wiki]
[https://github.com/arendst/Sonoff-MQTT-OTA-Arduino/wiki Wiki]


[https://github.com/arendst/Sonoff-Tasmota.git Donwload Tasmota]


 
[https://github.com/arendst/Sonoff-Tasmota Arends Tasmota Github]


'''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:  
'''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:  
Zeile 403: Zeile 402:
In neueren Versionen (ab 3.2.8) wurde auch das Ausgabeformat von LEGACY auf JSON geändert. Gegebenenfalls ist auch hier auf LEGACY zu ändern, da alle Beispiele nur mit "LEGACY" funktionieren.
In neueren Versionen (ab 3.2.8) wurde auch das Ausgabeformat von LEGACY auf JSON geändert. Gegebenenfalls ist auch hier auf LEGACY zu ändern, da alle Beispiele nur mit "LEGACY" funktionieren.


'''Wichtig:''' Bei Verwendung des '''sonoff_POW''' muss dies ebenfalls in der user_config.h eingestellt werden, also das "SONOFF" sperren und das "'''SONOFF_POW'''" aktivieren (// setzen/entfernen). Wir dies nicht durchgeführt, werden auch keine Leistungsdaten via MQTT übertragen!!!
'''Wichtig:''' Bei Verwendung des '''sonoff_POW''' muss dies ebenfalls in der user_config.h eingestellt werden, also das "SONOFF" sperren und das "'''SONOFF_POW'''" aktivieren (// setzen/entfernen). Wir dies nicht durchgeführt, werden auch keine Leistungsdaten via MQTT übertragen!!! (gilt nicht für Tasmota).
Ebenso muss in (%userprofile%\Documents\Arduino\libraries\pubsubclient\src\PubSubClient.h) die Max Packet Size auf 400 erhöht werden!
Ebenso muss in (%userprofile%\Documents\Arduino\libraries\pubsubclient\src\PubSubClient.h) die Max Packet Size auf 400 erhöht werden!


Zeile 507: Zeile 506:
  attr Sonoff_Switch webCmd ON:OFF
  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!
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!
Das Beispiel gilt für das '''LEGACY Messageformat'''.
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/POWER/set
attr Sonoff_Switch room MQTT
attr Sonoff_Switch subscribeReading_Licht stat/Sonoff_Switch/POWER
attr Sonoff_Switch subscribeReading_Sensor tele/Sonoff_Switch/SENSOR
attr Sonoff_Switch subscribeReading_Status stat/Sonoff_Switch/STATUS
attr Sonoff_Switch webCmd ON:OFF
und hier das gleiche für '''Tasmota''', es sind nur geringfügige Modifikationen notwendig.
<div style="clear:both;"></div>


==Sonoff POW einrichten==
==Sonoff POW einrichten==
Zeile 665: Zeile 678:
  attr Sonoff_Pow webCmd ON:OFF
  attr Sonoff_Pow webCmd ON:OFF
  attr Sonoff_Pow stateFormat {sprintf("akutelle Leistung: %.1f W Tagesverbrauch: %.2f Kw/h", ReadingsVal($name,"CURRENT_POWER",undef), ReadingsVal($name,"TODAY_ENERGY",undef))}
  attr Sonoff_Pow stateFormat {sprintf("akutelle Leistung: %.1f W Tagesverbrauch: %.2f Kw/h", ReadingsVal($name,"CURRENT_POWER",undef), ReadingsVal($name,"TODAY_ENERGY",undef))}
Zusätzlich kann hier noch das Relais mit "on" und "off" ein- ausgeschaltet werden. Ab Version 2.0.15 wurden hier die ReadingsNamen auf TODAY_ENERGY und PERIOD_ENERGY (anstatt _POWER) geändert. Dieses Beispiel gilt für das LEGACY Messageformat.
Zusätzlich kann hier noch das Relais mit "on" und "off" ein- ausgeschaltet werden. Ab Version 2.0.15 wurden hier die ReadingsNamen auf TODAY_ENERGY und PERIOD_ENERGY (anstatt _POWER) geändert.  
Dieses Beispiel gilt für das '''LEGACY Messageformat'''.




Zeile 677: Zeile 691:
  attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/LIGHT
  attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/LIGHT
  attr Sonoff_Pow webCmd ON:OFF
  attr Sonoff_Pow webCmd ON:OFF
und das ist ein Beispiel für die Konfiguration für die Tasmota Software und Einsatz des j2r Tools.
und das ist ein Beispiel für die Konfiguration für die '''Tasmota Software mit JSON''' und Einsatz des j2r Tools.


===Sonoff POW Netz-Anschluß===
===Sonoff POW Netz-Anschluß===
Zeile 713: Zeile 727:


Die readingsGroup sind etwas komplex zu lesen, aber nach etwas Einarbeitung klappt das schon. Die in diesem Beispiel verwendeten Readingsnamen beziehen sich auf die Beispielkonfigurationen hier im Wiki.
Die readingsGroup sind etwas komplex zu lesen, aber nach etwas Einarbeitung klappt das schon. Die in diesem Beispiel verwendeten Readingsnamen beziehen sich auf die Beispielkonfigurationen hier im Wiki.
<div style="clear:both;"></div>
Das Beispiel ist für das LEGACY Messageformat ausgelegt.
 
 


<div style="clear:both;"></div>
<div style="clear:both;"></div>
Zeile 738: Zeile 754:
  attr SonoffPows valueStyle { if($READING eq "CURRENT_POWER" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $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 "CURRENT_POWER_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' } }
  attr SonoffPows valueStyle { if($READING eq "CURRENT_POWER" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $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 "CURRENT_POWER_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' } }
hier die erweiterte ReadingsGroup mit dem Schalter. Bei Bedarf sind hier die Devicenamen anzupassen wenn andere Namen verwendet werden (Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3).
hier die erweiterte ReadingsGroup mit dem Schalter. Bei Bedarf sind hier die Devicenamen anzupassen wenn andere Namen verwendet werden (Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3).
Das Beispiel gilt für das '''LEGACY Messageformat'''.
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.
<div style="clear:both;"></div>
<div style="clear:both;"></div>


Zeile 794: Zeile 824:


Hier ein Beispiel wie in FHEM der Slampher eingebunden werden kann. In diesem Beispiel wird davon ausgegangen, das das Modul "sonoffsl" unter Konfiguration am WEBIF (Configure MQTT bei Topic) so unbenannt wurde. Wer einen anderen Namen haben möchte, muss dies dann auch in FHEM entsprechend anpassen.
Hier ein Beispiel wie in FHEM der Slampher eingebunden werden kann. In diesem Beispiel wird davon ausgegangen, das das Modul "sonoffsl" unter Konfiguration am WEBIF (Configure MQTT bei Topic) so unbenannt wurde. Wer einen anderen Namen haben möchte, muss dies dann auch in FHEM entsprechend anpassen.
Das Beispiel gilt für das '''LEGACY Messageformat'''.


<div style="clear:both;"></div>
<div style="clear:both;"></div>
Zeile 862: Zeile 893:
  attr Sonoff_Switch webCmd ON:OFF
  attr Sonoff_Switch webCmd ON:OFF
Der Schalter nochmals seperat dargestellt, je nach Geschmack.
Der Schalter nochmals seperat dargestellt, je nach Geschmack.
Das Beispiel gilt für das '''LEGACY Messageformat'''.


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


==Sonoff CH4 4-Kanal Schaltmodul==
==Sonoff 4CH 4-Kanal Schaltmodul==
[[Datei:sonoff_ch4_1.jpg|thumb|left|alt=Sonoff CH4]]
[[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! }}
{{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 CH4 ist mit seinen 4 Kanälen ein sehr preiswertes Modul im Gehäuse und für Hutschinenmontage. 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.
Der Sonoff 4CH ist mit seinen 4 Kanälen ein sehr preiswertes Modul im Gehäuse und für Hutschinenmontage. 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.


Das Modul ist etwas größer als die anderen Sonoff Produkte und besitzt mit 14,5 x 9 cm schon beachtliche Einbau Maße.
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>
<div style="clear:both;"></div>
[[Datei:sonoff_ch4_2.jpg|thumb|left|alt=Sonoff CH4 FDTI]]
[[Datei:sonoff_ch4_2.jpg|thumb|left|alt=Sonoff 4CH FDTI]]
Als weitere Besonderheit sei hier erwähnt, das 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 Anschluß ist hier schon eingelötet.
Als weitere Besonderheit sei hier erwähnt, das 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 Anschluß ist hier schon eingelötet.


In den Flashmodus gelangt man durch drücken der '''Taste FW/IO0''' während des einstecken des USB Anschlusses.
In den Flashmodus gelangt man durch drücken der '''Taste FW/IO0''' während des einstecken des USB Anschlusses.
<div style="clear:both;"></div>
<div style="clear:both;"></div>
[[Datei:sonoff_ch4_3.jpg|thumb|left|alt=Sonoff CH4 Arends]]
[[Datei:sonoff_ch4_3.jpg|thumb|left|alt=Sonoff 4CH Arends]]
Hier die Ansicht des Webinterface des Arends Sketches!
Hier die Ansicht des Webinterface des Arends Sketches!
Bei der Software sei erwähnt, das 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).  
Bei der Software sei erwähnt, das 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).  
Zeile 970: Zeile 1.002:
  attr Sonoff_Temp subscribeReading_humidity tele/sonoff/HUMIDITY
  attr Sonoff_Temp subscribeReading_humidity tele/sonoff/HUMIDITY
  attr Sonoff_Temp subscribeReading_temperature tele/sonoff/TEMPERATURE
  attr Sonoff_Temp subscribeReading_temperature tele/sonoff/TEMPERATURE
Als Beispiel 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.
Das Beispiel gilt für das '''LEGACY Messageformat'''.
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.


<div style="clear:both;"></div>
<div style="clear:both;"></div>
Zeile 1.031: Zeile 1.064:
  attr ThermostatPellets webCmd state
  attr ThermostatPellets webCmd state
Die Sollwertvorgabe für das Thermostat durch einen Dummy, damit können die gewünschten Temperaturen eingestellt werden.
Die Sollwertvorgabe für das Thermostat durch einen Dummy, damit können die gewünschten Temperaturen eingestellt werden.
Das Beispiel gilt für das '''LEGACY Messageformat'''.


  ### sofort ausführen wenn neuer Sollwert eingestellt wird ###
  ### sofort ausführen wenn neuer Sollwert eingestellt wird ###
Zeile 1.099: Zeile 1.133:
  attr Sonoff_pir subscribeReading_state cmnd/sonoff_pir/1/POWER/set
  attr Sonoff_pir subscribeReading_state cmnd/sonoff_pir/1/POWER/set
  attr Sonoff_pir webCmd :
  attr Sonoff_pir webCmd :
Das Beispiel gilt für das '''LEGACY Messageformat'''.


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 3.1.6. Die Topic sollte auf den Namen "sonoff_pir" eingestellt werden. Bei anderen Namen ist dies entsprechend in FHEM anzupassen.  
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 3.1.6. Die Topic sollte auf den Namen "sonoff_pir" eingestellt werden. Bei anderen Namen ist dies entsprechend in FHEM anzupassen.  
Zeile 1.117: Zeile 1.152:
  attr Motion_pir subscribeReading_Alarm cmnd/Alarm_SO2/POWER
  attr Motion_pir subscribeReading_Alarm cmnd/Alarm_SO2/POWER
Die Motion_pir dient nun zur eigentlichen Einschaltung des Lichtes und sendet das Kommando '''cmnd/Alarm_SO2/POWER''' an den entkopellten GPIO 14 des Switch.
Die Motion_pir dient nun zur eigentlichen Einschaltung des Lichtes und sendet das Kommando '''cmnd/Alarm_SO2/POWER''' an den entkopellten GPIO 14 des Switch.
Das Beispiel gilt für das '''LEGACY Messageformat'''.





Version vom 14. Februar 2017, 15:17 Uhr

sonoff, dieser Artikel beschreibt die Ankopplung der kostengünstigen sonoff Module an FHEM mit ESPEasy oder MQTT.

X mark.svgAchtung: Arbeiten mit Netzspannung kann lebensgefährlich sein und darf nur von autorisiertem Fachpersonal durchgeführt werden!


Seit einiger Zeit werden von der Fa. Itead kostengünstige "sonoff" Produkte angeboten die glücklicherweise den ESP8266 Chip On Board haben und somit die ideale Grundlage für ESPEasy und für FHEM darstellen.


Nützliche Links zum Hersteller:

User Manual von Itead

Sonoff Schaltplan


Hardware

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, wird hier am Beispiel eines russischen Anwenders gezeigt, der hat beim Flashen die Netzspannung am Modul gelassen und somit über die Verbindung mit dem Netzteil des Laptop lebensgefährliche Spannung auf die FTDI Schnittstelle gebracht. Das Modul ist dabei abgeraucht!

Modelle

Produktübersichtsliste sonoff

Produkt Name Beschreibung Spannungsversorgung Imax Pmax Frequenz Schaltplan Link
Sonoff Wireless control switch 90~250V AC 10A 2200W 2.4Ghz Plan Link
Sonoff RF 433 RF remote 90~250V AC 10A 2200W 2.4Ghz Plan Link
Sonoff SV Low voltage Input 5~24V DC 10A 240W DC 2.4Ghz Plan Link
Sonoff TH10/TH16 Monitor and set Temp.&Hum. 90~250V AC 10A/16A 2200W(10A)/3500W(16A) 2.4Ghz Plan Link
Sonoff Dual Remote control 2 devices 90~250V AC 16A 3500W 2.4Ghz Plan Link
Sonoff Pow Report power &power usage 90~250V AC 16A 3500W 2.4Ghz Plan Link
Sonoff LED WiFi Control Dimming LED 180~265V AC 0.3-0.6A 42W 2.4Ghz kein Link
Sonoff Touch WiFi wall touch switch 90~250V AC 2A 400W 2.4Ghz kein Link
Slampher Wireless control light holder 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 fan 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
 

Eine Übersichtliste der verschiedenen Produkte mit technischen Kurzangaben.


Model: IM151116002: Erstes Modell

Sonoff WiFi Wireless Smart Switch for MQTT COAP Smart Home

sonoff Switch

Das sonoff Modul ist in einem zweckmäßigen und gefälligem Gehäuse verbaut!

Platine

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.

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, das an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!

Model: IM160712005: TH 10A/16A

Sonoff TH 10A/16A WiFi Smart Switch

TH10 / TH16 weitere GPIO zugänglich machen

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. 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, das an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!

Model: IM160811001: Sonoff Dual

Sonoff Dual WiFi Wireless Smart Swtich

Model: IM160810001: Sonoff Pow

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 hier unten im Wiki beschrieben.

Model: weitere Modelle

Sonoff Weitere Modelle finden sich auf der Homepage des Hersstellers

Vorbereitungen zum Flashen

serielle Schnittstelle

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.

Signale der Schnittstelle

von oben nach unten auf der Steckerleiste des sonoff U4 (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

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 (OTA) geflasht werden und die Stiftleiste ist dann nicht mehr erforderlich. Aufgrund der geringen Kosten fällt dies jedoch nicht ins Gewicht.
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.

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

Software

MQTT und TASMOTA

Der Autor Arends hat die Version Sonoff-MQTT-OTA-Arduino nun eingestellt und die Version 3.2.13 dürfte wohl die letzte dieser Generation gewesen sein. Mit der Einstellung dieser Version wurde zwar der Nachfolger TASMOTA erschaffen, aber leider nun auf das Messageformat LEGACY gänzlich verzichtet was bei der Auswertung der Messdaten in Fhem doch einige Probleme mit sich bringt, da der verwendete JSON String nun zusätzlich gefiltert werden muss.

Es gibt aber bereits drei Lösungswege um dieses Problem zu beheben!

1. in diesem Thread gibt es eine gepatchte Version von Tasmota mit LEGACY Ausgabe. Damit verhält sich Tasmota so wie früher die MQTT Version mit LEGACY und es sind keine weiteren Einstellungen notwendig. LEGACY wurde einfach wieder hinzugefügt.
2. in diesem Thread wurde ein JSON to Reading Modul vorgestellt, dass mit Hilfe eines "notify" den JSON String analysiert und alle darin enthaltenen Daten in Readings kopiert. Die Readings werden dabei automatisch angelegt.
3. in diesem Thread gibt es eine gepatchte Version des Moduls MQTT_DEVICE, in der der JSON String analysiert und alle darin enthaltenen Daten in Readings kopiert werden. Die Readings werden dabei automatisch angelegt.


Link: Tasmota

Link: Sonoff-MQTT-OTA-Arduino

Alle hier im Wiki verwendeten Beispiele und deren Beschreibung gilt für die MQTT Version (alte Version). Da in Tasmota fast alles im WEBIF konfiguriert werden kann, entfallen daher sinngemäß einige hier im Wiki erklärten Definitionen, speziell in der "user_config.h". Trotz diesem Komfort müssen die Einstellungen aber nun im WEBIF vorgenommen werden, die wohl wichtigste ist die Auswahl der verwendeten Hardware (Sonoff POW etc.).

ESPEasy flashen

sonoff mit angestecktem FDTI Adapter
Info green.pngHier geht es ausschließlich um die Software ESPEasy an den sonoff Modulen!

Die Spannungsversorgung des Sonoff Moduls wird hier vom FTDI Konverter mit 3.3V über die Verbindungskabel zum Pfostenstecker durchgeführt.

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

Zum compilieren wird in der Arduino Umgebung auch die ArduinoJson Library 5.6.4+ benötigt. Eine genaue Anleitung kann hier nachgelesen werden. Es sollte stest die aktuelle Version der Arduino Umgebung verwendet werden, bzw. die Librarys auf Letztstand gehalten werden.

mit Arduino compilieren

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.

Unbedingt die neueste Arduino Json Library benutzen (siehe oben)! Es gibt zwar keine Compilerfehler, aber es kommt anschließend zu Fehlfunktionen in der ESP Bridge!

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

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

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.

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, das 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.

ESPEasy in FHEM einrichten

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 zB. auch noch Temperatursensoren an das Modul anzuschließen und ebenfalls in FHEM darzustellen.

MQTT Server einrichten

Info green.pngHier geht es ausschließlich um den Sketch von Arends und MQTT an den sonoff Modulen!

Es bleibt jedem Anwender die freie Wahl ob die Kommunikation über die ESPEasy-Bridge oder MQTT erfolgen soll. MQTT ist bei der Einrichtung etwas komplexer, da hier auch auf dem Server der Broker installiert werden muss.

Im wesentlichen beschränkt sich die Installation eines MQTT Servers aber auf wenige Arbeitsschritte und ist wie folgt beschrieben durchzuführen. Wer schon einen mosquitto auf dem Server installiert hat, kann diesen Schritt überspringen.

Dieses Kapitel ist insofern interessant, da mit dem Sketch von Theo Arends auch die Einbindung der neuen sonoff Pow Module bereits möglich ist.


# aus dem mosquitto Repo installieren:
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
# oder für jessie
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
sudo apt-get update
# mosquitto installieren, sowie client Befehl mosquito_sub (gehört nicht zum Server, wird aber weiter unten benötigt)
sudo apt-get install mosquitto mosquitto-clients

# MQTT Server Test
sudo service mosquitto status
# Start / Stop des Servers
sudo service mosquitto stop
sudo service mosquitto start

# Perl Version ausgeben
perl -v
# Perl MQTT Module nachinstallieren (läuft ein paar Minuten)
sudo cpan install Net::MQTT:Simple
sudo cpan install Net::MQTT:Constants


Software Arends Sketch

Arends Menü

Ebenso bietet sich die Möglichkeit eine andere alternative Software auf den unterschiedlichen Sonoff Modellen aufzuspielen. Speziell für diese Module zugeschnittene Software stammt vom Autor Theo Arends. Alle hier gezeigten Bildschirmfotos und Beispiele beziehen sich auf Basis der Version 2.0.11 (Stand 11.11.2016).

Wichtig: erst ab Version 2.0.9 sind die Berechnungsfehler und die Referenzfrequenzen für die Umrechnung der Leistungsdaten gefixt worden! Es wird daher angeraten immer die aktuellste Version zu verwenden.


Links zu Theo Arend Github

Arend GitHub

Wiki

Donwload Tasmota

Arends Tasmota Github

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 7 verschiedene Modi sind möglich, mehr dazu in Arends Wiki.

Link zum Wiki Arends, Button

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 2.3.0 installieren. Link zum Board.

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 muss 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
#define MESSAGE_FORMAT         JSON         // [MessageFormat] MQTT Message Format (LEGACY or JSON)
#define MQTT_STATUS_OFF        "OFF"        // Command or Status result when turned off (needs to be a string like "0" or "Off")
#define MQTT_STATUS_ON         "ON"         // Command or Status result when turned on (needs to be a string like "1" or "On")
#define MQTT_CMND_TOGGLE       "TOGGLE"     // Command to send when toggling (needs to be a string like "2" or "Toggle")

In neueren Versionen (ab 3.2.8) wurde auch das Ausgabeformat von LEGACY auf JSON geändert. Gegebenenfalls ist auch hier auf LEGACY zu ändern, da alle Beispiele nur mit "LEGACY" funktionieren.

Wichtig: Bei Verwendung des sonoff_POW muss dies ebenfalls in der user_config.h eingestellt werden, also das "SONOFF" sperren und das "SONOFF_POW" aktivieren (// setzen/entfernen). Wir dies nicht durchgeführt, werden auch keine Leistungsdaten via MQTT übertragen!!! (gilt nicht für Tasmota). Ebenso muss in (%userprofile%\Documents\Arduino\libraries\pubsubclient\src\PubSubClient.h) die Max Packet Size auf 400 erhöht werden!

 #define MQTT_MAX_PACKET_SIZE 400
 #define MQTT_KEEPALIVE 120

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

// Enable only one out of three MODULE defines below
//#define MODULE                 SONOFF            // Sonoff, Sonoff SV, Sonoff Dual, Sonoff TH 10A/16A, S20 Smart Socket, 4 Channel
#define MODULE                 SONOFF_POW        // Sonoff Pow


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

MQTT testen

Arends Menü


Nach erfolgtem Flash des Modules 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 Modules 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 CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r1, m0, '/sonoff/36/temperature', ... (5 bytes))
/sonoff/36/temperature 14.06
Received PUBLISH (d0, q0, r1, m0, '/sonoff/35/Count', ... (3 bytes))
/sonoff/35/Count 0.0
Received PUBLISH (d0, q0, r1, m0, '/sonoff/35/Total', ... (3 bytes))
/sonoff/35/Total 0.0
Received PUBLISH (d0, q0, r1, m0, '/sonoff/35/Time', ... (1 bytes))
/sonoff/35/Time 0
Received PUBLISH (d0, q0, r1, m0, '/sonoff/temperature', ... (5 bytes))
/sonoff/temperature 14.00
Received PUBLISH (d0, q0, r1, m0, '/sonoff/Count', ... (3 bytes))
/sonoff/Count 0.0
Received PUBLISH (d0, q0, r1, m0, '/sonoff/Total', ... (3 bytes))
/sonoff/Total 0.0
Received PUBLISH (d0, q0, r1, m0, '/sonoff/Time', ... (1 bytes))
/sonoff/Time 0
Received PUBLISH (d0, q0, r0, m0, 'stat/sonoff/1/POWER', ... (2 bytes))
stat/sonoff/1/POWER ON
Received PUBLISH (d0, q0, r0, m0, 'stat/sonoff/1/POWER', ... (3 bytes))
stat/sonoff/1/POWER OFF

Interessant sind für uns nun diese Einträge "stat/sonoff/1/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.

Als Besonderheit benutzt der Autor zum Senden und Empfangen unterschiedliche Syntax und unterscheidet dies durch vorangestellte Prefixe vor der eigentlichen Topic.

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

Bitte dies unbedingt in der FHEM Konfiguration dann beachten!

MQTT in FHEM einrichten

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.

Link zum Forum: MQTT FHEM Einrichtung

### 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 eventMap ON:on OFF:off
attr Sonoff_Switch icon hue_filled_br30
attr Sonoff_Switch publishSet ON OFF cmnd/sonoff/1/POWER/set
attr Sonoff_Switch room MQTT
attr Sonoff_Switch stateFormat Licht
attr Sonoff_Switch subscribeReading_Licht stat/sonoff/POWER
# oder mit tele, je nachdem was in der user_config.h eingestellt wurde!!!
#attr Sonoff_Switch subscribeReading_Licht tele/sonoff/POWER 
attr Sonoff_Switch subscribeReading_state cmnd/sonoff/1/POWER/set
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! Das Beispiel gilt für das LEGACY Messageformat.

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/POWER/set
attr Sonoff_Switch room MQTT
attr Sonoff_Switch subscribeReading_Licht stat/Sonoff_Switch/POWER
attr Sonoff_Switch subscribeReading_Sensor tele/Sonoff_Switch/SENSOR
attr Sonoff_Switch subscribeReading_Status stat/Sonoff_Switch/STATUS
attr Sonoff_Switch webCmd ON:OFF

und hier das gleiche für Tasmota, es sind nur geringfügige Modifikationen notwendig.

Sonoff POW einrichten

Sonoff POW
Info green.pngHier geht es ausschließlich um das Modul Sonoff POW!

Das Modul kommt in gewohnter Itead Qualität und 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.

Ebenso möchte kaum jemand an eine nicht dokumentierte chinesische Cloud die Steuerbefehle seiner Schalter senden.

Sonoff POW

Bitte auf keinen Fall das Modul während der Arbeiten an die Netzspannung anschießen. Zum Flashen genügt (und nur diese) die Versorgungspannung 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!).



Sonoff POW 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. Getestet wurde hier mit der Version 2.06, 2.07 und 2.019a von Arends.

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 ( #define FEATURE_POWER_LIMIT in der sonoff.ino). Wenn dies gewünscht ist, dann vor dem compilieren die beiden // entfernen. 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 "tele/sonoff/POWER_LOW ON" bzw. "tele/sonoff/POWER_LOW OFF".

Bevor der Sketch compiliert wird, müssen neben den IP-Einstellungen noch in der user_config.h auch andere Einstellungen vorgenommen werden.

#define MODULE                 SONOFF_POW       // Hardware module type (SONOFF, SONOFF_POW or ELECTRO_DRAGON)
#define PROJECT                "sonoffpow"     // PROJECT is used as the default topic delimiter and OTA file name                                            // As an IDE restriction it needs to be the same as the main .ino file

Der Typ des Modules muss 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.


#elif MODULE == SONOFF_POW                  // programming header 1:3.3V 2:rx 3:tx 4:gnd
 #define APP_NAME             "Sonoff Pow module"
 #define USE_POWERMONITOR                  // Enable Power Monitoring
 #define USE_POWERCALIBRATION              // Enable setting Calibration parameters by user commands

Bei Einsatz des POW Modules kann die externe Kalibrierung aktiviert werden.


Definition aus der power.ino (2.0.9) für die korrekte Umrechnung der gelieferten Frequenzen für die Leistungsdaten.

#define HLW_PREF            10000    // 1000.0W
#define HLW_UREF             2200    // 220.0V
#define HLW_IREF             4545    // 4.545A
#define HLW_PREF_PULSE       4975    // 4975us = 201Hz = 1000W
#define HLW_UREF_PULSE       1666    // 1666us = 600Hz = 220V
#define HLW_IREF_PULSE       1666    // 1666us = 600Hz = 4.545A
                                           
Sonoff POW Attribute

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

aktuell gelieferte Readings (Mqtt Strings) vom Sketch nach unten dargestellter Definition in FHEM.

tele/sonoffpow/TODAY_ENERGY    
tele/sonoffpow/PERIOD_ENERGY   
tele/sonoffpow/POWER_FACTOR   
tele/sonoffpow/CURRENT_POWER  
tele/sonoffpow/VOLTAGE         
tele/sonoffpow/CURRENT        

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

Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff/RSSI', ... (2 bytes))
tele/sonoff/RSSI 82
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff/TEMPERATURE', ... (3 bytes))
tele/sonoff/TEMPERATURE 1.9
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff/HUMIDITY', ... (4 bytes))
tele/sonoff/HUMIDITY 97.9
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff/POWER', ... (3 bytes))
tele/sonoff/POWER OFF
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff/TIME', ... (19 bytes))
tele/sonoff/TIME 2016-11-12T10:36:13
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/UPTIME', ... (1 bytes))
tele/sonoffpow/UPTIME 1
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/RSSI', ... (2 bytes))
tele/sonoffpow/RSSI 34
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/TODAY_ENERGY', ... (5 bytes))
tele/sonoffpow/TODAY_ENERGY 0.083
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/PERIOD_ENERGY', ... (1 bytes))
tele/sonoffpow/PERIOD_ENERGY 8
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/CURRENT_POWER', ... (2 bytes))
tele/sonoffpow/CURRENT_POWER 97
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/POWER_FACTOR', ... (4 bytes))
tele/sonoffpow/POWER_FACTOR 1.00
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/VOLTAGE', ... (3 bytes))
tele/sonoffpow/VOLTAGE 225
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/CURRENT', ... (5 bytes))
tele/sonoffpow/CURRENT 0.426
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/POWER', ... (2 bytes))
tele/sonoffpow/POWER ON
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/TIME', ... (19 bytes))
tele/sonoffpow/TIME 2016-11-12T10:36:28
Sending PINGREQ
Received PINGRESP


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

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

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


Sonoff POW Kalibrieren

Info green.pngHier wird beschrieben, wie der Sonoff POW kalibriert werden kann.

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/1/HLWUCAL/set -m "2100"     default = 1950
mosquitto_pub -q 2 -t cmnd/sonoffpow/1/HLWICAL/set -m "2450"     default = 3500
mosquitto_pub -q 2 -t cmnd/sonoffpow/1/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/1/status/set -m "8"

Befehl für die Statusabfrage

cmnd/sonoffpow/1/status/set 8
Received PUBLISH (d0, q0, r0, m0, 'stat/sonoffpow/1/STATUS', ... (103 bytes))
stat/sonoffpow/1/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.

Sonoff POW FHEM Anbindung

Ein Beispiel einer einfachen Anbindung via MQTT an FHEM. MQTT 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 eventMap ON:on OFF:off
attr Sonoff_Pow icon measure_power
attr Sonoff_Pow publishSet ON OFF cmnd/sonoffpow/1/POWER/set
attr Sonoff_Pow room MQTT
attr Sonoff_Pow subscribeReading_Power tele/sonoffpow/POWER
attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/1/POWER/set
attr Sonoff_Pow subscribeReading_TODAY_ENERGY tele/sonoffpow/TODAY_ENERGY
attr Sonoff_Pow subscribeReading_PERIOD_ENERGY tele/sonoffpow/PERIOD_ENERGY
attr Sonoff_Pow subscribeReading_CURRENT_POWER tele/sonoffpow/CURRENT_POWER
attr Sonoff_Pow subscribeReading_VOLTAGE tele/sonoffpow/VOLTAGE 
attr Sonoff_Pow subscribeReading_CURRENT tele/sonoffpow/CURRENT
attr Sonoff_Pow subscribeReading_AKTUELL stat/sonoffpow/1/STATUS
attr Sonoff_Pow webCmd ON:OFF
attr Sonoff_Pow stateFormat {sprintf("akutelle Leistung: %.1f W Tagesverbrauch: %.2f Kw/h", ReadingsVal($name,"CURRENT_POWER",undef), ReadingsVal($name,"TODAY_ENERGY",undef))}

Zusätzlich kann hier noch das Relais mit "on" und "off" ein- ausgeschaltet werden. Ab Version 2.0.15 wurden hier die ReadingsNamen auf TODAY_ENERGY und PERIOD_ENERGY (anstatt _POWER) geändert. Dieses Beispiel gilt für das LEGACY Messageformat.


define Sonoff_Pow MQTT_DEVICE
attr Sonoff_Pow IODev myBroker
attr Sonoff_Pow icon measure_power
attr Sonoff_Pow publishSet ON OFF cmnd/sonoffpow/LIGHT/
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_LIGHT stat/sonoffpow/LIGHT
attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/LIGHT
attr Sonoff_Pow webCmd ON:OFF

und das ist ein Beispiel für die Konfiguration für die Tasmota Software mit JSON und Einsatz des j2r Tools.

Sonoff POW Netz-Anschluß

Sonoff POW Netzanschluß

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 abisolieren der flexiblen Drähte sollte diese verlötet oder 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, Kurzschlußgefahr! 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!

Sonoff POW Design

ReadingsGroup normal

Sonoff POW Design

Viele Benutzer wollen schönere und funktionelle Ausgaben am Bildschirm sehen. Die Möglichkeiten nach oben sind hier sehr vielfältig. Anhand von zwei einfachen aber mächtigen Funktionen hier ein kleines Beispiel wie hier im Bild dargestellt.

Was das Design betrifft, sind hier mehrere Möglichkeiten gegeben und nach oben ist für findige Anwender alles offen.

Zunächst wird mit dem Hilfsmodul "average" eine Art Statistik (Durchschnittsberechnung, Min.,Max., etc.) hinzugefügt. Das beschränkt sich auf eine einzige Zeile. Es würde sich auch statistic dazu eignen.

define Sonoff_Pow_CURRENT_POWER average Sonoff_Pow:CURRENT_POWER.*

Die "average" Funktion wird in das Device "Sonof_Pow" auf das Reading "CURRENT_POWER" hinzugefügt.

Der zweite Schritt wird eine readingsGroup mit den gewünschten und gefilterten Ausgabedaten. Durch die verschiedenen IF Abfragen der unterschiedlichen VALUE wird bei über- oder unterschreiten eines Wertes eine bestimmte Farbe angewandt. Weitere Beispiele dazu siehe im Wiki unter readingsGroup


define SonoffPows readingsGroup <%measure_power>,<aktuell>,<Tag>,<Strom>,<Durchschnitt>,<max.P>,<Schaltzyklen>,< hr > .*(Sonoff_Pow|Sonoff_Pow2):CURRENT_POWER,TODAY_ENERGY,CURRENT,CURRENT_POWER_avg_day,CURRENT_POWER_max_day,PERIOD_ENERGY
attr SonoffPows mapping %ALIAS
attr SonoffPows nameStyle style="color:yellow"
attr SonoffPows room MQTT
attr SonoffPows valueFormat {'CURRENT_POWER' =>"%.0f W", 'TODAY_ENERGY' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'CURRENT_POWER_max_day' => "%.0f W",'CURRENT_POWER_avg_day' => "%.2f W",'PERIOD_ENERGY'=>"%.0f Zyklen"}
attr SonoffPows valueStyle { if($READING eq "CURRENT_POWER" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;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 "CURRENT_POWER_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' } }

Die readingsGroup sind etwas komplex zu lesen, aber nach etwas Einarbeitung klappt das schon. Die in diesem Beispiel verwendeten Readingsnamen beziehen sich auf die Beispielkonfigurationen hier im Wiki. Das Beispiel ist für das LEGACY Messageformat ausgelegt.


ReadingsGroup mit Schaltmöglichkeit

readingsGroup mit Schalter

Die vorher erwähnte 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):CURRENT_POWER,TODAY_ENERGY,YESTERDAY_ENERGY,CURRENT,CURRENT_POWER_avg_day,CURRENT_POWER_max_day,PERIOD_ENERGY,POWER_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 {'CURRENT_POWER' =>"%.0f W", 'TODAY_ENERGY' =>"%.2f Kw",'YESTERDAY_ENERGY' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'CURRENT_POWER_max_day' => "%.0f W",'CURRENT_POWER_avg_day' => "%.2f W",'CURRENT_POWER'=>"%.0f W",'POWER_FACTOR' => "%.2f "}
attr SonoffPows valueIcon {'LIGHT.ON' => 'rc_GREEN@green', 'LIGHT.OFF' => 'rc_RED@red'}
attr SonoffPows valueStyle { if($READING eq "CURRENT_POWER" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $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 "CURRENT_POWER_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' } }

hier die erweiterte ReadingsGroup mit dem Schalter. Bei Bedarf sind hier die Devicenamen anzupassen wenn andere Namen verwendet werden (Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3). Das Beispiel gilt für das LEGACY Messageformat.


define SonoffPows readingsGroup <%measure_power>,<aktuell>,<Tag>,<Gestern>,<Strom>,<Durchschnitt>,<max.P>,<Zyklus>,<Faktor>,<Status>,


.*(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.

POW mit FTUI anzeigen

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 Flashen

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 anderwärtig 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 dem Einstecken des USB Steckers auf Masse gelegt werden. Die beste Möglichkeit ist ein Stücken 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 nocheinmal 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.

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 bereist 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/1/POWER/set
attr Sonoff_SL room Bewegung,_Sonoff
attr Sonoff_SL stateFormat Licht
attr Sonoff_SL subscribeReading_Licht tele/sonoffsl/POWER
attr Sonoff_SL subscribeReading_state cmnd/sonoffsl/1/POWER/set
attr Sonoff_SL webCmd ON:OFF

Hier ein Beispiel wie in FHEM der Slampher eingebunden werden kann. In diesem Beispiel wird davon ausgegangen, das das Modul "sonoffsl" unter Konfiguration am WEBIF (Configure MQTT bei Topic) so unbenannt wurde. Wer einen anderen Namen haben möchte, muss dies dann auch in FHEM entsprechend anpassen. Das Beispiel gilt für das LEGACY Messageformat.

Sonoff Th10/16 FHEM

Sonoff TH10
Info green.pngTemperatur Modul TH10 / 16!

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


#define DSB_PIN              14           // GPIO 14 = DS18x20 (Sonoff_TH10A(16A), Sonoff SV)
#define DSB_RESOLUTION       2            // Maximum number of decimals (0 - 3) showing Temperature
// *** Option 1 - Single DS18B20 - Select either Option 1 OR Option 2
#define SEND_TELEMETRY_DS18B20            // Enable sending single temperature telemetry
// *** Option 2 - Multiple DS18B20 and/or DS18S20 (needs OneWire library!)
//  #define SEND_TELEMETRY_DS18x20            // Enable sending multi temperature telemetry 

In der user_config.h (Arends Sketch) muss hier die Option 1 aktiviert werden (entfernen der vorangestellten //) damit die Telemetriedaten auch gesendet werden. Es empfiehlt sich mindestens die Version >= V 2.0.16, weil hier die Sensoren erweitert wurden.


#define DHT_PIN              14           // GPIO 14 = AM2301 (Sonoff_TH10A(16A), Sonoff SV)
#define DHT_TYPE             AM2301       // DHT module type (DHT11, DHT21, DHT22, AM2301, AM2302 or AM2321)
#define DHT_RESOLUTION       1            // Maximum number of decimals (0 - 3) showing Temperature
#define SEND_TELEMETRY_DHT                // Enable sending temperature and humidity telemetry

Beispiel für den Sensor DHT22, Temperatur und Luftfeuchte. Es dürfen aber nicht beide Sensoren (DS18B20 + DHT22) gleichzeitig aktiviert werden, da ja beide an GPIO14 angehängt werden und es ansonsten zu Fehlfunktionen kommen würde.

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/1/POWER/set
attr Sonoff_Temp room _Sonoff
attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"TEMPERATURE",0))}
attr Sonoff_Temp subscribeReading_TEMPERATURE tele/sonoffth/DS18B20/TEMPERATURE
attr Sonoff_Temp subscribeReading_humidity tele/sonoffth/HUMIDITY
attr Sonoff_Temp subscribeReading_state cmnd/sonoffth/1/POWER/set

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/1/POWER/set
attr Sonoff_Switch room _Sonoff
attr Sonoff_Switch stateFormat Licht
attr Sonoff_Switch subscribeReading_Licht tele/sonoffth/POWER
attr Sonoff_Switch subscribeReading_state cmnd/sonoffth/1/POWER/set
attr Sonoff_Switch webCmd ON:OFF

Der Schalter nochmals seperat dargestellt, je nach Geschmack. Das Beispiel gilt für das LEGACY Messageformat.

Sonoff 4CH 4-Kanal Schaltmodul

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 Hutschinenmontage. 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.

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, das 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 Anschluß 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, das 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ähigem 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.

Erweiterungen


Sonoff Switch mit Temperatur + Luftfeuchte

Info green.pngHier geht es um nützliche Hardware Erweiterungen an den Originalmodulen!

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!

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. Anschluß der Stifftleiste ist das Signal "SCL" (GPIO14) herausgeführt, welches für den DHT22 zur Erfassung der Messdaten benötigt wird. Der Sonsor 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äßt. 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 Klinckenstecker (3,5mm) einbauen so wie sie am TH10/16 vorhanden ist.

Software anpassen am Beispiel MQTT

Sonoff MQTT


Wer über MQTT kommuniziert und die Software von Theo Arends benutzt, muss folgende Dinge beachten. In der Datei user_config.h müssen im Abschnitt Module = SONOFF die Slashes so wie unten dargestellt entfernt werden, damit erstens die Interrupts abgefragt werden und zweitens die Telemetriedaten gesendet werden. Ebenso ist der verwendete Sensor bei "define DHT_TYPE" eingestellt werden. In dem hier gezeigten Beispiel also "DHT22".


#if MODULE == SONOFF                        // programming header 1:3.3V 2:rx 3:tx 4:gnd
 #define APP_NAME             "Sonoff module"
 #define LED_PIN              13           // GPIO 13 = Green/Blue Led (0 = On, 1 = Off) - Sonoff
 #define LED_INVERTED         1            // 0 = (1 = On, 0 = Off), 1 = (0 = On, 1 = Off)
 #define REL_PIN              12           // GPIO 12 = Red Led and Relay (0 = Off, 1 = On)
 #define KEY_PIN              0            // GPIO 00 = Button
/*-------------------------------------------------------------------------------------------*/
 #define DSB_PIN              4            // GPIO 14 = DS18B20 (Sonoff_TH10A(16A), Sonoff SV)
 #define SEND_TELEMETRY_DS18B20            // Enable sending temperature telemetry
/*-------------------------------------------------------------------------------------------*/
 #define DHT_PIN              14           // GPIO 14 = AM2301 (Sonoff_TH10A(16A), Sonoff SV)
 #define DHT_TYPE             DHT22        // DHT module type (DHT11, DHT21, DHT22, AM2301, AM2302 or AM2321)
 #define SEND_TELEMETRY_DHT                // Enable sending temperature and humidity telemetry

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_humidity tele/sonoff/HUMIDITY
attr Sonoff_Temp subscribeReading_temperature tele/sonoff/TEMPERATURE

Das Beispiel gilt für das LEGACY Messageformat. 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.


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/1/POWER/set
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_HUMIDITY tele/sonoff_dht/DHT/HUMIDITY
attr Sonoff_dht subscribeReading_TEMPERATURE tele/sonoff_dht/DHT/TEMPERATURE
attr Sonoff_dht subscribeReading_state cmnd/sonoff_dht/1/POWER/set

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/1/POWER/set
attr Sonoff_Sw room _Sonoff
attr Sonoff_Sw stateFormat Licht
attr Sonoff_Sw subscribeReading_Licht tele/sonoff_dht/POWER
attr Sonoff_Sw subscribeReading_state cmnd/sonoff_dht/1/POWER/set
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 Thermostatanschluß 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. Das Beispiel gilt für das LEGACY Messageformat.

### 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.

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 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.

Anpassung des Sketches mit Wall Switch

Zur Vorbereitung des Sketches sind zunächst einige Einstellungen in der "user_config.h" durchzuführen.

#if MODULE == SONOFF                        // programming header 1:3.3V 2:rx 3:tx 4:gnd
 #define APP_NAME             "Sonoff 8266 module"
 #define MQTT_GRPTOPIC        "sonoffs"    // [GroupTopic] MQTT Group topic
/*-------------------------------------------------------------------------------------------*/
 #define LED_PIN              13           // GPIO 13 = Green/Blue Led (0 = On, 1 = Off) - Sonoff
 #define LED_INVERTED         1            // 0 = (1 = On, 0 = Off), 1 = (0 = On, 1 = Off)
 #define REL_PIN              12           // GPIO 12 = Red Led and Relay (0 = Off, 1 = On)
 #define KEY_PIN              0            // GPIO 00 = Button
/*-------------------------------------------------------------------------------------------*\
* Wall switch and HC-SR501
\*-------------------------------------------------------------------------------------------*/
 #define SWITCH_PIN           14           // GPIO 14 = Standard wall switch to Gnd (Sonoff_TH10A(16A), Sonoff SV)
 #define SWITCH_MODE          PUSHBUTTON_INV      // [SwitchMode] TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON or PUSHBUTTON_INV (the wall switch state)
 #define USE_WALL_SWITCH                   // Enable the use of a standard wall switch to control the relay

Wichtig ist dabei die vorangestellten Slahes // bei "#define USE_WALL_SWITCH" zu entfernen auf PUSHBUTTON_INV zu stellen. Dann kann der Sonoff Switch compiliert und geflasht werden.

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/set
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/set
attr Sonoff_pir webCmd :

Das Beispiel gilt für das LEGACY Messageformat.

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 3.1.6. Die Topic sollte auf den Namen "sonoff_pir" eingestellt werden. Bei anderen Namen ist dies entsprechend in FHEM anzupassen.

Mit dem Command BUTTONTOPIC 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

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/POWER

Die Motion_pir dient nun zur eigentlichen Einschaltung des Lichtes und sendet das Kommando cmnd/Alarm_SO2/POWER an den entkopellten GPIO 14 des Switch. Das Beispiel gilt für das LEGACY Messageformat.


# ------------------ 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/1/POWER/set
attr Sonoffs room MQTT
attr Sonoffs stateFormat state
attr Sonoffs subscribeReading_Licht stat/sonoffs/1/POWER
attr Sonoffs subscribeReading_state cmnd/sonoffs/1/POWER/set

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.

--Reinhart (Diskussion) 20:54, 5. Jan. 2017 (CET)