[gelöst] Structure unterschiedliche Werte in state2

Begonnen von ms_steini, 17 August 2022, 10:08:47

Vorheriges Thema - Nächstes Thema

ms_steini

Hallo zusammen,
ich verstehe einfach nicht die Funktionsweise der structure und benötige Hilfe.

Ich habe 4 Fensterkontakte, 3 mit (open|closed|tilted) und 1 mit (open|closed) im jeweiligen Userreading "state2"
in der structure habe ich folgendes eingestellt:
clientstate_behavior = absolute
clientstate_priority = open|closed|tilted

dann in jedem Device "room_map = state2" da der Status im Userreading "state2" zu finden ist.

Weiterhin habe ich in der structure das Attribut "devStateIcon" gesetzt: "open:w_open_l_r@#b3002d closed:w_close_l_r@#1f943f tilted:w_tilt_l_tilt_r@#b3002d"


Mein Ziel ist, wenn die 3 Fensterkontakte (open|closed|tilted) alle auf "tilted" stehen und der eine Fensterkontakt (open|closed) auf "closed" steht,
das der Status der structure auf "tilted" steht und das devStateIcon "tilted:w_tilt_l_tilt_r@#b3002d" angezeigt wird.

ich bekomme es einfach nicht hin, habe schon x viele Variationen ausprobiert. Die CommendRef hat mir leider auch nicht geholfen

Vielen Dank

rudolfkoenig

Bei clientstate_behavior = absolute ist der Wert von clientstate_priority irrelevant.

Das Ziel erreicht man, indem man beim Fensterkontakt ohne tilted den Wert closed via <struct_type>_map oder eventMap auf tilted aendert, und clientstate_behavior auf absolute laesst.

Uebrigens mit verbose 5 erzaehlt structure relativ detailliert, warum ein Status gesetzt wurde.

ms_steini

#2
Hallo und danke erstmal......

leider funktioniert das so nicht, sorry aber ich glaube ich habe eine vielleicht wichtige Information unterschlagen...

3 der Fensterkontakte haben im state auch nur 2 Werte (true und false) und mit einem Userreading mache ich daraus ein ...... sagen wir mal ThreeStateSensor

