@Siko @da_Woody @metaxa
Soo... Ihr wollt wissen, woher die Datenpunkte für die Instanzen kommen - nun gut: Einige Datenpunkte sind total einfach unter system.adapter.[adaptername].[instanz] zu finden, aber das kennt ihr alle bestimmt.
Die Logeinträge bekomme ich aus dem Logparser, aber das ist bestimmt auch nicht das Problem.
Ihr wollt bestimmt wissen, woher ich die Versionen der installierte Adapter usw. haben... Dafür habe ich ein Javascript gebaut. Das Ding läuft bei mir 2 mal am Tag (02:35 und 14:35) und holt sich alle Daten aus dem Netz. Man muss nur noch die installierte Adaptern und den Host-Link angeben.
const semver = require('semver');
/** AB HIER BEARBEITEN */
//Bezeichung der installierte Adaptern
const installierteAdapter = ["js-controller", "admin", "info"];
//Den richtigen Host angeben
const controller = "system.host.prod-ioBroker";
schedule("35 2,14 * * *", function () {
doIt();
});
/** AB HIER NICHTS MEHR MACHEN*/
async function doIt(){
await startInstanzenRead();
await wait(10000);
checkUpdate();
}
function getPosition(string, subString, index) {
return string.split(subString, index).join(subString).length;
}
async function startInstanzenRead(){
try {
require("request")('https://raw.githubusercontent.com/ioBroker/ioBroker.repositories/master/sources-dist-stable.json', async function (error, response, result) {
const stableList = (function () { try {return JSON.parse(result);} catch(e) {return {};}})();
installierteAdapter.forEach(async function(adapter) {
//stable version
createState("0_userdata.0.Instanzen.stable." + adapter, async function () {
setState("0_userdata.0.Instanzen.stable." + adapter, stableList[adapter]?stableList[adapter].version:"not stable", true);
});
//latest version
try {
require("request")('https://api.npms.io/v2/package/iobroker.' + adapter, async function (error, response, result) {
const latestList = (function () { try {return JSON.parse(result);} catch(e) {return {};}})();
createState("0_userdata.0.Instanzen.latest." + adapter, async function () {
setState("0_userdata.0.Instanzen.latest." + adapter, latestList.collected.metadata.version, true);
});
}).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
//installed version
getObject (adapter === "js-controller" ? controller : 'system.adapter.' + adapter + '.0', async function (err, obj) {
createState("0_userdata.0.Instanzen.installiert." + adapter, async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter, adapter === "js-controller" ? obj.common.installedVersion : obj.common.version, true);
//github version
let lastestLink;
if(adapter === "js-controller"){
lastestLink = "https://raw.githubusercontent.com/ioBroker/ioBroker.js-controller/master/io-package.json";
}else{
lastestLink = obj.common.extIcon;
lastestLink = lastestLink.slice(0, getPosition(lastestLink, "/", 6) + 1);
lastestLink = lastestLink + "io-package.json";
}
try {
require("request")(lastestLink, async function (error, response, result) {
const gitList = (function () { try {return JSON.parse(result);} catch(e) {return {};}})();
createState("0_userdata.0.Instanzen.github." + adapter, async function () {
setState("0_userdata.0.Instanzen.github." + adapter, gitList.common.version, true);
});
}).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
});
});
});
}).on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
};
async function checkUpdate(){
installierteAdapter.forEach(async function(adapter) {
const installed = getState("0_userdata.0.Instanzen.installiert." + adapter).val;
const stableVersion = getState("0_userdata.0.Instanzen.stable." + adapter).val;
const latestVersion = getState("0_userdata.0.Instanzen.latest." + adapter).val;
const githubVersion = getState("0_userdata.0.Instanzen.github." + adapter).val;
//gibt es ein Update?
if (installed != stableVersion && installed != latestVersion && installed != githubVersion) {
createState("0_userdata.0.Instanzen.installiert." + adapter + "-update", async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter + "-update", '#009900', true);
//welche Version kann installiert werden?
createState("0_userdata.0.Instanzen.installiert." + adapter + "-update-version", async function () {
let updateVersion = "";
try{semver.lt(installed, stableVersion) && (updateVersion = stableVersion)} catch (e) {}
if(updateVersion === ""){
try{semver.lt(installed, latestVersion) && (updateVersion = latestVersion)} catch (e) {}
}
if(updateVersion === ""){
try{semver.lt(installed, githubVersion) && (updateVersion = githubVersion)} catch (e) {}
}
setState("0_userdata.0.Instanzen.installiert." + adapter + "-update-version", updateVersion, true);
});
});
} else {
createState("0_userdata.0.Instanzen.installiert." + adapter + "-update", async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter + "-update", '', true);
createState("0_userdata.0.Instanzen.installiert." + adapter + "-update-version", async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter + "-update-version", "", true);
});
});
}
//ist Adapter in eine nicht stable Version installiert?
try{
if(semver.gt(installed, stableVersion)){
createState("0_userdata.0.Instanzen.installiert." + adapter + "-beta", async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter + "-beta", true, true);
});
}else{
createState("0_userdata.0.Instanzen.installiert." + adapter + "-beta", async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter + "-beta", false, true);
});
}
} catch (e) {
createState("0_userdata.0.Instanzen.installiert." + adapter + "-beta", async function () {
setState("0_userdata.0.Instanzen.installiert." + adapter + "-beta", true, true);
});
}
});
}
doIt();
Alle Ergebnisse werden dann unter 0_userdata.0.Instanzen gepeichert: