FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: M_I_B am 27 April 2016, 07:49:04

Titel: Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 07:49:04
Hallo liebe Leute,

in einer längeren DOIF/DOELSEIF/DOELSE habe ich u.a. folgende Zeile:
DOELSEIF ([23:00|01234] or [00:00|56]) (set STD_4 off) \
Ursprünglich war das mal "[23:00|8] or [00:00|7])". Das funktionierte zwar perfekt, nur leider kann ich damit logischer Weise nicht SO-DO Abend resp. FR-SA Abend setzen. Also habe ich das konform zum http://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung umgebaut, auch wenn ich dann auf die Feiertags-Erkennung verzichten muss (OT: Wie wird letzteres eigentlich erkannt, in welchem Bundesland ich bin? Ist mir nicht ganz klar...)
... was soll ich sagen? Es funktioniert aus mir unerfindlichen Gründen nicht; der nachfolgende Befehl wird innert beider OR- Teile nie ausgeführt.

Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 27 April 2016, 08:45:13
Moin,

es gibt keine "automatische" Bundesland/Feiertags-Erkennung", wenn Du das meinst.
Du legst eine *.holiday Datei an, deren Namen Du frei vergibst. Diese füllst Du dann händisch mit den Feiertagen/Ferientagen für Dein Bundesland. (Für die osternabhängigen Feiertage gibt es eine Funktion).
Anschliessend verknüpfst Du diese Datei mit dem Attribut holiday2we. http://fhem.de/commandref_DE.html#holiday Dann funktioniert auch die Steuerung in DOIF mit 7|8. oder 04 oder 56. (Dann musst Du aber eine Bedingung einbauen [*.holiday:state] eq "none" bzw. ne "none".

Verständlich ?

Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 09:04:23
Zitat von: Bartimaus am 27 April 2016, 08:45:13Verständlich ?
... öhhh ... zum Teil ;)

*der verstandene Teil *
Zumindest bezgl. Feiertage hast Du mich auf die richtige Spur gebracht; vielen Dank. Da werde ich mich noch mal mit auseinander setzen müssen. Da gab/gibt es ja auch irgendwie die Möglichkeit, ext. Kalender einzubinden (Schulferien.org, Google, ...), meine ich zumindest gelesen zu haben. Das wäre ziemlich genial, wenn zum einen die Ferien der Minizicke und auch ggf. in Google eingetragene FaulenzerZeiten berücksichtigt werden könnten...

*der unverstandene Teil*
aBär.... Wenn ich die einzelnen Ziffern für die Tage verwende (0-6), dann spielen ja die Feiertage keine Rolle, ebenso bei 7 & 8, wobei nach meiner Sichtweise dann zumindest Werktag/Wochenende ausgewertet werden müsste (ohne Feiertage), oder?

