den Link im iobroker Forum find ich grade nicht, aber hier ist das Script um Weatherman oder Pulsecounter mit iobroker zu lesen.
Pfadname und IP Adresse anpassen und fertisch:
Code: Alles auswählen
var request = require("request");
var pfad = "PUSLCOUNTER" + ".";
var url = 'http://192.168.178.30/?json:';
// TODO:
//
function timeLastData() {
return formatDate(new Date(), "DD.MM, hh:mm:ss");
}
function parseJson(text) {
if (text === "") return {};
try {
json = JSON.parse(text);
} catch (ex) {
json = {};
}
if(!json) json = {};
return json;
}
function readJson(url, callback) {
request(url, function (err, state, body){
if (body) {
var json = parseJson(body);
callback(null, json);
} else {
var error = "(" + err + ") ERROR bei Abfrage von: " + url;
log(error, "warn");
callback(error, null);
}
});
}
function readVars() {
readJson(url, function(err,json) {
if(!err) {
var myJson = json;
var dPname, init;
var anzahlVars = myJson.vars.length;
for (var i = 1; i < anzahlVars; i++) {
dPname = pfad + myJson.vars[i].homematic_name;
init = myJson.vars[i].value;
setState(dPname, init);
}
for (var systeminfo in myJson.Systeminfo) {
dPname = pfad + "Systeminfo." + systeminfo;
init = myJson.Systeminfo[systeminfo];
setState(dPname, init);
}
setState(pfad + "LetzteAbfrage",timeLastData());
var statusNe = getState(pfad + "Last_State_Count").val;
if (statusNe < 0) {
setState(pfad + "Last_State_Count",0);
} else {
setState(pfad + "Last_State_Count",statusNe + 1);
}
log("WIFFI Daten aktualisiert: " + url,"debug");
} else {
log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
if (statusNe > 0) {
setState(pfad + "Last_State_Count",0);
} else {
setState(pfad + "Last_State_Count",statusNe - 1);
}
}
});
}
function createDpFromJson(myJson) {
var dpname = "";
var name = "";
var forceCreation = true;
var common;
var init;
var type, desc, unit;
var anzahlVars = myJson.vars.length;
for (var i = 1; i < anzahlVars; i++) {
dPname = pfad + myJson.vars[i].homematic_name;
init = myJson.vars[i].value;
type = myJson.vars[i].type;
desc = myJson.vars[i].desc;
name = desc;
unit = myJson.vars[i].unit.replace('grad','°');
common = '{"desc":"' + desc + '","type":"' + type + '","unit":"' + unit + '","role":"value"' +',"name":"' + name + '"}';
common = JSON.parse(common);
createState(dPname, init , forceCreation, common);
//createState(dPname, init);
log("neuer Datenpunkt: " + dPname + ": " + init +", common: " + common,"info");
}
for (var systeminfo in myJson.Systeminfo) {
dPname = pfad + "Systeminfo." + systeminfo;
init = myJson.Systeminfo[systeminfo];
common = '{"name":"'+systeminfo+'","desc":"'+systeminfo+'","role":"value"}';
common = JSON.parse(common);
log("neuer Datenpunkt: " + dPname + ": " + init +", common: " + common,"info");
createState(dPname, init , forceCreation, common);
}
createState(pfad + "System.Modultyp",myJson.modultyp);
createState(pfad + "System.url",url.replace("json:","xpert:0:"));
createState(pfad + "Last_State_Count",0,true);
createState(pfad + "LetzteAbfrage" ,timeLastData());
createState(pfad + "Skriptstart" ,timeLastData()),true;
createState(pfad + "Control_GetData",false,true, {"name":"Daten mit true manuell abrufen","type":"boolean","role":"value"});
}
function createDp() {
readJson(url, function (err,json) {
if(!err) {
var myJson = json;
createDpFromJson(myJson);
log("PULSCOUNTER Datenpunkte angelegt/aktualisiert");
} else {
log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","error");
log("Keine Datenpunkte angelegt. Skript beendet","error");
return;
}
});
}
function createOn() {
var dpId = "javascript." + instance + "." + pfad + "Control_GetData";
on({id: dpId ,change:'any'}, function (obj) {
log(obj.state.val,"warn");
if(obj.state.val) {
readVars();
}
});
schedule("*/30 * * * * *", function () { // jede Minute die Werte abfragen
readVars();
});
}
function main() {
readVars();
}
// Skriptstart
createDp();
setTimeout(createOn, 3000);
setTimeout(main, 3000);