FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 25 Februar 2015, 19:19:38

Titel: DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 25 Februar 2015, 19:19:38
Liebe DOIF-Nutzer,

da offensichtlich Readings als Zeitangaben oft benutzt werden, bastle ich gerade an einer neuen Version von DOIF.

Bei dieser Version kann man Readings, Stati oder Internals als Zeitangaben direkt in der Bedingung angeben.

Beispiel:

define Zeit dummy
set Zeit 16:00


DOIF ([[Zeit]]) (set lampe on)

ebenso geht auch, wenn im Dummy beginnzeit und endzeit die entsprechende Zeit steht:

DOIF ([[beginnzeit]-[endezeit]]) (set lampe on)

Genauso lassen sich auch Readings oder Internals in der gewohnten Weise angeben.

Das Besondere an dieser Syntax im Gegensatz zu Angaben der Art [{ReadingsVal... ist, dass eine Änderung der Zeit im Status oder Reading sofort zu einer Anpassung der Zeit im Modul führt.

Die ersten Tests sind vielversprechend  :)

Gruß

Damian

Nachtrag: aktuelle Version ist bereits über Update verfügbar
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: FunkOdyssey am 25 Februar 2015, 19:37:18
Juchu. Das spart ne Menge Code und macht es sauberer.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: maxritti am 25 Februar 2015, 19:59:54
Daumen hoch dafür.
Ich hoffe, dass aus dem "vielversprechend" bald das "erfolgreich implementiert" kommt.  :)

Schon mal schönen Dank für das neue Feature.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 26 Februar 2015, 22:34:41
Angehängt ist eine Vorabversion zum Testen. Ich musste die interne Mimik zum Setzen der Timer ändern. Sie werden jetzt erst gesetzt, wenn das System hochgefahren ist. Damit wird sichergestellt, das alle Readings oder Stati gesetzt sind.

Auszug aus der Doku:

Schalten mit indirekten Zeitangaben

Statt fester Zeitangaben können auch Stati, Readings oder Internals angegeben werden. Diese müssen eine Zeitangabe im Format HH:MM oder HH:MM:SS beinhalten.

Anwendungsbeispiel

define time dummy
set time 08:00
define di_time DOIF ([[time]])(set lamp on)


oder Angaben mit Zeitintervallen

define begin dummy
set begin 08:00

define end dummy
set end 10:00

define di_time DOIF ([[begin]-[end]])(set radio on) DOELSE (set radio off)


Bei einer Änderung des angegebenen Status oder Readings wird die geänderte Zeit sofort im Modul aktualisiert.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 27 Februar 2015, 10:50:15
Hi Damian

Vielen Dank für das neue Feature!

Folgendes habe ich getestet:

define di_time_var DOIF ([[start_time]]) (set flex_lamp on)

define di_time_var DOIF ([[start_time]-[end_time]]) (set flex_lamp on) DOELSE (set flex_lamp off)

define di_time_var DOIF ([[start_time]-11:12]) (set flex_lamp on) DOELSE (set flex_lamp off)

alles OK

jedoch

define di_time_var DOIF ([10:44-[end_time]]) (set flex_lamp on) DOELSE (set flex_lamp off)

geht nicht.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 27 Februar 2015, 14:15:22
Zitat von: flurin am 27 Februar 2015, 10:50:15


define di_time_var DOIF ([10:44-[end_time]]) (set flex_lamp on) DOELSE (set flex_lamp off)

geht nicht.

Gruss
flurin

habe es gefixt.

Wie konnte ich nur fehlende Klammern in diesem Ausdruck übersehen :)

  if ($timer =~ /^(\+)?((\{.*\})|(\[.*\])|([0-9][0-9](:[0-5][0-9]){1,2}))(\|[0-8]+$|-(\+)?(([0-9][0-9](:[0-5][0-9]){1,2})|({.*})|(\[.*\]))|$)(\|[0-8]+$|$)/) {

neuer Version im Anhang

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 27 Februar 2015, 14:24:51
Zitat von: Damian am 27 Februar 2015, 14:15:22
habe es gefixt.

neuer Version im Anhang

Wow!, das ging aber schnell  :)

Test bei mir: passed

Da wird sich Spartacus auch darüber freuen; damit sollte er sein Problem lösen können.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 27 Februar 2015, 19:16:19
Zitat von: Damian am 27 Februar 2015, 14:15:22
Wie konnte ich nur fehlende Klammern in diesem Ausdruck übersehen :)

  if ($timer =~ /^(\+)?((\{.*\})|(\[.*\])|([0-9][0-9](:[0-5][0-9]){1,2}))(\|[0-8]+$|-(\+)?(([0-9][0-9](:[0-5][0-9]){1,2})|({.*})|(\[.*\]))|$)(\|[0-8]+$|$)/) {

;) :D ;)

ich habe auch schon ein wenig mal getestet, funktioniert Super  ;D
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Spartacus am 27 Februar 2015, 20:07:02
Hallo Damin, hallo flurin.
das ist wirklich eine tolle Sache! Ganz lieben Dank für die Anpassungen und Tests.
Aber die Anwendung habe ich noch nicht durchschaut! :(

Meine SUB "OffTimeLicht" bzw. "OffTimeLichtX" liefert mir die Ausschaltzeit als "22:00" bzw. "16:30-22:00" zurück!

Das hier gibg schon forher, mit dem berichteten Triggerproblem:

([19:55-{OffTimeLichtX}]) (set Lampe on)
DOELSE
(set Lampe off)


...und hier gibt es einen Fehler:
([19:55-[{OffTimeLichtX}]]) (set Lampe on)
DOELSE
(set Lampe off)

liefert mir einen Fehler!
Wie muss ich das korrekt anwenden?
Muss ich die OffTime vorher erst in ein Dummy kopieren?
Sorry, ich brauche immer etwas länger...

Gruß,
Christian

Hier noch mal der Code von flurin

sub OffTimeLichtX ()
{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

if (ReadingsVal("hl.01.Feiertag","today","") =~ m/Silvester/)
{
  return ("02:30:00")
}
elsif ((ReadingsVal("hl.01.Feiertag","tomorrow","")=~ m/none/) && ($wday =~ m/[01234]/))
{
  return ("22:00:00")
}
elsif ((ReadingsVal("hl.01.Feiertag","tomorrow","") !~ m/none/) || ($wday =~ m/[56]/))
{
  return ("23:00:00")
}
}
sub OffTimeLicht ($)
{
my ($start_time) = @_;
my $ret;
 
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

if (ReadingsVal("hl.01.Feiertag","today","") =~ m/Silvester/)
{
  $ret = "02:30";
}
elsif ((ReadingsVal("hl.01.Feiertag","tomorrow","")=~ m/none/) && ($wday =~ m/[01234]/))
{
  $ret = "22:00";
}
elsif ((ReadingsVal("hl.01.Feiertag","tomorrow","") !~ m/none/) || ($wday =~ m/[56]/))
{
  $ret = "23:00";
}

if ($start_time ne "") {
  $ret = $start_time." - ".$ret;
}
return $ret;
}
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 27 Februar 2015, 21:06:05
Zitat von: Spartacus am 27 Februar 2015, 20:07:02
Muss ich die OffTime vorher erst in ein Dummy kopieren?

Ja, ich würde es so lösen:

define end_time dummy

define di_end_time_set DOIF ([06:30]) ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  )
attr di_end_time_set do always

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on) DOELSE (set flex_lamp off)
attr di_time_var do always


Edit: Diese Variante nicht verwenden -> siehe weiter unten.

OffTimeLicht mit dem Returnwert "16:30-22:00" kannst Du arkivieren. Das wird evtl. später noch implementiert; wir waren unserer Zeit voraus  :)

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 27 Februar 2015, 21:15:16
ähm, ne Frage arbeiten die anderen DOIFs mit dem neuen Modul noch..?
Meine ganzen anderen Beleuchtungen sind aus und bei meiner Außenbeleuchtung hat die Umschaltung nicht gearbeitet um kurz vor 21uhr
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 27 Februar 2015, 21:22:28
Zitat von: flurin am 27 Februar 2015, 21:06:05
Ja, ich würde es so lösen:

define end_time dummy

define di_end_time_set DOIF ([06:30]) ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  )
attr di_end_time_set do always

define di_time_var DOIF ([06:30]-[end_time]]) (set flex_lamp on) DOELSE (set flex_lamp off)
attr di_time_var do always


OffTimeLichtX kannst Du arkivieren. Das wird evtl. später noch implementiert; wir waren unserer Zeit voraus  :)

Gruss
flurin

oder als Einzeiler in einem DOIF-Modul:  ;)

define di_time_var DOIF ([06:30]-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 27 Februar 2015, 21:25:13
Zitat von: moonsorrox am 27 Februar 2015, 21:15:16
ähm, ne Frage arbeiten die anderen DOIFs mit dem neuen Modul noch..?
Meine ganzen anderen Beleuchtungen sind aus und bei meiner Außenbeleuchtung hat die Umschaltung nicht gearbeitet um kurz vor 21uhr

ja, bei mir funktionieren alle 20 Module wir bisher. Dann musst du das Verhalten analysieren.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 27 Februar 2015, 21:30:34
Zitat von: Damian am 27 Februar 2015, 21:22:28
oder als Einzeiler in einem DOIF-Modul:  ;)

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

Gruß

Damian

Ja, ich habe bei mir auch eine ähnliche Version mit einem DOIF ausprobiert. Ich wollte nur die einzelnen Schritte mit Bezug auf Deine Doku darlegen.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 27 Februar 2015, 21:34:36
Zitat von: flurin am 27 Februar 2015, 21:30:34
Ja, ich habe bei mir auch eine ähnliche Version mit einem DOIF ausprobiert. Ich wollte nur die einzelnen Schritte mit Bezug auf Deine Doku darlegen.

Gruss
flurin

ja, aber statt ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  ) würde ich immer

(set end_time {(OffTimeLicht())}) nehmen.

Ich reagiere allergisch, wenn ich vier Semikolons hintereinander sehe :)

Gruß

Damian

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 27 Februar 2015, 21:37:36
Zitat von: Damian am 27 Februar 2015, 21:34:36
ja, aber statt ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  ) würde ich immer

