[HowTo] Sonoff - 230V Relais mit ESP8266

Begonnen von gloob, 27 Juni 2016, 14:52:17

Vorheriges Thema - Nächstes Thema

dev0

Zitat von: Reinhart am 16 Oktober 2016, 21:28:52
Das einzige Problem was noch bleibt, wird am sonoff mit dem Taster geschalten, dann erfolgt keine Rückmeldung an Fhem, vielleicht hat hier noch jemand ein Idee.
In Verbindung mit dem ESPEasy Modul funktioniert das problemlos.

In der ersten geposteten Regel fehlt mMn im on..do ein =1, da zumindest bei mir, der Button beim Drücken und beim Loslassen je ein Event erzeugt. Daruch müsste das Relay eingentlich nur so lange angezoigen bleiben, wie der Button gedrückt wird.

Ich habe es mit folgender Rule umgesetzt:

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

PUMP = 'Device Name',
Key = 'Value Name' des Tasters
Relay = 'Value Name' des Relays

majorshark

Zitat von: Reinhart am 16 Oktober 2016, 21:28:52Das einzige Problem was noch bleibt, wird am sonoff mit dem Taster geschalten, dann erfolgt keine Rückmeldung an Fhem, vielleicht hat hier noch jemand ein Idee.

Ich habe das bei mir so gelöst.
Taster als Switch Input und Switch Button Type: Push Button Active Low definiert. Dieses Device sendet keine Daten.
Dann das Relays als Switch Input definiert. Dieses Device sendet dann die Daten an FHEM. Ob der Button gedrückt ist interresiert mich dafür im FHEM nicht, sodern nur ob das Relays geschaltet hat.

Meine Rules sehen auch ein wenig anders aus.
on Button#Value do
if [Button#Value]=1
  gpio,12,1
else
  gpio,12,0
endif
endon

on Relay#Value do
if [Relay#Value]=1
  gpio,15,0
else
  gpio,15,1
endif
endon


Der Button schaltet das Relays und das Relays die LED.
GPIO 15 ist bei mir die Rote LED. Die Grüne habe ich als WiFi LED definiert.
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Reinhart

Danke euch beiden für die Vorschläge!

Im Beispiel von dev0 funktioniert bei mir beim sonoff die Taste nur bei jedem zweiten Druck. Außerdem ist die Led verkehrt definiert, weil gpio 12 0 = Leuchtet und gpio 12 1 = finster (zumindest bei meinem sonoff Modell).

Das Beispiel von majorshark, was im wesentlichen auch meiner Konfiguration entspricht, habe ich noch die Variablennamen etwas geändert, aber das funktioniert relativ gut bis auf den kleinen Fehler der Rückmeldung.

ZitatIn Verbindung mit dem ESPEasy Modul funktioniert das problemlos.
dev0 schreibt ja, dass sollte so funktionieren, tut es aber bei mir definitiv nicht. Vielleicht liegt der Fehler auch in der Konfiguration im Fhem. Ist das Port 80 hier richtig?

define ESPEasy_sonoff_1_Relais ESPEasy 10.0.0.37 80 espBridge sonoff_1_Relais
attr ESPEasy_sonoff_1_Relais IODev espBridge
attr ESPEasy_sonoff_1_Relais devStateIcon on:rc_GREEN:off off:rc_RED:on absent:rc_BLUE:statusRequest .*:rc_YELLOW:check
attr ESPEasy_sonoff_1_Relais eventMap /gpio 12 on:on/gpio 12 off:off/status gpio 12:check/
attr ESPEasy_sonoff_1_Relais group ESPEasy Device
attr ESPEasy_sonoff_1_Relais icon hue_filled_outlet
attr ESPEasy_sonoff_1_Relais room ESPEasy
attr ESPEasy_sonoff_1_Relais stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"GPIO12","")}
#attr ESPEasy_sonoff_1_Relais devStateIcon off:rc_GREEN:on on:rc_RED:off
attr ESPEasy_sonoff_1_Relais webCmd :

define ESPEasy_sonoff_1_Key ESPEasy 10.0.0.37 80 espBridge sonoff_1_Key
attr ESPEasy_sonoff_1_Key IODev espBridge
attr ESPEasy_sonoff_1_Key group ESPEasy Device
attr ESPEasy_sonoff_1_Key icon time_manual_mode
attr ESPEasy_sonoff_1_Key room ESPEasy

Fhem Definition

