Zeitschaltung mit [HH:MM|Wochentage] funktioniert nicht?

Begonnen von M_I_B, 27 April 2016, 07:49:04

Vorheriges Thema - Nächstes Thema

M_I_B

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?!?

M_I_B

#16
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?

Ellert

#17
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]) "

M_I_B

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?

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

M_I_B

@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 ::)

Bartimaus

#22
[08:00|56] (set bla on)
DOELSEIF
[08:00|01234] and [Ferien:tomorrow] ne "none" (set bla on)



finde ich nicht sehr verrenkt...
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

M_I_B

#23
... 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 ...

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

M_I_B

#25
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)

Ellert

#26
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

M_I_B

*** 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?

M_I_B

... geht wieder, aus welchen Gründen auch immer  :o :o :o

Damian

#29
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



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