N'Abend,
ich hoffe ich habe bei der Suche nichts übersehen ..
Ist es ein Problem, ein Presence-Structure in einem zweiten zu haben ?
EDIT: Unten nochmal kürzer beschrieben (Antwort #2)
Ausgang:
.. war ein Struct als Sammel-Presence-Device für ein Bluetoothdongle (NUT), und mein Telefon. Ist beides nicht anwesend, wird das Struct auf absent gesetzt.
clientstate_priority present absent
Bis hierhin lief alles fein.
Da ich einen 2. Schlüsselbund besitze (he he), kommt da auch ein NUT ran.
Jetzt soll es so sein, das ein Schlüsselbund durchaus zu hause bleibt, und damit auf present. Die clientstate_priority würde für mich nicht mehr sinnvoll greifen, da ja alle auf Devices auf absent stehen müssten, was dann nicht der Fall wäre.
Ich habe mir deswegen ein 2. Struct angelegt, mit den beiden NUTs darin.
In dem ist die priority so:
clientstate_priority absent present
.. Das 2. Struct wird also auf absent gesetzt, wenn eines von beiden NUTs nicht mehr present ist.
Die 2. Structur habe ich in die erste aufgenommen. Seitdem stehts mal so mal so. Das list auf die Strucktur bringt mich gerade nicht weiter, da nicht alle Devices mit ihren States angezeigt werden. (Sollte aber eigentlich so sein oder ? )
Ok. Jetzt mal das listing:
Das übergeordnete Structure stP_Daniel
Internals:
ATTR st_type_presence
CFGFN ./configs/structs.cfg
CHANGEDCNT 357
DEF st_type_presence st_Daniels_Nuts pHOME_S7_PHONE_DANIEL_airhome pHOME_S7_PHONE_DANIEL_airsrv
NAME stP_Daniel
NR 1095
NTFY_ORDER 50-stP_Daniel
STATE absent
TYPE structure
READINGS:
2018-04-29 20:54:01 LastDevice pHOME_S7_PHONE_DANIEL_airhome
2018-04-29 20:54:01 LastDevice_Abs pHOME_S7_PHONE_DANIEL_airhome
2018-04-29 20:54:01 state absent
Attributes:
alias Presence Daniel
clientstate_behavior relative
clientstate_priority present absent
devStateIcon present:message_ok absent:control_arrow_up_right undefined:audio_fade disabled:control_on_off
disable 0
event-min-interval state:1800
event-on-change-reading state
group HOME Presence Devices
icon audio_shuffle
room Presence,FHEM->- Types->- Structs,Home Status
Die einzelnen Devices stehen dann so:
pHOME_S7_PHONE_DANIEL_airhome absent PRESENCE
pHOME_S7_PHONE_DANIEL_airsrv absent PRESENCE
st_Daniels_Nuts present structure
st_Daniels_Nuts ist hier present, womit die stP_Daniel auch auf present stehen sollte.
Das 2. Struct, das die beiden NUTs enthält: st_Daniels_Nuts (jaha, :D .. passte)
Internals:
ATTR pHOME_BTag_Daniel
CFGFN
CHANGEDCNT 103
DEF pHOME_BTag_Daniel pHOME_BTag_Daniel2
NAME st_Daniels_Nuts
NR 31259
NTFY_ORDER 50-st_Daniels_Nuts
STATE present
TYPE structure
READINGS:
2018-04-29 20:59:18 LastDevice pHOME_BTag_Daniel2
2018-04-29 20:59:18 LastDevice_Abs pHOME_BTag_Daniel2
2018-04-29 20:59:18 state present
Attributes:
clientstate_behavior relative
clientstate_priority absent present
devStateIcon present:message_ok absent:control_arrow_up_right undefined:audio_fade disabled:control_on_off
event-min-interval state:1800
group HOME Presence Devices
icon audio_shuffle
room FHEM->- Types->- Structs,Presence
Ich hoffe, ich konnte es verständlich machen
Das Problem ist das Strcut. Nehme ich es aus dem übergreifenden Struct "stP_Daniel" raus, und setze stattdessen einen einzelnen Nut ein, schaltet stP_Daniel wie erwartet.
Also statt
DEF st_type_presence st_Daniels_Nuts pHOME_S7_PHONE_DANIEL_airhome pHOME_S7_PHONE_DANIEL_airsrv
DEF st_type_presence pHOME_BTag_Daniel pHOME_S7_PHONE_DANIEL_airhome pHOME_S7_PHONE_DANIEL_airsrv
Ich bin damit leider noch nicht weitergekommen. Gibt es dazu bessere Ansätze? Ich versuch mein Problem nochmal kurz zu beschreiben:
1. Hauptstrucktur structMain, die present oder absent einnehmen kann.
Wenn ein Device present ist, ist auch die Strucktur present.
In diese füge ich ein weiteres Struct (structSub) ein:
defmod structMain structure st_type_presence firstDevice structSub
attr structMain clientstate_behavior relative
attr structMain clientstate_priority present absent
Das 2. Struct enthält nur Devices (im meinem Fall die beiden NUTs)
structSub soll schon absent sein, wenn eines der beiden NUTs absent ist
defmod sructSub structure st_type_presence bt1 bt2
attr sructSub clientstate_behavior relative
attr sructSub Main clientstate_priority absent present
Beides zusammen funktioniert leider nicht wie erwartet. structMain steht meist auf absent, auch wenn das structSub present ist.
Ich bin dankbar für jeden Hinweis, komme gerade nicht weiter damit.
ZitatIch bin dankbar für jeden Hinweis, komme gerade nicht weiter damit.
Moin Daniel,
prinzipiell hast du mMn. alles richtig gemacht. Den Tippfehler bei "srtuctSub" habe ich dabei mal korrigiert.... ;)
Ich habe das mal bei mir kurz nachgestellt:
defmod structMain structure st_type_presence Sebastian.gtag2.PRE structSub
attr structMain clientstate_behavior relative
attr structMain clientstate_priority present absent
defmod structSub structure st_type_presence SebastianiPad.PRE SebastianHandy.PRE
attr structSub userattr st_type_presence st_type_presence_map structexclude
attr structSub clientstate_behavior relative
attr structSub clientstate_priority absent present
attr structSub st_type_presence structMain
Dabei habe ich structSub mit den IOS-Devices zuerst angelegt. Danach dann structMain.
Das hatte zur Folge dass
attr structSub userattr st_type_presence st_type_presence_map structexclude
attr structSub st_type_presence structMain
automatisch angelegt wurden.
Zum Test habe ich dann den GTAG in Alufolie gesteckt und nur am iPad den Flugmodus ein- und ausgeschaltet.
Die Structures schalten dabei korrekt von present zu absent und wieder zurück.
Vielleicht hilft dir das ja irgendwie weiter...
VG Sebastian
Zitat von: binford6000 am 01 Mai 2018, 10:31:38
attr structSub userattr st_type_presence st_type_presence_map structexclude
attr structSub st_type_presence structMain
VG Sebastian
Das sieht sehr gut aus!
st_type_presence über userattr zu setzen hat mir gefehlt.
Vielen lieben Dank Sebastian!
Ist vielleicht nen kleinen Eintrag in der commandref wert ? Oder sollte sich das erschließen, bzw schnell findbar sein und ich hab mal wieder vorbeigesucht ? :o ;D