Und wieder gibt es Neuigkeiten an der Homematicfront von Jerome. Diesmal geht es darum, die Speicherbelegung der SD Karte im Raspberry auszulesen und in eine Variable zu schreiben. Warum das wichtig sein könnte?
Ich nutze CCU-Historian inzwischen auf meinem NAS (QNAP), hatte das Tool aber vor einiger Zeit als Addon auf der CCU2 und später auf dem Raspberry installiert gehabt. Allerdings wurde das automatische Backup mit über 800MB dann doch etwas groß und das Erstellen bzw. Einspielen desselben, war eine echte Geduldsprobe. Wer nur eine kleine Installation hat, für den sollte das kein Problem sein. Wer also nicht die Möglichkeit hat auf einen NAS umzuziehen, kann mit diesem kleinen Script die Prozentzahl anzeigen lassen, inwieweit der Speicherplatz frei oder belegt ist.

Hierzu müssen zuerst zwei Variablen vom Typ “Zahl” angelegt werden.

Danach erstellen wir ein Programm, welches regelmäßig ausgeführt wird. Ich habe es bei mir stündlich laufen, da sich der Speicherplatz eher langsam verändert.

Hier nun die Scripte für SD-Karte-belegt

string cmdline = "df -h /usr/local |awk '{print $5}'|grep -v Use";
string stdout;
string stderr;
system.Exec(cmdline, &stdout, &stderr);
stdout = stdout.Replace("%","");
dom.GetObject("SDCard_Belegt").State(stdout.ToInteger());
WriteLine(stdout)

und hier das Script für SD-Karte-frei

string cmdline = "df -h /usr/local |awk '{print $5}'|grep -v Use";
string stdout;
string stderr;
system.Exec(cmdline, &stdout, &stderr);
stdout = stdout.Replace("%","");
integer frei = 100-stdout.ToInteger();
dom.GetObject("SDCard_Frei").State(frei);

Nun können Sie Systemvariablen auf der Startseite angezeigt oder in Programmen weiterverarbeitet werden.

PS: Bei den meisten Raspberrymatic, auf denen nur das Betriebssystem installiert ist, kann evtl. auch 0% stehen, da hier nur der Speicherplatz abgefragt wird, welcher über das Benutzerverzeichnis beschreibbar sind. Das Betriebssystem selbst wird hier NICHT berücksichtigt.

Print Friendly, PDF & Email

2 Kommentare

  1. Super Idee! Kann mir evtl. jemand noch auf die Sprünge helfen, wie ich die System.Exec-Zeile durch dom.GetObject(“CUxD.CUX280100x:1.CMD_EXEC”) ersetzt bekomme? Gruß an alle Home-Maten! 🙂

    1. Brauchst du eigentlich nicht. Hier werden keine handshakes über Funk ausgetauscht, sondern nur lokal auf den PI zugegriffen. Also sollte keine „Gefahr“ bestehen. 😉

Kommentar schreiben