Re: RaspberryMatic 3.41.11.20181126 – Erfahrungsberichte
Verfasst: 19.12.2018, 06:08
das hatten wir doch schon mal in viewtopic.php?f=65&t=46377&p=464307&hilit=free#p464130
Heimautomation mit ELV HomeMatic und FHZ Funk-Hauszentralen
https://homematic-forum.de/forum/
das hatten wir doch schon mal in viewtopic.php?f=65&t=46377&p=464307&hilit=free#p464130
Code: Alles auswählen
! Systeminfos auslesen und in Systemvariablen speichern
!--------------------------------------------------------------
! Folgende Systemvariablen in der CCU2 anlegen:
! CCU2_DutyCycle,
! CCU2_Load_1min,
! CCU2_Load_5min,
! CCU2_Load_15min,
! CCU2_SYSfreeMem,
! CCU2_SYSTotalMem
! CCU2_UpTime,
! CCU2_FWVersion
! CCU2_ReGa_Version
!--------------------------------------------------------------
boolean debug = false; ! Debug einschalten mit true
string strOut = ""; ! Outputpuffer für Rückgaben
string command = ""; ! Auszuführendes Commando
string stdout;
string stderr;
string list = "";
!--------------------------------------------------------------
! DutyCycle CCU mit HM Script und CUxD.exec (c) by Alchy v 0.1
!--------------------------------------------------------------
! command = "echo 'load tclrpc.so; puts [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces ]'|tclsh |grep -o 'DUTY_CYCLE.[0-9]*.'";
! dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(command);
! dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
! if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_DutyCycle"))
! {
! if(debug)
! {
! WriteLine((dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State().StrValueByIndex(" ",1)).ToFloat());
! }
! else
! {
! dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_DutyCycle").State((dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State().StrValueByIndex(" ",1)).ToFloat());
! list = system.Date("%H:%M:%S") # " Raspi-DutyCycle " #(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State().StrValueByIndex(" ",1)).T
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
! }
!}
!--------------------------------------------------------------
! CCU2 Load-Average
! FEHLT NOCH : 10s-cpu-load: 28.3%
!--------------------------------------------------------------
command = "cat /proc/loadavg";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(command);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
strOut = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_Load_1min"))
{
var loadA_1Min = strOut.Substr(0,4);
var loadA_5Min = strOut.Substr(5,4);
var loadA_15Min = strOut.Substr(10,4);
var vier = strOut.Substr(15,5);
var fuenf = strOut.Substr(21,5);
if (debug) {
WriteLine("?? : "#strOut);
WriteLine("Gemittelt 1 Minute : " #loadA_1Min);
WriteLine("Gemittelt 5 Minuten : " #loadA_5Min);
WriteLine("Gemittelt 15 Minuten : " #loadA_15Min);
WriteLine("aktuell lauffähigen (runnable) Prozesse / Anzahl der Kernel Scheduling Entities im System : " #vier);
WriteLine("PID des jüngsten im System erzeugten Prozesses : " #fuenf);
} else {
dom.GetObject("CCU2_Load_1min").State(loadA_1Min);
dom.GetObject("CCU2_Load_5min").State(loadA_5Min);
dom.GetObject("CCU2_Load_15min").State(loadA_15Min);
! list = system.Date("%H:%M:%S") # " Raspi-Load-1min " #loadA_1Min;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
! list = system.Date("%H:%M:%S") # " Raspi-Load-5min " #loadA_5Min;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
! list = system.Date("%H:%M:%S") # " Raspi-Load-15min " #loadA_15Min;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
}
}
!--------------------------------------------------------------
! Memory Frei
!--------------------------------------------------------------
command = "cat /proc/meminfo | grep 'MemFree:'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(command);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
strOut = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
strOut = strOut.Substr(15,12);
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_SYSfreeMem"))
{
if (debug) {
WriteLine("CCU2 SYSfreeMem : " #strOut);
} else {
dom.GetObject("CCU2_SYSfreeMem").State(strOut);
! list = system.Date("%H:%M:%S") # " Raspi-SYSfreeMem " #strOut;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
}
}
!--------------------------------------------------------------
! Memory Total
!--------------------------------------------------------------
command = "cat /proc/meminfo | grep 'MemTotal:'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(command);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
strOut = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
strOut = strOut.Substr(15,12);
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_SYSTotalMem"))
{
if (debug) {
WriteLine("CCU2 SYSTotalMem : "#strOut);
} else {
dom.GetObject("CCU2_SYSTotalMem").State(strOut);
! list = system.Date("%H:%M:%S") # " Raspi-SYSTotalMem " #strOut;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
}
}
!--------------------------------------------------------------
! Uptime (Betriebszeit) der CCU2 oder Raspberry auslesen
!--------------------------------------------------------------
command = "cat /proc/uptime | awk '// { printf \"%d Tage %02d Std %02d Min\", $1/86400, $1/3600%24, $1/60%60 }'";
dom.GetObject ("CUxD.CUX2801001:1.CMD_SETS").State (command);
dom.GetObject ("CUxD.CUX2801001:1.CMD_QUERY_RET").State (1);
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_UpTime"))
{
if(debug) {
WriteLine("CCU2_UpTime : " #dom.GetObject ("CUxD.CUX2801001:1.CMD_RETS").State());
}
else {
dom.GetObject ("CCU2_UpTime").State(dom.GetObject ("CUxD.CUX2801001:1.CMD_RETS").State());
! list = system.Date("%H:%M:%S") # " Raspi-UpTime " #dom.GetObject ("CUxD.CUX2801001:1.CMD_RETS").State();
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
}
}
!--------------------------------------------------------------
! CCU2 Firmwareversion
!--------------------------------------------------------------
command = "cat /boot/VERSION";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(command);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
strOut = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_FWVersion"))
{
if(strOut)
{
if(debug) {WriteLine("strOut:" #strOut);}
strOut = strOut.StrValueByIndex("=",1).Trim();
if (debug) {
WriteLine("CCU2 Version : "#strOut);
WriteLine("Lange: "#strOut.Length());
} else {
dom.GetObject("CCU2_FWVersion").State(strOut);
! list = system.Date("%H:%M:%S") # " Raspi-Version " #strOut;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
}
}
}
! CPU Temperatur Raspi auslesen und noch mit Parse das Ergebnis splitten
! # vcgencmd measure_temp
! temp=41.2'C
string temp;
system.Exec("vcgencmd measure_temp | cut -d '=' -f2 | cut -d\"'\" -f1", &temp);
if(temp != "")
{
temp = temp.ToFloat();
dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Temp").State(temp);
! list = system.Date("%H:%M:%S") # " Raspi-CPU-Temp " #temp;
! system.Exec("logger -t script -p user.debug [CuxD-Timer-15Minuten : "# list #"]", &stdout, &stderr);
}
dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU2_ReGa_Version").State(dom.BuildLabel());
Ok, Dank. MemFree kannst du zu dem Zwecke wie du es nutzt wirklich nicht nutzen, denn das sagt absolut nichts aus denn du musst da den gemachten RAM mit dazuaddieren. Verwende doch am besten mal einen meiner folgenden Sysinfo Skripte:
Code: Alles auswählen
string temp;
system.Exec("cat /sys/class/thermal/thermal_zone0/temp | sed 's/.\{3\}$/.&/'", &temp);
if(temp != "") {
dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Temp").State(temp);
}
system.Exec("cat /proc/loadavg | cut -d' ' -f-3 | tr -d '\n'", &temp);
if(temp != "") {
dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Load").State(temp);
}
system.Exec("cat /proc/meminfo | egrep 'Mem(Total|Available)' | tr -d '\n' | awk '{ printf(\"%.1f\", 100-$4/$2*100) }'", &temp);
if(temp != "") {
dom.GetObject(ID_SYSTEM_VARIABLES).Get("RAM_Usage").State(temp);
}
system.Exec("awk '{s=int($1);d=int(s/86400);h=int(s % 86400/3600);m=int(s % 3600 / 60); printf \"%d Tage, %dh %d min\", d, h, m}' /proc/uptime", &temp);
if(temp != "") {
dom.GetObject(ID_SYSTEM_VARIABLES).Get("SYS_Uptime").State(temp);
}
system.Exec("/usr/bin/ntpq -pn | grep '*' | awk '{print $9}'", &temp);
if(temp != "") {
dom.GetObject(ID_SYSTEM_VARIABLES).Get("SYS_NTPOffset").State(temp);
}
jmaus hat geschrieben: ↑19.12.2018, 13:59Ok, Dank. MemFree kannst du zu dem Zwecke wie du es nutzt wirklich nicht nutzen, denn das sagt absolut nichts aus denn du musst da den gemachten RAM mit dazuaddieren.
...
Das sollte alles im Grunde fast genauso berechnen/ermitteln wie deins. Lediglich den Memory lass ich dort als Prozentuale Ausnutzung berechnen was IMHO mehr Sinn macht als das was du da versuchst zu vergleichen.
tja was soll ich sagen, da der Thread ewig lang ist, wirst du meine Ursprungs frage etc. einfach nicht gelesen haben.NickHM hat geschrieben: ↑11.12.2018, 23:33Vielen Dank. Das ist jetzt deutlich allgemeiner und nichts sagender. Damit besteht keine Gefahr mehr, dass jemand antwortet.
Das sollte wohl gecachter RAM heißen.