Hallo,
hier ein "list" eines Devices, von dem ich eigentlich erwarten würde, dass es mir seinen Status (wenn ich auf "everything" klicke) anzeigt.
Leider steht dort immer nur "idle" und nie z.B. "Linker Platz 2.Reihe 1.Fenster".
Ausgeführt werden die einzelnen Blöcke, die zu einer entsprechenden Ausgabe führen müssten.
Was mache ich da falsch?
Gruß Chris
Internals:
DEF ## [HM_markise:state] eq "closed"
{if([24:00]){set_State("idle")}} ## idle
{if ((!$we and [16:00-22:00]) or $we) ## unter der Woche ab 16 Uhr und an Wochenenden und Feiertagen immer
{
if ([Bewohner:state] eq "home" and [Wetterstation:luminosity] >= "36000" and [Wetterstation:UVR] >= "350" and [Wetterstation:temperature] >= "10" and [HM_drehgriffEsszimmer:state] ne "open")
{
{if([twilight:azimuth] >= "219" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "28.7" and [twilight:elevation:d1] > "23.3" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 1.Fenster")}} ## L11
{if([twilight:azimuth] >= "265" and [twilight:azimuth] < "292" and [twilight:elevation:d1] <= "30.3" and [twilight:elevation:d1] > "24.5" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 2.Fenster")}} ## L12
{if([twilight:azimuth] >= "292" and [twilight:azimuth] < "301" and [twilight:elevation:d1] <= "22.3" and [twilight:elevation:d1] > "18.7" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 3.Fenster")}} ## L13
{if([twilight:azimuth] >= "202" and [twilight:azimuth] < "229" and [twilight:elevation:d1] <= "23.7" and [twilight:elevation:d1] > "18.4" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Rechter Platz 1.Reihe 1.Fenster")}} ## R11
{if([twilight:azimuth] >= "229" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "30.5" and [twilight:elevation:d1] > "26.2" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Rechter Platz 1.Reihe 2.Fenster")}} ## R12
{if([twilight:azimuth] >= "265" and [twilight:azimuth] < "288" and [twilight:elevation:d1] <= "30.1" and [twilight:elevation:d1] > "25.5" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Rechter Platz 1.Reihe 3.Fenster")}} ## R13
{if([twilight:azimuth] >= "219" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "23.3" and [twilight:elevation:d1] > "15.6" and [?HM_rolloEsszimmer:control] > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Linker Platz 2.Reihe 1.Fenster")}} ## L21
{if([twilight:azimuth] >= "265" and [twilight:azimuth] < "292" and [twilight:elevation:d1] <= "24.5" and [twilight:elevation:d1] > "17.6" and [?HM_rolloEsszimmer:control] > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Linker Platz 2.Reihe 2.Fenster")}} ## L22
{if([twilight:azimuth] >= "292" and [twilight:azimuth] < "301" and [twilight:elevation:d1] <= "18.7" and [twilight:elevation:d1] > "12.6" and [?HM_rolloEsszimmer:control] > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Linker Platz 2.Reihe 3.Fenster")}} ## L23
{if([twilight:azimuth] >= "202" and [twilight:azimuth] < "229" and [twilight:elevation:d1] <= "18.4" and [twilight:elevation:d1] > "13.8" and [?HM_rolloEsszimmer:control] > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Rechter Platz 2.Reihe 1.Fenster")}} ## R21
{if([twilight:azimuth] >= "229" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "26.2" and [twilight:elevation:d1] > "18.3" and [?HM_rolloEsszimmer:control] > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Rechter Platz 2.Reihe 2.Fenster")}} ## R22
{if([twilight:azimuth] >= "265" and [twilight:azimuth] < "288" and [twilight:elevation:d1] <= "25.5" and [twilight:elevation:d1] > "18.5" and [?HM_rolloEsszimmer:control] > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Rechter Platz 2.Reihe 3.Fenster")}} ## R23
{if([twilight:azimuth] >= "219" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "15.6" and [twilight:elevation:d1] > "8.0" and [?HM_rolloEsszimmer:control] > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Linker Platz 3.Reihe 1.Fenster")}} ## L31
{if([twilight:azimuth] >= "265" and [twilight:azimuth] < "292" and [twilight:elevation:d1] <= "17.6" and [twilight:elevation:d1] > "8.9" and [?HM_rolloEsszimmer:control] > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Linker Platz 3.Reihe 2.Fenster")}} ## L32
{if([twilight:azimuth] >= "292" and [twilight:azimuth] < "301" and [twilight:elevation:d1] <= "12.6" and [twilight:elevation:d1] > "6.4" and [?HM_rolloEsszimmer:control] > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Linker Platz 3.Reihe 3.Fenster")}} ## L33
{if([twilight:azimuth] >= "202" and [twilight:azimuth] < "229" and [twilight:elevation:d1] <= "13.8" and [twilight:elevation:d1] > "6.6" and [?HM_rolloEsszimmer:control] > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Rechter Platz 3.Reihe 1.Fenster")}} ## R31
{if([twilight:azimuth] >= "229" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "18.3" and [twilight:elevation:d1] > "10.2" and [?HM_rolloEsszimmer:control] > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Rechter Platz 3.Reihe 2.Fenster")}} ## R32
{if([twilight:azimuth] >= "265" and [twilight:azimuth] < "288" and [twilight:elevation:d1] <= "18.5" and [twilight:elevation:d1] > "11.0" and [?HM_rolloEsszimmer:control] > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Rechter Platz 3.Reihe 3.Fenster")}} ## R33
}
}
}
MODEL Perl
NAME perlSonnenstand
NR 75
NTFY_ORDER 50-perlSonnenstand
STATE idle
TYPE DOIF
READINGS:
2018-11-10 20:15:26 Device twilight
2018-11-10 00:00:00 block_01 executed
2018-11-10 20:15:26 block_02 executed
2018-11-04 14:27:59 doifState fhemCmd
2018-11-09 15:47:05 e_Bewohner_state home
2018-11-10 19:02:50 e_HM_drehgriffEsszimmer_state closed
2018-11-10 17:10:25 e_Wetterstation_UVR 0.5
2018-11-10 16:42:41 e_Wetterstation_luminosity 85.3575099975242
2018-11-10 20:06:25 e_Wetterstation_temperature 10.35
2018-11-10 20:15:26 e_twilight_azimuth 281.67
2018-11-10 20:15:26 e_twilight_elevation -34.15
2018-11-09 23:59:00 mode enabled
2018-11-10 00:00:00 state idle
2018-11-10 00:00:00 timer_01_c01 11.11.2018 00:00:00
2018-11-09 22:00:00 timer_02_c02 10.11.2018 16:00:00
2018-11-09 22:00:00 timer_03_c02 10.11.2018 22:00:00
Regex:
condition:
0 if(::DOIF_time_once($hash,0,$wday)){set_State("idle")}
1 if ((!$we and ::DOIF_time($hash,1,2,$wday,$hms)) or $we) {
if (::ReadingValDoIf($hash,'Bewohner','state') eq "home" and ::ReadingValDoIf($hash,'Wetterstation','luminosity') >= "36000" and ::ReadingValDoIf($hash,'Wetterstation','UVR') >= "350" and ::ReadingValDoIf($hash,'Wetterstation','temperature') >= "10" and ::ReadingValDoIf($hash,'HM_drehgriffEsszimmer','state') ne "open")
{
{if(::ReadingValDoIf($hash,'twilight','azimuth') >= "219" and ::ReadingValDoIf($hash,'twilight','azimuth') < "265" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "28.7" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "23.3" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 1.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "265" and ::ReadingValDoIf($hash,'twilight','azimuth') < "292" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "30.3" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "24.5" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 2.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "292" and ::ReadingValDoIf($hash,'twilight','azimuth') < "301" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "22.3" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "18.7" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 3.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "202" and ::ReadingValDoIf($hash,'twilight','azimuth') < "229" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "23.7" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "18.4" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Rechter Platz 1.Reihe 1.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "229" and ::ReadingValDoIf($hash,'twilight','azimuth') < "265" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "30.5" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "26.2" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Rechter Platz 1.Reihe 2.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "265" and ::ReadingValDoIf($hash,'twilight','azimuth') < "288" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "30.1" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "25.5" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Rechter Platz 1.Reihe 3.Fenster")}}
{if(::ReadingValDoIf($hash,'twilight','azimuth') >= "219" and ::ReadingValDoIf($hash,'twilight','azimuth') < "265" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "23.3" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "15.6" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Linker Platz 2.Reihe 1.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "265" and ::ReadingValDoIf($hash,'twilight','azimuth') < "292" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "24.5" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "17.6" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Linker Platz 2.Reihe 2.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "292" and ::ReadingValDoIf($hash,'twilight','azimuth') < "301" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "18.7" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "12.6" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Linker Platz 2.Reihe 3.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "202" and ::ReadingValDoIf($hash,'twilight','azimuth') < "229" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "18.4" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "13.8" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Rechter Platz 2.Reihe 1.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "229" and ::ReadingValDoIf($hash,'twilight','azimuth') < "265" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "26.2" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "18.3" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Rechter Platz 2.Reihe 2.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "265" and ::ReadingValDoIf($hash,'twilight','azimuth') < "288" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "25.5" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "18.5" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "84") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 84");set_State("Rechter Platz 2.Reihe 3.Fenster")}}
{if(::ReadingValDoIf($hash,'twilight','azimuth') >= "219" and ::ReadingValDoIf($hash,'twilight','azimuth') < "265" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "15.6" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "8.0" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Linker Platz 3.Reihe 1.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "265" and ::ReadingValDoIf($hash,'twilight','azimuth') < "292" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "17.6" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "8.9" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Linker Platz 3.Reihe 2.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "292" and ::ReadingValDoIf($hash,'twilight','azimuth') < "301" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "12.6" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "6.4" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Linker Platz 3.Reihe 3.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "202" and ::ReadingValDoIf($hash,'twilight','azimuth') < "229" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "13.8" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "6.6" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Rechter Platz 3.Reihe 1.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "229" and ::ReadingValDoIf($hash,'twilight','azimuth') < "265" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "18.3" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "10.2" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Rechter Platz 3.Reihe 2.Fenster")}} {if(::ReadingValDoIf($hash,'twilight','azimuth') >= "265" and ::ReadingValDoIf($hash,'twilight','azimuth') < "288" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') <= "18.5" and ::ReadingValDoIf($hash,'twilight','elevation','','d1') > "11.0" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "78") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 78");set_State("Rechter Platz 3.Reihe 3.Fenster")}} }
}
days:
devices:
1 Bewohner Wetterstation HM_drehgriffEsszimmer twilight
all Bewohner Wetterstation HM_drehgriffEsszimmer twilight
helper:
event azimuth: 281.67,elevation: -34.15
globalinit 1
last_timer 3
sleeptimer -1
triggerDev twilight
triggerEvents:
azimuth: 281.67
elevation: -34.15
triggerEventsState:
azimuth: 281.67
elevation: -34.15
internals:
interval:
1 -1
2 1
intervalfunc:
intervaltimer:
itimer:
localtime:
0 1541890800
1 1541862000
2 1541883600
perlblock:
0
1
readings:
1 Bewohner:state Wetterstation:luminosity Wetterstation:UVR Wetterstation:temperature HM_drehgriffEsszimmer:state twilight:azimuth twilight:elevation
all Bewohner:state Wetterstation:luminosity Wetterstation:UVR Wetterstation:temperature HM_drehgriffEsszimmer:state twilight:azimuth twilight:elevation
realtime:
0 00:00:00
1 16:00:00
2 22:00:00
time:
0 24:00:00
1 16:00:00
2 22:00:00
timeCond:
0 0
1 1
2 1
timer:
0 0
1 0
2 0
timers:
0 0
1 1 2
trigger:
triggertime:
1541883600:
localtime 1541883600
hash:
1541890800:
localtime 1541890800
hash:
uiState:
uiTable:
Attributes:
startup set $SELF enable
Wurde in dem Beispiel eine der Bedingungen wahr, welche?
Hallo,
z.B. wird dieser Block ausgeführt:
{if([twilight:azimuth] >= "219" and [twilight:azimuth] < "265" and [twilight:elevation:d1] <= "28.7" and [twilight:elevation:d1] > "23.3" and [?HM_rolloEsszimmer:control] > "92") {set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92");set_State("Linker Platz 1.Reihe 1.Fenster")}} ## L11
Ich erkenne das daran, dass der Rolladen die entspr. Position anfährt. Es könnte auch einer der folgenden fünf Blöcke ausgeführt werden, da jeweils sechs aufeinanderfolgende Blöcke dieselbe Position anfahren. Klar ist jedoch, dass mind. ein Block eines "Sechserblocks" (siehe Code oben) ausgeführt wird.
Ist vielleicht der Inhalt des darzustellenden Textes das Problem?
Linker Platz 2.Reihe 1.Fenster
Dürfen da vielleicht keine Punkte und/oder Leerzeichen enthalten sein?
Gruß Chris
Dann sollte state eigentlich gesetzt werden.
Mir ist nur aufgefallen, dass Du die if Abragen in je einen Perl-Block packst das ist unüblich.
statt
{if () {}}
{if () {}}
...
so
if () {};
if () {};
...
Wenn Du bei Verschachtelungen einrückst, dann wird es lesbarer, für jemanden der helfen möchte.
Es sollte eigentlich nicht notwendig sein, aber Du könntest probieren set_State() mit einem Semikolon abzuschliessen.
Oder mal die Reihenfolge der Befehle vertauschen und sehen ob sich etwas ändert.
Bei mir kann ich set_State mit Leerzeichen, Zahlen und Punkten setzen.
Zahlen brauchen beim Vergleich nicht in Anführungszeichen gesetzt werden.
Die überflüssigen geschweiften Klammen hat Ellert schon genannt.
Die vielen gleichartigen Abfragen könnte man eleganter durch eine Funktion ersetzen, die man jeweils nur noch mit den entsprechenden Werten aufruft.
Danke, da waren gute Tipps dabei. Werde das alles mal austesten. Wird aber eine Weile dauern, da die Bedingungen nur dann erfüllt werden, wenn die Sonne in einem bestimmten Winkel wirklich auch durch die Fenster reinballert. Das ist momentan so ehr nicht der Fall.
Zitat von: Damian am 11 November 2018, 10:12:31Die vielen gleichartigen Abfragen könnte man eleganter durch eine Funktion ersetzen, die man jeweils nur noch mit den entsprechenden Werten aufruft.
Hast Du mir einen heissen Link hierfür?
Gruß Chris
Da würde ich nicht auf die Sonne warten. So würden Softwareentwickler nie etwas fertigstellen können ;)
Du kannst dir doch in irgend einem Device (Dummy) die passenden Readings belegen und zum Testen abfragen. Wenn alles läuft, wird wieder auf das richtige Device in der Bedingung gewechselt.
Hallo,
ich habe mir jetzt mal, wie empfohlen ein "Test-DOIF" namens "perlTest" gebaut, die überflüssigen Klammern, sowie auszuführende Befehle außer der Aufforderung "state" zu verändern entfernt.
## [HM_markise:state] eq "closed"
{if(["^perlTest$:^1$"]){set_State("idle")}}
{if ((!$we and [16:00-22:00]) or $we)
{
if ([Bewohner:state] eq "home" and [Wetterstation:luminosity] >= "36000" and [Wetterstation:UVR] >= "350" and [Wetterstation:temperature] >= "10" and [HM_drehgriffEsszimmer:state] ne "open")
{
if(["^perlTest$:^2$"]) {set_State("Linker Platz 1.Reihe 1.Fenster";)}
}
}
}
Schreibe ich "trigger perlTest 1" erscheint "idle".
Schreibe ich "trigger perlTest 2" bleibt "idle" unverändert stehen.
:-\
Gruß Chris
Hier das "list" von "perlTest":
Internals:
CFGFN
DEF ## [HM_markise:state] eq "closed"
{if(["^perlTest$:^1$"]){set_State("idle")}} ## idle
{if ((!$we and [16:00-22:00]) or $we) ## unter der Woche ab 16 Uhr und an Wochenenden und Feiertagen immer
{
if ([Bewohner:state] eq "home" and [Wetterstation:luminosity] >= "36000" and [Wetterstation:UVR] >= "350" and [Wetterstation:temperature] >= "10" and [HM_drehgriffEsszimmer:state] ne "open")
{
if(["^perlTest$:^2$"]) {set_State("Linker Platz 1.Reihe 1.Fenster";)} ## L11
}
}
}
MODEL Perl
NAME perlTest
NR 68862
NTFY_ORDER 50-perlTest
STATE idle
TYPE DOIF
READINGS:
2018-11-11 14:14:59 Device Wetterstation
2018-11-11 14:11:23 block_01 executed
2018-11-11 14:13:55 block_02 condition c02: syntax error, line 4, at EOF
2018-11-11 14:13:23 e_Wetterstation_UVR 438.564039450743
2018-11-11 14:13:55 e_Wetterstation_luminosity 15922.5205397175
2018-11-11 14:10:50 mode enabled
2018-11-11 14:11:23 state idle
2018-11-11 14:10:50 timer_01_c02 11.11.2018 16:00:00
2018-11-11 14:10:50 timer_02_c02 11.11.2018 22:00:00
Regex:
cond:
:
0:
"^perlTest$:^1$" ^perlTest$:^1$
1:
"^perlTest$:^2$" ^perlTest$:^2$
condition:
0 if(::EventDoIf('^perlTest$',$hash,'^1$',0)){set_State("idle")}
1 if ((!$we and ::DOIF_time($hash,0,1,$wday,$hms)) or $we) {
if (::ReadingValDoIf($hash,'Bewohner','state') eq "home" and ::ReadingValDoIf($hash,'Wetterstation','luminosity') >= "36000" and ::ReadingValDoIf($hash,'Wetterstation','UVR') >= "350" and ::ReadingValDoIf($hash,'Wetterstation','temperature') >= "10" and ::ReadingValDoIf($hash,'HM_drehgriffEsszimmer','state') ne "open")
{
if(::EventDoIf('^perlTest$',$hash,'^2$',0)) {set_State("Linker Platz 1.Reihe 1.Fenster";)} }
}
days:
devices:
1 Bewohner Wetterstation HM_drehgriffEsszimmer
all Bewohner Wetterstation HM_drehgriffEsszimmer
helper:
event wind_gust: 7.9
globalinit 1
last_timer 2
sleeptimer -1
triggerDev Wetterstation
triggerEvents:
wind_gust: 7.9
triggerEventsState:
wind_gust: 7.9
internals:
interval:
0 -1
1 0
intervalfunc:
itimer:
localtime:
0 1541948400
1 1541970000
perlblock:
0
1
readings:
1 Bewohner:state Wetterstation:luminosity Wetterstation:UVR Wetterstation:temperature HM_drehgriffEsszimmer:state
all Bewohner:state Wetterstation:luminosity Wetterstation:UVR Wetterstation:temperature HM_drehgriffEsszimmer:state
realtime:
0 16:00:00
1 22:00:00
time:
0 16:00:00
1 22:00:00
timeCond:
0 1
1 1
timer:
0 0
1 0
timers:
1 0 1
trigger:
triggertime:
1541948400:
localtime 1541948400
hash:
1541970000:
localtime 1541970000
hash:
uiState:
uiTable:
Attributes:
{if(["^perlTest$:^1$"]){set_State("idle")}} ## idle
{if(["^perlTest$:^2$"]) {set_State("Linker Platz 1.Reihe 1.Fenster";)}} ## L11
Wenn mit "trigger perlTest 2" der Status hier gesetzt wird, dann weißt du woran das liegt ;)
Ehrlich gesagt nein. :-[
Weil sich davor keine weiteren if-Bedinungen befinden?
Gruß Chris
Zitat von: chq am 11 November 2018, 14:32:42
Ehrlich gesagt nein. :-[
Weil sich davor keine weiteren if-Bedinungen bedinden?
Gruß Chris
Genau. In deiner Konstruktion ist also eine der beiden äußeren if-Abfragen nicht wahr.
Ok, das habe ich soweit verstanden.
Mein eingangs geschildertes Problem war jedoch, dass Bedinungen erfüllt und Befehle ausgeführt werden, sich aber trotzdem
state nicht ändert.
Ich habe das Problem nun auf eine Zeile herunterbrechen können. Beim folgenden DOIF wird sowohl das Event "fhemCmd" gesendet, als auch der Rolladen bewegt. Was offensichtlich nach wie vor nicht geschieht, ist eine Aktualisierung von
state:
{if([07:17]) {set_Event("fhemCmd");set_State("Linker Platz 1.Reihe 1.Fenster");fhem_set("HM_rolloEsszimmer pct 92")}}
Gruß Chris
Das
list:
Internals:
CFGFN
DEF {if([07:17]) {set_Event("fhemCmd");set_State("Linker Platz 1.Reihe 1.Fenster");fhem_set("HM_rolloEsszimmer pct 92")}}
MODEL Perl
NAME perlTest
NR 6106
NTFY_ORDER 50-perlTest
STATE initialized
TYPE DOIF
READINGS:
2018-11-12 07:17:00 block_01 executed
2018-11-12 07:16:53 mode enabled
2018-11-12 07:05:48 state initialized
2018-11-12 07:17:00 timer_01_c01 13.11.2018 07:17:00
Regex:
condition:
0 if(::DOIF_time_once($hash,0,$wday)) {set_Event("fhemCmd");set_State("Linker Platz 1.Reihe 1.Fenster");fhem_set("HM_rolloEsszimmer pct 92")}
days:
devices:
helper:
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
triggerDev
triggerEvents:
timer_1
internals:
interval:
intervalfunc:
itimer:
localtime:
0 1542089820
perlblock:
0
readings:
realtime:
0 07:17:00
time:
0 07:17:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1542089820:
localtime 1542089820
hash:
uiState:
uiTable:
Attributes:
Edit: Nur wenn ich den Befehl "set_State("Linker Platz 1.Reihe 1.Fenster")" nach ganz vorne verschiebe, funktioniert es nun.
Ich kann das nicht verstehen, fresse es aber einfach mal so, wie es zu sein scheint.Also so:
{if([07:17]) {set_State("Linker Platz 1.Reihe 1.Fenster");set_Event("fhemCmd");fhem_set("HM_rolloEsszimmer pct 92")}}
Zitat von: Damian am 11 November 2018, 10:12:31Die vielen gleichartigen Abfragen könnte man eleganter durch eine Funktion ersetzen, die man jeweils nur noch mit den entsprechenden Werten aufruft.
Hast Du mir einen heissen Link hierfür?
Bei mir funktioniert auch so etwas:
{if([07:17]) {set_Event("fhemCmd");set_State("Linker Platz 1.Reihe 1.Fenster");fhem_set("HM_rolloEsszimmer pct 92")}}
ohne Probleme. Set wird sauber gesetzt:
ZitatDEF {if ([09:56]) {set_Event("fhemCmd");set_State("Linker Platz 1.Reihe 1.Fenster");fhem_set("bla pct 92")}}
MODEL Perl
NAME di_temptest
NR 451
NTFY_ORDER 50-di_temptest
STATE Linker Platz 1.Reihe 1.Fenster
TYPE DOIF
OLDREADINGS:
READINGS:
2018-11-12 09:56:00 block_01 executed
2018-11-12 09:55:09 mode enabled
2018-11-12 09:56:00 state Linker Platz 1.Reihe 1.Fenster
2018-11-12 09:56:00 timer_01_c01 13.11.2018 09:56:00
Ich hoffe du editierst über FHEMWEB im DEF-Editor und nicht in der cfg-Datei (dort müssen Semikolons gedoppelt werden)
Zitat von: Damian am 12 November 2018, 09:58:50Ich hoffe du editierst über FHEMWEB im DEF-Editor und nicht in der cfg-Datei (dort müssen Semikolons gedoppelt werden)
Ja, ich benutze ausschließlich DEF.
Gruß Chris
Zitat von: chq am 12 November 2018, 07:23:03
Hast Du mir einen heissen Link hierfür?
Nein,
aber vielleicht hilft das:
DEF ([Bewohner:state] eq "home" and [Wetterstation:luminosity] >= "36000" and [Wetterstation:UVR] >= "350" and [Wetterstation:temperature] >= "10" and [HM_drehgriffEsszimmer:state] ne "open")
({
myCalcPlatz();
})
in der 99_myUtils:
sub myCalcPlatz(){
my $azimuth = ReadingsVal("twilight","azimuth","error");
my $elevation = ReadingsVal("twilight","elevation","error");
my $control = ReadingsVal("HM_rolloEsszimmer","control","error");
my $place;
if($azimuth eq "error" || $elevation eq "error" || $control eq "error)
{
## gib eine Fehlermeldung
}
if($Control > 92){
if($azimuth >= 219 && $azimuth <265 && $Elevation <=28.7 && $Elevation > 23.3)
{
my $place = "Linker Platz 1.Reihe 1.Fenster";
}
if($azimuth >= [...] && $azimuth <[...] && $Elevation <=[...] && $Elevation > [...])
{
my $place = "Linker Platz 1.Reihe 1.Fenster";
}
}## else $Control
else
{
## gib eine Meldung, dass $Control < 92
}
set_Event("fhemCmd"); ## Hier bin ich nicht sicher, was das Kommando macht. Perl-Eqivalent finden...
## HM-Rollo setzen, machst du in jedem Aufruf gleich (?), spart somit code
fhem("set HM_rolloEsszimmer pct 92");
## den Platz in ein Reading im DOIF packen:
fhem("setreading <aufrufendes DOIF> platz $place");
## jetzt kannst du mit
## attr <aufrufendes DOIF> stateFormat platz
## den Status anzeigen lassen...
}
evtl kannst du mit given/when weiter vereinfachen ...
kommt natürlich auch auf deine Bedingungen an ...
Grüße,
Stephan
Was für ein super Input!
Vielen Dank für die Mühe, die Du Dir da gemacht hast.
Ein Event namens "fhemCmd" wird immer dann gesendet, wenn ein Rolladen aufgrund zutreffender Bedingungen seitens FHEM bewegt wird.
Ein weiteres DOIF, welches ausschließlich für die Auswertung der Events aus meiner CCU2 zuständig ist, beinhaltet einen Timer. Dieser Timer ist dafür zuständig, dass Events aus der CCU2 nicht dazu führen, dass das DOIF, welches den Rolladen anhand Sonnenstand und -intensität steuert, deaktiviert wird. Kommt nach Ablauf des Timers ein Event seitens der CCU2 rein, wurde der Rolladen manuell bedient und das besagte DOIF wird deaktiviert. Jede Nacht wird das DOIF dann auf`s Neue wieder aktiviert.
Das bedeutet, dass die automatisierte Steuerung für den aktuellen Tag deaktiviert wird, sobald der Rolladen einmalig manuell bedient wird. Das ist genau so gewollt.
Gruß Chris