(set end_time {(OffTimeLicht())}) nehmen.

Ich reagiere allergisch, wenn ich vier Semikolons hintereinander sehe :)

Gruß

Damian

Ok, ich werde es mir merken! ;;;; gefällt mir auch nicht  :)
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 27 Februar 2015, 21:46:16
Zitat von: flurin am 27 Februar 2015, 21:37:36
Ok, ich werde es mir merken! das gefällt mir auch nicht  :)

ja, ist aber nur bei DOIF möglich, sonst nicht. Nicht, dass jemand woanders auf dumme Gedanken kommt :)

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 27 Februar 2015, 21:55:25
Zitat von: Damian am 27 Februar 2015, 21:46:16
ja, ist aber nur bei DOIF möglich, sonst nicht. Nicht, dass jemand woanders auf dumme Gedanken kommt :)

Gruß

Damian

Eine kleine Bemerkung: bei Deinem Einzeiler muss der Dummy immer noch definiert werden:


define end_time dummy

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)


Edit: so geht's auch  ;)


define end_time dummy

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)


Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Spartacus am 27 Februar 2015, 22:23:57
flurin, Damian,
ihr seit echt klasse! Ich bin leider unterwegs und kann es heute nicht mehr einbauen, aber ich bedanke mich recht herzlich für die Erläuterungen!

Danke und schönen Abend,
Christian.

P.S.
if ($timer =~ /^(\+)?((\{.*\})|(\[.*\])|([0-9][0-9](:[0-5][0-9]){1,2}))(\|[0-8]+$|-(\+)?(([0-9][0-9](:[0-5][0-9]){1,2})|({.*})|(\[.*\]))|$)(\|[0-8]+$|$)/) {
Bin echt platt! Wer um alles in der Welt, versteht so etwas! 
Hab mir schon nen Buch gekauft, aber es will ums Verrecken nicht in meine Birne! Von so einem ausgefeilten Code, bin ich Lichtjahre entfernt! Absolut cool! 8)
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 27 Februar 2015, 22:32:17
Zitat von: Spartacus am 27 Februar 2015, 22:23:57
flurin, Damian,
ihr seit echt klasse! Ich bin leider unterwegs und kann es heute nicht mehr einbauen, aber ich bedanke mich recht herzlich für die Erläuterungen!

Danke und schönen Abend,
Christian.

P.S.
if ($timer =~ /^(\+)?((\{.*\})|(\[.*\])|([0-9][0-9](:[0-5][0-9]){1,2}))(\|[0-8]+$|-(\+)?(([0-9][0-9](:[0-5][0-9]){1,2})|({.*})|(\[.*\]))|$)(\|[0-8]+$|$)/) {
Bin echt platt! Wer um alles in der Welt, versteht so etwas! 
Hab mir schon nen Buch gekauft, aber es will ums Verrecken nicht in meine Birne! Von so einem ausgefeilten Code, bin ich Lichtjahre entfernt! Absolut cool! 8)

Das ist doch nur der Check in Form eines regulären Ausdrucks, ob es sich um timer-Angaben  handelt. Den ganzen Parser-Mechanismus erkläre ich mal ein anderes mal ;)

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 28 Februar 2015, 00:04:08
Zitat von: Damian am 27 Februar 2015, 21:25:13
ja, bei mir funktionieren alle 20 Module wir bisher. Dann musst du das Verhalten analysieren.

mmh, ist irgendwie nicht erkennbar, im Log steht nichts von einschalten oder auch umschalten. Ein eigenes Log habe ich nicht für die Beleuchtung.. mal schauen was heute passiert mit dem Aus schalten.
Wohnzimmer TV Licht hat auch nicht funktioniert... keine Ahnung was hier los war..!  :-\

Ich starte mal Fhem komplett neu...
So nach einigen Zeitänderungen zum probieren funktioniert das wieder :D frag mich aber nicht warum das nicht funktioniert hat  :-\ mal schauen was morgen so passiert
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 08:24:41
Zitat von: moonsorrox am 28 Februar 2015, 00:04:08
mmh, ist irgendwie nicht erkennbar, im Log steht nichts von einschalten oder auch umschalten. Ein eigenes Log habe ich nicht für die Beleuchtung.. mal schauen was heute passiert mit dem Aus schalten.
Wohnzimmer TV Licht hat auch nicht funktioniert... keine Ahnung was hier los war..!  :-\

Ich starte mal Fhem komplett neu...
So nach einigen Zeitänderungen zum probieren funktioniert das wieder :D frag mich aber nicht warum das nicht funktioniert hat  :-\ mal schauen was morgen so passiert

Wenn du vor dem shutdown kein save gemacht hast und deine DOIF-Module das Attribut initialize nicht haben, kann es schon paar Tage dauern, bis alles Zustände mit der Wirklichkeit übereinstimmen.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 28 Februar 2015, 12:25:59
Zitat von: Damian am 27 Februar 2015, 21:34:36
ja, aber statt ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  ) würde ich immer

(set end_time {(OffTimeLicht())}) nehmen.

Ich reagiere allergisch, wenn ich vier Semikolons hintereinander sehe :)

Gruß

Damian

Hi Damian

Zum ";;;;" Problem (Allergie) habe ich noch Folgendes zufällig in commandref unter "FHEM Befehlstypen" gefunden:

Für jede weitere Indirektion muss man die Strichpunkte verdoppeln. Um also die beiden Lampen um 7:00 für 10 Minuten einzuschalten schreibt man:
define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off


Da das Simikolon in Perl als Trennzeichen verwendet wird, wäre es logisch dies auch in einem DOIF Perl Block verwenden zu können.
Eine Möglichkeit (getestet) wäre eine Erweiterung in ParseCommandsDoIf (line 318) einzubauen:


if ($currentBlock =~ m/(.+)\;+(.+)/) {
    $currentBlock = $1.";;;;".$2;
}


Nur ein Vorschlag ohne error handling.

Gruss
flurin

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 13:31:39
Zitat von: flurin am 28 Februar 2015, 12:25:59
Hi Damian

Zum ";;;;" Problem (Allergie) habe ich noch Folgendes zufällig in commandref unter "FHEM Befehlstypen" gefunden:

Für jede weitere Indirektion muss man die Strichpunkte verdoppeln. Um also die beiden Lampen um 7:00 für 10 Minuten einzuschalten schreibt man:
define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off


Da das Simikolon in Perl als Trennzeichen verwendet wird, wäre es logisch dies auch in einem DOIF Perl Block verwenden zu können.
Eine Möglichkeit (getestet) wäre eine Erweiterung in ParseCommandsDoIf (line 318) einzubauen:


if ($currentBlock =~ m/(.+)\;+(.+)/) {
    $currentBlock = $1.";;;;".$2;
}


Nur ein Vorschlag ohne error handling.

Gruss
flurin

Dann wäre man nicht mehr kompatibel zu IF, das man sonst irgendwo nutzen kann. In der Commandref zu IF steht:

ZitatIF in Kombination mit einem define at mit mehreren set-Befehlen (Eingabe muss wegen der Semikolons im DEF-Editor erfolgen, einfaches Semikolon ist nicht erlaubt - es würde vom FHEM-Parser "geschluckt" werden und beim IF nicht mehr ankommen):

define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 set lampe1 on;;set lampe2 off;;set temp desired 20)

Das Editieren der cfg-Datei ist eh nicht angesagt. Im DEF-Editor kommt man immerhin mit zwei Semikolons aus.

Die Maskierungsgeschichte mit der Verdopplung der Semikolons war meiner Meinung nach keine gute Idee. Daher habe ich mich direkt vom Anfang an für Klammerhierarchie entschieden. Um kompatibel zu FHEM zu bleiben und der Verdoppelungsproblematik aus dem Wege zu gehen, habe ich das Komma als Trennzeichen gewählt.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 13:46:20
Zitat von: Damian am 28 Februar 2015, 13:31:39
Dann wäre man nicht mehr kompatibel zu IF, das man sonst irgendwo nutzen kann. In der Commandref zu IF steht:

Das Editieren der cfg-Datei ist eh nicht angesagt. Im DEF-Editor kommt man immerhin mit zwei Semikolons aus.

Die Maskierungsgeschichte mit der Verdopplung der Semikolons war meiner Meinung nach keine gute Idee. Daher habe ich mich direkt vom Anfang an für Klammerhierarchie entschieden. Um kompatibel zu FHEM zu bleiben und der Verdoppelungsproblematik aus dem Wege zu gehen, habe ich das Komma als Trennzeichen gewählt.

Gruß

Damian

Nachtrag: Ein einfaches Semikolon, eingegeben in der Kommandozeile, würde schon deswegen nicht funktionieren, weil es vom FHEM-Parser als Trennzeichen verarbeitet wird und der Rest der Zeile gar nicht mehr bei DOIF ankäme.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 28 Februar 2015, 14:39:59
Zitat von: Damian am 28 Februar 2015, 13:31:39
Dann wäre man nicht mehr kompatibel zu IF, das man sonst irgendwo nutzen kann. In der Commandref zu IF steht:

Das Editieren der cfg-Datei ist eh nicht angesagt. Im DEF-Editor kommt man immerhin mit zwei Semikolons aus.

Die Maskierungsgeschichte mit der Verdopplung der Semikolons war meiner Meinung nach keine gute Idee. Daher habe ich mich direkt vom Anfang an für Klammerhierarchie entschieden. Um kompatibel zu FHEM zu bleiben und der Verdoppelungsproblematik aus dem Wege zu gehen, habe ich das Komma als Trennzeichen gewählt.

Gruß

Damian

Zur Präzisierung:

Meine Code-Beispiele stammen aus fhem.cfg. Ich verwende aber normalerweise den DEF-Editor.

Also der Code aus fhem.cfg

define di_end_time_set DOIF ([06:30]) ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  )

sieht in DEF-Editor so aus:

([06:30]) ( {my $OffTime = OffTimeLicht();; fhem("set end_time $OffTime") }  )

Demzufolge sieht Dein IF Beispiel:

define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 set lampe1 on;;set lampe2 off;;set temp desired 20)

in fhem.cfg so aus:

define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 set lampe1 on;;;;set lampe2 off;;;;set temp desired 20)