Zumindest in meinem Beispiel benutze ich ja nur die Tage 0-6. Aber das funktioniert leider nicht und ich kann mir nicht erklären, warum nicht. Rein theoretisch ist das ja funktionell identisch zu ...
DOELSEIF ([23:00|0] or ([23:00|1] or ([23:00|2] or ([23:00|3] or ([23:00|4] or [00:00|5] or [00:00|6]) (set STD_4 off) \
... was ich allerdings nicht probiert habe. In beiden Fällen sollte aber nach meinem Verständnis das gleiche Ergebnis heraus kommen, oder?
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 27 April 2016, 09:23:38
aBär.... Wenn ich die einzelnen Ziffern für die Tage verwende (0-6), dann spielen ja die Feiertage keine Rolle, ebenso bei 7 & 8, wobei nach meiner Sichtweise dann zumindest Werktag/Wochenende ausgewertet werden müsste (ohne Feiertage), oder?


Genau, hierbei werden "Feiertage" nicht berücksichtigt.

Probiermal:

DOELSEIF ([23:00|01234]
and [*.Holiday:tomorrow] eq "none")
(set STD_4 off)
DOELSEIF ([00:00|56] or ([00:00] and [*.Holiday:tomorrow] ne "none"))
(set STD_4 off)
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Ellert am 27 April 2016, 09:50:03
Zitat von: M_I_B am 27 April 2016, 07:49:04
Hallo liebe Leute,

in einer längeren DOIF/DOELSEIF/DOELSE habe ich u.a. folgende Zeile:
DOELSEIF ([23:00|01234] or [00:00|56]) (set STD_4 off) \
Ursprünglich war das mal "[23:00|8] or [00:00|7])". Das funktionierte zwar perfekt, nur leider kann ich damit logischer Weise nicht SO-DO Abend resp. FR-SA Abend setzen. Also habe ich das konform zum http://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung umgebaut, auch wenn ich dann auf die Feiertags-Erkennung verzichten muss (OT: Wie wird letzteres eigentlich erkannt, in welchem Bundesland ich bin? Ist mir nicht ganz klar...)
... was soll ich sagen? Es funktioniert aus mir unerfindlichen Gründen nicht; der nachfolgende Befehl wird innert beider OR- Teile nie ausgeführt.
Zitatnie ausgeführt
stimmt nicht, denn, wenn Du Zeitpunkte in einem Bedingungszweig an gibst, dann verwendet DOIF keinen internen cmd_2 Status, daher wird Dein DOIF nur einmal ausgeführt, siehe http://fhem.de/commandref_DE.html#DOIF letzter Absatz der Einleitung und hier http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung das Anwendungsbeispiel und hier http://fhem.de/commandref_DE.html#DOIF_Relative_Zeitangaben das Beispiel.

Welche DOIF-Version verwendest Du? version DOIF
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 10:32:54
... Version ist 98_DOIF.pm 10985 2016-03-03 17:25:24Z damian-s

Ok, so in etwa habe ich das verstanden. Aber ist es nicht so, das ein Attribut "do always" das aufhebt? Ich habe mal das ganze Konstrukt hier kopiert, damit wir auch sicher über das Gleiche reden:
define EsIstDunkel DOIF ([16:00-23:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6) on,set HM4A1_4 on) \
DOELSEIF ([06:40|8]) (set STD_4 on_for_timer 1200) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6) off,set HM4A1_4 off) \
DOELSEIF ([23:00|01234] or [00:00|56]) (set STD_4 off) \
DOELSE
attr EsIstDunkel do always

Wie gesagt funktioniert jede einzelne Zeile bis auf die letzte DOELSEIF. Wenn ich jetzt (vermutlich fehlerhaft) Deine Aussage zu den CMD'S versuche zu verstehen und umzusetzen, dürften die vorhergehenden Zeilen doch auch nicht funktionieren, oder? Komme ich ehrlich noch nicht ganz mit :-[

Zitatand [*.Holiday:tomorrow] eq "none")
... aber nur, wenn ich mein Holliday- Kram fertig eingerichtet habe?!?

BTW: Ist so etwas eigentlich erlaubt?
DOIF ([([23:00|7]-[24:00])]) blablub
... also 24h VOR dem Beginn des als Wochenende deklarierten ...?

Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 27 April 2016, 10:54:06
Zitat von: M_I_B am 27 April 2016, 10:32:54... aber nur, wenn ich mein Holliday- Kram fertig eingerichtet habe?!?


Yip, geht aber fix...  ;)
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 11:03:00
Zitat von: Bartimaus am 27 April 2016, 10:54:06Yip, geht aber fix...  ;)
... glaube ich Dir ... wenn man's drauf hat ;) Ich habe es noch nicht so drauf und mache das lieber Schritt für Schritt; besser is dat ...
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Ellert am 27 April 2016, 11:20:32
Zitat von: M_I_B am 27 April 2016, 10:32:54
... Version ist 98_DOIF.pm 10985 2016-03-03 17:25:24Z damian-s

Ok, so in etwa habe ich das verstanden. Aber ist es nicht so, das ein Attribut "do always" das aufhebt? Ich habe mal das ganze Konstrukt hier kopiert, damit wir auch sicher über das Gleiche reden:
define EsIstDunkel DOIF ([16:00-23:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6) on,set HM4A1_4 on) \
DOELSEIF ([06:40|8]) (set STD_4 on_for_timer 1200) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6) off,set HM4A1_4 off) \
DOELSEIF ([23:00|01234] or [00:00|56]) (set STD_4 off) \
DOELSE
attr EsIstDunkel do always

Wie gesagt funktioniert jede einzelne Zeile bis auf die letzte DOELSEIF. Wenn ich jetzt (vermutlich fehlerhaft) Deine Aussage zu den CMD'S versuche zu verstehen und umzusetzen, dürften die vorhergehenden Zeilen doch auch nicht funktionieren, oder? Komme ich ehrlich noch nicht ganz mit :-[
... aber nur, wenn ich mein Holliday- Kram fertig eingerichtet habe?!?

BTW: Ist so etwas eigentlich erlaubt?
DOIF ([([23:00|7]-[24:00])]) blablub
... also 24h VOR dem Beginn des als Wochenende deklarierten ...?

Die Version ist o.k., heute gibt es eine Neue.

Aus der DOIF Einleitung:
ZitatDie Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.

Zitatdefine EsIstDunkel DOIF ([16:00-23:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6) on,set HM4A1_4 on) \
   DOELSEIF ([06:40|8]) (set STD_4 on_for_timer 1200) \
   DOELSEIF ([23:00]) (set STD_(2|3) off) \
   DOELSEIF ([01:30]) (set STD_(1|6) off,set HM4A1_4 off) \
   DOELSEIF ([23:00|01234] or [00:00|56]) (set STD_4 off) \
   DOELSE
Die markierten Zeiten können sich daher beeinflussen nur  [00:00|56] dürfte in dem Zweig unbeeinflusst funktionieren.

24:00 wird nicht klappen, gibt es auf einer Digitaluhr auch nicht ;)

Zitatand [*.Holiday:tomorrow] eq "none")
zur Syntax von Events siehe http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 27 April 2016, 11:34:43
Gehe auf "Edit Files"
Öffne eine bestehende Datei
Leere den Inhalt
Füge folgenden Inhalt (NRW) ein:
# Schulferien
4 03-21 04-02 Ostern
4 05-17 05-18 Pfingsten
4 07-11 08-23 Sommer
4 10-10 10-21 Herbst
4 12-23 12-31 Weihnachten
4 01-01 01-06 Weihnachten


# festes Datum
1 01-01 Neujahr
1 05-01 Tag der Arbeit
1 10-03 Tag der Deutschen Einheit
1 11-01 Allerheiligen
1 12-24 Heiligabend
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag
1 12-31 Silvester

# abhaengig von Ostersonntag
2 -48 Rosenmontag
2 -47 Veilchendienstag
2 -2 Karfreitag
2 1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingstmontag
2 51 PfingstDienstag
2 60 Fronleichnam


Speichere die Datei mit SAVE AS "Schulferien.holiday"

Unter "global" fügst Du das Attribut "holiday2we" mit Schulferien.holiday hinzu. Feddich.
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 16:06:22
Zitat von: Bartimaus am 27 April 2016, 11:34:43Gehe auf "Edit Files"
Ok, das ist ja einfach; das bekomme ich als DAU sogar hin ;) Aber das Ding müsste ich, zumindest für die Sommerferien, jede Jahr neu stricken. Bei schulferien.org gibt es den Ferienkalender per Bundesland aber im iCal- Format, was ich z.B. in unseren Google- Kalender eingebunden habe. Auch die Feiertage für jedes Bundesland sind an anderer Stelle aufgeführt, aber leider nicht im iCal- Format. Wie bekommt man die Ferien also von dort dynamisch ins FHEM?

Zitat von: Ellert am 27 April 2016, 11:20:32Aus der DOIF Einleitung: Die markierten Zeiten können sich daher beeinflussen nur  [00:00|56] dürfte in dem Zweig unbeeinflusst funktionieren.
Ja, das habe ich schon verstanden. Ich hatte nur angenommen, das "[23:00]" eine andere Bedingung ist als "[23:00|123]" oder auch "[16:00-23:00]". Dann ist das in etwas so ähnlich wie while/wend in PHP u.a. zu verstehen?
Wenn ja, wie könnte man dafür sorgen (vielleicht mit einem neuen "Befehl" IFDO? *DuckUndWech*), das auch bei einer erfüllten Bedingung die darauf folgenden ebenfalls überprüft werden?

Zitat von: Ellert am 27 April 2016, 11:20:3224:00 wird nicht klappen, gibt es auf einer Digitaluhr auch nicht ;)
Naja, schon klar... Ich meinte das auch nicht als Uhrzeit, sondern als Anzahl Stunden, welche vom vorausgehenden Wert abgezogen werden. Also quasi "Wochenende minus 24h"...
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Ellert am 27 April 2016, 17:02:33
ZitatJa, das habe ich schon verstanden. Ich hatte nur angenommen, das "[23:00]" eine andere Bedingung ist als "[23:00|123]" oder auch "[16:00-23:00]".
Es sind verschiedene Bedingungen, aber wenn ([16:00-23:00] and [brightness.av:state] < 140) um 23:00 Uhr wahr wird haben die anderen beiden Zeitpunkte keine Chance mehr. Hier ([23:00]) haben alle nachfolgenden Bedingungen keine Chance.
ZitatDann ist das in etwas so ähnlich wie while/wend in PHP u.a. zu verstehen?
Eher wie SELECT ... CASE.
ZitatWenn ja, wie könnte man dafür sorgen (vielleicht mit einem neuen "Befehl" IFDO? *DuckUndWech*), das auch bei einer erfüllten Bedingung die darauf folgenden ebenfalls überprüft werden?
Ja, so wie hier: https://forum.fhem.de/index.php/topic,52489.0.html , davon würde ich abraten, nimm einfach 23:00:00, 23:00:01, 23:00:02 als Zeitangaben.
ZitatNaja, schon klar... Ich meinte das auch nicht als Uhrzeit, sondern als Anzahl Stunden, welche vom vorausgehenden Wert abgezogen werden. Also quasi "Wochenende minus 24h"...
([([23:00|7]-[24:00])]) wäre der vorherige Tag 23:00. Am Besten, Du probierst es aus, würde mich auch interessieren ob es klappt, oder eine Fehlermeldung erzeugt.
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 17:29:18
Zitat von: Ellert am 27 April 2016, 17:02:33... haben alle nachfolgenden Bedingungen keine Chance. .../... Eher wie SELECT ... CASE.
Ahhh! Eine Insel mit zwei Bergen! Jetzt dämmert's mir so langsam ;D Alte Männer brauche halt mal ne Weile, bis die Wahrheit sich durch die verkalkten Gehirnwindungen gequält haben ::)

Zitat von: Ellert am 27 April 2016, 17:02:33Ja, so wie hier: https://forum.fhem.de/index.php/topic,52489.0.html , davon würde ich abraten, ...
Hmmm, wenn ich das richtig verstanden habe, triggert sich jedes DOELSEIF über $self selber?!? Is kompliziert und vermutlich enorm fehlerträchtig; da lasse ich mal die Finger von  :o

Zitat von: Ellert am 27 April 2016, 17:02:33([([23:00|7]-[24:00])]) wäre der vorherige Tag 23:00. Am Besten, Du probierst es aus, ...
Genau so war das gemeint. Denn wenn die Aktion am Vorabend des WE/Feiertages passieren soll, muss ich ja rückwärts denken. Ich probiere das einfach mal. Hab ja noch die 8CH-Aktoren hier im Büro liegen, so das nix passieren kann; ich werde berichten...
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 17:55:07
Zitat von: Bartimaus am 27 April 2016, 11:34:43... Unter "global" fügst Du das Attribut "holiday2we" mit Schulferien.holiday hinzu. Feddich.
... habe mal so getan wie befohlen ;)

Datei "ferien_feier.cfg" im FHEM-root
### Schulferien und Feiertage 2016 NDS ###

# Schulferien
4 01-28 01-29 Winter
4 03-18 04-02 Ostern
4 05-06 05-17 Pfingsten
4 06-23 08-03 Sommer
4 10-04 10-15 Herbst
4 12-21 12-31 Weihnachten
4 01-01 01-06 Weihnachten

# festes Datum
1 01-01 Neujahr
1 05-01 Tag der Arbeit
1 10-03 Tag der Deutschen Einheit
1 12-24 Heiligabend
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag
1 12-31 Silvester

# abhaengig von Ostersonntag
2 -2 Karfreitag
2 01 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingstmontag


Und in der fhem.cfg ...
attr global holiday2we /ferien_feier.cfg

Is richtig dat... Is doch?

Würde mich trotzdem interessieren, wie ich das direkt dynamisch aus schulferien.org resp. aus meinem Google- Kalender einlesen kann ...
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 27 April 2016, 19:35:47
Zitat von: M_I_B am 27 April 2016, 17:55:07
... habe mal so getan wie befohlen ;)

Datei "ferien_feier.cfg" im FHEM-root

Und in der fhem.cfg ...
attr global holiday2we /ferien_feier.cfg

Is richtig dat... Is doch?


JEIN ! Hast Du nicht...., die Datei sollte ferien_feier.holisday heissen, und nicht ferien_feier.cfg.


NIE NIE NIE NIEMALS NICHT als "Anfänger" direkt in der fhem.cfg editieren.

Man kann ALLES über die FHEM-Kommandozeile und den DEF-Editor in FHEM erledigen. Und Attribute kann man direkt am Device einstellen.

Nicht umsonst ist die FHEM.cfg per default zum editieren gesperrt.

Ich habe als blutiger Anfänger auch in der cfg "herumgepfuscht", System war dadurch ziemlich instabil, bis hin zur zersemmelten fhem.save und und und.

