Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage]offene Updates in einer Multihostumgebung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage]offene Updates in einer Multihostumgebung

    This topic has been deleted. Only users with topic management privileges can see it.
    • ruhr70
      ruhr70 last edited by Jey Cee

      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
      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        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>

        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          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.
          1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 last edited by

            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

            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators last edited by

              @apollon77:

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

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

              Gruß

              Rainer

              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                man lernt nie aus. Danke für die Infos 🙂

                1 Reply Last reply Reply Quote 0
                • eric2905
                  eric2905 last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • P
                    pix last edited by

                    Hallo eric,

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

                    Gruß

                    Pix

                    1 Reply Last reply Reply Quote 0
                    • eric2905
                      eric2905 last edited by

                      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

                      1 Reply Last reply Reply Quote 0
                      • ruhr70
                        ruhr70 last edited by

                        Ihr seid ja schnell 🙂

                        Wollte gerade antworten.

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

                        1 Reply Last reply Reply Quote 0
                        • K
                          kirbsi last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • ruhr70
                            ruhr70 last edited by

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

                            Gesendet von iPhone mit Tapatalk

                            1 Reply Last reply Reply Quote 0
                            • lobomau
                              lobomau last edited by

                              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.

                              1 Reply Last reply Reply Quote 0
                              • K
                                kirbsi last edited by

                                @ruhr70:

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

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

                                1 Reply Last reply Reply Quote 0
                                • ruhr70
                                  ruhr70 last edited by Jey Cee

                                  @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.

                                  1 Reply Last reply Reply Quote 0
                                  • ruhr70
                                    ruhr70 last edited by

                                    [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.

                                    1 Reply Last reply Reply Quote 0
                                    • ruhr70
                                      ruhr70 last edited by

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

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

                                      1 Reply Last reply Reply Quote 0
                                      • O
                                        Oli last edited by

                                        Hallo zusammen,

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

                                        Homoran 1 Reply Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @Oli last edited by

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

                                          Muss repariert werden, kann ich am handy aber nicht

                                          O 1 Reply Last reply Reply Quote 0
                                          • O
                                            Oli @Homoran last edited by

                                            @Homoran

                                            vielen Dank für die Antwort

                                            FredF 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            492
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript monitoring template
                                            9
                                            25
                                            2089
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo