Systemvariable für global:INITIALIZED

Begonnen von Spartacus, 06 Mai 2014, 17:51:36

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich habe folgendes Problem:

Mein Sonos Device meldet mit "Sonos_.*:.appeared" seine Präsenz im fhem System. Wenn dieses Event kommt, dann starte ich ein Initialisierungs Routine für das jeweilige Sonos Device und betanke es mit Defaultwerten. Soweit ist alles gut!

Das gleiche "Sonos_.*:.appeared" kommt aber auch, wenn fhem gestartet wird. Hier soll aber verhindert werden, das bereits initialisierte Devices mit Default-Werten überschrieben werden.

Die Idee war, dies über global:INITIALIZED zu lösen und sich in einem Dummy zu merken, dass fhem initialisiert ist. Das dumme daran ist aber, dass  der State des Devices in der fhem.save gespeichert wird und somit unbrauchbar ist, da beim Start von fhem dieser Zustand zurückgespeichert wird.

Gibt  es eine Art Systemvariable die man abfragen kann, wenn fhem initialisiert ist, oder wie könnte man das lösen?

Danke und Gruß,
Sparatcus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

Zitat von: Spartacus am 06 Mai 2014, 17:51:36
Gibt  es eine Art Systemvariable die man abfragen kann, wenn fhem initialisiert ist, oder wie könnte man das lösen?

$init_done

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

Hallo betateilchen,
super! vielen Dank, das probier ich mal aus...
Sparatcus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

Dein eigentliches Problem habe ich aber nicht verstanden. global:INITIALIZED tritt doch erst auf, nachdem Dein device initialisiert ist?

Das Speichern des Gerätezustandes in der fhem.save kann man übrigens verhindern, wenn man $defs{<deviceName>}{TEMPORARY} auf 1 setzt, z.B. nach dem INITIALIZED:

define maketemp notify global:INITIALIZED {$defs{<deviceName>}{TEMPORARY}= 1}

Damit wird beim nächsten Schreiben des Statefile der Zustand des Gerätes <deviceName> nicht mehr mitgesichert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

Hallo,
irgendwie klappt das auch nicht! Ich hatte gedacht, dass global:INITIALIZED bzw. $init_done  erst dann gesetzt wird, wenn auch die Sonos Devices initialisiert sind und Ihre Präsenz im System bekannt gemacht haben. Das passiert aber später und die Systemvaraiable ist bereits gesetzt....

Im Moment weiß ich nicht, wie ich das Event "Sonos_.*:.appeared"nach einem fhem-start verhindern kann...

Sparatcus.

Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

Zitat von: Spartacus am 06 Mai 2014, 19:08:50
Im Moment weiß ich nicht, wie ich das Event "Sonos_.*:.appeared"nach einem fhem-start verhindern kann...

Indem Du das Speichern wie oben beschrieben verhinderst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

Hallo,
anscheinend funktioniert das tatsächlich, habe aber keine Ahnung warum! ist das jetzt Zufall?

was habe ich gemacht:

Schritt 1: fhemInit auf 1 setzten, wenn global:INITIALIZED
define fhemInitNotify notify global:INITIALIZED set fhemInit 1
Schritt 2: sichern von state in fhem.save verhindern.
define maketemp notify global:INITIALIZED {$defs{fhemInit}{TEMPORARY}= 1}
Schritt3: Makro für Device Initialisierung gebaut
define InitTest notify InitTest \
{ \
if (ReadingsVal ("Sonos_Terrasse","currentTrackURI","") eq "")\
  {\
   {fhem "set Sonos_Terrasse LoadRadio WDR2%%20Ruhrgebiet"};;;;\
   {fhem "set Sonos_Terrasse Volume 3"};;;;\
   {fhem "set Sonos_Terrasse Treble 10"};;;;\
   {fhem "set Sonos_Terrasse Bass 3"};;;;\
   {fhem "set Sonos_Terrasse Balance 0"};;;;\
   {fhem "set Sonos_Terrasse Loudness 1"};;;;\
   {fhem "set Sonos_Terrasse LEDState 0"}\
  }\
}

Schritt 4: Initialisierung zeitverzögert aufrufen
define Init_Terrasse notify Sonos_Terrasse:presence:.appeared \
{\
if (Value("fhemInit") == 1)\
{\
  fhem ("define InitTestLater at +00:02:00 trigger InitTest")\
}\
}


Wenn ich jetzt den Sonos mit Strom versorge, taucht im logfile "Sonos_Terrasse:.appeared" auf, fhemInit ist auf "1" und das Init_Terrasse wird angetriggert... das ist auch gewünscht!
Wenn ich fhem starte und ich mir direkt die Variable fhemInit anschaue, steht diese bereits auf "1". Aber erst später im Eventlog taucht dann "Sonos_Terrasse:.appeared" auf. Warum wird jetzt Sonos_Init nicht angetriggert? Die Variable fhemInit ist doch schon auf "1" gesetzt? Das ist zwar genau der gewünschte Effekt, aber ich verstehe das nicht! oder  ist nur reiner Zufall, dass das funktioniert wie es soll!

Für eine Erklärung wäre ich dankbar!
Sparatcus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Spartacus

Hallo,
kann ggf. jemand erklären, warum fhem so reagiert (siehe meinen letzten Post)?

Danke,
Sparatcus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Puschel74

#8
Hallo,

Zitatkann ggf. jemand erklären, warum fhem so reagiert (siehe meinen letzten Post)?
Vermutlich Zufall oder du schaust nicht ins FHEM-Logfile  ;)
Dort sollte eigentlich eine Fehlermeldung auftauchen - damit ist es auch kein Zufall mehr.

Hier
fhem ("define InitTestLater at +00:02:00 trigger InitTest")\
müsste es doch eigentlich so
fhem ("define InitTestLater at +00:02:00 trigger InitTest");
aussehen.
Sprich - dir fehlt ein Semikolon am Ende der Zeile.

\ gelöscht da ich die fhem.cfg nicht anfasse  ;D

Grüße

Edith: Es kann aber dennoch sein das der/dein Code funktioniert.
Da ich aber nicht so tief in FHEM stecke kann ich dir nicht sagen warum er funktionieren würde.
Mir ist nur aufgefallen das am Ende der Zeile ein ; fehlt.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Spartacus

Hallo,
ich verstehe die Welt nicht mehr!

@ puschel:
wenn ich an dieser Stelle das Semikolon einbaue, dann kommt der Fehler im Log
wenn ich das Semikolon weglasse, wird InitTest mit 2min Verzögerung ausgeführt.

also irgendwas ist doch komisch!
hier mal der post aus de DEF Bereich:

funzt:
Sonos_Terrasse:presence:.appeared
{
if (Value("fhemInit") == 1)
{
  fhem ("define InitTestLater at +00:02:00 trigger InitTest")
}
}


funzt nicht:
Sonos_Terrasse:presence:.appeared
{
if (Value("fhemInit") == 1)
{
  fhem ("define InitTestLater at +00:02:00 trigger InitTest");
}
}


Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

P.A.Trick

Spartakus du sollst nicht in der fhem.cfg herumfummeln ;-) nimm den Editor dann klappt das auch!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Spartacus

#11
Hi,
das habe ich auch nicht! Ich habe von Anfang an alles brav im DEF Bereich gemacht. Lediglich für den ersten Post habe ich das darauskopiert, daman dort auch das define... mitnehmen kann.

Spartacus

NACHTRAG:
in allen meinen Anweisungen steht nirgends ein Semikolon am Ende der If Anweisung. Und das läuft alles und das habe ich alles im DEF Bereich gemacht.

Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Puschel74

Hallo,

dein Code
Sonos_Terrasse:presence:.appeared
{
if (Value("fhemInit") == 1)
{
  fhem ("define InitTestLater at +00:02:00 trigger InitTest")
}
}

würde bei mir so
Sonos_Terrasse:presence:.appeared {
if (Value("fhemInit") == 1) {
  fhem ("define InitTestLater at +00:02:00 trigger InitTest");
}
}

aussehen.

Ich hab keine Ahnung ob das einen Unterschied macht.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Spartacus

Hallo zusammen,
habe puschels Code 1:1 kopiert und das läuft.
habe dann die Klammern in die nächste Zeiile gerückt (so wie bei mir)
Fehler!
2014.05.08 21:05:52 4: Init_Terrasse exec
{
if (Value("fhemInit") == 1)
{
  fhem ("define InitTestLater at +00:02:00 trigger InitTest");
}
}
2014.05.08 21:05:52 5: Cmd: >{
if (Value("fhemInit") == 1)
{
  fhem ("define InitTestLater at +00:02:00 trigger InitTest")<
2014.05.08 21:05:52 5: Cmd: >}
}<
2014.05.08 21:05:52 3: Init_Terrasse return value: Unknown command {
, try help.
Unknown command }
}, try help.

Semikolon wieder gelöscht, Sache läuft...

Schon witzig! 
hätte schon gerne gewusst, warum das so ist, bzw. was hier die richtige Variante ist...
allerdings beantwortet das alles noch nicht meine ursprüngliche Frage weiter oben in Post vom 06 Mai 2014, 20:50:35.

Danke und Gruß,
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Puschel74

Hallo,

Zitathabe dann die Klammern in die nächste Zeiile gerückt (so wie bei mir)
Äh blöde Frage aber wozu soll das gut sein?

Wobei ich auf eine Antwort auf deine Frage auch gespannt bin.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.