Kannst Du die Datei Ferien...cfg anklicken und z.B. get ferien_feier tomorrow abrufen ? Wenn ja, mit welchem Ergebnis ?
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 27 April 2016, 19:56:20
Zitat von: Bartimaus am 27 April 2016, 19:35:47NIE NIE NIE NIEMALS NICHT als "Anfänger" direkt in der fhem.cfg editieren.
Man kann ALLES über die FHEM-Kommandozeile und den DEF-Editor in FHEM erledigen. Und Attribute kann man direkt am Device einstellen.
... ach, halb so wild. Das mache ich von Anfang an so und bin es gewohnt ...
Das man alles aus der Kommandozeile machen kann, ist schon klar, aber wenn man etwas größere Sachen macht, ist das extrem ekelig für mein Gefühl. Da nehme ich lieber Notepad++ und habe alles, ggf. auch mal mehrere Dateien, direkt im Blick...

Zitat von: Bartimaus am 27 April 2016, 19:35:47Kannst Du die Datei Ferien...cfg anklicken und z.B. get ferien_feier tomorrow abrufen ? Wenn ja, mit welchem Ergebnis ?
...nnnnöö... Weil ich sie nicht finden kann ::)
Aber mal was anderes dazu: Muss die Extension zwingend "holiday" sein?!?
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 28 April 2016, 08:30:39
Zitat von: Ellert am 27 April 2016, 17:02:33([([23:00|7]-[24:00])]) wäre der vorherige Tag 23:00. Am Besten, Du probierst es aus, würde mich auch interessieren ob es klappt, oder eine Fehlermeldung erzeugt.

Klappt nicht...
DOELSEIF ([([23:00:02|8]-[24:00])] or [([00:00|7]-[24:00])]) (set STD_4 off)
... generiert die folgende Fehlermeldung im LOG:
2016.04.27 23:00:00 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/98_DOIF.pm line 1169.
Was mich irritiert ist, das im LOG "23:00:00" steht und nicht wie erwartet "23:00:02". Oder bezieht sich die Sache auf die Eingangsbedingung des ganzen Konstruktes?
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Ellert am 28 April 2016, 09:05:31
Zitat von: M_I_B am 28 April 2016, 08:30:39
Klappt nicht...
DOELSEIF ([([23:00:02|8]-[24:00])] or [([00:00|7]-[24:00])]) (set STD_4 off)
... generiert die folgende Fehlermeldung im LOG:
2016.04.27 23:00:00 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/98_DOIF.pm line 1169.
Was mich irritiert ist, das im LOG "23:00:00" steht und nicht wie erwartet "23:00:02". Oder bezieht sich die Sache auf die Eingangsbedingung des ganzen Konstruktes?

Der Hinweis auf die sekundengenaue Angabe der Zeiten bezieht sich auf dieses DOIF:
define EsIstDunkel DOIF ([16:00-23:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6) on,set HM4A1_4 on) \
DOELSEIF ([06:40|8]) (set STD_4 on_for_timer 1200) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6) off,set HM4A1_4 off) \
DOELSEIF ([23:00|01234] or [00:00|56]) (set STD_4 off) \
DOELSE
attr EsIstDunkel do always

und zwar, um die Zeiten zu entzerren.

ZitatOder bezieht sich die Sache auf die Eingangsbedingung des ganzen Konstruktes?
Ja, die Fehlermeldung sagt ja, dass die Warnung bei einem numerischen Vergleich mit == entsteht. Wo das in Deinem DOIF der Fall ist, kannst nur Du selbst sehen.

Übrigens ([([23:00|7]-[24:00])]) liefert "Wrong timespec 23:00|7: either HH:MM:SS or {perlcode}: ([23:00|7]-[24:00]) "
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 28 April 2016, 10:42:59
Zitat von: Ellert am 28 April 2016, 09:05:31Der Hinweis auf die sekundengenaue Angabe der Zeiten bezieht sich auf dieses DOIF: ...
Ja, das nahm ich auch an; blindes Huhn findet auch mal'n Korn ;)

Zitat von: Ellert am 28 April 2016, 09:05:31Ja, die Fehlermeldung sagt ja, dass die Warnung bei einem numerischen Vergleich mit == entsteht. Wo das in Deinem DOIF der Fall ist, kannst nur Du selbst sehen.
Übrigens ([([23:00|7]-[24:00])]) liefert "Wrong timespec 23:00|7: either HH:MM:SS or {perlcode}: ([23:00|7]-[24:00]) "

Damit ich das richtig verstehe...
Dieses Konstrukt mit -24h funktioniert deshalb nicht, weil der PERL-Interpreter intern bei der Abarbeitung gegen die Wand läuft, da er bei der Subtraktion mit "23:00|7" nicht klar kommt?
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Damian am 28 April 2016, 11:13:15
Zitat von: M_I_B am 28 April 2016, 10:42:59
Ja, das nahm ich auch an; blindes Huhn findet auch mal'n Korn ;)

Damit ich das richtig verstehe...
Dieses Konstrukt mit -24h funktioniert deshalb nicht, weil der PERL-Interpreter intern bei der Abarbeitung gegen die Wand läuft, da er bei der Subtraktion mit "23:00|7" nicht klar kommt?

Es ist zwar nicht der Perl-Interpreter, sondern der "DOIF"-Interpreter - aber du hast recht. Bei Intervallen kann man nur am Ende für beide Zeiten einen Wochentag angeben.

Gruß

Damian
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 28 April 2016, 11:21:24
Zitat von: M_I_B am 27 April 2016, 19:56:20
Aber mal was anderes dazu: Muss die Extension zwingend "holiday" sein?!?

Yo -> http://fhem.de/commandref_DE.html#holiday
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 28 April 2016, 11:28:56
@Damian: Ok, dann funktioniert das so mit dem "Vortag eines Wochenende/Ferientages/Feiertages" nicht  :(
Gibt es ggf. noch eine andere Möglichkeit, den Vortag zu erfassen, ohne irgendwelche Verrenkungen machen zu müssen? Denn "Anwendungen" zu Vortag resp. Folgetag fallen mir auf die schnelle einige ein ...

@Bartimaus: öhhh... Tja... Hab eich glatt überlesen; danke. Dsa erklärt natürlich so einiges ::)
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Bartimaus am 28 April 2016, 11:45:44
[08:00|56] (set bla on)
DOELSEIF
[08:00|01234] and [Ferien:tomorrow] ne "none" (set bla on)



finde ich nicht sehr verrenkt...
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 28 April 2016, 12:26:00
... ich meinte das in Bezug auf die Zahlencodes 0-6,7,8 Das würde die Sache sehr vereinfachen und die Zeilen übersichtlich halten.
Ich dachte da z.B. an Bit-opperative Möglichkeiten, wenn ich davon ausgehe, das die vorhandenen Codes 4 Bit belegen würden und man mit weiteren 4 Bit diese Sachen steuern könnte. Dann wäre nur noch eine Addition nötig, um die gewünschten Sachen ala Vortag, Vorwoche, Vormonat resp. Folgetag, Folgewoche, Folgemonat zu realisieren.

Wie dem auch sei; nur eine Idee. Hätte ja sein können, das es das schon längst gibt und ich es nur mal wieder nicht gesehen habe ...

Ich baue jetzt erst einmal mein DOIF- Konstrukt um und teile es auf, damit das mal ordentlich läuft...
Ich habe das jetzt mal zerlegt und folgendes verbrochen:
define EsIstDunkel DOIF ([16:00:01-23:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6) on,set HM4A1_4 on) \
DOELSEIF ([06:40|8]) (set STD_4 on_for_timer 1200) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6) off,set HM4A1_4 off) \
DOELSE
attr EsIstDunkel do always

define CynthiaZimmer1 DOIF ([15:00-22:00] and [brightness.av:state] < 140) (set STD_4 on) \
DOELSEIF ([06:40|8]) (set STD_4 on_for_timer 1200) \
DOELSEIF ([23:00] and [nds:tomorrow] eq "none") (set STD_4 off) \
DOELSEIF ([00:00] and [nds:tomorrow] ne "none") (set STD_4 off) \
DOELSE
attr CynthiaZimmer1 do always

Der gedachte Ablauf soll sein:
1. Wenn Helligkeitswert unter 140 und zwischen 15 und 22 Uhr dann STD_4 ON
2. An Werktagen (wenn keine Feiertage/Ferien) um 6:40 STD_4 ON für 20 Minuten
3. Wenn morgen kein Feiertag/Ferien dann STD_4 OFF um 23 Uhr
4. Wenn morgen Feiertag/Ferien dann STD_4 erst um Mitternacht OFF