on Key#KeyVal do
  if [Key#KeyVal]=1
    gpio,12,1
  else
    gpio,12,0
  endif
endon
on Relais#RelaisVal do
  if [Relais#RelaisVal]=1
    gpio,13,0
  else
    gpio,13,1
  endif
endon

Rule am ESP

Ich habe hier einfach eine rote und grüne Taste für Ein/Ausschalten definiert, was in Fhem auch tadellos (und sofort) funktioniert. lediglich ändert sich die Farbe der Taste in Fhem nicht, wenn am sonoff mit dem Taster geschaltet wird. Es ist mir aber nicht so wichtig, weil der Taster ohnehin nur zu Testzwecken gedrückt wird. Ist das Device einmal verbaut, schaltet eh keiner mehr am Taster.

Es kann aber auch sein, das es eventuell doch um unterschiedliche Versionen/Modelle handelt, wenn dies bei euch funktioniert.
Ansonsten ist das Modul 34_ESPEasy.pm schon eine gewaltige Komfortsteigerung, danke nochmals dafür!

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

dev0

Zitat von: Reinhart am 17 Oktober 2016, 11:09:01
Im Beispiel von dev0 funktioniert bei mir beim sonoff die Taste nur bei jedem zweiten Druck.
Außerdem ist die Led verkehrt definiert, weil gpio 12 0 = Leuchtet und gpio 12 1 = finster
Wenn es mit meiner Rule bei Dir nur bei jedem 2. Tastendruck funktioniert, dann haben wir andersweitig wohl unterschiedliche Konfigurationen. Aber ist ja ok, wenn es bei Dir funktioniert, darauf kommt es ja an.
Die LED soll bei mir tatsächlich bei off leuchten, hängt halt vom Anwendungszweck ab.

Zur Rückmeldung an FHEM: Wenn Du das aktuelle ESPEasy Modul und eine aktuelle ESPEasy Version auf dem ESP hast, dann scheint der ESP die Daten nicht zu senden. Ob die Daten gesendet werden oder nicht, kannst Du sehen, wenn Du den log level auf verbose 5 setzt. Haken bei "send data" vergessen?

JoWiemann

Hallo,

hast Du in der Device Definition des Sonoff Send Data gesetzt. Weiterhin scheint es hilfreich zu sein einen Wert in IDX / Var: anzugeben.

Außerdem ändere bitte Dein stateFormat nach:


{ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Relais","")}


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Reinhart

so, ich habe jetzt mitgelogt und folgende Erkenntnis gewonnen.

# am sonoff mit Taster eingeschaltet
2016.10.17 13:58:08 5: ESPEasy espBridge_10.0.0.37_19172: received header: {'Connection' => 'close','Content-Length' => '213','Host' => '10.0.0.5'}
2016.10.17 13:58:08 5: ESPEasy espBridge_10.0.0.37_19172: received content: {"module":"ESPEasy","version":"1.02","data":{"ESP":{"name":"sonoff_1","unit":37,"version":9,"build":137,"sleep":0,"ip":"10.0.0.37"},"SENSOR":{"0":{"deviceName":"Key","valueName":"KeyVal","type":10,"value":true}}}}
2016.10.17 13:58:08 4: ESPEasy espBridge_10.0.0.37_19172: no basic authentication required
2016.10.17 13:58:08 4: ESPEasy espBridge_10.0.0.37_19172: send http close '200 OK'
2016.10.17 13:58:08 5: ESPEasy espBridge_10.0.0.37_19172: dispatch: sonoff_1_Key::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||KeyVal||true||10
2016.10.17 13:58:08 5: espBridge dispatch sonoff_1_Key::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||KeyVal||true||10
2016.10.17 13:58:08 4: ESPEasy ESPEasy_sonoff_1_Key: KeyVal: true
2016.10.17 13:58:08 5: ESPEasy ESPEasy_sonoff_1_Key: internals: unit:37 sleep:0 build:137
2016.10.17 13:58:08 5: Triggering ESPEasy_sonoff_1_Key (1 changes)
2016.10.17 13:58:08 5: Starting notify loop for ESPEasy_sonoff_1_Key, first event KeyVal: true
2016.10.17 13:58:08 5: Notify from Device: ESPEasy_sonoff_1_Key recieved
2016.10.17 13:58:08 4: ESPEasy espBridge_10.0.0.37_19172: temporary bridge device deleted
2016.10.17 13:58:09 4: Connection accepted from espBridge_10.0.0.37_9437
2016.10.17 13:58:09 5: ESPEasy espBridge_10.0.0.37_9437: received header: {'Connection' => 'close','Content-Length' => '219','Host' => '10.0.0.5'}
2016.10.17 13:58:09 5: ESPEasy espBridge_10.0.0.37_9437: received content: {"module":"ESPEasy","version":"1.02","data":{"ESP":{"name":"sonoff_1","unit":37,"version":9,"build":137,"sleep":0,"ip":"10.0.0.37"},"SENSOR":{"0":{"deviceName":"Relais","valueName":"RelaisVal","type":10,"value":true}}}}
2016.10.17 13:58:09 4: ESPEasy espBridge_10.0.0.37_9437: no basic authentication required
2016.10.17 13:58:09 4: ESPEasy espBridge_10.0.0.37_9437: send http close '200 OK'
2016.10.17 13:58:09 5: ESPEasy espBridge_10.0.0.37_9437: dispatch: sonoff_1_Relais::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||RelaisVal||true||10
2016.10.17 13:58:09 5: espBridge dispatch sonoff_1_Relais::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||RelaisVal||true||10
2016.10.17 13:58:09 4: ESPEasy ESPEasy_sonoff_1_Relais: RelaisVal: true
2016.10.17 13:58:09 5: ESPEasy ESPEasy_sonoff_1_Relais: internals: unit:37 sleep:0 build:137
2016.10.17 13:58:09 5: Triggering ESPEasy_sonoff_1_Relais (1 changes)
2016.10.17 13:58:09 5: Starting notify loop for ESPEasy_sonoff_1_Relais, first event RelaisVal: true
2016.10.17 13:58:09 5: Notify from Device: ESPEasy_sonoff_1_Relais recieved
2016.10.17 13:58:09 4: ESPEasy espBridge_10.0.0.37_9437: temporary bridge device deleted

# am sonoff ausgeschaltet
2016.10.17 14:02:44 4: Connection accepted from espBridge_10.0.0.37_17261
2016.10.17 14:02:44 5: ESPEasy espBridge_10.0.0.37_17261: received header: {'Connection' => 'close','Content-Length' => '213','Host' => '10.0.0.5'}
2016.10.17 14:02:44 5: ESPEasy espBridge_10.0.0.37_17261: received content: {"module":"ESPEasy","version":"1.02","data":{"ESP":{"name":"sonoff_1","unit":37,"version":9,"build":137,"sleep":0,"ip":"10.0.0.37"},"SENSOR":{"0":{"deviceName":"Key","valueName":"KeyVal","type":10,"value":true}}}}
2016.10.17 14:02:44 4: ESPEasy espBridge_10.0.0.37_17261: no basic authentication required
2016.10.17 14:02:44 4: ESPEasy espBridge_10.0.0.37_17261: send http close '200 OK'
2016.10.17 14:02:44 5: ESPEasy espBridge_10.0.0.37_17261: dispatch: sonoff_1_Key::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||KeyVal||true||10
2016.10.17 14:02:44 5: espBridge dispatch sonoff_1_Key::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||KeyVal||true||10
2016.10.17 14:02:44 4: ESPEasy ESPEasy_sonoff_1_Key: KeyVal: true
2016.10.17 14:02:44 5: ESPEasy ESPEasy_sonoff_1_Key: internals: unit:37 sleep:0 build:137
2016.10.17 14:02:44 5: Triggering ESPEasy_sonoff_1_Key (1 changes)
2016.10.17 14:02:44 5: Starting notify loop for ESPEasy_sonoff_1_Key, first event KeyVal: true
2016.10.17 14:02:44 5: statistics Wasser_Statistik: Notify.266 Notification of 'ESPEasy_sonoff_1_Key' received. Device not monitored.
2016.10.17 14:02:44 5: Notify from Device: ESPEasy_sonoff_1_Key recieved
2016.10.17 14:02:44 4: ESPEasy espBridge_10.0.0.37_17261: temporary bridge device deleted
2016.10.17 14:02:45 4: Connection accepted from espBridge_10.0.0.37_19324
2016.10.17 14:02:45 5: ESPEasy espBridge_10.0.0.37_19324: received header: {'Connection' => 'close','Content-Length' => '219','Host' => '10.0.0.5'}
2016.10.17 14:02:45 5: ESPEasy espBridge_10.0.0.37_19324: received content: {"module":"ESPEasy","version":"1.02","data":{"ESP":{"name":"sonoff_1","unit":37,"version":9,"build":137,"sleep":0,"ip":"10.0.0.37"},"SENSOR":{"0":{"deviceName":"Relais","valueName":"RelaisVal","type":10,"value":true}}}}
2016.10.17 14:02:45 4: ESPEasy espBridge_10.0.0.37_19324: no basic authentication required
2016.10.17 14:02:45 4: ESPEasy espBridge_10.0.0.37_19324: send http close '200 OK'
2016.10.17 14:02:45 5: ESPEasy espBridge_10.0.0.37_19324: dispatch: sonoff_1_Relais::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||RelaisVal||true||10
2016.10.17 14:02:45 5: espBridge dispatch sonoff_1_Relais::10.0.0.37::1::1::1::i||unit||37||0|||i||sleep||0||0|||i||build||137||0|||r||RelaisVal||true||10
2016.10.17 14:02:45 4: ESPEasy ESPEasy_sonoff_1_Relais: RelaisVal: true
2016.10.17 14:02:45 5: ESPEasy ESPEasy_sonoff_1_Relais: internals: unit:37 sleep:0 build:137
2016.10.17 14:02:45 5: Notify from Device: ESPEasy_sonoff_1_Relais recieved
2016.10.17 14:02:45 4: ESPEasy espBridge_10.0.0.37_19324: temporary bridge device deleted


soweit ich jetzt sehen kann, wird von ESPEasy das Event erkannt (Tastendruck am sonoff) und sofort an Fhem gesendet. Die Statusvariable des Relais (RelaisVal) wird übertragen, bleibt aber immer auf "true", egal ob ein oder ausgeschaltet wird. Ich glaube das ist der Grund, warum sich in Fhem bei mir der Status nicht ändert.  Im Webif des sonoff ändert sich natürlich die Variable "Relaisval" so wie sie es soll, egal ob der Befehl mittels Taster oder von Fhem kommt.

Habt ihr auch die ESPEasy Version 137?

@joWiemann
wenn ich das stateFormat ändere kann ich den Button in Fhem nicht mehr schalten.

LG
Reinhart

FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

dev0

Die verwendete arduinoJson Library ist zu alt, entweder selbst kompilieren (min. R128) oder die Binaries aus R140_RC3 nutzen:
http://www.esp8266.nu/index.php/Main_Page#Release_candidates

Steht alles im ersten Beitrag dieses Threads:
https://forum.fhem.de/index.php/topic,55728.msg473220.html#msg473220

oli82

@ Reinhart

Habe gerade mal bei mir geschaut.
Also der Status wird definitiv richtig übertragen. Kann mich dev0 nur anschließen

Reinhart

@oli82
kannst du bitte einmal mit dem Taster am sonoff einschalten und dann den "state" posten?

@dev0
ja Danke, die Sache mit der JsonLibrary ist mir bekannt, habe nach deinem Post auch die R140 compiliert und die macht genau dasselbe.

irgendwie sind bei mir die Valuenames von eintscheidender Bedeutung, zB: <= 3-stellig geht überhaupt nicht.

Kannst du mir sagen, ist dieser "state" des Relais in Ordnung?
GPI:off GPI:output Rel:true
es werden nur die ersten 3 Zeichen dargestellt (vermutlich eine Abkürzung von GPIO12 und GPIO12_mode).

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

dev0

Dann benutzt Du zum Kompilieren immer noch die alte ArduinoJson Library. Zu den Abkürzungen: siehe commandref attribut setState

oli82


Reinhart

Alles läuft!

Danke für eure viele Geduld und guten Ratschläge.

Entgegen meiner persönlichen Einstellung (ich compiliere immer lieber selber wenn möglich) habe ich nun die fertige Binary aus der R140 benutzt und die funktioniert tadellos so wie sie es soll. Ich konnte jetzt auch das stateformat noch richtig anpassen, was ja vorher nicht klappte.

Das Problem war, wie dev0 richtig bemerkt hat, meine Arduino Umgebung, hier bin ich immer noch an der Fehlersuche warum die korrekte Library nicht geladen wird obwohl die Pfade alle stimmen und auch in der R140 die richtigen Libs dabei hat. Das schwierige dabei ist das löschen aller alten Daten, da die überall verstreut sind (appdata und so obwohl sauber deinstalliert wurde).

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

oli82

Freut mich, dass es nun läuft.
Ich habe mittlerweile die IDE auf "portable" umgestellt, da ich zuhause, wie auch auf anderen PCs so schnell mal kompilieren kann.

bitbiter

Verzeiht meine amateurhafte Frage: Warum ein "Sonoff" nutzen? Geht es auch nicht hiermit?:
https://de.aliexpress.com/item/Free-shipping-1-channel-Relay-Shield-for-Wemos-D1-mini-Relay-Module-Smart-Electronics/32725339132.html?spm=2114.13010308.0.0.sYYW9X

Natürlich mit einem passenden Wemos Mini......

Ausser dem schicken Gehäuse bei dem Sonoff dürfte dies kein funktioneller Unterschied sein, oder irre ich mich?

Gruss
Alex
Raspi mit Homematic-CCU, KeyMatic mit FB, HM-SEC-MDIR-2, HM-Sec-Sco, HM-MOD-RPI-PCB, 2x LCGW m. CUL868 / CUL433. == BananaPi mit fhem + SSD, MAX! FK und TS, Cube read-only (demn. Umstieg --> CUL), mehrere TFA/LC Sensoren, Milight Controller + Bulbs, Revolt, ECO Taster, Home-Easy, ESP8266 etc....

gloob

Und gerade das schicke Gehäuse ist mir das Geld wert. Damit steigt der WAF ins unermessliche gegenüber der Bastellösung.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway