FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gear am 17 März 2018, 12:19:16

Titel: Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 17 März 2018, 12:19:16
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 17 März 2018, 12:23:26
Nimm Structure dafür.
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 17 März 2018, 14:25:53
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.
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Otto123 am 17 März 2018, 14:54:26
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 17 März 2018, 15:11:34
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.
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 17 März 2018, 15:19:28
Ich zeige Dir wie man es mit structure machen kann. gib mir etwas
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 17 März 2018, 15:26:56
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.
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Otto123 am 17 März 2018, 15:40:06
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 17 März 2018, 15:42:09
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Otto123 am 17 März 2018, 15:52:46
@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.
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 17 März 2018, 16:18:27
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!
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Otto123 am 17 März 2018, 16:24:51
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: eisman am 17 März 2018, 19:13:06
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag 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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: eisman am 17 März 2018, 19:19:59
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
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 17 März 2018, 23:06:47
So, das mit den Notify hab ich nun verstanden und das geht damit.
Genauso wie mit userReading.

Nun bin ich aber angefixt und will das mit Structur auch noch verstehen.
Ich habe die Structur angelegt wie folgt:
defmod WZ.Fenster.Seite structure HA_MCU_ID104_Fenster HA_MCU_ID104_Fenster.FO:.*  HA_MCU_ID104_Fenster.FG:.*
attr WZ.Fenster.Seite DbLogExclude .*


Vermutlich habe ich das falsch angelegt. =O
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 17 März 2018, 23:16:02
Zitat von: CoolTux am 17 März 2018, 15:26:56
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.
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 18 März 2018, 00:38:45
So, nun finde ich das Problem, warum ich das nicht umgesetzt bekomme.

Du hast je ein Device angelegt pro Sensor.
Ich nutze ein Device für beide Sensoren.
Internals:
   DEF        192.168.100.104 80 ESPBridge HA_MCU_ID104_Fenster
   ESPBridge_MSGCNT 28
   ESPBridge_TIME 2018-03-18 00:22:48
   ESP_BUILD  20100
   ESP_BUILD_GIT mega-20180311
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID 17: ESP Easy Mega
   ESP_SLEEP  10
   ESP_UNIT   104
   ESP_VERSION 2
   HOST       192.168.100.104
   IDENT      HA_MCU_ID104_Fenster
   INTERVAL   300
   IODev      ESPBridge
   LASTInputDev ESPBridge
   MSGCNT     28
   NAME       ESPEasy_HA_MCU_ID104_Fenster
   NOTIFYDEV  global
   NR         44
   NTFY_ORDER 50-ESPEasy_HA_MCU_ID104_Fenster
   PORT       80
   STATE      Fenster ist offen
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.38
   READINGS:
     2018-03-18 00:22:47   FG              on
     2018-03-18 00:22:48   FO              on
     2018-03-17 22:26:00   Status          offen
     2018-03-18 00:23:22   presence        present
     2018-03-18 00:23:22   state           FG: on FO: on
   helper:
     fpc        1521326271
     pm:
       Encode     1
       JSON       1
     received:
       FG         1521328967
       FO         1521328968
Attributes:
   DbLogExclude .*
   IODev      ESPBridge
   Interval   300
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3
   stateFormat Fenster ist Status


Ich lasse das über ESPEasy (Bridge) laden, da ich sonst den Stand beim WakeUp des NodeMCU nicht mitbekomme.
Ich habe das verstanden, wenn man das so macht wie du, also mit 2 Devices.
Nun ist die Frage, kann ich das auch machen, wenn beide Sensoren in einem Device sind?
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 18 März 2018, 06:40:59
Guten Morgen. Ja das könnte man mittels readingsProxy machen. Dann hätte man die Readings beider Devices in einem seperaten Device.

Aber wenn Du alles in einem Device hast würde ich userReadings nehmen und mit stateFormat den STATE setzen.


Grüße
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: CoolTux am 18 März 2018, 07:18:07
Bitte schön. Mit userReadings


Internals:
   CFGFN     
   NAME       ESPEasy_HA_MCU_ID104_Fenster
   NR         103
   STATE      gekippt
   TYPE       dummy
   READINGS:
     2018-03-18 07:16:35   FG              off
     2018-03-18 07:16:25   FO              on
     2018-03-18 07:16:35   Status          gekippt
Attributes:
   devStateIcon offen:fts_window_1w_open@red geschlossen:fts_window_1w@green gekippt:fts_window_1w_tilt@orange
   readingList FG,FO
   room       Test
   setList    FG:on,off FO:on,off
   stateFormat Status
   userReadings Status { if( ReadingsVal($name,'FO',0) eq 'on' and ReadingsVal($name,'FG',0) eq 'off') { 'gekippt' }
elsif( ReadingsVal($name,'FO',0) eq 'off' and ReadingsVal($name,'FG',0) eq 'off') { 'geschlossen' }
elsif( ReadingsVal($name,'FO',0) eq 'on' and ReadingsVal($name,'FG',0) eq 'on') { 'offen' }
elsif( ReadingsVal($name,'FO',0) eq 'off' and ReadingsVal($name,'FG',0) eq 'on') { 'fehler' }
}
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Gear am 18 März 2018, 11:18:52
Super, vielen Dank und auch hier noch mal sorry für die Umstände!
Ich habe nun alle Möglichkeiten verstanden und kann diese anwenden, hab alle mal komplett durchgetestet.

Ich wünsche euch einen schönen Sonntag! =)
Titel: Antw:Auswertung von 2 Sensoren zu einem Zustand
Beitrag von: Pfriemler am 18 März 2018, 13:34:44
Ich werfe noch einen in die Runde: genau das Problem habe ich mit einem DOIF gelöst.
Fast alle meine Fensterkontakte sind Homematic-SCo und heißen FK_.... Ein Sammel-Log fängt alle Öffnungen und Schließungen über "contact" ab, daher folgend das zusätzliche Reading contact.
Zwei Fenster aber werden über normale Kontakte abgefragt (Meldung über ein Homematic-8-Kanal-Sendemodul).
SensorKGSzLiO ist der Sensor im Kellergeschoss-Schlafzimmer linkes Fenster oben, unten entsprechend -U

defmod FK_KGSuedL DOIF ([SensorKGSzLiO] eq "closed" and [SensorKGSzLiU] eq "closed")        ## geschlossen\
DOELSEIF ([SensorKGSzLiO] eq "open" and [SensorKGSzLiU] eq "open")   ## offen\
DOELSEIF ([SensorKGSzLiO] eq "open" and [SensorKGSzLiU] eq "closed") ## gekippt\
DOELSE ## anderes Problem
attr FK_KGSuedL alias Fenster Keller-Schlafzimmer links
attr FK_KGSuedL cmdState closed|open|tilted|problem
attr FK_KGSuedL devStateIcon open:fts_door_open@red tilted:fts_door_tilt@yellow closed:fts_door@green unlocked:secur_open@yellow .*:message_attention@yellow
attr FK_KGSuedL userReadings contact {ReadingsVal($name,"state","unknown")}
attr FK_KGSuedL wait 1:1:1


Dieser "Kombisensor" verhält sich in seinen Meldungen nun wie ein HomeMatic RHS (Griffpositionssensor).