Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

maxritti

Hallo,


wie RettungsTim geschrieben hat, hat er etwas Code von mir übernommen.
Daher will ich das mal ein wenig erklären.

Ich habe für meine Rollosteuerung ein paar Dummys erzeugt, wo ich manuell Zeiten eingeben kann.
Dies sind Zeitfenster, wenn Rollos hoch und runter gehen sollen.
Auch habe ich dort Schwellwerte für meinen Helligkeitssensor hinterlegt.

Und die DOIFs für die Rolloaktoren lesen nun via ReadingsVal("EingabeDummy", "state", "22:00:00") den Wert aus den Eingabefeldern aus.
Jetzt ist es halt so, dass es nicht definiert ist, dass diese Eingabedummys in der Config von FHEM vor der Definition der DOIFs für die Aktoren der Rollos stehen. Schon gar nicht in der ConfigDB :)

Daher nehmen die DOIFs bei den ReadingsVal den Default Wert an.

Nun suche ich nach wie vor nach einer Möglichkeit bei einem Reboot von FHEM diese Werte mit denen der Eingabefelder zu synchronisieren.

Wie in dem Posting von mir zu lesen hatte das auch mal mit einem Notify funktioniert:

http://forum.fhem.de/index.php/topic,23833.msg249263.html#msg249263

Dummerweise klappt das aber nun nicht mehr.
Eigentlich auch nachvollziehbar, denn wie Rince hier schreibt gilt das Trigger wohl nur für notifys.

http://forum.fhem.de/index.php/topic,23833.msg253389.html#msg253389

Die Idee von Brockmann aus dem Post hier funktioniert auch nicht wirklich.

http://forum.fhem.de/index.php/topic,23833.msg249269.html#msg249269

Nach dem Neustart stehen nach wie vor die Default Werte von ReadingsVal in den DOIFs Definitionen.

@RettungsTim:

ConfigDB kann ich nur empfehlen.
Nutze ich schon was länger und vermisse die fhem.cfg in keinem Fall ;-)

maxritti

Zitat von: maxritti am 29 Januar 2015, 09:11:05Die Idee von Brockmann aus dem Post hier funktioniert auch nicht wirklich.

http://forum.fhem.de/index.php/topic,23833.msg249269.html#msg249269

Nach dem Neustart stehen nach wie vor die Default Werte von ReadingsVal in den DOIFs Definitionen.

Gerade noch mal in Ruhe getestet.
Es funktioniert doch.

[global:?initialized] mit in die DEF das DOIF, welches auf die Eingaben der Dummys reagiert und dann stehen korrekt die Inhalte der Dummys in den timer  :D der DOIFs.

HoTi

Viele Grüße aus  Oberbayern
Tim (RettungsTim)

The-Holgi

Hallo,
habe mir folgendes DOIF gebastelt um eine Lampe abhängig von der Helligkeit zu schalten:
([Aussen_Sensor:luminosity:] < 0.90 ) (set FS20_S8_B on) DOELSE ([Aussen_Sensor:luminosity:] > 1.50 ) (set FS20_S8_B off)
Das Einschalten der lampe funktioniert das Ausschalten leider nicht, hier der logeintrag:
2015.01.29 08:24:23 2: Licht_Kugel_an: 1.68 > 1.50 : Unknown command 1.68, try help.
Vielleicht hat jemand einen Tipp für mich.

Gruß Holgi
Raspberry Pi 5

MaJu

Zwei Dinge: Bei DOELSE darf keine weitere Prüfung drin stehen, sondern nur noch eine Ausführung! Also DOELSEIF statt DOELSE
Zum zweiten: Warum der Doppelpunkt am Ende bei [Aussen_Sensor:luminosity:]?

Deine DOIF-Def müsste aussehen:
([Aussen_Sensor:luminosity] < 0.90 ) (set FS20_S8_B on)

DOELSEIF
([Aussen_Sensor:luminosity] > 1.50 ) (set FS20_S8_B off)

(du kannst in der DEF auch so mit Leerzeilen arbeiten wie du willst, das macht es für mich zumindest übersichtlicher die DOELSEIF für mich optisch auseinander zu ziehen)
Erlebnisreiche Grüße aus Leipzig!

moonsorrox

Zitat von: maxritti am 29 Januar 2015, 09:11:05
Ich habe für meine Rollosteuerung ein paar Dummys erzeugt, wo ich manuell Zeiten eingeben kann.
Dies sind Zeitfenster, wenn Rollos hoch und runter gehen sollen.
Auch habe ich dort Schwellwerte für meinen Helligkeitssensor hinterlegt.

