Dauerhaft 100% CPU-Auslastung

Hi,

um meinem Problem mit der 100%igen CPU-Auslastung auf den Grund zu gehen, habe ich hier mal meine selbstgebastelten Scripte nebst Triggern und Intervallen zusammengestellt. Vielleicht kann mir jemand sagen, was ich falsch gemacht habe.

Status des Fensters in einen String umwandeln (je 1x pro Raum, insgesamt fünf Scripte):

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : AZ_Fenster.Status.ips.php
Trigger  : AZ_Fenster.Status
Interval : 60
*/
//Status - Fenster
$loop = GetValueBoolean("AZ_FHT_Fenster");
switch ($loop){
case True :
     $AZ_Fenster ="offen";
     break;
case false:
     $AZ_Fenster ="geschlossen";
     break;
}
SetValueString("AZ_FHT_Fenster.Status", $AZ_Fenster);
?>

Den Modus vom FHT als String darstellen (je 1x pro Raum, insgesamt fünf Scripte):

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : AZ_Ist_Mode.ips.php
Trigger  : AZ_FHT_IstMode
Interval : 60
*/
//Display the Operating Mode
$loop = GetValueInteger("AZ_FHT_SollMode"); // ist die Mode-Target vom FHT
switch ($loop){
case 0 :
     $AZ_Ist_Mode ="Auto";
     break;
case 1:
     $AZ_Ist_Mode ="Manu";
     break;
case 2:
     $AZ_Ist_Mode ="Party";
     break;
case 3:
     $AZ_Ist_Mode ="Party";
}
SetValueString("AZ_FHT_IstMode", $AZ_Ist_Mode);
?>

Über die Position des FHT´s 4 BMP´s darstellen (je 1x pro Raum, insgesamt fünf Scripte):


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : AZ_Pos.ips.php
Trigger  : AZ_FHT_Pos
Interval : 60
*/
$procwert=GetValueFloat("AZ_FHT_Pos");
if ($procwert<1){
    $anzeigewert=0;
} elseif ($procwert >1 && $procwert <25){
    $anzeigewert=1;
} elseif ($procwert >25 && $procwert <50){
    $anzeigewert=2;
} elseif ($procwert >50 && $procwert <75){
    $anzeigewert=3;
} else {
    $anzeigewert=4;
}
SetValueInteger("AZ_Pos",$anzeigewert);
?>

Den Status einer Steckdose als String darstellen (Insgesamt 10 Scripte):


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : AZ_Ambiente.Stat.ips.php
Trigger  : AZ_Ambiente.Stat
Interval : 60
*/
$loop = GetValueBoolean("AZ_FS_Ambiente.Status");
switch ($loop){
case True :
     $AZ_Ambiente ="an";
     break;
case false:
     $AZ_Ambiente ="aus";
     break;
}
SetValueString("AZ_FS_Ambiente.Stat", $AZ_Ambiente);
?>

Meine Variablem lasse ich im Designer im Minutenrhythmus auslesen.

Das Webinterface loggt 10 Graphen und 5 M-Graphen.

Weiss jemand, wie die dauernde Systemauslastung 100% zustande kommt?

Ich bin am Verzweifeln.

Greetz Jimmy

also wenn Dein PC das alles JEDE Minute machen muss(25Scripte + 15Graphen), ist da schon ganz schön viel Holz zu sägen.

Versuche doch mal, das Ausleseintervall zumindest auf >=5min hochzusetzen, schneller ändert sich die Temperatur sowieso nicht.

Tommi

Sind die Scripte denn so in Ordnung? Kann man die optimieren. Ich habe eins als Basis genommen und alle anderen angepasst.

Auch weiss ich net so richtig, ob ich das mit dem Variable triggern richtig verstanden und auch umgesetzt habe.

Kann es sein, dass ich da auch Mist gemacht habe?

Werde dann mal die Werte auf 5 Minuten hochsetzen.

Wie ist das im Designer. Da stehen die Intervalle auf „1 Minute“, aber das ist ja auch das Höchste der Gefühle, was ich da einstellen kann.

Danke aber schonmal für den Denkanstoß.

Greetz Jimmy

… schießt man sich hiermit nicht ins Knie :confused:

Trigger: AZ_FHT_IstMode

SetValueString(„AZ_FHT_IstMode“, $AZ_Ist_Mode);

> Endlostrigger

MST

Hi Steiner,

in der Wiki habe ich zu den Event Scripts nicht gefunden. Deshalb habe ich lustig selber probiert. Und da ich mein erwartetes Ergebnis bekommen habe, habe ich mir nichts weiter dabei gedacht.

Kannst Du mir mal kurz die Bedeutung vom Triggern einer Varibalen ind Bezug auf das Script erklären?

Greetz Jimmy

Hallo Jimmy,

