Wie kann ich in einem Modul ein zyklisches Event auf eine bestimmte Uhrzeit setzen?
IPS_SetEventCyclicTimeBounds gibt es nicht :eek:.
Ich benötige mehrere Events für stündlich bzw. täglich, die zu festen Zeiten ausgeführt werden.
Wie kann ich in einem Modul ein zyklisches Event auf eine bestimmte Uhrzeit setzen?
IPS_SetEventCyclicTimeBounds gibt es nicht :eek:.
Ich benötige mehrere Events für stündlich bzw. täglich, die zu festen Zeiten ausgeführt werden.
Guckst du im HostMonitor Da stehts
BY_HostMonitor/module.php at master · BayaroX/BY_HostMonitor · GitHub
> Die letzte Funktion ganz unten > SetTimerByIdent_InSekunden
…kannst du dir beliebig anpassen
IPS_SetEventCyclicTimeFrom($eid, intval(date("H", time() + $Sekunden)), intval(date("i", time() + $Sekunden)), intval(date("s", time() + $Sekunden)));
Grüße,
Chris
$Name ist der Ident des ‚Timers‘
$TargetTime ist UnixTimestamp
protected function SetTimer($Name, $TargetTime)
{
$id = @IPS_GetObjectIDByIdent($Name, $this->InstanceID);
if ($id === false)
throw new Exception('Timer not present');
if (!IPS_EventExists($id))
throw new Exception('Timer not present');
$Event = IPS_GetEvent($id);
if ($TargetTime < time())
{
if ($Event['EventActive'])
IPS_SetEventActive($id, false);
}
else
{
IPS_SetEventCyclic($id, 1, 0, 0, 0, 0, 0);
IPS_SetEventCyclicDateFrom($id,(int)date("j",$TargetTime),(int)date("n",$TargetTime),(int)date("o",$TargetTime));
IPS_SetEventCyclicDateTo($id,(int)date("j",$TargetTime),(int)date("n",$TargetTime),(int)date("o",$TargetTime));
IPS_SetEventCyclicTimeFrom($id,(int)date("H",$TargetTime),(int)date("i",$TargetTime),(int)date("s",$TargetTime));
IPS_SetEventCyclicTimeTo($id,(int)date("H",$TargetTime),(int)date("i",$TargetTime),(int)date("s",$TargetTime));
if (!$Event['EventActive'])
IPS_SetEventActive($id, true);
}
}
Anstatt meherer Events, einfach das ‚kleinste‘ nehmen und jedesmal das nächste Berechnen
Michael
Danke, da habe ich natürlich schon abgeguckt, allerdings war meine lokale Kopie etwas älter und den Teil gab es noch nicht.
Welche Funktionen es gibt findet man nur durch probieren raus, oder?
Update:
Michael, dir auch danke.
Da der DWD die Dateien üblicherweise um „xx:14“ bzw. die Tagesdaten um „0645 UTC“ bereitstellt, wollte ich nicht alle paar Minuten pollen. In meinen Scripten läuft das stabil, aber im Modul kämpfe ich noch.
Berechnen ist da auch doof.
Die ist nicht in der __ipsmodule, sondern musst du selbst in deine Klasse kopiern.
Ansonsten stehen hier die Funktionen der ipsmodule Klasse:
Module IP-Symcon :: Automatisierungssoftware
Michael
Modul-Funktionen gibt es hier:
Module IP-Symcon :: Automatisierungssoftware
Und irgendwo im IPS-Dateisystem gibt es eine „__ipsmodule.inc.php“ Datei…da sieht man dann alle die nicht dokumentiert sind.
Aber die Funktion von mir ist eine eigene, die steht bei IPS nirgends. Die Befehle sind ja normale IPS Befehle.
Grüße,
Chris
das funktioniert schon mal, obwohl das Event gerade aktualisiert wurde, meine Werte aber nicht :(.
Und IPS_SetEventCyclicTimeBounds ist ja auch ein normaler Befehl, aber nicht vorhanden.
Der …TimeBounds Befehl ist veraltet und nur noch über die Compatibility vorhanden… Stattdessen solltest du die von Nall chan und mir genannten (IPS_SetEventCyclicDateFrom, IPS_SetEventCyclicDateTo) verwenden. Damit klappt es.
Vielleicht musst du mal ein wenig weiter ausholen und posten was du da so hast an Code (zumindest den Teil der Probleme macht), dann kann man dir leichter helfen
Grüße,
Chris
Danke, das Problem sitzt noch vorm Monitor, aber nach diversen fehlenden Kommas in der forms.json und Beseitigung einiger Kopierfehler, sowie dem Verständnis, wofür der Prefix sein soll „RK_DWD_Update()“ :eek: sieht es jetzt schon ziemlich gut aus.
Wenn die Werte morgen alle korrekt geholt worden sind, dann müsste mal jemand mit DWD FTP Zugangsdaten testen :D.
Update:
Einen hätte ich noch
IPS_GetName($_IPS['SELF'])
liefert „IP-Symcon“, was nicht so schön ist. Ich hätte jetzt er den Namen des Moduls oder der Instanz erwartet.
Unterstriche gehen nicht für ein Modul-Prefix.
Entweder RK oder RKDWD.
Funktionen haben in IPS nie einen Unterstrich.
Michael
Moin!
Und statt $_IPS[„SELF“] wäre an dieser Stelle, je nachdem was du vor hast, eher ein:
IPS_GetName($this->InstanceID);
…zu verwenden
Grüße,
Chris
PS: DWD FTP-Zugangsdaten hab ich
IPS_GetName($this->InstanceID);
Gibt aber den Namen der Instanz, nicht die vom Modul.
Da fehlt meine ich, noch immer die Querverbindung zwischen Library und Modul in IPS.
Welchen Namen suchst du den ?
Allgemein hat $_IPS in 99% nichts in Modulen verloren.
Michael
Ralf…dein Postfach ist voll und man kann dir keine PN mehr schicken
Aber zur Info > die oberen Variablen haben jetzt Werte, aber von „Minimum Lufttemperatur 12h“ bis nach unten ist noch alles leer bzw. 0.
Grüße,
Chris