Auswertung von 2 Sensoren zu einem Zustand

Begonnen von Gear, 17 März 2018, 12:19:16

Vorheriges Thema - Nächstes Thema

Gear

Hallo Zusammen,

ich habe ein Fenster an dem zwei Fensterkontakte angebracht sind, einer oben, einer unten.
Nun wird wenn das Fenster gekippt, der eine Sensor ausgelöst und wenn das Fenster offen ist, dann werden beide ausgelöst.

Ich würde gerne aus beiden Sensoren folgende Zustände erzeugen:
- Geschlossen
- Offen
- Gekippt
- Error (wenn z.B. der untere ausgelöst ist und der obere nicht)

Wenn ich das richtig verstanden habe, dann muss das mit Notify gehen.
Da ich das gerne auf alle Fenster anwenden möchte, muss ich das vermutlich so anlegen, dass alle ESPEasy Geräte die ein Fenster sind wählen.

In dem Fall heißt das Device: ESPEasy_HA_MCU_ID104_Fenster
Und die weiteren werden bis auf die ID gleich heißen, somit müsste ich das Notify auf alle Devices anwenden, die so heißen: ESPEasy_HA_MCU_ID.*_Fenster

Für mich ist das alles neu, ich kann zwar programmieren, jedoch fällt es mir leider etwas schwer mich richtig einzufinden in FHEM.

Evtl. ein kleines Beispiel, damit ich in Zukunft solche Probleme selbstständiger lösen kann. =)

Grüße
Gear
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Gear

Hallo CoolTux,

danke für den Tip, hatte ich aber schon versucht, irgendwie verstehe ich Structure nicht.

Ich dachte einfach ein Notify, nen bissel Code und fertig.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Otto123

Hallo Gear,

dann such Dir doch erstmal die Events aus, auf Du du reagieren möchtest. Und ein notify legt Dir der Eventmonitor auch an, wenn Du willst:
https://wiki.fhem.de/wiki/Event_monitor

Darauf kannst Du dann aufbauen.

Dein Vorschlag ist eventuell als Device regEx zu gebrauchen ESPEasy_HA_MCU_ID.*_Fenster aber Du brauchst mit Sicherheit noch einen Einschränkung der Events.

Es gibt viele Wege für Deinen Wunsch. Wie willst Du den Zustand darstellen? Anfänger nehmen dafür gern einen dummy.
Du kannst im notify den Zustand der Sensoren abfragen.

Pseudo Code Ansatz:
define n_Fenster notify  ESPEasy_HA_MCU_ID.*_Fenster IF ([Kontakt1] eq "offen" and [Kontakt2] eq "offen")(set Dummy offen)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Gear

Hallo Otto,

danke für deine Antwort.

Ich muss mich an dieser Stelle entschuldigen, ich habe eine Lese- Rechtschreibschwäche, die leider nicht behandelbar ist, da sie von einer Behinderung kommt.
Mir fällt es leider schwer mich in neue Themen einzuarbeiten, da es am Anfang wenn man neue ist, einfach zu viel ist für mich.
Ich kann solange ich etwas nicht richtig verstehe, dies auch nicht auf andere Anwendungsbereiche anwenden, da ich erstmal verstehen muss, wie das im Beispiel funktioniert und dann muss ich das irgendwie auf mein vorhaben anwenden. Leider verstehe ich manchmal die Beispiele nicht, dann fällt es mir schwer das in abgewandelter Form anzuwenden.

Also, FHEM legt bei mit mit ESPEasy das Fenster an, dieses Fenster hat 2 Sensoren, ich würde gerne wie auch immer, sobald sich ein Status ändert, diesen auswerten lassen und dann auch wieder, wenn möglich in das Device schreiben aus dem es die Fensterkontakte ausliest.
Ich hab z.B. leider auch nicht verstanden wie ich z.B. folgendes Device mit den "Kontakten" irgendwie auslesen kann.
Device: ESPEasy_HA_MCU_ID104_Fenster
Sensor 1: FO (on / off)
Sensor 2: FG  (on / off)

Kann man nicht in einem Notify eine if else abfrage einbauen, die den jeweiligen Status an das Device zurück gibt?
Wenn ja, wie bekomme ich die Sensoren rein und den Status raus.
Wenn nein, dann habe ich das falsch verstanden.

Es tut mir leid für die Umstände.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

Ich zeige Dir wie man es mit structure machen kann. gib mir etwas
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

#6
Statt wir bei mir die Dummys nimmst Du natürlich Deine Sensoren an dem Fenster.



Internals:
   ATTR       windowSensor
   CFGFN     
   CHANGEDCNT 15
   DEF        windowSensor sensorObenBadfenster sensorUntenBadfenster
   NAME       structureFensterBad
   NR         114
   NTFY_ORDER 50-structureFensterBad
   STATE      title
   TYPE       structure
   READINGS:
     2018-03-17 15:21:53   LastDevice      sensorObenBadfenster
     2018-03-17 15:21:53   LastDevice_Abs  sensorObenBadfenster
     2018-03-17 15:21:53   state           title
Attributes:
   clientstate_behavior relative
   clientstate_priority open tilted closed
   room       Test




Internals:
   CFGFN     
   NAME       sensorObenBadfenster
   NR         98
   STATE      on
   TYPE       dummy
   READINGS:
     2018-03-17 15:21:53   state           on
Attributes:
   room       Test
   userattr   structexclude windowSensor windowSensor_map
   windowSensor structureFensterBad
   windowSensor_map state:on:tilted state:off:closed



Internals:
   CFGFN     
   NAME       sensorUntenBadfenster
   NR         101
   STATE      off
   TYPE       dummy
   READINGS:
     2018-03-17 15:21:47   state           off
Attributes:
   room       Test
   userattr   structexclude windowSensor windowSensor_map
   windowSensor structureFensterBad
   windowSensor_map state:on:open state:off:closed


Das ist aber noch ohne Fehlermeldung wenn oben zu ist und unten auf was ja eigentlich nicht gehen dürfte.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Hallo Gear,

kein Problem. Cooltux und Ich sind eigentlich sehr geduldig. Wir bekommen das bestimmt parallel irgendwie hin. Also CoolTux versucht Dir die structure nahe zubringen und ich deine Fragen zum notify zu beantworten. Sag einfach wenn Du das eine oder andere nicht willst  ;)

Um Deine erste Frage mit Beispielen zu erklären bräuchte ich mal die Ausgabe von einem "list ESPEasy_HA_MCU_ID104_Fenster"
ZitatIch hab z.B. leider auch nicht verstanden wie ich z.B. folgendes Device mit den "Kontakten" irgendwie auslesen kann.
Device: ESPEasy_HA_MCU_ID104_Fenster
Sensor 1: FO (on / off)
Sensor 2: FG  (on / off)

Zu Deiner zweiten Frage:
ZitatKann man nicht in einem Notify eine if else abfrage einbauen, die den jeweiligen Status an das Device zurück gibt?

Ja, mein Code oben hat ja genau so etwas gemacht. Du möchtest keine extra dummy sondern den Status im Device selbst setzen? Dann machst Du einfach nicht ein set dummy sondern ein setstate.
Ich baue Dir ein konkretes Beispiel wenn ich Dein list habe.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Zitat von: Otto123 am 17 März 2018, 15:40:06
Ja, mein Code oben hat ja genau so etwas gemacht. Du möchtest keine extra dummy sondern den Status im Device selbst setzen? Dann machst Du einfach nicht ein set dummy sondern ein setstate.

Otto bitte nicht vergessen, setstate gibt kein Event. Sage es nur vorsichtshalber falls da später sowas gewünscht oder erforderlich sein sollte.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

@Cooltux - ich weiß. Will ich dies ja dann genau in dem Moment nicht: die ESPEasy Devices setzen ihren STATE sowieso separat. Dann könnte man den doch wirklich vom notify einfach überschreiben, wenn Gear das gerne so möchte.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Gear

Um noch mal nachzufragen, mit Reading überschreiben.
Wenn ich mich da evtl. falsch ausgedrückt haben sollte, ich möchte ein neues Reading hinterlegen lassen, welches den Status enthält der vom Notify.

expandJSON macht ja aus den JSON Daten von den SONOFF TH Geräten die Readings für Temperatur und Luftfeuchte.
Meine Idee war eben, genau dies zu erzeugen.
Oder Geht das bei den ESPEasy Devices nicht?

Ich versuche es gleich mal. :)
Danke!
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Otto123

klar geht auch, dann einfach setreading ESPEasy_HA_MCU_ID104_Fenster ZustandFenster offen oder so  :D

In meinem Beispiel mit dem IF kannst Du die existierenden Readings so abfragen [ESPEasy_HA_MCU_ID104_Fenster:FO] eq "offen" wenn das Reading FO heisst.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

eisman

#12
hi, hab es so bei einigen Fenstern gelöst


([ESPEasy_ESP34:FE07open] eq "0" and [ESPEasy_ESP34:FE07tilted] eq "0")
  (set Kueche window closedclosed,set plotKueche window 0,{Heizung("Kueche","FHT_0304","[Kueche:temp-zeit]")})
DOELSEIF
([ESPEasy_ESP34:FE07open] eq "1" and [ESPEasy_ESP34:FE07tilted] eq "1")
  (set Kueche window tiltedclosed,set plotKueche window 20,{Heizung("Kueche","FHT_0304","[Kueche:temp-zeit]")})
DOELSEIF
([ESPEasy_ESP34:FE07open] eq "1" and [ESPEasy_ESP34:FE07tilted] eq "0")
  (set Kueche window openclosed,set plotKueche window 20,{Heizung("Kueche","FHT_0304","[Kueche:temp-zeit]")})


include Heizungsteuerung

ESPEasy_ESP34:FE07open] eq "1" daten vom ESP
dummy für Küche Tür usw. set Kueche window tiltedclosed (da doppel Fenster) (ist auch vorbereitet um auf 4 Sensoren zugehen)
dummy für Plot der Küche set plotKueche window 20
und die heizungsteuerung {Heizung("Kueche","FHT_0304","[Kueche:temp-zeit]")}

gruss

ps: Fehler wäre dann (doelseif 0 1) habe da aber noch nie ein Fehler gehabt
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

CoolTux

Ich finde ja persönlich die structure immer noch am besten für sowas  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

eisman

Zitat von: CoolTux am 17 März 2018, 19:16:11
Ich finde ja persönlich die structure immer noch am besten für sowas  ;D

hi, hatte damit früher Probleme und seit dem nicht mehr gebraucht,
vielleicht schau ich mir das nochmal an.

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S