Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. HowTo: Zusatz-Programme fuer jarvis v3

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    HowTo: Zusatz-Programme fuer jarvis v3

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MCU @Bloody last edited by MCU

      @bloody Also funktioniert bei mir mit dem feed-Wert. Du warst nicht gleichzeitig in der Bearbeitung von jarvis im FrontEnd?

      statelistSort('0','13c88101-c6bb-48b6-9347-5122a3ef3bbe','number',false);
      

      de5aa287-2f2b-43ba-9de9-59267ba1691c-image.png

      statelistSort('0','13c88101-c6bb-48b6-9347-5122a3ef3bbe','number',true);
      

      06e4e028-8ed3-4f1d-850f-4ce822efce00-image.png

      Habe die Doku nochmal angepasst:
      https://mcuiobroker.gitbook.io/jarvis-infos/jarvis/system-effektprog./v3-systemprogramme/statelistsort
      evtl F5 drücken.

      B 1 Reply Last reply Reply Quote 1
      • B
        Bloody @MCU last edited by

        @mcu
        Danke für die Rückmeldung.
        Das Problem war, dass ich zwar den feed Datenpunkt benutzt habe aber noch in den Datenpunkt Eigenschaften gerundet hatte ({"value":"val => parseFloat(val).toFixed(2)"}).
        Keine Ahnung, wieso ich das so gemacht hatte, weil es ja den DP short auch gibt. Gabs den schon immer? Naja egal, es geht jetzt.
        Hab es jetzt so gelöst.
        https://forum.iobroker.net/topic/49776/jarvis-v3-0-0-just-another-remarkable-vis/2364

        Dankeschön.

        1 Reply Last reply Reply Quote 0
        • B
          Bloody last edited by

          Moin @MCU,

          hab doch noch ein Problem.
          Es steht nicht immer der billigste Preis oben. Erst wenn ich das Skript neustarte, passt es wieder.
          Aber da ist doch ein Trigger drin, falls sich ein Preis ändert, soll sich die Reihenfolge anpassen
          oder liege ich falsch?

          M 1 Reply Last reply Reply Quote 0
          • M
            MCU @Bloody last edited by

            @bloody Das soll ja so. Soll der teuerste oben sein dann muss man false setzen.

            B 1 Reply Last reply Reply Quote 0
            • B
              Bloody @MCU last edited by

              @mcu
              Kann leider gerade kein Screenshot machen, da es aktuell mit der Reihenfolge passt (von klein nach groß). Hätte ich vielleicht dazu sagen sollen... Bei mir ist es dann nicht von klein nach groß oder von groß nach klein sortiert, sondern die Preise sind durcheinander gewürfelt.
              Beispielsweise so:

              1.91
              1.95
              1.98
              1.89
              1.70

              1 Reply Last reply Reply Quote 0
              • M
                MCU last edited by MCU

                @bloody Dann zeig mal bitte das Programm, welches du nutzt. Bitte in CodeTags (</>), also auf e07c2e6c-780f-4d2b-ba36-33ce9491c295-image.png klicken und den COde einfügen. Danke. Mir reicht der Trigger Teil, nicht die function().
                Kann es sein, dass du nur einmal um 01:00 Uhr die Funktion laufen lässt?

                B 1 Reply Last reply Reply Quote 0
                • B
                  Bloody @MCU last edited by Bloody

                  @mcu
                  Hier nochmal, der aktuelle Stand.
                  cb7c076f-cae9-4205-a1dc-070bae52e844-image.png

                  Ich sehe gar keinen Trigger 😕

                  // ************************
                  // stateListSort 
                  // ************************
                  
                  
                  statelistSort('0','hier ist die id drin','number',true);
                  
                  function statelistSort(instance,widgetId,valType,sortUp){
                      // insbesondere für trashschedule
                      let widgetsDP = 'jarvis.' + instance + '.widgets';
                      let widgets = getState(widgetsDP).val;
                      widgets = JSON.parse(widgets);
                      let arr = [];
                      for (let id in widgets){
                          if (id == widgetId ){
                              for (let key in widgets[id].items){
                                  // Type vom item prüfen
                                  if (widgets[id].items[key].type == 'device'){
                                      let objId =getStateFromDevice(instance, widgets[id].items[key].deviceId, widgets[id].items[key].primaryStateKey);
                                      let objVal = getState(objId).val;
                                      if (typeof(objVal) == valType){
                                          arr.push({'objVal':objVal,'key':key, 'all': widgets[id].items[key]});
                                      }else{
                                          arr.push({'objVal':0,'key':key, 'all': widgets[id].items[key]});
                                          //log('Abbruch, da Wert nicht stimmt: objVal: '+ objVal +' - '+typeof(objVal));
                                          // arr= [];
                                          // break;
                                      }
                                  }else{
                                      log('Liste nicht sinnvoll sortierbar, da divider vorhanden');
                                      arr =[];
                                      break;
                                  }
                              }
                              // Sort arr
                              if (arr.length>0){
                                  if (valType == 'boolean'){
                                      if (sortUp || sortUp == undefined){
                                          arr.sort((a, b) => (toBoolean(a.objVal) > toBoolean (b.objVal)) ? 1 : -1);
                                      }else{
                                          arr.sort((a, b) => (toBoolean(a.objVal) < toBoolean (b.objVal)) ? 1 : -1);
                                      }
                                  }
                                   if (valType == 'number'){
                                      if (sortUp || sortUp == undefined){
                                          arr.sort((a, b) => (a.objVal > b.objVal ) ? 1 : -1);
                                      }else{
                                          arr.sort((a, b) => (a.objVal < b.objVal) ? 1 : -1);
                                      }
                                  }
                              }else{
                                  log('Abbruch der Sortierung');
                              }
                              break;
                          }
                          
                      }
                      let widgetArr = [];
                      for (let i=0;i<arr.length;i++){
                          log(i+' - '+arr[i].objVal+' - key: '+arr[i].key);
                          widgetArr.push(arr[i].all);
                      }
                      for (let id in widgets){
                          if (id == widgetId ){
                              widgets[id].items = widgetArr;
                              log ('Nachher:'+JSON.stringify(widgets[id].items));
                              break;
                          }
                      }
                      setState(widgetsDP,JSON.stringify(widgets),false);
                  }
                  
                  function getStateFromDevice(instance, deviceId, devState){
                      let devicesDP = 'jarvis.' + instance + '.devices';
                      let devices = getState(devicesDP).val;
                      devices = JSON.parse(devices);
                      for (let key in devices){
                          let devicesArr = devices[key];
                          for (let key2 in devicesArr){
                              if (deviceId ==devicesArr[key2].id){
                                  let devicesStates =devicesArr[key2].states;
                                  for (let key3 in devicesStates){
                                      if (devState == key3){
                                          return devicesStates[key3].state;
                                      }
                                  }
                              }
                          }
                      }
                  

                  Nachtrag:
                  Ich habs jetzt. Hatte nicht gesehen, dass es bereits einen weiteren Eintrag und Trigger gibt.
                  https://mcuiobroker.gitbook.io/jarvis-infos/jarvis/system-effektprog./v3-systemprogramme/statelistsort/javascript-zusatz-tankerkoenig

                  Habs jetzt so:

                  // ************************
                  // stateListSort 
                  // ************************
                  
                  
                  statelistSort('0','id','number',true);
                  
                  function statelistSort(instance,widgetId,valType,sortUp){
                      // insbesondere für trashschedule
                      let widgetsDP = 'jarvis.' + instance + '.widgets';
                      let widgets = getState(widgetsDP).val;
                      widgets = JSON.parse(widgets);
                      let arr = [];
                      for (let id in widgets){
                          if (id == widgetId ){
                              for (let key in widgets[id].items){
                                  // Type vom item prüfen
                                  if (widgets[id].items[key].type == 'device'){
                                      let objId =getStateFromDevice(instance, widgets[id].items[key].deviceId, widgets[id].items[key].primaryStateKey);
                                      let objVal = getState(objId).val;
                                      if (typeof(objVal) == valType){
                                          arr.push({'objVal':objVal,'key':key, 'all': widgets[id].items[key]});
                                      }else{
                                          arr.push({'objVal':0,'key':key, 'all': widgets[id].items[key]});
                                          //log('Abbruch, da Wert nicht stimmt: objVal: '+ objVal +' - '+typeof(objVal));
                                          // arr= [];
                                          // break;
                                      }
                                  }else{
                                      log('Liste nicht sinnvoll sortierbar, da divider vorhanden');
                                      arr =[];
                                      break;
                                  }
                              }
                              // Sort arr
                              if (arr.length>0){
                                  if (valType == 'boolean'){
                                      if (sortUp || sortUp == undefined){
                                          arr.sort((a, b) => (toBoolean(a.objVal) > toBoolean (b.objVal)) ? 1 : -1);
                                      }else{
                                          arr.sort((a, b) => (toBoolean(a.objVal) < toBoolean (b.objVal)) ? 1 : -1);
                                      }
                                  }
                                   if (valType == 'number'){
                                      if (sortUp || sortUp == undefined){
                                          arr.sort((a, b) => (a.objVal > b.objVal ) ? 1 : -1);
                                      }else{
                                          arr.sort((a, b) => (a.objVal < b.objVal) ? 1 : -1);
                                      }
                                  }
                              }else{
                                  log('Abbruch der Sortierung');
                              }
                              break;
                          }
                          
                      }
                      let widgetArr = [];
                      for (let i=0;i<arr.length;i++){
                          log(i+' - '+arr[i].objVal+' - key: '+arr[i].key);
                          widgetArr.push(arr[i].all);
                      }
                      for (let id in widgets){
                          if (id == widgetId ){
                              widgets[id].items = widgetArr;
                              log ('Nachher:'+JSON.stringify(widgets[id].items));
                              break;
                          }
                      }
                      setState(widgetsDP,JSON.stringify(widgets),false);
                  }
                  
                      // **********************************
                  // tankerkoenig Zusatz
                  // **********************************
                  // Möchte man die Preis in einem Widget sortiert haben
                  // kann man direkt nach Änderung der Preise für die Spritsorten
                  // die Sortierung neu anstossen
                  // Beide Script stateListSort und tankerkoenigSort muessen in einem Script zusammen sein
                  
                  // -> 
                  // Spritart anpassen e10 , diesel oder e5
                  //
                  // Hier zurzeit e10 gezeigt
                  //
                  // Fall man möchte bei jeder Preisänderung eine Sortierung
                  let tankerkoenigDPs = 'tankerkoenig.0.stations.*.e10.feed';
                  
                  $(tankerkoenigDPs).on(function (obj) {
                      if (obj.deviceId != 'tankerkoenig.0.stations.cheapest'){
                          statelistSort('0','id','number',true)
                      }
                  });
                  
                  
                  function getStateFromDevice(instance, deviceId, devState){
                      let devicesDP = 'jarvis.' + instance + '.devices';
                      let devices = getState(devicesDP).val;
                      devices = JSON.parse(devices);
                      for (let key in devices){
                          let devicesArr = devices[key];
                          for (let key2 in devicesArr){
                              if (deviceId ==devicesArr[key2].id){
                                  let devicesStates =devicesArr[key2].states;
                                  for (let key3 in devicesStates){
                                      if (devState == key3){
                                          return devicesStates[key3].state;
                                      }
                                  }
                              }
                          }
                      }
                      
                  
                      
                  }
                  

                  Sorry für die Umstände und Danke!

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    MCU @Bloody last edited by MCU

                    @bloody

                    Zeile 6 statelistSort('0','Hier muss die Nummer vom Widget rein','number',true);
                    Auch in Zeile 91 statt id -> Auch DEINE WIDGETID z.B.:8dd7dd58-7b35-4efa-ac7f-e262df17f1f9
                    
                    Wie im Beispiel
                    // statelistSort('0','8dd7dd58-7b35-4efa-ac7f-e262df17f1f9','number',true);
                    

                    https://mcuiobroker.gitbook.io/jarvis-infos/jarvis/system-effektprog./v3-systemprogramme/statelistsort#widgetid-aus-dem-layout

                    1 Reply Last reply Reply Quote 1
                    • CarstenDerGroße
                      CarstenDerGroße last edited by CarstenDerGroße

                      Hallo zusammen, hallo @MCU

                      ich hatte ja im Hauptthread von Jarvis schonmal wegen der Spotify-Tracklist geschrieben und feststellen müssen das ein Titelwechsel ohne vis und iframe aktuell noch nicht möglich ist...

                      Nun hatte ich etwas zeit und habe einen Fork des Spotify-Adapters anleget und dort die Einstellungsmöglichkeit geschaffen die htmlDPs Jarvis konform erstellen zu lassen (heißt auch das Script für die Bilder kann entfallen sobald mein Pullrequest gemerged ist).

                      Einen entsprechenden pullrequest hab ich natürlich auf den Adapter gestellt.

                      Für alle die es Testen und nutzen wollen:

                      • Spotiy-premium-Adapter von https://github.com/mericon/ioBroker.spotify-premium installieren

                      • Bilder aus dem ordner iobroker.spotify-premium/widgets/spotify-premium/img
                        nach vis.0/spotify kopieren

                      gruß

                      Carsten

                      1 Reply Last reply Reply Quote 1
                      • U
                        Urknall last edited by Urknall

                        Ich hoffe hier bin ich richtig.....
                        Ich bin dabei das Projekt von OpenLigaDB von @MCU umzusetzen. Leider komme ich Aktuell nicht weiter. Habe die Anleitung schon 2-3 mal durch, und DP kontrolliert....aber es klappt nicht. Das Script füllt die Anzeigenvarianten in liga und team nicht.
                        Folgende Fehlermeldung sagt das Script, weiss jemand rat?

                        23.7.2022, 16:49:23.494	[info ]: javascript.0 (14922) Stop script script.js.common.Buli
                        23.7.2022, 16:49:23.520	[info ]: javascript.0 (14922) Start javascript script.js.common.Buli
                        23.7.2022, 16:49:23.527	[info ]: javascript.0 (14922) script.js.common.Buli: Create Ligen Script Start
                        23.7.2022, 16:49:23.528	[info ]: javascript.0 (14922) script.js.common.Buli: registered 8 subscriptions and 0 schedules
                        23.7.2022, 16:49:26.531	[warn ]: javascript.0 (14922) script.js.common.Buli: Eintrag für JARVIS (Anzeigevariante DP liga): {"openligadb.0.bl1.2022.allmatches":"1. Bundesliga 2022","openligadb.0.bl2.2022.allmatches":"2. Bundesliga 2022","openligadb.0.dfb2022.2022.allmatches":"DFB-Pokal 2022"}
                        23.7.2022, 16:49:26.534	[info ]: javascript.0 (14922) script.js.common.Buli: DevState: liga gefunden!
                        23.7.2022, 16:49:26.537	[error]: javascript.0 (14922)     at setDeviceIdState (script.js.common.Buli:676:57)
                        23.7.2022, 16:49:26.538	[error]: javascript.0 (14922)     at createLigen (script.js.common.Buli:355:13)
                        23.7.2022, 16:49:26.538	[error]: javascript.0 (14922)     at Object.<anonymous> (script.js.common.Buli:61:13)
                        23.7.2022, 16:49:29.574	[info ]: javascript.0 (14922) script.js.common.Buli: bdlLigaDP: openligadb.0.bl1.2022.allmatches
                        23.7.2022, 16:49:29.575	[info ]: javascript.0 (14922) script.js.common.Buli: Create Team Liga-Änderung
                        23.7.2022, 16:49:29.576	[info ]: javascript.0 (14922) script.js.common.Buli: Liga create Teams: openligadb.0.bl1.2022.allmatches
                        23.7.2022, 16:49:29.591	[warn ]: javascript.0 (14922) script.js.common.Buli: Eintrag für JARVIS (Anzeigevariante DP team): {"6":"Bayer Leverkusen","7":"Borussia Dortmund","9":"FC Schalke 04","16":"VfB Stuttgart","40":"FC Bayern München","54":"Hertha BSC","65":"1. FC Köln","80":"1. FC Union Berlin","81":"1. FSV Mainz 05","87":"Borussia Mönchengladbach","91":"Eintracht Frankfurt","95":"FC Augsburg","112":"SC Freiburg","129":"VfL Bochum","131":"VfL Wolfsburg","134":"Werder Bremen","175":"TSG 1899 Hoffenheim","1635":"RB Leipzig","":"Keine Auswahl"}
                        23.7.2022, 16:49:32.624	[info ]: javascript.0 (14922) script.js.common.Buli: TeamDP -> Keine Auswahl ausgewählt
                        23.7.2022, 16:49:32.625	[info ]: javascript.0 (14922) script.js.common.Buli: bdlLigaDP: openligadb.0.bl1.2022.allmatches
                        23.7.2022, 16:49:34.593	[info ]: javascript.0 (14922) script.js.common.Buli: bdlLigaDP -> createTeams: openligadb.0.bl1.2022.allmatches
                        23.7.2022, 16:49:34.613	[info ]: javascript.0 (14922) script.js.common.Buli: bdlLigaDP -> configStates: {"6":"Bayer Leverkusen","7":"Borussia Dortmund","9":"FC Schalke 04","16":"VfB Stuttgart","40":"FC Bayern München","54":"Hertha BSC","65":"1. FC Köln","80":"1. FC Union Berlin","81":"1. FSV Mainz 05","87":"Borussia Mönchengladbach","91":"Eintracht Frankfurt","95":"FC Augsburg","112":"SC Freiburg","129":"VfL Bochum","131":"VfL Wolfsburg","134":"Werder Bremen","175":"TSG 1899 Hoffenheim","1635":"RB Leipzig","":"Keine Auswahl"}
                        23.7.2022, 16:49:34.614	[info ]: javascript.0 (14922) script.js.common.Buli: DevState: team gefunden!
                        23.7.2022, 16:49:34.618	[error]: javascript.0 (14922)     at setDeviceIdState (script.js.common.Buli:676:57)
                        23.7.2022, 16:49:34.618	[error]: javascript.0 (14922)     at Object.<anonymous> (script.js.common.Buli:199:21)
                        

                        Link: Anleitung
                        Die Geräte ID "Bundesliga" wird vom Scan richtig erkannte und hinterlegt.

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          MCU @Urknall last edited by MCU

                          @urknall Zeig mal bitte den stateDP von jarvis liga.
                          66931235-4232-4226-9651-9d93a5215ef2-image.png

                          Hattest du dort etwas eingetragen?
                          1266add4-7aaf-47cc-9cb4-724bb433f3bb-image.png

                          U 1 Reply Last reply Reply Quote 0
                          • U
                            Urknall @MCU last edited by Urknall

                            @mcu sagte in HowTo: Zusatz-Programme fuer jarvis v3:

                            @urknall Zeig mal bitte den stateDP von jarvis liga.
                            66931235-4232-4226-9651-9d93a5215ef2-image.png

                            Hattest du dort etwas eingetragen?
                            1266add4-7aaf-47cc-9cb4-724bb433f3bb-image.png

                            Nein da habe ich nix eingetragen da durch script ausgefüllt wird.

                            Meintest du:

                            0_userdata.0.jarvis.bdl.liga
                            
                            M 1 Reply Last reply Reply Quote 0
                            • M
                              MCU @Urknall last edited by MCU

                              @urknall Nein, den DP in jarvis
                              99263e4c-bd16-4cc4-a28f-a9e37a198a90-image.png

                              Zeig mal bitte die Objektstruktur von
                              84d30dc4-b26f-46d2-b04e-d08da03e63a4-image.png

                              U 1 Reply Last reply Reply Quote 0
                              • U
                                Urknall @MCU last edited by Urknall

                                @mcu sagte in HowTo: Zusatz-Programme fuer jarvis v3:

                                @urknall Nein, den DP in jarvis
                                99263e4c-bd16-4cc4-a28f-a9e37a198a90-image.png

                                Bildschirmfoto 2022-07-23 um 19.42.09.png

                                Bildschirmfoto 2022-07-23 um 19.43.01.png

                                M 1 Reply Last reply Reply Quote 0
                                • M
                                  MCU @Urknall last edited by

                                  @urknall Mit Daten.

                                  U 1 Reply Last reply Reply Quote 0
                                  • U
                                    Urknall @MCU last edited by

                                    @mcu sagte in HowTo: Zusatz-Programme fuer jarvis v3:

                                    @urknall Mit Daten.

                                    Bildschirmfoto 2022-07-23 um 19.43.58.png

                                    M 1 Reply Last reply Reply Quote 0
                                    • M
                                      MCU @Urknall last edited by

                                      @urknall Du hast jarvis nicht parallel in der Konfiguration offen, wenn du das Programm startest?

                                      U 1 Reply Last reply Reply Quote 0
                                      • U
                                        Urknall @MCU last edited by

                                        @mcu sagte in HowTo: Zusatz-Programme fuer jarvis v3:

                                        @urknall Du hast jarvis nicht parallel in der Konfiguration offen, wenn du das Programm startest?

                                        Nein, aber kann jarvis nochmal komolett
                                        zu machen und dann das jarvis Programm starten.

                                        M 1 Reply Last reply Reply Quote 0
                                        • M
                                          MCU @Urknall last edited by MCU

                                          @urknall Das Log müsste so aussehen:
                                          b51ef30c-a475-4dd7-8367-9190722850c0-image.png
                                          Jarvis-Device von Instanz 0 ... kommt bei Dir nicht.
                                          Das ist eigentlich nur der fall wenn parallel jarvis in der Konfig geöffnet ist und somit den devices DP sperrt.

                                          U 1 Reply Last reply Reply Quote 0
                                          • U
                                            Urknall @MCU last edited by

                                            @mcu sagte in HowTo: Zusatz-Programme fuer jarvis v3:

                                            @urknall Das Log müsste so aussehen:
                                            b51ef30c-a475-4dd7-8367-9190722850c0-image.png
                                            Jarvis-Device von Instanz 0 ... kommt bei Dir nicht.
                                            Das ist eigentlich nur der fall wenn parallel jarvis in der Konfig geöffnet ist und somit den devices DP sperrt.

                                            Soll ich Jarvis als Insatnz auf "Pause" setzen?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            801
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            30
                                            858
                                            147009
                                            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