Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. jarvis v3.2.x - just another remarkable vis

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

jarvis v3.2.x - just another remarkable vis

Scheduled Pinned Locked Moved Tester
930 Posts 44 Posters 261.5k Views 42 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Matzeit
    wrote on last edited by
    #54

    Also ich habe es nicht hinbekommen, die Meldung erscheint immer noch. Habe das Widget "Müllkalender" gelöscht. Die Meldung kommt auch alle 5 Minuten, was irgendwie mit den Intervalleinstellungen zu tun hat, oder? D.h. es müsste irgendwo ein "Phantom"-Widget noch aktiv sein. Wo könnte ich da nachschauen? Unter den objects gibt es ein widgets Objekt, aber darin finde ich keinen string mit "Müllkalender".

    M 1 Reply Last reply
    0
    • M Matzeit

      Also ich habe es nicht hinbekommen, die Meldung erscheint immer noch. Habe das Widget "Müllkalender" gelöscht. Die Meldung kommt auch alle 5 Minuten, was irgendwie mit den Intervalleinstellungen zu tun hat, oder? D.h. es müsste irgendwo ein "Phantom"-Widget noch aktiv sein. Wo könnte ich da nachschauen? Unter den objects gibt es ein widgets Objekt, aber darin finde ich keinen string mit "Müllkalender".

      M Online
      M Online
      MCU
      wrote on last edited by
      #55

      @matzeit mit v 3.2.0 beta.10 geht alles über den Cache. Also muss man immer den Cache löschen.
      Auf jeden Fall probieren.

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      M 1 Reply Last reply
      0
      • M MCU

        @matzeit mit v 3.2.0 beta.10 geht alles über den Cache. Also muss man immer den Cache löschen.
        Auf jeden Fall probieren.

        M Offline
        M Offline
        Matzeit
        wrote on last edited by
        #56

        @mcu Welcher Cache ist denn genau gemeint? Browser habe ich gelöscht. Habe ein Tablet an der Wand mit Fully noch. Oder den Cache vom OS wo iobroker drauf läuft?

        M 1 Reply Last reply
        0
        • M Matzeit

          @mcu Welcher Cache ist denn genau gemeint? Browser habe ich gelöscht. Habe ein Tablet an der Wand mit Fully noch. Oder den Cache vom OS wo iobroker drauf läuft?

          M Online
          M Online
          MCU
          wrote on last edited by
          #57

          @matzeit Browser Cache

          NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

          M 1 Reply Last reply
          0
          • M MCU

            @matzeit Browser Cache

            M Offline
            M Offline
            Matzeit
            wrote on last edited by Matzeit
            #58

            @mcu Die Meldung kommt alle 5 Minuten in den Log. Auch wenn alle Geräte ausgeschaltet sind. Gestern war es kurz weg als ich Browser Cache gelöscht hatte bzw. den Kalender "Müllkalender" Widget gelöscht hatte und Jarvis.0 neugestartet habe.
            Ich könnte vermuten, dass die Termine im Kalender womöglich nicht interpretiert werden können da ich so sachen drinn habe wie "Alle 4 Wochen" etc.
            Werde das entsprechende Kalender-Widget wieder löschen.

            hotspot_2H 1 Reply Last reply
            0
            • M Matzeit

              @mcu Die Meldung kommt alle 5 Minuten in den Log. Auch wenn alle Geräte ausgeschaltet sind. Gestern war es kurz weg als ich Browser Cache gelöscht hatte bzw. den Kalender "Müllkalender" Widget gelöscht hatte und Jarvis.0 neugestartet habe.
              Ich könnte vermuten, dass die Termine im Kalender womöglich nicht interpretiert werden können da ich so sachen drinn habe wie "Alle 4 Wochen" etc.
              Werde das entsprechende Kalender-Widget wieder löschen.

              hotspot_2H Offline
              hotspot_2H Offline
              hotspot_2
              wrote on last edited by
              #59

              Hallo zusammen,

              mit der Beta 12 startet Jarvis bei mir nicht mehr.

              https://github.com/Zefau/ioBroker.jarvis/issues/2644

              Kennt jemand einen Weg wie ich vorübergehend die Beta 11 wieder installieren kann? Hab mich schon so an 3.2.x gewöhnt, möchte ungern auf 3.1.x zurück wenn es irgendwie gehen würde.

              Danke schon mal.

              M 1 Reply Last reply
              0
              • hotspot_2H hotspot_2

                Hallo zusammen,

                mit der Beta 12 startet Jarvis bei mir nicht mehr.

                https://github.com/Zefau/ioBroker.jarvis/issues/2644

                Kennt jemand einen Weg wie ich vorübergehend die Beta 11 wieder installieren kann? Hab mich schon so an 3.2.x gewöhnt, möchte ungern auf 3.1.x zurück wenn es irgendwie gehen würde.

                Danke schon mal.

                M Online
                M Online
                MCU
                wrote on last edited by
                #60

                @hotspot_2

                https://mcuiobroker.gitbook.io/jarvis-infos/jarvis-v3/v3-fuer-einsteiger/installation-jarvis-v3#installation-commit-version-bestimmte-alpha-version
                beta.10

                https://github.com/Zefau/ioBroker.jarvis/tree/fca82c9bb7a5af7f1c1fd3ef869e17270c819ebc
                

                NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                hotspot_2H 1 Reply Last reply
                0
                • M MCU

                  @hotspot_2

                  https://mcuiobroker.gitbook.io/jarvis-infos/jarvis-v3/v3-fuer-einsteiger/installation-jarvis-v3#installation-commit-version-bestimmte-alpha-version
                  beta.10

                  https://github.com/Zefau/ioBroker.jarvis/tree/fca82c9bb7a5af7f1c1fd3ef869e17270c819ebc
                  
                  hotspot_2H Offline
                  hotspot_2H Offline
                  hotspot_2
                  wrote on last edited by
                  #61

                  @mcu Danke! Funktioniert wieder.

                  1 Reply Last reply
                  0
                  • ZefauZ Zefau

                    Hallo zusammen,

                    ich suche eine paar Wenige, die die jarvis v3.2.x im alpha testen könnten.

                    Ab v3.2.x sollten ältere Geräte unterstützt werden, die unter jarvis v3.1 (bzw. auch vis) nicht (mehr) funktionieren. Bei mir persönlich betrifft es das iPad Air 1 mit iOS 12.5, was nun mit v3.2 funktioniert.

                    Hat jemand solche ältere Geräte und könnte testen, ob v3.2 läuft und ob ggf. etwas vom Design zerschossen ist?

                    Installation der alpha wie gewohnt via Github, siehe https://github.com/Zefau/ioBroker.jarvis bzw. https://github.com/Zefau/ioBroker.jarvis/issues/866

                    H Offline
                    H Offline
                    hvb
                    wrote on last edited by hvb
                    #62

                    Hi, Ich hab in machen widgets, z.b. JsonTable, JavaScript zur Formatierung der Werte.

                    {
                        "field": "updated",
                        "label": "Updated",
                        "format": "val => {try{formatTimeStamp(val)}catch(err){console.log(err.message)}finally{}}"
                    },
                    

                    formatTimeStamp ist in Scripts definiert.

                    function formatTimeStamp (val) {
                         return (val === undefined ? '' : new Date(Number(val)).toLocaleString('de-DE'));    // Timestamp in UNIX format
                    }
                    

                    In version 3.2.x Beta 10 wird die Formatierung nicht ausgeführt, da die function formatTimeStamp nicht verfügbar ist. Hier noch das Browser Log

                    App Time - Processed Users and Groups: 21.00ms
                    index-bd3a13be.js:69 Pro Valid Pro User: 
                    index-bd3a13be.js:131 App Time - Validated pro: 42.00ms
                    index-bd3a13be.js:131 settings Loaded from cache.
                    index-bd3a13be.js:127 Apply settings...
                    index-bd3a13be.js:131 layout Loaded from cache.
                    index-bd3a13be.js:131 devices Loaded from cache.
                    index-bd3a13be.js:131 widgets Loaded from cache.
                    index-bd3a13be.js:131 styles Loaded from cache.
                    index-bd3a13be.js:131 scripts Loaded from cache.
                    index-bd3a13be.js:131 App Time - Cache loaded: 48.00ms
                    6[Violation] Added non-passive event listener to a scroll-blocking <some> event. Consider marking event handler as 'passive' to make the page more responsive. See <URL>
                    index-bd3a13be.js:127 Apply settings...
                    index-bd3a13be.js:127 settings Received payload and signature has CHANGED!
                    index-bd3a13be.js:127 devices Received payload, but signature is unchanged. Do nothing.
                    index-bd3a13be.js:131 App Time - Processed Devices: 558.00ms
                    VM578:1 formatTimeStamp is not defined
                    10VM578:1 formatTimeStamp is not defined
                    index-bd3a13be.js:127 widgets Received payload, but signature is unchanged. Do nothing.
                    index-bd3a13be.js:127 layout Received payload, but signature is unchanged. Do nothing.
                    index-bd3a13be.js:127 styles Received payload, but signature is unchanged. Do nothing.
                    index-bd3a13be.js:127 scripts Received payload, but signature is unchanged. Do nothing.
                    index-bd3a13be.js:131 App Time - Processed Widgets, Layout, Styles and Scripts: 692.00ms
                    index-bd3a13be.js:131 App Sentry is turned on. You may deactivate it in the adapter settings.
                    index-bd3a13be.js:24 App Time - Processed Config and Adapter-Instances: 727.00ms
                    index-bd3a13be.js:24 App Last Verification:  1717656450757
                    index-bd3a13be.js:24 App Development Mode:  false
                    index-bd3a13be.js:24 App Time - Verified installation: 729.00ms
                    index-bd3a13be.js:24 App Time - Processed Icons: 809.00ms
                    
                    M 1 Reply Last reply
                    0
                    • H hvb

                      Hi, Ich hab in machen widgets, z.b. JsonTable, JavaScript zur Formatierung der Werte.

                      {
                          "field": "updated",
                          "label": "Updated",
                          "format": "val => {try{formatTimeStamp(val)}catch(err){console.log(err.message)}finally{}}"
                      },
                      

                      formatTimeStamp ist in Scripts definiert.

                      function formatTimeStamp (val) {
                           return (val === undefined ? '' : new Date(Number(val)).toLocaleString('de-DE'));    // Timestamp in UNIX format
                      }
                      

                      In version 3.2.x Beta 10 wird die Formatierung nicht ausgeführt, da die function formatTimeStamp nicht verfügbar ist. Hier noch das Browser Log

                      App Time - Processed Users and Groups: 21.00ms
                      index-bd3a13be.js:69 Pro Valid Pro User: 
                      index-bd3a13be.js:131 App Time - Validated pro: 42.00ms
                      index-bd3a13be.js:131 settings Loaded from cache.
                      index-bd3a13be.js:127 Apply settings...
                      index-bd3a13be.js:131 layout Loaded from cache.
                      index-bd3a13be.js:131 devices Loaded from cache.
                      index-bd3a13be.js:131 widgets Loaded from cache.
                      index-bd3a13be.js:131 styles Loaded from cache.
                      index-bd3a13be.js:131 scripts Loaded from cache.
                      index-bd3a13be.js:131 App Time - Cache loaded: 48.00ms
                      6[Violation] Added non-passive event listener to a scroll-blocking <some> event. Consider marking event handler as 'passive' to make the page more responsive. See <URL>
                      index-bd3a13be.js:127 Apply settings...
                      index-bd3a13be.js:127 settings Received payload and signature has CHANGED!
                      index-bd3a13be.js:127 devices Received payload, but signature is unchanged. Do nothing.
                      index-bd3a13be.js:131 App Time - Processed Devices: 558.00ms
                      VM578:1 formatTimeStamp is not defined
                      10VM578:1 formatTimeStamp is not defined
                      index-bd3a13be.js:127 widgets Received payload, but signature is unchanged. Do nothing.
                      index-bd3a13be.js:127 layout Received payload, but signature is unchanged. Do nothing.
                      index-bd3a13be.js:127 styles Received payload, but signature is unchanged. Do nothing.
                      index-bd3a13be.js:127 scripts Received payload, but signature is unchanged. Do nothing.
                      index-bd3a13be.js:131 App Time - Processed Widgets, Layout, Styles and Scripts: 692.00ms
                      index-bd3a13be.js:131 App Sentry is turned on. You may deactivate it in the adapter settings.
                      index-bd3a13be.js:24 App Time - Processed Config and Adapter-Instances: 727.00ms
                      index-bd3a13be.js:24 App Last Verification:  1717656450757
                      index-bd3a13be.js:24 App Development Mode:  false
                      index-bd3a13be.js:24 App Time - Verified installation: 729.00ms
                      index-bd3a13be.js:24 App Time - Processed Icons: 809.00ms
                      
                      M Online
                      M Online
                      MCU
                      wrote on last edited by
                      #63

                      @hvb ab v3.2.0 wurde date() in jDate() umbenannt. Eigene Funktionen gehen nicht.

                      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                      H 1 Reply Last reply
                      1
                      • M MCU

                        @hvb ab v3.2.0 wurde date() in jDate() umbenannt. Eigene Funktionen gehen nicht.

                        H Offline
                        H Offline
                        hvb
                        wrote on last edited by
                        #64

                        @mcu Das Problem ist nicht der Date() call innerhalb von formatTimeStamp. Gleiches Ergebnis nach Anpassung auf jDate().
                        Ich hab noch andere Widgets mit JsonTable die die gleiche Mimik verwenden um values zu formatieren aber kein Date().

                        Beim neu laden der Seite werfen alle Aufrufe die auf eine function in Scripts zugreifen einen Error, da die aufgerufene function nicht definiert ist. Vermutlich weil Scripts noch nicht geladen ist zu diesem Zeitpunkt. Wechselt man dann zu einem anderen Tab im Layout und wieder zurück, funktioniert alles.

                        Hier mal noch ein paar screen shots und das log:

                        Neu laden der Page:
                        17a800ca-04e4-48b8-8e2d-f8dfad101c4d-image.png

                        Log nach neu laden:
                        25d83c38-795c-4d60-8ce2-4b1329995ae3-image.png
                        ......
                        1f21738c-c797-4095-a446-56c2829da978-image.png

                        Die Fehler werden geworfen bevor Widgets, Layout, Style und Scripts geladen sind

                        Wechsel zu einem anderen tab und wieder zurück -> alles wird so formatiert wie gewünscht. Keine Fehler mehr im Log, da Scripts verfügbar.
                        81ae1d70-65e4-4e20-87ee-b08cbe19eb8f-image.png

                        M 1 Reply Last reply
                        0
                        • H hvb

                          @mcu Das Problem ist nicht der Date() call innerhalb von formatTimeStamp. Gleiches Ergebnis nach Anpassung auf jDate().
                          Ich hab noch andere Widgets mit JsonTable die die gleiche Mimik verwenden um values zu formatieren aber kein Date().

                          Beim neu laden der Seite werfen alle Aufrufe die auf eine function in Scripts zugreifen einen Error, da die aufgerufene function nicht definiert ist. Vermutlich weil Scripts noch nicht geladen ist zu diesem Zeitpunkt. Wechselt man dann zu einem anderen Tab im Layout und wieder zurück, funktioniert alles.

                          Hier mal noch ein paar screen shots und das log:

                          Neu laden der Page:
                          17a800ca-04e4-48b8-8e2d-f8dfad101c4d-image.png

                          Log nach neu laden:
                          25d83c38-795c-4d60-8ce2-4b1329995ae3-image.png
                          ......
                          1f21738c-c797-4095-a446-56c2829da978-image.png

                          Die Fehler werden geworfen bevor Widgets, Layout, Style und Scripts geladen sind

                          Wechsel zu einem anderen tab und wieder zurück -> alles wird so formatiert wie gewünscht. Keine Fehler mehr im Log, da Scripts verfügbar.
                          81ae1d70-65e4-4e20-87ee-b08cbe19eb8f-image.png

                          M Online
                          M Online
                          MCU
                          wrote on last edited by
                          #65

                          @hvb
                          Dann evtl mit

                          if (typeof myFunction === 'function') {
                          

                          vorher überprüfen, würde aber nur die Fehler verhindern, die Anzeige wäre trotzdem leer.

                          Bleibt nur Funktionen zu verwenden, die verfügbar sind, wie jDate().

                          Oder direkt die Funktion (new Date(Number(val)).toLocaleString('de-DE')) in format verwenden.

                          NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                          1 Reply Last reply
                          0
                          • ZefauZ Zefau

                            Hallo zusammen,

                            ich suche eine paar Wenige, die die jarvis v3.2.x im alpha testen könnten.

                            Ab v3.2.x sollten ältere Geräte unterstützt werden, die unter jarvis v3.1 (bzw. auch vis) nicht (mehr) funktionieren. Bei mir persönlich betrifft es das iPad Air 1 mit iOS 12.5, was nun mit v3.2 funktioniert.

                            Hat jemand solche ältere Geräte und könnte testen, ob v3.2 läuft und ob ggf. etwas vom Design zerschossen ist?

                            Installation der alpha wie gewohnt via Github, siehe https://github.com/Zefau/ioBroker.jarvis bzw. https://github.com/Zefau/ioBroker.jarvis/issues/866

                            H Offline
                            H Offline
                            hvb
                            wrote on last edited by
                            #66

                            @MCU Verstehe ich Deine Antwort richtig, dass eigene Funktionen im Moment nicht mehr gehen?
                            Kommt das wieder oder wird das künftig nicht mehr unterstützt? Wäre schade, hab das ziemlich oft verwendet.

                            M 1 Reply Last reply
                            0
                            • H hvb

                              @MCU Verstehe ich Deine Antwort richtig, dass eigene Funktionen im Moment nicht mehr gehen?
                              Kommt das wieder oder wird das künftig nicht mehr unterstützt? Wäre schade, hab das ziemlich oft verwendet.

                              M Online
                              M Online
                              MCU
                              wrote on last edited by MCU
                              #67

                              @hvb Nein ich wusste es gar nicht, dass sie funktionieren. Habe es nie getestet und gebraucht.
                              Du kannst ja auch ein Issue dafür anlegen, wenn es so in v3.1.8 funktioniert hat.

                              Vielleicht muss man für "eigene Funktionen", die man in jarvis für Module nutzen möchte, ein "Preload"-scripts definieren?

                              NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                              Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                              H 1 Reply Last reply
                              0
                              • M MCU

                                @hvb Nein ich wusste es gar nicht, dass sie funktionieren. Habe es nie getestet und gebraucht.
                                Du kannst ja auch ein Issue dafür anlegen, wenn es so in v3.1.8 funktioniert hat.

                                Vielleicht muss man für "eigene Funktionen", die man in jarvis für Module nutzen möchte, ein "Preload"-scripts definieren?

                                H Offline
                                H Offline
                                hvb
                                wrote on last edited by
                                #68

                                @mcu OK, mach ich. Würde sehr bei komplexeren Aktivitäten helfen. Das wird sonst schnell unübersichtlich und nicht mehr wartbar, wenn man alles ins widget packen muss.

                                M 1 Reply Last reply
                                0
                                • H hvb

                                  @mcu OK, mach ich. Würde sehr bei komplexeren Aktivitäten helfen. Das wird sonst schnell unübersichtlich und nicht mehr wartbar, wenn man alles ins widget packen muss.

                                  M Online
                                  M Online
                                  MCU
                                  wrote on last edited by MCU
                                  #69

                                  @hvb Die Frage ist warum du für eine solch große Tabelle nicht ein eigenes javascript nutzt?
                                  Dort kannst du dann die Formate vorgeben, auch mit eigenen Funktionen.

                                  NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                                  Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                                  H 1 Reply Last reply
                                  0
                                  • M MCU

                                    @hvb Die Frage ist warum du für eine solch große Tabelle nicht ein eigenes javascript nutzt?
                                    Dort kannst du dann die Formate vorgeben, auch mit eigenen Funktionen.

                                    H Offline
                                    H Offline
                                    hvb
                                    wrote on last edited by
                                    #70

                                    @mcu Das würde natürlich funktionieren. Da das JSON die Rohdaten enthält und ich es eh per server script erzeuge, könnte ich natürlich auf ein formatierte Version erzeugen für das widget. Das mach Sinn.

                                    Ich hab noch einen anderen Anwendungsfall. Ich erzeuge mit styles und client seitigem script aus einer ButtonGroupAction eine ToggelButtonListe die mir auch noch anzeigt, was gerade aktiv ist.

                                    e4c2d13a-9f7c-49d0-b427-10c6e233cba8-image.png

                                    Im obigen Fall ein Umschalten zwischen Automatik, Manuell AN, Manuell AUS
                                    Das geht nur durch direkte DOM manipulation also nicht serverseitig lösbar.

                                    M 1 Reply Last reply
                                    0
                                    • H hvb

                                      @mcu Das würde natürlich funktionieren. Da das JSON die Rohdaten enthält und ich es eh per server script erzeuge, könnte ich natürlich auf ein formatierte Version erzeugen für das widget. Das mach Sinn.

                                      Ich hab noch einen anderen Anwendungsfall. Ich erzeuge mit styles und client seitigem script aus einer ButtonGroupAction eine ToggelButtonListe die mir auch noch anzeigt, was gerade aktiv ist.

                                      e4c2d13a-9f7c-49d0-b427-10c6e233cba8-image.png

                                      Im obigen Fall ein Umschalten zwischen Automatik, Manuell AN, Manuell AUS
                                      Das geht nur durch direkte DOM manipulation also nicht serverseitig lösbar.

                                      M Online
                                      M Online
                                      MCU
                                      wrote on last edited by
                                      #71

                                      @hvb Zeig mal bitte das Script dazu.

                                      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                                      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                                      H 1 Reply Last reply
                                      0
                                      • M MCU

                                        @hvb Zeig mal bitte das Script dazu.

                                        H Offline
                                        H Offline
                                        hvb
                                        wrote on last edited by
                                        #72

                                        @mcu

                                        Algemeine function um das richtige Element zu finden und eine Klasse "button-pressed" zu setzen oder wieder zu entfernen:
                                        Wird mit der Value des Button, der deviceId und einem Device spezifischen Mapping aufgerufen.

                                        function styleButtonGroup(val, deviceId, mapping){    
                                            //console.log(`val: ${val} deviceId: ${deviceId}`)
                                            var buttons = null
                                            var button = null
                                            var icons = null
                                        
                                            // see whether there is a widget containing a listItem with a ButtonGroupAction that has a listItemBody containing a hidden label that matches our deviceId
                                            var listItems = document.querySelectorAll('.jarvis-StateListItem:has(.jarvis-ButtonGroupAction)')
                                            //console.log(listItems)
                                            listItems?.forEach((listItem) => {
                                                //console.log(listItem)
                                                var label = listItem.querySelector('.jarvis-StateListItem-Body .q-item__label.q-item__label--caption')
                                                console.log(label)
                                                if(label?.textContent === deviceId) {
                                                    buttons = listItem.querySelectorAll('.jarvis-ButtonGroupAction button')
                                                    //console.log(buttons)
                                                    buttons?.forEach((button) => {
                                                        //console.log(button)
                                                        if(button.classList.contains('jarvis-ButtonGroupAction-' + mapping[val])) {
                                                            button.classList.add('button-pressed')
                                                        }
                                                        else{
                                                            button.classList.remove('button-pressed')
                                                        } 
                                                    })
                                                    icons = listItem.querySelectorAll('.jarvis-ButtonGroupAction .icon')
                                                    //console.log(icon)
                                                    icons?.forEach((icon) => {
                                                        //console.log(icon)
                                                        for (const scene in mapping) {
                                                            const sceneName = mapping[scene]
                                                            //console.log(sceneName)
                                                            if(icon.classList.contains('jarvis-ButtonGroupAction-' + sceneName)) {
                                                                icon.classList.add(sceneName)
                                                            }
                                                        }
                                                    })        
                                                 }
                                            }) 
                                        }
                                        // AutoMation Mapping
                                        const autoOnOffMapping = {
                                          "AUTO":"AUTO",
                                          "ON":"ON",
                                          "OFF":"OFF"
                                        }
                                        // Wir vom Device aus aufgerufen
                                        function styleMotionLightButtonGroup(val, deviceId){ 
                                            styleButtonGroup(val, deviceId, autoOnOffMapping)
                                        }
                                        

                                        Und jetzt noch die zugehörigen styles:

                                        /*
                                          ButtonGroupAction icon definitiions
                                        */
                                        
                                        .AUTO {
                                        	--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M12.68 6h-1.36L7 16h2l.73-2h4.54l.73 2h2zm-2.38 6.5L12 8l1.7 4.5zm7.1 7.9L19 22h-5v-5l2 2c2.39-1.39 4-4.05 4-7c0-4.41-3.59-8-8-8s-8 3.59-8 8c0 2.95 1.61 5.53 4 6.92v2.24C4.47 19.61 2 16.1 2 12C2 6.5 6.5 2 12 2s10 4.5 10 10c0 3.53-1.83 6.62-4.6 8.4'/%3E%3C/svg%3E");
                                        	-webkit-mask-image: var(--svg);
                                        	mask-image: var(--svg);
                                        }
                                        
                                        .ON {
                                        	--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='m16.56 5.44l-1.45 1.45A5.969 5.969 0 0 1 18 12a6 6 0 0 1-6 6a6 6 0 0 1-6-6c0-2.17 1.16-4.06 2.88-5.12L7.44 5.44A7.961 7.961 0 0 0 4 12a8 8 0 0 0 8 8a8 8 0 0 0 8-8c0-2.72-1.36-5.12-3.44-6.56M13 3h-2v10h2'/%3E%3C/svg%3E");
                                        	-webkit-mask-image: var(--svg);
                                        	mask-image: var(--svg);
                                        }
                                        
                                        .OFF {
                                        	--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M12 3a9 9 0 0 0-9 9a9 9 0 0 0 9 9a9 9 0 0 0 9-9a9 9 0 0 0-9-9m0 16a7 7 0 0 1-7-7a7 7 0 0 1 7-7a7 7 0 0 1 7 7a7 7 0 0 1-7 7'/%3E%3C/svg%3E");
                                        	-webkit-mask-image: var(--svg);
                                        	mask-image: var(--svg);
                                        }
                                        
                                        /* 
                                          handle ButtonGroupActions
                                        */
                                        
                                        /* 
                                          Allow the Group to expand to max-content instead of the default 60%
                                        */
                                        
                                        .jarvis-StateListItem-Action:has(.jarvis-ButtonGroupAction) {
                                        	/* Styles for ListAction when it contains GroupAction */
                                        	max-width: 100% !important;
                                        }
                                        
                                        .jarvis-StateListItem:has(.jarvis-ButtonGroupAction) .jarvis-StateListItem-Body .q-item__label.q-item__label--caption {
                                        	color: var(--q-primary);
                                        	margin-top: -1px;
                                        	height: 0px !important;
                                        	visibility: hidden;
                                        }
                                        
                                        /*
                                          jarvis-ButtonGroupAction gets the class with the background icon via java script
                                          and here we define the common styles for this
                                        */
                                        
                                        .jarvis-StateListItem:has(.jarvis-ButtonGroupAction) .q-btn__content .icon {
                                        	background-color: white !important;
                                        	display: inline-block;
                                        	width: 16px;
                                        	height: 16px;
                                        	-webkit-mask-repeat: no-repeat;
                                        	mask-repeat: no-repeat;
                                        	-webkit-mask-size: 100% 100%;
                                        	mask-size: 100% 100%;
                                        }
                                        
                                        /* 
                                          normally the content of the button is a text lablel, which we want to hide here
                                        */
                                        
                                        .jarvis-StateListItem:has(.jarvis-ButtonGroupAction) .q-btn__content:has(.icon)>:not(.icon) {
                                        	display: none;
                                        }
                                        
                                        /*
                                          highlight the button representing the current state
                                        */
                                        
                                        :root {
                                        	--q-primary: #1976d2;
                                        	--q-primary-red: 25;
                                        	--q-primary-green: 118;
                                        	--q-primary-blue: 210;
                                        }
                                        
                                        .q-btn-group>.q-btn-item.button-pressed {
                                        	background-color: rgba(var(--q-primary-red), var(--q-primary-green), var(--q-primary-blue), 0.5) !important;
                                        	border: 1px solid grey;
                                        }
                                        

                                        Das Widget dazu sieht so aus:
                                        578d2aae-4a0f-4308-93de-45cad527265d-image.png

                                        Und das zugehörige Device so:
                                        c1d0bc9c-b1ab-42b7-a99a-c5db899998f6-image.png

                                        Der Trick ist, dass im CustomTextBody die deviceId steckt und das dadurch erzeugte Element hidden ist. Damit kann man das richtige device im Dom finden und dann modifizieren.

                                        In den State Properties steht dann der Aufruf der function styleButtonGroup in Script.
                                        8e1202e6-36d6-436a-905b-4dbe9028a639-image.png

                                        Damit kann man auch Hue Scenen auf Buttons legen:
                                        ff5bf76e-bb6f-496f-86e6-5baf39775993-image.png

                                        M 1 Reply Last reply
                                        1
                                        • H hvb

                                          @mcu

                                          Algemeine function um das richtige Element zu finden und eine Klasse "button-pressed" zu setzen oder wieder zu entfernen:
                                          Wird mit der Value des Button, der deviceId und einem Device spezifischen Mapping aufgerufen.

                                          function styleButtonGroup(val, deviceId, mapping){    
                                              //console.log(`val: ${val} deviceId: ${deviceId}`)
                                              var buttons = null
                                              var button = null
                                              var icons = null
                                          
                                              // see whether there is a widget containing a listItem with a ButtonGroupAction that has a listItemBody containing a hidden label that matches our deviceId
                                              var listItems = document.querySelectorAll('.jarvis-StateListItem:has(.jarvis-ButtonGroupAction)')
                                              //console.log(listItems)
                                              listItems?.forEach((listItem) => {
                                                  //console.log(listItem)
                                                  var label = listItem.querySelector('.jarvis-StateListItem-Body .q-item__label.q-item__label--caption')
                                                  console.log(label)
                                                  if(label?.textContent === deviceId) {
                                                      buttons = listItem.querySelectorAll('.jarvis-ButtonGroupAction button')
                                                      //console.log(buttons)
                                                      buttons?.forEach((button) => {
                                                          //console.log(button)
                                                          if(button.classList.contains('jarvis-ButtonGroupAction-' + mapping[val])) {
                                                              button.classList.add('button-pressed')
                                                          }
                                                          else{
                                                              button.classList.remove('button-pressed')
                                                          } 
                                                      })
                                                      icons = listItem.querySelectorAll('.jarvis-ButtonGroupAction .icon')
                                                      //console.log(icon)
                                                      icons?.forEach((icon) => {
                                                          //console.log(icon)
                                                          for (const scene in mapping) {
                                                              const sceneName = mapping[scene]
                                                              //console.log(sceneName)
                                                              if(icon.classList.contains('jarvis-ButtonGroupAction-' + sceneName)) {
                                                                  icon.classList.add(sceneName)
                                                              }
                                                          }
                                                      })        
                                                   }
                                              }) 
                                          }
                                          // AutoMation Mapping
                                          const autoOnOffMapping = {
                                            "AUTO":"AUTO",
                                            "ON":"ON",
                                            "OFF":"OFF"
                                          }
                                          // Wir vom Device aus aufgerufen
                                          function styleMotionLightButtonGroup(val, deviceId){ 
                                              styleButtonGroup(val, deviceId, autoOnOffMapping)
                                          }
                                          

                                          Und jetzt noch die zugehörigen styles:

                                          /*
                                            ButtonGroupAction icon definitiions
                                          */
                                          
                                          .AUTO {
                                          	--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M12.68 6h-1.36L7 16h2l.73-2h4.54l.73 2h2zm-2.38 6.5L12 8l1.7 4.5zm7.1 7.9L19 22h-5v-5l2 2c2.39-1.39 4-4.05 4-7c0-4.41-3.59-8-8-8s-8 3.59-8 8c0 2.95 1.61 5.53 4 6.92v2.24C4.47 19.61 2 16.1 2 12C2 6.5 6.5 2 12 2s10 4.5 10 10c0 3.53-1.83 6.62-4.6 8.4'/%3E%3C/svg%3E");
                                          	-webkit-mask-image: var(--svg);
                                          	mask-image: var(--svg);
                                          }
                                          
                                          .ON {
                                          	--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='m16.56 5.44l-1.45 1.45A5.969 5.969 0 0 1 18 12a6 6 0 0 1-6 6a6 6 0 0 1-6-6c0-2.17 1.16-4.06 2.88-5.12L7.44 5.44A7.961 7.961 0 0 0 4 12a8 8 0 0 0 8 8a8 8 0 0 0 8-8c0-2.72-1.36-5.12-3.44-6.56M13 3h-2v10h2'/%3E%3C/svg%3E");
                                          	-webkit-mask-image: var(--svg);
                                          	mask-image: var(--svg);
                                          }
                                          
                                          .OFF {
                                          	--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M12 3a9 9 0 0 0-9 9a9 9 0 0 0 9 9a9 9 0 0 0 9-9a9 9 0 0 0-9-9m0 16a7 7 0 0 1-7-7a7 7 0 0 1 7-7a7 7 0 0 1 7 7a7 7 0 0 1-7 7'/%3E%3C/svg%3E");
                                          	-webkit-mask-image: var(--svg);
                                          	mask-image: var(--svg);
                                          }
                                          
                                          /* 
                                            handle ButtonGroupActions
                                          */
                                          
                                          /* 
                                            Allow the Group to expand to max-content instead of the default 60%
                                          */
                                          
                                          .jarvis-StateListItem-Action:has(.jarvis-ButtonGroupAction) {
                                          	/* Styles for ListAction when it contains GroupAction */
                                          	max-width: 100% !important;
                                          }
                                          
                                          .jarvis-StateListItem:has(.jarvis-ButtonGroupAction) .jarvis-StateListItem-Body .q-item__label.q-item__label--caption {
                                          	color: var(--q-primary);
                                          	margin-top: -1px;
                                          	height: 0px !important;
                                          	visibility: hidden;
                                          }
                                          
                                          /*
                                            jarvis-ButtonGroupAction gets the class with the background icon via java script
                                            and here we define the common styles for this
                                          */
                                          
                                          .jarvis-StateListItem:has(.jarvis-ButtonGroupAction) .q-btn__content .icon {
                                          	background-color: white !important;
                                          	display: inline-block;
                                          	width: 16px;
                                          	height: 16px;
                                          	-webkit-mask-repeat: no-repeat;
                                          	mask-repeat: no-repeat;
                                          	-webkit-mask-size: 100% 100%;
                                          	mask-size: 100% 100%;
                                          }
                                          
                                          /* 
                                            normally the content of the button is a text lablel, which we want to hide here
                                          */
                                          
                                          .jarvis-StateListItem:has(.jarvis-ButtonGroupAction) .q-btn__content:has(.icon)>:not(.icon) {
                                          	display: none;
                                          }
                                          
                                          /*
                                            highlight the button representing the current state
                                          */
                                          
                                          :root {
                                          	--q-primary: #1976d2;
                                          	--q-primary-red: 25;
                                          	--q-primary-green: 118;
                                          	--q-primary-blue: 210;
                                          }
                                          
                                          .q-btn-group>.q-btn-item.button-pressed {
                                          	background-color: rgba(var(--q-primary-red), var(--q-primary-green), var(--q-primary-blue), 0.5) !important;
                                          	border: 1px solid grey;
                                          }
                                          

                                          Das Widget dazu sieht so aus:
                                          578d2aae-4a0f-4308-93de-45cad527265d-image.png

                                          Und das zugehörige Device so:
                                          c1d0bc9c-b1ab-42b7-a99a-c5db899998f6-image.png

                                          Der Trick ist, dass im CustomTextBody die deviceId steckt und das dadurch erzeugte Element hidden ist. Damit kann man das richtige device im Dom finden und dann modifizieren.

                                          In den State Properties steht dann der Aufruf der function styleButtonGroup in Script.
                                          8e1202e6-36d6-436a-905b-4dbe9028a639-image.png

                                          Damit kann man auch Hue Scenen auf Buttons legen:
                                          ff5bf76e-bb6f-496f-86e6-5baf39775993-image.png

                                          M Online
                                          M Online
                                          MCU
                                          wrote on last edited by
                                          #73

                                          @hvb Ich probiere es aus und nehme es dann in die Doku, ok?

                                          NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                                          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                                          H 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          364

                                          Online

                                          32.5k

                                          Users

                                          81.7k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe