NEWS
Board Info Script für Raspi und Orange pi
-
Bei mir laufen 2 Iobroker, einer Produktiv auf einem oPI +2e und auf einem RPI3 das Backup system. um Backups zwischen den Systemen austauschen zu können habe ic hmich mal hingesetzt und ein BoardInfo Script geschrieben, welches ohne änderung auf einem RPI (3) und einem OPI plus 2e läuft.
Unter Javascript.x.Systeminfos.Board werden die States Automatisch angelegt.
erkannt werden die Boards, indem die hardwarekennung des oPI ausgelesen wird (sun8i).
In Abhängigkeit davon werden Teilerparameter bestimmt.
Es kann sein, das beim ersten Start das Board noch nicht erkannt wurde, dann bitte das Script nochmal ausführen.
var pfad = "Systeminfos.Board."; // Pfad in dem die Datenpunkte angelegt werden // Datenpunktnamen: var idCPUTemp = pfad + 'CPU.CPUTemp'; var idCPUFreq = pfad + 'CPU.CPUFreq'; var idCPUFreqScale= pfad + 'CPU.CPUFreqScale'; var idBoardType = pfad + 'CPU.BoardType'; var idCPULoad1 = pfad + 'CPU.Load1'; var idCPULoad5 = pfad + 'CPU.Load5'; var idCPULoad15 = pfad + 'CPU.Load15'; var idRAMtotal = pfad + 'MEM.RAMtotal'; var idRAMfree = pfad + 'MEM.RAMfree'; var idRAMfreeproz = pfad + 'MEM.RAMfreeProz'; var idSWAPtotal = pfad + 'MEM.SWAPtotal'; var idSWAPused = pfad + 'MEM.SWAPused'; var idUPTimeS = pfad + 'CPU.UptimeSec'; var idUPTimeD = pfad + 'CPU.UptimeDay'; var idEMMCtotal = pfad + 'EMMC.EMMCtotal'; var idEMMCused = pfad + 'EMMC.EMMCused'; var idEMMCusedProz= pfad + 'EMMC.EMMCusedProz'; var idCPUcores = pfad + 'CPU.CPUcores'; var idIDLErun = pfad + 'CPU.IDLErun'; var oPI = true; var erg = 0; // cat /sys/devices/virtual/thermal/thermal_zone0/temp var exec = require('child_process').exec, child; //child = exec('cat /sys/devices/virtual/thermal/thermal_zone0/temp', //function (error, stdout, stderr) { // console.log('stdout: ' + stdout); // console.log('stderr: ' + stderr); // if (error !== null) { // console.log('exec error: ' + error); // } // }); function AnlegensysVars () { createState (idCPUTemp, "", { name: 'Board CPU Temp', desc: 'Temperatur Chip', type: 'number', unit: '°C', role: 'object' }); createState (idCPUFreq, "", { name: 'SoC Taktfrequenz', desc: 'Geschwindigkeit des Prozessoers', type: 'number', unit: 'MHz', role: 'object' }); createState (idCPUFreqScale, "", { name: 'SoC Taktfrequenz Strategie', desc: 'Taktfrequenzstrategie', type: 'string', unit: '', role: 'object' }); createState (idCPULoad1, "", { name: 'Auslastung 1 Minute', desc: 'Auslatung gemittelt über 1 Minute', type: 'number', unit: '', role: 'object' }); createState (idCPULoad5, "", { name: 'Auslastung 5 Minute', desc: 'Auslatung gemittelt über 5 Minuten', type: 'number', unit: '', role: 'object' }); createState (idCPULoad15, "", { name: 'Auslastung 15 Minute', desc: 'Auslatung gemittelt über 15 Minuten', type: 'number', unit: '', role: 'object' }); createState (idBoardType, "", { name: 'Board Type', desc: 'Ermittelter Boardtype des Rechners', type: 'string', unit: '', role: 'object' }); createState (idRAMtotal, "", { name: 'Gesamt Speicher Ram', desc: 'Arbeitsspeicher Ram in Megabyte', type: 'number', unit: 'MB', role: 'object' }); createState (idRAMfree, "", { name: 'Freier Speicher', desc: 'Freier Speicher Ram in Megabyte', type: 'number', unit: 'MB', role: 'object' }); createState (idRAMfreeproz, "", { name: 'Freier Speicher', desc: 'Freier Speicher Ram in Prozent', type: 'number', unit: '%', role: 'object' }); createState (idSWAPtotal, "", { name: 'Swap Speicher', desc: 'Maximaler Swap Speicher', type: 'number', unit: 'MB', role: 'object' }); createState (idSWAPused, "", { name: 'Swap Speicher', desc: 'Benutzter Swap Speicher', type: 'number', unit: 'MB', role: 'object' }); createState (idCPUcores, "", { name: 'Anzahl der Prozessorkerne der CPU', desc: 'Anzahl der Prozessorkerne', type: 'number', unit: '', role: 'object' }); createState (idIDLErun, "", { name: 'Leerlaufzeit der CPU', desc: 'Prozentualer Anteil der Uptime, wo die CPU in Leerlauf war', type: 'number', unit: '%', role: 'object' }); createState (idUPTimeS, "", { name: 'Uptime Board', desc: 'Uptime in Sekunden', type: 'number', unit: 's', role: 'object' }); createState (idUPTimeD, "", { name: 'Uptime Board', desc: 'Uptime in Tagen', type: 'number', unit: 'd', role: 'object' }); createState (idEMMCtotal, "", { name: 'Kapazität EMMC Speicher', desc: 'Kapazität EMMC in MB', type: 'number', unit: 'MB', role: 'object' }); createState (idEMMCused, "", { name: 'EMMC Speicher in Benutzung', desc: 'Benutzter EMMC Speicher in MB', type: 'number', unit: 'MB', role: 'object' }); createState (idEMMCusedProz, "", { name: 'EMMC Speicher in Benutzung Prozent', desc: 'Benutzter EMMC Speicher in Prozent', type: 'number', unit: '%', role: 'object' }); } function Auslesen_CPUFreq () { // Auslesen CPU Frequenz exec ('cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq', function (error, stdout, stderr) { var reg= /(\d*)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { erg= parseInt (match [match.length-1]); erg=erg/1000; setState (idCPUFreq, erg ); } if (error !== null) {console.log('exec error: ' + error); } }); } function AktualisierenWerte () { // CPU Temperatur auswerten exec ('cat /sys/devices/virtual/thermal/thermal_zone0/temp', function (error, stdout, stderr) { var reg= /(\d*)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { erg= parseInt (match [match.length-1]); log ("TEMP:" +erg); log (oPI); if (!oPI) { erg= erg/1000;} setState (idCPUTemp, erg ); } if (error !== null) {console.log('exec error: ' + error); } }); // Auslesen der Prozessorkerne exec ('cat /sys/devices/system/cpu/kernel_max', function (error, stdout, stderr) { var reg= /(\d*)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { erg= parseInt (match [match.length-1]); setState (idCPUcores, erg+1 ); } if (error !== null) {console.log('exec error: ' + error); } }); // Auslesen CPU Taktstrategie exec ('cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor', function (error, stdout, stderr) { setState (idCPUFreqScale, stdout ); if (error !== null) {console.log('exec error: ' + error); } }); // Auslesen Auslastung exec ('cat /proc/loadavg', function (error, stdout, stderr) { var reg= /(\S+)\s(\S+)\s(\S+)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { setState (idCPULoad1, parseFloat (match [1] )); setState (idCPULoad5, parseFloat (match [2] )); setState (idCPULoad15, parseFloat (match [3] )); } if (error !== null) {console.log('exec error: ' + error); } }); // Auslesen RAM Belegung exec ('cat /proc/meminfo', function (error, stdout, stderr) { var RamFree=1; var RamTotal=1; var SwapTotal=1; var reg= /MemTotal:\s+(\d+)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { RamTotal=parseInt (match [1])/1000 ; setState (idRAMtotal, Math.round (RamTotal)); } reg=/MemFree:\s+(\d+)/gi; match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { RamFree=parseInt (match [1])/1000; setState (idRAMfree, Math.round (RamFree)); } setState (idRAMfreeproz,Math.round (RamFree/RamTotal * 100)); // Swap Speicher auswerten reg=/SwapTotal:\s+(\d+)/gi; match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { SwapTotal=parseInt (match [1])/1000; setState (idSWAPtotal, Math.round (SwapTotal)); } reg=/SwapFree:\s+(\d+)/gi; match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { setState (idSWAPused, Math.round (SwapTotal-(parseInt (match [1])/1000))); } if (error !== null) {console.log('exec error: ' + error); } }); // Auslesen der Uptime exec ('cat /proc/uptime', function (error, stdout, stderr) { var reg= /(\S+)\s(\S+)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { setState (idUPTimeS,Math.round (parseFloat (match [1]))); setState (idUPTimeD,Math.round (parseFloat (match [1])/86400)); setState (idIDLErun,Math.round (parseFloat (match [2]) / getState (idCPUcores).val / parseFloat (match[1]) * 10000)/100); } if (error !== null) {console.log('exec error: ' + error); } }); // Auslesen der EMMC exec ('df -k / | grep /', function (error, stdout, stderr) { //log (stdout); var reg= /\S+\s+(\d+).*/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { setState (idEMMCtotal,Math.round (parseFloat (match [1]) /1024 )); } reg= /\S+\s+\d+\s+(\d+).*/gi; match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { setState (idEMMCused,Math.round (parseFloat (match [1]) /1024 )); } setState (idEMMCusedProz,Math.round (getState (idEMMCused).val / getState (idEMMCtotal).val *100)); if (error !== null) {console.log('exec error: ' + error); } }); setTimeout (Auslesen_CPUFreq,1000); } schedule("* * * * *", function () { // Jede Minute AktualisierenWerte (); }); AnlegensysVars (); // Ermitteln welches Board so vorliegt exec ('cat /proc/cpuinfo | grep Hardware', function (error, stdout, stderr) { var reg= /:\s(.*)/gi; var match= reg.exec (stdout); if (match !== undefined && match !== null && match.length !== undefined) { setState (idBoardType, match [match.length-1] ); log (match[match.length-1]); if (match[match.length-1]=="sun8i") { oPI= true; log ("OrangePI Hardware gefunden : sun8i"); } else { oPI= false; log ("Raspberry PI Hardware gefunden : BMC 7209"); } AktualisierenWerte (); } if (error !== null) {console.log('exec error: ' + error); } });
Greetz, Black
-
Hallo Black,
du hast wohl Langeweile
die werde ich dir mal gleich austreiben
ich arbeite als js-legastheniker schon lange an so etwas.
und zur Strafe meine Outputs:
!
Cubietruck zum ersten: 15:58:55.482 [info] javascript.0 Start javascript script.js.Boarderkennung 15:58:55.484 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 15:58:57.003 [info] javascript.0 script.js.Boarderkennung: Allwinner sun7i (A20) Family 15:58:57.004 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 15:58:57.064 [info] javascript.0 script.js.Boarderkennung: TEMP:46100 15:58:57.065 [info] javascript.0 script.js.Boarderkennung: false 15:59:01.273 [info] javascript.0 script.js.Boarderkennung: TEMP:46900 15:59:01.274 [info] javascript.0 script.js.Boarderkennung: false ! zum zweiten: 15:59:42.137 [info] javascript.0 Start javascript script.js.Boarderkennung 15:59:42.138 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 15:59:42.139 [info] javascript.0 script.js.Boarderkennung: Allwinner sun7i (A20) Family 15:59:42.139 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 15:59:42.140 [info] javascript.0 script.js.Boarderkennung: TEMP:46400 15:59:42.141 [info] javascript.0 script.js.Boarderkennung: false ! RPi2 zum ersten: 16:00:12.119 [info] javascript.1 Start javascript script.js.Boarderkennung 16:00:12.122 [info] javascript.1 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:00:12.546 [info] javascript.1 script.js.Boarderkennung: BCM2835 16:00:12.546 [info] javascript.1 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:00:12.551 [info] javascript.1 script.js.Boarderkennung: TEMP:39007 16:00:12.552 [info] javascript.1 script.js.Boarderkennung: false ! zum zweiten: 16:01:15.763 [info] javascript.1 Start javascript script.js.Boarderkennung 16:01:15.763 [info] javascript.1 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:01:15.763 [info] javascript.1 script.js.Boarderkennung: BCM2835 16:01:15.763 [info] javascript.1 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:01:15.764 [info] javascript.1 script.js.Boarderkennung: TEMP:35780 16:01:15.764 [info] javascript.1 script.js.Boarderkennung: false ! Tinkerboard zum ersten 16:02:43.731 [info] javascript.0 Start javascript script.js.Boarderkennung 16:02:43.732 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:02:43.732 [info] javascript.0 script.js.Boarderkennung: Rockchip (Device Tree) 16:02:43.732 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:02:43.734 [info] javascript.0 script.js.Boarderkennung: TEMP:NaN 16:02:43.734 [info] javascript.0 script.js.Boarderkennung: false 16:02:43.734 [info] javascript.0 script.js.Boarderkennung: exec error: Error: Command failed: cat /sys/devices/virtual/thermal/thermal_zone0/temp cat: /sys/devices/virtual/thermal/thermal_zone0/temp: Das Argument ist ungültig ! zum zweiten: 16:03:20.219 [info] javascript.0 Start javascript script.js.Boarderkennung 16:03:20.220 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:03:20.404 [info] javascript.0 script.js.Boarderkennung: Rockchip (Device Tree) 16:03:20.405 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:03:20.405 [info] javascript.0 script.js.Boarderkennung: TEMP:NaN 16:03:20.405 [info] javascript.0 script.js.Boarderkennung: false 16:03:20.405 [info] javascript.0 script.js.Boarderkennung: exec error: Error: Command failed: cat /sys/devices/virtual/thermal/thermal_zone0/temp cat: /sys/devices/virtual/thermal/thermal_zone0/temp: Das Argument ist ungültig ! zum dritten, thermal_zone0 in thermal_zone1 geändert 16:04:43.034 [info] javascript.0 Stop script script.js.Boarderkennung 16:04:43.087 [info] javascript.0 Start javascript script.js.Boarderkennung 16:04:43.088 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:04:43.203 [info] javascript.0 script.js.Boarderkennung: Rockchip (Device Tree) 16:04:43.204 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:04:43.204 [info] javascript.0 script.js.Boarderkennung: TEMP:47727 16:04:43.204 [info] javascript.0 script.js.Boarderkennung: false ! Pine64 zum ersten: 16:06:19.838 [info] javascript.0 Start javascript script.js.Boarderkennung 16:06:19.838 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:06:21.863 [info] javascript.0 script.js.Boarderkennung: sun50iw1p1 16:06:21.863 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:06:21.865 [info] javascript.0 script.js.Boarderkennung: TEMP:46 16:06:21.865 [info] javascript.0 script.js.Boarderkennung: false ! zum zweiten: 16:06:40.386 [info] javascript.0 Start javascript script.js.Boarderkennung 16:06:40.386 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:06:40.387 [info] javascript.0 script.js.Boarderkennung: sun50iw1p1 16:06:40.387 [info] javascript.0 script.js.Boarderkennung: Raspberry PI Hardware gefunden : BMC 7209 16:06:40.388 [info] javascript.0 script.js.Boarderkennung: TEMP:46 16:06:40.388 [info] javascript.0 script.js.Boarderkennung: false ! OPi+2e mit javascript-Adapter 3.3.11 gibt keine output an :( ! NUC5PPYH zum ersten: 16:12:57.357 [info] javascript.0 Start javascript script.js.Boarderkennung 16:12:57.358 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:12:57.363 [info] javascript.0 script.js.Boarderkennung: exec error: Error: Command failed: cat /proc/cpuinfo | grep Hardware 16:13:00.509 [info] javascript.0 script.js.Boarderkennung: TEMP:52000 16:13:00.509 [info] javascript.0 script.js.Boarderkennung: true ! zum zweiten: 16:13:00.509 [info] javascript.0 script.js.Boarderkennung: true 16:13:25.425 [info] javascript.0 Stop script script.js.Boarderkennung 16:13:25.510 [info] javascript.0 Start javascript script.js.Boarderkennung 16:13:25.511 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:13:25.518 [info] javascript.0 script.js.Boarderkennung: exec error: Error: Command failed: cat /proc/cpuinfo | grep Hardware 16:14:00.689 [info] javascript.0 script.js.Boarderkennung: TEMP:52000 16:14:00.690 [info] javascript.0 script.js.Boarderkennung: true !
Die andere Hardware läuft ledier im Moment nicht.
sonst hätte ich dich auch mit deren outputs zugespammt.Gruß
Rainer
-
Das mit dem OPi hat mir keine Ruhe gelassen.
:oops: :oops: man hätte auf dem OPi den js-Adapter nach der Installation und Instanziierung vielleicht starten sollen :oops: :oops:
16:51:28.266 [info] javascript.0 Start javascript script.js.Boarderkennung 16:51:28.268 [info] javascript.0 script.js.Boarderkennung: registered 0 subscriptions and 1 schedule 16:51:28.268 [info] javascript.0 script.js.Boarderkennung: sun8i 16:51:28.269 [info] javascript.0 script.js.Boarderkennung: OrangePI Hardware gefunden : sun8i 16:51:28.269 [info] javascript.0 script.js.Boarderkennung: TEMP:38 16:51:28.269 [info] javascript.0 script.js.Boarderkennung: true
Gruß
Rainer
-
@Hormoran / Rainer
Die Logausgabe ist nicht soooo interessant ausser zum Fehlereinkreisen.
Das Script müsste dir nun ein paar States angelegt haben
Die kannst du nun in weiteren Scripten oder in VIS verarbeiten
mein Übersichtsbild kanntest du ja schon vom letzten Treffen, da zwar noch aufm Handy, für den oPI noch bisschen erweitert:
Wir sehenuns ja eh nächste Woche, wenn das richtig im kopp hab ^^
greetz, Black
-
Wir sehenuns ja eh nächste Woche, wenn das richtig im kopp hab ^^ `
Armer Koppleider nein, ich habe nächste Woche Urlaub und bin alleine mit meiner Tochter von Montag bis Mittwoch in der Dr. Who Experience in Cardiff.
Freitag - Sonntag wollte ich alleine nach Donauwörth auf das Horizon Air-Meet.
Da wollte ich wenigstens einen Tag braver Ehemann sein und zu Hause bleiben.
Wenn das Airmeet für mich wegen schlechten Wetters ausfällt, überlege ich es mir vielleicht noch.
Bei den Datenpunkten fehlt vielleicht noch außer der Load (Systemlast incl. I/O) die echte Prozessorlast.
EDIT - hast du ja doch drin! Aber nur beim Cubie.
Gruß
Rainer
-
@Blackmike: ich habe dein Script im ersten Beitrag des threads direkt übernommen für den Pi3. Es geht alles bis auf einen Wert: IDLErun steht konstant auf 120.62 %. Eine Idee woran es liegt?
Edit: der Wert lebt… war 120.61, dann 120.6 %. Vielleicht einfach länger warten....?
-
Brauche mal eure Hilfe folgendes:
so habe ich dies angelegt leider Funktioniert dies nicht. Hilfe Hilfe....
// Datenpunktnamen:
var idCPUVolts = Pfad + 'CPU.Volts'; //So Richtig?// Als Funktion:
createState (idCPUVolts, "", {
name: 'CPU Spannung',
desc: 'Spannung pro Core',
type: 'number',
unit: 'V',
role: 'object'
}); //So Richtig?// Auslesen CPU Spannung
exec ('vcgencmd measure_volts core',
function (error, stdout,stderr) {
var reg= (\d+.\d+)V;
setState (idCPUVolts, stdout );
}
if (error !== null) {console.log('exec error: ' + error); }
}); // So Richtig? -
@norman1991 ich kannst so leider nimmer testen. Seit Ende letzten Jahres laufen bei mir beide iobroker und mein mysql Server unter proxmox auf einem nuc. Das script ist damit außer Funktion. Vllt kann das aber einer der Kollegen hier verifizieren
-
Ich nutze das im 1. Beitrag genannte Script. Auf meinem Pi3 lief alles ohne Problem. Ich habe aber jetzt einen Pi 4 und die Anzeige der Taktfrequenz ist "Null Mhz".
Keine Ahnung warum. Vielleicht kann mir jemand da weiter helfen.