wenn die Variabel „ge-updated“ wird, startet der Trigger das Skript.
Wird in dem Skript selber diese Variable geändert, wird wieder ein Trigger ausgelöst.
Also eine Endlosschleife. Kannst Du nicht auf „soll“ Triggern?

MST

[update]
habe alles so gelassen, wie oben beschrieben, System neu gestartet und nur IPS offen (ohne Designer wie sonst), dann ist die CPU-Last bei 5%.

Designer zusätzlich öffnen, dann schaukelt sich die CPU-Last auf 100% hoch und bleibt dort (innerhalb von zwei Minuten).

Vielleicht hilft das bei der Fehleranalyse.

Greetz Jimmy

… klar, der Designer stößt Deine programmierte Kettenreaktion an …

Es mag zwar jetzt für Dich ne dumme Frage sein, aber verstehe ich das richtig. Der Intervall gibt vor, wie oft nachgeschaut wird, ob die Variable geupdatet wurde und wenn ja, soll das Script loslaufen?

Wenn dem so ist, dann hab ich ne ganze Menge Murx gebaut.

Greetz Jimmy.

… das „Interval“ bestimmt wie oft ein Skript ausgeführt wird.
ZUSÄTZLICH kann es durch eine Variable getriggert werden. Du änderst in Deinem
Skript eine Variable – die selbe Triggert das Skript. Dadurch kommt es zu einer
Kettenreaktion und die CPU schießt auf 100%.

MST

Dann brauche ich bei mir folglicherweise keinen Intervall, wenn ich über eine Variable trigger, oder?

Dann ist das bei mir alles doppelt? Verstehe ich das richtig?

Ich denke, das muss man trennen. Der Timer-trigger startet das Script, wenn die Zeit abgelaufen ist, also hier aller 60s.

Dann gibt es noch den Variablen-Trigger, der wird immer gestartet, wenn die Variable gespeichert wird. Das ist das, was MST mit der Endlosschleife meinte. Wenn Du eine Variable hast, auf der Du einen Update-trigger setzt, darfst Du diese Variable nicht mit Setxxxx ändern, weil sich das Script dann immer wieder selbst aufruft. Dabei ist unerheblich, ob sich der Wert ändert, nur der Timestamp der Änderung entscheidet.

Ich denke auch, wenn Du SetValueString(„AZ_FHT_IstMode“, $AZ_Ist_Mode);
auskommentierts oder das Script nur noch durch den Timer triggern lässt, sollte es besser werden.

Aber trotzdem, 25Scripte in einer minute sind schon was. Die Scripte selbst kann man wohl nicht viel verbessern, was ich so gesehen habe.

Tommi

Also Intervall raus und nur über die Variable das Script starten lassen. So würde ich jetzt für mich das beste Ergebnis sehen.

Liege ich da richtig?

Mal nebenbei, die Community hier finde ich richtig klasse. Das musste ich mal loswerden. Danke an Euch.

Greetz Jimmy

Hallo Jimmy,

ich gebe auf :mad:
Ich weiß nicht, wie Dich es Dir erklären soll – dass mit der „Kettenreaktion“ :confused:
Intervall rein – Trigger raus!

MST

Hi Jimmy,

hast’ trutzdem noch ein Problem:

Wenn du über die Variable triggerst (also das Skript ausführst, wenn sich die Variable ändert) und du im Skript die Variable änderst, ist das auch = Endlosschleife. Schließlich wird durch das Ändern der Variablen auch das Skript wieder getriggert und dort wieder Variable geändert und dann wieder getriggert…ans so on -> 100%CPU

Vielleicht weißt du es ja noch nicht: Die 1 Minute im Designer hat überhaupt nichts mit dem triggern von Variablen zu tun !!!

Die 1 Minute im Designer heißt lediglich, dass der Designer ede Minute nachguckt, wie der Status der Variablen ist und diesen dann sichtbar anzeigt.

Gruß

cAtMaX

Um das Ganze jetzt mal zum Abschluss zu bringen…

ich habe Murx gemacht, soviel ist klar.

Meine Erkenntnis. Trigger-Variable bei den Scripten raus und nen vernünftigen Intervall setzen.

Auf was für einen Intervall sollte ich meine Scripte setzen, damit mein Designer ein halbwegs aktuelles Abbild meiner Steruerung zeigt?

Greetz Jimmy

Hi Jimmy,

vielleicht verrätst du uns mal in Worten, was du eigentlich machen willst ?!??!

Zur Visualisierung im Designer brauchst du keine Skripte ! Der „schlubbert“ sich automatisch im eingestellten Intervall den aktuellen Wert.

Beispiel:

Designer zeigt an -> Lampe ist aus
Du schaltest die Lampe ein (Statusvariable ändert sich)
Nach max. 1 Minute bekommt der Designer das auch mit, weil er im IPS nachguckt, welchen Status die Lampe hat -> also auch TRUE bzw. entsprechendes Bils etc.

Gruß

cAtMaX