Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage]offene Updates in einer Multihostumgebung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    982

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

[Vorlage]offene Updates in einer Multihostumgebung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascripttemplatemonitoring
25 Beiträge 9 Kommentatoren 2.3k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    schrieb am zuletzt editiert von Jey Cee
    #1

    Falls es auch jemand gebrauchen kann.

    Das Skript muss jeweils in einer Javascript-Instanz eines Hosts laufen.

    // fragt die angebotenen Updates von ioBroker ab
    // Abfrage dauert etwas (ca. 1 Minute)
    //
    // Repository muss in den ioBroker Einstellungen richtig gepflegt sein
    
    // Übersicht der ioBroker Consolen-Kommandos:
    // https://github.com/ioBroker/ioBroker/wiki/Console-commands
    
    var master          = true; // true: Parse Fehler und Adapter, die nciht in der Repo sind werden mit in der Update-Liste ausgegeben
    
    var logOn           = true; // 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
    
    
    // #### ab hier kann bei Änderungen der Code in die Slaves kopiert 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";
    var idHostUpdate        = pfad + "Host_Update_verfuegbar";
    var idBeta              = pfad + "Adapter_Anzahl_Betaversionen";
    var idparseErr          = pfad + "Adapter_Anzahl_Parse_Error";
    var idAdapterGesamt     = pfad + "Adapter_installiert_gesamt";
    var idAdapterGesamtJSON = pfad + "Adapter_installiert_gesamt_json";
    var idAdapterErrorJSON  = pfad + "Adapter_mit_parse_error_json";
    var idAdapterNotInRepoJSON  = pfad + "Adapter_nicht_in_Repo_json";
    
    // regelmässige Wiederholungen der Abfrage
    var cronStr         = "57 */2 * * *";
    
    var abfrageUpdates       = 'iobroker update';
    var abfrageRepo          = 'iobroker repo';
    var abfrageAdapter       = 'iobroker list adapters';
    
    
    
    // -----------------------------------------------------------------------------
    
    
    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 aus Repo',
         desc: 'Liste der verfügbaren Updates aus Repo',
         type: 'string',
         unit: '',
         role: 'value'
    });
    
    createState(idUpdateCount, 0, forecreation, {
         name: 'Anzahl verfügbarer Updates aus Repo',
         desc: 'Anzahl verfügbarer Updates der installierten Adapter aus Repo',
         type: 'number',
         unit: '',
         role: 'value'
    });
    
    createState(idAvailableCount, 0, forecreation, {
         name: 'Anzahl verfügbarer Adapter im Repo',
         desc: 'Anzahl verfügbarer Adapter im Repo',
         type: 'number',
         unit: '',
         role: 'value'
    });
    
    createState(idInstalledCount, 0, forecreation, {
         name: 'Anzahl installierter Adapter aus Repo',
         desc: 'Anzahl installierter Adapter aus Repo',
         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: 'Als 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'
    });
    
    createState(idHostUpdate, false, forecreation, {
         name: 'iobroker Host update verfügbar',
         desc: 'iobroker Host update verfügbar',
         type: 'boolean',
         unit: '',
         role: 'value'
    });
    
    createState(idBeta, 0, forecreation, {
         name: 'Anzahl installierte Betaversionen',
         desc: 'Anzahl installierte Betaversionen',
         type: 'number',
         unit: '',
         role: 'value'
    });
    
    createState(idAdapterGesamt, 0, forecreation, {
         name: 'Anzahl installierter Adapter gesamt (Repo und Sonstige)',
         desc: 'Anzahl installierter Adapter gesamt (Repo und Sonstige)',
         type: 'number',
         unit: '',
         role: 'value'
    });
    
    createState(idAdapterGesamtJSON, "initalisiert", forecreation, {
         name: 'Liste der installierten Adapter gesamt (Repo und Sonstige)',
         desc: 'Liste der installierten Adapter gesamt (Repo und Sonstige)',
         type: 'string',
         unit: '',
         role: 'value'
    });
    
    createState(idparseErr, 0, forecreation, {
         name: 'Anzahl Adapter mit Parse Error',
         desc: 'Anzahl Adapter mit Parse Error (Cannot read or parse)',
         type: 'number',
         unit: '',
         role: 'value'
    });
    
    createState(idAdapterErrorJSON, "initalisiert", forecreation, {
         name: 'Liste der Adapter mit Parse Error',
         desc: 'Liste der Adapter mit Parse Error (cannot read or parse)',
         type: 'string',
         unit: '',
         role: 'value'
    });
    
    createState(idAdapterNotInRepoJSON, "initalisiert", forecreation, {
         name: 'Liste der installierten Adapter, die nicht in der Repo sind',
         desc: 'Liste der installierten Adapter, die nicht in der Repo sind',
         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 readJson(dp) {                     // lese ein JSON aus einem Datenpunkt
        var json = getState(dp).val;
        if (json === "") return [];
        try {
            list = JSON.parse(json);
        } catch (ex) {
            list = [];
        }
        if(!list) list = [];
        return list;
    }
    
    function checkBeta(installiertStr,updateStr) {
        var installiertArr = /(\d+).(\d+).(\d+)/g.exec(installiertStr);
        var updateArr      = /(\d+).(\d+).(\d+)/g.exec(updateStr);
        var i;
        for ( i=1; i<4; i++ ) {
            if(parseInt(updateArr[i]) < parseInt(installiertArr[i])) return true;
            if(parseInt(updateArr[i]) > parseInt(installiertArr[i])) return false;
        }
        return false;
    }
    
    function findAdapter(json,name) {
        for (var i=0; i < json.length; i++) {
            if (json[i].adapter == name) return true;
        }
        return false;
    }
    
    function checkInRepo(repoJson,installJson) {
        if(installJson === 'undefined' || installJson === null || installJson.length < 1) {
            log("keine Daten für Adapter in der Installation vorhanden","warn");
            return;
        }
        if(repoJson === 'undefined' || repoJson === null || repoJson.length < 1) {
            log("keine Daten für Adapter in der Repo vorhanden","warn");
            return;
        }
        var adapterNichtInRepoJson = [];
        for ( i=0; i<installJson.length; i++ ) {
            if(!findAdapter(repoJson,installJson[i].adapter)) {
                adapterNichtInRepoJson.push({
                    adapter:    installJson[i].adapter,
                    update:     "-",
                    version:    installJson[i].version,
                    beta:       "nicht in Repo"
                });
            }
        }
        return adapterNichtInRepoJson;
    }
    
    
    // fragt die möglichen Updates ab
    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(/Adapter.+Updateable.+\n/g);
            var arrContrUpdate  = out.match(/Controller.+Updateable.+\n/g);
            var arrAvailable    = out.match(/Adapter /g);
            var arrRepo         = out.match(/Adapter.+: \d+\.\d+\.\d+/g);
            var arrParseErr     = out.match(/Cannot read or parse.+\n/g);
            
    
            var updates         = 0;
            var ContrUpdate     = 0;
            var installiert     = -1;
            var verfuegbar      = -1;
            var updateJson      = [];
            var repoJson        = [];
            var parsErrJson     = [];
            var beta            = 0;
            var parseErr        = 0;
            
            var i;
            
            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 arrContrUpdate !== 'undefined' && arrContrUpdate !== null && arrContrUpdate.length > 0)  ContrUpdate = 1;
            if(typeof arrAvailable !== 'undefined' && arrAvailable !== null && arrAvailable.length > 0) verfuegbar = arrAvailable.length;
            if(typeof arrParseErr !== 'undefined' && arrParseErr !== null && arrParseErr.length > 0) parseErr = arrParseErr.length;
    
            // ermittelt Adapter, die einen Fehler (parse error) erzeugt haben
            // Beispiel:
            // Cannot read or parse /opt/iobroker/node_modules/iobroker.js-controller/lib/../node_modules/iobroker.daswetter/io-package.json: SyntaxError: Unexpected token 
            if(parseErr > 0) {
                for ( i=0; i<parseErr; i++ ) {
                    var arrParseErrLine = /Cannot read or parse.+\/(.+)\/io-.+:.(.+)\n/g.exec(arrParseErr[i]);
    
                    parsErrJson.push({
                        adapter:    arrParseErrLine[1],
                        update:     "-",
                        error:      arrParseErrLine[2],
                        beta:       "parse error"
                    });
                }
            }
    
            if(logOn) log(writeJson(parsErrJson),"warn");
    
            // ermittelt das JSON für die im Repo enthaltenen Adapter
            for ( i=0; i<arrRepo.length; i++ ) {
                var arrInRepo = /Adapter.+"(.+)".+(\d+\.\d+\.\d+)/g.exec(arrRepo[i]);
                repoJson.push({
                    adapter:    arrInRepo[1],
                    version:    arrInRepo[2]
                });
            }
    
    
            if(ContrUpdate > 0) {
                if(logOn) log("** HOST Update verfügbar **");
                if(logOn) log("arrContrUpdate: " + arrContrUpdate);
                var arrController = /.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrContrUpdate[0]);
                if(logOn) log("arrController: " + arrController);
    
                if(checkBeta(arrController[3],arrController[2])) beta = beta +1;
    
                updateJson.push({
                    adapter:    arrController[1],
                    update:     arrController[2],
                    version:    arrController[3],
                    beta:       (checkBeta(arrController[3],arrController[2]) ? "beta" : "UPDATE")
                    
                });
                
            }
            
            if(updates > 0) {
                for ( i=0; i<updates; i++ ) {
                    var arrUpdate = /.+"(.+)".+(\d+.\d+.\d+).+(\d+.\d+.\d+)/g.exec(arrUpdates[i]);
    
                    if(checkBeta(arrUpdate[3],arrUpdate[2])) beta = beta +1;
    
                    updateJson.push({
                        adapter:    arrUpdate[1],
                        update:     arrUpdate[2],
                        version:    arrUpdate[3],
                        beta:       (checkBeta(arrUpdate[3],arrUpdate[2]) ? "Beta" : "")
                    });
                }
            }
            
            updates = updates + ContrUpdate - beta;
            
            var notInRepoJson = checkInRepo(repoJson,readJson(idAdapterGesamtJSON));
            
            setState(idUpdateCount      ,updates);
            setState(idAvailableCount   ,verfuegbar);
            setState(idInstalledCount   ,installiert);
            
            if(updateJson.length === 0) updateJson.push({adapter:"",update:"",version:""});
            
            setState(idUpdateList       ,(master ? writeJson(updateJson.concat(parsErrJson,notInRepoJson)) : writeJson(updateJson)));
            setState(idListOK           ,true);
            setState(idStatusTime       ,now());
            setState(idHostUpdate,      (ContrUpdate > 0 ? true : false));
            setState(idBeta,            beta);
            setState(idparseErr,        parseErr);
            setState(idAdapterErrorJSON,writeJson(parsErrJson));
            setState(idAdapterNotInRepoJSON,writeJson(notInRepoJson));
    
            log("Anzahl Adapter mit Fehler (Cannot read or parse): " + parseErr,"warn");
            if(logOn) log("Anzahl Adapter in Repo verfügbar:   " + verfuegbar);
            if(logOn) log("Anzahl Adapter aus Repo installiert: " + installiert);
            if(logOn) log("Anzahl Adapter mit Updates: " + updates);
            if(logOn) log("Anzahl Adapter als Beta installiert: " + beta);
            
        });
    }
    
    // fragt das aktive Repository ab
    function abfrageConsoleRepo() {
        exec(abfrageRepo, function(err, stdout, stderr) {
            if(logOn) log("Abfrage: "+abfrageRepo);
            if (err) {
                log("Fehler ioBroker Statusabfrage: " + err,"error");
                return;
            }
            var out = stdout.toString();
    
    
            if(logOn) log(stdout);
            var aktivRepo = stdout.match(/Active repo: (.+)/)[1];
            if(logOn) log("Aktive Repo: " + aktivRepo);
    
            var regex = new RegExp("^"+aktivRepo+": (.+)", "gm");
            var aktivRepoUrl = stdout.match(/^online: (.+)/gm).toString().replace(aktivRepo+": ","");
            if(logOn) log("Aktive Repo url: " + aktivRepoUrl);
    
            setState(idAktivRepo,aktivRepo);
            setState(idAktivRepoUrl,aktivRepoUrl);
    
        });
    }
    
    
    
    // fragt alle installiertenAdapter ab, auch die, die nicht in der Repo vorhanden sind
    function abfrageInstallierteAdapter() {
        exec(abfrageAdapter, function(err, stdout, stderr) {
            if(logOn) log("Abfrage: "+ abfrageAdapter);
            if (err) {
                log("Fehler ioBroker Abfrage installierte Adapter: " + err,"error");
                return;
            }
            var out = stdout.toString();
            //if(logOn) log(stdout);
    
            var arrAdapter  = out.match(/:.+\n/g);
            var installJSON = [];       
                   
            
            var i;
            for ( i=0; i<arrAdapter.length; i++ ) {
                var arrInstall = /: (\S+) +- (\d+\.\d+\.\d+)/g.exec(arrAdapter[i]);
    
                installJSON.push({
                    adapter:    arrInstall[1],
                    version:    arrInstall[2]
                });
            }
            
    //        if(logOn) log("arrAdapter: " + arrAdapter);
            if(logOn) log("arrAdapter.length: " + arrAdapter.length);
    //        if(logOn) log("installJSON: " + writeJson(installJSON));
            
            setState(idAdapterGesamt,       arrAdapter.length);
            setState(idAdapterGesamtJSON,   writeJson(installJSON));
        });
    }
    
    
    
    function abfragen() {
        abfrageConsoleRepo();
        abfrageInstallierteAdapter();
        setTimeout(abfrageConsoleUpdates,2000);
    }
    
    // regelmässige Wiederholungen
    // -----------------------------------------------------------------------------
    schedule(cronStr, abfragen);
    
    
    // main
    // -----------------------------------------------------------------------------
    function main() {
        abfragen();
    }
    
    
    // Start Skript:
    // -----------------------------------------------------------------------------
    
    setTimeout(main,    500);
    
    

    Visualisiert in einer Multihostumgebung mit einem Master und zwei Satelliten:
    327_updates_multihost_2.jpg
    Folgende Datenpunkte werden je Host angelegt:
    327_updates_multihost_objekte.jpg

    [EDIT 31.03.2017] Skript:
    -Fehlerkorrekturen

    [EDIT 01.04.2017] Skript:

    • Höhere Versionen als im Repo werden nicht als Updates gezählt
    • JSON um das Attribut Beta erweitert (zur Kennzeichnung höhere Versionen als im Repo)
    • Zähler für die Anzahl der installierten "Beta"-Versionen hinzugefügt
      [EDIT 02.04.2017] Skript:
    • Fehlerkorrekturen
    • Ausgabe von Adaptern, die nicht in der Repo enthalten sind
    • Ausgabe von Adaptern, die einen Pause Error erzeugen
    • zusätzliche Datenpunkte
    • Screenshot Visualisierung erneuert
    • Screenshot Datenpunkte hinzugefügt

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Antwort Letzte Antwort
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      Ich glaube das geht einfacher …

      Unter system.adapter.<aapter>. <instance>die Objektbeschreibung abholen (getObject oder so). Dort gibt es dann "obj.installedVersion" und "obj.common.version" (=verfügbare Version) ...</instance></aapter>

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        schrieb am zuletzt editiert von
        #3

        Danke ;-) Klingt interessant. Ich habe es aber nicht ganz verstanden. Vielleicht kannst Du das noch einmal näher erläutern.

        Dann müsste man aber jedes Objekt für jeden Adapter abfragen, den man installiert hat.

        Über die Konsole bekommt man auch die Anzahl der im Repo verfügbaren Adapter. Wenn die sich erhöht, gibt es offiziell was Neues.

        Dann kann das Skript das Repo öfter abfragen, als es normalerweise der Fall ist.

        Wenn ich mir das RAW vom System.adapter.tankerkoenig.0 ansehe, finde ich dort folgenden Inhalt:

        ! ````
        {
        "_id": "system.adapter.tankerkoenig.0",
        "type": "instance",
        "common": {
        "name": "tankerkoenig",
        "title": "Tankerkönig Spritpreise",
        "desc": {
        "en": "Tankerkoenig Spritpreise",
        "de": "Tankerkönig Spritpreise",
        "ru": "Tankerkoenig Spritpreise - translate to russian, please"
        },
        "version": "1.0.0",
        "mode": "schedule",
        "schedule": "*/5 * * * *",
        "platform": "javascript/Node.js",
        "loglevel": "info",
        "keywords": [
        "fuel",
        "gas",
        "tankerkoenig",
        "Tankerkönig",
        "Sprit",
        "Spritpreis",
        "Tankstelle",
        "Diesel",
        "Benzin"
        ],
        "main": "main.js",
        "authors": [
        "Pix"
        ],
        "license": "MIT",
        "readme": "https://github.com/Pix---/ioBroker.tankerkoenig/blob/master/README.md",
        "icon": "tankerkoenig.png",
        "extIcon": "https://raw.githubusercontent.com/Pix---/ioBroker.tankerkoenig/master/admin/tankerkoenig.png",
        "allowInit": true,
        "type": "common adapters",
        "config": {
        "width": 850,
        "height": 650,
        "minWidth": 650,
        "minHeight": 400
        },
        "installedVersion": "1.0.0",
        "enabled": false,
        "host": "ubuntu1604server"
        },
        "native": {
        "apikey": "xxxxxxx",
        "station0": "xxxxxx",
        "stationname0": "xxxxxx",
        "station1": "xxxxxx",
        "stationname1": "xxxxxxxx",
        "station2": "",
        "stationname2": "",
        "station3": "",
        "stationname3": "",
        "station4": "",
        "stationname4": "",
        "station5": "",
        "stationname5": "",
        "station6": "",
        "stationname6": "",
        "station7": "",
        "stationname7": "",
        "station8": "",
        "stationname8": "",
        "station9": "",
        "stationname9": "",
        "stationsarray": [
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ],
        [
        "",
        ""
        ]
        ]
        },
        "acl": {
        "object": 1638
        }
        }

        
        Darin finde ich zwar:
        

        "installedVersion": "1.0.0",

        
        Aber nicht die Verfügbare Version. Oder ist das nicht das Objekt, welches ich unter Admin/Objekte mir anzeigen lassen kann?
        
        Ich glaube allerdings, dass ich Dich nicht verstanden habe.

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Antwort Letzte Antwort
        0
        • apollon77A Offline
          apollon77A Offline
          apollon77
          schrieb am zuletzt editiert von
          #4

          tankerkoenig ist offiziell noch die 1.0.0 verfügbar … die 1.0.4 gibts erst seit 4h also noch nicht im offiziellen Repo

          Es gibt auch noch system.repositories wo auch Daten drin stehen zum Repository drin stehen... aber auch da wird die 1.0.4 erst mit dem nächsten Repo-Update drin ... Das passiert glaube ich einmal am Tag oder so

          Ingo F

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Antwort Letzte Antwort
          0
          • HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #5

            @apollon77:

            Das passiert glaube ich einmal am Tag oder so `
            oder so:

            http://www.iobroker.net/?page_id=6227&l … positories

            Gruß

            Rainer

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • ruhr70R Offline
              ruhr70R Offline
              ruhr70
              schrieb am zuletzt editiert von
              #6

              man lernt nie aus. Danke für die Infos :-)

              Adapter: Fritzbox, Unify Circuit
              Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

              1 Antwort Letzte Antwort
              0
              • eric2905E Offline
                eric2905E Offline
                eric2905
                schrieb am zuletzt editiert von
                #7

                Moin,

                @ruhr70:

                Visualisiert in einer Multihostumgebung mit einem Master und zwei Satelliten `
                ich stehe mir gerade selber im Weg …. wie hast Du das mit dem Overlay-Fenster mir der Detail-Darstellung hinbekommen?

                An der Stelle ist meine Gedächtnispartition irgendwie defekt ...

                Danke und Gruß,

                Eric

                Roses are red, violets are blue,

                if I listen to metal, my neighbours do too

                1 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  pix
                  schrieb am zuletzt editiert von
                  #8

                  Hallo eric,

                  das sieht nach einem Dialog Fenster aus. HTML Dialog oder ein Dialog mit einer eigenen View.

                  Gruß

                  Pix

                  ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                  1 Antwort Letzte Antwort
                  0
                  • eric2905E Offline
                    eric2905E Offline
                    eric2905
                    schrieb am zuletzt editiert von
                    #9

                    Hi,

                    @pix:

                    das sieht nach einem Dialog Fenster aus. HTML Dialog oder ein Dialog mit einer eigenen View. `
                    stimmt - hab's auch gerade gefunden. Habe es als "Dialog mit View" umgesetzt.

                    Danke und Gruß,

                    Eric

                    Roses are red, violets are blue,

                    if I listen to metal, my neighbours do too

                    1 Antwort Letzte Antwort
                    0
                    • ruhr70R Offline
                      ruhr70R Offline
                      ruhr70
                      schrieb am zuletzt editiert von
                      #10

                      Ihr seid ja schnell :-)

                      Wollte gerade antworten.

                      Ja, es ist ein Dialog mit View in dem drei Widgets mit den JSON-Listen drin ist.

                      Adapter: Fritzbox, Unify Circuit
                      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                      1 Antwort Letzte Antwort
                      0
                      • K Offline
                        K Offline
                        kirbsi
                        schrieb am zuletzt editiert von
                        #11

                        Sowas habe ich gesucht. :) Kannst du mal bitte ein Widget als Beispiel reinstellen?

                        1 Antwort Letzte Antwort
                        0
                        • ruhr70R Offline
                          ruhr70R Offline
                          ruhr70
                          schrieb am zuletzt editiert von
                          #12

                          mache ich, sobald ich zurück bin:-)

                          Gesendet von iPhone mit Tapatalk

                          Adapter: Fritzbox, Unify Circuit
                          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                          1 Antwort Letzte Antwort
                          0
                          • lobomauL Offline
                            lobomauL Offline
                            lobomau
                            schrieb am zuletzt editiert von
                            #13

                            Hab das Skript bei mir auch am Laufen.

                            Das einzige was mich stört ist, dass wenn man eine Version hat, die noch nicht offiziell ist, dass es als updatebar dargestellt wird.

                            Das ist ja generell so. Vielleicht kann man sowas im Skript abfangen?

                            Als Beispiel: ich habe vis 0.12.6 installiert, es wird angegeben, dass Update 0.10.15 vorfügbar ist.

                            Host: NUC8i3 mit Proxmox:

                            • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                            • Slave: Pi4
                            1 Antwort Letzte Antwort
                            0
                            • K Offline
                              K Offline
                              kirbsi
                              schrieb am zuletzt editiert von
                              #14

                              @ruhr70:

                              mache ich, sobald ich zurück bin:-)

                              Gesendet von iPhone mit Tapatalk `
                              Kannst du bitte noch das Widget reinstellen?[emoji2]

                              1 Antwort Letzte Antwort
                              0
                              • ruhr70R Offline
                                ruhr70R Offline
                                ruhr70
                                schrieb am zuletzt editiert von Jey Cee
                                #15

                                @kirbsi:

                                @ruhr70:

                                mache ich, sobald ich zurück bin:-)

                                Gesendet von iPhone mit Tapatalk
                                Kannst du bitte noch das Widget reinstellen?

                                "Das Widget" besteht aus einem View:

                                {
                                  "settings": {
                                    "style": {
                                      "background": "transparent",
                                      "background_class": ""
                                    },
                                    "theme": "redmond",
                                    "sizex": "",
                                    "sizey": "",
                                    "gridSize": "",
                                    "snapType": null
                                  },
                                  "widgets": {
                                    "e00001": {
                                      "tpl": "tplTableBody",
                                      "data": {
                                        "visibility-cond": "==",
                                        "visibility-val": 1,
                                        "static_value": "[{\"Title\": \"first\", \"Value\": 1, \"_Description\": \"Value1\"}, {\"Title\": \"second\", \"Value\": 2, \"_Description\": \"Value2\"}]",
                                        "gestures-offsetX": 0,
                                        "gestures-offsetY": 0,
                                        "signals-cond-0": "==",
                                        "signals-val-0": true,
                                        "signals-icon-0": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-0": 0,
                                        "signals-blink-0": false,
                                        "signals-horz-0": 0,
                                        "signals-vert-0": 0,
                                        "signals-hide-edit-0": false,
                                        "signals-cond-1": "==",
                                        "signals-val-1": true,
                                        "signals-icon-1": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-1": 0,
                                        "signals-blink-1": false,
                                        "signals-horz-1": 0,
                                        "signals-vert-1": 0,
                                        "signals-hide-edit-1": false,
                                        "signals-cond-2": "==",
                                        "signals-val-2": true,
                                        "signals-icon-2": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-2": 0,
                                        "signals-blink-2": false,
                                        "signals-horz-2": 0,
                                        "signals-vert-2": 0,
                                        "signals-hide-edit-2": false,
                                        "table_oid": "javascript.2.Systeminfos.iobroker.update_liste",
                                        "colCount": "3",
                                        "colWidth1": "440px",
                                        "colWidth2": "80px",
                                        "detailed_wid": "",
                                        "colWidth3": "80px",
                                        "colAttr3": "update",
                                        "colWidth4": "100px",
                                        "colName5": "",
                                        "colWidth5": "100px",
                                        "colWidth6": "100px",
                                        "colWidth7": "100px",
                                        "visibility-groups-action": "hide",
                                        "colName1": "Master: Adapter",
                                        "colName2": "Version",
                                        "colName3": "Update",
                                        "colAttr2": "version",
                                        "show_scroll": false,
                                        "new_on_top": false,
                                        "colAttr1": "adapter",
                                        "max_rows": ""
                                      },
                                      "style": {
                                        "left": "0px",
                                        "top": "0px",
                                        "width": "600px",
                                        "height": "240px"
                                      },
                                      "widgetSet": "basic"
                                    },
                                    "e00002": {
                                      "tpl": "tplTableBody",
                                      "data": {
                                        "visibility-cond": "==",
                                        "visibility-val": 1,
                                        "static_value": "[{\"Title\": \"first\", \"Value\": 1, \"_Description\": \"Value1\"}, {\"Title\": \"second\", \"Value\": 2, \"_Description\": \"Value2\"}]",
                                        "gestures-offsetX": 0,
                                        "gestures-offsetY": 0,
                                        "signals-cond-0": "==",
                                        "signals-val-0": true,
                                        "signals-icon-0": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-0": 0,
                                        "signals-blink-0": false,
                                        "signals-horz-0": 0,
                                        "signals-vert-0": 0,
                                        "signals-hide-edit-0": false,
                                        "signals-cond-1": "==",
                                        "signals-val-1": true,
                                        "signals-icon-1": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-1": 0,
                                        "signals-blink-1": false,
                                        "signals-horz-1": 0,
                                        "signals-vert-1": 0,
                                        "signals-hide-edit-1": false,
                                        "signals-cond-2": "==",
                                        "signals-val-2": true,
                                        "signals-icon-2": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-2": 0,
                                        "signals-blink-2": false,
                                        "signals-horz-2": 0,
                                        "signals-vert-2": 0,
                                        "signals-hide-edit-2": false,
                                        "table_oid": "javascript.4.Systeminfos.iobroker_rasp31.update_liste",
                                        "colCount": "3",
                                        "colWidth1": "440px",
                                        "colWidth2": "80px",
                                        "detailed_wid": "",
                                        "colWidth3": "80px",
                                        "colAttr3": "update",
                                        "colWidth4": "100px",
                                        "colName5": "",
                                        "colWidth5": "100px",
                                        "colWidth6": "100px",
                                        "colWidth7": "100px",
                                        "visibility-groups-action": "hide",
                                        "colName1": "Rasp 31: Adapter",
                                        "colName2": "Version",
                                        "colName3": "Update",
                                        "colAttr2": "version",
                                        "show_scroll": false,
                                        "colAttr1": "adapter"
                                      },
                                      "style": {
                                        "left": "0px",
                                        "top": "240px",
                                        "width": "600px",
                                        "height": "180px"
                                      },
                                      "widgetSet": "basic"
                                    },
                                    "e00003": {
                                      "tpl": "tplTableBody",
                                      "data": {
                                        "visibility-cond": "==",
                                        "visibility-val": 1,
                                        "static_value": "[{\"Title\": \"first\", \"Value\": 1, \"_Description\": \"Value1\"}, {\"Title\": \"second\", \"Value\": 2, \"_Description\": \"Value2\"}]",
                                        "gestures-offsetX": 0,
                                        "gestures-offsetY": 0,
                                        "signals-cond-0": "==",
                                        "signals-val-0": true,
                                        "signals-icon-0": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-0": 0,
                                        "signals-blink-0": false,
                                        "signals-horz-0": 0,
                                        "signals-vert-0": 0,
                                        "signals-hide-edit-0": false,
                                        "signals-cond-1": "==",
                                        "signals-val-1": true,
                                        "signals-icon-1": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-1": 0,
                                        "signals-blink-1": false,
                                        "signals-horz-1": 0,
                                        "signals-vert-1": 0,
                                        "signals-hide-edit-1": false,
                                        "signals-cond-2": "==",
                                        "signals-val-2": true,
                                        "signals-icon-2": "/vis/signals/lowbattery.png",
                                        "signals-icon-size-2": 0,
                                        "signals-blink-2": false,
                                        "signals-horz-2": 0,
                                        "signals-vert-2": 0,
                                        "signals-hide-edit-2": false,
                                        "table_oid": "javascript.5.Systeminfos.iobroker_rasp33.update_liste",
                                        "colCount": "3",
                                        "colWidth1": "440px",
                                        "colWidth2": "80px",
                                        "detailed_wid": "",
                                        "colWidth3": "80px",
                                        "colAttr3": "update",
                                        "colWidth4": "100px",
                                        "colName5": "",
                                        "colWidth5": "100px",
                                        "colWidth6": "100px",
                                        "colWidth7": "100px",
                                        "visibility-groups-action": "hide",
                                        "colName1": "Rasp 33: Adapter",
                                        "colName2": "Version",
                                        "colName3": "Update",
                                        "colAttr2": "version",
                                        "colAttr1": "adapter"
                                      },
                                      "style": {
                                        "left": "0px",
                                        "top": "420px",
                                        "width": "600px",
                                        "height": "180px"
                                      },
                                      "widgetSet": "basic"
                                    }
                                  },
                                  "name": "vUpdates",
                                  "rerender": false,
                                  "filterList": []
                                }
                                

                                Und in meinem Fall drei Widgets in dem View:

                                [{"tpl":"tplTableBody","data":{"visibility-cond":"==","visibility-val":1,"static_value":"[{\"Title\": \"first\", \"Value\": 1, \"_Description\": \"Value1\"}, {\"Title\": \"second\", \"Value\": 2, \"_Description\": \"Value2\"}]","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"table_oid":"javascript.2.Systeminfos.iobroker.update_liste","colCount":"3","colWidth1":"440px","colWidth2":"80px","detailed_wid":"","colWidth3":"80px","colAttr3":"update","colWidth4":"100px","colName5":"","colWidth5":"100px","colWidth6":"100px","colWidth7":"100px","visibility-groups-action":"hide","colName1":"Master: Adapter","colName2":"Version","colName3":"Update","colAttr2":"version","show_scroll":false,"new_on_top":false,"colAttr1":"adapter","max_rows":""},"style":{"left":"0px","top":"0px","width":"600px","height":"240px"},"widgetSet":"basic"},{"tpl":"tplTableBody","data":{"visibility-cond":"==","visibility-val":1,"static_value":"[{\"Title\": \"first\", \"Value\": 1, \"_Description\": \"Value1\"}, {\"Title\": \"second\", \"Value\": 2, \"_Description\": \"Value2\"}]","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"table_oid":"javascript.4.Systeminfos.iobroker_rasp31.update_liste","colCount":"3","colWidth1":"440px","colWidth2":"80px","detailed_wid":"","colWidth3":"80px","colAttr3":"update","colWidth4":"100px","colName5":"","colWidth5":"100px","colWidth6":"100px","colWidth7":"100px","visibility-groups-action":"hide","colName1":"Rasp 31: Adapter","colName2":"Version","colName3":"Update","colAttr2":"version","show_scroll":false,"colAttr1":"adapter"},"style":{"left":"0px","top":"240px","width":"600px","height":"180px"},"widgetSet":"basic"},{"tpl":"tplTableBody","data":{"visibility-cond":"==","visibility-val":1,"static_value":"[{\"Title\": \"first\", \"Value\": 1, \"_Description\": \"Value1\"}, {\"Title\": \"second\", \"Value\": 2, \"_Description\": \"Value2\"}]","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"table_oid":"javascript.5.Systeminfos.iobroker_rasp33.update_liste","colCount":"3","colWidth1":"440px","colWidth2":"80px","detailed_wid":"","colWidth3":"80px","colAttr3":"update","colWidth4":"100px","colName5":"","colWidth5":"100px","colWidth6":"100px","colWidth7":"100px","visibility-groups-action":"hide","colName1":"Rasp 33: Adapter","colName2":"Version","colName3":"Update","colAttr2":"version","colAttr1":"adapter"},"style":{"left":"0px","top":"420px","width":"600px","height":"180px"},"widgetSet":"basic"}]
                                

                                Das Skript im ersten Post hatte leider noch Fehler drin. Das korrigierte Skript ist im ersten Post abgelegt.

                                Adapter: Fritzbox, Unify Circuit
                                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                1 Antwort Letzte Antwort
                                0
                                • ruhr70R Offline
                                  ruhr70R Offline
                                  ruhr70
                                  schrieb am zuletzt editiert von
                                  #16

                                  [EDIT] versehentlich den Post editiert, statt neu gepostet :-(

                                  Das Skript enthielt leider noch ein paar böse Fehler.

                                  Es wurde im ersten Post erneuert und um einige Zusatzinformationen ergänzt.

                                  Adapter: Fritzbox, Unify Circuit
                                  Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                  1 Antwort Letzte Antwort
                                  0
                                  • ruhr70R Offline
                                    ruhr70R Offline
                                    ruhr70
                                    schrieb am zuletzt editiert von
                                    #17

                                    Das Skript enthielt leider noch ein paar böse Fehler.

                                    Es wurde im ersten Post erneuert und um einige Zusatzinformationen ergänzt.

                                    Adapter: Fritzbox, Unify Circuit
                                    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                    1 Antwort Letzte Antwort
                                    0
                                    • O Offline
                                      O Offline
                                      Oli
                                      schrieb am zuletzt editiert von
                                      #18

                                      Hallo zusammen,

                                      das Script oben funktioniert leider nicht, hat das noch jemand im Einsatz, oder gibt es dafür eine andere Lösung?

                                      Gruß
                                      Oliver

                                      HomoranH 1 Antwort Letzte Antwort
                                      0
                                      • O Oli

                                        Hallo zusammen,

                                        das Script oben funktioniert leider nicht, hat das noch jemand im Einsatz, oder gibt es dafür eine andere Lösung?

                                        HomoranH Nicht stören
                                        HomoranH Nicht stören
                                        Homoran
                                        Global Moderator Administrators
                                        schrieb am zuletzt editiert von
                                        #19

                                        @Oliver-Böhm
                                        Ist vom umzug des forums ein wenig deformiert worden.

                                        Muss repariert werden, kann ich am handy aber nicht

                                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                        O 1 Antwort Letzte Antwort
                                        0
                                        • HomoranH Homoran

                                          @Oliver-Böhm
                                          Ist vom umzug des forums ein wenig deformiert worden.

                                          Muss repariert werden, kann ich am handy aber nicht

                                          O Offline
                                          O Offline
                                          Oli
                                          schrieb am zuletzt editiert von
                                          #20

                                          @Homoran

                                          vielen Dank für die Antwort

                                          Gruß
                                          Oliver

                                          FredFF 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          763

                                          Online

                                          32.6k

                                          Benutzer

                                          82.2k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe