InternalTimer mit at-Funktionalität?

Begonnen von Tobias, 04 April 2014, 19:18:48

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
in meinem Modul möchte ich im Define einen Timer mitgeben, exakt analog dem at-command.
zb: 
+*00:30 #alle 30sek
*05:00:00 #jeden Morgen 5Uhr

Ich möchte gerne den Trigger mit InternalTimer setzen und nicht innerhalb des Moduls ein fhem "Define myAT at +*...." machen. Allerdings den halben Code aus at.pm möchte ich auch nicht kopieren.
Was ist hier der Königsweg?? hehe, was für ein Wortspiel ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

betateilchen

das ist doch relativ einfach:

im ersten Fall ist das einfach gettimeofday+30 - das funktioniert out-of-the-box

im zweiten Fall ist das Intervall 86400 ausgehend von der ersten Ausführung um 05:00 Uhr. Du musst also das erste Intervall berechnen bis das erste Mal 05:00 Uhr ist, und dann das Interval auf 86400 setzen.

Dazu muss man nun wirklich nicht "das halbe at-Modul" nachprogrammieren.

Wenn die aktuelle Uhrzeit kleiner als die erste Ausführung ist : erstesIntervall = sollZeit - time
Wenn die aktuelle Uhrzeit größer als die erste Ausführung ist: erstesIntervall = Sekunden bis Mitternacht + Sekunden bis zur sollZeit.

Die Sekunden bis Mitternacht lassen sich einfach ermitteln: 86400 - (Stunden*3600) - (Minuten*60) - Sekunden (von der aktuellen Uhrzeit)

Nur das Parsing des Parameterstrings musst Du selbst machen - aber auch das ist ja nicht weiter kompliziert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

ich such die ganze Zeit noch nach dem Wortspiel  ;D
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Tobias

#3
Zitat von: Loredo am 04 April 2014, 19:30:57
ich such die ganze Zeit noch nach dem Wortspiel  ;D

Rudolf König -> Königsweg...

@Udo: dachte es geht noch einfacher... irgendeine interne Funktion der man den String übergeben könnte und die Sekunden für InternalTimer gibts zurück... Ok, dann muss ich wohl ran...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

betateilchen

Warum baust Du in deinem Modul nicht einfach ein "require 90_at" ein, dann kannst Du die at-eigenen Funktionen verwenden?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig


Tobias

danke, habe ein paar zeilen aus at.pm kopiert..... jetzt läuft es
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter