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 (http://"https://fhem.de/commandref_DE.html#structure") hat mir leider auch nicht geholfen
Vielen Dank
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.
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
In diesem Fall muss wohl das <struct_type>_map Attribut bei jedem der Teilnehmer gesetzt werden.
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.....
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.
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 (http://"https://forum.fhem.de/index.php/topic,127774.msg1222684.html#msg1222684") 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 ???
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
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.)