igeling
23. Dezember 2009 um 01:19
1
Hallo,
da verliessen sie mich…
Im WIIPS habe ich ein paar Graphen zur (ungefähren) CPU Auslastung gehabt.
Bei meinen Versuchen mit IPS2.2 beta und dem Webfront wollte ich auch so was machen, bin jedoch nicht weitergekommen.
Gefunden habe ich die Befehle zu den Systeminformationen , wie z.B.
Sys_GetHardDiskInfo ( )
Aber wie bekomme ich die in Richtung Webfront? Und wie kann ich die loggen?
Als Ergebniss zu dem Beispiel in der Doku kommt ja nur eine Ausgabe in der IPS Konsole.
(Wie) Mache ich da Variablen drauss? Meine PHP Kenntnisse sind doch arg rudimentär…
Gruß & Danke
Olaf
Horst
23. Dezember 2009 um 04:03
2
Hier mal ein Beispiel für die CPU: Folgendes Skript unterhalb einer Dummy-Instanz erstellen, verstecken und 1x ausführen. Danach befinden sich unterhalb der Dummy-Instanz Variablen für jeden CPU-Kern und die durchschnittliche Last, die alle fünf Minuten neu ausgelesen werden. Das Loggen der Variablen kannst Du dann wie gewohnt bei den Variableneigenschaften aktivieren.
<?php
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$cpuInfo = Sys_GetCPUInfo();
for ($i = 0; $i < count($cpuInfo) - 1; $i++)
{
SetValueInteger(CreateVariableByName($parentID, 'CPU '.$i, 1, '~Valve'), $cpuInfo['CPU_'.$i]);
}
SetValueInteger(CreateVariableByName($parentID, 'durchschnittliche Last', 1, '~Valve'), $cpuInfo['CPU_AVG']);
IPS_SetScriptTimer($IPS_SELF, 5*60);
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>
igeling
23. Dezember 2009 um 10:49
3
Hallo Horst!
Danke, Danke, Danke! Das war genau das was ich wissen wollte.
Gruß
Olaf
P.S.: Mußte gerade Grinsen, als ich sah, das die Variablen mit dem Profil „Ventil“ angelegt wurden. Das beschreibt eine CPU sehr Masch.bauer gerecht;-) Danke auch dafür!
_muckel
25. Dezember 2009 um 15:24
4
das sieht bei nem i7 übrigends sehr geil aus
wgreipl
25. Dezember 2009 um 16:46
5
Mußt Du erst mal auf einem i9 sehen. Da wird der Platz im Webfront knapp
JPaeper
25. Dezember 2009 um 19:23
6
Hallo Leute,
das ist ein sehr interessanter Code, und ich habe ihn auch gleich bei mir eingebaut und nun versucht das ganze auch auf die HDD-Infos zu übertragen…
Leider bisher ohne Erfolg (dazu sind meine IPS und PHP Kenntnisse wohl noch zu bescheiden;))
<?php
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$HDDInfo = Sys_GetHardDiskInfo ();
for ($i = 0; $i < count($HDDInfo) - 1; $i++)
{
for ($j = 0; $j < count('HDD'.$i) - 1; $i++)
{
SetValueString(CreateVariableByName($parentID, 'HDD_Letter'.$i, 3), $HDDInfo['HDD'.$j]);
SetValueString(CreateVariableByName($parentID, 'HDD_Label'.$i, 3), $HDDInfo['HDD'.$j]);
SetValueInteger(CreateVariableByName($parentID, 'HDD_Total'.$i, 1), $HDDInfo['HDD'.$j]);
SetValueInteger(CreateVariableByName($parentID, 'HDD_Free'.$i, 1), $HDDInfo['HDD'.$j]);
}
}
IPS_SetScriptTimer($IPS_SELF, 5*60);
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>
Vielleicht (so meine Hoffnung) ist das ja mit wenigen „Handgriffen“ der Profis heilbar?
Joachim
Horst
25. Dezember 2009 um 21:47
7
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$HDDInfo = Sys_GetHardDiskInfo();
for ($i = 0; $i < count($HDDInfo) - 1; $i++)
{
SetValueString(CreateVariableByName($parentID, 'HDD '.$i.' Letter', 3), $HDDInfo['HDD'.$i]['LETTER']);
SetValueString(CreateVariableByName($parentID, 'HDD '.$i.' Label', 3), $HDDInfo['HDD'.$i]['LABEL']);
SetValueFloat(CreateVariableByName($parentID, 'HDD '.$i.' Total', 2), $HDDInfo['HDD'.$i]['TOTAL'] / pow(1024, 3));
SetValueFloat(CreateVariableByName($parentID, 'HDD '.$i.' Free', 2), $HDDInfo['HDD'.$i]['FREE'] / pow(1024, 3));
}
IPS_SetScriptTimer($IPS_SELF, 5*60);
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
Inklusive Umrechnung in Gibibyte.
JPaeper
25. Dezember 2009 um 23:30
8
Hallo Horst,
vielen Dank!
Ich habe im Rahmen meiner Möglichkeiten noch ein paar kleine Veränderungen gemacht:
<?php
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$HDDInfo = Sys_GetHardDiskInfo();
for ($i = 0; $i < count($HDDInfo) - 1; $i++)
{
SetValueString(CreateVariableByName($parentID, 'HDD '.$i.' Laufwerksbuchstabe', 3, '~String'), $HDDInfo['HDD'.$i]['LETTER']);
SetValueString(CreateVariableByName($parentID, 'HDD '.$i.' Laufwerksbezeichnung', 3, '~String'), $HDDInfo['HDD'.$i]['LABEL']);
SetValueFloat(CreateVariableByName($parentID, 'HDD '.$i.' Gesamter Speicher', 2), ($HDDInfo['HDD'.$i] ['TOTAL'])/1000000000);
SetValueFloat(CreateVariableByName($parentID, 'HDD '.$i.' Freier Speicher', 2), ($HDDInfo['HDD'.$i]['FREE'])/1000000000);
}
IPS_SetScriptTimer($IPS_SELF, 60*60);
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>
So sind die Variablenbezeichnungen jetzt etwas „griffiger“, die Speicherangaben nun in GB…
Joachim
Horst
26. Dezember 2009 um 00:56
9
Betriebssysteme zeigen Speicherplatz in Gibibyte an, da würde ich nicht auf Gigabyte gehen.
Hier mal eine Version mit Variablennamen wie „System (C:)“ und Werten wie „21,08 GiB / 59,53 GiB“:
<?php
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$HDDInfo = Sys_GetHardDiskInfo();
for ($i = 0; $i < count($HDDInfo) - 1; $i++)
{
SetValueString(CreateVariableByName($parentID, $HDDInfo['HDD'.$i]['LABEL'].' ('.strtoupper(substr($HDDInfo['HDD'.$i]['LETTER'], 0, -1)).')', 3, '~String'), number_format($HDDInfo['HDD'.$i]['FREE'] / pow(1024, 3), 2, ',', '.').' GiB / '.number_format($HDDInfo['HDD'.$i]['TOTAL'] / pow(1024, 3), 2, ',', '.').' GiB');
}
IPS_SetScriptTimer($IPS_SELF, 5*60);
function CreateVariableByName ($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if ($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if ($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>
JPaeper
26. Dezember 2009 um 09:16
10
Hallo Horst,
auch nicht schlecht!
Die Krönung wären jetzt doch noch die weitere CPU-Daten wie Prozessortyp, Geschwindigkeit, RAM-Größe, Temperatur, Lüfterspeed ebenso wie bei den Festplatten (Temperatur etc.)…
Joachim
_muckel
26. Dezember 2009 um 10:24
11
@Horst :
Bitte mal deinen kompletten Script Ordner mit Beschreibung was was ist hier Posten
Hallo Horst,
ich habe versucht die Zeile
SetValueString(CreateVariableByName($parentID, $HDDInfo['HDD'.$i]['LABEL'].' ('.strtoupper(substr($HDDInfo['HDD'.$i]['LETTER'], 0, -1)).')', 3, '~String'), number_format($HDDInfo['HDD'.$i]['FREE'] / pow(1024, 3), 2, ',', '.').' GiB / '.number_format($HDDInfo['HDD'.$i]['TOTAL'] / pow(1024, 3), 2, ',', '.').' GiB');
so umzubauen, das ich eine Integervariable und Wert in Prozent des belegten Speichers zu den Laufwerken bekomme, um einen Balken darzustellen.
Irgendwie ist mir die Zeile zu komplex, um da wirklich durchzusteigen.
Könntest du mir behilflich sein, ich steh’ da auf dem Schlauch
Grüße,
Doc
Horst
27. Dezember 2009 um 00:46
13
Sollte so damit klappen:
SetValueInteger(CreateVariableByName($parentID, $HDDInfo['HDD'.$i]['LABEL'].' ('.strtoupper(substr($HDDInfo['HDD'.$i]['LETTER'], 0, -1)).')', 1, '~Valve'), round(100 * $HDDInfo['HDD'.$i]['FREE'] / $HDDInfo['HDD'.$i]['TOTAL']));
@muckel : Der ist relativ langweilig. Habe nur http://www.ip-symcon.de/forum/f53/zvo-gelber-sack-blaue-tonne-auslesen-6468/ und http://www.ip-symcon.de/forum/f23/wetterstation-6271/index7.html#post60190 am laufen. Sonst nur einfache Ereignisse an Instanzen, wie setze Temperatur um X Uhr auf Y °C.
Hallo Horst,
danke für die Hilfe.
Ich habe das nochmal ein wenig angeändert, damit das als Integer und belegter Platz angezeigt wird, ohne deine anderen Variablen zu überschreiben.
SetValueInteger(CreateVariableByName($parentID, $HDDInfo['HDD'.$i]['LABEL'].' ('.strtoupper(substr($HDDInfo['HDD'.$i]['LETTER'], 0, -1)).') in % belegt', 1, '~Valve'), round(100 -(100 * $HDDInfo['HDD'.$i]['FREE'] / $HDDInfo['HDD'.$i]['TOTAL'])));
Ich glaube so langsam verstehe ich auch die Funktion, obwohl ich noch nicht ganz weiss wie du die Anzeige in % bekommst.
Liegt das an „~Valve“?
Viele Grüße,
Doc
Horst
27. Dezember 2009 um 16:01
15
Genau, ~Valve ist ein Standardvariablenprofil für die Prozentanzeige. Habe vorne in der Tat vergessen, das String in Integer zu ändern. Hatte weiter hinten nur umgestellt, dass eine Integer-Variable erstellt wird.
Hallo zusammen,
hat zufällig jemand ein Memory-Script dafür geschrieben? Wäre klasse, denn ich tu mir noch sehr schwer mit PHP.
Vielen Dank und viele Grüße
Robert
was genau ist ein „Memory-Script“?
Moin,
ich hab mir die ganzen Daten direkt in Highchart-Graphen gebastelt, macht die Sachen übersichtlicher:
CPU pro Core und Durchschnitt
Memory ( Arbeitsspeicher, SWAP und virtueller, jeweils frei, belegt, Gesamt )
Festplatten ( pro Partition jeweiles frei, belegt, gesamt )
Belegte IPS-Variablen, Anzahl Scripte und Kategorien
Grösser der IPS-Datenbank
Hi TuxTom77,
kannst Du beschreiben wie du das gemacht hast bzw scripte/screenshots posten?
Wäre super nett von dir!
danke
Robert
Hallo,
„ist alles nur geklaut…“ ( hier aus dem Forum ) und etwas rumgebastelt mit null-PHP Knowhow
Wenn ich heute noch Zugriff auf meinen Server bekommen, packe ich das hier rein.
Schau dir schon mal den Thread über Highchart an, dann hast du schon mal die graphische Darstellung.
EDIT: hier schon mal Screenshots:
Grösse der Datenbank
CPU pro Core und Mittelwert über alle
Festplattenbelegung, 3 Partition auf 2 phys. Platten
4 Memory, SWAP und virtueller Speicher
Anzahl belegter Variablen der IPS-License, Anzahl Kategrien und Scripte