Register Variable Timing

Hallo, ich habe folgendes Problem:
ich lese die Daten der Solaranlage über eine USB Schnittstelle über eine Register Variable in IPS ein. Das funktioniert auch soweit gut.
Allerdings ist ein kompletter Satz ca. alle 4 Sekunden vorhanden und wird in die Datenbank geschrieben - ein bisschen zu genau. Die Datenbank wird recht schnell recht groß und wenn man sich Diagramme ansehen will, dauerts aufgrund der Atom CPU doch lange oder bricht ab.
Wie kann ich die RegisterVariable Ausführung z.B. nur alle 120 Sekunden ausführen, bzw. Daten empfangen.Das Skript solange zu pausieren blockiert irgendwie die anderen Skripte, bzw. 120s sind nicht vorgesehen.
Danke, Axel

Schreib doch den Wert in eine Variable die nicht geloggt wird. Und dann führst du alle 120 Sekunden ein Script aus welches die Daten dann in deine Loggingvariable übernimmt.

Danke für den Tip - war eigentlich gar nicht so schwer!
Gruß, Axel

Die Resol Anlage und das Logging funktionieren problemlos.
Jetzt mein neues Problem:
Habe endlich den Fröling S4 Turbo mit Lambdatronic S3200 an den Rechner angeschlossen.
Es kommen auch die Daten an - nahezu in Klartext.
Nur leider ca. 40 mal pro ! Sekunde! ein kompletter Parametersatz (geschätzt 700 Zeichen).
Das sprengt, glaube ich, die Auswertung in IPS. Ich habe einen Atom 330 (2x1,6 + 2GB Ram) - die CPU Auslastung geht auf permant 60-70% nach oben. Ein Homematic Befehlt braucht >1min bis die Aktion erfolgt. Wenn ich den Seriellen Port schliesse, ist wieder alles normal schnell.
Hat jemand eine Idee wie ich die Flut der ankommenden Daten drosseln kann?

Hi,

ich habe ein ähnliches Problem mit meinem eHZ. Habe es gelöst, in dem ich den Zähler nur minütlich mit folgendem Skript kurz auf Empfang stelle:

<?
COMPort_SetDTR(34485 /*[eHZ Serial Port]*/, true);
IPS_Sleep(2100);
COMPort_SetDTR(34485 /*[eHZ Serial Port]*/ , false);
?>

Sollte das nicht gehen, dann schau mal, wie man den Comport aktiv/inaktiv setzt.

CPU-Last ist nur ein Problem, wenn man zu oft ausliest, dann wird die Logging-DB aufgebläht…

Grüsse,
Axel

Hallo,
die Schnittstelle kannst Du mit folgenden Befehl öffnen / schliessen

<?
$COM_PORT_ID = 33848 /*[Serial_Port_COM3]*/ ;

COMPort_SetOpen($COM_PORT_ID,true);
IPS_ApplyChanges($COM_PORT_ID);
?>

… würde über ein Script die RegVariable leeren und die Schnittstelle öffnen
Muster:

<?
$COM_PORT_ID = 33848 /*[Serial_Port_COM3]*/ ;
$RegVar_COM3_READ  = 35886 /*[TEST\RegisterVariable_COM3_READ]*/ ;

//LeseBuffer leeren bevor neuen Request
RegVar_SetBuffer($RegVar_COM3_READ,"");
IPS_Sleep(500);

//ComPort oeffnen
COMPort_SetOpen($COM_PORT_ID,true);
IPS_ApplyChanges($COM_PORT_ID);
?>

… und im RegVarScript eben die Daten empfangen, dabei musst Du eine Möglichkeit finden wie Du die Datensatzlänge (Header, Datensatzende) erkennen kannst den ich gehe mal davon aus das die Steuerung alle X ms einen Datensatz schickt und Du den ersten Datensatz defragmentiert (abgeschnitten) bekommst ==> nach erfolgreichen Empfang kannst Du die Schnittstelle wieder schliessen

Muster:

<?
$COM_PORT_ID = 33848 /*[Serial_Port_COM3]*/ ;
$RegVar_COM3_READ  = 35886 /*[TEST\RegisterVariable_COM3_READ]*/ ;

//BUFFER FUELLEN --> Daten lesen von COM-Port
$buf = RegVar_GetBuffer($RegVar_COM3_READ);
$buf .= $IPS_VALUE;
RegVar_SetBuffer($RegVar_COM3_READ,$buf);
//*******************************************

if (strlen($buf)>= 2000)
  {
   //wenn minestens 2 vollständige Datensätze in der RegVar empfangen

   //Schnittstelle schliessen ...
   COMPort_SetOpen($COM_PORT_ID,false);
   IPS_ApplyChanges($COM_PORT_ID);
  
  //Auswertung der Daten ...
 
  }
?>

tgusi74