Register Variable / Script Problem

Hallo zusammen,
habe folgendes Script seit längeren am laufen und seit IPS4.0 klemmt es alle paar Tage und läuft erst wieder, wenn ich IPS neu starte. Die Register Variable bekommt aber fleisig Daten vom Cutter und der vom Client Socket, aber das Skript transferierrt es nach ein paar Tagen nicht mehr n die Variablen.

Hoffe einer kann mir von euch helfen
Grüße
matterazi


IPS_LogMessage("Solaranlage", $IPS_VALUE);


$pn = substr(trim($IPS_VALUE), 55,4); // String ausschneiden
SetValue(27737 /*[Backend\Physische Instanzen\Solar Anlage\Netz Seite\Leistung]*/   ,$pn);

$an = substr(trim($IPS_VALUE), 49,4); // String ausschneiden
SetValue(24242 /*[Backend\Physische Instanzen\Solar Anlage\Netz Seite\Strom]*/      ,$an/1);

$vn = substr(trim($IPS_VALUE), 42,5); // String ausschneiden
SetValue(50671 /*[Backend\Physische Instanzen\Solar Anlage\Netz Seite\Spannung]*/     ,$vn/1);

$temp = substr(trim($IPS_VALUE), 60,3); // String ausschneiden
SetValue(20058 /*[Backend\Physische Instanzen\Solar Anlage\Status Wechselrichter\Temperatur]*/      ,$temp/1);

$btr = substr(trim($IPS_VALUE), 22,1); // String ausschneiden
SetValue(14501 /*[Backend\Physische Instanzen\Solar Anlage\Status Wechselrichter\Betriebsart]*/       ,$btr);

$pg = substr(trim($IPS_VALUE), 37,4); // String ausschneiden
SetValue(21646 /*[Backend\Physische Instanzen\Solar Anlage\Generator\Leistung]*/    ,$pg);

$ag = substr(trim($IPS_VALUE), 31,6); // String ausschneiden
SetValue(36157 /*[Backend\Physische Instanzen\Solar Anlage\Generator\Strom]*/       ,$ag/1);

$vg = substr(trim($IPS_VALUE), 23,6); // String ausschneiden
SetValue(26213 /*[Backend\Physische Instanzen\Solar Anlage\Generator\Spannung]*/      ,$vg/1);


hat keiner nen Tip

Das Script wird so nicht laufen, auch nicht ein paar Tage.

Die Variable $IPS_VALUE und alle $IPS_… sind seit langer Zeit auf $_IPS[‚VALUE‘] umgestellt.

Systemvariablen — IP-Symcon :: Automatisierungssoftware

super
vielen herzlichen Dank
hab das Script geändert und es läuft, aber wie gesagt vorher lief es auch aber nur ein paar Tage
wie auch immer ich beobachte es
Danke
matterazi

Das Problem ist immer noch vorhanden, hat jetzt 2 Tage geklappt, und hat dann wieder die Daten nicht aus der Variable geholt.
Hab jetzt mal die Register Variablen Instanz gelöscht und ne Neue angelegt, dann ging es wieder, auch ohne IPS Neustart. Kann es sein das die Variable überläuft ? Wie gesagt das Problem hab ich erst seit 4.0 davor lief die Variable Monatelang ohne Probleme.


IPS_LogMessage("Solaranlage", $_IPS['VALUE']);


$pn = substr(trim($_IPS['VALUE']), 55,4); // String ausschneiden
SetValue(27737 /*[Backend\Physische Instanzen\Solar Anlage\Netz Seite\Leistung]*/   ,$pn);

$an = substr(trim($_IPS['VALUE']), 49,4); // String ausschneiden
SetValue(24242 /*[Backend\Physische Instanzen\Solar Anlage\Netz Seite\Strom]*/      ,$an);

$vn = substr(trim($_IPS['VALUE']), 42,5); // String ausschneiden
SetValue(50671 /*[Backend\Physische Instanzen\Solar Anlage\Netz Seite\Spannung]*/     ,$vn);

$temp = substr(trim($_IPS['VALUE']), 60,3); // String ausschneiden
SetValue(20058 /*[Backend\Physische Instanzen\Solar Anlage\Status Wechselrichter\Temperatur]*/      ,$temp);

$btr = substr(trim($_IPS['VALUE']), 22,1); // String ausschneiden
SetValue(14501 /*[Backend\Physische Instanzen\Solar Anlage\Status Wechselrichter\Betriebsart]*/       ,$btr);

$pg = substr(trim($_IPS['VALUE']), 37,4); // String ausschneiden
SetValue(21646 /*[Backend\Physische Instanzen\Solar Anlage\Generator\Leistung]*/    ,$pg);

$ag = substr(trim($_IPS['VALUE']), 31,6); // String ausschneiden
SetValue(36157 /*[Backend\Physische Instanzen\Solar Anlage\Generator\Strom]*/       ,$ag);

$vg = substr(trim($_IPS['VALUE']), 23,6); // String ausschneiden
SetValue(26213 /*[Backend\Physische Instanzen\Solar Anlage\Generator\Spannung]*/      ,$vg);

man muss dazu auch noch sagen die Variable bekommt alle 10 Sekunden Daten.

RECEIVED <LF>00.00.0000 03:18:40 4 360.0 0.59 212 231.2 0.83 187 27

Im Fehlerfall fehlt dann diese Zeile nach jeder RECEIVED Zeile

PROCESSED <LF>00.00.0000 03:18:40 4 360.0 0.59 212 231.2 0.83 187 27

wenn ich die Regvar lösche neuanlege und mit dem script und cutter verbinde klappt es wieder für ein paar Stunden, läuft da ein Speicher voll ? oder was kann das sein

Ich habe hier das gleiche Problem seit dem Wechsel von 4.0 auf 4.1. Nach einiger Zeit startet die RegisterVariable das zugeordnete Skript einfach nicht mehr. Nur ein Neustart von IPS behebt das vorübergehend.

Im Debug vom Socket, Cutter und RegVar sieht man die Daten auch fleißig ankommen. Aber das Skript wird halt nicht mehr ausgeführt. Der „Aktualisiert“-Zeitstempel im Objektbaum zeigt für das Skript auch an das es zuletzt um XX Uhr ausgeführt wurde.

@Paresy Kannst Du Dir das bitte mal anschauen? Da muss irgendein Bug sein. Im Log findet sich aber nichts dazu.

@ Paresy
ja wäre wirklich sehr nett wenn das mal jemand an sieht, ich muss immer noch die Regvar löschen und neu mit cutter und script verknüpfen

Könnte ihr mal schauen, ob im Fehlerfall das RegVar Skript feststeckt? Am besten über Expertenansicht hinzufügen -> PHP Informationen

paresy

Ich schau wenn der Fehler wieder auftritt mal in die PHP Information rein und geb bescheid, wie s aussieht

@paresy : es hat sich mal wieder eine Regvar verabschiedet, aber in der PHP Info seh ich kein Problem (Rote Markierung), wie gesagt ich lege eine neue Regvar an und verbinde mit Script und z.B. Cutter dann gehts wieder, muss eigentlich nicht neugestartet werden. Aber das Problem habe ich mit vielen ggf allen Regvars diese haben aber auch unterschiedliche Scripte.

Magst du mal schauen, ob von der Register Variable im Logfile eine Fehlermeldung auftaucht, wenn dieses Problem auftritt? Wenn der Thread nicht klemmt, muss er aus irgendeinem Grund abgestürzt sein. Dies müsste dann korrekt per Fehlermeldung angezeigt werden.

paresy

Hi paresy,
das ist die letzte Meldung im Log, da scheinen viele Skripte davor gleichzeitig zu laufen und dann ist die Funktion der Regvar weg.
Grüße
matterazi

15:25:54 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausf√ºhrung…
15:25:54 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausf√ºhrung…
15:25:54 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausf√ºhrung…
15:25:55 | 44192 | DEBUG | VariableManager | [System Schalter\Status (Büro/ true ) ( Gast/ false)] = false
15:25:55 | 52496 | DEBUG | ScriptEngine | Skript ausgeführt: 52496 ~ Absender: RunScript
15:25:55 | 27749 | DEBUG | ScriptEngine | Skriptausführung: 27749 ~ Absender: RegisterVariable
15:25:55 | 00000 | CUSTOM | Solaranlage |
00.00.0000 07:11:10 6 467.2 0.00 0 233.7 0.00 0 21