attr HmIP_MOD_RC8_1_7 userReadings state2:(true|false) {return 'closed' if $event=~m{false};;
fhem("sleep 1 quiet;;
setreading HmIP_MOD_RC8_1_7 state2 {(ReadingsVal('HmIP_MOD_RC8_1_7','state','true') eq 'false' ? 'closed' : ReadingsVal('HmIP_MOD_RC8_1_8','state','true') eq 'false' ? 'open' : 'tilted')}")}


Im userReading "state2" steht dann je nach Zustand (closed, open oder tilted)

das kommt dabei raus:
2022.08.17 14:58:59 5: structure EG.Fenster: event from HmIP_MOD_RC8_1_7: setting state to undefined, cause different states: tilted,open

rudolfkoenig

In diesem Fall muss wohl das <struct_type>_map Attribut bei jedem der Teilnehmer gesetzt werden.

ms_steini

ich schaffe es nicht, es ist zum Mäusemelken.....

ich sehe zwar in der Log warum die Struktur den jeweiligen Status bekommt
2022.08.17 16:38:44 5: structure EG.Fenster: event from HmIP_MOD_RC8_1_1: setting state to undefined, cause different states: tilted,open
2022.08.17 16:38:44 5: structure EG.Fenster: event from HmIP_MOD_RC8_1_3: setting state to undefined, cause different states: open,tilted

aber ich weiß nicht wie der unterschiedliche Status zustande kommt.

ich habe die Struktur mal auf 2 Devices reduziert um es ggf. Übersichtlicher für die Fehlersuche zu machen.
Nix da.. Pustekuchen hilft mir nicht wirklich solange ich nicht weiß wie der Status tilted,open oder open,tilted zustande kommt.

List Struktur:
Internals:
   ATTR       room
   CHANGEDCNT 138
   DEF        room HmIP_MOD_RC8_1_1 HmIP_MOD_RC8_1_3
   FUUID      6291b7f2-f33f-c561-7929-78a825b17ecf6d0f
   NAME       EG.Fenster
   NOTIFYDEV  HmIP_MOD_RC8_1_3,HmIP_MOD_RC8_1_1,global
   NR         427
   NTFY_ORDER 50-EG.Fenster
   STATE      undefined
   TYPE       structure
   eventCount 1934
   READINGS:
     2022-08-17 16:43:53   LastDevice      HmIP_MOD_RC8_1_1
     2022-08-17 16:43:53   LastDevice_Abs  HmIP_MOD_RC8_1_1
     2022-08-17 16:43:53   state           undefined
   hmccu:
Attributes:
   DbLogExclude .*
   alias      Alle Fenster / Türen EG
   clientstate_behavior absolute
   devStateIcon closed:w_close_l_r@#1f943f tilted:fts_window_2w_tilt_lr@#FF8000 open:w_open_l_r@#b3002d
   group      Fenster-Türkontakt EG
   icon       fts_shutter_all
   room       0.0 Test->HmIP-MOD-RC8,1.EG
   sortby     1
   verbose    5



List Fensterkontakt mit 2 Werten (tilted, open)
Internals:
   DEF        00145D89969E97:1
   FUUID      62868731-f33f-c561-6534-0cc74c306d209fd2
   IODev      piVCCU_ccu3
   NAME       HmIP_MOD_RC8_1_1
   NR         423
   STATE      tilted
4.9 Volt
"Modul"
   TYPE       HMCCUCHN
   ccuaddr    00145D89969E97:1
   ccudevstate active
   ccuif      HmIP-RF
   ccuname    HmIP_MOD_RC8_1:1
   ccurolestate KEY_TRANSCEIVER
   ccusubtype MOD-RC8
   ccutype    HmIP-MOD-RC8
   eventCount 481
   firmware   1.0.5
   readonly   no
   OLDREADINGS:
   READINGS:
     2022-08-17 16:43:53   activity        alive
     2022-08-17 16:43:53   battery         ok
     2022-08-17 16:43:53   devstate        ok
     2022-08-17 16:43:53   hmstate         false
     2022-08-17 16:43:53   rssidevice      -54
     2022-08-17 15:13:33   rssipeer        N/A
     2022-08-17 16:43:53   state           false
     2022-08-17 16:43:53   state2          tilted
     2022-08-17 16:43:53   voltage         4.9
   hmccu:
     channels   1
     detect     1
     devspec    00145D89969E97:1
     nodefaults 1
     role       1:KEY_TRANSCEIVER
     setDefaults 0
     cmdlist:
       get       
       set       
     control:
     dp:
       0.CONFIG_PENDING:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      false
           OVAL       0
           SVAL       false
           VAL        0
       0.DUTY_CYCLE:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      false
           OVAL       0
           SVAL       false
           VAL        0
       0.INSTALL_TEST:
         VALUES:
           NVAL       true
           ONVAL      true
           OSVAL      true
           OVAL       true
           SVAL       true
           VAL        true
       0.LOW_BAT:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      ok
           OVAL       0
           SVAL       ok
           VAL        0
       0.OPERATING_VOLTAGE:
         VALUES:
           NVAL       4.9
           ONVAL      4.9
           OSVAL      4.9
           OVAL       4.9
           SVAL       4.9
           VAL        4.9
       0.OPERATING_VOLTAGE_STATUS:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      NORMAL
           OVAL       0
           SVAL       NORMAL
           VAL        0
       0.RSSI_DEVICE:
         VALUES:
           NVAL       -54
           ONVAL      -53
           OSVAL      -53
           OVAL       -53
           SVAL       -54
           VAL        -54
       0.RSSI_PEER:
         VALUES:
           NVAL       N/A
           ONVAL      N/A
           OSVAL      N/A
           OVAL       0
           SVAL       N/A
           VAL        0
       0.UNREACH:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      alive
           OVAL       0
           SVAL       alive
           VAL        0
       0.UPDATE_PENDING:
         VALUES:
           NVAL       false
           ONVAL      false
           OSVAL      false
           OVAL       false
           SVAL       false
           VAL        false
       1.STATE:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      false
           OVAL       0
           SVAL       false
           VAL        0
     roleCmds:
       get:
       set:
     state:
       chn        1
       dpt        PRESS_SHORT
Attributes:
   DbLogExclude .*
   alias      EG Terrassentür
   ccureadingfilter .*
   ccureadingformat datapointlc
   devStateIcon tilted:fts_door_slide_2w@#1f943f open:fts_door_slide_open@#b3002d
   event-on-update-reading .*
   eventMap   false:tilted true:open
   group      Fenster-Türkontakt EG
   icon       bilder/HM-mod-em-8
   room       0.0 Test->HmIP-MOD-RC8,1.EG
   room_map   false:tilted true:open
   sortby     2
   stateFormat state2
voltage Volt
"Modul"
   userReadings state2:(true|false) {return 'tilted' if $event=~m{false}; fhem("sleep 1 quiet; setreading HmIP_MOD_RC8_1_1 state2 {(ReadingsVal('HmIP_MOD_RC8_1_1','state','true') eq 'false' ? 'tilted' : 'open')}")}
   userattr   room_map structexclude



List Fensterkontakt mit 3 Werten (closed, tilted, open)
Internals:
   DEF        00145D89969E97:3
   FUUID      62868730-f33f-c561-eb5a-dc168988f4578aa5
   IODev      piVCCU_ccu3
   NAME       HmIP_MOD_RC8_1_3
   NR         421
   STATE      closed
4.9 Volt
"Modul"
   TYPE       HMCCUCHN
   ccuaddr    00145D89969E97:3
   ccudevstate active
   ccuif      HmIP-RF
   ccuname    HmIP_MOD_RC8_1:3
   ccurolestate KEY_TRANSCEIVER
   ccusubtype MOD-RC8
   ccutype    HmIP-MOD-RC8
   eventCount 534
   firmware   1.0.5
   readonly   no
   OLDREADINGS:
   READINGS:
     2022-08-17 16:43:53   activity        alive
     2022-08-17 16:43:53   battery         ok
     2022-08-17 16:43:53   devstate        ok
     2022-08-17 16:43:53   hmstate         false
     2022-08-17 16:43:53   rssidevice      -54
     2022-08-17 15:14:14   rssipeer        N/A
     2022-08-17 16:43:53   state           false
     2022-08-17 16:43:53   state2          closed
     2022-08-17 16:43:53   voltage         4.9
   hmccu:
     channels   1
     detect     1
     devspec    00145D89969E97:3
     nodefaults 1
     role       3:KEY_TRANSCEIVER
     setDefaults 0
     cmdlist:
       get       
       set       
     control:
     dp:
       0.CONFIG_PENDING:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      false
           OVAL       0
           SVAL       false
           VAL        0
       0.DUTY_CYCLE:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      false
           OVAL       0
           SVAL       false
           VAL        0
       0.INSTALL_TEST:
         VALUES:
           NVAL       true
           ONVAL      true
           OSVAL      true
           OVAL       true
           SVAL       true
           VAL        true
       0.LOW_BAT:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      ok
           OVAL       0
           SVAL       ok
           VAL        0
       0.OPERATING_VOLTAGE:
         VALUES:
           NVAL       4.9
           ONVAL      4.9
           OSVAL      4.9
           OVAL       4.9
           SVAL       4.9
           VAL        4.9
       0.OPERATING_VOLTAGE_STATUS:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      NORMAL
           OVAL       0
           SVAL       NORMAL
           VAL        0
       0.RSSI_DEVICE:
         VALUES:
           NVAL       -54
           ONVAL      -53
           OSVAL      -53
           OVAL       -53
           SVAL       -54
           VAL        -54
       0.RSSI_PEER:
         VALUES:
           NVAL       N/A
           ONVAL      N/A
           OSVAL      N/A
           OVAL       0
           SVAL       N/A
           VAL        0
       0.UNREACH:
         VALUES:
           NVAL       0
           ONVAL      0
           OSVAL      alive
           OVAL       0
           SVAL       alive
           VAL        0
       0.UPDATE_PENDING:
         VALUES:
           NVAL       false
           ONVAL      false
           OSVAL      false
           OVAL       false
           SVAL       false
           VAL        false
       3.STATE:
         VALUES:
           NVAL       0
           ONVAL      1
           OSVAL      true
           OVAL       1
           SVAL       false
           VAL        0
     roleCmds:
       get:
       set:
     state:
       chn        3
       dpt        PRESS_SHORT
Attributes:
   DbLogExclude .*
   alias      EG Esszimmertür
   ccuget     Value
   ccureadingfilter .*
   ccureadingformat datapointlc
   devStateIcon closed:fts_door_right@#1f943f tilted:fts_door_tilt@#ff8000 open:fts_door_right_open@#b3002d
   event-on-update-reading .*
   eventMap   false:tilted true:open
   group      Fenster-Türkontakt EG
   icon       bilder/HM-mod-em-8
   room       0.0 Test->HmIP-MOD-RC8,1.EG
   room_map   state2
   sortby     3
   stateFormat state2
voltage Volt
"Modul"
   userReadings state2:(true|false) {return 'closed' if $event=~m{false}; fhem("sleep 1 quiet; setreading HmIP_MOD_RC8_1_3 state2 {(ReadingsVal('HmIP_MOD_RC8_1_3','state','true') eq 'false' ? 'closed' : ReadingsVal('HmIP_MOD_RC8_1_4','state','true') eq 'false' ? 'open' : 'tilted')}")}
   userattr   room_map structexclude




Wobei das Device "HmIP_MOD_RC8_1_3" eigendlich ja auch nur ein TwoState Device ist und durch das userReading "state2" und dem Device "HmIP_MOD_RC8_1_4" zu einem ThreeState Device gemacht wird.

kann sich da einer erbarmen und mal drüber schauen bitte.....

rudolfkoenig

Ich habe gerade versucht das Setup mit dummys nachzustellen (mit einem list -r bzw. "Raw definition" haette ich mich leichter getan), muss aber zugeben, dass ich die userReadings Logik nicht blicke.

Was aber bei debuggen hilft, ist ein list wie:
fhem> list EG.Fenster,HmIP_MOD_RC8_1.* state state2 room_map
EG.Fenster           2022-08-17 18:30:07   state           tilted
HmIP_MOD_RC8_1_1     2022-08-17 18:30:07   state           false
                     2022-08-17 18:30:07   state2          tilted
                                           room_map        false:tilted true:open
HmIP_MOD_RC8_1_3     2022-08-17 18:29:26   state           true
                     2022-08-17 18:29:27   state2          tilted
                                           room_map        state2

und die einzelnen Elemente setzen mit
fhem> setreading HmIP_MOD_RC8_1_1 state false


Bemerkungen:
- room_map ist inkonsistent (holt die Werte mal aus state, mal aus state2), das ist nicht unbedingt ein Fehler, erschwert aber das Verstehen bzw. Debuggen.
- den Wert von STATE mit stateFormat auf einen Mehrzeiligen Wert zu setzen kompliziert die Sache zusaetzlich: devStateIcon holt den Wert aus STATE, wenn dieser Mehrzeilig ist, dann gibt es eine Schleife ueber jede Zeile.

ms_steini

Zitat von: rudolfkoenig am 17 August 2022, 18:47:18
Ich habe gerade versucht das Setup mit dummys nachzustellen (mit einem list -r bzw. "Raw definition" haette ich mich leichter getan), muss aber zugeben, dass ich die userReadings Logik nicht blicke...................................

Ich habs ja versucht zu erklären....ok nochmal anders......

Device AAA liefert true/false (ReedKontakt)
Device BBB liefert true/false (ReedKontakt)

Die Reedkontakte sind so montiert das bei Fenster geschlossen beide Reedkontakte "false" zurückgeben
bei Fenster offen gibt Device AAA "true" zurück und Device BBB gibt "false" zurück
wenn das Fenster gekippt wird, gibt Device AAA "false" und Device BBB gibt "true" zurück.
Durch das userReading werden beide Devices auf Zustand abgefragt und in Device AAA in userReading "state2" geschrieben.

state2:(true|false) {return 'closed' if $event=~m{false}; fhem("sleep 1 quiet; setreading AAA state2 {(ReadingsVal('AAA','state','true') eq 'false' ? 'closed' : ReadingsVal('BBB','state','true') eq 'false' ? 'open' : 'tilted')}")}

somit habe ich in state2 -> "closed, tilted, open" resultierend aus 2 Devices

das war ursprünglich aus einem anderen Beitrag und "BETA-USER" hatte mir dort mit obigen Code sehr weitergeholfen....


stateFormat habe ich jetzt ersteinmal gelöscht.

ich verstehe nicht warum "room_map" mal den Wert aus "state" und mal aus "state2" nimmt wenn doch "state2" fest eingetragen ist ???


rudolfkoenig

Zitatich verstehe nicht warum "room_map" mal den Wert aus "state" und mal aus "state2" nimmt wenn doch "state2" fest eingetragen ist ???
Bei HmIP_MOD_RC8_1_1 ist "false:tilted true:open" eingetragen, und dann wird state genommen.
Bei HmIP_MOD_RC8_1_3 steht "state2".
Ist nicht per-se falsch, aber verwirrend.

Siehe commandref: https://fhem.de/commandref_modular.html#structure-attr-struct_type_map

ms_steini

#8
so, endlich geschafft......

also in der Struktur habe ich folgendes eingestellt:
clientstate_behavior = relative
clientstate_priority = open tilted closed
setStructType = 1  (wobei 1 wohl default ist)

weiterhin habe ich bei allen Devices folgendes eingestellt:
room_map = state2

bei den Devices für den KIPP-Reedkontakt habe ich den Status "open" auf "tilted" geändert und die userReadings dementsprechend angepasst.

das war alles... eigentlich ganz einfach
hat aber recht lange gedauert jede nur erdenkliche Kombination zu testen... aber egal, jetzt geht's

(Mehrzeiliges stateFormat hat in diesem Fall keine Auswirkungen.)