Montag, 10. Juli 2017

Einbindung von ESPEasy Schaltern in FHEM

Die aktuellen Informationen findet man in der Doku  und im Forum.
Hier habe ich schon mal die Einbindung beschrieben.
ESPEasy kennt kein Relais Gerät als Output. Es kennt nur einen Switch Input. Ein GPIO Pin wird in dem Moment, wo man einen logischen Zustand setzt, einfach auf Ausgang gesetzt. Beispiel
in der ESPEasy Weboberfläche gpio,12,1
in FHEM set <ESPEasy Device Name> gpio 12 on
Genau genommen bräuchte man in ESPEasy für FHEM nichts definieren, allerdings würde das ESPEasy Modul dann auch kein Gerät erzeugen. Da man von seinem Schalter ja auch Lebenszeichen erhalten will, konfigurieren wir die Übertragung der Feldstärke (rssi) und als Status Rückmeldung einen Switch Input. Der eigentliche Schaltvorgang wird über eine eventMap erzeugt.
Durch die Wahl des Namen auf den Deviceseiten erzeugt man in FHEM ein oder mehrere Geräte. Der Name muss also nicht Unikat sein und soll es für diesen Fall auch nicht! Bei gleichen Namen erzeugt FHEM einfach ein weiteres Reading. Der Name im Feld Value bestimmt den Namen des Reading.

ESPEasy konfigurieren

Nach der WLAN Konfiguration mit dem Smartphone (mit ESP_0 verbinden) kommt man mit http://newdevice auf die Weboberfläche. Ich habe diesmal mit der Version 2.0.0 dev10 gearbeitet.
Die einzelnen Konfigurationsschritte (Seiten) immer mit Submit abschicken und das Häkchen bei Enabled nicht vergessen!

Config
Den Namen setzen: EDSPST1
Der neue Name ist im Browser sofort sichtbar, wirkt als Hostname aber erst nach dem nächsten Neustart.

Controllers
Hier ist ein Wert per default vorkonfiguriert, den ändern wir mit Edit.
Hinweis: Das Feld für Controller User und Password wird nur ausgefüllt wenn in FHEM bei der espBridge das Attribute authentication auf 1 gesetzt ist und die Werte für user und pass übergeben wurden!

Hardware
Keine Änderung.

Devices
Hier konfiguriert man zunächst zwei Geräte für die Relais, welche mit GPIO-12 und GPIO-13 verdrahtet sind.


Zusätzlich konfiguriert man noch den RSSI Wert, damit hat man eine Information über den WiFi Empfang des Moduls und dieser Wert sorgt für permanente Status Updates. Dieses Gerät erzeugt man zweimal, nur der Name wird unterschiedlich SW1 bzw. SW2.

Zum Schluss sieht die Konfiguration so aus

Pro vergebenen Device Namen (Name Spalte) wird von der espBridge ein Gerät erzeugt. Der Value Name (Value Spalte) erzeugt je ein Reading.
In FHEM sind durch diese Konfiguration zwei Geräte mit je zwei Readings entstanden.

FHEM konfigurieren

Durch die Übertragung der rssi Werte hat die espBridge in FHEM zwei Geräte erzeugt mit dem Namen ESPEasy_EDSPST1_SW1 und ESPEasy_EDSPST1_SW2. Diese muss man jetzt noch so konfigurieren, das die Schalter auch bedient werden können. Das wichtigste ist eine eventMap:
attr ESPEasy_EDSPST1_SW1 eventMap /gpio 12 on:on/gpio 12 off:off/
attr ESPEasy_EDSPST1_SW2 eventMap /gpio 13 on:on/gpio 13 off:off/
Damit entstehen on und off Kommandos für den set Befehl und für webCmd. Jetzt kann man die Schaltfunktion prüfen.

Damit der Status richtig angezeigt wird, braucht man noch ein angepasstes stateFormat

attr ESPEasy_EDSPST1_SW1 stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Switch","")}

Das sieht jetzt schon mal gut aus, ist aber noch nicht perfekt.

