Sonoff: Unterschied zwischen den Versionen
Andies (Diskussion | Beiträge) |
Andies (Diskussion | Beiträge) |
||
Zeile 140: | Zeile 140: | ||
<div style="clear:both;"></div> | <div style="clear:both;"></div> | ||
[[Datei:sonoff_sw_4.jpg|thumb|left|alt=Platine mit Stiftleiste bestücken]] | [[Datei:sonoff_sw_4.jpg|thumb|left|alt=Platine mit Stiftleiste bestücken]] | ||
Der Hersteller hat zwar die Platine vorbereitet, diese muss jedoch mit einer Stiftleiste bestückt werden, um das FTDI Modul bequem verbinden zu können. Die Stiftleiste muss allerdings selber nachgerüstet werden. Nachdem das ESPEasy zum ersten Mal geflasht wurde, kann es in Zukunft via WEB (OTA) geflasht werden und die Stiftleiste ist dann eigentlich nicht mehr erforderlich. <br> | Der Hersteller hat zwar die Platine vorbereitet, diese muss jedoch mit einer Stiftleiste bestückt werden, um das FTDI Modul bequem verbinden zu können. Die Stiftleiste muss allerdings selber nachgerüstet werden. Nachdem das ESPEasy zum ersten Mal geflasht wurde, kann es in Zukunft via WEB (OTA) geflasht werden und die Stiftleiste ist dann eigentlich nicht mehr erforderlich. <br> |
Version vom 12. August 2017, 11:47 Uhr
Sonoff | |
---|---|
Zweck / Funktion | |
Ankopplung der Sonoff Module an Fhem | |
Allgemein | |
Typ | undefiniert |
Details | |
Dokumentation | ModUndef |
Support (Forum) | ESP8266 |
Modulname | Sonoff |
Ersteller | Reinhart |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Einleitung
Die Fa. Itead bietet kostengünstige "sonoff" Produkte an, die den ESP8266 Chip On Board haben und somit die ideale Grundlage für ESPEasy und für FHEM darstellen. Dieser Artikel beschreibt die Ankopplung der Sonoff Module an FHEM mit ESPEasy oder Arends MQTT.
Links des Herstellers
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, zeigt das Beispiel eines russischen Anwenders. Er hat beim Flashen die Netzspannung am Modul gelassen und somit (über die Verbindung mit dem Netzteil des Laptops) lebensgefährliche Spannung auf die FTDI Schnittstelle gebracht. Das Modul ist dabei abgeraucht!
Modelle (mit Produktübersicht)
Eine Übersichtliste der verschiedenen Produkte mit technischen Kurzangaben.
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 |
Model IM151116002: Erstes Modell
Link zum Hersteller: Sonoff WiFi Wireless Smart Switch for MQTT COAP Smart Home
Das sonoff Modul ist in einem zweckmäßigen Gehäuse verbaut.
Die Platine ist sehr übersichtlich aufgebaut und der Hersteller hat zudem Vorbereitungen zum Flashen einer alternativen Software vorgesehen (über serielle Schnittstelle via FTDI-Modul). Mit einer alternativen Software wie ESPEasy kann sonoff an FHEM leicht angebunden werden.
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
Link zum Hersteller: Sonoff TH 10A/16A WiFi Smart Switch
Der Hersteller hat eine Platine für eine weitere Stiftleiste vorbereitet, die jedoch bestückt werden muss. Die nicht beschalteten Stifte können dann genutzt werden, um die "verdeckten" GPIO zugänglich zu machen. Die Verdrahtung kann dem Bild entnommen werden.
Achtung: Bitte vor den Arbeiten kontrollieren, das an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!
Model IM160811001: Sonoff Dual
Link zum Hersteller: Sonoff Dual WiFi Wireless Smart Swtich
Model IM160810001: Sonoff Pow
Link zum Hersteller: 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 unten im Wiki beschrieben.
weitere Modelle
Weitere Modelle finden sich auf der Homepage des Hersstellers
Stromversorgung beim Flashen
Während des Flashvorganges benötigt das Sonoff-Modul eine Stromversorgung. Dabei darf unter keinen Umständen die Netzspannung von 230V verwendet werden. Selbst die 5V aus einem USB-Anschluss sind zu hoch, da das Modul sonst Gefahr läuft unbrauchbar zu werden. Es sind ausschließlich 3.3V zu verwenden.
Der FTDI Chip kann laut Datenblatt höchstens 50 mA liefern, das ESP Modul zieht aber bis zu 300 mA Spitzenstrom und verbraucht schon im normalen Modus ca. 50-70 mA. Die einfachen FTDI Adapter ohne separaten Spannungsregler sind damit als 3.3 Volt Versorgung beim Flashen ungeeignet. Es ist am besten, wenn das Sonoff Modul mit einer separaten Stromversorgung von 3.3 Volt (bei ausreichender Last von bis zu 300 mA) versorgt wird.
Achtung! Es kann sein, dass der Flashvorgang ohne Fehler läuft, der Flash aber anschließend korrupt ist und das Modul unklares Verhalten zeigt. In dem Fall die Spannungsversorgung 3.3 Volt prüfen! Auch das USB Kabel kann eine Fehlerursache sein.
Schnittstelle
Die abgebildete Platine zeigt die benötigten Signale für ein FTDI Modul (Model: IM151116002).
Pin5 = vorbereitet für GPIO Pin4 = Masse Pin3 = TxD Pin2 = RxD Pin1 = 3.3V
Siehe dazu auch den Link aus dem Forum:
Der Hersteller hat zwar die Platine vorbereitet, diese muss jedoch mit einer Stiftleiste bestückt werden, um das FTDI Modul bequem verbinden zu können. Die Stiftleiste muss allerdings selber nachgerüstet werden. Nachdem das ESPEasy zum ersten Mal geflasht wurde, kann es in Zukunft via WEB (OTA) geflasht werden und die Stiftleiste ist dann eigentlich nicht mehr erforderlich.
Für die Module TH10/TH16 sind die Lötpunkte für die Stiftleiste schon beschriftet.
Achtung: Bitte vor den Arbeiten kontrollieren, das an der Platine keine Netzspannung angeschlossen ist, LEBENSGEFAHR!
Software
Vorab: Es gibt derzeit (August 2017) zwei Möglichkeiten, die Geräte von Sonoff mit eigener Firmware zu versehen. Entweder man verwendet MQTT gemeinsam mit TASMOTA oder man verwendet ESPEasy. Beide Firmware-Produkte werden derzeit weiterentwickelt. Es scheint so zu sein, dass bei den POW-Geräten die Sensoren nicht korrekt erkannt werden und sich dort MQTT anbietet. Jedoch sollte in den Foren geprüft werden, ob diese eindeutige Präferenz durch Weiterentwicklung noch aufrecht erhalten werden kann.
Der Autor Arends hat die Version Sonoff-MQTT-OTA-Arduino eingestellt und die Version 3.2.13 (Ende Jänner 2017) 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 (der verwendete JSON String muss zusätzlich gefiltert werden). Es gibt aber bereits sehr gute Lösungswege um dieses Problem zu beheben: In diesem Thread wurde ein JSON to Reading Modul vorgestellt, dass den JSON String analysiert und alle darin enthaltenen Daten in Readings kopiert. Die Readings werden dabei in FHEM automatisch angelegt.
Link frühere Software: Sonoff-MQTT-OTA-Arduino
MQTT und TASMOTA
Alle hier im Wiki verwendeten Beispiele und deren Beschreibung sind für die neue Tasmota Version ausgelegt. 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 und die wohl wichtigste ist die Auswahl der verwendeten Hardware (Sonoff POW etc.).
Link: Tasmota
TASMOTA verlangt vorab die Installation eines MQTT-Brokers (idealerweise auf dem Raspberry). Auf der Webseite [1] ist die Installation sehr ausführlich beschrieben - bis hin zum Flashen des Sonoff-Gerätes.
MQTT Server auf dem RPi 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, 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
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 Tasmota (Stand 22.02.2017).
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.
In der Arduino IDE unter Datei / Voreinstellungen im Feld "Zusätzliche Boardverwalter-URLs:" den Link: http://arduino.esp8266.com/stable/package_esp8266com_index.json einfügen.
Dann unter Werkzeuge / Board / Boardverwalter ganz am Ende der Liste die Librarys für "esp8266 by ESP8266 Community" die letzte Version zu installieren. Link zum Board. Im Tasmota Verzeichnis \lib werden auch die zum kompilieren benötigten Librarys zur Verfügung gestellt.
Das gesamte Sonoff Verzeichnis aus Arendts Sketch entpacken (ist wie hier verlinkt ein Zipfile) und dann aus diesem Verzeichnis die sonoff.ino öffnen. Es können dann alle zu dem Sketch zugehörigen Dateien angesehen/editiert werden.
Anschließend sollte noch die Datei user_config.h (im Unterverzeichnis "sonoff") editiert werden. Die Abschnitte
// Wifi // Syslog // Ota // MQTT
müssen mit der eigenen "Ip-Adresse-Server", "SSID" und "password" angepasst werden, das erleichtert den ersten Connect mit dem Modul. Seit der Version 2.1.2 können die WIFI Einstellungen 2-fach angegeben werden, somit wechselt das Device automatisch auf den 2. Wifi Hotspot wenn der erste nicht erreicht wird.
#define STA_SSID "SSID" // Wifi SSID #define STA_PASS "password" // Wifi password #define WIFI_HOSTNAME "%s-%04d" // Expands to <MQTT_TOPIC>-<last 4 decimal chars of MAC address> #define WIFI_CONFIG_TOOL WIFI_WPSCONFIG // Default tool if wifi fails to connect (WIFI_SMARTCONFIG, WIFI_MANAGER or WIFI_WPSCONFIG)
// Syslog #define SYS_LOG_HOST "Ip-Adresse-Server" #define SYS_LOG_PORT 514 #define SYS_LOG_LEVEL LOG_LEVEL_NONE #define SERIAL_LOG_LEVEL LOG_LEVEL_INFO #define WEB_LOG_LEVEL LOG_LEVEL_INFO
// Ota #if (ARDUINO >= 168) #define OTA_URL "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".ino.bin" #else #define OTA_URL "http://Ip-Adresse-Server:80/api/arduino/" PROJECT ".cpp.bin" #endif
// MQTT #define MQTT_HOST "Ip-Adresse-Server" #define MQTT_PORT 1883
Wichtig: Im Userprofile des Arduino Kompilers (%userprofile%\Documents\Arduino\libraries\pubsubclient\src\PubSubClient.h) die Max Packet Size auf 512 erhöht werden!
#define MQTT_MAX_PACKET_SIZE 512 #define MQTT_KEEPALIVE 120
Anpassung der max. Packet Size auf 512 und das Keepalive auf 120
Im 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. Sehr gut funktioniert aud das Esptool. Wer nicht compilieren will, kann auch im Unterverzeichnis ./api/arduino/ die fertige Binary ( sonoff.ino ) benutzen, aber dann ohne Voreinstellung der lokalen IPs.
MQTT testen
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 PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/DHT/TEMPERATURE', ... (6 bytes)) tele/sonoff_dht/DHT/TEMPERATURE 21.8 C Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/DHT/HUMIDITY', ... (6 bytes)) tele/sonoff_dht/DHT/HUMIDITY 41.7 % Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_dht/TIME', ... (19 bytes)) tele/sonoff_dht/TIME 2017-02-22T16:05:43 Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes)) tele/sonoffpow3/STATE {"Time":"2017-02-22T16:05:44", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}} Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes)) tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:05:44", "Yesterday":0.083, "Today":0.055, "Period":0, "Power":0, "Factor":0.00, "Voltage":229, "Current":0.000} Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (14 bytes)) stat/TestSwitch/RESULT {"POWER":"ON"} Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (2 bytes)) stat/TestSwitch/POWER ON Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes)) tele/sonoffpow3/STATE {"Time":"2017-02-22T16:07:14", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}} Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes)) tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:07:14", "Yesterday":0.083, "Today":0.055, "Period":0, "Power":3, "Factor":0.20, "Voltage":227, "Current":0.072} Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/RESULT', ... (15 bytes)) stat/TestSwitch/RESULT {"POWER":"OFF"} Received PUBLISH (d0, q0, r0, m0, 'stat/TestSwitch/POWER', ... (3 bytes)) stat/TestSwitch/POWER OFF
Interessant sind für uns nun diese Einträge "stat/TestSwitch/POWER ON" , dazu am Taster des Sonoff manuell umschalten. Dies entspricht genau der Syntax wie sie im Anschluss in FHEM dann zu verwenden ist.
Mit diesen Einstellungen können dann entweder nach Telemetriedaten oder nach Statusmeldungen gefiltert werden. Dies ist jedoch nur notwendig wenn bereits andere MQTT Devices am Broker hängen und es sonst zu unübersichtlich wird.
mosquitto_sub -h localhost -t tele/sonoff/# = Telemetriedaten mosquitto_sub -h localhost -t stat/sonoff/# = Statusmeldungen
Sehr nützlich das lokale Log zur Fehlersuche und Inbetriebnahme.
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. Ebenso wird das Modul 98_expandJSON.pm benötigt um den JSON String zu filtern.
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 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
Der hier dargestellte Beispielcode realisiert die Kommunikation zwischen FHEM und dem sonoff Modul via MQTT Broker. Zu beachten ist hier, dass subscribeReading_Licht und subscribeReading_state unterschiedliche Syntax des Topic Strings haben!
ESPEasy
ESPEasy flashen
Die Spannungsversorgung des Sonoff Moduls wird hier vom FTDI Konverter mit 3.3V über die Verbindungskabel zum Pfostenstecker durchgeführt. Siehe obigen Hinweis: Vorbereitungen zum Flashen Anmerkung: Oben steht, dass man die Spannungsversorgung nicht mit den einfachen FTDI-Chips vornehmen soll, im Bild aber geschieht dies?
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 stets die aktuelle Version der Arduino Umgebung verwendet werden, bzw. die Librarys auf Letztstand gehalten werden.
mit Arduino compilieren
Wer selber mit der Arduino IDE compilieren will bitte folgende Einstellungen beachten. Die Sketche befinden sich hier. Die anschließenden Arbeiten sind dann gleich wie bei Abschnitt fertige Binary.
Unbedingt die neueste Arduino Json Library benutzen (siehe oben). Es gibt zwar keine Compilerfehler, aber es kommt anschließend zu Fehlfunktionen in der ESP Bridge! Die Installation der entsprechenden Arduino-Bibliotheken kann man hier nachlesen.
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.
In manchen Versionen von ESPEasy (zB.R120) ist auch ein Flasher beigelegt, welcher zwar keine grafische Oberfläche hat aber hervorragend funktioniert. Wenn andere versagen, geht es mit diesem Flasher immer noch, einfach probieren!
Netzspannung darf 'NICHT' angeschlossen sein!!! Taster am Sonoff gedrückt halten FTDI Adapter verbinden Taster am Sonoff los lassen Sketch übertragen Sonoff vom FTDI trennen
Wenn einmal die Firmware auf das sonoff Modul geflasht worden ist, kann in Zukunft ESPEasy direkt unter Tools via HTTP dies durchführen. Es muss dazu kein FTDI Konverter mehr verwendet werden.
ESPEasy einstellen
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.
Beispiel: Einrichtung Sonoff POW
Bei einer Charge des Sonoff POW gibt es Kontaktprobleme beim Sicherungshalter. ITAED hat deshalb eine Rückrufaktion gestartet: Link zur Rückrufaktion. Bitte unbedingt die Kontaktierung des Sicherungshalter überprüfen bzw. neuen Sicherungshalter einsetzen!
Das Modul kommt in gewohnter Itead Qualität, eine derart kostengünstige Energiemessung wird bei Smart Home Anwendern gerne eingesetzt. Die Originalsoftware habe ich nicht einmal getestet, da damit eine Anbindung an FHEM leider nicht möglich ist (wer will schon die Steuerbefehle seiner Schalter an eine nicht dokumentierte chinesische Cloud senden).
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.
Seit Version 2.0.19a ist auch die Leistungsanzeige im WEBIF wie im Bild links integriert. Auch der Energieverbrauch des Vortages wird mit angezeigt. Alle hier angezeigten Daten werden auch zyklisch im MQTT String an FHEM übergeben.
Zusätzlich kann im Sketch auch das Feature "Power_Limit" aktiviert werden. Mit dem Power_Limit wird eine zusätzliche Nachricht erzeugt, wenn ein bestimmter einstellbarer Grenzwert über- oder unterschritten wird.
Es lassen sich dadurch Meldungen wie "Waschmaschine fertig" oder ähnliches ohne weitere Schwellwert Überwachungen in FHEM ableiten. Die Meldungen kommen in MQTT mit "POWER_LOW ON" bzw. "POWER_LOW OFF".
Bei erstmaligen Start des Modules muss der Typ des Modules von "SONOFF" auf "SONOFF_Pow" geändert werden, damit die Software weiß mit welchem Modul es zu tun hat und kann dann die entsprechenden Berechnungen durchführen. Die Leistungsdaten kommen ja in Form einer Frequenz aus dem Baustein und müssen im Sketch (xsns_hlw8102.ino) umgerechnet werden.
Dieses Bild zeigt die Attribute die vom Modul via MQTT an FHEM geliefert werden.
aktuell gelieferter JSON String vom Sketch der alle Messdaten beinhaltet.
{"Time":"2017-02-22T16:38:47", "Yesterday":"2.286", "Today":"1.593", "Period":9, "Power":231, "Factor":"1.00", "Voltage":231, "Current":"0.866"}
und hier das zugehörige Reading.
tele/sonoffpow/ENERGY
Hier ein Mittschnitt des Datenverkehrs zum Broker zwecks Kontrolle der korrekten Funktion der Module und der Software.
Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/STATE', ... (103 bytes)) tele/sonoffpow/STATE {"Time":"2017-02-22T16:39:15", "Uptime":79, "LIGHT":"OFF", "Wifi":{"AP":2, "SSID":"Liwest", "RSSI":54}} Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow/ENERGY', ... (140 bytes)) tele/sonoffpow/ENERGY {"Time":"2017-02-22T16:39:15", "Yesterday":"1.391", "Today":"1.191", "Period":0, "Power":0, "Factor":"0.00", "Voltage":0, "Current":"0.000"} Received PUBLISH (d0, q0, r0, m0, 'tele/sonoff_wall1/STATE', ... (105 bytes)) tele/sonoff_wall1/STATE {"Time":"2017-02-22T16:39:15", "Uptime":96, "POWER":"OFF", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":100}} Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/STATE', ... (104 bytes)) tele/sonoffpow3/STATE {"Time":"2017-02-22T16:39:20", "Uptime":100, "LIGHT":"ON", "Wifi":{"AP":2, "SSID":"Pergola", "RSSI":96}} Received PUBLISH (d0, q0, r0, m0, 'tele/sonoffpow3/ENERGY', ... (134 bytes)) tele/sonoffpow3/ENERGY {"Time":"2017-02-22T16:39:20", "Yesterday":0.083, "Today":0.057, "Period":0, "Power":0, "Factor":0.00, "Voltage":230, "Current":0.000}
Die Einstellungen können mit folgender Syntax angefordert werden (zwei Terminalfenster öffnen, eines zum protokollieren und eines zum Seden der Befehle).
mosquitto_sub -d -v -t \# MQTT Datenverkehr protokolieren mosquitto_pub -q 2 -t cmnd/sonoffpow/status/set -m "8" = SonoffPOW Status jetzt auslesen mosquitto_pub -q 2 -t cmnd/sonoffpow/TelePeriod/set -m "60" = Timer setzen, alle 60 Sekunden Daten senden
Die Kommandos können direkt am Broker (Terminalfenster Putty etc.) abgesetzt werden.
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/HLWUCAL/set -m "2100" default = 1950 mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWICAL/set -m "2450" default = 3500 mosquitto_pub -q 2 -t cmnd/sonoffpow/HLWPCAL/set -m "13500" default = 12345
Entweder man hat eine definierte Last zur Verfügung oder besser man misst mit einem Leistungsmesser nach. Die Spannung kann man mit einem Multimeter nachmessen (sollte 230 V sein) und der Strom wird errechnet (bei 100 Watt I = P / U ) = 100/230 = 0,4347. Die Referenzwerte solange geringfügig ändern bis die Ausgabe passt. Für die Ausgabe wird einfach eine Statusabfrage durchgeführt.
mosquitto_pub -q 2 -t cmnd/sonoffpow/status/set -m "8"
Befehl für die Statusabfrage
cmnd/sonoffpow/status/set 8 Received PUBLISH (d0, q0, r0, m0, 'stat/sonoffpow/STATUS', ... (103 bytes)) stat/sonoffpow/STATUS PWR: Voltage 225 V, Current 0.427 A, Current Power 98 W, Total Power Today 0.080 kWh, Power Factor 1.00
Ergebnis der Statusabfrage mit Spannung, Strom und Leistung.
Sonoff POW FHEM Anbindung
Ein Beispiel einer einfachen Anbindung via JSON an FHEM. MQTT von Arends ist insofern notwendig, da in der Software ESPEasy und der Bridge noch keine Implementierung der Frequenzumrechnung enthalten ist.
define Sonoff_Pow MQTT_DEVICE attr Sonoff_Pow IODev myBroker attr Sonoff_Pow icon measure_power attr Sonoff_Pow publishSet ON OFF cmnd/sonoffpow/POWER attr Sonoff_Pow stateFormat {sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef))} attr Sonoff_Pow subscribeReading_ENERGY tele/sonoffpow/ENERGY attr Sonoff_Pow subscribeReading_POWER stat/sonoffpow/POWER attr Sonoff_Pow subscribeReading_state cmnd/sonoffpow/POWER attr Sonoff_Pow webCmd ON:OFF
Zusätzlich kann hier noch das Relais mit "on" und "off" ein- ausgeschaltet werden.
Ebenso notwendig ist das setzen der Regexp für den JSON Konverter.
define ej3 expandJSON Sonoff.*:.*:.{.*}
hier wird alles was mit dem Namen Sonoff beginnt gefiltert und automatisch alle darin enthaltenen Readings erstellt.
define ej3 expandJSON Sonoff.*:ENERGY.*:.{.*} (Power|Yesterday|Today)
oder so, da werden nur die Readings Power, Yesterday und Today erstellt. Somit ist auch kalr, das in FHEM auch JSON installiert sein muss. Ebenso können die verschiedenen Regexp im Wiki nachgelesen werden.
Source Reading: device:reading:.{.*} .*WifiIOT.*:sensor.*:.{.*} sonoff_.*:.*:.{.*} dev.*:(sensor1|sensor2|teleme.*):.{.*} (dev.*|[Dd]evice.*):json:.{.*} (devX:jsonX:.{.*}|devY.*:jsonY:.{.*Wifi.*{.*SSID.*}.*})
Target Reading: .*power.* (Current|Voltage|Wifi.*)
Komplette Definition des Filters: define ej1 expandJSON device:sourceReading:.{.*} targetReading define ej3 expandJSON .*\.SEN\..*:.*:.{.*} define ej3 expandJSON sonoff_.*:sensor.*:.{.*} (power.*|current|voltage)
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
ReadingsGroup mit Schaltmöglichkeit
Die ReadingsGroup kann auch gleich mit einem Schalter versehen werden um den POW Ein- oder Aus schalten zu können. Dazu ist aber eine andere Einstellung im Sketch erforderlich.
In der "user_config.h" muss an dieser Stelle auch die "PUB_PREFIX" auf die gleiche Topic wie "PUB_PREFIX2" eingestellt werden. Durch diese Maßnahme wird erreicht, dass sofort nach dem Knopfdruck auch der Status mit der Topic "tele" übertragen wird. Würde der weiterhin mit "stat" übertragen, kann er in der Readingsgroup nur sehr umständlich weiter behandelt werden. Dadurch wird erreicht, dass der Schalter sofort nach dem Schaltvorgang und der Rückmeldung (Status) auch seine Farbe ändert. Wird dieser Eintrag vergessen, ändert der Schalter erst nach Eintreffen der nächsten zyklischen Abfrage seinen Status/Farbe.
#define SUB_PREFIX "cmnd" // Sonoff devices subscribe to:- SUB_PREFIX/MQTT_TOPIC and SUB_PREFIX/MQTT_GRPTOPIC #define PUB_PREFIX "tele" // Sonoff devices publish to:- PUB_PREFIX/MQTT_TOPIC #define PUB_PREFIX2 "tele" // Sonoff devices publish telemetry data to:- PUB_PREFIX2/MQTT_TOPIC/UPTIME, POWER/LIGHT and TIME
hier die PUB_PREFIX mit der geänderten Topic "tele" anstatt "stat"
define SonoffPows readingsGroup <%measure_power>,<aktuell>,<Tag>,<Gestern>,<Strom>,<Durchschnitt>,<max.P>,<Zyklus>,<Faktor>,<Status>,< hr > .*(Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3|Sonoff_Pow4):Power,Today,Yesterday,Current,Power_avg_day,Power_max_day,Period,Factor,LIGHT attr SonoffPows commands {'LIGHT.ON' => 'set $DEVICE OFF','LIGHT.OFF' => 'set $DEVICE ON'} attr SonoffPows mapping %ALIAS attr SonoffPows nameStyle style="color:yellow" attr SonoffPows room Energie,MQTT attr SonoffPows valueFormat {'Power' =>"%.0f W", 'Today' =>"%.2f Kw",'Yesterday' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'Power_max_day' => "%.0f W",'Power_avg_day' => "%.2f W",'Power'=>"%.0f W",'Factor' => "%.2f "} attr SonoffPows valueIcon {'LIGHT.ON' => 'rc_GREEN@green', 'LIGHT.OFF' => 'rc_RED@red'} attr SonoffPows valueStyle { if($READING eq "Power" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Power" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Today" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Today" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Today" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Yesterday" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Current" && $VALUE <= 0.45){'style="color:green;;text-align:right"'}elsif( $READING eq "Current" && $VALUE > 0.45 && $VALUE < 0.87 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "Current" && $VALUE >= 0.87){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Period" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Period" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Period" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "Power_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"'}}
Dieses Beispiel ist für Tasmota mit JSON ausgelegt und benötigt ebenso wie oben die Erweiterung "average".
define Sonoff_Pow_CURRENT_POWER average Sonoff_Pow:Power.*
damit werden der Durchschnitt und min max für Tasmota mit JSON erzeugt.
POW mit FTUI anzeigen
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.
Beispiel: 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
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.
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
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/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/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 im Modul die Topic "sonoffsl" benannt wurde. Wer einen anderen Namen haben möchte, muss dies dann auch in FHEM entsprechend anpassen.
Sonoff Th10/16
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
### 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/POWER/set attr Sonoff_Temp room _Sonoff attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"temperature",0))} attr Sonoff_Temp subscribeReading_SENSOR tele/sonoffth/SENSOR attr Sonoff_Temp subscribeReading_state cmnd/sonoffth/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/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/POWER/set attr Sonoff_Switch webCmd ON:OFF
Der Schalter nochmals seperat dargestellt, je nach Geschmack.
Sonoff 4CH 4-Kanal Schaltmodul
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.
Es ist daher unbedingt notwendig den Sketch mit den geänderten Einstellungen selbst zu kompilieren, ansonsten stürzt das Modul nach Auswahl des Typs ab und wird nicht mehr rebooten können!
Das Modul ist etwas größer als die anderen Sonoff Produkte und besitzt mit 14,5 x 9 cm schon beachtliche Einbau Maße.
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.
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.
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.
Sonoff 4CH 4-Kanal Anbindung FHEM
Beispiel zur Anbindung in FHEM für den 4CH, hier werden einfach 4 einzelne Schalter definiert!
define Sonoff_ch1 MQTT_DEVICE attr Sonoff_ch1 IODev myBroker attr Sonoff_ch1 alias Sonoff CH1 attr Sonoff_ch1 devStateIcon on:rc_GREEN:off off:rc_RED:on attr Sonoff_ch1 eventMap ON:on OFF:off ON:Ein OFF:Aus attr Sonoff_ch1 group Toröffner attr Sonoff_ch1 icon light_ceiling attr Sonoff_ch1 publishSet ON OFF cmnd/sonoffch4/POWER1/set attr Sonoff_ch1 stateFormat Power attr Sonoff_ch1 subscribeReading_Power tele/sonoffch4/POWER1 attr Sonoff_ch1 subscribeReading_state cmnd/sonoffch4/POWER1/set attr Sonoff_ch1 webCmd Ein:Aus
define Sonoff_ch2 MQTT_DEVICE attr Sonoff_ch2 IODev myBroker attr Sonoff_ch2 alias Sonoff CH2 attr Sonoff_ch2 devStateIcon on:rc_GREEN:off off:rc_RED:on attr Sonoff_ch2 eventMap ON:on OFF:off ON:Ein OFF:Aus attr Sonoff_ch2 group Toröffner attr Sonoff_ch2 icon light_ceiling attr Sonoff_ch2 publishSet ON OFF cmnd/sonoffch4/POWER2/set attr Sonoff_ch2 stateFormat Power attr Sonoff_ch2 subscribeReading_Power tele/sonoffch4/POWER2 attr Sonoff_ch2 subscribeReading_state cmnd/sonoffch4/POWER2/set attr Sonoff_ch2 webCmd Ein:Aus
define Sonoff_ch3 MQTT_DEVICE attr Sonoff_ch3 IODev myBroker attr Sonoff_ch3 alias Sonoff CH3 attr Sonoff_ch3 devStateIcon on:rc_GREEN:off off:rc_RED:on attr Sonoff_ch3 eventMap ON:on OFF:off ON:Ein OFF:Aus attr Sonoff_ch3 group Toröffner attr Sonoff_ch3 icon light_ceiling attr Sonoff_ch3 publishSet ON OFF cmnd/sonoffch4/POWER3/set attr Sonoff_ch3 stateFormat Power attr Sonoff_ch3 subscribeReading_Power tele/sonoffch4/POWER3 attr Sonoff_ch3 subscribeReading_state cmnd/sonoffch4/POWER3/set attr Sonoff_ch3 webCmd Ein:Aus
define Sonoff_ch4 MQTT_DEVICE attr Sonoff_ch4 IODev myBroker attr Sonoff_ch4 alias Sonoff CH4 attr Sonoff_ch4 devStateIcon on:rc_GREEN:off off:rc_RED:on attr Sonoff_ch4 eventMap ON:on OFF:off ON:Ein OFF:Aus attr Sonoff_ch4 group Toröffner attr Sonoff_ch4 icon light_ceiling attr Sonoff_ch4 publishSet on off cmnd/sonoffch4/POWER4/set attr Sonoff_ch4 stateFormat Power attr Sonoff_ch4 subscribeReading_Power tele/sonoffch4/POWER4 attr Sonoff_ch4 subscribeReading_state cmnd/sonoffch4/POWER4/set attr Sonoff_ch4 webCmd Ein:Aus
Sonoff-Erweiterungen mit Sensoren
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. 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.
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
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
Die richtige Auswahl des Sensors und des verwendeten GPIO erfolgt im WEBIF des Modules und wird seit Tasmota nur mehr dort eingestellt. Eventuell sollte das aktuell verwendete JSON Filter geändert/erweitert werde (siehe beim Modul POW).
Software Anpassung DHT22 in FHEM
Links in der Hardcopy sind die Readings die nach der Anpassung von FHEM (Broker) befüllt werden sollten.
### Temperatur und Luftfeuchte vom Sonoff Switch ### define Sonoff_Temp MQTT_DEVICE attr Sonoff_Temp IODev myBroker attr Sonoff_Temp icon temperature_humidity attr Sonoff_Temp room MQTT attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0))} attr Sonoff_Temp subscribeReading_Sensor tele/sonoff/SENSOR
Hier die zusätzliche Erweiterung um die Temperatur und die Luftfeuchte in FHEM. Der in der Topic verwendete Name "sonoff" muss natürlich der Einstellung in der Software am Switch entsprechen. Bei Verwendung mehrerer Switches muss natürlich auch der Name bei jedem geändert werden.
Als Regexp für JSON kann dieser Filter eingesezt werden.
define ej3 expandJSON .*\.SEN\..*:.*:.{.*}
Logfile für die Temperatur
define SVG_FileLog_Sonoff_Temp SVG myDbLog:SVG_FileLog_Sonoff_Temp:HISTORY attr SVG_FileLog_Sonoff_Temp room MQTT
Und schließlich fehlt noch das Logfile, damit der Temperaturverlauf auch in schönen Plots dargestellt werden kann. Das hier verwendete Beispiel funktioniert nur mit einer DbLog.
Sonoff Switch als Thermostat verwenden mit MQTT
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/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_Sensor tele/sonoff_dht/SENSOR attr Sonoff_dht subscribeReading_state cmnd/sonoff_dht/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/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/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.
### sofort ausführen wenn neuer Sollwert eingestellt wird ### define Thermostat_on_notify notify ThermostatPellets IF (ReadingsVal("Sonoff_Sw","state",0) eq "OFF" && (ReadingsVal("Sonoff_dht","temperature",0) <= Value("ThermostatPellets"))) (set Sonoff_Sw ON) define Thermostat_off_notify notify ThermostatPellets IF (ReadingsVal("Sonoff_Sw","state",0) eq "ON" && (ReadingsVal("Sonoff_dht","temperature",0) > Value("ThermostatPellets"))) (set Sonoff_Sw OFF)
Mit einem notify wird die manuelle Änderung des Sollwertes überwacht und sofort reagiert.
## zyklisch prüfen ob Sollwert erreicht wurde ### define Thermostat_on at +*00:15:00 IF (ReadingsVal("Sonoff_Sw","Licht",0) eq "OFF" && (ReadingsVal("Sonoff_dht","temperature",0) <= Value("ThermostatPellets"))) (set Sonoff_Sw ON) define Thermostat_off at +*00:15:00 IF (Value("Sonoff_Sw") eq "ON" && (ReadingsVal("Sonoff_dht","temperature",0) > Value("ThermostatPellets"))) (set Sonoff_Sw OFF)
Hier noch die Soll- Ist Wertvergleiche zur Steuerung. Es wird alle 15 Minuten überprüft ob die Temperatur erreicht ist. Bei einer trägen Heizung sollten 15 Minuten ausreichend sein, wer will kann dies aber auch alle 5 oder 10 Minuten prüfen. Da des öfteren die Bezeichnungen der Readings im Sketch geändert werden ( zB:temperature ), bitte die richtige Schreibweise ( Groß/Klein ) in den Readings kontrollieren und gegebenenfalls hier anpassen.
Sonoff Switch mit Bewegungsmelder HC-SR501
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.
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
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.
Hier eine kleine Übersicht der wichtigsten Teile und deren Platzierung am HC-SR501. Den PIR kann man auch mit 3,3V betreiben wenn man die Diode am Eingang nach Vcc überbrückt, dann reicht die Spannung für einen reibungslosen Betrieb völlig aus. Dies gilt für den HC-SR501, wird ein anderer PIR verwendet muss man nachschauen ob das auch möglich ist, ansonsten die 5V Variante wählen.
Einbindung des HC-SR501 in FHEM
# ------------- Sonoff_pir mit Bewegungsmelder --------------- define Sonoff_pir MQTT_DEVICE attr Sonoff_pir IODev myBroker attr Sonoff_pir eventMap ON:on OFF:off attr Sonoff_pir group Sonoff attr Sonoff_pir icon hue_filled_br30 attr Sonoff_pir publishSet ON OFF cmnd/sonoff_pir/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/POWER/set attr Sonoff_pir webCmd :
Ein Beispiel wie der Sonoff Switch in FHEM eingebunden wird. Wenn im Sketch der Prefix von stat auf tele geändert wurde, ist dies auch hier durchzuführen ( subscribeReading_Licht tele/sonoff_pir/POWER ), ansonsten bleibt es so wie im Beispiel. Getestet wurde dieses Beispiel mit Version 3.1.6. Die Topic sollte auf den Namen "sonoff_pir" eingestellt werden. Bei anderen Namen ist dies entsprechend in FHEM anzupassen.
Mit dem Kommando 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.
# ------------------ 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/POWER/set attr Sonoffs room MQTT attr Sonoffs stateFormat state attr Sonoffs subscribeReading_Licht stat/sonoffs/POWER attr Sonoffs subscribeReading_state cmnd/sonoffs/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.
Sonoff Switch als IR-Sender verwenden
Mit einem normalen Sonoff Basic Modul kann dies zu einer IR Fernbedienung hochgerüstet werden.
Der einfache Schaltplan ist hier zu finden und der Nachbau ist sehr einfach. Man kann aber auch aus einer alten FB die IR-Diode ausbauen und zusammen schalten. Ein kleines Howto ist in diesem Wiki auf Github zu finden.
Verwendet wird dazu der Arends Sketch.
Als erstes sucht man sich auf LIRCdie entsprechenden FB-Codes, im Beispiel hier für einen Samsung TV 55" Curved UHD HU8580. Die FB ist zwar nicht exakt dieselbe, aber die Befehle passen soweit. Im Webif des Sonoff Modules ist beim angeschlossenen GPIO der IR-Diode "8 IRremote" einzustellen.
Link zum Forums Thread
Wichtig sind dabei folgende Daten:
name Samsung_BN59-00940A bits 16 pre_data_bits 16 pre_data 0xE0E0 Power On/Off 0x40BF[/code]
Nun stellt man sich den Sendestring zusammen:
predata+Befehl = E0E040BF (hex) = 3772793023 (dec) und 32 Bit Datenlänge.
Der JSON String für den IRSend ist laut Arends Wiki folgender. IRsend | {"protocol": "<proto>", | Send IR remote control as JSON encapsulated command. | "bits": 1..32 | <proto> is NEC, SONY, RC5, RC6, DISH, JVC or SAMSUNG | "data": 1..(2^32)-1} | bits are the required number of data bits. | | data is the data frame as 32 bit unsigned integer. | | See http://www.lirc.org/ for more info.
das ergibt dann unseren Befehl für die Kommandozeile am Modul. Die Bitlänge für Pre und Data sind ebenfalls zu addieren (16 + 16 = 32 Bit) und beim Arends Sketch muss im JSON Format gesendet werden:
irsend {"protocol": "SAMSUNG","bits": 32, "data": 3772793023}
oder hier für die Kommandozeile am Broker:
mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'
TestSwitch ist hier der verwendete Name des Sonoff Moduls, wird ein anderer Name verwendet ist dieser hier anzupassen.
Jedesmal wenn nun der Befehl gesendet wird, wird entweder Ein- oder Aus geschaltet. Die Verzögerung über Wlan ist vernachlässigbar. Ebenso können die Kanäle oder die Laustärke verstellt werden. Im Prinzip funktionieren alle Befehle die auf der FB vorhanden sind.
Sonoff Switch als IR-Sender FHEM Beispiel
Hier ein Beispiel wie der Code für die Fernbedienung in Fhem eingebunden werden kann.
define RC_TV remotecontrol attr RC_TV rc_iconpath icons/remotecontrol attr RC_TV rc_iconprefix black_btn_ attr RC_TV room Entwicklung attr RC_TV row00 KEY_POWER:POWEROFF,:blank,:blank attr RC_TV row02 :blank,:blank,:blank attr RC_TV row03 KEY_1:1,KEY_2:2,KEY_3:3 attr RC_TV row04 KEY_4:4,KEY_5:5,KEY_6:6 attr RC_TV row05 KEY_7:7,KEY_8:8,KEY_9:9 attr RC_TV row06 :blank,KEY_0:0,:blank attr RC_TV row07 :blank,:blank,:blank attr RC_TV row08 KEY_VOLUMEUP:UP,KEY_MUTE:MUTE,KEY_CHANNELUP:CHUP attr RC_TV row09 KEY_VOLUMEDOWN:DOWN,:blank,KEY_CHANNELDOWN:CHDOWN
define Samsung_TV notify RC_TV "/opt/fhem/ircmd.sh $EVENT"
In einem externen Shell Script werden die Parameter übergeben und der Sendestring für den IRSend zusammen gestellt. Das Script ins FHEM Home Verzeichnis kopieren ( /opt/fhem ) und die Rechte auf 755 setzen. Link zum Wiki einer universellen Fernbedienung.
#!/bin/sh -e if [ "$1" = "KEY_POWER" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}' fi # E0E0E01F 3772833823 if [ "$1" = "KEY_VOLUMEUP" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772833823}' fi # E0E0D02F 3772829743 if [ "$1" = "KEY_VOLUMEDOWN" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772829743}' fi # E0E0F00F 3772837903 if [ "$1" = "KEY_MUTE" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772837903}' fi # E0E020DF 3772784863 if [ "$1" = "KEY_1" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772784863}' fi # E0E0A05F 3772817503 if [ "$1" = "KEY_2" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772817503}' fi # E0E0609F 3772801183 if [ "$1" = "KEY_3" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772801183}' fi # E0E010EF 3772780783 if [ "$1" = "KEY_4" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772780783}' fi # E0E0906F 3772813423 if [ "$1" = "KEY_5" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772813423}' fi # E0E050AF 3772797103 if [ "$1" = "KEY_6" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772797103}' fi # E0E030CF 3772788943 if [ "$1" = "KEY_7" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772788943}' fi # E0E0B04F 3772821583 if [ "$1" = "KEY_8" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772821583}' fi # E0E0708F 3772805263 if [ "$1" = "KEY_9" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772805263}' fi # E0E08877 3772811383 if [ "$1" = "KEY_0" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772811383}' fi # E0E048B7 3772795063 if [ "$1" = "KEY_CHANNELUP" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772795063}' fi # E0E008F7 3772778743 if [ "$1" = "KEY_CHANNELDOWN" ]; then mosquitto_pub -q 2 -t cmnd/TestSwitch/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772778743}' fi
Das Script kann sehr leicht für jede andere FB abgeändert werden und auch noch zusätzliche Tasten eingebunden werden. Bitte nicht auf die vorangestellten Pre-Data-Bits vergessen. Auf die Verwendung des Scriptes kann auch verzichtet werden, wenn der JSON String in Fhem direkt zusammen gestellt wird. Für den Nachbau ist es aber leichter verständlicher und kann auch leicht selber an die eigene FB angepasst werden.
Sonoff Development Board
Das Board kommt ohne Software und muss zunächst mit einem Sketch bespielt werden. Hier kurz beschrieben der Arends Sketch, es funktioniert aber mit ESPEasy genau so gut.
Damit die vielen GPIO's auch nach freiem Wunsch zugeordnet werden können, müssen die erforderten Einstellungen da allerdings in der sonoff_template.h bekannt gegeben werden. Hier wurde der GPIO12 und 13 einem Relais zugeordnet. Der Rest kann dann frei im Webif konfiguriert werden (Type = User Test).
Link zum Wiki des Herstellers
Link zum Schaltplan
Anschlüsse und GPIO's am Board.
3V3 VDD 3.3V Power supply output GND GND Power supply pin 4 GPIO4 GPIO4 5 GPIO5 GPIO5 12 GPIO12 GPIO12/HSPIQ 13 GPIO13 GPIO13/HSPID 14 GPIO14 GPIO14/HSPICLK ADC ADC Detect analog input voltage(0~1V) RX U0RXD Flash programming UART RX;GPIO3 TX U0TXD Flash programming UART TX;GPIO1;SPICS1 E-FW GPIO0 GPIO0/SPICS2/Serial programming enable pin RESET RESET External reset signal(low active)
hier können die wesentlichen Funktionen (Relaisfunktion oder freier GPIO) konfiguriert werden. Man zählt die GPIO's von oben nach unten und wenn einer nicht benötigt wird, wird eine 0 angegeben.
{ "User Test", // Sonoff Basic User Test GPIO_KEY1, // GPIO00 Button 0, GPIO_USER, // GPIO02 Optional sensor GPIO_USER, // GPIO03 Serial TXD and Optional sensor GPIO_USER, // GPIO04 Optional sensor GPIO_USER, // GPIO05 Optional sensor 0, 0, 0, 0, 0, 0, GPIO_REL2, // GPIO12 Relay 2 (0 = Off, 1 = On) GPIO_REL1, // GPIO13 Relay 1 (0 = Off, 1 = On) GPIO_USER, // GPIO14 Optional sensor 0, 0 }
Hier wurde am Modul "User Test" in der Datei "sonoff_template.h" abgeändert, um 2 Relais über GIPO12 und GPIO13 ansteuern zu können.
Gedacht ist es als Enwicklerboard, es ist aber auch genau so gut für den produktiven Einsatz geeignet, hat aber kein eingebautes Netzteil. Es ist zum flashen kein externes FTDI Modul notwendig, das hat es bereits an Board und es muss lediglich der USB Treiber für Windows installiert werden. Geflasht wird dann mit dem USB Kabel der Spannungsversorgung.
Die 4-pol. Stecker haben das Rastermaß 2.0 mm.
Sonoff Dev Board Anbindung FHEM
je nach Anwendungszweck wird entweder ein normaler Schalter oder wie bei DHT16 beschrieben ein oder mehrere Sensoren angebunden. Beim Arends Sketch ist zu beachten, dass pro Sensorgruppe nur ein Sensor angeschlossen werden kann.
•DHT11 Temperature and Humidity - DHT11 (1) in group 1 •DHT21 Temperature and Humidity - AM2301 (2) in group 1 •AM2301 Temperature and Humidity - AM2301 (2) in group 1 •DHT22 Temperature and Humidity - DHT22 (3) in group 1 •AM2302 Temperature and Humidity - DHT22 (3) in group 1 •AM2321 Temperature and Humidity - DHT22 (3) in group 1 •DS18B20 Temperature - DS18x20 (4) in group 2 Enable option USE_DS18x20 in user_config.h for multiple sensors using OneWire library •DS18S20 Temperature - DS18x20 (4) in group 2 Enable option USE_DS18x20 in user_config.h using OneWire library •External switch - Switch (9) Use SwitchMode to tune it's behaviour •HC-SR501 PIR Motion Detection - Switch (9) Use SwitchMode to tune it's behaviour
Beispiel: 2 DHT22 funktionieren nicht, aber ein DHT22 und ein DS18b20 schon. Wer mehrere Sensoren benötigt, muss auf ESPEasy ausweichen.
--Reinhart (Diskussion) 23. Feb. 2017 (CET)