Eigentlich auch ein Grund allergisch zu werden  :) aber evtl. habe ich was übersehen oder nicht richtig verstanden.
Grundsätzlich kann ich das DOIF-Modul so verwendet wie es ist und akzeptiere alles, was Du immer entscheidest.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 28 Februar 2015, 14:44:50
Zitat von: Damian am 28 Februar 2015, 08:24:41
Wenn du vor dem shutdown kein save gemacht hast und deine DOIF-Module das Attribut initialize nicht haben, kann es schon paar Tage dauern, bis alles Zustände mit der Wirklichkeit übereinstimmen.
naja, mittlerweile ist es ja schon so das man nur kurz in DEF gehen kann, nichts verändern und nur modify drückt und schon erscheint das Fragezeichen hinter save...... damit wäre es ja alles gesichert und das mache ich auch so.

Aber dein "initialize" hat mich auf die Idee gebracht mal in alle DOIF zu schauen und siehe da genau die Uhrschaltung die ich habe und heute morgen nicht funktioniert hat, war noch vom 26.02.  :-\
Also habe ich jetzt mal alle DOIF angeschaut und es sollte nun heute alle laufen.
Habe auch noch deine Version aus dem Thread hier in Benutzung ;)
Danke nochmals  :D
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 14:51:34
Zitat von: moonsorrox am 28 Februar 2015, 14:44:50
naja, mittlerweile ist es ja schon so das man nur kurz in DEF gehen kann, nichts verändern und nur modify drückt und schon erscheint das Fragezeichen hinter save...... damit wäre es ja alles gesichert und das mache ich auch so.

Aber dein "initialize" hat mich auf die Idee gebracht mal in alle DOIF zu schauen und siehe da genau die Uhrschaltung die ich habe und heute morgen nicht funktioniert hat, war noch vom 26.02.  :-\
Also habe ich jetzt mal alle DOIF angeschaut und es sollte nun heute alle laufen.
Habe auch noch deine Version aus dem Thread hier in Benutzung ;)
Danke nochmals  :D

ja, wenn irgendwas nicht so funktionieren sollte wie erhofft, dann muss man diesen konkreten Fall ganz genau analysieren und auf mögliches Fehlverhalten überprüfen und mit Belegen z. B. list ... hier posten. Alles andere wäre nur stochern im Heuhaufen und dafür haben wir alle keine Zeit.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 14:58:22
Zitat von: flurin am 28 Februar 2015, 14:39:59
Zur Präzisierung:

Meine Code-Beispiele stammen aus fhem.cfg. Ich verwende aber normalerweise den DEF-Editor.

Also der Code aus fhem.cfg

define di_end_time_set DOIF ([06:30]) ( {my $OffTime = OffTimeLicht();;;; fhem("set end_time $OffTime") }  )

sieht in DEF-Editor so aus:

([06:30]) ( {my $OffTime = OffTimeLicht();; fhem("set end_time $OffTime") }  )

Demzufolge sieht Dein IF Beispiel:

define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 set lampe1 on;;set lampe2 off;;set temp desired 20)

in fhem.cfg so aus:

define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 set lampe1 on;;;;set lampe2 off;;;;set temp desired 20)

Eigentlich auch ein Grund allergisch zu werden  :) aber evtl. habe ich was übersehen oder nicht richtig verstanden.
Grundsätzlich kann ich das DOIF-Modul so verwendet wie es ist und akzeptiere alles, was Du immer entscheidest.

Gruss
flurin

Die Sache mit dem at ist einfach nicht anders machbar, weil die Semikolon-Mechanismen in FHEM stecken und nicht in meinen Modulen.

Dein Vorschlag würde also nie zum tragen kommen, da beim DOIF-Modul nie ein einzelnes Semikolon ankommen kann, weil es vorher schon vom FHEM-Parser "verschluckt" wird - da kann man im Modul programmieren, was man will - es würde nicht funktionieren.

Gruß

Damian

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 28 Februar 2015, 15:15:38
Zitat von: Damian am 28 Februar 2015, 14:58:22
Die Sache mit dem at ist einfach nicht anders machbar, weil die Semikolon-Mechanismen in FHEM stecken und nicht in meinen Modulen.

Dein Vorschlag würde also nie zum tragen kommen, da beim DOIF-Modul nie ein einzelnes Semikolon ankommen kann, weil es vorher schon vom FHEM-Parser "verschluckt" wird - da kann man im Modul programmieren, was man will - es würde nicht funktionieren.

Gruß

Damian

Nach der Erweiterung von 98_DOIF.pm - wie oben beschrieben - funktioniert dieses Beispiel (aus dem DEF-Editor) problemlos:

([15:15]) ( { myLog("A"); myLog("B") } )

also mit einem Semikolon.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 16:49:04
Zitat von: flurin am 28 Februar 2015, 15:15:38
Nach der Erweiterung von 98_DOIF.pm - wie oben beschrieben - funktioniert dieses Beispiel (aus dem DEF-Editor) problemlos:

([15:15]) ( { myLog("A"); myLog("B") } )

also mit einem Semikolon.

Gruss
flurin

ja, aber nicht in der Kommandozeile. Und weil bis heute die wenigsten wissen wie viel Semikolons man wo setzen muss, belassen wir es einfach beim Komma - da muss man immer nur eins nehmen, egal ob in der Kommandozeile, cfg-Datei oder DEF-Editor ;)


Gruß

Damian

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 28 Februar 2015, 17:26:09
Zitat von: Damian am 28 Februar 2015, 16:49:04
ja, aber nicht in der Kommandozeile. Und weil bis heute die wenigsten wissen wie viel Semikolons man wo setzen muss, belassen wir es einfach beim Komma - da muss man immer nur eins nehmen, egal ob in der Kommandozeile, cfg-Datei oder DEF-Editor ;)


Gruß

Damian

OK, Danke für Deine Antwort. Wie gesagt, ich kann damit leben.
Grundsätzlich sobald mehr als ein statement in einem DOIF-Perl-Block vorkommt, werde ich es auslagern (-> 99_myUtils.pm), dann bin ich wieder happy.  ;)

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 17:35:30
Zitat von: flurin am 28 Februar 2015, 17:26:09
OK, Danke für Deine Antwort. Wie gesagt, ich kann damit leben.
Grundsätzlich sobald mehr als ein statement in einem DOIF-Perl-Block vorkommt, werde ich es auslagern (-> 99_myUtils.pm), dann bin ich wieder happy.  ;)

Gruss
flurin

ja, wenn man in perl programmiert ist das die beste Methode.

Abgesehen davon würde deine Änderung jegliche Hierarchie zunichte machen. Ein DOIF()({fhem(" define test at 10:00 set bla1 on;set bla2 off")}) ob mit einem, zwei oder drei usw. Semikolon dürfe hier nicht mehr funktionieren (auch im DEF-Editor). Ist aber jetzt philosophisch, da Kommandozeile eh nicht funktioniert.

Die Sache ist wesentlich komplizierter als es den Anschein hat. Ich habe mir bereits bei der Programmierung des IF-Befehls die Zähne an den Semikolons ausgebissen :)

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 28 Februar 2015, 17:46:28
Zitat von: Damian am 28 Februar 2015, 17:35:30
ja, wenn man in perl programmiert ist das die beste Methode.

Abgesehen davon würde deine Änderung jegliche Hierarchie zunichte machen. Ein DOIF()({fhem(" define test at 10:00 set bla1 on;set bla2 off")}) ob mit einem, zwei oder drei usw. Semikolon dürfe hier nicht mehr funktionieren (auch im DEF-Editor). Ist aber jetzt philosophisch, da Kommandozeile eh nicht funktioniert.

Die Sache ist wesentlich komplizierter als es den Anschein hat. Ich habe mir bereits bei der Programmierung des IF-Befehls die Zähne an den Semikolons ausgebissen :)

Gruß

Damian

Das kann ich nicht so stehen lassen  :)

DOIF()({fhem(" define test at 10:00 set bla1 on;set bla2 off")})

Das ist doch kein perl-Code sondern ein fhem-Code und hier gehört auch ein Komma her.
Mein Vorschlag bezog sich nur auf ein perl-Code in einem perl-Block {statement; statement;..}

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 17:53:41
Zitat von: flurin am 28 Februar 2015, 17:46:28
Das kann ich nicht so stehen lassen  :)

DOIF()({fhem(" define test at 10:00 set bla1 on;set bla2 off")})

Das ist doch kein perl-Code sondern ein fhem-Code und hier gehört auch ein Komma her.
Mein Vorschlag bezog sich nur auf ein perl-Code in einem perl-Block {statement; statement;..}

Gruss
flurin

natürlich ist das perl-code.

