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

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