Nur mal zur Vollständigkeit die bis hierher komplette Definition, also das automatisch Erzeugte und Ergänzungen/Änderungen:
defmod ESPEasy_ED230V_SW1 ESPEasy 192.168.178.107 80 espBridge ED230V_SW1
attr ESPEasy_ED230V_SW1 IODev espBridge
attr ESPEasy_ED230V_SW1 Interval 300
attr ESPEasy_ED230V_SW1 eventMap /gpio 12 on:on/gpio 12 off:off/
attr ESPEasy_ED230V_SW1 group ESPEasy Device
attr ESPEasy_ED230V_SW1 presenceCheck 1
attr ESPEasy_ED230V_SW1 readingSwitchText 1
attr ESPEasy_ED230V_SW1 room ESPEasy
attr ESPEasy_ED230V_SW1 setState 3
attr ESPEasy_ED230V_SW1 stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Switch","")}


Mit attr <> setState 0 kann man die interne Erzeugung des state Readings ausschalten. Nun kann man mit verschiedenen Methoden z.B. einem userReadings sein eigenes state erzeugen.
state {ReadingsVal($name,"Switch","") }

Noch die Idee aus dem Forum für on-for-timer muss ich noch probieren

attr <deinEsp> eventMap /longpulse 5 on:on-for-timer/longpulse 5 off:off-for-timer/gpio 5 on:on/gpio 12 off:off/status gpio 15:check/

Hier wird noch gearbeitet ...

