Auswertung von 2 Sensoren zu einem Zustand

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

Vorheriges Thema - Nächstes Thema

Gear

#15
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
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

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

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?
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

#18
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
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

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' }
}
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

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! =)
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Pfriemler

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


"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."