Gelöst - presence Structure in presence Structure

Begonnen von ftsinuglarity, 29 April 2018, 21:19:04

Vorheriges Thema - Nächstes Thema

ftsinuglarity

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

ftsinuglarity

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

ftsinuglarity

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

binford6000

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

ftsinuglarity

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!

ftsinuglarity

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