NEWS
[gelöst] Leistungswerte der Hardware auslesen und anzeigen
-
Hallo Ruhr70,
ich habe die Zeile gelöscht, der Fehler bleibt jedoch…
hier nochmal das geänderte Script:
! // scriptEnabled wird von anderen Skripten verwendet:
! // …
! request = require('request');
! var url ="http://192.168.178.40/api/newdeveloper";
! var timeout = 3000;
! var pfad = "Systeminfos.hue" + "."; // Pfad Systeminfos zur hue Bridge
! var cronStr = "*/30 * * * ";
! var idUpdateAv = pfad + 'Bridge_Update_Verfügbar';
! var idUpdateLights = pfad + 'Lights_Update_Anzahl';
! var idUpdateSensors = pfad + 'Sensors_Update_Anzahl';
! var idZigbeeChannel = pfad + 'Zigbee_Channel';
! var idSWVersion = pfad + 'Bride_SW_Version';
! var idApiVersion = pfad + 'Bride_API_Version';
! var idHueStatusBool = pfad + 'Status_http_bool';
! createState(idHueStatusBool, false, {
! name: 'Status Webseite hue bool',
! desc: 'Status Webseite hue bool',
! type: 'boolean',
! unit: '',
! role: 'value'
! });
! createState(idUpdateAv, false, {
! name: 'Update für die hue Bridge verfügbar',
! desc: 'Update für die hue Bridge verfügbar',
! type: 'boolean',
! unit: '',
! role: 'value'
! });
! createState(idUpdateLights, 0, {
! name: 'Anzahl hue Lights mit Update',
! desc: 'Anzahl hue Lights mit Update',
! type: 'number',
! unit: '',
! role: 'value'
! });
! createState(idUpdateSensors, 0, {
! name: 'Anzahl hue Senosrs mit Update',
! desc: 'Anzahl hue Sensors mit Update',
! type: 'number',
! unit: '',
! role: 'value'
! });
! createState(idZigbeeChannel, 0, {
! name: 'Zigbee Channel',
! desc: 'Zigbee Channel',
! type: 'number',
! unit: '',
! role: 'value'
! });
! createState(idSWVersion, "init", {
! name: 'hue Bridge SW Version',
! desc: 'hue Bridge SW Version',
! type: 'string',
! unit: '',
! role: 'value'
! });
! createState(idApiVersion, "init", {
! name: 'hue Bridge API Version',
! desc: 'hue Bridge API Version',
! type: 'string',
! unit: '',
! role: 'value'
! });
! var options = {
! url: url= url,
! timeout: timeout,
! headers: {
! 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
! }
! };
! function readWeb(url) {
! try {
! request(options, function (error, response, body) {
! if (!error && ('' + response.statusCode).match(/^2\d\d$/)) { // kein Fehler (2xx), Inhalt in body
! log(response.statusCode);
! json = JSON.parse(body);
! var sWVersion = json.config.swversion;
! var apiVersion = json.config.apiversion;
! var updateStatus = json.config.swupdate.updatestate;
! var zigbeeChannel = json.config.zigbeechannel;
! var updateAvailable = false;
! var updateBridge = false;
! var updateLights = 0;
! var updateSemsors = 0;
! if (updateStatus > 1) {
! updateAv = json.config.swupdate.devicetypes.bridge;
! updateLights = json.config.swupdate.devicetypes.lights.length;
! updateSemsors = json.config.swupdate.devicetypes.sensors.length;
! updateAvailable = true;
! }
! /
! log(updateBridge);
! log(sWVersion);
! log(apiVersion);
! log(updateLights);
! log(updateSemsors);
! /
! setState(idUpdateAv ,updateAvailable);
! setState(idApiVersion ,apiVersion);
! setState(idSWVersion ,sWVersion);
! setState(idUpdateLights ,updateLights);
! setState(idUpdateSensors ,updateSemsors);
! setState(idZigbeeChannel ,zigbeeChannel);
! setState(idHueStatusBool ,true);
! } else { // Fehler bei der Abfrage der CUxD Webseite
! //log("StatusCode="+response.statusCode);
! log("ERROR CODE: " + error.code + " ################");
! // EHOSTUNREACH, ETIMEDOUT
! if (!error) {
! log("response.statusCode: " + response.statusCode);
! } else {
! //
! }
! log(error,'error');
! setState(idHueStatusBool ,false);
! /
! setTimeout(function(l) { // bei Fehler jede Stunde abfragen
! readWeb(url);
! },3600000);
! */
! }
! });
! } catch (error) {
! log('Fehler (try) leseWebseite: ' + error, 'error');
! }
! }
! // regelmässige Wiederholungen
! // -----------------------------------------------------------------------------
! schedule(cronStr, function () {
! readWeb(url);
! });
! // main
! // -----------------------------------------------------------------------------
! function main() {
! readWeb(url);
! }
! // Start Skript:
! // -----------------------------------------------------------------------------
! setTimeout(main, 500);Hier der Fehler:
! host.cubieboard4 2017-03-08 00:00:50.242 error instance system.adapter.javascript.1 terminated with code 0 (OK)
! javascript.1 2017-03-08 00:00:50.074 error at emitNone (events.js:72:20)
! javascript.1 2017-03-08 00:00:50.074 error at IncomingMessage.g (events.js:260:16)
! javascript.1 2017-03-08 00:00:50.074 error at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1001:12)
! javascript.1 2017-03-08 00:00:50.074 error at Request.emit (events.js:169:7)
! javascript.1 2017-03-08 00:00:50.074 error at emitOne (events.js:77:13)
! javascript.1 2017-03-08 00:00:50.074 error at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1081:10)
! javascript.1 2017-03-08 00:00:50.074 error at Request.emit (events.js:172:7)
! javascript.1 2017-03-08 00:00:50.074 error at emitTwo (events.js:87:13)
! javascript.1 2017-03-08 00:00:50.074 error at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:186:22)
! javascript.1 2017-03-08 00:00:50.074 error at Request._callback (script.js.Servicedaten.Abfrage_HUE_Bridge:103:50)
! javascript.1 2017-03-08 00:00:50.074 error TypeError: Cannot read property 'swversion' of undefined
! javascript.1 2017-03-08 00:00:50.066 error uncaught exception: Cannot read property 'swversion' of undefined -
Ich schätze mal, dass Du kein son zurückbekommst und dadurch diese Zeilen einen Fehler erzeugen:
json = JSON.parse(body); var sWVersion = json.config.swversion;
Ich überlege, wie ich das abfangen kann.
Unabhängig davon.
Bekommst Du denn ein JSON im Browser angezeigt, wenn Du in der Adresszeile http://192.168.178.40/api/newdeveloper eingibst?
-
Hallo dann bekomme ich leider nur:
[{"error":{"type":1,"address":"/","description":"unauthorized user"}}]
Wie kann ich das ändern?
Gruß
-
Du brauchst einen Usernamen auf der hue Bridge.
Ich habe schon recht früh mit der hue Bridge rumgespielt. Da konnte man User mit Klarnamen anlengen und newdeveloper war ein Standarduser.
Wo ich Deine Fehlermeldung sehe, meine ich mich zu erinnern, dass Philips das ab irgendeiner Firmware verhindert. D.h., Du musst einen User auf der Bridge anlegen, siehe:
https://www.developers.meethue.com/docu … ng-started
Den von der Bridge vergebenen Usernamen musst Du dann in der URL verwenden, anstelle von newdeveloper.
Ich habe Deine Infos genutzt und noch Fehler abgefangen (User nicht bekannt, keine Daten von der Bridge).
Neues Skript:
! ````
// liest die Philips hue Bridge aus, ob eine neue Firmware verfügbar ist oder Updates für die angeschalteten Lampen
// ein User muss in der Bridge angelegt werden (hier ist es newdeveloper)
// siehe dazu: https://www.developers.meethue.com/documentation/getting-started
! // url anpassen: eigene ip und "newdeveloper" ggf. eigener User, wenn newdeveloper nicht funktioniert
! request = require('request');
! var url ="http://172.16.130.126/api/newdeveloper";
var timeout = 3000;
! var pfad = "Systeminfos.hue" + "."; // Pfad Systeminfos zur hue Bridge
var cronStr = "*/30 * * * *";
! var idUpdateAv = pfad + 'Bridge_Update_Verfügbar';
var idUpdateLights = pfad + 'Lights_Update_Anzahl';
var idUpdateSensors = pfad + 'Sensors_Update_Anzahl';
var idZigbeeChannel = pfad + 'Zigbee_Channel';
! var idSWVersion = pfad + 'Bride_SW_Version';
var idApiVersion = pfad + 'Bride_API_Version';
! var idHueStatusBool = pfad + 'Status_http_bool';
! createState(idHueStatusBool, false, {
name: 'Status Webseite hue bool',
desc: 'Status Webseite hue bool',
type: 'boolean',
unit: '',
role: 'value'
});
! createState(idUpdateAv, false, {
name: 'Update für die hue Bridge verfügbar',
desc: 'Update für die hue Bridge verfügbar',
type: 'boolean',
unit: '',
role: 'value'
});
! createState(idUpdateLights, 0, {
name: 'Anzahl hue Lights mit Update',
desc: 'Anzahl hue Lights mit Update',
type: 'number',
unit: '',
role: 'value'
});
! createState(idUpdateSensors, 0, {
name: 'Anzahl hue Senosrs mit Update',
desc: 'Anzahl hue Sensors mit Update',
type: 'number',
unit: '',
role: 'value'
});
! createState(idZigbeeChannel, 0, {
name: 'Zigbee Channel',
desc: 'Zigbee Channel',
type: 'number',
unit: '',
role: 'value'
});
! createState(idSWVersion, "init", {
name: 'hue Bridge SW Version',
desc: 'hue Bridge SW Version',
type: 'string',
unit: '',
role: 'value'
});
! createState(idApiVersion, "init", {
name: 'hue Bridge API Version',
desc: 'hue Bridge API Version',
type: 'string',
unit: '',
role: 'value'
});
! var options = {
url: url= url,
timeout: timeout,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
}
};
! function readWeb(url) {
try {
request(options, function (error, response, body) {
if (!error && ('' + response.statusCode).match(/^2\d\d$/)) { // kein Fehler (2xx), Inhalt in body
log(response.statusCode);if(!body || body.match("unauthorized user")) return log("User in der Bridge nciht bekannt. Bitte einrichten.","warn"); if(!body || !body.match("swversion")) return log("keine Daten von der hue gelesen","warn"); json = JSON.parse(body); var sWVersion = json.config.swversion; var apiVersion = json.config.apiversion; var updateStatus = json.config.swupdate.updatestate; var zigbeeChannel = json.config.zigbeechannel;
! var updateAvailable = false;
var updateBridge = false;
var updateLights = 0;
var updateSemsors = 0;if (updateStatus > 1) { updateAv = json.config.swupdate.devicetypes.bridge; updateLights = json.config.swupdate.devicetypes.lights.length; updateSemsors = json.config.swupdate.devicetypes.sensors.length; updateAvailable = true; }
! /*
log(updateBridge);
log(sWVersion);
log(apiVersion);
log(updateLights);
log(updateSemsors);
*/
! setState(idUpdateAv ,updateAvailable);
setState(idApiVersion ,apiVersion);
setState(idSWVersion ,sWVersion);
setState(idUpdateLights ,updateLights);
setState(idUpdateSensors ,updateSemsors);
setState(idZigbeeChannel ,zigbeeChannel);
setState(idHueStatusBool ,true);} else { // Fehler bei der Abfrage der CUxD Webseite //log("StatusCode="+response.statusCode); log("ERROR CODE: " + error.code + " ################"); // EHOSTUNREACH, ETIMEDOUT if (!error) { log("response.statusCode: " + response.statusCode); } else { // } log(error,'error'); //setState(idUpdateAv,"Fehler"); setState(idHueStatusBool ,false); /* setTimeout(function(l) { // bei Fehler jede Stunde abfragen readWeb(url); },3600000); */ } }); } catch (error) { log('Fehler (try) leseWebseite: ' + error, 'error'); }
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, function () {
readWeb(url);
});
! // main
// -----------------------------------------------------------------------------
function main() {
readWeb(url);
}
! // Start Skript:
// -----------------------------------------------------------------------------
setTimeout(main, 500);
! ```` -
Hey wow ,
Danke. So früh schon so viel gearbeitet. Ich probiere es nachher aus und sage Bescheid.
Bis dahin vielen Dank.
Gesendet von iPhone mit Tapatalk
-
Hallo zusammen
ich habe den User wie in der Anleitung auf der HUE Bridge angelegt und es funktioniert jetzt wunderbar. Aber du hast noch einen kleinen kosmetischen Fehler in deinem Script
var idUpdateSensors = pfad + 'Sensors_Update_Anzahl';
var idZigbeeChannel = pfad + 'Zigbee_Channel';
var idSWVersion = pfad + 'Bridge_SW_Version';
var idApiVersion = pfad + 'Bridge_API_Version'; `
Gruß
Adrian
-
Danke. So früh schon so viel gearbeitet. Ich probiere es nachher aus und sage Bescheid. `
Na ja… das waren nur zwei zusätzliche Zeilen.
Aber schau mal unten zum Thema User.
Aber du hast noch einen kleinen kosmetischen Fehler in deinem Script
> var idSWVersion = pfad + 'Bridge_SW_Version';
`Ups… :roll: danke
Ändert ich in meinem System mal, wenn es eine Suche über alle Skripts gibt :lol: :mrgreen:
was mir noch eingefallen ist...
Habt Ihr nicht eigentlich schon einen User eingerichtet?
In der Konfiguration vom Adapter wird doch auch danach gefragt:
-
Die Infos einmal in VIS dargestellt:
-
Hallo…
perfekt, user angelegt und nun geht das Script zu 100%. Vielen dank dafür, einfach toll dieses Forum.
Gruß Sven
-
Kann nochmal jemand etwas zu diesem script sagen?
! var pfad = "Systeminfos.host" + ".";
! var cronStr = "*/1 * * * *";
! var abfrage = "top -d 1 -b -n2 | grep 'CPU(s)'|tail -n 1 | awk '{print $2 + $3 + $4}'";
! var idCPUlast = pfad + 'CPU_Last';
! createState(idCPUlast, 0, {
! name: 'CPU Last',
! desc: 'CPU Last',
! type: 'number',
! unit: '%',
! role: 'value'
! });
! function abfrageCPU() {
! exec(abfrage, function(err, stdout, stderr) {
! if (err) {
! log(err,"error");
! return;
! }
! //log(stdout);
! setStateDelayed(idCPUlast,parseInt(stdout),100);
! });
! }
! function abfragen() {
! abfrageCPU();
! }
! // regelmässige Wiederholungen
! // –---------------------------------------------------------------------------
! schedule(cronStr, abfragen);
! // main
! // -----------------------------------------------------------------------------
! function main() {
! abfragen();
! }
! // Start Skript:
! // -----------------------------------------------------------------------------
! setTimeout(main, 500);Hier steht in der angelegten variable "null%" . Diese ändert sich nicht. Ich nutze ein Cubieboard, hat das vielleicht damit zu tuen?
Gruß Sven
-
Am Besten den Rainer fragen. Das Kommando stammt von ihm. Keine Ahnung, was da abgefragt wird.
Und zum Test einfach mal in der Konsole eingeben:
top -d 1 -b -n2 | grep 'CPU(s)'|tail -n 1 | awk '{print $2 + $3 + $4}'
Ich denke, dass Du keine Antwort erhält. Also passt die Abfrage nicht für Diene Umgebung.
Vielleicht kann er Rainer das für Dich anpassen.
-
Am Besten den Rainer fragen. Das Kommando stammt von ihm. Keine Ahnung, was da abgefragt wird.
Und zum Test einfach mal in der Konsole eingeben:
top -d 1 -b -n2 | grep 'CPU(s)'|tail -n 1 | awk '{print $2 + $3 + $4}'
Ich denke, dass Du keine Antwort erhält. Also passt die Abfrage nicht für Diene Umgebung.
Vielleicht kann er Rainer das für Dich anpassen. `
Und das als Linux-NoobDieser Teil liest den Header aus, der zu sehen ist wenn man top aufruft.
Dort extrahiert er die CPU-Auslastung (nicht LOAD!) von Prozessen durch User ($2), System ($3) und nice (?) ($4)
Wahrscheinlich ist bei dir die Schreibweise des Wortes CPU(s) so wie bei mir, ändere es mal in Cpu(s).
Wenn das nicht klappt, mach mal bitte einen Screenshot des Aufrufs "top"
Gruß
Rainer
-
Danke Rainer,
du bist ein HELD! Das war die Lösung. Cpu(s) da wäre ich nie drauf gekommen.
Vielen vielen Dank.
Gruß Sven
-
Kann nochmal jemand etwas zu diesem script sagen?
! var pfad = "Systeminfos.host" + ".";
! var cronStr = "*/1 * * * *";
! var abfrage = "top -d 1 -b -n2 | grep 'CPU(s)'|tail -n 1 | awk '{print $2 + $3 + $4}'";
! var idCPUlast = pfad + 'CPU_Last';
! createState(idCPUlast, 0, {
! name: 'CPU Last',
! desc: 'CPU Last',
! type: 'number',
! unit: '%',
! role: 'value'
! });
! function abfrageCPU() {
! exec(abfrage, function(err, stdout, stderr) {
! if (err) {
! log(err,"error");
! return;
! }
! //log(stdout);
! setStateDelayed(idCPUlast,parseInt(stdout),100);
! });
! }
! function abfragen() {
! abfrageCPU();
! }
! // regelmässige Wiederholungen
! // –---------------------------------------------------------------------------
! schedule(cronStr, abfragen);
! // main
! // -----------------------------------------------------------------------------
! function main() {
! abfragen();
! }
! // Start Skript:
! // -----------------------------------------------------------------------------
! setTimeout(main, 500);Hier steht in der angelegten variable "null%" . Diese ändert sich nicht. Ich nutze ein Cubieboard, hat das vielleicht damit zu tuen?
Gruß Sven `
Am brix 3150 laeuft es ohne Anpassungen. Danke dafuer! -
Ich denke dass es nicht unbedingt mit der Hardware zusammenhängt sondern eher mit dem Betriebssystem.
@lobomau: hast du auch ubuntu wie ruhr70?
Gruß
Rainer
-
-
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);
Diese Script will noch nicht so richtig bei mir. Zeigt immer den Wert 0 an. Habe auch mal die "/24" weggenommen für den Fall, dass alle 24h iobroker neustartet (was es nicht tut).
Sieht das Objekt nicht etwas mager aus? Beim uptime host gibt es noch ein custom Feld darunter:
Unit: Tag(e) habe ich händisch hinzugefügt. -
Hallo Reiner,
mittlerweile ist ja ein ganz schönes Sammelsorium zusammengekommen.
Du hast in deiner ersten Antwort angeboten, die Views und Widgets zu posten.
Steht dieses Angebot noch ?
Grüße und Danke
Ingo
-
Du hast in deiner ersten Antwort angeboten, die Views und Widgets zu posten.
Steht dieses Angebot noch ? `
Aber sicher
ich dachte das hätte sich durch die anderen Posts erledigt.
Mache ich, wenn ich zu Hause bin.
Gruß
Rainer
-
alles gut, Reiner, mach keinen Stress.
Anbei mal ein Bild von meinen Systemdaten für das 10"-Tab, möchte dies vielleicht noch ein wenig aufhübschen.
IoBroker hat mich voll gepackt !
Unter Homematic sieht man 4 Servicemeldungen - stecke gerade im Heizungsumbau.
Vielen Dank im voraus
Grüße Ingo
1519_2017-04-03__10_.png