Windows - CPU Temperatur und Co mit FHEM

Aus FHEMWiki

(von kleene 1503)

Hier mal eine Möglichkeit, wie man auf Windows-Systemen die CPU-, HDD-, und andere Temperaturen / Systemdaten in FHEM anzeigen und grafisch darstellen kann.

Voraussetzungen: - Cygwin installiert - SpeedFan installiert - Einen WIRKLICH Unix fähigen Editor. Vergesst hierbei Wordpad und Notepad!!! Ich nutze Proton (ist kostenlos und frei verfügbar). Bei Proton müsst ihr UNBEDINGT darauf achten, dass ihr unter „Datei -> Zeilenumbruchformat“ auf Unix umstellt. Sonst sucht ihr wie ich zwei Wochen nach einem Fehler wo eigentlich gar keiner ist. Das Umstellen unter Syntaxschema auf Unix Shell ist hilfreich aber kein muss.


Auf die Installation von Cygwin werde ich hier nicht eingehen. Dazu gibt es genug im www.

Laufen tut das ganze bei mir auf Windows 7 Home Premium 64bit.

Installiert Cygwin

Installiert SpeedFan

- Um später Leerzeichen in den Pfadangaben zu vermeiden, habe ich nach der Installation von SpeedFan einfach den kompletten Installationsordner direkt nach C: kopiert. Im Klartext heißt das, aus „C:\Programme (x86)\SpeedFan\“ wurde bei mir „C:\SpeedFan\“.

- SpeedFan selbst habe ich so eingerichtet, dass er mir das Logfile MIT Header schreibt. Das Logfile von SpeedFan findet ihr direkt in dem Installationsordner von SpeedFan.


Script zum bearbeiten des SpeedFan Logfiles und speichern eines FHEM tauglichen Logfiles erstellen

- Die Logfiles von SpeedFan sind noch nicht FHEM tauglich. Also müssen wir uns die Files mit Hilfe eines kleinen Scriptes in ein FHEM taugliches Format umwandeln. Dieses Script sieht bei mir wie folgt aus:

#!/bin/sh
date=`date +"%Y-%m-%d_%H:%M:%S"`
log="/cygdrive/c/fhem/tmp/system.log"
cat /cygdrive/c/SpeedFan/SFLog*.csv \
    | grep "" \
    | sed '/Seconds/d' \
    | sed 's/[\t]/ /g' \
    | sed 's/ \+/ /g' \
    | sed '$!d' \
    | sed "s/^/$date /" >> $log
#

Erklärung:

!/bin/sh <- sollte klar sein

date=`date +"%Y-%m-%d_%H:%M:%S"` <- sollte auch klar sein

log="/cygdrive/c/fhem/tmp/system.log" <- /cygdrive sagt unserem PC, dass wir Cygwin nutzen (um es mal grob auszudrücken); /c/fhem/tmp/ system.log ist der Pfad wo unser fertiges und FHEM taugliches logfile später gespeichert werden soll.

cat /cygdrive/c/SpeedFan/SFLog*.csv \ <- sagt unserem script, wo das SpeedFan Logfile liegt welches wir bearbeiten wollen.

| grep "" \ <- liest das komplette SpeddFan Logfile ein.


| sed '/Seconds/d' \ <- Entfernt die komplette Zeile in der das Wort Seconds vorkommt was in unserem Fall der Header des SpeedFan Logfiles ist.

| sed 's/[\t]/ /g' \ <¬- Entfernt alle Tabs aus dem Speedfan Logfile.

| sed 's/ \+/ /g' \ <- Entfernt alle Leerzeichen aus dem SpeedFan Logfile.

| sed '$!d' \ <- kopiert immer nur die letzte Zeile des SpeedFan Logfiles und kopiert uns diese samt Datum mit

| sed "s/^/$date /" >> $log in unser FHEM taugliches Logfile.


Dieses Script speichert ihr nun als system.sh in eurem Cygwin Home Ordner.

