Timerdaten auslesen

Wieder mal sicher was ganz einfaches, aber ich schwöre ich habe die suche bemüht und auch einiges probiert. Leider ohne Erfolg.
Ist es möglich diverse Daten der Timer, nicht der Ereignisse, zu bekommen? Im Speziellen würden mich Letzte Ausführung und Nächste Ausführung interessieren.
Hintergrund ist der, dass es nach einem Neustart vom Service hin und wieder vorkommt, dass speziell zwei Timer (Vitoconnect und Ondilo) Keinen Eintrag bei Nächste Ausführung haben. Erst wenn ich das Updateintervall änder und die Änderung speichere, dann passt das. Und da gleich mein nächstes anliegen. Wenn ich erkenne, dass da kein Wert drinnen ist, könnte man dann diese Updateintervalle in einem Skript ändern, speichern und wäre dann der Timer aktiviert?
Wenn ja, dan würde ich das in meinn „Systemcheck“ Skript einbauen. Hab mir da was gebastelt, dass mir auf die Schnelle die wichtigsten Parameter zeigt. Ist alles grün, passt alles :slight_smile:

Ist undokumentiert, deswegen hast du es wahrscheinlich nicht gefunden. IPS_GetTimerList und IPS_GetTimer sollte dich weiterbringen.

paresy

Cool, das funktioniert schon mal sehr gut. Aber so einen Art „Arschtritt“ kann man ihnen nicht geben, wenn der Wert für „NextRun“ aus welchen Gründen auch immer nicht da ist?

Nein - wir sollte eher die Ursache suchen, warum das scheinbar bei dir so passiert.

paresy

Wenn es wieder passiert, was braucht man dafür, um der Ursache auf den Grund zu gehen?

parsey siehe hier: Updateengine

Ich hätte dazu noch eine Frage. Bei einem Neustart ändert sich die ID des Timers. Mit IPS_GetTimerList() bekomme ich alle TimerID’s, aber wie komme ich von der ID auf die ObjektID. Oder umgekehrt, wie komme ich von der ObjektID auf die TimerID.
Die Funktion IPS_GetTimers() liefert leider einen Fehler. Als Parameter hätte ich die Funktion IPS_GetTimerList() probiert, das ein array zurückliefert. Genau das, was IPS_GetTimers() haben möchte.

IPS_GetTimers kannst du in PHP-Skripten nicht verwenden. IPS_GetTimer funktioniert allerdings sehr wohl. Dort in der Rückgabe hast du dann ein Feld „InstanceID“, welches die Instanz beschreibt, zu der der Timer gehört.

IPS_GetTimer($TimerID) hilft mir nichts, da die TimerID bei jedem Start von IPS neu vergeben wird. Ich bräuchte die umgekehrte Version. Wobei das so und so ein Problem ist.
Ich glaube ich muss das selber machen, weil es zu einem Objekt ja theoretisch mehrere Timer geben kann. Somit müsste ich die komplette Timerliste durchsuchen, die ich mit IPS_TimerList bekomme, mir dann die entsprechende ObjektID heraussuchen und Aufgrund der Beschreibung den richtigen Timer selektieren.

So, mein Teil für das Finden der Timer ID schaut so aus. Vielleicht brauchts jemand

$OndiloObjektID=16166/*ObjektID Ondilo Configurator*/;
$VitodensObjektID=55152/*ObjektID Vitoconnect*/;
$TimerIDPool=0;
$TimerIDVitodens=0;
foreach (IPS_GetTimerList() as $Timer => $ID)
{
    if (ips_gettimer($ID)["InstanceID"] == $OndiloObjektID and ips_gettimer($ID)["Name"] == "Update") $TimerIDPool = $ID;
    if (ips_gettimer($ID)["InstanceID"] == $VitodensObjektID and ips_gettimer($ID)["Name"] == "Update") $TimerIDVitodens = $ID;
}