Mainboard Monitoring

Hallo.

Ich habe bisher Speedfan genutzt um das Mainboard meines IPS-Servers (Windows) zu überwachen. Leider funktioniert dies nach einem Wechsel des Mainboards nicht mehr so wie es soll (Lüfter und Festplatten werden nicht mehr angezeigt). Hat eventuell jemand hier im Forum auch so ein Monitoring am Start und was wird da für eine Software genutzt? Wäre für Anregungen dankbar

Hi,
seit langem OpenHardwareMonitor und jetzt LibreHardwareMonitor (aktueller Fork). Hat auch einen Web-Server eingebaut so das man die Werte von einem anderen Rechner abfragen kann. Auf dem selben Gerät kann man per WMI auf die Werte zugreifen.

Ralf

Und wie wertest Du das aus? Über WMI oder wertest Du die Webseite aus? Hättest Du eventuell ein Beispiel für mich wie Du die Werte von LibreHardwareMonitor in IPS bekommst?

Hi,
schau dir erstmal an ob bei dir die Lüfter angezeigt werden. Bei mir im Büro mit einem Industrie-PC ist es nicht der Fall. Zu Hause müsste ich nachsehen.

Ich werte es in einem C-Programm per WMI aus also nicht in IPS. Vielleicht würde es ja auch gehen wenn Du SNMP unter Windows aktivierst und dann mit einem IPS-SNMP-Modul einliest.

Ralf

Moin kronos,

ich nutze dafür HWiNFO64 und werte dann die erzeugte csv-Datei aus. Ich hatte auch mal die Erweiterung mittels Remote Sensor CPU Temperatur im WF anzeigen - Seite 13 probiert habe aber festgestellt, dass das für mich keinen Mehrwert bringt :wink: Mit HWiNFO64 kannst du immens viel überwachen.

Gruß
Hans

Hallo kronos,

ich weiß nicht ob du so etwas meinst

auf dem Rechner läuft AIDA64 und zur Auswertung benutze ich die Methode von manni

https://www.symcon.de/forum/threads/15585-CPU-Temperatur-im-WF-anzeigen/page12

Gruß
Thomas

Also erst einmal vielen Dank für die Anregungen - Dank Euer Vorschläge gibt es nun eine Lösung für mein Problem :D.

Der Fork LibreHardwareMonitor beinhaltet die JSON-Funktionalität bereits. Darauf bin ich aber erst durch den Hinweis auf das JSON Addon für den OpenHardwareMonitor gekommen. Nachdem dieses bei mir nicht lief (wäre ja auch zu schön gewesen) habe ich mir mal die Unterschiede zwischen OpenHardwareMonitor und LibreHardwareMonitor genauer angesehen und siehe da - bei letzterem kommt man mit dem Link

http://xxx.xxx.xxx.xxxx: port/data.json

an die gewünschten Daten JSON-codiert ran. Und mit dem simplen Skript von manni

<?

//Daten holen
$content = file_get_contents("http://192.168.22.2:8085/data.json");
$value = json_decode($content);

print_r($value);

?>

kann man sich die Struktur wunderbar ansehen und sich herauspicken was man in IPS haben will. Eine schöne und schlanke Lösung. :loveips:

Moin Kronos,

danke für den Hinweis. Leider funktioniert es nur auf dem Entwicklungssystem während auf dem Produktivsystem mit dem älteren Intel NUC die Fan Infos nicht angezeigt werden. Ich habe mal bei Stefan nachgefragt ob das vielleicht implementiert werden kann.

Ansonsten wäre es in der Tat eine schöne schlanke Lösung im Gegensatz zu meiner Variante mit HWINFO64 :slight_smile:

Nachtrag: Open Hardware Monitor bietet jetzt auch die json Schnittstelle an. Allerdings wird mein älterer NUC dort auch nicht unterstützt.

Gruß
Hans

@PC Oldie

Mein Intel NUC ist von Juni 2015 und da läuft ES - irgendwann stirbt ES allerdings nach etwa 3 Tagen mal :confused:
und ich habe noch keine Idee warum - aber … es läuft soweit erstmal.

LG Tom

Moin Tom,

da ich HWINFO64 einsetze habe ich mit dem NUC keine Probleme. Ich werde mein bisheriges Verfahren - das Auswerten der HWINFO64 Log Datei - nun umstellen auf HWINFO64 in Verbindung mit dem Add-On Remote Sensor Monitor Introducing : Remote Sensor Monitor - A RESTful Web Server | HWiNFO Forum Damit entfällt dann der Umweg mit der Datei.

Gruß
Hans

Hallo,

ich bekomme das mit der Struktur nicht hin. Sie fängt mit [0], [1] etc an ([0] => stdClass Object) was ich nicht selektiert bekomme.

stdClass Object
(
[id] => 0
[Text] => Sensor
[Min] => Min
[Value] => Value
[Max] => Max
[ImageURL] =>
[Children] => Array
(
[0] => stdClass Object
(
[id] => 1
[Text] => BOLT
[Min] =>
[Value] =>
[Max] =>
[ImageURL] => images_icon/computer.png
[Children] => Array
(
[0] => stdClass Object
(
[id] => 2
[Text] => C40
[Min] =>
[Value] =>
[Max] =>
[ImageURL] => images_icon/mainboard.png
[Children] => Array

Wenn ich aber nur SetValue(25787, $value->id[‚2‘]->Text) festlege kommen keine Werte. Bitte Syntax des Aufrufs zur selektierung posten.

Danke

Du kannst beim json_decode den zweiten Parameter auf „true“ setzen. Dann bekommst du ein Array zurück, welches meistens einfacher bei der Auswertung ist als die Objekt-Notation.

paresy

Hallo paresy,

ich bin wohl zu blöd. Das einzige was sich ändert:

Aufruf:

//Daten holen
$content = file_get_contents(„http://“.$IP.":8085/data.json");
$value = json_decode($content, true);

ohne true:
[2] => stdClass Object
(
[id] => 13
[Text] => Core #3
[Min] => 1600,0 MHz
[Value] => 2800,0 MHz
[Max] => 3600,0 MHz
[SensorId] => /amdcpu/0/clock/2
[Type] => Clock
[ImageURL] => images/transparent.png
[Children] => Array

mit true:

[2] => Array
(
[id] => 13
[Text] => Core #3
[Min] => 1600,0 MHz
[Value] => 1600,0 MHz
[Max] => 3600,0 MHz
[SensorId] => /amdcpu/0/clock/2
[Type] => Clock
[ImageURL] => images/transparent.png
[Children] => Array

Ich hätte gerne den z.b. Value] => 1600,0 MHz in eine Variable geschrieben
mit:
SetValue(48203, $value->id[‚13‘]->Value) geht es jedenfalls nicht

Danke & Viele Grüße

Hallo, kann mir jemand eine Anschubhilfe geben, wie man so ein mehrdimensonales Array ausliest? Ich komme leider nicht auf die Lösung.

Gruß
Jürgen

Vielleicht hilft die ein Code-Schnipsel von mir.
Das Script geht alle Einträge im Baum rekursiv durch und legt für jede Kategorie Dumme Instanzen mit Variablen an. Sofern die Variablen schon existieren wird nur der Wert überschrieben. Wenn du nicht alles haben willst, dann kannst du bei den langen if-Bedingungen deine Ausnahmen ergänzen.
Timer dazu der in der gewünschten Häufigkeit feuert und schon hast du einen Verlauf.


<?php

$data = file_get_contents("http://USERNAME:PASSWORT@IP:PORT/data.json");
$json = json_decode($data);

ReadData("", $json->Children[0]);



function ReadData($prefix, $json)
{
    $archiv = 37255;  // Id des Archiv Control
    
    if (!empty($json->Value))
    {
        if ($json->Text != 'CPU Core #1 Distance to TjMax' &&
            $json->Text != 'CPU Core #2 Distance to TjMax' &&
            $json->Text != 'CPU Core #3 Distance to TjMax' &&
            $json->Text != 'CPU Core #4 Distance to TjMax' &&
            $json->Text != 'Core Average'&&
            $json->Text != 'Core Max')   // Ausnahmen 

        {
            $name = $prefix;
            $instanceId = @IPS_GetInstanceIDByName($name, IPS_GetParent($_IPS['SELF']));
            if ($instanceId === false || @IPS_GetName($instanceId) != $name)
            {
                $instanceId = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
                IPS_SetName($instanceId, $name);
                IPS_SetParent($instanceId, IPS_GetParent($_IPS['SELF']));
            }

            $name = $json->Text;
            $variableId = @IPS_GetVariableIDByName($name, $instanceId);
            if ($variableId === false || @IPS_GetName($variableId) != $name)
            {
                $variableId = IPS_CreateVariable(2);
                IPS_SetName($variableId, $name);
                IPS_SetParent($variableId, $instanceId);
                AC_SetLoggingStatus($archiv, $variableId, true);
                AC_SetAggregationType($archiv, $variableId, 0);
            }

            SetValueFloat($variableId, $json->Value);
            //echo "id = " . $json->id . " / Text = " . $json->Text . " / Value = " . $json->Value . " / ==> " . $prefix . "-" . $json->Text . "<br/>";
        }
    }
    else 
    {
       //echo "übersprungen: id = " . $json->id . " / Text = " . $json->Text . "<br/>";
    }

    if (!empty($json->Children))
    {
        $subprefix = $json->Text;
        if (!empty($prefix))
        {
            $subprefix = $prefix . "-" . $json->Text;
        }
        
        //echo "sub: " . $subprefix. "<br/>". "<br/>";
        foreach($json->Children as $entry => $value)
        {
            if ($subprefix != 'SERVER01-OnBoard Port 1 - Management-Data' && 
                $subprefix != 'SERVER01-OnBoard Port 1 - Management-Load' &&
                $subprefix != 'SERVER01-Msft Storage Space-Throughput' &&
                $subprefix != 'SERVER01-HP LOGICAL VOLUME-Throughput' && 
                $subprefix != 'SERVER01-Intel Xeon E3-1265L V2-Powers' && 
                $subprefix != 'SERVER01-Intel Xeon E3-1265L V2-Clocks')  // Ausnahmen 
            {
                ReadData($subprefix, $value); 
            }
        }
    }
}

Viel Erfolg, Gruß
Philip

Hallo Philip,

du bist heute mein Tagesheld:D

das hätte ich mit meinen Kenntnissen nicht hinbekommen, läuft auf Anhieb.:slight_smile:

Vielen vielen DANK!!

Gruß
Jürgen

EDIT:
PC mit Hardwaremonitor neu gestartet, die Warnung tritt nun nicht mehr auf…:confused:. mhm eine Idee was das sein könnte?

Hallo Philip,

eine Warnung habe ich noch, diese ist mir gestern nicht aufgefallen…

Line 14 ReadData("", $json->Children[0]);
Line 51 SetValueFloat($variableId, $json->Value);
Line 80 ReadData($subprefix, $value);

Hast du eine Idee was diese Warnung auslöst?

Hi Jürgen

ich habe überhaupt nicht mehr gesehen, dass du noch geschrieben hast. Etwas verspätet also… Schön das der Schnippsel dir hilft.

SetValueFloat erwartet natürlich, dass in $json->Value eine Zahl steht… Den Fehler würde ich erwarten wenn da halt ein Text drin stand. zB „failed“ oder so…
Wenn dir das Probleme macht, dann frag den Value doch vorher ab, zB mit is_numeric($json->Value) .

Grüße
Philip