Die Ferien/Feiertags- Datei habe ich nun "nds.holiday" genannt und ins Verzeichnis "/FHEM" gelegt, wo auch die 99_myUtils.pm liegt. In der fhem.cfg habe ich dazu "attr global holiday2we nds.holiday" notiert, wobei ich mir nicht sicher bin, ob man dort die Extension mit angeben muss/soll oder nicht ...
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Damian am 28 April 2016, 22:17:00
Zitat von: M_I_B am 28 April 2016, 12:26:00
... ich meinte das in Bezug auf die Zahlencodes 0-6,7,8 Das würde die Sache sehr vereinfachen und die Zeilen übersichtlich halten.
Ich dachte da z.B. an Bit-opperative Möglichkeiten, wenn ich davon ausgehe, das die vorhandenen Codes 4 Bit belegen würden und man mit weiteren 4 Bit diese Sachen steuern könnte. Dann wäre nur noch eine Addition nötig, um die gewünschten Sachen ala Vortag, Vorwoche, Vormonat resp. Folgetag, Folgewoche, Folgemonat zu realisieren.


ja, allerdings habe ich das Modul insb. auch für Nicht-Informatiker programmiert, daher braucht es einer geeigneten Übersetzung, die alle solchen Fälle abdeckt und intuitiv ist.

Gruß

Damian
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 28 April 2016, 22:46:12
Zitat von: Damian am 28 April 2016, 22:17:00ja, allerdings habe ich das Modul insb. auch für Nicht-Informatiker programmiert, daher braucht es einer geeigneten Übersetzung, die alle solchen Fälle abdeckt und intuitiv ist.
Ja, da hast Du natürlich vollkommen recht und ich habe nicht drüber nachgedacht ...

Vielleicht könnte man ja sowas wie z.B. " [20:00|7(-2D)]" oder "[17:30|8(3W)]" bosseln, wobei D=Tag, W=Woche, M=Monat sowie die vorangestellte Ziffer ein Multilikator ist. Im ersten Beispiel also 2 Tage vorher, im zweiten Beispiel 3 Wochen später (was wohl eher selten vorkommt...Is ja nur'n Beispiel) ...
Nich meggern; viel mir gerade so spontan ein ^^

Aber für's WE ist erst mal Mopedfahren angesagt und nix FHEM; wie jedes Jahr findet man uns in Brokdorf an der Elbe beim diesjährigen 25. internationalen 6-Zylinder-Treffen mit Schlechtwetter- und Bodenfrost- Garantie  8)
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Ellert am 29 April 2016, 10:42:52
ZitatVielleicht könnte man ja sowas wie z.B. " [20:00|7(-2D)]" oder "[17:30|8(3W)]" bosseln, wobei D=Tag, W=Woche, M=Monat sowie die vorangestellte Ziffer ein Multilikator ist. Im ersten Beispiel also 2 Tage vorher, im zweiten Beispiel 3 Wochen später (was wohl eher selten vorkommt...Is ja nur'n Beispiel) ...
Nich meggern; viel mir gerade so spontan ein ^^

Für Termine, die übers Jahr verteilt oder im Jahr periodisch auftreten, ist es sinnvoller das Calendar-Modul in Verbindung mit einem Kalender zu nutzen, um Befehle zu triggern, s. http://fhem.de/commandref_DE.html#Calendar

Oder Du versuchst es so: https://forum.fhem.de/index.php/topic,39070.msg446203.html#msg446203
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 16 Mai 2016, 22:17:58
*** grrrr ***
Das mit den Feiertagen u.s.w. läuft ja jetzt endlich, aber seit einigen Tagen funktioniert eine/die Zeitschaltung nur noch gelegentlich, wenn überhaupt. Ich habe mir schon einen Wolf gesucht, finde aber den Fehler nicht  >:(

Ursprünglich war die Zeitschaltung so definiert:
define EsIstDunkel DOIF ([16:00-22:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6|10) on,set HM4A1_4 on) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6|10) off,set HM4A1_4 off) \
DOELSE
attr EsIstDunkel do always

Das hat wochenlang einwandfrei funktioniert, allerdings mit einer Einschränkung. Wenn man nämlich innerhalb der Zeit 16:00-22:00 die Lampen per RC manuell abgeschaltet hat, wurden die natürlich durch das DoAlways wieder eingeschaltet.
Also habe ich das Attribut gelöscht in der Annahme, das es ja auch ohne DoAlways funktionieren sollte; es wird ja nur einmal dunkel am Tag ^^
Weit gefehlt... Die ersten zwei Tage kein Problem, aber seit gestern Abend ging erst mal gar nichts mehr?!?
Also habe ich das Attribut wieder hinein genommen... nix... Dann habe ich das Ganze mal ohne die Uhrzeit gesetzt, einmal mit, einmal ohne Attribut:
define EsIstDunkel DOIF ([brightness.av:state] < 140) (set STD_(1|2|3|4|6|10) on,set HM4A1_4 on) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6|10) off,set HM4A1_4 off) \
DOELSE
attr EsIstDunkel do always

