Instanz neu starten

Ich nutze das OpenWeatherMap Modul v.a. um die Vorhersage von Windböen zu bekommen und darüber den Windalarm zu setzen (parallel zur Windgeschwindigkeit von der Wetterstation).
Leider ist alle paar Wochen die OpenWeatherMap Instanz inaktiv und liefert damit keine aktuellen Daten mehr.
Dann muss ich einmal die Instanz deaktivieren und wieder neu aktivieren und schon läuft wieder alles.
Kann ich das automatisieren? Also zB jede Stunde ein Skript starten, das abfragt, ob die Instanz noch aktiv ist. Und bei Bedarf dann die Instand deaktivieren / aktivieren.

Ich habe schon im Forum gefunden, dass deaktivieren/aktivieren mit:

IPS_SetProperty($instanceID, ‚Active‘, false);
IPS_ApplyChanges($instanceID);
IPS_SetProperty($instanceID, ‚Active‘, true);
IPS_ApplyChanges($instanceID);

funktionieren sollte. Ich hoffe, das funktioniert auch mit der OpenWeatherMap Instanz.

Aber wie kann ich abfragen, ob die Instanz noch aktiv ist?

moin @IPS-Anfaenger

Du müsstest schon mitteilen, wo Du die Abfrage starten willst.

in einem PHP-Script mit einer Abfrage des Propeerty, findest Du hier:

Beispiel:

$status = IPS_GetProperty (int $InstanzID, string $Eigenschaft);
if ($status === false) {
    IPS_SetProperty($instanceID, ‚Active‘, true);
}

In Symcon direkt mit einem ausgelösten Ereignis, zu finden hier.

Gruß
Burkhard

Am besten gar nicht selber zyklische anfragen, sondern mit dem Event Control überwachen.

Dort die Instanz und dein Skript eintragen.
Der Status der Instanz ist in den Systemvariablen enthalten, somit musst du gar nicht den Status der Instanz selber noch einmal abfragen.
Michael

1 „Gefällt mir“

Vielen Dank. Leider stehe ich auf dem Schlauch.

Habe zuerst versucht, meinem Script (im Moment noch ein Testscript, da ich noch nicht die richtige Eigenschaft gefunden habe) ein Ereignis (ausgelöst) hinzuzufügen. Und dort dann als auslösende Variable die Instanz meines OpenWeathermap Moduls anzugeben. Aber diese kann ich nicht auswählen bzw bekomme ich den Fehler „Ungültiges Objekt ausgewählt“:

IPS1

Dann habe ich es über das Event-Control versucht. Und dort ganz unten in der Tabelle „Status-Ereignis“ eine Zeile hinzugefügt und dort die Instanz von OpenWeathermap sowie mein Script eingetragen. Aber wo kann ich denn dort auswählen, bei welchem Ereignis (also z.B. „geändert“) des Events denn das Script ausgeführt werden soll?
In der Doku steht „Folgende Ereignisse stehen zur Verfügung:“ - aber wo wird das eingetragen / wo finde ich die Auswahl der möglichen Ereignisse?

Jede Änderung der Instanz startet das Script.
Im Script musst du die Systemvariablen auswerten um zu entscheiden was du machen willst.

If ($_IPS['STATUS'] != 102){
//Instanz nicht aktiv
}

Systemvariablen:

Michael

Hat funktioniert - vielen Dank.

Falls noch jemand - wie ich - nicht ganz so firm mit IPS ist: ich musste erst mal mit IPS_GetConfiguration rausfinden, wie die Eigenschaft heißt, die angibt, ob die Instanz aktiv ist oder nicht. Für das OpenWeathermap Objekt war das „module_disable“.
Danach konnte ich per IPS_SetProperty und anschliessendem IPS_ApplyChanges die Instanz wieder starten.

Wenn ich jetzt auf Instanzkonfiguration gehe und dort die Instanz per Schiebeschalter deaktiviere (was ja dem bisherigen unregelmäßigen Absturz entspricht) und die Änderung speichere, dann ist die Instanz sofort wieder aktiv - also genau so, wie ich das wollte.

Sollte ich diese Instanz aber jemals wieder stoppen wollen, dann muss ich wohl entweder das Skript ändern und die Zeile auskommentieren. Oder im Event Handler die entsprechende Zeile löschen.
Oder ist es best practice, eine Variable z.B: „Autostart OpenWeathermap“ anzulegen und diese in die If-Bedingung für den Restart entsprechend aufzunehmen?