NEWS
[gelöst] Leistungswerte der Hardware auslesen und anzeigen
-
Hallo zusammen,
ich bin neu in der iobroker Welt und habe direkt eine Frage:
Wie kann ich denn die Hardware-Werte von anderen Servern in meinem Netzwerk abfragen?
Ich verstehe das nicht so wirklich.
Die iobroker Installation läuft auf einem Raspberry Pi.
Habe noch zusätzlich einen Debian Server im Netzwerk, der ebenfalls in iobroker eingebunden werden soll.
Vielen Dank im Voraus
LG
Alex
-
Hallo Alex und Willkommen im Forum!
@djalexz:Wie kann ich denn die Hardware-Werte von anderen Servern in meinem Netzwerk abfragen? `
@djalexz:Habe noch zusätzlich einen Debian Server im Netzwerk, der ebenfalls in iobroker eingebunden werden soll. `
Bedingung für diese Art Auslesen ist, dass auf der jeweiligen Hardware ebenfalls ioBroker läuft.
Wenn das der Fall ist, wird dies Installation als slave (Multihost) eingebunden und die notwendigen Adapter (beim Server wohl eher nur js) auf dem slave installiert.
mit einem script kann dann der entsprechende Wert ausgelesen und beim Master in den Objekten angezeigt werden.
Gruß
Rainer
-
Vielen lieben Dank für die schnelle Hilfe.
Oh man da kann ich ja lange herumprobieren
Ok Multihost habe ich jetzt eingerichtet.
Der Master sieht den Slave (Server) und auf dem Server ist eine Instanz von JS installiert.
Wenn ich jetzt das Script für den status der HDD ausführe, kommen nur die Daten vom Master.
Wie kriege ich denn das Script für den Slave eingebunden?
Hoffe ihr wisst, was ich meine.
Mir fehlt der Bezug zum Slave in dem Script.
Danke nochmals.
LG
Alex
-
Hoffe ihr wisst, was ich meine. `
Oh ja!Aber Screenshots würden hier gewaltig helfen dir das zu erklären.
Ich versuche es mal:
@djalexz:auf dem Server ist eine Instanz von JS installiert. `
das reicht nicht! deswegen muss ja ioBroker auch auf dem slave laufen, damit DORT js ausgeführt wird.Auch auf dem slave muss eine Instanz sein (z.B. javascript.1), und auf der musst du das Skript starten.
Dazu musst du die ausführende Instanz im js-Menü auswählen:
http://www.iobroker.net/docu/?page_id=5 … st-Instanz
Gruß
Rainer
-
Hoffe ihr wisst, was ich meine. `
Oh ja!Aber Screenshots würden hier gewaltig helfen dir das zu erklären.
Ich versuche es mal:
@djalexz:auf dem Server ist eine Instanz von JS installiert. `
das reicht nicht! deswegen muss ja ioBroker auch auf dem slave laufen, damit DORT js ausgeführt wird.Auch auf dem slave muss eine Instanz sein (z.B. javascript.1), und auf der musst du das Skript starten.
Dazu musst du die ausführende Instanz im js-Menü auswählen:
http://www.iobroker.net/docu/?page_id=5 … st-Instanz
Gruß
Rainer ` Oh man… Das mit dem ausführende Instanz war der Schlüssel...
Vielen lieben Dank für die schnelle Hilfe.
Jetzt werde ich mal ein bisschen was herumspielen und ein eigenes vis aufbauen. [emoji16].
Schönen Sonntag noch.
LG Alex
Gesendet von meinem SM-G955F mit Tapatalk
-
Hallo!
Erst einmal vielen Dank, dass es den Thread hier gibt. Ich bin noch völliger Neuling - also verzeiht einige "dumme" Fragen
Als erstes ein Danke an ruhr70 für seine Javascript-Skripte !!
Ich hatte bisher einen RasPi 1 - naja, der kommt halt an seine Grenzen. Nun werkelt hier ein alter HP dc7900 ultraslim.
Mit dem rpi2.0 Adapter bekomme ich zwar einige Anzeigen:
~~![](</s><URL url=)http://meister-f.lima-city.de/iobrpi2.0-1.jpg" />
aber auch Fehler im log:
~~![](</s><URL url=)http://meister-f.lima-city.de/iobrpi2.0-2.jpg" />
Nun habe ich mal angefangen das erste Script zur CPU-Last von Rainer auszuprobieren - das brachte keinen Erfolg, da bei mir in Debian 9 die Ausgabe von TOP so aussieht:
~~![](</s><URL url=)http://meister-f.lima-city.de/iobtop-deb-1.jpg" />
CPU(s) wird hier in Debian also Cpu(s) geschrieben.
Dann klappt das auch (fast)
~~![](</s><URL url=)http://meister-f.lima-city.de/iob-cpuscript-1.jpg" />
Lieber Rainer - ich wollte Dich eigentlich fragen, ob wäre es Dir möglich wäre Deine Teilscripte in ein großes zu packen, was "vieles" ausliest, aber ich denke, Du hast immer alles, was zu einem exec-Befehl gehört in ein Script gepackt.
Deshalb eine andere Bitte - man kann doch in Linux auch so "reguläre Ausdrücke" basteln, die dann nach C + P oder p + U oder u + (s) fragen. Falls Du so etwas kannst, würde es Deine Scripte universell machen und vielleicht wird ein "Linux-Hardware Adapter draus?
… und - wie bekommt man die CPU-Last "grün" - also "bestätigt" auf "true" ?
Nochmals vielen Dank für Deine bisherige Arbeit!
… und wenn dann doch noch ein Script zur Temperaturanzeige kommen würde ….
Grüße
Jörg~~~~~~~~
-
Lieber Rainer - ich wollte Dich eigentlich fragen, ob wäre es Dir möglich wäre Deine Teilscripte in ein großes zu packen, was "vieles" ausliest, `
Nein, kann ich nicht, weil ich kein Javascript kannman kann doch in Linux auch so "reguläre Ausdrücke" basteln, die dann nach C + P oder p + U oder u + (s) fragen `
Mal mit dem Parser-Adapter versucht? Damit arbeite ich gerne.Falls Du so etwas kannst, würde es Deine Scripte universell machen und vielleicht wird ein "Linux-Hardware Adapter draus? `
Das ist seit Jahren mein Ziel, aber mit Javascript bin ich immer noch ganz am Anfanginzwischen gibt es aber https://github.com/frankjoke/ioBroker.systeminfo, den habe ich selber noch nicht getestet.
. und - wie bekommt man die CPU-Last "grün" - also "bestätigt" auf "true" ? `
Wenn du mir das Skript verlinkst, sehe ich mir das mal an.Gruß
Rainer
-
Hallo Reiner,
es ist das hier von Sven2013 verlinkte Script - ich habe nur CPU(s) und Cpu(s) geändert
http://forum.iobroker.net/viewtopic.php … =40#p57275
auch alle anderen Werte aller anderen Scripte der ersten zwei ? Seiten hier im Thread gehen in der Übersicht von Grün (Abfrage) auf ganz kurz schwarz und dann sofort rot zu werden.
Die Werte z.B. vom KM200-Adapter laufen grün durch, wenn sie aktualisiert werden und bleiben dann schwarz …
(aber so lang es funktioniert und nicht das LOG voll schreibt ....)
Grüße
Jörg
PS.: Danke, dass Du auch was zu history geschrieben hast, das brennt mir mehr unter den Nägeln
-
Sorry, das Skript übersteigt meine Fähigkeiten. Ich hätte da zwar eine Vermutung, aber da muss ein Skripter mal drüber schauen.
Wie du richtig beschrieben hast muss dem State ein ACK=true mitgegeben werden.
kann sein dass das dies hier ist:
setStateDelayed(idCPUlast,parseInt(stdout),100);
dann müsste hinter dem Wert noch ein ",1" rein (glaube ich)
setStateDelayed(idCPUlast,parseInt(stdout),100,1);
kann aber auch totaler Blödsinn sein!!!
Gruß
Rainer
-
@Doku:setStateDelayed (id, state, isAck, delay, clearRunning, callback) `
Also so:setStateDelayed(idCPUlast,parseInt(stdout),true,100);
-
Danke Paul!
war ich ja sooo falsch (von der Idee und der Zeile) ja nicht
Schöne Weihnachten
Rainer
-
@Doku:setStateDelayed (id, state, isAck, delay, clearRunning, callback) `
Also so:setStateDelayed(idCPUlast,parseInt(stdout),true,100); ```` `
Dann müsste das in allen von ruhr70 geposteten Scrips noch rein.
Bei den einfachen (CPU, Node-JS oder npm Version) steht die Zeile unten drin und selbst ich konnte das ändern.
In den anderen (Speicher, etc) müsste das an entsprechender Stelle auch noch rein - nur wo?
Grüße
Jörg
-
wenn Du Dir viel Arbeit ersparen willst…
schau Dir mal den neuen Adapter Sysinfo an.
nicht im Repro. Also im Forum suchen, über die Katze installieren.
Die meisten Werte sind schon voreingestellt. Der Adapter ersetzt bei mir einen großen Teil der Skripte und wird anstelle des Parser Adapter verwendet.
Gesendet von iPhone mit Tapatalk
-
Na toll, jetzt wollte ich hier ein CPU-Temperatur-Script einstellen (das ich nur durch Änderungen deines ersten Scriptes gebastelt habe).
Wer es trotzdem will:
(Es liest nur die Temperatur der ersten CPU aus und es muss lm-sensors installiert sein - apt-get install lm-sensors - also nur Linux-Rechner)
! ````
var pfad = "Systeminfos.host" + ".";
var cronStr = "*/1 * * * *";
! var abfrage = "sensors | grep 'Core 0:'|tail -n 1 | awk '{print $3}'";
! var idCPUTemperatur = pfad + 'CPU_Temperatur';
! createState(idCPUTemperatur, 0, {
name: 'CPU Temperatur',
desc: 'CPU Temperatur',
type: 'number',
unit: '° C',
role: 'value'
});! function abfrageCPU() {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
log(err,"error");
return;
}
//log(stdout);
setStateDelayed(idCPUTemperatur,parseInt(stdout),true,100);
});
}
! function abfragen() {
abfrageCPU();
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, abfragen);
! // main
// -----------------------------------------------------------------------------
function main() {
abfragen();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! setTimeout(main, 500);
! ````Ich habe Deinen anderen auch am Laufen - wenn Du da mal noch dieses "true" an der richtigen Stelle rein basteln könntest …
Ich habe darin die Zeile:
setStateDelayed(idCPUTemperatur,parseInt(stdout),true,100);
nicht gefunden.
zum neuen Adapter …. über die Katze ???
-
Ich habe Deinen anderen auch am Laufen - wenn Du da mal noch dieses "true" an der richtigen Stelle rein basteln könntest …
Ich habe darin die Zeile:
setStateDelayed(idCPUTemperatur,parseInt(stdout),true,100);
nicht gefunden. `
Wenn Du noch was anpassen willst…
Im Speicher Skript werden z.B. die Datenpunkte im setState() innerhalb dieser Funktion geschrieben:
function writeDp(arr) { var i = 0; for (var dp in datenpunkte) { var wert = parseInt(arr[i++]); setState(pfad + dp,wert); //log(dp+": "+ wert + " #" + typeof(wert)); } }
zum neuen Adapter …. über die Katze ??? `
Siehe Thread: http://forum.iobroker.net/viewtopic.php … nfo#p97813
Dort steht der Link zum Adapter auf Github.
Die Github Katze findest Du im Admin/Adapter. Das dritte Icon oben von Links.
Dann den Tab "beliebig" auswählen, dort in das Feld URL den Github-Linl reinkopieren.
Dann taucht der Adapter unter Adapter auf und Du kannst in mit dem Plus in der rechten Spalte zu den Instanzen hinzufügen.
-
aha - Danke
setStateDelayed(idCPUTemperatur,parseInt(stdout),true,100);
` > Wenn Du noch was anpassen willst…
Im Speicher Skript werden z.B. die Datenpunkte im setState() innerhalb dieser Funktion geschrieben:
function writeDp(arr) { var i = 0; for (var dp in datenpunkte) { var wert = parseInt(arr[i++]); setState(pfad + dp,wert); //log(dp+": "+ wert + " #" + typeof(wert)); ```` `
sollte dann also:
function writeDp(arr) { var i = 0; for (var dp in datenpunkte) { var wert = parseInt(arr[i++]); setState(pfad + dp,wert,true,100); //log(dp+": "+ wert + " #" + typeof(wert));
sein, oder ohne die 100 ?
Ich habe es probiert und setState(pfad + dp,wert,true); lässt die Werte grün - dann schwarz erscheinen.
Bei dem neuen Adapter gibt es den Pfad zur Systemtemperatur auf meinem debian 9 nicht - also da steht nichts unter
/sys/class/thermal/thermalzone ….
(aber dann später mal in dem Thread)
-
sein, oder ohne die 100 ? `
Ohne die 100.
Siehe https://github.com/ioBroker/ioBroker.ja … d#setstate
setState (id, state, ack, callback)
-
Uptime ioBroker (oben war es die Updike vom Linux Host):
!
// system.host.ubuntu1604server.uptime ! var pfad = "Systeminfos.ioBroker" + "."; var idState = "uptime"; ! createState(pfad + idState, 0, { name: 'ioBroker uptime', desc: 'ioBroker uptime', type: 'number', unit: '', role: 'value' }); ! on({id:"system.host.ubuntu1604server.uptime",change:'any'}, function (obj) { setState(pfad + idState,Math.floor((obj.newState.val/3600)/24)); }); ! // main // ----------------------------------------------------------------------------- function main() { // } ! // Start Skript: // ----------------------------------------------------------------------------- ! setTimeout(main, 500); !
`Huhu zusammen.
Kann man dieses Script noch erweitern, so dass neben den Tagen auch die Stunden und Minuten ausgegeben werden? Format wie "5T. 19:24" (also 5 Tage, 19 Stunden, 24 Minuten). habe schon versucht ein wenig herumzubasteln, aber bekomme es einfach nicht hin. Über Google habe ich zwar ein paar Sachen zur Umrechnung gefunden, bekomme sie aber nicht richtig in den Code reingepackt.
MfG,
Tobi
-
Huhu zusammen.
Kann man dieses Script noch erweitern, so dass neben den Tagen auch die Stunden und Minuten ausgegeben werden? Format wie "5T. 19:24" (also 5 Tage, 19 Stunden, 24 Minuten). habe schon versucht ein wenig herumzubasteln, aber bekomme es einfach nicht hin. Über Google habe ich zwar ein paar Sachen zur Umrechnung gefunden, bekomme sie aber nicht richtig in den Code reingepackt.
MfG,
Tobi `
probier mal:
// system.host.ubuntu1604server.uptime var pfad = "Systeminfos.ioBroker" + "."; var idState = "uptime"; var idStateStr = "uptimeStr"; createState(pfad + idState, 0, { name: 'ioBroker uptime', desc: 'ioBroker uptime', type: 'number', unit: '', role: 'value' }); createState(pfad + idStateStr, "init", { name: 'ioBroker uptime als String', desc: 'ioBroker uptime als String', type: 'string', unit: '', role: 'value' }); function dauerStr(sek) { var tage = Math.floor(sek / (24*3600)); var stunden = Math.floor((sek % (24*3600))/3600); var minuten = Math.floor((sek % (3600))/60); var sekunden = Math.floor(sek % 60); return tage.toString()+"d "+stunden.toString()+"h "+minuten.toString()+"m "+sekunden.toString()+"s"; } on({id:"system.host.ubuntu1604server.uptime",change:'any'}, function (obj) { setState(pfad + idState,Math.floor((obj.newState.val/3600)/24)); setState(pfad + idStateStr,dauerStr(obj.newState.val)); }); // main // ----------------------------------------------------------------------------- function main() { // } // Start Skript: // ----------------------------------------------------------------------------- setTimeout(main, 500);
[EDIT] 2. createState, type auf "string" geändert.
-
Wow, klasse. Vielen Dank. Funzt 1A