Sonoff
sonoff Switch, dieser Artikel beschreibt die Ankopplung des kostengünstigen sonoff Switch an FHEM mit ESPEasy.
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:
Hardware
Bitte unbedingt die elektrotechnischen Sicherheitsrichtlinien beachten und einhalten!
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
Das sonoff Modul ist in einem zweckmäßigen und gefälligem Gehäuse verbaut!
Platine
Die Platine ist sehr übersichtlich aufgebaut und der Hersteller hat auch alle Vorbereitungen zum Flashen einer alternativen Software vorgesehen (über serielle Schnittstelle via FTDI-Modul). Mit einer alternativen Software wie ESPEasy ist eine direkte Ankopplung des sonoff an FHEM somit ein leicht durchführbarer Vorgang.
Die 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
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
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
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
Der Hersteller hat zwar schon die Platine vorbereitet, jedoch muss sie noch mit einer Stiftleiste bestückt werden um das FTDI Modul bequem verbinden zu können. Nachdem einmal ESPEasy geflasht worden ist, kann es in Zukunft via WEB geflasht werden und die Stiftleiste ist dann nicht mehr erforderlich. Aufgrund der geringen Kosten fällt dies jedoch nicht ins Gewicht.
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
ESPEasy flashen
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. Im Gegensatz zu Arends Sketch für die MQTT Umgebung genügt hier die Arduino IDE 1.6.9. Für die Sketches von Arends empfiehlt sich Arduino IDE >=1.6.12
mit Arduino compilieren
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
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.
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
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
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
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
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
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.
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
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 sudo apt-get install mosquitto # 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
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
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.
Nach dem Download der Software 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.
#define STA_SSID "SSID" // Wifi SSID #define STA_PASS "password" // Wifi password #define WIFI_HOSTNAME "%s-%04d" // Expands to <MQTT_TOPIC>-<last 4 decimal chars of MAC address> #define WIFI_CONFIG_TOOL WIFI_WPSCONFIG // Default tool if wifi fails to connect (WIFI_SMARTCONFIG, WIFI_MANAGER or WIFI_WPSCONFIG)
// Syslog #define SYS_LOG_HOST "Ip-Adresse-Server" #define SYS_LOG_PORT 514 #define SYS_LOG_LEVEL LOG_LEVEL_NONE #define SERIAL_LOG_LEVEL LOG_LEVEL_INFO #define WEB_LOG_LEVEL LOG_LEVEL_INFO
// Ota #if (ARDUINO >= 168) #define OTA_URL "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".ino.bin" #else #define OTA_URL "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".cpp.bin" #endif
// MQTT #define MQTT_HOST "Ip-Adresse-Server" #define MQTT_PORT 1883
Wichtig: 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!!! 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) . Der Flashvorgang ist dann gleich wie 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
Nach erfolgtem Flash des Modules kann das Webinterface zum ersten Mal aufgerufen werden.
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.
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/LIGHT', ... (2 bytes)) stat/sonoff/1/LIGHT ON Received PUBLISH (d0, q0, r0, m0, 'stat/sonoff/1/LIGHT', ... (3 bytes)) stat/sonoff/1/LIGHT OFF
Interessant sind für uns nun diese Einträge "stat/sonoff/1/LIGHT 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
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.
- define SUB_PREFIX "cmnd" Sonoff devices subscribe to:- cmnd/MQTT_TOPIC and cmnd/MQTT_GRPTOPIC
- define PUB_PREFIX "stat" Sonoff devices publish to:- stat/MQTT_TOPIC
- 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
Dieser einfache Schalter kommuniziert bidirektional mit dem sonoff Device.
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/LIGHT/set attr Sonoff_Switch room MQTT attr Sonoff_Switch stateFormat Licht attr Sonoff_Switch subscribeReading_Licht stat/sonoff/1/LIGHT attr Sonoff_Switch subscribeReading_state cmnd/sonoff/1/LIGHT/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!
Sonoff POW einrichten
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.
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
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 und 2.07 von Arends.
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
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_POWER tele/sonoffpow/PERIOD_POWER 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/LIGHT', ... (3 bytes)) tele/sonoff/LIGHT 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_POWER', ... (5 bytes)) tele/sonoffpow/TODAY_POWER 0.083 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/PERIOD_POWER', ... (1 bytes)) tele/sonoffpow/PERIOD_POWER 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/LIGHT', ... (2 bytes)) tele/sonoffpow/LIGHT 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
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/LIGHT/set attr Sonoff_Pow room MQTT attr Sonoff_Pow subscribeReading_Power stat/sonoffpow/1/LIGHT attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/1/LIGHT/set attr Sonoff_Pow subscribeReading_TODAY_POWER tele/sonoffpow/TODAY_POWER attr Sonoff_Pow subscribeReading_PERIOD_POWER tele/sonoffpow/PERIOD_POWER 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_POWER",undef))}
Zusätzlich kann hier noch das Relais mit "on" und "off" ein- ausgeschaltet werden.
Sonoff POW Netz-Anschluß
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
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_POWER,CURRENT,CURRENT_POWER_avg_day,CURRENT_POWER_max_day,PERIOD_POWER attr SonoffPows mapping %ALIAS attr SonoffPows nameStyle style="color:yellow" attr SonoffPows room MQTT attr SonoffPows valueFormat {'CURRENT_POWER' =>"%.0f W", 'TODAY_POWER' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'CURRENT_POWER_max_day' => "%.0f W",'CURRENT_POWER_avg_day' => "%.2f W",'PERIOD_POWER'=>"%.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_POWER" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_POWER" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "TODAY_POWER" && $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_POWER" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "PERIOD_POWER" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "PERIOD_POWER" && $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.
Erweiterungen
Sonoff Switch mit Temperatur + Luftfeuchte
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
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. Anscluß der Stifftleiste ist das Signal "SCL" (GPIO14) herausgeführt, welches für den DHT22 zur Erfassung der Messdaten benötigt wird. Wir verbinden den Sonsor mit einem einem 3-poligen Kabel, hier wurde ein Steckkabel für ein Breadboard verwendet was sich hervoragend ohne löten verwenden läßt. Damit der DHT22 korrekt funktioniert, ist ein Widerstand mit 4,7 K Ohm zwischen Pin1 und Pin5 (Vdd und Data des DHT22) der Stiftleiste anzulöten. Wenn ganz unten gelötet wird, dann lassen sich die Stecker noch gut haltbar aufstecken.
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
1 ------- 1 (VDD) 2 ------- 5 (GPIO14) 3 4 ------- 4 (GND) DHT22 Stiftleiste
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 Gefahr den Sensor beeinflussen) ist hier einfach mit einer Eisensäge ein Schlitz eingesägt, der dient in diesem Falle als Kabeldurchführung. 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 eine Eigenerwärmung hat.
Software anpassen am Beispiel 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
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
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.
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.