Übrigens: Wenn man sich mit dem "sed" Kommando auseinandersetzt, kann man so auch Logfiles von anderen Windowsprogrammen zum Temperatur- und Systemdaten auslesen wunderbar in ein FHEM taugliches Format bringen.


.bat erstellen zum ausführen der .sh – Datei

- Erstellt euch eine .bat mit folgendem Inhalt:

@echo off

C: chdir C:\cygwin\bin bash --login -i ./system.sh und speichert diese als system.bat in eurem fhem Ordner.


Aufrufen der system.bat durch FHEM

- Erstellt in eurer fhem.cfg folgenden Eintrag:

define SystemDaten at +*00:02:00 { fhem `system`}

Dieser Eintrag startet alle 2 Minuten die Datei system.bat welche wiederum das Script system.sh ausführt.

Wenn ihr es so wie ich gemacht habt, sollte nun innerhalb der nächsten 2 Minuten) in dem Ordner „C:\fhem\tmp\“ ein Logfile namens system.log auftauchen welches alle nötigen Daten enthält und FHEM tauglich ist.


Plot Datei erstellen

- Als Vorlage habe ich die Datei cpulog.gplot aus dem FHEM Ordner genommen. Wichtig ist hier für uns der untere Teil ab set ylabel. Der obere Teil kann bleiben wie er ist.

Wir müssen uns nun Überlegen, was wir uns anzeigen lassen wollen. In diesem Fall nehmen wir mal die Temperaturen von Core 0 und Core 1.

Als erstes sehen wir uns noch einmal das SpeedFan Logfile an welches bei mir folgendermasen aussieht:

Seconds HD0 Core 0 Core 1 71180 34.0 36.0 34.0

Core 0 und 1 ist also an 3. und 4. Stelle nach Seconds.

Nun sehe ich mir unser erstelltes system.log Logfile an:

2012-03-19_22:33:15 71180 34.0 36.0 34.0

Wir haben also vor dem Wert für Seconds noch das Datum und die Uhrzeit und den Temperaturwert für Core 0 und 1 finden wir nun an der 4. und 5. Stelle. Wichtig ist, dass ihr Leerzeichen nicht mit zählt.

Gehen wir nun zurück zur Datei cpulog.gplot und Tragen folgendes ein:

set ylabel "Temperatur in C"
set y2label "Temperatur in C"

#FileLog 4::0: #FileLog 5::0: plot "<IN>" using 1:4 title 'Temperatur Core 0' with lines,\ "<IN>" using 1:5 title 'Temperatur Core 1' with lines

Erklärung:

set ylabel "Temperatur in C" <- Ist die linke, senkrechte Bezeichnung des Plot-Fensters.

set y2label "Temperatur in C" <- Ist die rechte, senkrechte Bezeichnung des Plot-Fensters.

FileLog 4::0: <- liest die 4 Stelle unseres Logfiles aus.

FileLog 5::0: <- liest die 5. Stelle unseres Logfiles aus.

plot "<IN>" using 1:4 <- zeigt die 4. Stelle unseres Logfiles im Plot- Fenster. title 'Temperatur Core 0' with lines <- Zeigt im Plot-Fenster den Titel unserer Linie.

,\ <- Sagt FHEM das noch eine weitere Linie kommt.


Speichert dies nun Beispielsweise als core01.gplot


Plot in FHEM anzeigen lassen

- Nun Tragen wir in unserer fhem.cfg folgendes ein:

define SystemLog FileLog C:/fhem/tmp/system.log SystemDaten attr SystemLog logtype core01

define Sys weblink fileplot SystemLog:core01:CURRENT


Wenn alles geklappt hat, solltet ihr nun die Temperaturen grafisch in FHEM dargestellt bekommen.


Ich übernehme keine Garantie. Kann nur sagen, dass es bei mir so geklappt hat. Ich hoffe ich kann dem einen oder anderen damit helfen oder wenigstens einen Denkanstoß geben.

Es gibt bestimmt noch elegantere Lösung allerdings habe ich für Windows bis jetzt noch nichts gefunden.

(von kleene 1503)