Ich meine gelesen zu haben dass die Probleme mit den Timer behoben sein sollten.
Ich verwende die 8.1 vom 25.4.25
Ich habe soeben mein Modul aktualisiert und festgestellt, dass der der Timer ‚Timer_WR‘ doppelt angelegt wird. Dann ist die Ausführung für ca 10min blockiert, dann löscht Symcon offenbar den doppelten Timer selbsttätig.
Mit 8.0 auf dem Testsystem stelle ich das Problem nicht fest.

Und die Timer werden einmalig im Create() registiert und in ApplyChanges() gesetzt
<?php
class Goodwe extends IPSModule
{
public function Create()
{
parent::Create();
$this->ConnectParent("{A5F663AB-C400-4FE5-B207-4D67CC030564}");
$this->RegisterPropertyString("SelectedRegisters", "[]");
$this->RegisterPropertyBoolean("Entladen_Max", true);
$this->RegisterPropertyBoolean("Laden_Max", true);
$this->RegisterPropertyString("WallboxUser", "");
$this->RegisterPropertyString("WallboxPassword", "");
$this->RegisterPropertyString("WallboxSerial", "");
$this->RegisterPropertyInteger("PollIntervalWB", 30);
$this->RegisterPropertyInteger("PollIntervalWR", 5);
$this->RegisterAttributeString("WallboxVariableMapping", "[]");
$this->RegisterTimer('Timer_WR', 0, 'Goodwe_FetchInverterData(' . $this->InstanceID . ');');
$this->RegisterTimer('Timer_WB', 0, 'Goodwe_FetchWallboxData(' . $this->InstanceID . ');');
}
public function ApplyChanges()
{
parent::ApplyChanges();
$this->CreateProfile();
$this->SetTimerInterval('Timer_WR', $this->ReadPropertyInteger('PollIntervalWR') * 1000);
$this->SetTimerInterval('Timer_WB', $this->ReadPropertyInteger('PollIntervalWB') * 1000);
Nach wie vor habe ich bei meinem Goodwe Modul ein Problem mit den Timern.
Das Problem scheint aber nicht das Modul selber zu sein, sondern dass irgendwann mal Timer zugeordnet wurden, welche es eigentlich nicht mehr gibt, aber trotzdem noch sporadisch erstellt werden.
Nach einem Neustart von Symcon werden diese Timer erstellt
Von meinem Modul-Code werden aber nur diese Timer erstellt
$this->RegisterTimer('TimerWR', 0, 'Goodwe_FetchInverterData($_IPS[\'TARGET\']);');
$this->RegisterTimer('TimerWB', 0, 'Goodwe_FetchWallboxData($_IPS[\'TARGET\']);');
Nach einem Update des Moduls wird es noch schlimmer, dann sind folgende Timer registriert.
Jetzt kommt zusätzlich ein zweiter Timer mit demselben Namen (TimerWR)
Dieser wurde wahrscheinlich wie vorher der WallboxApplyTimer auch mal angelegt und nicht entfernt.
Nun blockiert der TimerWR die Ausführung, weil er doppelt läuft.
Auch wenn ich die Timer umbenenne, wird der eine nach einem Update immer noch doppelt erstellt…
Gibt es eine Möglichkeit, diese Timer neu zu initialisieren, ohne dass die Instanz gelöscht werden muss?
Das Problem ist, dass ich so viele Referenzen auf die Variablen habe, dass ich das ungern tun würde.
Selbst auf die Gefahr hin, dass dies hier ein Monolog wird, möchte ich doch mal @paresy fragen, ob dir das ganze etwas sagt.
Feststellung wie oben erwähnt ist folgende:
Meist bei einem Modulupdate (nur bei meinem Goodwe Modul mb-stern/Goodwe at development) wird der eine der zwei Timer (immer derselbe) doppelt angelegt. Meist, aber nicht immer. Wenn er dann doppelt angelegt ist wird die Aktualisierung des Moduls blockiert. Dies ca. 15min lang, dann löscht ich der überflüssige Timer von selber und das Modul aktualisiert wieder gemäss Vorgaben. Siehst du oder jemand anderes die Ursache? Mache ich einen Fehler? Ich bin zwar der Meinung, die Timer bei allen Modulen immer gleich anzulegen
Kann es sein, das eventuell eine CURL Anfrage hängt? Du hast da keinen Timeout definiert.
Michael
Danke für den Tipp, aber so wie es aussieht liegt es nicht daran.
An allen vier curl-Stellen
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
hinzugefügt, aber trotzdem wird der eine Timer wieder doppelt angelegt

Wie lange läuft so eine Funktion welche die Timer ausführen?
Michael
TimerWR habe ich aktuell auf 5s, TimerWB auf 15sec. Wie lange dann die Funktionen laufen kann ich nicht genau sagen aber ich würde schätzen ca 2-3sec. Aber jetzt wo du so fragst und ich dem Zyklus ein wenig zusehe stelle ich fest, dass trotz der 5sec Intervall die Variablen ca alle 8sec aktualisiert werden. Könnte hier das Problem liegen? Einfach zu kurzer Intervall und beim Update passiert es dann? Weil im normalen Betrieb habe ich nie irgendwelche TimeOut Fehler oder so was,
Mess doch einfach die Zeit.
Das kann die Konsole für dich erledigen, indem du die Public Funktion in einem Skript ausführst und dir die Laufzeit anzeigen lässt.
Wenn die Ausführung länger dauert als der Intervall, dann ist der Intervall auf jeden Fall zu klein.
Michael
Sollte zwar reichen mit den 5sec
Goodwe_FetchInverterData Dauer: 3389 ms (Instanz 47278)
Das ist die Funktion, welche der jeweils doppelt angelegte Timer auslöst