hast du deinen kompletten Rolllo Code irgendwo hier im Thread hinterlegt..?
ich würde ihn mir gern mal anschauen was du das gebaut hast, vorallem das mit den Zeiten interessiert mich schon... da ich auch herum bastel, werde mal noch ein wenig suchen, aber mittlerweile ist es hier schon ganz schön voll geworden.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

The-Holgi

@MaJu Danke für den Tipp. Vor allem die Möglichkeit den Code so auseinander zu schreiben finde ich gut .
Gruß Holgi
Raspberry Pi 5

maxritti

Zitat von: maxritti am 29 Januar 2015, 12:38:43
Gerade noch mal in Ruhe getestet.
Es funktioniert doch.

[global:?initialized] mit in die DEF das DOIF, welches auf die Eingaben der Dummys reagiert und dann stehen korrekt die Inhalte der Dummys in den timer  :D der DOIFs.

Und jetzt muss ich das doch widerrufen.
Das klappt zwar, dass bei einem Neustart die DOIFs initialisiert werden.

Allerdings sitze ich hier gerade so schön auf dem Sofa rum und meine HM Aktoren klacken auf einmal alle. In ein paar Minuten Abstand wieder und dann wieder.

2015.01.29 17:51:40.028 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:51:40.026 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:51:40.024 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:51:40.022 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:51:40.020 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:51:40.018 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:51:40.015 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:51:40.012 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:51:40.010 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:43:56.215 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:43:56.213 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:43:56.211 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:43:56.209 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:43:56.207 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:43:56.205 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:43:56.203 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:43:56.201 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:43:56.198 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:32:14.932 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:32:14.930 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:32:14.928 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:32:14.927 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:32:14.925 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:32:14.923 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:32:14.921 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:32:14.919 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:32:14.916 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:29:15.165 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:29:15.163 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:29:15.161 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:29:15.159 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:29:15.157 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:29:15.155 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:29:15.153 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:29:15.151 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:29:15.148 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:23:38.493 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:23:38.491 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:23:38.489 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:23:38.487 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:23:38.485 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:23:38.483 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:23:38.481 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:23:38.478 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:23:38.476 3: CUL_HM set EG_ku_RO_StrasseLinks off


Daraufhin habe ich mal ein wenig versucht dem Problem auf die Schliche zu kommen.
Ich habe im FHEMWEB ein "define du_Test dummy" gemacht. Kurz danach klackerten die Aktoren wieder.
Dann ein "delete du_Test" und ein erneutes klackern der Aktoren.

Und hier sieht man auch, warum:

Internals:
   CFGFN
   DEF        ([global:?initialized] or [du_Rollo_Zeit_ho] or [du_Rollo_Zeit_ho_WE] or [du_Rollo_Luminosity_ru] or [du_Rollo_Zeit_ru_start] or [du_Rollo_Zeit_ru_ende]) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF])
   NAME       di_Rollo_SetTime
   NR         106
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-29 19:04:31   cmd_event       global
     2015-01-29 19:04:31   cmd_nr          1
     2015-01-29 19:04:31   e_global_events DELETED du_Test
     2015-01-29 19:04:31   state           cmd_1
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or InternalDoIf('du_Rollo_Zeit_ho','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_WE','STATE','') or InternalDoIf('du_Rollo_Luminosity_ru','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_start','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_ende','STATE','')
   Devices:
     0           global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev global
     triggerEvents:
       DELETED du_Test
       MODIFIED di_EG_ku_RO_StrasseLinks
       MODIFIED di_EG_ku_RO_StrasseRechts
       MODIFIED di_EG_wz_RO_Carport
       MODIFIED di_EG_wz_RO_TerrasseLinks
       MODIFIED di_EG_wz_RO_TerrasseRechts
       MODIFIED di_OG_elt_RO_Strasse
       MODIFIED di_OG_ki1_RO_Carport
       MODIFIED di_OG_ki1_RO_Garten
       MODIFIED di_OG_ki2_RO_Garten
   Internals:
     0           du_Rollo_Zeit_ho:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE
     all         du_Rollo_Zeit_ho:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE
   Readings:
   State:
   Timerfunc:
   Trigger:
     all         global
Attributes:
   do         always
   room       LichtRollo


Nur warum ist das ein Grund für das DOIF cmd_1 auszuführen?

So ganz serienreif scheint das noch nicht zu sein, mit meinen Dummys, welche die DOIFs mit dynamischen Werten versorgen sollen.

FunkOdyssey

Was erkennst du denn in deine DOIF, was diesen Fehler verursacht?
Ich habe das bei nämlich auch gerade aufgenommen und hab natürlich jetzt Bammel, dass das bei mir auch passiert. Nur scheint mein DOIF ein wenig schlanker zu sein.

maxritti

Meiner Meinung nach hat mein DOIF cmd_1 ausgeführt, weil global_events aus welchem Grund auch immer eingetreten ist:

     2015-01-29 19:04:31   cmd_event       global
     2015-01-29 19:04:31   cmd_nr          1
     2015-01-29 19:04:31   e_global_events DELETED du_Test
     2015-01-29 19:04:31   state           cmd_1


Es gab um 19:04:31 eigentlich für keines DOIF den Grund hier cmd_1 auszuführen.
Weder die Helligkeit ist unter den definierten Wert gefallen, noch ist irgendeine Zeit erreicht worden.

Hier mal die Def eines verdächtigen DOIFs:
Und das ist nur eines der 9 DOIFs, welche auf einmal loslegen.

([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "22:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "10:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "10:00:00")}|7]))
  (set OG_elt_RO_Strasse on)



maxritti

Das ganze ist auch reproduzierbar.
Man definiert folgenden Dummy:

define du_Zeit dummy
attr du_Zeit setList state:textField
attr du_Zeit webCmd state


und diesen Dummy:

define du_Rollo dummy

Dieses DOIF:

define di_Rollo DOIF ([{ReadingsVal("du_Zeit", "state", "22:00:00")}]) (set du_Rollo on)

und dieses DOIF:

define di_SetTime DOIF ([global:?initialized] or [du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])
attr di_SetTime do always


Nun kann man in dem Dummy du_Zeit einen Zeitwert eingeben und den Focus aus dem Textfeld bewegen.
Dann sieht man im DOIF di_Rollo als internet Timer den eingegebenen Zeitwert.

Soweit so gut.

Gibt man in Fhem Web nun ein define du_test dummy sieht man bei den Readings vom DOIF di_SetTime, dass cmd_1 mit e_global_events
DEFINED du_test
eben zu dem Zeitpunkt der Eingabe von define du_Test dummy ausgeführt wurde.

