Hauptmenü

Einfaches Rechnen mit Zeiten?

Begonnen von FSausF, 23 Mai 2019, 21:57:19

Vorheriges Thema - Nächstes Thema

FSausF

Hallo FHEM-Forum,
ich hab' da eine grundsätzliche Frage, bei der ich einen Hänger habe...
FHEM steuert aktuell einen Medienplayer als Radiowecker.
Das geht mit einem DOIF in der Form:
DOIF (([06:30-08:00|Mo Di Mi Do Fr]) or ([08:30-10:00|Sa So]))
(set Media on)
DOELSE (set Media off)

Das läuft so problemlos.
Jetzt soll das Ding luxuriöser werden, indem man die Weckzeit in einem Dummy eingeben kann.
Es gibt also ein Dummy mit drei Readings (dahinter die Werte in Klammern):
Wecker:Weckzeit_Wochentags (6:30)
Wecker:Weckzeit_Wochenende (8:30)
Wecker:Dauer (1:30).

Im DOIF soll nun mit den Zeiten gerechnet werden (Weckzeit / Weckzeit+Dauer), und das kriege ich nicht hin.
Wenn ich es richtig interpretiere, kommen nicht mal die Wert im DOIF an. Also DOIF ([Wecker:Weckzeit-12:00]) ... ist schon syntaktische Fehlanzeige.

Jetzt die Fragen:
Wie kriege ich aus meinen Dummy-Readings eine gültige Uhrzeit zurechtgebaut? Und damit einfach addiert oder subtrahiert?
Wie muß ich diese Ausdrücke Klammern (geschweift, eckig, rund?), damit das DOIF etwas damit anfangen kann?
Geht das überhaupt ohne großes Perl-Gefummel?

Ich würde mich über einen leichten Schlag auf den Hinterkopf oder eine gute Idee freuen!

Frank

CoolTux

Hallo Frank. Diese Frage ist doch sehr DOIF lastig, daher denke ich das sie besser im DOIF Forum aufgehoben wäre.
Magst Du Deinen Threead einmal dahin verschieben?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

FSausF

Zitat von: rabehd am 23 Mai 2019, 22:10:16
https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitberechnung

;)Wichtig ist die richtige Menge und Position der []
Super, Danke für die schnelle Antwort!
So etwas in der Richtung hatte ich vermutet!
Ich werd's morgen Abend testen!
Morgen früh muß die Mimik nochmal wie gewohnt tun; werktags früh liegen die Nerven da etwas blank...

FSausF

So, ich konnte die Finger doch nicht davon lassen und habe das DOIF zusammengebaut.
Bin gespannt, ob es mich morgen früh aus den Federn kitzeln wird.

Weil es aber schon eines von den syntaktisch trickreicheren geworden ist, teile ich es hier mal:
   
DOIF
(([Wecker:aktiv] eq "Ja") and
(([([Wecker:Weckzeit_Wochentag]-[00:06]) - ([Wecker:Weckzeit_Wochentag]+[Wecker:Dauer])|Mo Di Mi Do Fr]) or
  ([([Wecker:Weckzeit_Wochenende]-[00:06]) - ([Wecker:Weckzeit_Wochenende]+[Wecker:Dauer])|Sa So])
)
)

{fhem("set FritzBox wlan on;
set Media_Schlafzimmer on;
sleep 360;
set Rapsody open http://dg-swr-http-fra-dtag-cdn.cast.addradio.de/swr/swr3/live/mp3/128/stream.mp3")}
DOELSE
{fhem("set Rapsody off;
  sleep 60;
  set Media_Schlafzimmer off")}

Zur Erklärung:
Der Wecker hat mehrere Attribute, die über das Web-Frontend gesetzt werden können:
Aktiv (Ja / Nein)
Weckzeit_Wochentags (Uhrzeit)
Weckzeit_Wochenende (Uhrzeit)
Dauer (HH:MM)
Media_Schlafzimmer ist ein Schalter. Wenn der Saft gibt, startet der Raspberry mit KODI.
Der braucht - wenn die NAS mit der Bibliothek nicht erreichbar ist - eine halbe Ewigkeit zum Starten. Daher die Zeitberechnung mit den 6 Minuten.
Rapsody ist das KODI.

So, und jetzt Rock and Roll!

Per

Zitat von: FSausF am 23 Mai 2019, 23:27:38Weil es aber schon eines von den syntaktisch trickreicheren geworden ist
Naja, du bist noch neu hier ;)

Zur besseren Übersicht ist es hier üblich, Code in Code-Tags (->
  • -Taste) zu packen, außerdem kann DOIF direkt FHEM Befehle ausführen oder terminieren:
    DOIF
    (([Wecker:aktiv] eq "Ja") and
    (([([Wecker:Weckzeit_Wochentag]-[00:06]) - ([Wecker:Weckzeit_Wochentag]+[Wecker:Dauer])|8]) or
      ([([Wecker:Weckzeit_Wochenende]-[00:06]) - ([Wecker:Weckzeit_Wochenende]+[Wecker:Dauer])|7])
    )
    )
    (set FritzBox wlan on, set Media_Schlafzimmer on)
    (set Rapsody open http://dg-swr-http-fra-dtag-cdn.cast.addradio.de/swr/swr3/live/mp3/128/stream.mp3)
    DOELSE
    (set Rapsody off)
    (set Media_Schlafzimmer off)
    attr xxx wait 0,360:0,60

    Die Änderungen lasse ich mal unkommentiert, ich denke aber, du wirst schnell dahintersteigen. Auch hinter den Unterschied, welcher spürbare Auswirkungen in der Praxis hat.

    Wenn du die Weckzeiten an keiner anderen Stelle verwendest, kannst du sie auch im DOIF ablegen.

    Zitat von: FSausF am 23 Mai 2019, 23:27:38So, und jetzt Rock and Roll!
    Around the clock!