Sonoff

Aus FHEMWiki

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:

User Manual von Itead

Sonoff Schaltplan


Hardware

Bitte unbedingt die elektrotechnischen Sicherheitsrichtlinien beachten und einhalten!

Warnung Netzspannung

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

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

Modelle

Model: IM151116002: Erstes Modell

Sonoff WiFi Wireless Smart Switch for MQTT COAP Smart Home

sonoff Switch

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

Platine

sonoff Switch von vorne

Die Platine ist sehr übersichtlich aufgebaut und der Hersteller hat auch alle Vorbereitungen zum Flashen einer alternativen Software vorgesehen (über serielle Schnittstelle via FTDI-Modul). Mit einer alternativen Software wie ESPEasy ist eine direkte Ankopplung des sonoff an FHEM somit ein leicht durchführbarer Vorgang.

sonoff Switch von hinten

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

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

Model: IM160712005: TH 10A/16A

Sonoff TH 10A/16A WiFi Smart Switch

TH10 / TH16 weitere GPIO zugänglich machen

TH10 / TH16 weitere GPIO zugänglich machen

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

Model: IM160811001: Sonoff Dual

Sonoff Dual WiFi Wireless Smart Swtich

Model: IM160810001: Sonoff Pow

Sonoff Pow WiFi Switch with Power Consumption Measurement

Model: weitere Modelle

Sonoff Weitere Modelle finden sich auf der Homepage des Hersstellers

Vorbereitungen zum Flashen

serielle Schnittstelle

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

Signale der Schnittstelle

von oben nach unten auf der Steckerleiste des sonoff U4 (Model: IM151116002).

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

Siehe dazu auch den Link aus dem Forum:

Platine mit Stiftleiste bestücken

Platine mit Stiftleiste bestücken

Der Hersteller hat zwar schon die Platine vorbereitet, jedoch muss sie noch mit einer Stiftleiste bestückt werden um das FTDI Modul bequem verbinden zu können. Nachdem einmal ESPEasy geflasht worden ist, kann es in Zukunft via WEB 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

sonoff mit angestecktem FDTI Adapter

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

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

mit Arduino compilieren

Einstellung Arduino IDE

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

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

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

fertige Binary flashen

NodeMCU Firmware Flasher

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

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

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

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

ESPEasy

ESPEasy Devices

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

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

Device Schalter

Device Relais

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

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

Device Taster

Device Key

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

Rules

Rules

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

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

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

ESPEasy in Fhem einrichten

Fhem Konfiguration

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

Damit Fhem mit ESPEasy und dem sonoff Modul kommunizieren kann, muss in der fhem.cfg vorerst nur die espBridge mit dem hier dargestellten Eintrag aktiviert werden.

define espBridge ESPEasy bridge 8383

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


##########################################
###             ESPEASY               ####
##########################################

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

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


sonoff Readings

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

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

MQTT Server einrichten

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

Arends Menü

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


Links zu Theo Arend Github

Download MQTT Sketch

Arend GitHub

Wiki



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


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


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


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

Link zum Wiki Arends, Button

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

Im Anschluß wird der Sketch mit der Arduino IDE (getestet mit 1.6.12) compiliert und die Binary dann exportiert. 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

Arends Menü


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 Console um die Ereignisse aus Sicht des Modules zu mitverfolgen zu können. Alles was hier gesendet wird, sollte ebenfalls am Server mitgelogt werden können. Wenn dies bis hierher alles funktioniert, kann dann mir der Konfiguration in Fhem begonnen werden.

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

mosquitto_sub -d -v -t \#  
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.

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

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

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

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

Bitte dies unbedingt in der Fhem Konfiguration dann beachten!

MQTT in Fhem einrichten

Fhem sonoff Schalter

Dieser einfache Schalter kommuniziert bidirektional mit dem sonoff Device.

Fhem sonoff Schalter

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

Die Einrichtung in Fhem wird von den Modulen 00_MQTT.pm, 10_MQTT_BRIDGE und 10_MQTT_DEVICE.pm unterstützt.

Link zum Forum: MQTT Fhem Einrichtung

### 1. Broker anlegen ###
define myBroker MQTT 10.0.0.5:1883
### 2. Fhem Device mit MQTT verbinden ###
define Sonoff_Switch MQTT_DEVICE
attr Sonoff_Switch IODev myBroker
attr Sonoff_Switch eventMap ON:on OFF:off
attr Sonoff_Switch icon hue_filled_br30
attr Sonoff_Switch publishSet ON OFF cmnd/sonoff/1/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!