Das Skript zur Überwachung der Repo:
! ```
`// fragt die angebotenen Updates von ioBroker ab
// Abfrage dauert etwas (ca. 1 Minute)
//
// Repository muss in den ioBroker Einstellungen richtig gepflegt sein
! var logOn = false; // Logausgabe im Skript
var forecreation = false; // true: Datenpunkte werden überschrieben (ween z.B. Bezeichnungen geändert wurden)
! var pfad = "Systeminfos.iobroker" + "."; // Pfad in dem die Datenpunkte angelegt werden
! // Datenpunktnamen:
var idListOK = pfad + 'update_liste_verfuegbar';
var idUpdateList = pfad + "update_liste";
var idUpdateCount = pfad + "Adapter_updates";
var idStatusTime = pfad + "status_datum";
var idAvailableCount = pfad + "Adapter_verfuegbar";
var idInstalledCount = pfad + "Adapter_installiert";
var idAktivRepo = pfad + "Repo_aktiv";
var idAktivRepoUrl = pfad + "Repo_url";
! // regelmässige Wiederholungen der Abfrage
var cronStr = "57 */2 * * *";
! var abfrageUpdates = 'iobroker update';
var abfrageRepo = 'iobroker repo';
! var test = 'Adapter "javascript" : 3.2.8 , installed 3.2.6 [Updateable]';
! // -----------------------------------------------------------------------------
! // Error: 404: Not Found
// ohne Updates
! createState(idListOK, false, forecreation, {
name: 'iobroker update Liste konnte gelesen werden',
desc: 'iobroker update Liste konnte gelesen werden',
type: 'boolean',
unit: '',
role: 'value'
});
! createState(idUpdateList, "initalisiert", forecreation, {
name: 'Liste der verfügbaren Updates',
desc: 'Liste der verfügbaren Updates',
type: 'string',
unit: '',
role: 'value'
});
! createState(idUpdateCount, 0, forecreation, {
name: 'Anzahl verfügbarer Updates',
desc: 'Anzahl verfügbarer Updates der installierten Adapter',
type: 'number',
unit: '',
role: 'value'
});
! createState(idAvailableCount, 0, forecreation, {
name: 'Anzahl verfügbarer Adapter',
desc: 'Anzahl verfügbarer Adapter',
type: 'number',
unit: '',
role: 'value'
});
! createState(idInstalledCount, 0, forecreation, {
name: 'Anzahl installierter Adapter',
desc: 'Anzahl installierter Adapter',
type: 'number',
unit: '',
role: 'value'
});
! createState(idStatusTime, now(), forecreation, {
name: 'Zeitpunkt der letzten Statusabfrage',
desc: 'Zeitpunkt der letzten Statusabfrage',
type: 'string',
unit: '',
role: 'value'
});
! createState(idAktivRepo, "initalisiert", forecreation, {
name: 'Als aktiv eingestelltes Repo',
desc: 'ZAls aktiv eingestelltes Repo',
type: 'string',
unit: '',
role: 'value'
});
! createState(idAktivRepoUrl, "initalisiert", forecreation, {
name: 'url des aktiven Repo',
desc: 'url des aktiven Repo',
type: 'string',
unit: '',
role: 'value'
});
! // -----------------------------------------------------------------------------
! function now() {
return formatDate(new Date(), "hh:mm:ss, YYYY-MM-DD");
}
! function writeJson(json) {
return JSON.stringify(json); // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
}
! function abfrageConsoleUpdates() {
exec(abfrageUpdates, function(err, stdout, stderr) {
if(logOn) log("Abfrage: "+abfrageUpdates);
if (err) {
log("Fehler ioBroker Statusabfrage: " + err,"error");
return;
}
var out = stdout.toString();
//log(out);
if(out.match("Error: 404: Not Found") || out.match("Cannot download json")) {
setState(idUpdateList,"ioBroker Repository nicht gefunden");
log("ioBroker Repository nicht gefunden","warn");
setState(idListOK,false);
return;
}
var arrInstalled = out.match(/.+installed.+\n/g);
var arrUpdates = out.match(/.+Updateable.+\n/g);
var arrAvailable = out.match(/Adapter /g);
var updates = 0;
var installiert = -1;
var verfuegbar = -1;
var updateJson = [];
if(typeof arrInstalled !== 'undefined' && arrInstalled !== null && arrInstalled.length > 0) installiert = arrInstalled.length;
if(typeof arrUpdates !== 'undefined' && arrUpdates !== null && arrUpdates.length > 0) updates = arrUpdates.length;
if(typeof arrAvailable !== 'undefined' && arrAvailable !== null && arrAvailable.length > 0) verfuegbar = arrAvailable.length;
if(updates > 0) {
var i;
for ( i=0; i<updates; i++/)/{/var/arrupdate="/.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrUpdates[i]);" updatejson.push({/adapter:/arrupdate[1],/update:/arrupdate[2],/version:/arrupdate[3]/});/}/setstate(idupdatecount,updates);/setstate(idavailablecount,verfuegbar);/setstate(idinstalledcount,installiert);/setstate(idupdatelist,writejson(updatejson));/setstate(idlistok,true);/setstate(idstatustime,now());/if(logon)/log("anzahl/adapter/verfügbar:/"/+/verfuegbar);/installiert:/installiert);/mit/updates:/updates);/function/abfrageconsolerepo()/exec(abfragerepo,/function(err,/stdout,/stderr)/log("abfrage:/"+abfragerepo);/if/(err)/log("fehler/iobroker/statusabfrage:/err,"error");/return;/out="stdout.toString();" log(stdout);/aktivrepo="stdout.match(/Active" repo:/(.+)/)[1];/log("aktive/aktivrepo);/regex="new" regexp("^"+aktivrepo+":/(.+)",/"gm");/aktivrepourl="stdout.match(/^online:" gm).tostring().replace(aktivrepo+":/","");/repo/url:/aktivrepourl);/setstate(idaktivrepo,aktivrepo);/setstate(idaktivrepourl,aktivrepourl);/abfragen()/abfrageconsoleupdates();/abfrageconsolerepo();/regelmässige/wiederholungen/-----------------------------------------------------------------------------/schedule(cronstr,/abfragen);/main/main()/abfragen();/start/skript:/settimeout(main,/500);/<e=""></updates;>`
! Und wie es bei mir visualisiert ist:
! [image: 327_repo_monitoring.jpg] [/i]