ZitatInternals:
   CFGFN
   DEF        ([global:?initialized] or [du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])
   NAME       di_SetTime
   NR         45
   NTFY_ORDER 50-di_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-29 21:06:03   cmd_event       global
     2015-01-29 21:06:03   cmd_nr          1
     2015-01-29 21:04:31   e_du_Zeit_STATE 09:30
     2015-01-29 21:04:31   e_du_Zeit_events 09:30
     2015-01-29 21:06:03   e_global_events DEFINED du_test
     2015-01-29 21:06:03   state           cmd_1
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or InternalDoIf('du_Zeit','STATE','')
   Devices:
     0           global du_Zeit
     all         global du_Zeit
   Do:
     0          modify di_Rollo [di_Rollo:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev global
     triggerEvents:
       DEFINED du_test
       MODIFIED di_Rollo
   Internals:
     0           du_Zeit:STATE
     all         du_Zeit:STATE
   Readings:
   State:
   Trigger:
     all         global
Attributes:
   do         always

Das dürfte meiner Meinung nach nicht sein oder?

Damian

#1241
Zitat von: maxritti am 29 Januar 2015, 21:10:55
Das ganze ist auch reproduzierbar.
Man definiert folgenden Dummy:

define du_Zeit dummy
attr du_Zeit setList state:textField
attr du_Zeit webCmd state


und diesen Dummy:

define du_Rollo dummy

Dieses DOIF:

define di_Rollo DOIF ([{ReadingsVal("du_Zeit", "state", "22:00:00")}]) (set du_Rollo on)

und dieses DOIF:

define di_SetTime DOIF ([global:?initialized] or [du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])
attr di_SetTime do always


Nun kann man in dem Dummy du_Zeit einen Zeitwert eingeben und den Focus aus dem Textfeld bewegen.
Dann sieht man im DOIF di_Rollo als internet Timer den eingegebenen Zeitwert.

Soweit so gut.

Gibt man in Fhem Web nun ein define du_test dummy sieht man bei den Readings vom DOIF di_SetTime, dass cmd_1 mit e_global_events
DEFINED du_test
eben zu dem Zeitpunkt der Eingabe von define du_Test dummy ausgeführt wurde.

Das dürfte meiner Meinung nach nicht sein oder?

Das ist ganz einfach. Durch das define ... triggert global. Da es in der ersten Bedingung vorkommt, wird diese ausgewertet. global ist zwar nicht initialized dafür ist aber dein or-Fall  mit [du_Zeit] wahr und das führt zu cmd1.

Edit: Zukünftig wird man unabhängige Ereignisse bei DOIF angeben können (steht bereits auf der todo-Liste im ersten Post). Das wird dann in diesem Fall so aussehen:

define di_SetTime DOIF ([global:?initialized])|([du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])

Damit wird man solche Abhängigkeiten in den Griff bekommen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Invers

Kann mir bitte jemand helfen?
Ich möchte mit DOIF und vielleicht waitdel oder so etwas folgendes Problem lösen:

Ich habe eine Struktur, die zur Anwesenheitskontrolle 2 Handys abgfragt. Ist mindestens eines davon prsent, wird nichts unternommen, sind aber beide absent, wird die Bude abgeschaltet.
Das kann lästig werden, wenn mal wieder kurz das WLAN spinnt. Daher möchte ich vor der Abschaltung aller Geräte (mache ich mit DOIF), dass ich über Sprachausgabe aufgefordert werde, innerhalb einer Minute einen Taster zu drücken. Erfolgt der Druck auf die Taste, soll der Abschaltvorgang abgebrochen oder nicht eingeleitet werden, ansonsten soll abgeschaltet werden.

Das habe ich bereits:
Die Struktur
define BinIchDa structure s_structure s3 s5
und den Schaltbefehl (DOIF)
[code]define di_allesAusBeiAbwesend DOIF ([BinIchDa] eq "absent") \
(set TVLICHT_hinten off,\
set TVLICHT_vorne off,\
und so weiter......)
[/code]

Momentan habe ich da echt einen Knoten im Hirn.
Waitdel könnte der richtige Ansatz sein, trotzdem sehe ich die Lösung nicht.
Wie bekomme ich die Sicherheitsabfrage dazwischen?
Wäre für Hilfe echt dankbar.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

der-Lolo

#1243
Guten Morgen Invers,
Ich glaube ich habe einen ähnlichen anwendungsfall bereits in meiner config, Damian half mir damals dabei - aber schau selbst...

DEF=
Zitat
([pl_soBad] eq "on") (
IF ([pr_soBad] eq "present")
   (IF ([player:config] eq "auto") (set sonos_Bad Volume 12,
   set sonos_Wohnzimmer AddMember sonos_Bad, attr pr_soBad disable 1,
   set EntertainmentEvents add Bad Lautsprecher im Automatikmode angeschaltet und zur Wohnzimmer Wiedergabe hinzugefügt...)
   ELSE (set EntertainmentEvents add Der Bad Lautsprecher ist im Sonossystem zur Wiedergabe bereit...,
   attr pr_soBad disable 1)
   )
ELSE
   (set pl_soBad off,set EntertainmentEvents add Netzwerkeinbindung missglückt - ich versuche den Player neu zu starten.,
   define at_pl_soBad at +00:00:05 set pl_soBad on)
)
Dazu die attribute wait und do always...

Es ist also ein geschachtel mit IF.
Als eingangsbedingung nimmst du deinen abwesend Trigger, wait time sollte die zeit sein die du dir selbst gibst einen tastendruck auszulösen.
Sollte während der wait Time nicht der Tastendruck ausgelöst werden springt das konstruckt in den unteren ELSE zweig - in meinem fall der mit dem timer, dort solltest du dann alles ausschalten.
Das zweite IF konstrukt brauchst du wahrscheinlich gar nicht, bei mir wird in diesem fall anhand von player:config entschieden ob sich der player automatisch gruppieren soll - oder ob er sich als standalone ins sonos netz integriert.
Also das zweite if weglassen und dort deinen vorgang für anwesed trotz presence absent schalten.
Deine tts ausgabe mit der aufforderung eine taste zu drücken solltest du seperat auslösen.
In meinem Fall ist pl_ ein aktor (plug), pr_ ein presence Device, sonos ein player und EntertainmentEvents ein readingshistory als userlog.

Die möglichkeit in den ausführungsteile ein IF zu integrieren eröffnet allerdings auch neue Möglichkeiten für gebastel ;-)


maxritti

Zitat von: Damian am 29 Januar 2015, 21:45:26
Das ist ganz einfach. Durch das define ... triggert global. Da es in der ersten Bedingung vorkommt, wird diese ausgewertet. global ist zwar nicht initialized dafür ist aber dein or-Fall  mit [du_Zeit] wahr und das führt zu cmd1.

Edit: Zukünftig wird man unabhängige Ereignisse bei DOIF angeben können (steht bereits auf der todo-Liste im ersten Post). Das wird dann in diesem Fall so aussehen:

define di_SetTime DOIF ([global:?initialized])|([du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])

Damit wird man solche Abhängigkeiten in den Griff bekommen.

Gruß

Damian
Kann es sein, dass das global auch noch durch andere Dinge getriggert wird?
Denn wie gesagt. Ich lungerte auf dem Sofa rum und auf einmal klackten die Aktoren alle willkürlich rum.
In unterschiedlichen Zeitintervallen.

Ich vermute da mal in der Tat das global:?initialized.
Denn wenn das raus ist, ist ruhe.
Nur was kann das noch alles initiieren?

Aber wenn es auf deinem ToDo Zettel steht ist es ja nur eine Frage der Zeit. :)

Danke schon mal dafür.