15:25:55 | 27737 | DEBUG | VariableManager | [Solar Anlage\Netz Seite\Leistung] = 0
15:25:55 | 24242 | DEBUG | VariableManager | [Solar Anlage\Netz Seite\Strom] = 0
15:25:55 | 50671 | MESSAGE | VariableManager | [Solar Anlage\Netz Seite\Spannung] = 233,7
15:25:55 | 20058 | DEBUG | VariableManager | [Solar Anlage\Status Wechselrichter\Temperatur] = 21
15:25:55 | 14501 | DEBUG | VariableManager | [Solar Anlage\Status Wechselrichter\Betriebsart] = 6
15:25:55 | 21646 | DEBUG | VariableManager | [Solar Anlage\Generator\Leistung] = 0
15:25:55 | 36157 | DEBUG | VariableManager | [Solar Anlage\Generator\Strom] = 0
15:25:55 | 26213 | MESSAGE | VariableManager | [Solar Anlage\Generator\Spannung] = 467,2
15:25:55 | 15631 | DEBUG | VariableManager | [EnOcean Gateway\BaseID] = FFF76200
15:25:55 | 27749 | DEBUG | ScriptEngine | Skript ausgeführt: 27749 ~ Absender: RegisterVariable
15:25:55 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausf√ºhrung…
15:25:55 | 52784 | DEBUG | ScriptEngine | Skriptausführung - Ereignis: 13558 ~ Absender: TimerEvent
15:25:55 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausf√ºhrung…
15:25:55 | 52784 | DEBUG | ScriptEngine | Skript ausgeführt - Ereignis: 13558 ~ Absender: TimerEvent
15:25:55 | 35003 | DEBUG | ScriptEngine | Skriptausführung - Ereignis: 14210 ~ Absender: TimerEvent
15:25:55 | 35003 | DEBUG | ScriptEngine | Skript ausgeführt - Ereignis: 14210 ~ Absender: TimerEvent
15:25:55 | 46631 | DEBUG | ScriptEngine | Skriptausführung - Ereignis: 15870 ~ Absender: TimerEvent
15:25:55 | 00000 | MESSAGE | ScriptEngine | Zu viele gleichzeitige Skripte. Verwerfe Ausf√ºhrung…

Das erklärt einiges. Ein Fix dafür kommt im nächsten Update. Trotzdem ist es wichtig, dass du dich um das eigentlich Problem kümmerst :wink:

paresy

Danke schonmal für den Fix vorab, Ist nur schwer gegen zusteuern mit der Scriptaktivität, es laufen nun mal viele Berechnungen usw. ständig da ists schwer zu drosseln, oder gibts da nen allgemein Tip bei der Vorgehensweise von Scripten. Ich hab schon mehrere Scripte die ähnliche Funktionen nur mit unterschiedlichen Variablen durchführen. Sollte man da besser ein Riesen script draus machen anstelle von mehreren kleinen ?

Hallo alle,
ist dieses Problem im neuesten Update jetzt eigentlich beseitigt ?

matterazi

@paresy : es hat sich mal wieder eine Regvar verabschiedet, aber in der PHP Info seh ich kein Problem (Rote Markierung), wie gesagt ich lege eine neue Regvar an und verbinde mit Script und z.B. Cutter dann gehts wieder, muss eigentlich nicht neugestartet werden. Aber das Problem habe ich mit vielen ggf allen Regvars diese haben aber auch unterschiedliche Scripte. 

Genau das habe ich auch immer wieder… :confused:

Der Fix ist in der Version 4.2 Beta mit dabei. Hast du auch keine roten PHP Threads? Irgendwelche Fehlermeldungen zur RegVar im Log? Hast du ein paar Details wann dies passiert?

paresy

Seit welchem Stand ist der Fix drin ?

Ich habe noch mal nachgesehen und der Fix ist leider erst ab der 4.2 Beta vorhanden. Ich füge dies mal in den Changelog korrekt hinzu.

paresy