Nächsten timer Schaltzeitpunkt im STATE anzeigen

Begonnen von daniel_k, 14 Juli 2016, 12:00:52

Vorheriges Thema - Nächstes Thema

daniel_k

Hallo,
bin total begeistert vom DOIF und habe jetzt meine Aquarium-Lichtsteuerung von einzelnen AT timer auf DOIF umgestellt.
Nun würde ich gerne den nächsten timer im state angezeigt bekommen und nicht z.B. cmd_2. Wie kann ich das lösen?

Habe mir folgendes überlegt, aber ich denke das geht bestimmt eleganter und sauberer:
{my $ti =  ReadingsVal("di_AquaLamp","cmd",0)+1;
if ($ti >9) {$ti = 0}
my $tim = ("timer_".$ti."_c".$ti);
sprintf("NEXT: "."%s", ReadingsVal("di_AquaLamp","$tim",0))}


so bekomme ich dies angezeigt: NEXT: 14.07.2016 12:00:00

Ich würde das ganze lieber anhand der Schaltzeit auslesen, da ich ja bei meiner Lösung fest an die timer reinfolge gebunden bin.
So sind natürlich Fehler vorprogrammiert und ich muss jeden Schaltvorgang einzeln ausführen und kann nichts mit AND verbinden.
Ich denke das ich bestimmt einfach nur zu doof denke und es eine ganz einfache Lösung gibt! Nur wie????
Wie löst ihr so was?
Für eure Hilfe wäre ich sehr dankbar
Grüße
Daniel

Ellert

Ohne Berücksichtigung der Wochentagsteuerung könntest Du es mit der Funktion min und dem Attribut stateFormat versuchen:

stateFormat <DOIFNAME>  {min(ReadingsVal(<DOIFNAME>","timer_<1>","none"), ReadingsVal("<DOIFNAME>","timer_<2>","none"), ReadingsVal("<DOIFNAME>","timer_<3>","none"), ...)}

Der niedrigste Timerwert ist der nächste Zeitpunkt, unabhängig, ob die Gesamtbedingung zutrifft.