Hallo,
kann mir wer sagen wie ich den Jahreswert in time_str2num in das aktuelle Jahr ($year) ändere ?
Lilly {(int((time_str2num("2018-04-06")-time())/86400))}
so einfach
Lilly {(int((time_str2num("$year-04-06")-time())/86400))}
oder so gehts nämlich nicht
Lilly {(int((time_str2num("{$year}-04-06")-time())/86400))}
Gruß
Thomas
Hi,
also beide Ausdrücke
{(int((time_str2num("2018-04-06")-time())/86400))}
{(int((time_str2num("$year-04-06")-time())/86400))}
liefern mir in der Kommandozeile 3 zurück.
Wie ich aber gestern gelernt habe (https://forum.fhem.de/index.php/topic,86493.msg789207.html#msg789207) sind die FHEM Variablen wie $year nicht überall verfügbar. Du musst sie selbst erzeugen.
Probier mal nur zum Test das prinzipiell die Schreibweise stimmt Lilly {my $year=2018 ;;(int((time_str2num("$year-04-06")-time())/86400))}
Gruß Otto
Zitat von: TomLee am 02 April 2018, 18:02:47
Hallo,
kann mir wer sagen wie ich den Jahreswert in time_str2num in das aktuelle Jahr ($year) ändere ?
Lilly {(int((time_str2num("2018-04-06")-time())/86400))}
so einfach
Lilly {(int((time_str2num("$year-04-06")-time())/86400))}
oder so gehts nämlich nicht
Lilly {(int((time_str2num("{$year}-04-06")-time())/86400))}
Gruß
Thomas
Wo brauchst Du das $year denn. Wie Otto schon sagt gibt es die globale Variable nicht überall. So zum Beispiel in myUtils Funktionen nicht.
Lily {my $year=2018 ;;(int((time_str2num("$year-04-06")-time())/86400))}
Das klappt in einem userreading. So ist's aber ja nicht immer das aktuelle Jahr.
denke du hast mich schon verstanden das ich das so in der Art gemeint habe:
Mia {my @jahr = $year;(int((time_str2num("$jahr-11-09")-time())/86400))}
gehg aber auch nicht.
Ich habe dich verstanden, aber Du mich nicht. Hast Du meinen Link gelesen?
Jetzt schon und gestern abend auch schon ; ;D. Aber nicht kombiniert (nachgedacht).
Unklar ist doch aber jetzt immer noch wie es in einem userreading geht, wenn's nur aus der Kommandozeile, at und notify funktioniert. Oder steh ich immer noch auf dem Schlauch ?
Ebene Perl
- es gibt localtime aber kein $year
+Ebene FHEM
-- es gibt immer noch localtime aber kein $year
++Ebene userreadings
-- es gibt immer noch localtime aber kein $year
++Modul notify
---hier ist $year definiert und zwar in etwa so
---{my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;; $year=$year+1900}
++FHEMWEB
---hier ist $year definiert und zwar aus ....
Alles klar? ;D
Ob es eleganter geht als es in jedes Userreadings zu schreiben muss Dir Cooltux sagen ;)
Lilly { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); $year+=1900; int((time_str2num("$year-04-06")-time())/86400) }
Schau mal bitte ob das so stimmen kann. Ist für ein userReadings gedacht.
Quelle:
http://perldoc.perl.org/functions/localtime.html
Funktioniert. Danke Otto für die Hilfe/Infos und ein Danke an Leon mal wieder für die Lösung und Info.
So nutz ich das jetzt:
Internals:
CFGFN
DEF ([00:00])
NAME doif_Feierlichkeiten
NR 5595
NTFY_ORDER 50-doif_Geburtstag_Mia
STATE cmd_1
TYPE DOIF
READINGS:
2018-04-02 22:40:23 Lilly 460
2018-04-02 22:40:23 Mama 347
2018-04-02 22:40:23 Mia 526
2018-04-02 22:40:23 Papa 290
2018-04-02 22:40:23 cmd 1
2018-04-02 22:40:23 cmd_event set_cmd_1
2018-04-02 22:40:23 cmd_nr 1
2018-04-01 13:50:05 mode enabled
2018-04-02 22:40:23 next_date 290
2018-04-02 22:40:23 state cmd_1
2018-04-02 00:00:00 timer_01_c01 03.04.2018 00:00:00
Regex:
condition:
0 DOIF_time_once($hash,0,$wday)
days:
devices:
do:
0:
0
1:
helper:
DOIF_Readings_events
DOIF_eventas
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
internals:
interval:
itimer:
localtime:
0 1522706400
readings:
realtime:
0 00:00:00
time:
0 00:00:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1522706400:
localtime 1522706400
hash:
uiState:
uiTable:
Attributes:
do always
userReadings Mama { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-03-16")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-03-16")-time())/86400) },
Papa { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-01-18")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-01-18")-time())/86400) },
Lilly { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-07-07")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-07-07")-time())/86400) },
Mia { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-11-09")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-09-11")-time())/86400) },
next_date {minNum( ReadingsNum("$name","Mia",""), ReadingsNum("$name","Lilly",""), ReadingsNum("$name","Mama",""), ReadingsNum("$name","Papa","")) }
Mama { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-03-16")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-03-16")-time())/86400) }
Zitat von: TomLee am 02 April 2018, 19:29:17
Funktioniert. Danke Otto für die Hilfe/Infos und ein Danke an Leon mal wieder für die Lösung und Info.
So nutz ich das jetzt:
Internals:
CFGFN
DEF ([00:00])
NAME doif_Feierlichkeiten
NR 5595
NTFY_ORDER 50-doif_Geburtstag_Mia
STATE cmd_1
TYPE DOIF
READINGS:
2018-04-02 22:40:23 Lilly 460
2018-04-02 22:40:23 Mama 347
2018-04-02 22:40:23 Mia 526
2018-04-02 22:40:23 Papa 290
2018-04-02 22:40:23 cmd 1
2018-04-02 22:40:23 cmd_event set_cmd_1
2018-04-02 22:40:23 cmd_nr 1
2018-04-01 13:50:05 mode enabled
2018-04-02 22:40:23 next_date 290
2018-04-02 22:40:23 state cmd_1
2018-04-02 00:00:00 timer_01_c01 03.04.2018 00:00:00
Regex:
condition:
0 DOIF_time_once($hash,0,$wday)
days:
devices:
do:
0:
0
1:
helper:
DOIF_Readings_events
DOIF_eventas
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
internals:
interval:
itimer:
localtime:
0 1522706400
readings:
realtime:
0 00:00:00
time:
0 00:00:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1522706400:
localtime 1522706400
hash:
uiState:
uiTable:
Attributes:
do always
userReadings Mama { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-03-16")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-03-16")-time())/86400) },
Papa { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-01-18")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-01-18")-time())/86400) },
Lilly { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-07-07")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-07-07")-time())/86400) },
Mia { my (undef,undef,undef,undef,undef,$year,undef,undef,undef) = localtime(gettimeofday()); (int((time_str2num("$year-11-09")-time())/86400) >= 0 ? $year+=1900 : $year+=1901); int((time_str2num("$year-09-11")-time())/86400) },
next_date {minNum( ReadingsNum("$name","Mia",""), ReadingsNum("$name","Lilly",""), ReadingsNum("$name","Mama",""), ReadingsNum("$name","Papa","")) }
Wenn du schon ein DOIF nutzt, dann wäre diese Definition etwas kürzer:
DOIF {if ([00:00]) {
set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400),1);
set_Reading("Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1);
set_Reading("Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400),1);
set_Reading("Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400),1);
set_Reading ("next_date",min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]),1);
}
DOIF im Perlmodus ohne weitere Attribute ;)
Sieht doch gut aus :D
Danke.
Jetzt komm ich ja um ein update nicht mehr rum. DOIF-PERL und die Angst davor das eines meiner bestehenden DOIF'S nicht mehr danach geht, ist eigentlich der Grund weshalb ich die Tage keines gemacht habe.
Zitat von: TomLee am 03 April 2018, 00:20:23
Danke.
Jetzt komm ich ja um ein update nicht mehr rum. DOIF-PERL und die Angst davor das eines meiner bestehenden DOIF'S nicht mehr danach geht, ist eigentlich der Grund weshalb ich die Tage keines gemacht habe.
Die Angst ist unbegründet, die anfänglichen Erkennungsprobleme wurden behoben, es ist jetzt unerheblich, ob Kommentare, Zeilenumbrüche oder Sonstiges sich in der Definition befindet.
Nach dem Update kannst du mit list MODEL=Perl nachschauen, ob alles gut gegangen ist - es sollte keine Einträge geben.
Danke.
Es gibt jetzt genau ein Ergebnis mit MODEL=Perl. Nämlich das hier (https://forum.fhem.de/index.php/topic,86533.msg789745.html#msg789745). ;D
In dem Beispiel fehlt übrigens die letzte geschweifte Klammer.
Zitat von: TomLee am 03 April 2018, 09:59:29
Danke.
Es gibt jetzt genau ein Ergebnis mit MODEL=Perl. Nämlich das hier (https://forum.fhem.de/index.php/topic,86533.msg789745.html#msg789745). ;D
In dem Beispiel fehlt übrigens die letzte geschweifte Klammer.
na, dann :)
Noch als Tipp, da DOIF-Perl keinen Status setzt, kannst du zwecks Übersicht gleich statt:
set_Reading ("next_date",min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]),1);
set_Reading ("state",min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]),1);
setzen.
Edit: Wenn die Daten stimmen, haben wir bei den Namen drei, beim Datum eine Übereinstimmung ;)
Hallo,
Leon sagte zwar er schaut nochmal, kanns aber auch net lassen selbst Hand anzulegen und es mindestens zu versuchen.
Den vergangenen Terminen würd ich jetzt gerne noch ein Jahr hinzu addieren.
Das es möglich ist in der Anweisung des if nochmals ein if-else auszuführen hab ich gesehen.
Nur die Syntax ist mir unklar. Wenn ich mir im Wiki die if-condition anschaue, steht die Fhem-Anweisung in runden Klammer (fhem()), diese wiederum in geschweiften .
Damians Doif-Perl-Beispiel kommt wiederum ohne Angabe von fhem() bei den setreadings aus.
So in der Art stell ich mir das vor:
{if ([17:46]) {
if (int((time_str2num("$year-03-16 00:00:00")-time())/86400) =< 0) {set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mama",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
}
Das einzige was hier allerdings funktioniert ist das Addieren der 365 Tage.
int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365
Beim Vergleich ob der Wert gleich kleiner 0 ist gibts egal in welcher Variante immer Operatorfehler.
Kann mir wer was zur richtigen Syntax sagen ?
Gruß
Thomas
Zitat von: TomLee am 04 April 2018, 18:54:02
Hallo,
Leon sagte zwar er schaut nochmal, kanns aber auch net lassen selbst Hand anzulegen und es mindestens zu versuchen.
Den vergangenen Terminen würd ich jetzt gerne noch ein Jahr hinzu addieren.
Das es möglich ist in der Anweisung des if nochmals ein if-else auszuführen hab ich gesehen.
Nur die Syntax ist mir unklar. Wenn ich mir im Wiki die if-condition anschaue, steht die Fhem-Anweisung in runden Klammer (fhem()), diese wiederum in geschweiften .
Damians Doif-Perl-Beispiel kommt wiederum ohne Angabe von fhem() bei den setreadings aus.
So in der Art stell ich mir das vor:
{if ([17:46]) {
if (int((time_str2num("$year-03-16 00:00:00")-time())/86400) =< 0) {set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mama",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
}
Das einzige was hier allerdings funktioniert ist das Addieren der 365 Tage.
int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365
Beim Vergleich ob der Wert gleich kleiner 0 ist gibts egal in welcher Variante immer Operatorfehler.
Kann mir wer was zur richtigen Syntax sagen ?
Gruß
Thomas
Ohje, ich dachte Damians Beispiel war für Dich okay. Sorry. Ich schaue heute Abend Mal wegen der Erweiterung. Kann ja nur was kleines sein.
Zitat von: TomLee am 04 April 2018, 18:54:02
Hallo,
Leon sagte zwar er schaut nochmal, kanns aber auch net lassen selbst Hand anzulegen und es mindestens zu versuchen.
Den vergangenen Terminen würd ich jetzt gerne noch ein Jahr hinzu addieren.
Das es möglich ist in der Anweisung des if nochmals ein if-else auszuführen hab ich gesehen.
Nur die Syntax ist mir unklar. Wenn ich mir im Wiki die if-condition anschaue, steht die Fhem-Anweisung in runden Klammer (fhem()), diese wiederum in geschweiften .
Damians Doif-Perl-Beispiel kommt wiederum ohne Angabe von fhem() bei den setreadings aus.
So in der Art stell ich mir das vor:
{if ([17:46]) {
if (int((time_str2num("$year-03-16 00:00:00")-time())/86400) =< 0) {set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mama",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
}
Das einzige was hier allerdings funktioniert ist das Addieren der 365 Tage.
int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365
Beim Vergleich ob der Wert gleich kleiner 0 ist gibts egal in welcher Variante immer Operatorfehler.
Kann mir wer was zur richtigen Syntax sagen ?
Gruß
Thomas
Alles außerhalb der DOIF-Syntax in eckigen Klammern ist reines Perl.
kleiner gleich ist <= und nicht =< , das ist halt Perl.
Ich glaubs net, =< in <= geändert und es geht.
Das hatte ich auch schon probiert, allerdings waren die Anweisungen da nicht in geschweiften Klammern.
Hat jetzt jemand noch ne Lösungsvorschlag für das Schaltjahr ?
muss ich also erstmal nichts weiter machen sagst ;D
Schaltjahr habe ich leider noch keine Lösung
Aktualisiertes funtionierendes DOIF:
Geht aber noch weiter ;D
Internals:
CFGFN
DEF {if ([21:07]) {
if (int((time_str2num("$year-03-16 00:00:00")-time())/86400) <= 0) {set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mama",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-01-18 00:00:00")-time())/86400) <= 0) {set_Reading("Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-07-07 00:00:00")-time())/86400) <= 0) {set_Reading("Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-11-09 00:00:00")-time())/86400) <= 0) {set_Reading("Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400),1)};
set_Reading ("state",min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]),1);}
}
MODEL Perl
NAME doif_Feierlichkeiten
NR 669
NTFY_ORDER 50-doif_Feierlichkeiten
STATE 218
TYPE DOIF
OLDREADINGS:
READINGS:
2018-04-04 21:07:00 Lilly 93
2018-04-04 21:07:00 Mama 346
2018-04-04 21:07:00 Mia 218
2018-04-04 21:07:00 Papa 289
2018-04-04 21:07:00 block_01 executed
2018-04-04 21:06:32 mode enabled
2018-04-04 21:07:00 state 218
2018-04-04 21:07:00 timer_01_c01 05.04.2018 21:07:00
Regex:
condition:
0 if (DOIF_time_once($hash,0,$wday)) {
if (int((time_str2num("$year-03-16 00:00:00")-time())/86400) <= 0) {readingsSingleUpdate($hash,"Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365 ,1)} else {readingsSingleUpdate($hash,"Mama",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-01-18 00:00:00")-time())/86400) <= 0) {readingsSingleUpdate($hash,"Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400) + 365 ,1)} else {readingsSingleUpdate($hash,"Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-07-07 00:00:00")-time())/86400) <= 0) {readingsSingleUpdate($hash,"Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400) + 365 ,1)} else {readingsSingleUpdate($hash,"Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-11-09 00:00:00")-time())/86400) <= 0) {readingsSingleUpdate($hash,"Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400) + 365 ,1)} else {readingsSingleUpdate($hash,"Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400),1)};
readingsSingleUpdate($hash,"state",min(ReadingValDoIf($hash,'doif_Feierlichkeiten','Mama'),ReadingValDoIf($hash,'doif_Feierlichkeiten','Papa'),ReadingValDoIf($hash,'doif_Feierlichkeiten','Lilly'),ReadingValDoIf($hash,'doif_Feierlichkeiten','Mia')),1);}
days:
devices:
0 doif_Feierlichkeiten
all doif_Feierlichkeiten
helper:
DOIF_Readings_events
DOIF_eventas
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
triggerDev
triggerEvents:
timer_1
internals:
interval:
itimer:
localtime:
0 1522955220
perlblock:
0
readings:
0 doif_Feierlichkeiten:Mama doif_Feierlichkeiten:Papa doif_Feierlichkeiten:Lilly doif_Feierlichkeiten:Mia
all doif_Feierlichkeiten:Mama doif_Feierlichkeiten:Papa doif_Feierlichkeiten:Lilly doif_Feierlichkeiten:Mia
realtime:
0 21:07:00
time:
0 21:07:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1522955220:
localtime 1522955220
hash:
uiState:
uiTable:
Attributes:
comment if(int((time_str2num("$year-03-16 00:00:00")-time())/86400) < 0) { fhem("set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400),1)")+ 5 } else { fhem("set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400),1)")};
ohne den Quellcode auf Korrektheit geprüft zu haben, kannst du zumindest durch Nutzung von Variablen, die Programmierung effizienter gestalten:
z. B.
my $mama=int((time_str2num("$year-03-16 00:00:00")-time())/86400;
$mama+=365 if ($mama<=0);
set_Reading("Mama",$mama,1);
Zitatmy $mama=int((time_str2num("$year-03-16 00:00:00")-time())/86400;
$mama+=365 if ($mama<=0);
set_Reading("Mama",$mama,1);
Bin fasziniert.
Hab keine Ahnung von Perl, ist das erste mal das ich mich mit beschäftige, kann auch den effizienteren Vorschlag, mein ich, voll und ganz nachvollziehen.
Trotzdem gibt's bei der Umsetzung im DOIF, bei der ich der Meinung bin keinen Fehler zu machen, Probleme:
( die alten Readings hab ich jetzt nicht entfernt)
Internals:
CFGFN
DEF {if ([00:51]) {
my $mama=int((time_str2num("$year-03-16 00:00:00")-time())/86400;
$mama+=365 if ($mama<=0);
set_Reading("Mama",$mama,1);}}
MODEL Perl
NAME doif_Feierlichkeiten
NR 669
NTFY_ORDER 50-doif_Feierlichkeiten
STATE initialized
TYPE DOIF
OLDREADINGS:
READINGS:
2018-04-04 21:07:00 Lilly 93
2018-04-04 21:07:00 Mama 346
2018-04-04 21:07:00 Mia 218
2018-04-04 21:07:00 Papa 289
2018-04-05 00:51:00 block_01 condition c01: syntax error at (eval 707139) line 2, at EOF
Global symbol "$mama" requires explicit package name at (eval 707139) line 3.
Global symbol "$mama" requires explicit package name at (eval 707139) line 3.
2018-04-05 00:50:47 mode enabled
2018-04-05 00:50:47 state initialized
2018-04-05 00:51:00 timer_01_c01 06.04.2018 00:51:00
Regex:
condition:
0 if (DOIF_time_once($hash,0,$wday)) {
my $mama=int((time_str2num("$year-03-16 00:00:00")-time())/86400;
$mama+=365 if ($mama<=0);
readingsSingleUpdate($hash,"Mama",$mama,1);}
days:
devices:
helper:
DOIF_Readings_events
DOIF_eventas
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
triggerDev
triggerEvents:
timer_1
internals:
interval:
itimer:
localtime:
0 1522968660
perlblock:
0
readings:
realtime:
0 00:51:00
time:
0 00:51:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1522968660:
localtime 1522968660
hash:
uiState:
uiTable:
Attributes:
comment {if ([21:07]) {
if (int((time_str2num("$year-03-16 00:00:00")-time())/86400) <= 0) {set_Reading("Mama",int((time_str2num("$year-03-16 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mama",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-01-18 00:00:00")-time())/86400) <= 0) {set_Reading("Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Papa",int((time_str2num("$year-01-18 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-07-07 00:00:00")-time())/86400) <= 0) {set_Reading("Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Lilly",int((time_str2num("$year-07-07 00:00:00")-time())/86400),1)};
if (int((time_str2num("$year-11-09 00:00:00")-time())/86400) <= 0) {set_Reading("Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400) + 365 ,1)} else {set_Reading("Mia",int((time_str2num("$year-11-09 00:00:00")-time())/86400),1)};
set_Reading ("state",min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]),1);}
}
Da fehlt noch eine Klammer zu :
my $mama=int((time_str2num("$year-03-16 00:00:00")-time())/86400);
Danke.
Geht weiter ...
hier
set_Reading("Mama",$mama,1);
kann ich so
set_Reading("Mama"," Mama: $mama",1);
noch einen Text davor setzen.
Ist ja aber Quatsch das in jedem Reading zu haben, im state ist das ja völlig ausreichend.
Im state ist mir aber die Syntax wieder nicht klar, denke es geht in die Richtung:
set_Reading ("state","Mama min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]",1);
aber egal ob in eckigen, runden und gar keinen Klammern oder auch mit Punkt (Mama . min([$SELF:Mama]) es kommt zum Fehler.
Die Syntax wäre
set_Reading ("state","Mama: ".min([$SELF:Mama],[$SELF:Papa],[$SELF:Lilly],[$SELF:Mia]),1);
ist aber nicht sinnvoll, denn es ist ja nicht immer Mama ;)
Danke
Hab auch eher an sowas gedacht, sollte doch gehen.
set_Reading ("state","Mama: ".min([$SELF:Mama],"Papa: ".[$SELF:Papa],"Lilly: ".[$SELF:Lilly],"Mia: ".[$SELF:Mia]),1);
Zitat von: TomLee am 05 April 2018, 12:56:04
Hab auch eher an sowas gedacht, sollte doch gehen.
set_Reading ("state","Mama: ".min([$SELF:Mama],"Papa: ".[$SELF:Papa],"Lilly: ".[$SELF:Lilly],"Mia: ".[$SELF:Mia]),1);
eher nicht, was ist denn Minimum von "Papa...", "Mama...", usw.?
Upps Kopierfehler
So meinte ich das
set_Reading ("state","Mama: ".min([$SELF:Mama],"Papa: ".min[$SELF:Papa],"Lilly: ".min[$SELF:Lilly],"Mia: ".min[$SELF:Mia]),1);
geht ja aber wie du erwähnt (und ich gerade festgestellt habe) hast nicht.