{fhem ... ist immer perl-code, da fhem eine perl-Funktion ist und kein FHEM-Befehl. Alles was in Anführungszeichen steht ist ein Übergabeparameter der perl-Funktion fhem (hier zufällig FHEM-Code)

Gruß

Damian




Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 28 Februar 2015, 18:06:33
Zitat von: Damian am 28 Februar 2015, 17:53:41
natürlich ist das perl-code.

{fhem ... ist immer perl-code, da fhem eine perl-Funktion ist und kein FHEM-Befehl. Alles was in Anführungszeichen steht ist ein Übergabeparameter der perl-Funktion fhem (hier zufällig FHEM-Code)

Gruß

Damian

Ja, ich meinte der Übergabeparameter ist kein perl-code. Hier hast Du auch das Komma mit einem Semikolon ersetzt, was ich nie vorgeschlagen habe.

Ich muss leider weg, wünsche Dir einen schönen Abend.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 28 Februar 2015, 18:09:03
Zitat von: Damian am 28 Februar 2015, 17:53:41
natürlich ist das perl-code.

{fhem ... ist immer perl-code, da fhem eine perl-Funktion ist und kein FHEM-Befehl. Alles was in Anführungszeichen steht ist ein Übergabeparameter der perl-Funktion fhem (hier zufällig FHEM-Code)

Gruß

Damian

Nachtrag: Deine Änderung würde genau in diesem Fall (aus Sicht von DOIF: Perl-Block) die Semikolons verändern. Komma würde hier gar nicht funktionieren, da DOIF das Perl-Kommando weitergibt und sich gar nicht mehr drum kümmert.

Gruß

Damian

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 28 Februar 2015, 22:18:25
ich möchte ja den Thread hier nicht zu müllen, aber bei mir gibt es echt Probleme...!
Habe heute Mittag extra darauf geachtet, das alle meine DOIFs "initialized" sind.

Jetzt komme ich nachhause und selbst an den Rollladen DOIF wo ich nichts geändert habe ging wohl nichts. Nun weiß ich erst mal gar nicht auf was ich achten muss und was ich zuerst schauen soll.

Es gingen die Rollläden nicht runter, das Licht am Weg nicht an und im WZ die TV Beleuchtung nicht an. Dann kommt etwas später noch die Schlafzimmer Decken Uhr wird wohl auch nicht gehen, mal schauen  :-\

Hier mal das List von der Wegbeleuchtung, evtl. kann man was sehen:
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([ZeitsteuerungWeg] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([ZeitsteuerungWeg] =~ "Aus|Dämmerung")(attr ZufallsTimerWeglicht disable 1)
DOELSEIF([ZeitsteuerungWeg] eq "Zufall")(attr ZufallsTimerWeglicht disable 0)




   NAME       di_WegBeleuchtung
   NR         295
   NTFY_ORDER 50-di_WegBeleuchtung
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-02-28 14:38:55   state           initialized
     2015-02-28 16:02:50   timer_1_c1      28.02.2015 18:51:29|12345
     2015-02-28 16:02:50   timer_2_c1      28.02.2015 18:44:49|06
     2015-02-28 16:02:50   timer_3_c2      28.02.2015 21:01:29|0123456
     2015-02-28 16:02:50   timer_4_c3      01.03.2015 00:15:00|12345
     2015-02-28 16:02:50   timer_5_c3      01.03.2015 01:15:00|06
   Condition:
     0           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"12345") or DOIF_time_once($hash->{timer}{4},$wday,"06"))
     3          InternalDoIf('ZeitsteuerungWeg','STATE','') =~ "Aus|Dämmerung"
     4          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Zufall"
   Days:
     0          12345
     1          06
     2          0123456
     3          12345
     4          06
   Devices:
     0           ZeitsteuerungWeg
     1           ZeitsteuerungWeg
     2           ZeitsteuerungWeg
     3           ZeitsteuerungWeg
     4           ZeitsteuerungWeg
     all         ZeitsteuerungWeg
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
     3          attr ZufallsTimerWeglicht disable 1
     4          attr ZufallsTimerWeglicht disable 0
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           ZeitsteuerungWeg:STATE
     1           ZeitsteuerungWeg:STATE
     2           ZeitsteuerungWeg:STATE
     3           ZeitsteuerungWeg:STATE
     4           ZeitsteuerungWeg:STATE
     all         ZeitsteuerungWeg:STATE
   Itimer:
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:


und hier die Rollläden:
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ([RolloWZmodus] eq "FHEM"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345]
or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06])) (set RollladenWZ on)
DOELSEIF ([RolloWZmodus] =~ "FHEM|Beschattung"
and [WZ_TerrasseTuer:state] eq "closed"
and ([{sunset("CIVIL",-600,"16:35","22:10")}|0123456])) (set RollladenWZ off)


   NAME       di_rollladenWZ_TK_LichtTerrasse
   NR         155
   NTFY_ORDER 50-di_rollladenWZ_TK_LichtTerrasse
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-02-28 16:07:06   e_RolloWZmodus_STATE FHEM
     2015-02-28 17:03:31   state           initialized
     2015-02-28 16:02:50   timer_1_c1      01.03.2015 08:15:00|12345
     2015-02-28 16:02:50   timer_2_c1      01.03.2015 08:40:00|06
     2015-02-28 16:02:50   timer_3_c2      28.02.2015 18:21:29|0123456
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "FHEM" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') =~ "FHEM|Beschattung" and ReadingValDoIf('WZ_TerrasseTuer','state','') eq "closed" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
   Days:
     0          12345
     1          06
     2          0123456
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus WZ_TerrasseTuer
     all         RolloWZmodus WZ_TerrasseTuer
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ off
   Helper:
     last_timer 3
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE
     all         RolloWZmodus:STATE
   Itimer:
   Readings:
     1           WZ_TerrasseTuer:state
     all         WZ_TerrasseTuer:state
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}
     2          {sunset("CIVIL",-600,"16:35","22:10")}
   Timecond:
     0          0
     1          0
     2          1
   Timer:
     0          0
     1          0
     2          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
Attributes:
   disable    0
   group      Rollläden EG
   room       Automation
   sortby     22


ich habe gerade nochmal ins Log geschaut und finde diese Fehler, sagt mir jetzt nichts... weil ich nutze diese "begin" und "end" aus dem Beispiel noch nicht des Threads nicht
Zitat2015.02.28 18:09:17 1: PERL WARNING: Use of uninitialized value $begin in string ge at ./FHEM/98_DOIF.pm line 454.
2015.02.28 18:09:17 1: PERL WARNING: Use of uninitialized value $begin in string gt at ./FHEM/98_DOIF.pm line 449.
2015.02.28 18:09:17 1: PERL WARNING: Use of uninitialized value $end in string gt at ./FHEM/98_DOIF.pm line 449.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 01 März 2015, 06:06:12
Zitat von: Damian am 28 Februar 2015, 18:09:03
Nachtrag: Deine Änderung würde genau in diesem Fall (aus Sicht von DOIF: Perl-Block) die Semikolons verändern. Komma würde hier gar nicht funktionieren, da DOIF das Perl-Kommando weitergibt und sich gar nicht mehr drum kümmert.

Gruß

Damian

Hi Damian

Du hast Recht mit dem Semikolon. Ich habe es innerhalb von DOIF so noch nie angewendet, darum mit der Kommaregel verwechselt.

Eigentlich wäre folgende Erweiterung im Gegensatz zu meinem oberen Vorschlag noch besser:

$currentBlock =~ s/;/;;/g;

Das ist auch das, was der DEF-Editor beim Abspeichern macht. Aber vermutlich habe ich nicht alle Fälle berücksichtigt.
Schlussendlich lohnt es sich nicht, den Aufwand zu betreiben.

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 10:50:07
Zitat von: moonsorrox am 28 Februar 2015, 22:18:25
ich möchte ja den Thread hier nicht zu müllen, aber bei mir gibt es echt Probleme...!
Habe heute Mittag extra darauf geachtet, das alle meine DOIFs "initialized" sind.

Jetzt komme ich nachhause und selbst an den Rollladen DOIF wo ich nichts geändert habe ging wohl nichts. Nun weiß ich erst mal gar nicht auf was ich achten muss und was ich zuerst schauen soll.

Es gingen die Rollläden nicht runter, das Licht am Weg nicht an und im WZ die TV Beleuchtung nicht an. Dann kommt etwas später noch die Schlafzimmer Decken Uhr wird wohl auch nicht gehen, mal schauen  :-\

Hier mal das List von der Wegbeleuchtung, evtl. kann man was sehen:
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([ZeitsteuerungWeg] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([ZeitsteuerungWeg] =~ "Aus|Dämmerung")(attr ZufallsTimerWeglicht disable 1)
DOELSEIF([ZeitsteuerungWeg] eq "Zufall")(attr ZufallsTimerWeglicht disable 0)




   NAME       di_WegBeleuchtung
   NR         295
   NTFY_ORDER 50-di_WegBeleuchtung
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-02-28 14:38:55   state           initialized
     2015-02-28 16:02:50   timer_1_c1      28.02.2015 18:51:29|12345
     2015-02-28 16:02:50   timer_2_c1      28.02.2015 18:44:49|06
     2015-02-28 16:02:50   timer_3_c2      28.02.2015 21:01:29|0123456
     2015-02-28 16:02:50   timer_4_c3      01.03.2015 00:15:00|12345
     2015-02-28 16:02:50   timer_5_c3      01.03.2015 01:15:00|06
   Condition:
     0           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"12345") or DOIF_time_once($hash->{timer}{4},$wday,"06"))
     3          InternalDoIf('ZeitsteuerungWeg','STATE','') =~ "Aus|Dämmerung"
     4          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Zufall"
   Days:
     0          12345
     1          06
     2          0123456
     3          12345
     4          06
   Devices:
     0           ZeitsteuerungWeg
     1           ZeitsteuerungWeg
     2           ZeitsteuerungWeg
     3           ZeitsteuerungWeg
     4           ZeitsteuerungWeg
     all         ZeitsteuerungWeg
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
     3          attr ZufallsTimerWeglicht disable 1
     4          attr ZufallsTimerWeglicht disable 0
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           ZeitsteuerungWeg:STATE
     1           ZeitsteuerungWeg:STATE
     2           ZeitsteuerungWeg:STATE
     3           ZeitsteuerungWeg:STATE
     4           ZeitsteuerungWeg:STATE
     all         ZeitsteuerungWeg:STATE
   Itimer:
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:


und hier die Rollläden:
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ([RolloWZmodus] eq "FHEM"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345]
or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06])) (set RollladenWZ on)
DOELSEIF ([RolloWZmodus] =~ "FHEM|Beschattung"
and [WZ_TerrasseTuer:state] eq "closed"
and ([{sunset("CIVIL",-600,"16:35","22:10")}|0123456])) (set RollladenWZ off)


   NAME       di_rollladenWZ_TK_LichtTerrasse
   NR         155
   NTFY_ORDER 50-di_rollladenWZ_TK_LichtTerrasse
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-02-28 16:07:06   e_RolloWZmodus_STATE FHEM
     2015-02-28 17:03:31   state           initialized
     2015-02-28 16:02:50   timer_1_c1      01.03.2015 08:15:00|12345
     2015-02-28 16:02:50   timer_2_c1      01.03.2015 08:40:00|06
     2015-02-28 16:02:50   timer_3_c2      28.02.2015 18:21:29|0123456
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "FHEM" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') =~ "FHEM|Beschattung" and ReadingValDoIf('WZ_TerrasseTuer','state','') eq "closed" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
   Days:
     0          12345
     1          06
     2          0123456
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus WZ_TerrasseTuer
     all         RolloWZmodus WZ_TerrasseTuer
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ off
   Helper:
     last_timer 3
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE
     all         RolloWZmodus:STATE
   Itimer:
   Readings:
     1           WZ_TerrasseTuer:state
     all         WZ_TerrasseTuer:state
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}
     2          {sunset("CIVIL",-600,"16:35","22:10")}
   Timecond:
     0          0
     1          0
     2          1
   Timer:
     0          0
     1          0
     2          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
Attributes:
   disable    0
   group      Rollläden EG
   room       Automation
   sortby     22


ich habe gerade nochmal ins Log geschaut und finde diese Fehler, sagt mir jetzt nichts... weil ich nutze diese "begin" und "end" aus dem Beispiel noch nicht des Threads nicht

Das sind leider keine Belege für ein Fehlverhalten, wenn du ein Modul um 16:02 definierst und alle Timer erst später zuschlagen sollen, dann kann man nichts dazu sagen. Du musst mir einen Fall zeigen, wo ein Timer zugeschlagen haben sollte und der Status nicht verändert wurde.

Die Warnings kommen von einem Modul, bei dem du indirekte Zeiten benutzt, bei denen der Status oder Reading nicht mit einer korrekten Zeit belegt sind, das werde ich noch abfangen.

Nachtrag: Von wann sind die Auszüge?  Welchen Zustand hatte zu diesem Zeitpunkt [ZeitsteuerungWeg]?

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 11:25:55
Zitat von: flurin am 01 März 2015, 06:06:12
Aber vermutlich habe ich nicht alle Fälle berücksichtigt.

Vermutlich, da man nicht weiß, was die Leute alles definiert haben. Abgesehen davon würden bei ca. 5000 definierten DOIF-Module unzählige nicht mehr funktionieren, da die Änderung nicht abwärtskompatibel ist.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 12:52:22
Zitat von: Damian am 01 März 2015, 10:50:07
Das sind leider keine Belege für ein Fehlverhalten, wenn du ein Modul um 16:02 definierst und alle Timer erst später zuschlagen sollen, dann kann man nichts dazu sagen. Du musst mir einen Fall zeigen, wo ein Timer zugeschlagen haben sollte und der Status nicht verändert wurde.

Nachtrag: Von wann sind die Auszüge?  Welchen Zustand hatte zu diesem Zeitpunkt [ZeitsteuerungWeg]?

@Damian
die Auszüge sind von ca. 22.15 Uhr, also direkt als ich den Beitrag geschrieben habe, meine  Decken Uhr die um 23 Uhr einschalten sollte hat dies auch nicht getan.

Die Zustände von z.B. ZeitsteuerungWeg war zu diesem Zeitpunkt auf Dämmerung und auch meine Decken Uhr Steuerung war auf ein.
Siehe Screenshots

Beide verändere ich momentan gar nicht, da ich zuhause bin, die Wegbeleuchtung arbeitet also nach Dämmerung und schaltet sich ein mit Sunset und geht zu einer festen Zeit aus.
Die Uhr z.B. ändere ich momentan auch nicht da ich keine Nachtschicht habe, die geht also Abends irgendwann an und morgens auch aus.

Die LED Innen Beleuchtung am TV hat gestern auch nicht ausgeschaltet, diese geht zu einer festen Zeit aus, oder wenn ich früher aus dem WZ gehe nach meinem Helligkeitssensor, wenn ich die zweite Lampe ausschalte.

Also im gesamten hat gestern nichts funktioniert...

Zur Information, ich habe das alte Modul wieder zurück kopiert und heute morgen funktionierten auch die Rollläden wieder und die Uhr hat sich ausgeschaltet.
Gegen Abend werde ich schauen was die Wegbeleuchtung macht, denke aber das sie wieder funktioniert...

Was brauchst du noch für Angaben, die ich evtl. auslesen könnte.?
Wie gesagt ich hatte am Nachmittag extra drauf geachtet das alle DOIFs initialisiert waren um sicher zu stellen das sie auch funktionieren... An den Dummys für den Modus stelle ich jetzt gerade extra nichts um, ist auch momentan nicht nötig.
Vielen Dank für dein Geduld, muss ich einfach mal so loswerden ;) :D
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 13:10:43
Zitat von: moonsorrox am 01 März 2015, 12:52:22
@Damian
die Auszüge sind von ca. 22.15 Uhr, also direkt als ich den Beitrag geschrieben habe, meine  Decken Uhr die um 23 Uhr einschalten sollte hat dies auch nicht getan.

Die Zustände von z.B. ZeitsteuerungWeg war zu diesem Zeitpunkt auf Dämmerung und auch meine Decken Uhr Steuerung war auf ein.
Siehe Screenshots

Beide verändere ich momentan gar nicht, da ich zuhause bin, die Wegbeleuchtung arbeitet also nach Dämmerung und schaltet sich ein mit Sunset und geht zu einer festen Zeit aus.
Die Uhr z.B. ändere ich momentan auch nicht da ich keine Nachtschicht habe, die geht also Abends irgendwann an und morgens auch aus.

Die LED Innen Beleuchtung am TV hat gestern auch nicht ausgeschaltet, diese geht zu einer festen Zeit aus, oder wenn ich früher aus dem WZ gehe nach meinem Helligkeitssensor, wenn ich die zweite Lampe ausschalte.

Also im gesamten hat gestern nichts funktioniert...

Zur Information, ich habe das alte Modul wieder zurück kopiert und heute morgen funktionierten auch die Rollläden wieder und die Uhr hat sich ausgeschaltet.
Gegen Abend werde ich schauen was die Wegbeleuchtung macht, denke aber das sie wieder funktioniert...

Was brauchst du noch für Angaben, die ich evtl. auslesen könnte.?
Wie gesagt ich hatte am Nachmittag extra drauf geachtet das alle DOIFs initialisiert waren um sicher zu stellen das sie auch funktionieren... An den Dummys für den Modus stelle ich jetzt gerade extra nichts um, ist auch momentan nicht nötig.
Vielen Dank für dein Geduld, muss ich einfach mal so loswerden ;) :D
OK. Das sieht so aus als wenn die Timer hier gar nicht zugeschlagen hätten. Du brauchst nicht stundenlang auf etwas zu warten:

teste einfach mal:

define di_test DOIF ([13:15]) (set bla on)

Die Zeit würde ich paar Minuten in die Zukunft setzen, die Definition anschauen und nach der Zeit nochmal schauen was passiert.


Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 13:28:58
Zitat von: Damian am 01 März 2015, 13:10:43
OK. Das sieht so aus als wenn die Timer hier gar nicht zugeschlagen hätten. Du brauchst nicht stundenlang auf etwas zu warten:

teste einfach mal:

define di_test DOIF ([13:15]) (set bla on)

Die Zeit würde ich paar Minuten in die Zukunft setzen, die Definition anschauen und nach der Zeit nochmal schauen was passiert.

das funktionierte jetzt grad... aber ich habe ja auch noch das "alte" 98_DOIF drin, nicht das aus dem Beitrag
Habe drauf geachtet das er initialisiert hat und das sollte reichen, also:
Zitatstate initialized 2015-03-01 13:26:07
timer_1_c1 01.03.2015 13:30:00 2015-03-01 13:26:07

ja ich habe immer solche ein ähnliches Test DOIF zur Verfügung (nur um eine Zeit zu testen und auch speziell ein Gerät) und das funktioniert jetzt auch wieder, ich nutze dazu einen Zwischenstecker der hier direkt neben mir in der Steckdose steckt  ;) nur das hilft jetzt ja nicht weiter und schon gar nicht für die die gestern nichts gemacht haben.

Das nur so gar nichts im Log steht, aber auch irgendwie klar wenn nichts ging steht auch nichts drin :-\
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 13:57:30
Zitat von: moonsorrox am 01 März 2015, 13:28:58
das funktionierte jetzt grad... aber ich habe ja auch noch das "alte" 98_DOIF drin, nicht das aus dem Beitrag
Habe drauf geachtet das er initialisiert hat und das sollte reichen, also:
ja ich habe immer solche ein ähnliches Test DOIF zur Verfügung (nur um eine Zeit zu testen und auch speziell ein Gerät) und das funktioniert jetzt auch wieder, ich nutze dazu einen Zwischenstecker der hier direkt neben mir in der Steckdose steckt  ;) nur das hilft jetzt ja nicht weiter und schon gar nicht für die die gestern nichts gemacht haben.

Das nur so gar nichts im Log steht, aber auch irgendwie klar wenn nichts ging steht auch nichts drin :-\

Ich denke, dass wir über die neue Modul reden und nicht über das alte. Dass beim alten auf einmal etwas nicht funktioniert, dürfte recht unwahrscheinlich sein.

Was mir bei deinen list-Ausgaben auffiel war, dass keine Realtime-Einträge vorhanden waren. Zu jedem Time-Eintrag muss es einen Realtime-Eintrag existieren, wie hier:

Realtime:
     0          06:25:00
     1          08:00:00
     2          15:00:00
     3          22:00:00
     4          06:25:00
     5          08:30:00
     6          08:30:00
     7          23:30:00
   State:
   Time:
     0          06:25:00
     1          08:00:00
     2          15:00:00
     3          22:00:00
     4          06:25:00
     5          08:30:00
     6          08:30:00
     7          23:30:00
   Timecond:


Um etwas reproduzieren zu können, darf man immer nur eine Sache gleichzeitig ändern und nicht mehrere.

Du kannst folgendes noch mal testen:

save config, shutdown, das letzte Modul aus Post 6 runterladen, ins FHEM-Verzeichnis kopieren, System hochfahren, beim test-DOIF Modul mit list schauen, ob Realtime gesetzt wurde, dann sollte alles funktionieren, wie bisher.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 14:04:43
Zitat von: Damian am 01 März 2015, 13:57:30
Ich denke, dass wir über die neue Modul reden und nicht über das alte. Dass beim alten auf einmal etwas nicht funktioniert, dürfte recht unwahrscheinlich sein.
schon klar, ich hatte nur etwas Muffe, da ja alles auf meinem Produktivsystem nicht funktionierte, deshalb also wieder das "alte" DOIF rein.

Werde es jetzt nochmals mit dem Modul aus dem Post hier machen.

Zitat von: Damian am 01 März 2015, 13:57:30
Was mir bei deinen list-Ausgaben auffiel war, dass keine Realtime-Einträge vorhanden waren. Zu jedem Time-Eintrag muss es einen Realtime-Eintrag existieren, wie hier:

Realtime:
     0          06:25:00
     1          08:00:00
     2          15:00:00
     3          22:00:00
     4          06:25:00
     5          08:30:00
     6          08:30:00
     7          23:30:00
   State:
   Time:
     0          06:25:00
     1          08:00:00
     2          15:00:00
     3          22:00:00
     4          06:25:00
     5          08:30:00
     6          08:30:00
     7          23:30:00
   Timecond:

OK, werde ich jetzt mal testen...!

Zitat von: Damian am 01 März 2015, 13:57:30
Du kannst folgendes noch mal testen:

save config, shutdown, das letzte Modul aus Post 6 runterladen, ins FHEM-Verzeichnis kopieren, System hochfahren, beim test-DOIF Modul mit list schauen, ob Realtime gesetzt wurde, dann sollte alles funktionieren, wie bisher.
Ok, werde berichten
...dann sollten die Realtime Einträge in meinen andere DOIFs aber auch vorhanden sein..? Gerade mal geschaut und alle drin..! :D
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 14:17:32
@Damian

also der Befehl meines di_testDOIF wurde ausgeführt  und es erscheinen auch die Realtime Einträge.
Hier das List:
Internals:
   CFGFN
   DEF        ([14:15]) (set LichtOG on)
   NAME       di_testDOIF
   NR         2776
   NTFY_ORDER 50-di_testDOIF
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-03-01 14:15:00   cmd_event       timer_1
     2015-03-01 14:15:00   cmd_nr          1
     2015-03-01 14:15:00   state           cmd_1
     2015-03-01 14:15:00   timer_1_c1      02.03.2015 14:15:00
   Condition:
     0          DOIF_time_once($hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0          set LichtOG on
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          14:15:00
   State:
   Time:
     0          14:15:00
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:
   room       AutomationTest


ich lasse das "neue" Modul jetzt mal drin und werde sehen ob alles geht heute.
Die anderen DOIFs haben ich die Realtime Einträge drin, somit sollte alles funktionieren
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 14:27:54
@Damian
es könnte ein Fehler sein...!

EDITH:/ kleiner Zusatz von mir, ein Neustart bringt wieder die Realtime Einträge

was mir wichtiges aufgefallen ist, ein erneutes einlesen von Fhem überlebt das Modul nicht...!
Ich hänge mal ein list meiner Wegbeleuchtung dran.... da fehlen dies Realtime-Einträge total obwohl sie eben noch da waren
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([ZeitsteuerungWeg] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([ZeitsteuerungWeg] =~ "Aus|Dämmerung")(attr ZufallsTimerWeglicht disable 1)
DOELSEIF([ZeitsteuerungWeg] eq "Zufall")(attr ZufallsTimerWeglicht disable 0)




   NAME       di_WegBeleuchtung
   NR         293
   NTFY_ORDER 50-di_WegBeleuchtung
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-03-01 01:15:00   cmd_event       timer_5
     2015-03-01 01:15:00   cmd_nr          3
     2015-03-01 01:15:00   state           cmd_3
     2015-03-01 14:13:32   timer_1_c1      01.03.2015 18:53:17|12345
     2015-03-01 14:13:32   timer_2_c1      01.03.2015 18:46:37|06
     2015-03-01 14:13:32   timer_3_c2      01.03.2015 21:03:17|0123456
     2015-03-01 14:13:32   timer_4_c3      02.03.2015 00:15:00|12345
     2015-03-01 14:13:32   timer_5_c3      02.03.2015 01:15:00|06
   Condition:
     0           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"12345") or DOIF_time_once($hash->{timer}{4},$wday,"06"))
     3          InternalDoIf('ZeitsteuerungWeg','STATE','') =~ "Aus|Dämmerung"
     4          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Zufall"
   Days:
     0          12345
     1          06
     2          0123456
     3          12345
     4          06
   Devices:
     0           ZeitsteuerungWeg
     1           ZeitsteuerungWeg
     2           ZeitsteuerungWeg
     3           ZeitsteuerungWeg
     4           ZeitsteuerungWeg
     all         ZeitsteuerungWeg
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
     3          attr ZufallsTimerWeglicht disable 1
     4          attr ZufallsTimerWeglicht disable 0
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           ZeitsteuerungWeg:STATE
     1           ZeitsteuerungWeg:STATE
     2           ZeitsteuerungWeg:STATE
     3           ZeitsteuerungWeg:STATE
     4           ZeitsteuerungWeg:STATE
     all         ZeitsteuerungWeg:STATE
   Itimer:
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 14:37:44
Zitat von: moonsorrox am 01 März 2015, 14:27:54
@Damian
es könnte ein Fehler sein...!

was mir wichtiges aufgefallen ist, ein erneutes einlesen von Fhem überlebt das Modul nicht...!
Ich hänge mal ein list meiner Wegbeleuchtung dran.... da fehlen dies Realtime-Einträge total obwohl sie eben noch da waren
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([ZeitsteuerungWeg] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([ZeitsteuerungWeg] =~ "Aus|Dämmerung")(attr ZufallsTimerWeglicht disable 1)
DOELSEIF([ZeitsteuerungWeg] eq "Zufall")(attr ZufallsTimerWeglicht disable 0)




   NAME       di_WegBeleuchtung
   NR         293
   NTFY_ORDER 50-di_WegBeleuchtung
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-03-01 01:15:00   cmd_event       timer_5
     2015-03-01 01:15:00   cmd_nr          3
     2015-03-01 01:15:00   state           cmd_3
     2015-03-01 14:13:32   timer_1_c1      01.03.2015 18:53:17|12345
     2015-03-01 14:13:32   timer_2_c1      01.03.2015 18:46:37|06
     2015-03-01 14:13:32   timer_3_c2      01.03.2015 21:03:17|0123456
     2015-03-01 14:13:32   timer_4_c3      02.03.2015 00:15:00|12345
     2015-03-01 14:13:32   timer_5_c3      02.03.2015 01:15:00|06
   Condition:
     0           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"12345") or DOIF_time_once($hash->{timer}{4},$wday,"06"))
     3          InternalDoIf('ZeitsteuerungWeg','STATE','') =~ "Aus|Dämmerung"
     4          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Zufall"
   Days:
     0          12345
     1          06
     2          0123456
     3          12345
     4          06
   Devices:
     0           ZeitsteuerungWeg
     1           ZeitsteuerungWeg
     2           ZeitsteuerungWeg
     3           ZeitsteuerungWeg
     4           ZeitsteuerungWeg
     all         ZeitsteuerungWeg
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
     3          attr ZufallsTimerWeglicht disable 1
     4          attr ZufallsTimerWeglicht disable 0
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           ZeitsteuerungWeg:STATE
     1           ZeitsteuerungWeg:STATE
     2           ZeitsteuerungWeg:STATE
     3           ZeitsteuerungWeg:STATE
     4           ZeitsteuerungWeg:STATE
     all         ZeitsteuerungWeg:STATE
   Itimer:
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:


Was verstehst du unter erneutes einlesen von Fhem? Änderung über DEF oder Neustart des Systems?

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 14:41:44
ein "rereadcfg" ist bei mir einlesen
ein "shutdown restart" ist bei mir Neustart ich habe dafür Button auf der Weboberfläche erstellt

jetzt nach einem Neustart sind die Realtime Einträge wieder da, lese ich wiederum ein sind sie wieder weg...! verstanden..? ;)
Auch ein save davor bringt nichts...


schau mal den screenshot
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 15:04:39
Zitat von: moonsorrox am 01 März 2015, 14:41:44
ein "rereadcfg" ist bei mir einlesen
ein "shutdown restart" ist bei mir Neustart ich habe dafür Button auf der Weboberfläche erstellt

jetzt nach einem Neustart sind die Realtime Einträge wieder da, lese ich wiederum ein sind sie wieder weg...! verstanden..? ;)
Auch ein save davor bringt nichts...


schau mal den screenshot

gut, dass wir darüber gesprochen haben, ein rereadcfg habe ich bei mir noch nicht benutzt. Ich kann das Verhalten bei mir reproduzieren. Ich melde mich, wenn ich das Problem behoben habe. Solange musst du das alte Modul benutzen, oder kein rereadcfg ausführen :)

Gruß

Damian

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 15:07:10
@Damian...

Super.. ;) schön das ich auch mal helfen konnte  :D

ja klar soweit ich das weiß tue ich dieses natürlich nicht... ich lass das "neue" Modul drin und habe es oben dick anmarkiert, damit es jeder weiß...
Danke
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 01 März 2015, 15:24:13
Zitat von: moonsorrox am 01 März 2015, 15:07:10
@Damian...

Super.. ;) schön das ich auch mal helfen konnte  :D

ja klar soweit ich das weiß tue ich dieses natürlich nicht... ich lass das "neue" Modul drin und habe es oben dick anmarkiert, damit es jeder weiß...
Danke

habe es gefixt. Jetzt funktioniert auch rereadcfg - neue Version im ersten Post.

Gruß
Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: moonsorrox am 01 März 2015, 15:27:23
Zitat von: Damian am 01 März 2015, 15:24:13
habe es gefixt. Jetzt funktioniert auch rereadcfg - neue Version im ersten Post.

bist du ein schneller "Hund"  ;) :P
Danke... und immer wieder "tolles Modul"  :D

So... jetzt erst mal nen Kaffee  :D

