Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI (TypeScript Version)

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    431

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    357

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    959

SONOFF NSPanel mit Lovelace UI (TypeScript Version)

Geplant Angeheftet Gesperrt Verschoben Hardware
lovelace uinspanelsonoff
8.1k Beiträge 280 Kommentatoren 7.4m Aufrufe 261 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • SmartStuffCoyoteS Offline
    SmartStuffCoyoteS Offline
    SmartStuffCoyote
    schrieb am zuletzt editiert von SmartStuffCoyote
    #8090

    Ich glaube, das Problem ist nicht das MP3. Sondern die Playlist. Es werden ja nicht die Daten der Datei abgefragt, sondern die der Playlist. Der Artist fehlt da bei mir einfach. Egal, ob ich eine gespeicherte Playlist oder ein Album oder nur einen einzelnen Song starte.

    [
      {
        "index": 0,
        "id": 31792,
        "url": "file:///music/Alben/Metric%20-%20Romanticize%20The%20Dive/01%20Metric%20-%20Victim%20Of%20Luck.mp3",
        "title": "Victim Of Luck",
        "ArtworkUrl": "http://localhost:9900/music/94f7888d/cover.jpg",
        "Type": "mp3",
        "Bitrate": "320kb/s CBR",
        "Duration": 203.306,
        "Album": "Romanticize The Dive"
      }
    ]
    
    ArmilarA 1 Antwort Letzte Antwort
    0
    • SmartStuffCoyoteS SmartStuffCoyote

      Ich glaube, das Problem ist nicht das MP3. Sondern die Playlist. Es werden ja nicht die Daten der Datei abgefragt, sondern die der Playlist. Der Artist fehlt da bei mir einfach. Egal, ob ich eine gespeicherte Playlist oder ein Album oder nur einen einzelnen Song starte.

      [
        {
          "index": 0,
          "id": 31792,
          "url": "file:///music/Alben/Metric%20-%20Romanticize%20The%20Dive/01%20Metric%20-%20Victim%20Of%20Luck.mp3",
          "title": "Victim Of Luck",
          "ArtworkUrl": "http://localhost:9900/music/94f7888d/cover.jpg",
          "Type": "mp3",
          "Bitrate": "320kb/s CBR",
          "Duration": 203.306,
          "Album": "Romanticize The Dive"
        }
      ]
      
      ArmilarA Offline
      ArmilarA Offline
      Armilar
      Most Active Forum Testing
      schrieb am zuletzt editiert von Armilar
      #8091

      @SmartStuffCoyote

      a9e56847-f589-42e9-a3c8-7ee7ead9d8c5-image.jpeg

      Bei mir alles da und auch kein flackern, ist auch ein Album

      Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
      https://github.com/joBr99/nspanel-lovelace-ui/wiki

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

      1 Antwort Letzte Antwort
      0
      • SmartStuffCoyoteS Offline
        SmartStuffCoyoteS Offline
        SmartStuffCoyote
        schrieb am zuletzt editiert von
        #8092

        Ich glaubs euch ja. :) Die Frage ist, warum schickt entweder der LMS die Daten nicht an den Adapter oder der Adapter die Daten nicht ins JSON. Wenn es häufiger vorkommt, dann wäre ein Fallback vielleicht nicht schlecht. (Der author ist ja eh schon da, warum nochmal beschaffen?)

        showOnlyPlayerHeadline liefert den "Heading" String, vom Parameternamen (und meinem Wunsch her) hätte ich das ausgewählte Wiedergabegerät erwartet. Dann sehe ich sofort, welches der Geräte ich eigentlich steuere. Sorry wegen der Unklarheit.

        ArmilarA 1 Antwort Letzte Antwort
        0
        • SmartStuffCoyoteS SmartStuffCoyote

          Ich glaubs euch ja. :) Die Frage ist, warum schickt entweder der LMS die Daten nicht an den Adapter oder der Adapter die Daten nicht ins JSON. Wenn es häufiger vorkommt, dann wäre ein Fallback vielleicht nicht schlecht. (Der author ist ja eh schon da, warum nochmal beschaffen?)

          showOnlyPlayerHeadline liefert den "Heading" String, vom Parameternamen (und meinem Wunsch her) hätte ich das ausgewählte Wiedergabegerät erwartet. Dann sehe ich sofort, welches der Geräte ich eigentlich steuere. Sorry wegen der Unklarheit.

          ArmilarA Offline
          ArmilarA Offline
          Armilar
          Most Active Forum Testing
          schrieb am zuletzt editiert von
          #8093

          @SmartStuffCoyote sagte:

          das ausgewählte Wiedergabegerät erwartet

          du meinst Playername?:

          2b3c8e2e-36cc-49cd-ae35-94e2f6366891-image.jpeg

          Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
          https://github.com/joBr99/nspanel-lovelace-ui/wiki

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

          1 Antwort Letzte Antwort
          0
          • SmartStuffCoyoteS Offline
            SmartStuffCoyoteS Offline
            SmartStuffCoyote
            schrieb am zuletzt editiert von
            #8094

            Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)

            ArmilarA 2 Antworten Letzte Antwort
            0
            • SmartStuffCoyoteS SmartStuffCoyote

              Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)

              ArmilarA Offline
              ArmilarA Offline
              Armilar
              Most Active Forum Testing
              schrieb am zuletzt editiert von
              #8095

              @SmartStuffCoyote sagte:

              Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)

              Okay, den können wir natürlich auch nehmen... Ist bei mir etwas schwieriger... Ich steuere damit exakt einen Player... Daher sehe ich auch keine anderen...

              Ich ändere das ab...

              Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
              https://github.com/joBr99/nspanel-lovelace-ui/wiki

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

              1 Antwort Letzte Antwort
              0
              • SmartStuffCoyoteS SmartStuffCoyote

                Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)

                ArmilarA Offline
                ArmilarA Offline
                Armilar
                Most Active Forum Testing
                schrieb am zuletzt editiert von
                #8096

                @SmartStuffCoyote

                Noch mal den unteren Teil aus dem DEV Script ersetzen:

                https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/DEV/NSPanelTs.ts

                Danach sollte der Player und der Artist angezeigt werden...

                Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                https://github.com/joBr99/nspanel-lovelace-ui/wiki

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

                1 Antwort Letzte Antwort
                0
                • SmartStuffCoyoteS Offline
                  SmartStuffCoyoteS Offline
                  SmartStuffCoyote
                  schrieb am zuletzt editiert von SmartStuffCoyote
                  #8097
                  javascript.0	01:03:40.994	warn	
                  error at function GenerateMediaPage: Cannot read properties of null (reading 'length')
                  javascript.0	01:03:41.959	warn	
                      at GenerateMediaPage (script.js.common.NSPanel:9087:26)
                  javascript.0	01:03:41.959	warn	
                      at GeneratePage (script.js.common.NSPanel:6065:29)
                  javascript.0	01:03:41.959	warn	
                      at Object.<anonymous> (script.js.common.NSPanel:8421:21)
                  javascript.0	01:03:41.959	warn	
                      at step (script.js.common.NSPanel:33:23)
                  javascript.0	01:03:41.959	warn	
                      at Object.next (script.js.common.NSPanel:14:53)
                  javascript.0	01:03:41.959	warn	
                      at script.js.common.NSPanel:8:71
                  javascript.0	01:03:41.959	warn	
                      at __awaiter (script.js.common.NSPanel:4:12)
                  

                  Die Seite wird jetzt nicht mehr angezeigt.

                  Ich kann aber grad nicht sagen, wo genau das auftaucht - im squeezeboxrpc-Block sind sowohl author.length als auch title.length immer vorhanden.

                  Nachtrag: mit showOnlyPlayerHeadline: false tritt es nicht auf. Ich kriegs auf die Schnelle im Code aber nicht eingegrenzt. @armilar

                  Nachtrag 2:

                  	
                  {
                    id: 'alias.0.NSPanel.1.Media.PlayerSqueezeboxRPC',
                    adapterPlayerInstance: 'squeezeboxrpc.0.',
                    speakerList: [ 'Heartbeat_4', 'Squeezebox' ],
                    mediaDevice: 'Heartbeat_4',
                    playList: [],
                    colorMediaIcon: { red: 0, green: 255, blue: 0 },
                    colorMediaArtist: { red: 255, green: 255, blue: 0 },
                    colorMediaTitle: { red: 255, green: 255, blue: 0 },
                    alwaysOnDisplay: true,
                    autoCreateALias: true,
                    showOnlyPlayerHeadline: true
                  }
                  

                  Ich habe

                  name = getState(page.items[0].adapterPlayerInstance + "Players.SqueezePlay.Playername").val;
                  

                  mal so geändert, dann klappts:

                  name = getState(page.items[0].adapterPlayerInstance + "Players." + page.items[0].mediaDevice + ".Playername").val;
                  
                  1 Antwort Letzte Antwort
                  0
                  • T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #8098

                    Ich bin da nicht drin daher:

                    ergibt das bei dir eine gültige id? adapterPlayerInstance + "Players.SqueezePlay.Playername"

                    aber nicht wichtig - hier if (name.length == 0) muß ein if (typeOf name !== 'string' || name.length == 0) rein.
                    https://github.com/joBr99/nspanel-lovelace-ui/blob/b8649caa2714e0594d14c334550e2ba8e33f8cfb/ioBroker/DEV/NSPanelTs.ts#L7884

                    EDIT: du benutzt doch squeezeboxrpc

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    1 Antwort Letzte Antwort
                    0
                    • SmartStuffCoyoteS Offline
                      SmartStuffCoyoteS Offline
                      SmartStuffCoyote
                      schrieb am zuletzt editiert von SmartStuffCoyote
                      #8099

                      @ticaki siehe oben, das hab ich noch gefunden und nachgetragen. Das ".SqueezePlay." im Datenpunkt-Pfad ist falsch. Das existiert schlicht nicht.

                      Hab aber immer noch mein "undefined". heul

                      author = lmstracklist[currentIndex].Artist + '|' + lmstracklist[currentIndex].Album;
                      if (author == undefined || author == "undefined") {
                            author = getState(id + '.ARTIST').val;
                      }
                      

                      Das kann aber auch nicht klappen, author wird ja zugewiesen und kann nnicht undefined sein.

                                            author = lmstracklist[currentIndex].Artist;
                                              if (author == undefined || author == "undefined") {
                                                  author = getState(id + '.ARTIST').val;
                                              } 
                                              author = author + '|' + lmstracklist[currentIndex].Album;
                      

                      klappt bei mir.

                      ArmilarA T 2 Antworten Letzte Antwort
                      0
                      • SmartStuffCoyoteS SmartStuffCoyote

                        @ticaki siehe oben, das hab ich noch gefunden und nachgetragen. Das ".SqueezePlay." im Datenpunkt-Pfad ist falsch. Das existiert schlicht nicht.

                        Hab aber immer noch mein "undefined". heul

                        author = lmstracklist[currentIndex].Artist + '|' + lmstracklist[currentIndex].Album;
                        if (author == undefined || author == "undefined") {
                              author = getState(id + '.ARTIST').val;
                        }
                        

                        Das kann aber auch nicht klappen, author wird ja zugewiesen und kann nnicht undefined sein.

                                              author = lmstracklist[currentIndex].Artist;
                                                if (author == undefined || author == "undefined") {
                                                    author = getState(id + '.ARTIST').val;
                                                } 
                                                author = author + '|' + lmstracklist[currentIndex].Album;
                        

                        klappt bei mir.

                        ArmilarA Offline
                        ArmilarA Offline
                        Armilar
                        Most Active Forum Testing
                        schrieb am zuletzt editiert von
                        #8100

                        @SmartStuffCoyote

                        Wenn es jetzt funktioniert, dann bitte mal hier die komplette GenerateMediaPage reinwerfen. Dann kann ich mir das zusammensuchen sparen.

                        Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                        https://github.com/joBr99/nspanel-lovelace-ui/wiki

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

                        SmartStuffCoyoteS 1 Antwort Letzte Antwort
                        0
                        • SmartStuffCoyoteS SmartStuffCoyote

                          @ticaki siehe oben, das hab ich noch gefunden und nachgetragen. Das ".SqueezePlay." im Datenpunkt-Pfad ist falsch. Das existiert schlicht nicht.

                          Hab aber immer noch mein "undefined". heul

                          author = lmstracklist[currentIndex].Artist + '|' + lmstracklist[currentIndex].Album;
                          if (author == undefined || author == "undefined") {
                                author = getState(id + '.ARTIST').val;
                          }
                          

                          Das kann aber auch nicht klappen, author wird ja zugewiesen und kann nnicht undefined sein.

                                                author = lmstracklist[currentIndex].Artist;
                                                  if (author == undefined || author == "undefined") {
                                                      author = getState(id + '.ARTIST').val;
                                                  } 
                                                  author = author + '|' + lmstracklist[currentIndex].Album;
                          

                          klappt bei mir.

                          T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb am zuletzt editiert von ticaki
                          #8101

                          @SmartStuffCoyote

                          Das hier ist trotzdem nötig - da darf kein undefined auf length geprüft werden...

                          if (name.length == 0) -> if (typeof name !== 'string' || name.length == 0)

                          wobei das ist kürzer (aber auch unsicherer)
                          if ((name ?? '').length == 0)

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          1 Antwort Letzte Antwort
                          0
                          • ArmilarA Armilar

                            @SmartStuffCoyote

                            Wenn es jetzt funktioniert, dann bitte mal hier die komplette GenerateMediaPage reinwerfen. Dann kann ich mir das zusammensuchen sparen.

                            SmartStuffCoyoteS Offline
                            SmartStuffCoyoteS Offline
                            SmartStuffCoyote
                            schrieb am zuletzt editiert von SmartStuffCoyote
                            #8102

                            @Armilar Hier, inklusive des Fix von @ticaki

                            function GenerateMediaPage (page: NSPanel.PageMedia): NSPanel.Payload[] {
                                try {
                                    unsubscribeMediaSubscriptions();
                            
                                    if (!page.items[0].id) throw new Error('Missing page id for cardMedia!');
                            
                                    let id = page.items[0].id;
                                    let tid = 0;
                                    let out_msgs: NSPanel.Payload[] = [];
                            
                                    if (!page.items[0].adapterPlayerInstance!) throw new Error('page.items[0].adapterPlayerInstance is undefined!');
                                    let vInstance = page.items[0].adapterPlayerInstance!;
                                    let v1Adapter = vInstance.split('.');
                                    let v2Adapter: NSPanel.PlayerType = v1Adapter[0] as NSPanel.PlayerType;
                            
                                    let vMediaDevice = page.items[0].mediaDevice != undefined ? page.items[0].mediaDevice : '';
                            
                                    if (isPlayerWithMediaDevice(v2Adapter)) {
                                        if (!vMediaDevice) throw new Error(`Error in cardMedia! mediaDevice is empty! Page: ${JSON.stringify(page)}`);
                                    }
                                    createAutoMediaAlias(id, vMediaDevice, page.items[0].adapterPlayerInstance!);
                            
                                    // Leave the display on if the alwaysOnDisplay parameter is specified (true)
                                    if (page.type == 'cardMedia' && pageCounter == 0 && page.items[0].alwaysOnDisplay != undefined) {
                                        out_msgs.push({payload: 'pageType~cardMedia'});
                                        if (page.items[0].alwaysOnDisplay != undefined) {
                                            if (page.items[0].alwaysOnDisplay) {
                                                pageCounter = 1;
                                                if (alwaysOn == false) {
                                                    alwaysOn = true;
                                                    SendToPanel({payload: 'timeout~0'});
                                                    subscribeMediaSubscriptions(page.items[0].id);
                                                    if (v2Adapter == 'sonos') {
                                                        subscribeMediaSubscriptionsSonosAdd(page.items[0].id);
                                                    } else if (v2Adapter == 'spotify-premium') {
                                                        setState(vInstance + 'getDevices', true);
                                                        setState(vInstance + 'getPlaybackInfo', true);
                                                        setState(vInstance + 'getPlaylists', true);
                                                    }
                                                }
                                            }
                                        }
                                    } else if (page.type == 'cardMedia' && pageCounter == 1) {
                                        alwaysOn = true;
                                        subscribeMediaSubscriptions(page.items[0].id);
                                        if (v2Adapter == 'sonos') {
                                            subscribeMediaSubscriptionsSonosAdd(page.items[0].id);
                                        }
                                    } else if (page.type == 'cardMedia' && pageCounter == -1) {
                                        //Do Nothing
                                    } else {
                                        out_msgs.push({payload: 'pageType~cardMedia'});
                                    }
                            
                                    if (existsObject(id)) {
                            
                                        let name = "";
                                        if (page.items[0].showOnlyPlayerHeadline && page.items[0].showOnlyPlayerHeadline != undefined) {
                                            //name = getState(page.items[0].adapterPlayerInstance + "Players.SqueezePlay.Playername").val;
                                            name = getState(page.items[0].adapterPlayerInstance + "Players." + page.items[0].mediaDevice + ".Playername").val;
                                            //name = page.heading;
                                        } else {
                                            name = getState(id + '.ALBUM').val;
                                            console.log("##### else name");
                                        }
                                        let title = getState(id + '.TITLE').val;
                                        if (title && title.indexOf('~') !== -1) {
                                            title = title.split('~')[0].trim();
                                        }
                            
                                        if (title.length > 24) {
                                            title = title.slice(0, 24) + '...';
                                        }
                                        if (existsObject(id + '.DURATION') && existsObject(id + '.ELAPSED')) {
                                            if (v2Adapter == 'alexa2') {
                                                if (Debug) log(getState(id + '.DURATION').val, 'info');
                                                let Seconds = parseInt(getState(id + '.DURATION').val) % 60 < 10 ? '0' : '';
                                                let Duration = Math.floor(getState(id + '.DURATION').val / 60) + ':' + Seconds + (getState(id + '.DURATION').val % 60);
                                                let vElapsed = getState(id + '.ELAPSED').val;
                            
                                                if (vElapsed.length == 5) {
                                                    if (parseInt(vElapsed.slice(0, 2)) < 9) {
                                                        vElapsed = vElapsed.slice(1);
                                                    }
                                                }
                                                if (vElapsed == 0) {
                                                    vElapsed = '0:00';
                                                }
                                                let vDuration = Duration;
                                                if (vDuration.length == 5) {
                                                    if (parseInt(vDuration.slice(0, 2)) < 9) {
                                                        vDuration = vDuration.slice(1);
                                                    }
                                                }
                                                if (vDuration != '0:00') {
                                                    title = title + ' (' + vElapsed + '|' + vDuration + ')';
                                                } else {
                                                    title = title + ' (' + vElapsed + ')';
                                                }
                                                if (title == ' (0:00)') {
                                                    title = '';
                                                }
                                            } else if (v2Adapter == 'sonos' && getState(page.items[0].adapterPlayerInstance + 'root.' + page.items[0].mediaDevice + '.current_type').val == 0) {
                                                let vElapsed = getState(id + '.ELAPSED').val;
                                                if (vElapsed.length == 5) {
                                                    if (parseInt(vElapsed.slice(0, 2)) < 9) {
                                                        vElapsed = vElapsed.slice(1);
                                                    }
                                                } else if (vElapsed.length == 8) {
                                                    vElapsed = vElapsed.slice(4);
                                                }
                                                let vDuration = getState(id + '.DURATION').val;
                                                if (vDuration.length == 5) {
                                                    if (parseInt(vDuration.slice(0, 2)) < 9) {
                                                        vDuration = vDuration.slice(1);
                                                    }
                                                } else if (vDuration.length == 8) {
                                                    vDuration = vDuration.slice(4);
                                                }
                                                title = title + ' (' + vElapsed + '|' + vDuration + ')';
                                            } else if (v2Adapter == 'bosesoundtouch') {
                                                if (Debug) log(getState(id + '.ELAPSED').val, 'info');
                                                let elapsedSeconds = parseInt(getState(id + '.ELAPSED').val) % 60 < 10 ? '0' : '';
                                                let vElapsed = Math.floor(getState(id + '.ELAPSED').val / 60) + ':' + elapsedSeconds + (getState(id + '.ELAPSED').val % 60);
                                                if (Debug) log(getState(id + '.DURATION').val, 'info');
                                                let durationSeconds = parseInt(getState(id + '.DURATION').val) % 60 < 10 ? '0' : '';
                                                let vDuration = Math.floor(getState(id + '.DURATION').val / 60) + ':' + durationSeconds + (getState(id + '.DURATION').val % 60);
                                                title = title + ' (' + vElapsed + '|' + vDuration + ')';
                                            } else if (v2Adapter == 'mpd') {
                                                let vElapsed: string = getState(id + '.ELAPSED').val;
                                                let vDuration: string = getState(id + '.DURATION').val;
                                                title = title + ' (' + vElapsed + '|' + vDuration + ')';
                                                if (getState(id + '.STATE').val === 'stop') {
                                                    title = '(00:00|00:00)';
                                                }
                                            }
                                        }
                            
                                        let author = getState(id + '.ARTIST').val;
                            
                                        if (v2Adapter == 'squeezeboxrpc' && author.length > 0) {
                                            if (existsObject([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join(''))) {
                                                if (existsObject([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join(''))) {
                                                    let lmstracklist = JSON.parse(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join('')).val);
                                                    let currentIndex: number = parseInt(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.PlaylistCurrentIndex'].join('')).val);
                                                    
                                                    author = lmstracklist[currentIndex].Artist;
                                                    if (author == undefined || author == "undefined") {
                                                        author = getState(id + '.ARTIST').val;
                                                    } 
                                                    author = author + '|' + lmstracklist[currentIndex].Album;
                                                    if (author.length > 37) {
                                                        author = author.slice(0, 37) + '...';
                                                    }
                                                    let elapsedTime: number = parseInt(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Time'].join('')).val);
                                                    let elapsedSeconds = elapsedTime % 60 < 10 ? '0' : '';
                                                    let vElapsed = Math.floor(elapsedTime / 60) + ':' + elapsedSeconds + (elapsedTime % 60);
                            
                                                    let durationSeconds = parseInt(lmstracklist[currentIndex].Duration) % 60 < 10 ? '0' : '';
                                                    let vDuration = Math.floor(parseInt(lmstracklist[currentIndex].Duration) / 60) + ':' + durationSeconds + (parseInt(lmstracklist[currentIndex].Duration) % 60);
                                                    title = lmstracklist[currentIndex].title;
                                                    if (title.length > 25) {
                                                        title = title.slice(0, 25) + '...';
                                                    }
                                                    title = title + ' (' + vElapsed + '|' + vDuration + ')';
                                                }
                                            }
                                        }
                            
                                        // Settings >>Aktualisierungsintervall für Statusinformationen<< = 1 !
                                        // If the refresh time is set to 1 second in the spotify-premium.X instance,
                                        // the elapsed refresh bug '00:00' is not visible
                                        if (v2Adapter == 'spotify-premium') {
                                            let vElapsed: string = getState(id + '.ELAPSED').val;
                                            if (vElapsed.substring(0, 1) == '0') {
                                                vElapsed = vElapsed.slice(1);
                                            }
                                            let vDuration: string = getState(id + '.DURATION').val;
                                            if (vDuration.substring(0, 1) == '0') {
                                                vDuration = vDuration.slice(1);
                                            }
                                            title = title + ' (' + vElapsed + '|' + vDuration + ')';
                                            if (title == ' (0:00|0:00)') {
                                                title = '';
                                            }
                                        }
                            
                                        let shuffle = getState(id + '.SHUFFLE').val;
                            
                                        //New Adapter/Player
                                        let media_icon = Icons.GetIcon('playlist-music');
                            
                                        //Spotify-Premium
                                        if (v2Adapter == 'spotify-premium') {
                                            media_icon = Icons.GetIcon('spotify');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-spotify') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            name = getState(id + '.CONTEXT_DESCRIPTION').val;
                                            let nameLength = name.length;
                                            if (name.substring(0, 17) == 'Playlist: This Is') {
                                                name = name.slice(18, 34) + '...';
                                            } else if (name.substring(0, 9) == 'Playlist:') {
                                                name = name.slice(10, 26) + '...';
                                            } else if (name.substring(0, 6) == 'Album:') {
                                                name = name.slice(7, 23) + '...';
                                            } else if (name.substring(0, 6) == 'Track:') {
                                                name = name.slice(7, 23) + '...';
                                            } else if (name.substring(0, 7) == 'Artist:') {
                                                name = name.slice(8, 24) + '...';
                                            }
                                            if (nameLength == 0) {
                                                name = 'Spotify-Premium';
                                            }
                                            author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                                            if (author.length > 37) {
                                                author = author.slice(0, 37) + '...';
                                            }
                                            if (getState(id + '.ARTIST').val.length == 0) {
                                                author = findLocale('media', 'no_music_to_control');
                                            }
                                        }
                            
                                        //Sonos
                                        if (v2Adapter == 'sonos') {
                                            media_icon = Icons.GetIcon('alpha-s-circle');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-sonos') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            name = getState(id + '.CONTEXT_DESCRIPTION').val;
                                            let nameLenght = name.length;
                                            if (nameLenght == 0) {
                                                name = page.heading;
                                            } else if (nameLenght > 16) {
                                                name = name.slice(0, 16) + '...';
                                            }
                                            if (getState(id + '.ALBUM').val.length > 0) {
                                                author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                                                if (author.length > 37) {
                                                    author = author.slice(0, 37) + '...';
                                                }
                                            } else {
                                                author = getState(id + '.ARTIST').val;
                                            }
                                            if (getState(id + '.ARTIST').val.length == 0) {
                                                author = findLocale('media', 'no_music_to_control');
                                            }
                                        }
                            
                                        //Bose Soundtouch
                                        if (v2Adapter == 'bosesoundtouch') {
                                            media_icon = Icons.GetIcon('alpha-b-circle');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-bose') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            name = page.heading;
                            
                                            if (getState(id + '.ALBUM').val.length > 0) {
                                                author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                                                if (author.length > 37) {
                                                    author = author.slice(0, 37) + '...';
                                                }
                                            } else {
                                                author = getState(id + '.ARTIST').val;
                                            }
                                            if (getState(id + '.ARTIST').val.length == 0) {
                                                author = findLocale('media', 'no_music_to_control');
                                            }
                                        }
                            
                                        //Logitech Squeezebox RPC
                                        if (v2Adapter == 'squeezeboxrpc') {
                                            media_icon = Icons.GetIcon('dlna');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-dnla') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            if (name.length == 0) {
                                                name = page.heading;
                                            } else if (name.length > 16) {
                                                name = name.slice(0, 16) + '...';
                                            }
                                        }
                            
                                        //Alexa2
                                        if (v2Adapter == 'alexa2') {
                                            media_icon = Icons.GetIcon('alpha-a-circle');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-alexa') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            name = getState(id + '.ALBUM').val;
                                            let nameLength = name.length;
                                            if (name.substring(0, 9) == 'Playlist:') {
                                                name = name.slice(10, 26) + '...';
                                            } else if (name.substring(0, 6) == 'Album:') {
                                                name = name.slice(7, 23) + '...';
                                            } else if (name.substring(0, 6) == 'Track') {
                                                name = 'Alexa Player';
                                            }
                                            if (nameLength == 0) {
                                                name = 'Alexa Player';
                                            } else {
                                                name = name.slice(0, 16) + '...';
                                            }
                                            author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                                            if (author.length > 30) {
                                                author = getState(id + '.ARTIST').val;
                                            }
                                            if (getState(id + '.ARTIST').val.length == 0) {
                                                author = findLocale('media', 'no_music_to_control');
                                            }
                                        }
                            
                                        //Volumio
                                        if (v2Adapter == 'volumio') {
                                            media_icon = Icons.GetIcon('clock-time-twelve-outline');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-volumio') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            if (name != undefined) {
                                                author = author + ' | ' + name;
                                            }
                                            name = page.heading;
                                        }
                            
                                        //MPD
                                        if (v2Adapter == 'mpd') {
                                            media_icon = Icons.GetIcon('alpha-m-circle');
                                            if (page.items[0].playerMediaIcon !== undefined) {
                                                if (page.items[0].playerMediaIcon == 'logo-mpd') {
                                                    media_icon = page.items[0].playerMediaIcon;
                                                } else {
                                                    media_icon = Icons.GetIcon(page.items[0].playerMediaIcon);
                                                }
                                            }
                                            if (getState(id + '.ALBUM').val.length > 0) {
                                                author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                                                if (author.length > 37) {
                                                    author = author.slice(0, 37) + '...';
                                                }
                                            } else {
                                                author = getState(id + '.ARTIST').val;
                                            }
                                            if (getState(id + '.ARTIST').val.length == 0) {
                                                author = findLocale('media', 'no_music_to_control');
                                            }
                                            name = page.heading;
                                        }
                            
                                        let volume = scale(getState(id + '.VOLUME').val, activePage!.items[0]!.minValue ?? 0, activePage!.items[0]!.maxValue ?? 100, 100, 0);
                                        let iconplaypause = Icons.GetIcon('pause'); //pause
                                        let shuffle_icon = Icons.GetIcon('shuffle-variant'); //shuffle
                                        let onoffbutton = 1374;
                            
                                        if (shuffle == 'off' || shuffle == false || shuffle == 0 || shuffle == 'false') {
                                            shuffle_icon = Icons.GetIcon('shuffle-disabled'); //shuffle
                                        }
                            
                                        // Todo: Refresh automatisieren und dafür wieder Shuffle nutzen
                                        //if (v2Adapter == 'volumio') { shuffle_icon = Icons.GetIcon('shuffle-disabled'); } //Volumio: refresh playlist
                            
                                        //For all players
                                        if (getState(id + '.STATE').val) {
                                            onoffbutton = 65535;
                                            iconplaypause = Icons.GetIcon('pause'); //pause
                                        } else {
                                            iconplaypause = Icons.GetIcon('play'); //play
                                        }
                            
                                        //Ausnahme für squeezebox, da State = Power
                                        if (v2Adapter == 'squeezeboxrpc') {
                                            if (getState(id + '.PAUSE').val === false) {
                                                onoffbutton = 65535;
                                                iconplaypause = Icons.GetIcon('pause'); //pause
                                            } else {
                                                iconplaypause = Icons.GetIcon('play'); //play
                                            }
                                        }
                            
                                        //Ausnahme für mpd, da State = play, pause,....
                                        if (v2Adapter == 'mpd') {
                                            if (getState(id + '.STATE').val === 'play') {
                                                onoffbutton = 65535;
                                                iconplaypause = Icons.GetIcon('pause'); //pause
                                            } else if (getState(id + '.STATE').val === 'pause') {
                                                iconplaypause = Icons.GetIcon('play'); //play
                                            } else if (getState(id + '.STATE').val === 'stop') {
                                                onoffbutton = 1374;
                                                iconplaypause = Icons.GetIcon('play'); //play
                                            }
                            
                                        }
                            
                                        //Ausnahme Volumio: status = string: play, pause, stop usw.
                                        if (v2Adapter == 'volumio') {
                                            if (getState(id + '.status').val == 'play') {
                                                onoffbutton = 65535;
                                                iconplaypause = Icons.GetIcon('pause'); //pause
                                            } else {
                                                iconplaypause = Icons.GetIcon('play'); //play
                                            }
                                        }
                            
                                        let currentSpeaker: string = findLocale('media', 'no_speaker_found');
                            
                                        if (v2Adapter == 'alexa2') {
                                            currentSpeaker = getState([page.items[0].adapterPlayerInstance, 'Echo-Devices.', page.items[0].mediaDevice, '.Info.name'].join('')).val;
                                        } else if (v2Adapter == 'spotify-premium') {
                                            currentSpeaker = getState([page.items[0].adapterPlayerInstance, 'player.device.name'].join('')).val;
                                        } else if (v2Adapter == 'sonos') {
                                            currentSpeaker = getState([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.members'].join('')).val;
                                        } else if (v2Adapter == 'squeezeboxrpc') {
                                            currentSpeaker = getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playername'].join('')).val;
                                        } else if (v2Adapter == 'bosesoundtouch') {
                                            currentSpeaker = getState([page.items[0].adapterPlayerInstance, 'deviceInfo.name'].join('')).val;
                                        } else if (v2Adapter == 'volumio') {
                                            currentSpeaker = getState([page.items[0].adapterPlayerInstance, 'info.name'].join('')).val;
                                        } else if (v2Adapter == 'mpd') {
                                            currentSpeaker = v1Adapter[0] + '.' + v1Adapter[1];
                                        }
                                        //-------------------------------------------------------------------------------------------------------------
                                        // All Alexa devices (the online / player and commands directory is available) are listed and linked below
                                        // If the constant alexaSpeakerList contains at least one entry, the constant is used - otherwise all devices from the Alexa adapter
                                        let speakerListArray: string[] = [];
                                        if (page.items[0].speakerList && page.items[0].speakerList.length > 0) {
                                            for (let i_index in page.items[0].speakerList) {
                                                speakerListArray.push(page.items[0].speakerList[i_index]);
                                            }
                                        } else if (v2Adapter == 'squeezeboxrpc') {
                                            // Beim Squeezeboxrpc ist jeder Player ein eigener Knoten im Objektbaum. Somit werden einzelne Aliase benötigt.
                                            const squeezeboxPlayerQuery: iobJS.QueryResult = $('channel[state.id=' + page.items[0].adapterPlayerInstance + '.Players.*.Playername]');
                                            squeezeboxPlayerQuery.each((playerId: string, playerIndex: number) => {
                                                speakerListArray.push(getState(playerId).val);
                                                page.items[0].speakerList = speakerListArray;
                                            });
                                        } else if (v2Adapter == 'spotify-premium') {
                                            // All possible Devices if page.items[0].speakerList empty
                                            if (Debug) log(getState(page.items[0].adapterPlayerInstance + 'devices.availableDeviceListString').val);
                                            speakerListArray = getState(page.items[0].adapterPlayerInstance + 'devices.availableDeviceListString').val.split(';');
                                            page.items[0].speakerList = speakerListArray;
                                        } else if (v2Adapter == 'mpd') {
                                            // All possible Devices if page.items[0].speakerList empty
                                            page.items[0].speakerList[0] = v1Adapter[0] + '.' + v1Adapter[1];
                                        } else {
                                            let i_list = Array.prototype.slice.apply($('[state.id="' + page.items[0].adapterPlayerInstance + 'Echo-Devices.*.Info.name"]'));
                                            for (let i_index in i_list) {
                                                let i = i_list[i_index];
                                                let deviceId = i;
                                                deviceId = deviceId.split('.');
                                                if (
                                                    getState([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.online'].join('')).val &&
                                                    existsObject([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Player'].join('')) &&
                                                    existsObject([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Commands'].join(''))
                                                ) {
                                                    speakerListArray.push(getState(i).val);
                                                }
                                            }
                                        }
                                        //--------------------------------------------------------------------------------------------------------------
                            
                                        let colMediaIcon = page.items[0].colorMediaIcon != undefined ? page.items[0].colorMediaIcon : White;
                                        let colMediaTitle = page.items[0].colorMediaTitle != undefined ? page.items[0].colorMediaTitle : White;
                                        let colMediaArtist = page.items[0].colorMediaArtist != undefined ? page.items[0].colorMediaArtist : White;
                            
                                        //InSel Speaker
                                        let speakerListString: string = '~~~~~~';
                                        let speakerListIconCol = rgb_dec565(HMIOff);
                                        if (speakerListArray.length > 0) {
                                            speakerListIconCol = rgb_dec565(HMIOn);
                                            speakerListString = 'input_sel' + '~' + tid + '?speakerlist' + '~' + Icons.GetIcon('speaker') + '~' + speakerListIconCol + '~' + findLocale('media', 'speaker') + '~' + 'media0~';
                                        }
                            
                                        //InSel Playlist
                                        let playListString: string = '~~~~~~';
                                        let playListIconCol = rgb_dec565(HMIOff);
                                        if (page.items[0].playList != undefined) {
                                            /* Volumio: get actual playlist if empty */
                                            if (v2Adapter == 'volumio') {
                                                if (page.items[0].playList.length == 0) {
                                                    let urlString: string = `${getState(vInstance + 'info.host').val}/api/listplaylists`;
                            
                                                    axios
                                                        .get(urlString, {headers: {'User-Agent': 'ioBroker'}})
                                                        .then(async function (response) {
                                                            if (response.status === 200) {
                                                                if (Debug) {
                                                                    log(JSON.stringify(response.data), 'info');
                                                                }
                                                                page.items[0].playList = JSON.parse(JSON.stringify(response.data));
                                                                if (Debug) log('volumio-playlist: ' + page.items[0].playList, 'info');
                                                            } else {
                                                                log('Axios Status - get_volumio-playlist: ' + response.state, 'warn');
                                                            }
                                                        })
                                                        .catch(function (error) {
                                                            log(error, 'warn');
                                                        });
                                                }
                                                /* Spotify: get all playlists if empty */
                                            } else if (v2Adapter == 'spotify-premium') {
                                                page.items[0].playList = getState(page.items[0].adapterPlayerInstance + 'playlists.playlistListString').val.split(';');
                                            } else if (v2Adapter == 'mpd') {
                                                let tempPL = getState(page.items[0].adapterPlayerInstance + 'listplaylists').val;
                                                tempPL = tempPL.replace('[', '');
                                                tempPL = tempPL.replace(']', '');
                                                tempPL = tempPL.replaceAll('"', '');
                                                page.items[0].playList = tempPL.split(',');
                                            }
                                            playListIconCol = rgb_dec565(HMIOn);
                                            playListString =
                                                'input_sel' +
                                                '~' +
                                                tid +
                                                '?playlist' +
                                                '~' +
                                                Icons.GetIcon('playlist-play') +
                                                '~' +
                                                playListIconCol +
                                                '~' +
                                                //'PlayL ' + page.heading + '~' +
                                                findLocale('media', 'playlist') +
                                                '~' +
                                                'media1~';
                                        }
                            
                                        //InSel Tracklist
                                        globalTracklist = '';
                            
                                        let trackListString: string = '~~~~~~';
                                        let trackListIconCol = rgb_dec565(HMIOff);
                                        if (v2Adapter == 'volumio') {
                                            /* Volumio: get queue */
                                            setTimeout(async function () {
                                                let urlString: string = `${getState(vInstance + 'info.host').val}/api/getQueue`;
                            
                                                axios
                                                    .get(urlString, {headers: {'User-Agent': 'ioBroker'}})
                                                    .then(async function (response) {
                                                        if (response.status === 200) {
                                                            if (Debug) {
                                                                log(JSON.stringify(response.data), 'info');
                                                            }
                                                            const QUEUELIST = JSON.parse(JSON.stringify(response.data));
                                                            page.items[0].globalTracklist = QUEUELIST.queue;
                                                            if (Debug) {
                                                                for (let i_index in QUEUELIST.queue) {
                                                                    log('volumio-queue: ' + QUEUELIST.queue[i_index], 'info');
                                                                }
                                                            }
                                                        } else {
                                                            log('Axios Status - get_volumio-queue: ' + response.state, 'warn');
                                                        }
                                                    })
                                                    .catch(function (error) {
                                                        log(error, 'warn');
                                                    });
                                            }, 2000);
                                            globalTracklist = page.items[0].globalTracklist;
                                        } else if (v2Adapter == 'squeezeboxrpc' && existsObject([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join(''))) {
                                            let lmstracklist = JSON.parse(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join('')).val);
                                            globalTracklist = lmstracklist;
                                        } else if (v2Adapter == 'sonos' && existsObject([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.playlist_set'].join(''))) {
                                            let lmstracklist = getState([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.queue'].join('')).val;
                                            lmstracklist = lmstracklist.replace(/\s*[\[{(].*?[)}\]]\s*/g, '');
                                            let lmstracklistTemp = lmstracklist.split(', ');
                                            let trackList: string = '[';
                                            if (getState(page.items[0].adapterPlayerInstance + 'root.' + page.items[0].mediaDevice + '.current_type').val == 0) {
                                                for (let i = 0; i < lmstracklistTemp.length; i++) {
                                                    let trackTemp = lmstracklistTemp[i].split(' - ');
                                                    trackList = trackList + '{"id":"' + i + '","name":"' + trackTemp[0] + '","title":"' + trackTemp[1] + '"}';
                                                    if (i < lmstracklistTemp.length - 1) {
                                                        trackList = trackList + ',';
                                                    }
                                                }
                                            }
                                            trackList = trackList + ']';
                                            if (Debug) log(trackList, 'info');
                                            globalTracklist = trackList;
                                        } else if (v2Adapter == 'spotify-premium') {
                                            try {
                                                let tempTrackList = JSON.parse(getState(page.items[0].adapterPlayerInstance + 'player.playlist.trackListArray').val);
                                                globalTracklist = tempTrackList;
                                            } catch {
                                                log('Hello Mr. Developer something went wrong in tracklist!', 'debug');
                                            }
                                        } else if (v2Adapter == 'mpd') {
                                            try {
                                                let tempTrackList = JSON.parse(getState(page.items[0].adapterPlayerInstance + 'playlist_list').val);
                                                globalTracklist = tempTrackList;
                                            } catch {
                                                log('Hello Mr. Developer something went wrong in tracklist!', 'debug');
                                            }
                                        }
                            
                                        if (globalTracklist != null && globalTracklist.length != 0) {
                                            trackListIconCol = rgb_dec565(HMIOn);
                                            trackListString =
                                                'input_sel' + '~' + tid + '?tracklist' + '~' + Icons.GetIcon('animation-play-outline') + '~' + trackListIconCol + '~' + findLocale('media', 'tracklist') + '~' + 'media2~';
                                        }
                            
                                        // InSel/Slider EQ
                                        let equalizerListString: string = '~~~~~~';
                                        let equalizerListIconCol = rgb_dec565(HMIOff);
                            
                                        if (page.items[0].equalizerList != undefined) {
                                            equalizerListIconCol = rgb_dec565(HMIOn);
                                            equalizerListString =
                                                'input_sel' + '~' + tid + '?equalizer' + '~' + Icons.GetIcon('equalizer-outline') + '~' + equalizerListIconCol + '~' + findLocale('media', 'equalizer') + '~' + 'media3~';
                                        } else if (page.items[0].equalizerSlider != undefined && v2Adapter == 'alexa2') {
                                            equalizerListIconCol = rgb_dec565(HMIOn);
                                            equalizerListString =
                                                'slider' + '~' + tid + '~' + Icons.GetIcon('equalizer-outline') + '~' + equalizerListIconCol + '~' + findLocale('media', 'equalizer') + '~' + 'media3~';
                                        } else if (page.items[0].equalizerList == undefined && v2Adapter == 'sonos') {
                                            let equalizerListIconCol = rgb_dec565(HMIOn);
                                            //equalizerListString is used for favariteList
                                            equalizerListString =
                                                'input_sel' + '~' + tid + '?favorites' + '~' + Icons.GetIcon('playlist-star') + '~' + equalizerListIconCol + '~' + findLocale('media', 'favorites') + '~' + 'media3~';
                                        }
                            
                                        //Repeat Control Button
                                        let repeatIcon = Icons.GetIcon('repeat-variant');
                                        let repeatIconCol = rgb_dec565(HMIOff);
                                        let repeatButtonString: string = '~~~~~~';
                            
                                        if (v2Adapter == 'spotify-premium') {
                                            if (getState(id + '.REPEAT').val == 'context') {
                                                repeatIcon = Icons.GetIcon('repeat-variant');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            } else if (getState(id + '.REPEAT').val == 'track') {
                                                repeatIcon = Icons.GetIcon('repeat-once');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        } else if (v2Adapter == 'alexa2') {
                                            if (getState(id + '.REPEAT').val == true) {
                                                repeatIcon = Icons.GetIcon('repeat-variant');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        } else if (v2Adapter == 'sonos') {
                                            if (getState(id + '.REPEAT').val == 1) {
                                                repeatIcon = Icons.GetIcon('repeat-variant');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            } else if (getState(id + '.REPEAT').val == 2) {
                                                repeatIcon = Icons.GetIcon('repeat-once');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        } else if (v2Adapter == 'bosesoundtouch') {
                                            if (getState(id + '.REPEAT').val == 'REPEAT_ALL') {
                                                repeatIcon = Icons.GetIcon('repeat-variant');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            } else if (getState(id + '.REPEAT').val == 'REPEAT_ONE') {
                                                repeatIcon = Icons.GetIcon('repeat-once');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        } else if (v2Adapter == 'squeezeboxrpc') {
                                            if (getState(id + '.REPEAT').val == 1) {
                                                repeatIcon = Icons.GetIcon('repeat-once');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            } else if (getState(id + '.REPEAT').val == 2) {
                                                repeatIcon = Icons.GetIcon('repeat');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        } else if (v2Adapter == 'volumio') {
                                            /* Volumio: only Repeat true/false with API */
                                            if (getState(id + '.REPEAT').val == true) {
                                                repeatIcon = Icons.GetIcon('repeat-variant');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        } else if (v2Adapter == 'mpd') {
                                            if (getState(id + '.REPEAT').val == true && getState(id + '.SINGLE').val == 0) {
                                                repeatIcon = Icons.GetIcon('repeat');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            } else if (getState(id + '.REPEAT').val == true && getState(id + '.SINGLE').val == 1) {
                                                repeatIcon = Icons.GetIcon('repeat-once');
                                                repeatIconCol = rgb_dec565(HMIOn);
                                            }
                                        }
                            
                                        if (v2Adapter == 'spotify-premium' || v2Adapter == 'alexa2' || v2Adapter == 'sonos' || v2Adapter == 'bosesoundtouch' || v2Adapter == 'volumio' || v2Adapter == 'squeezeboxrpc' || v2Adapter == 'mpd') {
                                            repeatButtonString = 'button' + '~' + tid + '?repeat' + '~' + repeatIcon + '~' + repeatIconCol + '~' + 'Repeat' + '~' + 'media4';
                                        }
                            
                                        //popUp Tools
                                        let toolsString: string = '~~~~~~';
                                        let toolsIconCol = rgb_dec565(colMediaIcon);
                                        if (v2Adapter == 'sonos' || v2Adapter == 'mpd') {
                                            if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
                                                toolsString = 'input_sel' + '~' + tid + '?seek' + '~' + media_icon + '~' + toolsIconCol + '~' + findLocale('media', 'seek') + '~' + 'media5~';
                                            } else {
                                                toolsString = 'input_sel' + '~' + tid + '?crossfade' + '~' + media_icon + '~' + toolsIconCol + '~' + findLocale('media', 'crossfade') + '~' + 'media5~';
                                            }
                                        } else if (v2Adapter == 'squeezeboxrpc') {
                                            if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
                                                toolsString = 'input_sel' + '~' + tid + '?seek' + '~' + media_icon + '~' + toolsIconCol + '~' + findLocale('media', 'seek') + '~' + 'media5~';
                                            }
                                        } else if (v2Adapter == 'spotify-premium') {
                                            if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
                                                toolsString = 'input_sel' + '~' + tid + '?seek' + '~' + media_icon + '~' + toolsIconCol + '~' + findLocale('media', 'seek') + '~' + 'media5~';
                                            }
                                        } else {
                                            toolsString = 'button' + '~' + tid + '' + '~' + media_icon + '~' + toolsIconCol + '~' + findLocale('media', 'tools') + '~' + 'media5~';
                                        }
                            
                                        out_msgs.push({
                                            payload:
                                                'entityUpd~' + //entityUpd
                                                name +
                                                '~' + //heading
                                                getNavigationString(pageId) +
                                                '~' + //navigation
                                                tid +
                                                '~' + //internalNameEntiy
                                                title +
                                                '~' + //title
                                                rgb_dec565(colMediaTitle) +
                                                '~' + //titleColor
                                                author +
                                                '~' + //author
                                                rgb_dec565(colMediaArtist) +
                                                '~' + //authorColor
                                                volume +
                                                '~' + //volume
                                                iconplaypause +
                                                '~' + //playpauseicon
                                                onoffbutton +
                                                '~' + //On/Off Button Color
                                                shuffle_icon +
                                                '~' + //iconShuffle                     --> Code
                                                toolsString +
                                                speakerListString +
                                                playListString +
                                                trackListString +
                                                equalizerListString +
                                                repeatButtonString,
                                        });
                                    }
                                    if (Debug) {
                                        log('GenerateMediaPage payload: ' + JSON.stringify(out_msgs), 'info');
                                    }
                                    return out_msgs;
                                } catch (err: any) {
                                    log('error at function GenerateMediaPage: ' + err.message, 'warn');
                                    return [];
                                }
                            }
                            

                            Danke euch!

                            1 Antwort Letzte Antwort
                            1

                            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                            Registrieren Anmelden
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            536

                            Online

                            32.8k

                            Benutzer

                            82.8k

                            Themen

                            1.3m

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

                            • Du hast noch kein Konto? Registrieren

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