18 Kommentare:

  1. Hi und danke!
    Geniale Erklärung, v.a. für einen n00b wie mich. Endlich kann ich meine Wohnung auf Sonoff Touch Lichtschalter (ESPEasy flashed) umrüsten, ohne auf die Steuerung vom Handy zu verzichten.
    Das Einzige, was bei mir nicht auf Anhieb läuft ist die korrekte Anzeige, ob die Lampe an oder aus ist, aber ich denke auch das wird sich jetzt finden.

    AntwortenLöschen
  2. Klappt super!
    Nur zeigt er bei mir das nette Glühbirnensymbol überhaupt nicht an? Eine Idee woran das liegen kann?

    Grüße, Klaus

    AntwortenLöschen
    Antworten
    1. Hallo Klaus, das Glühlampensymbol hängt vom STATE ab. Ist der on oder off wird dieses Wort durch das Lampensymbol ersetzt. Was zeigt er bei Dir?

      Gruß Otto

      Löschen
    2. Hallo Otto,
      vielen lieben Dank für Deine schnelle Antwort. Habe eben noch mal alles geprüft und einen Fehler (klein/GROSS) im "stateFormat" attr entdeckt, jetzt klappt alles!
      Vielen Dank, Grüße Klaus

      Löschen
  3. Hallo und Guten Abend
    Sehr schöne anleitung, genausowas hatte ich gesucht.
    Bei mir brauchte ich den schritt mit der RSSI nicht machen (okay wenn man die Feldstärke haben möchte ist das was anderes ;) ).
    Ich hab einfach nen delay bei den Switchinputs eingegeben und an FHEM schicken lassen.
    Das aktualisiert sich alle 60s und zeigt immer den aktuellen status an.
    grüße

    AntwortenLöschen
  4. Hallo, und vielen dank für diese, und viele andere Anleitungen die Du hier machst! Leider bin ich immer noch Noob und, obwohl es alles klappt, richtig verstanden habe ich nicht alles. Deswegen meine Frage: Ich habe einen Basic und mehrere S20. Soweit kann ich jetzt durch diese Anleitung die Geraete per FHEM schalten. Allerdings funkioniert der Schalter an den Sonoffs nicht, bzw die schalten die Sonoffs nicht an/aus. Bei dem Basic schaltet sich nur das LED am Schalter an, aber der Sonoff selbst nicht. Beim S20 passiert garnichts wenn ich den Knopf druecke. Was mache ich da falsch? Danke schon im Voraus...

    AntwortenLöschen
  5. Bei der aktuellen Version vom ESP Easy geht es auch ohne eine zweites Device vom Typ System Info. Einfach beim Device "Switch input - Switch" die beiden Optionen "Send Boot state" und "Send to Controller" aktivieren. Dann sendet der ESP den Zustand automatisch an FHEM.

    AntwortenLöschen
  6. Hallo Otto,
    ich habe eben einen ESP-01S mit ESPEasy erfolgreich gefasht und FHEM HTTP eingestellt, die Bridge eingerichtet und zwei Switch Inputs auf die GPIO's 0 und 2 gelegt. Soweit müsste alles passen.

    In Fhem werden mir leider keine Devices eingerichtet! Wenn ich manuell eines einrichte erscheint nur der state "opened", aber kein Status des GPIO.

    Eine Idee,woran das liegen könnte?

    AntwortenLöschen
  7. Hallo,
    das Problem hat sich durch die Verwendung von ESPEasy Mega 2.0 statt R147 gelöst. Jetzt läuft alles. Vielen Dank nochmal für die tolle Anleitung!

    AntwortenLöschen
  8. Hallo
    ich bin am verzweifeln. Versuche schon 14 Tage einem on bzw. off ein Icon zuzuweisen. Alle Anleitungen habe ich schon probiert, nur kein Erfolg. Wenn ich ein dummy Device erstelle klappt es wunderbar nur kann ich keine Gpios schalten. Wenn es bei etwas eigentlich einfaches schon scheitert, was soll erst bei komplexeren Sachen sein.

    AntwortenLöschen
  9. Hallo Otto,

    klasse Erklärung. Wie könnte man mit ESPEasy einen Schalter bauen der per Batterie versorgt wird? Man kann so einen ESP8266 ja in den Deep Sleep versetzen und ihn mit der RST Leitung wieder aufwecken und dabei Befehle ausführen zu lassen und ihn danach wieder schlafen schicken. Aber wie könnte man in FHEM da Schaltungen auslösen? Also wie ein Taster der bei jeder Betätigung eine Lampe toggelt.
    Wäre klasse wenn Du da auch eine Lösung hättest.

    Gruß
    Dieter

    AntwortenLöschen
    Antworten
    1. Hallo Dieter,
      na im Prinzip ist das was Du willst nichts anderes als hier beschrieben https://heinz-otto.blogspot.com/search?q=wassermelder

      Gruß Otto

      Löschen
  10. Hallo Otto,

    danke für die Info - klar das geht super für meinen Anwendungsfall.

    So wie ich das Beispiel verstehe ist es so das solange wie ([ESPEasy_Wassermelder_WM1:presence] eq "present") (set Wassermelder_dummy on)\
    DOELSE (set Wassermelder_dummy off)

    der Wassermelder present ist der Dummy auch on ist.

    Wie bekommt man dann eine Art Toggle befehl hin?

    Also einmal "present" Dummy ein und dann beim nächsten "present" Dummy wieder aus?

    Gruß
    Dieter

    AntwortenLöschen
    Antworten
    1. Hall Dieter,

      der Dummy kann doch toggle. Mit attr useSetExtensions 1 uns setList on off geht das.

      Gruß Otto

      Löschen
  11. Hallo Otto
    Wie bekomme ich hin per Notify eine Tosmata Steckdose zu Schalten??
    Ausgang WemoD1 mit bewegungsmelder state bei Fhem alles ok

    AntwortenLöschen
    Antworten
    1. Hallo, notify geht am Einfachsten immer mit dem Eventmonitor. Hier in Punkt 3.1 beschrieben https://wiki.fhem.de/wiki/Notify

      Gruß Otto

      Löschen
    2. DAAAAAAAANKE hat mir geholfen!!!!

      Löschen
  12. Hallo Otto,

    da Du mir schon mehrfach erfolgreich geholfen hast hätte ich da wieder mal eine Frage ;-)

    Die einzelnen Pins direkt am ESP Chip zu schalten ist ja kein Problem aber was ich wenn man mehr Ausgänge benötigt als vorhandene Pins?
    Bei Let#s Control it gibt es ja mehrere Möglichkeiten einen Port-Baustein per i2C zu schalten. Sind diese "Portvervielfältiger" Bausteine wie z.B. der MCP23017 im Fhem Modul mit eingearbeitet? Ich habe dazu zwar schon einige andere Anfragen in diversen Foren gelesen aber keine endgültige Anleitung wie es geht.

    Es wäre klasse wenn Du mich auch hier mal erhellen könntest.

    Danke und Gruß
    Dieter

    AntwortenLöschen