EDITH://
mal ein kleiner Zwischeneinwurf:
ich arbeite immer noch an meiner Version mit dem Türkontakt hier in diesem Thread (http://forum.fhem.de/index.php/topic,34263.msg267471.html#msg267471), aber irgendwie habe ich da einen Knoten im Kopf und schaffe es nicht, kann mir jemand einen Denkanstoß geben.. :-\
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Spartacus am 02 März 2015, 17:21:23
Zitat von: flurin am 27 Februar 2015, 21:55:25
Eine kleine Bemerkung: bei Deinem Einzeiler muss der Dummy immer noch definiert werden:


define end_time dummy

define di_time_var DOIF ([06:30]-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)


Edit: so geht's auch  ;)


define end_time dummy

define di_time_var DOIF ([06:30]-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)


Gruss
flurin

Hallo,
nachdem ich nun fast 2 Tage ohne Internetzugriff war, habe ich mir die Sache mit dem trigger auf die endtime angesehen. Aber so richtig habe ich das immer noch nicht gerafft.

Der Code von flurin funktioniert nicht. Irgendwo fehlt eine Klammer, aber ich habe keinen Plan wo!
vermutet habe ich diese Stelle:
DOIF ([06:30]-[end_time]])
aber weder
DOIF ([06:30]-[end_time])
noch
DOIF ([06:30]-[[end_time]])
führen hier zum Erfolg!
Das Dummy end_time hat nicht die Zeit, sondern wird auf " {OffTimeLicht()}" gesetzt.
Ich bin irgendwie noch nicht ganz bei Euch angekommen!
Spartacus
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 02 März 2015, 17:28:35
Hallo Spartacus

Eine Klammer ist zu viel! Ich werde es berichtigen.

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 02 März 2015, 17:33:04
Zitat von: flurin am 02 März 2015, 17:28:35
Hallo Spartacus

Eine Klammer ist zu viel! Ich werde es berichtigen.

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)

Gruss
flurin

und wenn du

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

nimmst, so wie ich ursprünglich vorgeschlagen habe, wird im Dummy  die Zeit gesetzt und nicht die Funktion. Beide Lösungen sollten allerdings funktionieren.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 02 März 2015, 17:34:58
Zitat von: Damian am 02 März 2015, 17:33:04
und wenn du

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

nimmst, so wie ich ursprünglich vorgeschlagen habe, wird im Dummy  die Zeit gesetzt und nicht die Funktion. Beide Lösungen sollten allerdings funktionieren.

Gruß

Damian

OK, gut zu wissen!, Danke

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 02 März 2015, 17:50:44
Zitat von: Damian am 02 März 2015, 17:33:04
und wenn du

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

nimmst, so wie ich ursprünglich vorgeschlagen habe, wird im Dummy  die Zeit gesetzt und nicht die Funktion. Beide Lösungen sollten allerdings funktionieren.

Gruß

Damian

Ich habe es gleich ausprobiert, jedoch auch mit Klammern erhalte ich nur die Funktion.

([17:48-[end_time]]) (set flex_lamp on, set end_time { (OffTimeLicht()) } ) DOELSE (set flex_lamp off)

Internals:
   NAME       end_time
   NR         310
   STATE      { (OffTimeLicht()) }
   TYPE       dummy
   Readings:
     2015-03-02 17:48:00   state           { (OffTimeLicht()) }
Attributes:
   group      Dummy


Edit: so ist es OK:

([17:48-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

ohne Space nach { und vor }
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 02 März 2015, 18:20:33
Zitat von: flurin am 02 März 2015, 17:50:44
ohne Space nach { und vor }

ja, denn in der Commandref steht:

ZitatEs können beim Attribut state ebenfalls Berechnungen in geschweiften Klammern durchgeführt werden. Aus Kompatibilitätsgründen, muss die Berechnung mit einer runden Klammer beginnen.

und da ist Leerzeichen nicht erlaubt um möglichst kompatibel zum restlichen FHEM zu sein.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Spartacus am 02 März 2015, 18:26:27
Bingo!
jetzt funzt es! Es gab bei mir noch ein Problem mit den Funktionsnamen. Es wurde immer Flurins zweite Funktion (die den kompletten Zeitstring liefert) vom DOIF angezogen. Deshalb bekam ich immer den Timespec Error. Ich hatte offenbar vergessen, die myUtils neu zu laden!

Jetzt kann ich mich mal an die komplette Bedingung machen....
Danke und Gruß,
Christian.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 02 März 2015, 18:58:07
Zitat von: Damian am 02 März 2015, 18:20:33
ja, denn in der Commandref steht:

Es können beim Attribut state ebenfalls Berechnungen in geschweiften Klammern durchgeführt werden. Aus Kompatibilitätsgründen, muss die Berechnung mit einer runden Klammer beginnen.

und da ist Leerzeichen nicht erlaubt um möglichst kompatibel zum restlichen FHEM zu sein.

Gruß

Damian

OK, es ist ja so definiert und man kann immer Commandref konsultieren  :)

Wünschenswert wäre es jedoch, wenn FHEM ein wenig toleranter wäre.

Mit der Erweiterung der Funktionalität und der Anwendung von Definitionen wie ([[...]-[...]]) und ({(... )}) aber bitte ohne Sahne (Leerzeichen) , bin ich auf die Fragen hier im Forum gespannt.  :)

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 02 März 2015, 19:16:36
Zitat von: flurin am 02 März 2015, 18:58:07
OK, es ist ja so definiert und man kann immer Commandref konsultieren  :)

Wünschenswert wäre es jedoch, wenn FHEM ein wenig toleranter wäre.

Mit der Erweiterung der Funktionalität und der Anwendung von Definitionen wie ([[...]-[...]]) und ({(... )}) aber bitte ohne Sahne (Leerzeichen) , bin ich auf die Fragen hier im Forum gespannt.  :)

Gruss
flurin

Die Toleranz ist da eingebaut, wo sie unkritisch ist. Du musst bedenken, dass die Sache an Perl übergeben wird und das kennt auch Klammern (z. B. [] bei arrays, die darf man nicht ersetzen). Im Ausführungsteil dagegen können insb. FHEM-Befehle stehen, welche auch mit eigenen Klammern arbeiten, z. B. {} bei at und da darf man auch nichts ersetzen.

Daher: Tolerant wie nötig, intolerant wie möglich, um jegliche Kompatibilität zu Perl bzw. zu FHEM zu gewährleisten ;)

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 02 März 2015, 19:36:50
Zitat von: flurin am 02 März 2015, 18:58:07
Mit der Erweiterung der Funktionalität und der Anwendung von Definitionen wie ([[...]-[...]]) und ({(... )}) aber bitte ohne Sahne (Leerzeichen) , bin ich auf die Fragen hier im Forum gespannt.  :)

Wem das nicht reicht, der kann auch solche "Schweinereien" machen:

define begin_time dummy
set begin_time 10:00

define end_time dummy
set end_time 20:00


([[begin_time]-[end_time]]) (set flex_lamp on, set end_time {(OffTime("[begin_time]"))} ) DOELSE (set flex_lamp off)


Die OffTime-Funktion bekommt die Beginnzeit übergeben, die sie auswerten kann um daraus die Endzeit zu berechnet.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 02 März 2015, 19:52:39
Zitat von: Damian am 02 März 2015, 19:36:50
Wem das nicht reicht, der kann auch solche "Schweinereien" machen:

define begin_time dummy
set begin_time 10:00

define end_time dummy
set end_time 20:00


([[begin_time]-[end_time]]) (set flex_lamp on, set end_time {(OffTime("[begin_time]"))} ) DOELSE (set flex_lamp off)


Die OffTime-Funktion bekommt die Beginnzeit übergeben, die sie auswerten kann um daraus die Endzeit zu berechnet.

Gruß

Damian

Da musst Du Dich noch ein wenig anstrengen, das schockiert mich noch nicht  8)

Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 02 März 2015, 20:00:24
Zitat von: flurin am 02 März 2015, 19:52:39
Da musst Du Dich noch ein wenig anstrengen, das schockiert mich noch nicht  8)

Gruss
flurin

OK. Man kann es auch mit notifys und ats programmieren, abgesehen von den Dummys, wird man nicht mit einer Zeile auskommen ;)

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 03 März 2015, 16:29:43
Sowas habe ich noch getestet:


define begin_time dummy
set begin_time 16:00

define end_time dummy
set end_time 18:00

define di_time_ind DOIF ([[begin_time]-[end_time]|7]) (set flex_lamp on) DOELSE (set flex_lamp off)


das geht

wünschenswert:


define begin_time dummy
set begin_time 16:00

define end_time dummy
set end_time 18:00|7

define di_time_ind DOIF ([[begin_time]-[end_time]]) (set flex_lamp on) DOELSE (set flex_lamp off)


geht aber nicht

Edit: oder noch besser:


define begin_time dummy
set begin_time 16:00

define end_time dummy
set end_time 18:00

define wday dummy
set wday 7

define di_time_ind DOIF ([[begin_time]-[end_time]|[wday]]) (set flex_lamp on) DOELSE (set flex_lamp off)


Gruss
flurin
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: maxritti am 06 März 2015, 14:10:08
Hallo,

jetzt wollte ich auch mal anfangen, die indirekten Zeitangaben zu nutzen.
Anfangen wollte ich mit diesem DOIF:

((([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")}]))
  ({if (ReadingsVal("EG_wz_RO_TerrasseRechts", "state", "---") ne "off") {fhem("set EG_wz_RO_TerrasseRechts off")}})
DOELSEIF (([{ReadingsVal("du_Rollo_Zeit_ho", "state", "10:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "10:00:00")}|7]))
  ({if (ReadingsVal("EG_wz_RO_TerrasseRechts", "state", "---") ne "on") {fhem("set EG_wz_RO_TerrasseRechts on")}})
DOELSEIF ([du_Rollo_PV] eq "an" and [mySL:Pac_avg] >= 2100)
  (set EG_wz_RO_TerrasseRechts 0)
DOELSEIF ([du_Rollo_PV] eq "an" and [EG_wz_TK_Terrasse] eq "closed" and [mySL:Pac_avg] >= 1501)
  (set EG_wz_RO_TerrasseRechts 30)
DOELSEIF ([du_Rollo_PV] eq "aus")
  (set EG_wz_RO_TerrasseRechts on)


Da habe ich mal die ReadingsVal(..) ersetzt durch [dummy_name]:

  ((([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([[du_Rollo_Zeit_ru_start]-[du_Rollo_Zeit_ru_ende]])) or [[du_Rollo_Zeit_ru_ende]]))
    ({if (ReadingsVal("EG_wz_RO_TerrasseRechts", "state", "---") ne "off") {fhem("set EG_wz_RO_TerrasseRechts off")}})
  DOELSEIF (([[du_Rollo_Zeit_ho|8]] or [[du_Rollo_Zeit_ho_WE|7]]))
    ({if (ReadingsVal("EG_wz_RO_TerrasseRechts", "state", "---") ne "on") {fhem("set EG_wz_RO_TerrasseRechts on")}})
  DOELSEIF ([du_Rollo_PV] eq "an" and [mySL:Pac_avg] >= 2100)
    (set EG_wz_RO_TerrasseRechts 0)
  DOELSEIF ([du_Rollo_PV] eq "an" and [EG_wz_TK_Terrasse] eq "closed" and [mySL:Pac_avg] >= 1501)
    (set EG_wz_RO_TerrasseRechts 30)
  DOELSEIF ([du_Rollo_PV] eq "aus")
    (set EG_wz_RO_TerrasseRechts on)


Allerdings wird mir dies beim speichern so quitiert:

di_EG_wz_RO_TerrasseRechts DOIF: no trigger in condition: ([[du_Rollo_Zeit_ho|8]] or [[du_Rollo_Zeit_ho_WE|7]])

Ist das ggf noch nicht implementiert und könnte dies als Feature aufnehmen?
Oder habe ich da irgendwas falsche geschrieben bzw falsch verstanden?

Die Zeile

([[du_Rollo_Zeit_ho|8]] or [[du_Rollo_Zeit_ho_WE|7]])

hatte ich auch schon mal so versucht (also die |8 bzw |7 hinter die ])

([[du_Rollo_Zeit_ho]|8] or [[du_Rollo_Zeit_ho_WE]|7])

das wird aber mit der gleichlautenden Meldung beendet.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 06 März 2015, 14:33:11
Zitat von: maxritti am 06 März 2015, 14:10:08
([[du_Rollo_Zeit_ho]|8] or [[du_Rollo_Zeit_ho_WE]|7])

das wird aber mit der gleichlautenden Meldung beendet.

Dann hast du wohl nicht die richtige Version aktiv (download erster Post hier). Bei mir funktioniert alles, wie erwartet.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: maxritti am 06 März 2015, 15:56:40
Okay, recht hast Du.
Im Test hatte ich es aktualisiert, im produktiven System wohl noch nicht.

Schönes WE
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 07 März 2015, 12:08:25
Diese Version scheint stabil zu laufen. Dann werde ich sie mal langsam einchecken. Ich habe noch eingebaut, dass Zeit auf 00:00:00 belegt wird, falls ein Timer-Reading keine Zeit definiert hat, sonst gibt es Perl-Warnings im Log, wenn ein Event zuschlägt. Eine Fehlermeldung beim falschen Zeitformat ist bereits  jetzt schon im entsprechenden Timer-Reading im DOIF-Modul zu sehen.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: hatamoto am 08 März 2015, 21:03:57
Tolle neue Funktion "daumenhoch"

Ist es auch möglich eine Schaltung mit Zeitangabe in der Form "später als/nicht vor" zu realisieren?
Anwendungsbeispiel ist eine Rollladensteuerung: Rollladen auf, wenn Helligkeit > x, jedoch nicht vor hh:mm.
Es wird ja jetzt wieder früher hell, ich möchte aber erst zur definierten Zeit geweckt werden.

Gruß Chris 
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 08 März 2015, 21:16:55
Zitat von: hatamoto am 08 März 2015, 21:03:57
Tolle neue Funktion "daumenhoch"

Ist es auch möglich eine Schaltung mit Zeitangabe in der Form "später als/nicht vor" zu realisieren?
Anwendungsbeispiel ist eine Rollladensteuerung: Rollladen auf, wenn Helligkeit > x, jedoch nicht vor hh:mm.
Es wird ja jetzt wieder früher hell, ich möchte aber erst zur definierten Zeit geweckt werden.

Gruß Chris

Commandref zu DOIF schon studiert?

http://fhem.de/commandref_DE.html#DOIF

Dort findest du Beispiele zu deiner Anforderung der Art:

DOIF ([Helligkeit]>50 and [[beginn_zeit]-[end_zeit]]) (set rollo hoch)

beginn_zeit und end_zeit können z. b. Dummys sein, die die Zeit beinhalten. Du kannst natürlich auch feste Zeiten vergeben.

Gruß

Damian


Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: hatamoto am 08 März 2015, 23:12:04
Ja, hatte ich natürlich gelesen.
Dachte nur, es gibt eine Variante ohne Ende-Zeit.
Werde es dann wie von Dir beschrieben einbauen.

Gruß Chris
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 09 März 2015, 09:34:38
Zitat von: hatamoto am 08 März 2015, 23:12:04
Ja, hatte ich natürlich gelesen.
Dachte nur, es gibt eine Variante ohne Ende-Zeit.
Werde es dann wie von Dir beschrieben einbauen.

Gruß Chris

Du kannst auch:

DOIF ([Helligkeit]>50 and $HMS>[beginn_zeit]) (set rollo hoch)

angeben.

Allerdings wird hier nicht um beginn_zeit getriggert und es ist eigentlich auch ein Intervall, welches um Mitternacht endet. Ich würde die erste Alternative wählen.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: flurin am 09 März 2015, 11:23:24
Hier noch ein Beispiel:

define interval dummy
set interval 00:02

define di_time_var DOIF ([+[interval]]) ({myLog("Interval expired: do what you like")})
attr di_time_var do always
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: automatisierer am 09 März 2015, 17:15:56
Ist es eigentlich möglich, doif mit einer Unix-Zeit-Angabe zu steuern? Dann hätte man eine absolute Zeit, die auch mal ein paar Tage in der Zukunft liegen kann. Ich benutze so etwas um meinen Sat-Reciever per Schaltsteckdose für Aufnahmen einzuschalten. Dabei wird über das ENIGMA2 Modul die Unix-Zeit der nächsten Aufnahme ausgelesen und der Reciever dann 10 Minuten vor der Aufnahme eingeschaltet.

Gruß
Ingo
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 09 März 2015, 19:59:33
Zitat von: automatisierer am 09 März 2015, 17:15:56
Ist es eigentlich möglich, doif mit einer Unix-Zeit-Angabe zu steuern? Dann hätte man eine absolute Zeit, die auch mal ein paar Tage in der Zukunft liegen kann. Ich benutze so etwas um meinen Sat-Reciever per Schaltsteckdose für Aufnahmen einzuschalten. Dabei wird über das ENIGMA2 Modul die Unix-Zeit der nächsten Aufnahme ausgelesen und der Reciever dann 10 Minuten vor der Aufnahme eingeschaltet.

Gruß
Ingo

Die Zeitangaben sind auf HH:MM beschränkt, weil es ja für den User nachvollziehbar ist. Unix-Time wird natürlich intern benutzt.

was geht ist z. B:

define u_time dummy
set u_time {mytime()}

DOIF ([[u_time]])(set receiver on)


mytime ist dann eine Perl-Funktion, die aus der Unix-Zeit HH:MM berechnet, allerdings nur 24 Stunden im voraus. Na ja nicht ganz, denn man kann (inoffiziell) 99:59 angeben, also vier Tage im voraus.

Daher nur bedingt sinnvoll.

Gruß

Damian
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: automatisierer am 09 März 2015, 20:32:29
schade... jetzt prüfe ich per at befehl alle x minuten ob die programmierte unix-time minus fünf minuten kleiner ist als die aktuelle unix-time und schalte dann halt entsprechend... funktioniert zuverlässig, benötigt aber diverse dummy's, at's und notify's...

Ich glaube auch schon mal irgendwo gelesen zu haben, dass eine absolute Zeitangabe in FHEM nicht vorgesehen, bzw nicht FHEM konform ist. Ich hatte halt so nen bissl gehofft, dass DOIF, die Eier legende Wollmilchsau unter den FHEM Modulen das auch noch kann...

Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: msdv am 13 Mai 2021, 12:04:03
Hallo,

ich versuche ein Velux-Rollo mit einem RadioWecker zeitgleich aufgehen zu lassen.
Der Radiowecker wird über das squeezboxModul bereitgestellt.
Dort sehe ich in den Readings:
alarm1_time 09:40:00
alarmsEnabled on


Die Readings werden auch geändert, wenn ich den Alarm auf dem Radio ändere. Soweit zu gut.

Dann habe ich folgendes DOIF geschrieben:
([[Radio:alarm1_time]] and ([Radio:alarmsEnabled] eq "on")) (set Velux pct 100)

Nun zum Problem:
wenn ich das DOIF ändere und speichere, wird auch die alarm1_time im DOIF korrekt ausgelesen und dann geht auch das Velux hoch.
Aber wenn ich nur am Radio die Zeit ändere, bekommt das DOIF das nicht mit. Ich habe keine Attribute gesetzt... sollte ich irgendwelche setzen?

Danke für Eure Hilfe,
Markus.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: Damian am 13 Mai 2021, 12:15:36
Zitat von: msdv am 13 Mai 2021, 12:04:03
Hallo,

ich versuche ein Velux-Rollo mit einem RadioWecker zeitgleich aufgehen zu lassen.
Der Radiowecker wird über das squeezboxModul bereitgestellt.
Dort sehe ich in den Readings:
alarm1_time 09:40:00
alarmsEnabled on


Die Readings werden auch geändert, wenn ich den Alarm auf dem Radio ändere. Soweit zu gut.

Dann habe ich folgendes DOIF geschrieben:
([[Radio:alarm1_time]] and ([Radio:alarmsEnabled] eq "on")) (set Velux pct 100)

Nun zum Problem:
wenn ich das DOIF ändere und speichere, wird auch die alarm1_time im DOIF korrekt ausgelesen und dann geht auch das Velux hoch.
Aber wenn ich nur am Radio die Zeit ändere, bekommt das DOIF das nicht mit. Ich habe keine Attribute gesetzt... sollte ich irgendwelche setzen?

Danke für Eure Hilfe,
Markus.

Die Änderung der Uhrzeit muss ein Event auslösen, sonst bekommt DOIF es nicht mit.
Titel: Antw:DOIF mit indirekten Zeitangaben
Beitrag von: msdv am 13 Mai 2021, 12:33:53
Zitat von: Damian am 13 Mai 2021, 12:15:36
Die Änderung der Uhrzeit muss ein Event auslösen, sonst bekommt DOIF es nicht mit.

Ich habe das Problem gefunden - im Radio war das Attribute "donotnotify" gesetzt.
Nachdem ich das auf "false" gesetzt habe, funktioniert es nun wie es aussieht.