Hallo,
ich komme einfach nicht auf den Fehler.
Eigentliche Intention war eine Zeitautomatik im Flur anhand der Bewegungsmelder + max. Helligkeit + Auswahl des Zeitraums mittels einer definierten Zeit oder rel. zu Sonnenaufgang / -untergang.
Die vorhergehende Lösung mit Bewegungsmelder + max. Helligkeit + definiertem Zeitraum hat ohne Probleme funktioniert.
Bei der Erweiterung mit der Automatik (und somit einer notwendigen Zeitberechnung für das Zeitintervall) sagt mir FHEM, dass die Timer nicht berechnet werden konnten, da das Format nicht passt?
Zitaterror: unknown expression format
Das ist der DOIF:
Internals:
DEF (
(
### Start Astro / Ende Zeit
(
[doif_flur_LichtAnAus:Automatik_Start] eq "Astro" and [doif_flur_LichtAnAus:Automatik_Ende] eq "Zeit" and
[[([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])] - [doif_flur_LichtAnAus:Zeitraum_bis]]
)
or
### Start Zeit / Ende Astro
(
[doif_flur_LichtAnAus:Automatik_Start] eq "Zeit" and [doif_flur_LichtAnAus:Automatik_Ende] eq "Astro" and
[[doif_flur_LichtAnAus:Zeitraum_von] - [([dummy_astro:sunrise_abs_civil]+[doif_flur_LichtAnAus:Automatik_nach_sunrise])]]
)
or
### Start Zeit / Ende Zeit
(
[doif_flur_LichtAnAus:Automatik_Start] eq "Zeit" and [doif_flur_LichtAnAus:Automatik_Ende] eq "Zeit" and
[[doif_flur_LichtAnAus:Zeitraum_von] - [doif_flur_LichtAnAus:Zeitraum_bis]]
)
or
### Start Astro / Ende Astro
(
[doif_flur_LichtAnAus:Automatik_Start] eq "Astro" and [doif_flur_LichtAnAus:Automatik_Ende] eq "Astro" and
[[([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])] - [([dummy_astro:sunrise_abs_civil]+[doif_flur_LichtAnAus:Automatik_nach_sunrise])]]
)
)
and
([flur_MotionSensor_1:Helligkeit] <= [doif_flur_LichtAnAus:unterHelligkeit] or [flur_MotionSensor_2:Helligkeit] <= [doif_flur_LichtAnAus:unterHelligkeit])
and
([flur_MotionSensor_1:reportedState] eq "open" or [flur_MotionSensor_2:reportedState] eq "open")
)
(set flur_Schaltaktor_LED on)
DOELSEIF
([flur_MotionSensor_1:reportedState] eq "closed" and [flur_MotionSensor_2:reportedState] eq "closed") (set flur_Schaltaktor_LED off)
MODEL FHEM
NAME doif_flur_LichtAnAus
NR 302
NTFY_ORDER 50-doif_flur_LichtAnAus
STATE initialized
TYPE DOIF
READINGS:
2018-08-22 15:58:19 Automatik_Ende Astro
2018-08-22 15:58:19 Automatik_Start Astro
2018-08-22 16:25:19 Automatik_nach_sunrise 3600
2018-08-22 16:25:19 Automatik_vor_sunset 3600
2018-08-22 15:58:19 Zeitraum_bis 06:00
2018-08-22 15:58:19 Zeitraum_von 21:00
2018-08-22 16:29:44 cmd 0
2018-08-22 16:29:44 mode enabled
2018-08-22 16:29:44 state initialized
2018-08-22 16:29:44 timer_01_c01 error: unknown expression format
2018-08-22 16:29:44 timer_02_c01 23.08.2018 06:00:00
2018-08-22 16:29:44 timer_03_c01 22.08.2018 21:00:00
2018-08-22 16:29:44 timer_04_c01 error: unknown expression format
2018-08-22 16:29:44 timer_05_c01 22.08.2018 21:00:00
2018-08-22 16:29:44 timer_06_c01 23.08.2018 06:00:00
2018-08-22 16:29:44 timer_07_c01 error: unknown expression format
2018-08-22 16:29:44 timer_08_c01 error: unknown expression format
2018-08-22 15:58:19 unterHelligkeit 250
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 ( ( ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Start') eq "Astro" and ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Ende') eq "Zeit" and DOIF_time($hash,0,1,$wday,$hms) ) or ( ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Start') eq "Zeit" and ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Ende') eq "Astro" and DOIF_time($hash,2,3,$wday,$hms) ) or ( ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Start') eq "Zeit" and ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Ende') eq "Zeit" and DOIF_time($hash,4,5,$wday,$hms) ) or ( ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Start') eq "Astro" and ReadingValDoIf($hash,'doif_flur_LichtAnAus','Automatik_Ende') eq "Astro" and DOIF_time($hash,6,7,$wday,$hms) ) ) and (ReadingValDoIf($hash,'flur_MotionSensor_1','Helligkeit') <= ReadingValDoIf($hash,'doif_flur_LichtAnAus','unterHelligkeit') or ReadingValDoIf($hash,'flur_MotionSensor_2','Helligkeit') <= ReadingValDoIf($hash,'doif_flur_LichtAnAus','unterHelligkeit')) and (ReadingValDoIf($hash,'flur_MotionSensor_1','reportedState') eq "open" or ReadingValDoIf($hash,'flur_MotionSensor_2','reportedState') eq "open")
1 ReadingValDoIf($hash,'flur_MotionSensor_1','reportedState') eq "closed" and ReadingValDoIf($hash,'flur_MotionSensor_2','reportedState') eq "closed"
days:
devices:
0 doif_flur_LichtAnAus flur_MotionSensor_1 flur_MotionSensor_2
1 flur_MotionSensor_1 flur_MotionSensor_2
all doif_flur_LichtAnAus flur_MotionSensor_1 flur_MotionSensor_2
do:
0:
0 set flur_Schaltaktor_LED on
1:
0 set flur_Schaltaktor_LED off
2:
helper:
globalinit 1
last_timer 8
sleeptimer -1
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
6 -1
7 6
intervalfunc:
itimer:
all doif_flur_LichtAnAus
localtime:
1 1534996800
2 1534964400
4 1534964400
5 1534996800
readings:
0 doif_flur_LichtAnAus:Automatik_Start doif_flur_LichtAnAus:Automatik_Ende flur_MotionSensor_1:Helligkeit doif_flur_LichtAnAus:unterHelligkeit flur_MotionSensor_2:Helligkeit flur_MotionSensor_1:reportedState flur_MotionSensor_2:reportedState
1 flur_MotionSensor_1:reportedState flur_MotionSensor_2:reportedState
all doif_flur_LichtAnAus:Automatik_Start doif_flur_LichtAnAus:Automatik_Ende flur_MotionSensor_1:Helligkeit doif_flur_LichtAnAus:unterHelligkeit flur_MotionSensor_2:Helligkeit flur_MotionSensor_1:reportedState flur_MotionSensor_2:reportedState
realtime:
1 06:00:00
2 21:00:00
4 21:00:00
5 06:00:00
time:
0 [([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])]
1 [doif_flur_LichtAnAus:Zeitraum_bis]
2 [doif_flur_LichtAnAus:Zeitraum_von]
3 [([dummy_astro:sunrise_abs_civil]+[doif_flur_LichtAnAus:Automatik_nach_sunrise])]
4 [doif_flur_LichtAnAus:Zeitraum_von]
5 [doif_flur_LichtAnAus:Zeitraum_bis]
6 [([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])]
7 [([dummy_astro:sunrise_abs_civil]+[doif_flur_LichtAnAus:Automatik_nach_sunrise])]
timeCond:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
timers:
0 0 1 2 3 4 5 6 7
triggertime:
1534964400:
localtime 1534964400
hash:
1534996800:
localtime 1534996800
hash:
uiState:
uiTable:
Attributes:
disable 0
room 02_Flur,21_ZWave
userReadings Automatik_Start,Automatik_Ende,Zeitraum_von,Zeitraum_bis,unterHelligkeit,Automatik_vor_sunset,Automatik_nach_sunrise
list dummy_astro mit den Sonnenauf- und untergangszeiten:
Internals:
NAME dummy_astro
NR 597
STATE <b>Sonnenaufgang:</b><br>
real: 06:32<br>
civil: 05:52<br>
<b>Sonnenuntergang:</b><br>
real: 20:23<br>
civil: 21:02
TYPE dummy
READINGS:
2018-08-22 00:00:30 sunrise_abs_civil 05:52
2018-08-22 00:00:30 sunrise_abs_real 06:32
2018-08-22 00:00:30 sunset_abs_civil 21:02
2018-08-22 00:00:30 sunset_abs_real 20:23
Interessanterweise funktioniert ähnliche Angabe in einem anderen DOIF ohne Probleme:
([doif_RolloadenSteuerung:Automatik_hoch] eq "Astro" and [doif_RolloadenSteuerung:Wochentage] eq "alle" and [([dummy_astro:sunrise_abs_civil] + [doif_RolloadenSteuerung:Automatik_nach_sunrise])|AT WE])
({RolladenSteuern("ku_Rolladenaktor","doif_RolloadenSteuerung","ku_position_oben")}) ##Astro - alle Tage - hoch
DOELSEIF ....
Wo liegt mein Denkfehler??
Meiner Meinung bin ich strikt nach dem Fixtime Bsp. aus der commandref gegangen:
https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitberechnung (https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitberechnung)
Bitte um Hilfe.
Besten Dank vorab!
Freundliche Grüße
Mathias
Hi,
ohne das ich verstanden habe was wirklich passiert :)
Was mir auffällt -> ]+[ versuch das mal so ] + [
Bei Timer 1 4 7 8
Nur eine Idee, weil das jetzt öfters vorkam.
Gruß Otto
Um ein Problem beurteilen zu können, müssen hier alle Angaben gepostet werden.
Wenn zwei Werte an der Addition beteiligt sind, dann muss man natürlich beide betrachten und nicht nur einen.
Hier fehlt z. B. der Inhalt von: doif_flur_LichtAnAus:Automatik_vor_sunset
In der DOIF-Syntax sehe ich dazu keine Fehler.
Zitat von: Damian am 22 August 2018, 17:40:56
Hier fehlt z. B. der Inhalt von: doif_flur_LichtAnAus:Automatik_vor_sunset
Ist das nicht der ? Das list vom doif_flur_LichtAnAus ist doch komplett, oder verwechsle ich was?
Zitat2018-08-22 16:25:19 Automatik_vor_sunset 3600
Zitat von: Otto123 am 22 August 2018, 17:43:50
Ist das nicht der ? Das list vom doif_flur_LichtAnAus ist doch komplett, oder verwechsle ich was?
OK. Jetzt sehe ich es auch.
Ich habe keine Probleme:
DEF ([([d_test:start]+[d_test:sekunden])-[d_test:start]])
MODEL FHEM
NAME di_time
NR 474
NTFY_ORDER 50-di_time
STATE initialized
TYPE DOIF
READINGS:
2018-08-22 18:06:46 cmd 0
2018-08-22 18:06:46 mode enabled
2018-08-22 18:06:46 state initialized
2018-08-22 18:06:46 timer_01_c01 23.08.2018 13:00:00
2018-08-22 18:06:46 timer_02_c01 23.08.2018 12:00:00
Internals:
NAME d_test
NR 291
STATE 12.00
TYPE dummy
OLDREADINGS:
READINGS:
2018-08-22 18:05:10 sekunden 3600
2018-08-22 18:05:43 start 12:00
Naja war nur eine Idee ;)
Ich kann es vor Struktur kaum lesen, ich würde den ganzen überflüssigen Plunder erstmal raus schmeissen.
Sowas hier ### Start Astro / Ende Zeit und die vielen Leerzeilen, Zeilenumbrüche hinter den Klammern ... keine Ahnung was da geht und was nicht.
Empfehlung: Ich schreibe es erstmal immer in eine Zeile, teste ob es geht und dann mache ich es sehr verhalten "schön". Wenn es dann immer noch geht, ist es gut.
Gruß Otto
Zitat von: Otto123 am 22 August 2018, 18:18:10
Naja war nur eine Idee ;)
Ich kann es vor Struktur kaum lesen, ich würde den ganzen überflüssigen Plunder erstmal raus schmeissen.
Sowas hier ### Start Astro / Ende Zeit und die vielen Leerzeilen, Zeilenumbrüche hinter den Klammern ... keine Ahnung was da geht und was nicht.
Empfehlung: Ich schreibe es erstmal immer in eine Zeile, teste ob es geht und dann mache ich es sehr verhalten "schön". Wenn es dann immer noch geht, ist es gut.
Gruß Otto
ja, normalerweise kommt eine andere Fehlermeldung, wenn Blödsinn im Timer-Reading drinsteht, wenn ich in meiner Testdefinition d_test:sekunden auf "bla" setze, dann kommt im DOIF:
2018-08-22 18:20:38 timer_01_c01 error: Wrong timespec bla: either HH:MM:SS or {perlcode}
Abspecken ist in solchem Fall eine sinnvolle Vorgehensweise.
DOIF-Definition sichern und einfach probieren:
define doif_flur_LichtAnAus DOIF ([[([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])] - [doif_flur_LichtAnAus:Zeitraum_bis]])
Hallo Otto, hallo Damian,
Danke für eure Bemühungen.
Das mit den Leerzeichen vor/nach dem + oder - habe ich ebenfalls schon (ohne Erfolg) probiert gehabt.
Das ist ebenfalls in der Commandref mal so, mal so aufgeführt.
Habe den Code ein wenig eingerückt, dass man bei der "Klammerschlacht" überhaupt noch einen Durchblick hat. ^^
Zitat von: Damian am 22 August 2018, 18:27:40
[...]
Abspecken ist in solchem Fall eine sinnvolle Vorgehensweise.
DOIF-Definition sichern und einfach probieren:
define doif_flur_LichtAnAus DOIF ([[([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])] - [doif_flur_LichtAnAus:Zeitraum_bis]])
Habe ich probiert, leider mit gleichem Ergebnis:
Internals:
DEF ([[([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])] - [doif_flur_LichtAnAus:Zeitraum_bis]])
MODEL FHEM
NAME doif_flur_LichtAnAus
NR 302
NTFY_ORDER 50-doif_flur_LichtAnAus
STATE initialized<br />
Automatik Start: Astro<br />
Automatik Ende: Astro<br />
20:30 - 06:00 / <= 220 Lux
TYPE DOIF
READINGS:
2018-08-22 15:58:19 Automatik_Ende Astro
2018-08-22 15:58:19 Automatik_Start Astro
2018-08-22 16:25:19 Automatik_nach_sunrise 3600
2018-08-22 16:25:19 Automatik_vor_sunset 3600
2018-08-22 16:56:09 Zeitraum_bis 06:00
2018-08-22 16:53:17 Zeitraum_von 20:30
2018-08-22 20:44:31 cmd 0
2018-08-22 20:44:31 mode enabled
2018-08-22 20:44:31 state initialized
2018-08-22 20:44:31 timer_01_c01 error: unknown expression format
2018-08-22 20:44:31 timer_02_c01 23.08.2018 06:00:00
2018-08-22 16:53:29 unterHelligkeit 220
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 DOIF_time($hash,0,1,$wday,$hms)
days:
devices:
do:
0:
0
1:
helper:
globalinit 1
last_timer 2
sleeptimer -1
interval:
0 -1
1 0
intervalfunc:
itimer:
all doif_flur_LichtAnAus
localtime:
1 1534996800
realtime:
1 06:00:00
time:
0 [([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])]
1 [doif_flur_LichtAnAus:Zeitraum_bis]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
triggertime:
1534996800:
localtime 1534996800
hash:
uiState:
uiTable:
Attributes:
[...]
Anschließend habe ich noch weiter abgespeckt und konnte feststellen, dass die prinzipielle Zeitberechnung richtig funktioniert, es allerdings in Kombination mit einem Zeitraum zum besagten Fehler kommt.
Anbei der noch weiter abgespeckte Code ohne Fehlermeldung:
Internals:
DEF ([([dummy_astro:sunset_abs_real]+[doif_flur_LichtAnAus:Automatik_vor_sunset])])
MODEL FHEM
NAME doif_flur_LichtAnAus
NR 302
NTFY_ORDER 50-doif_flur_LichtAnAus
STATE initialized<br />
Automatik Start: Astro<br />
Automatik Ende: Astro<br />
20:30 - 06:00 / <= 220 Lux
TYPE DOIF
READINGS:
2018-08-22 15:58:19 Automatik_Ende Astro
2018-08-22 15:58:19 Automatik_Start Astro
2018-08-22 16:25:19 Automatik_nach_sunrise 3600
2018-08-22 16:25:19 Automatik_vor_sunset 3600
2018-08-22 16:56:09 Zeitraum_bis 06:00
2018-08-22 16:53:17 Zeitraum_von 20:30
2018-08-22 20:40:26 cmd 0
2018-08-22 20:40:26 mode enabled
2018-08-22 20:40:26 state initialized
2018-08-22 20:40:26 timer_01_c01 22.08.2018 21:23:00
2018-08-22 16:53:29 unterHelligkeit 220
Im Umkehrschluss heißt das für mich, dass es am DOIF liegt und ich erstmal nichts an meiner Angabe ändern kann, um es zum Laufen zu bekommen?
Kann dies im Modul angepasst werden oder gibt es einen anderen Weg um an's Ziel zu kommen?`
Besten Dank vorab.
Grüße
Mathias
Zitat von: n4rrOx am 22 August 2018, 20:52:51
Im Umkehrschluss heißt das für mich, dass es am DOIF liegt und ich erstmal nichts an meiner Angabe ändern kann, um es zum Laufen zu bekommen?
Kann dies im Modul angepasst werden oder gibt es einen anderen Weg um an's Ziel zu kommen?`
Besten Dank vorab.
Grüße
Mathias
Wenn du mir sagst, worin der Fehler begründet ist, wäre es kein Problem. Meine Definition mit ähnlichen Angaben funktioniert ja problemlos. Übrigens, die Fehlermeldung kommt nicht aus DOIF.
Baue meinen Test nach und schaue nach, ob dieser bei dir läuft, dann kannst du nach und nach deine Readings einbauen.
Hallo Damian,
Kommando zurück!
Hatte wirklich ein [ ] Klammernpaar zu viel.
Übertragen auf dein Beispiel wäre richtig:
DEF ([([d_test:start]+[d_test:sekunden])-[d_test:start]])
Meine fehlerhafte Angabe war:
DEF ([[([d_test:start]+[d_test:sekunden])]-[d_test:start]])
Vielen Dank für die Unterstützung!