ESP8266 PIN in FHEM abfragen/einlesen

Begonnen von hardtacker, 21 Februar 2017, 20:02:40

Vorheriges Thema - Nächstes Thema

hardtacker

Guten Abend,

ich möchte mehrere ESP8266-12F Module in Fhem anlegen. Dafür nutze ich EasyESP.

Die Einbindung funktioniert soweit und bekomme auch Sensorwerte angezeigt.

Nun möchte ich gerne einen PIN des Moduls 8266 als Eingang nutzen und über den Eingang dann weitere Ereignisse steuern.

Meine Frage ist nun, wie kann ich diesen PIN des ESP über FHEM abfragen, ob dort gerade der Eingang low oder high ist?

Funktioniert das mit notify? In EasyESP gibt es dort keine Funktion für?

Hat jemand eine Idee oder Codebeispiel?

Vielen Dank


dev0

Falls Du ESPEasy meinst, dann kannst Du ein Device vom Typ Input Switch anlegen, dass den Staus aktiv sendet und in FHEM mit einem Notify darauf reagieren.

hardtacker

Hallo,

ja meine ESPEasy, sorry.

Habe den Input Switch schon angelegt.

Aber dieser Type erfüllt nicht meine Anforderung.

Der Switch erkennt ja keine Pegeländerung am Eingang oder?

Sprich wenn ich über ein Jumperkabel einen Schalter simuliere und abwechselnd 3.3V oder 0V anlege, ändert sich der Zustand des Schalter nicht.




dev0

Doch, genau das macht der Switch. Beispiele dazu findest du u.a. Im Sonoff Wiki.

hardtacker

#4
Hallo,

mittlerweile wird der Status in ESP Easy mit Switch Input angezeigt und auch immer verändert.

Nur bekomme ich die Integration in FHEM nicht hin.

Habe mir mal den Code vom Sonoff Beispielen zusammengesetzt, aber der Status in FHEM bleibt offen:

define ESPEasy_Switch_PUMP ESPEasy 192.168.0.23 80 ESPBridge Switch_PUMP
attr ESPEasy_Switch_PUMP IODev ESPBridge
attr ESPEasy_Switch_PUMP Interval 60
attr ESPEasy_Switch_PUMP group ESPEasy Device
attr ESPEasy_Switch_PUMP devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest .*:ios-NACK:check
attr ESPEasy_Switch_PUMP eventMap /gpio 13 on:on/gpio 13 off:off/status gpio 13:check/
attr ESPEasy_Switch_PUMP icon sani_domestic_waterworks
attr ESPEasy_Switch_PUMP presenceCheck 1
attr ESPEasy_Switch_PUMP readingSwitchText 1
attr ESPEasy_Switch_PUMP setState 0
attr ESPEasy_Switch_PUMP stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Relay","")}
attr ESPEasy_Switch_PUMP webCmd :


Ich nutze nur das ESP Modul mit einem Taster an GPIO 13.

Kann ich dann überhaupt Sonoff nutzen?

Was mache ich flasch?

dev0

Zitat von: hardtacker am 22 Februar 2017, 00:55:47
Nur bekomme ich die Integration in FHEM nicht hin.

Das hat mit FHEM Interagtion nichts zu tun, der ESP sendet mE die Daten noch nicht.
In der ESP Device Config:
- Delay > 0
- IDX/Var > 0
- Name nuß gestzt sein
- Value Name muss gestzt sein

gahle

Guten Morgen,

habe das in ähnlicher Weise gemacht, mir eine eigene WLAN-Steckdose gebaut..Sollen noch mehrere werden..Habe ebenfalls ESPEasy verwendet und den ESP8266-01 in FHEM eingebunden, das schalten klappt immer, nur die Statusrückmeldung, da habe ich Schwierigkeiten.

In FHEM kommen Daten an, aber der Status wird nicht immer richtig angzeigt. Wieso kommt nach einem Schaltvorgang, der Antwort von ESPEasy der Statuswechsel (on/off) nicht immer richtig durch? Insbesondere wird das "Off" in dann der WlanSteckDose in FHEM nicht richtig dargestellt...Entweder stark zeitverzögert oder gar nicht..

Anbei der Code

#********************************************************************
#EspEasy-WLANFunksteckdosen
#Definiton des Message-Brokers
#********************************************************************
define mqtt MQTT 192.168.178.45:1883
attr mqtt room Test

#********************************************************************
#Definiton des Devices/StatusDarstellung
#********************************************************************
define WLanSteckDose MQTT_DEVICE
attr WLanSteckDose IODev mqtt
attr WLanSteckDose devStateIcon on:ios-on-green off:ios-NACK
attr WLanSteckDose eventMap 0:off 1:on
attr WLanSteckDose room Test
attr WLanSteckDose stateFormat state
attr WLanSteckDose subscribeReading_state[b] /hooks/devices/15/SensorData/state[/b]

#********************************************************************
#Define des Schalters
#********************************************************************
define Relais dummy
attr Relais room Test
attr Relais setList on off
attr Relais webCmd on:off
define Steckdose_notify_on notify Relais:on {fhem "set WLanSteckDosen on";;GetHttpFile("192.168.178.28","/control?cmd=GPIO,0,0")}
define Steckdose_notify_off notify Relais:off {fhem "set WLanSteckDose off";;GetHttpFile("192.168.178.28","/control?cmd=GPIO,0,1")}


Ich schalte das Releais der WLANSteckdose und dort soll sich nur der Status on/off ändern,.

Hier noch die Rückmeldung von ESPEasy im Logfile von FHEM...
2017.02.22 06:34:34 3: set WLanSteckDose on : Unknown argument 1, choose one of
2017.02.22 06:34:34 3: Steckdose_notify_on return value: {
"log": "GPIO 0 Set to 0",
"plugin": 1,
"pin": 0,
"mode": "output",
"state": 0
}

2017.02.22 06:34:37 3: set WLanSteckDose off : Unknown argument 0, choose one of
2017.02.22 06:34:37 3: Steckdose_notify_off return value: {
"log": "GPIO 0 Set to 1",
"plugin": 1,
"pin": 0,
"mode": "output",
"state": 1
}


Also, das Schalten klappt (sehe ich an der LED des ESP...).
Warum die falsche Statusdarstellung ??

@hard

Gruss
gahle



dev0

Zitat von: gahle am 22 Februar 2017, 08:05:19
habe das in ähnlicher Weise gemacht, mir eine eigene WLAN-Steckdose gebaut..

Das mag ja sein, aber was hat das mit der Fragestellung des TO zu tun? Zumal Du eine wilde Mischung aus GetHttpFile() und MQTT benutzt und nicht das ESPEasy Modul....

hardtacker

Hallo,

habe es nun wieder soweit ans laufen bekommen.

Der Status des Switches ändert sich und wird mir auch in FHEM angezeigt.

Anbei mein Fhem.cfg


define ESPEasy_Switch_Taster ESPEasy 192.168.0.23 80 ESPBridge Switch_Taster
attr ESPEasy_Switch_Taster IODev ESPBridge
attr ESPEasy_Switch_Taster Interval 300
attr ESPEasy_Switch_Taster group ESPEasy Device
attr ESPEasy_Switch_Taster presenceCheck 1
attr ESPEasy_Switch_Taster readingSwitchText 1
attr ESPEasy_Switch_Taster room ESPEasy
attr ESPEasy_Switch_Taster setState 3



Nun stellt sich noch die Frage bei mir, wie ich den Status in Fhem abfragen kann.

Möchte wenn der Status auf on steht, die Lampe geschaltet wird.


Hier der Status vom Eventmonitor:

2017-02-22 11:12:58 ESPEasy ESPEasy_Switch_Taster Relay: off
2017-02-22 11:12:58 ESPEasy ESPEasy_Switch_Taster Rel: off
2017-02-22 11:12:59 ESPEasy ESPEasy_Switch_PUMP Relay: off
2017-02-22 11:13:01 ESPEasy ESPEasy_Switch_Taster Relay: on
2017-02-22 11:13:01 ESPEasy ESPEasy_Switch_Taster Rel: on
2017-02-22 11:13:02 ESPEasy ESPEasy_Switch_PUMP Relay: on
2017-02-22 11:13:03 ESPEasy ESPEasy_Switch_Taster Relay: off
2017-02-22 11:13:03 ESPEasy ESPEasy_Switch_Taster Rel: off
2017-02-22 11:13:04 ESPEasy ESPEasy_Switch_Taster Relay: on
2017-02-22 11:13:04 ESPEasy ESPEasy_Switch_Taster Rel: on


Wie kann ich allgemein den State abfragen, damit ich das auch für die Zukunft weiter nutzen kann.

Möchte später in Abhängigkeit von mehreren Bedingungen unterschiedliche Verbraucher schalten.

Welche Vorgehensweise wähle ich hier am Besten?

Danke & Gruß

hardtacker

Hatte gedacht, dass ich so die Steuerung aufbauen könnte:


Define Schalter1Notify notify ESPEasy_Switch_Taster:Relay set Lampe_WZ %


Das :Relay taucht auf, da ich bei dem Schalter in ESP Easy unter Value diesen Namen vergeben habe.

Aber leider funktioniert dieses noch nicht

hardtacker

Hiermit funktioniert es anscheinend

define nRollon notify ESPEasy_Switch_Taster { if(ReadingsVal("ESPEasy_Switch_Taster", "state", "") eq "Rel: on") {fhem ("set Lampe_WZ on")} }


define nRolloff notify ESPEasy_Switch_Taster { if(ReadingsVal("ESPEasy_Switch_Taster", "state", "") eq "Rel: off") {fhem ("set Lampe_WZ off")} }



Ist das denn die sauberste Lösung?

dev0

Zitat von: hardtacker am 22 Februar 2017, 11:29:05

Define Schalter1Notify notify ESPEasy_Switch_Taster:Relay set Lampe_WZ %


Die Notify regexp und das % sind nicht ok.
In der regexp fehlt das Leerzeichen, dass kannst Du durch \s oder einen Punkt ersetzen. Das % am Ende ist sinnfrei und sollte wohl $EVTPARTx sein. Details zum x stehen in der commandref/notify. Details zu regexps findest Du ua. hier: https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke

Besser ist es, wenn Du die regexp enger fast.


otto

Hallo noch eine Frage zu state wie bekomme ich die : raus Bekomme ein
state        Swi: 0  oder   Swi: 1
beim Auszustand/oder Ein
Und wegen dem Doppelpungt bekomm ich das im eventMap nicht hin?

Gruß otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

dev0

Was hat das mit dem Thema dieses Threads zu tun?
Das Attribut setState auf 0 setzen und Dich selbst um state/STATE kümmern.