Geht alles nicht mehr. Also alles wieder auf Anfang... ebenfalls ohne Erfolg...

Und nun ist der Punkt erreicht, an dem ich einfach nicht mehr weiter komme. Wieso hat das vorher schmerzfrei funktioniert und nun auf einmal nicht mehr?
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 19 Mai 2016, 11:25:57
... geht wieder, aus welchen Gründen auch immer  :o :o :o
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: Damian am 19 Mai 2016, 12:59:21
Ich nehme an, dass die Helligkeit bei dir zyklisch gesendet wird, daher ist do always bei:

define EsIstDunkel DOIF ([16:00-22:00] and [brightness.av:state] < 140) (set STD_(1|2|3|4|6|10) on,set HM4A1_4 on) 

ungünstig, weil ständig und unnötig bei dir geschaltet wird.

Gruß

D. Sordyl



Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 19 Mai 2016, 13:24:25
.... hmmmm ... Danke für den Hinweis!
Die Werte für die Helligkeit kommen aus einem Logfile, welches aus dem Mittelwert mehrerer Helligkeitssensoren generiert wird. Darin kommt z.B. ein Wert 139 nur einmal am Abend vor (bisher)...
Das "do always" hatte aber einen anderen unschönen Nebeneffekt und wurde inzwischen entsorgt. Wenn nämlich innert der angegebenen Zeit manuell per RC das Licht abgeschaltet werden sollte, machte es "schwupp" und die Funzeln waren wieder an ::)

Ich habe die ganze Sache inzwischen anders gelöst:
define EsIstDunkel DOIF ([brightness.av:state] < 140 and [brightness.av:state] > 135) (set STD_(1|2|3|6|10) on,set HM4A1_4 on) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6|10) off) \
DOELSEIF ([brightness.av:state] > 150) (set STD_(1|2|3|6|10) off,set HM4A1_4 off) \
DOELSE

Das läuft noch im Test um zu erkennen, ob da noch irgendwo eine Macke drin ist; vergangene Nacht z.B. sind aus unerfindlichen Gründen alle Lampen irgendwann an gegangen... Ich hätte es nicht mitbekommen, da ich einen "gesunden" Schlaf habe, aber meine Frau bemerkte gegen 0400, das Licht auf edr Terasse an ist ^^
Titel: Antw:Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?
Beitrag von: M_I_B am 21 Mai 2016, 22:59:23
... tja ... Irgend etwas klemmt immer noch:

### Beleuchtung WZ, EZ, KU
define EsIstDunkel DOIF ([17:00-[SunDN_r]] and [brightness.av:state] < 140 and [brightness.av:state] > 135) (set STD_(1|2|3|6|10) on,set HM4A1_4 on) \
DOELSEIF ([23:00]) (set STD_(2|3) off) \
DOELSEIF ([01:30]) (set STD_(1|6|10) off) \
DOELSE

### Beleuchtung, Lüfter
define CynthiaZimmer1 DOIF ([17:00-[SunDN_r]] and [brightness.av:state] < 140 and [brightness.av:state] > 135) (set STD_4 on) \
DOELSEIF ([06:40|8] and [NDS:state] eq "none") (set STD_4 on-for-timer 1200) \
DOELSEIF ([23:00|01234] and [NDS:tomorrow] eq "none") (set STD_4 off) \
DOELSEIF ([00:00|7]) (set STD_4 off) \
DOELSE


Wenn man jeweils die relevante erste Zeile betrachtet, also die mit dem DOIF, findet man keinerlei Unterschied zwischen den Beiden, von den anderen Aktoren mal abgesehen (in "SunDN_r" steht der Wert von "sunset_abs("REAL")").
Dennoch wird erwartungsgemäß "EsIstDunkel" ausgeführt, hingegen "CynthiaZimmer1" nicht. Schalte ich STD_4 manuell ein, laufen alle anderen Vorgänge einwandfrei ab, also der "Weckruf" am Morgen wenn Schule ist so wie die Abschaltung abhängig davon, ob am nächten Tag Schule ist (23:00) oder nicht (00:00). Auch wenn ich STD_4 nicht manuell einschalte, wird der "Weckruf" am Morgen ausgeführt. Also sind alle DOELSEIF in beiden Fällen korrekt.

Wo liegt hier das Problem? Ist mir ein echtes Rätsel ... :-[