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. Hardware
  4. SONOFF NSPanel mit Lovelace UI (TypeScript Version)

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    776

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.4k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    5.6k

SONOFF NSPanel mit Lovelace UI (TypeScript Version)

Scheduled Pinned Locked Moved Hardware
lovelace uinspanelsonoff
8.1k Posts 280 Posters 8.2m Views 260 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.
  • 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 Do not disturb
    T Do not disturb
    ticaki
    wrote on last edited by 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 Reply Last reply
    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
      wrote on last edited by 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 Reply Last reply
      1
      • A Online
        A Online
        australien
        wrote on last edited by australien
        #8103

        da ich seit geraumer Zeit folgende Fehlermelungen bekomme:

        javascript.0	14:13:02.803	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:02.804	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:11.799	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:11.800	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:20.907	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:20.907	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:29.924	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:29.924	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:38.948	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:38.948	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:47.996	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        
        javascript.0	14:13:47.996	warn	
        
        Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
        

        hab ich von 5_1_1_1 auf 5_1_1_7 upgedatet, leider noch immer alles beim allten.

        Tasmota 15.0.1

        javascript.0	14:15:29.238	info	
        
        --- start of NsPanelTs: 0_userdata.0.NSPanel.Kueche. ---
        
        javascript.0	14:15:29.250	info	
        
        setObjects enabled - create Alias Channels possible
        
        javascript.0	14:15:29.254	info	
        
        weather alias for pirate-weather.0. already exists
        
        javascript.0	14:15:29.271	info	
        
        registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
        
        javascript.0	14:15:29.276	info	
        
        Updates for NSPanel available
        
        javascript.0	14:15:29.365	info	
        
        Desired TFT Firmware: 61 / v5.1.1
        
        javascript.0	14:15:29.365	info	
        
        Installed TFT Firmware: 61 / v5.1.1
        
        javascript.0	14:15:29.479	info	
        
        Debug mode disabled
        
        javascript.0	14:15:30.108	info	
        
        hidden Cards disabled
        
        javascript.0	14:15:32.279	info	
        
        Start MQTT-Port-Check -------------------------------------
        
        javascript.0	14:15:32.279	info	
        
        -- admin.0                   - 8081
        
        javascript.0	14:15:32.279	info	
        
        -- influxdb.0                - 8086
        
        javascript.0	14:15:32.279	info	
        
        -- mqtt.0                    - 1886
        
        javascript.0	14:15:32.279	info	
        
        -- mqtt.1                    - 1883
        
        javascript.0	14:15:32.279	info	
        
        -- proxmox.0                 - 8006
        
        javascript.0	14:15:32.279	info	
        
        -- shelly.0                  - 1882
        
        javascript.0	14:15:32.279	info	
        
        -- simple-api.0              - 8087
        
        javascript.0	14:15:32.279	info	
        
        -- sonoff.0                  - 1884
        
        javascript.0	14:15:32.279	info	
        
        -- telegram.0                - 8443
        
        javascript.0	14:15:32.279	info	
        
        -- unifi-network.0           - 1144
        
        javascript.0	14:15:32.279	info	
        
        -- web.0                     - 8082
        
        javascript.0	14:15:32.279	info	
        
        - MQTT-Port-Check OK: Instance of Adapter: mqtt.0 is running on Port:1886
        
        javascript.0	14:15:32.279	info	
        
        End MQTT-Port-Check ---------------------------------------
        
        ArmilarA 1 Reply Last reply
        0
        • A australien

          da ich seit geraumer Zeit folgende Fehlermelungen bekomme:

          javascript.0	14:13:02.803	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:02.804	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:11.799	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:11.800	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:20.907	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:20.907	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:29.924	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:29.924	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:38.948	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:38.948	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:47.996	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          
          javascript.0	14:13:47.996	warn	
          
          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.
          

          hab ich von 5_1_1_1 auf 5_1_1_7 upgedatet, leider noch immer alles beim allten.

          Tasmota 15.0.1

          javascript.0	14:15:29.238	info	
          
          --- start of NsPanelTs: 0_userdata.0.NSPanel.Kueche. ---
          
          javascript.0	14:15:29.250	info	
          
          setObjects enabled - create Alias Channels possible
          
          javascript.0	14:15:29.254	info	
          
          weather alias for pirate-weather.0. already exists
          
          javascript.0	14:15:29.271	info	
          
          registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
          
          javascript.0	14:15:29.276	info	
          
          Updates for NSPanel available
          
          javascript.0	14:15:29.365	info	
          
          Desired TFT Firmware: 61 / v5.1.1
          
          javascript.0	14:15:29.365	info	
          
          Installed TFT Firmware: 61 / v5.1.1
          
          javascript.0	14:15:29.479	info	
          
          Debug mode disabled
          
          javascript.0	14:15:30.108	info	
          
          hidden Cards disabled
          
          javascript.0	14:15:32.279	info	
          
          Start MQTT-Port-Check -------------------------------------
          
          javascript.0	14:15:32.279	info	
          
          -- admin.0                   - 8081
          
          javascript.0	14:15:32.279	info	
          
          -- influxdb.0                - 8086
          
          javascript.0	14:15:32.279	info	
          
          -- mqtt.0                    - 1886
          
          javascript.0	14:15:32.279	info	
          
          -- mqtt.1                    - 1883
          
          javascript.0	14:15:32.279	info	
          
          -- proxmox.0                 - 8006
          
          javascript.0	14:15:32.279	info	
          
          -- shelly.0                  - 1882
          
          javascript.0	14:15:32.279	info	
          
          -- simple-api.0              - 8087
          
          javascript.0	14:15:32.279	info	
          
          -- sonoff.0                  - 1884
          
          javascript.0	14:15:32.279	info	
          
          -- telegram.0                - 8443
          
          javascript.0	14:15:32.279	info	
          
          -- unifi-network.0           - 1144
          
          javascript.0	14:15:32.279	info	
          
          -- web.0                     - 8082
          
          javascript.0	14:15:32.279	info	
          
          - MQTT-Port-Check OK: Instance of Adapter: mqtt.0 is running on Port:1886
          
          javascript.0	14:15:32.279	info	
          
          End MQTT-Port-Check ---------------------------------------
          
          ArmilarA Offline
          ArmilarA Offline
          Armilar
          Most Active Forum Testing
          wrote on last edited by Armilar
          #8104

          @australien sagte:

          Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet.

          Das Skript prüft mit dem Start korrekt und sendet die auch, dass es keine Portüberschneidungen gibt (unterer Log-Auszug)

          Da der Fehler aber mit Please wait a few seconds longer when launching the NSPanel. Not all parameters are loaded yet. ausgegeben wird, gehe ich mal von einer fehlerhaften Seiten-Konfiguration aus, da diese Meldung im Seitenaufbau der function GeneratePage eigentlich ein abgefangener Error: Cannot read properties of undefined (reading 'type') ist und als nur Warnung ausgegeben wird.

          Die Fehlermeldung Cannot read properties of undefined (reading 'type') ist ein JavaScript-Fehler. Er bedeutet, dass der Code versucht, auf die Eigenschaft .type eines Objekts zuzugreifen, dieses Objekt zu diesem Zeitpunkt aber überhaupt nicht existiert (es ist undefined).

          Also kein Zeitproblem, sondern eine fehlerhafte oder fehlende Seitendefinition (oder fehlender Datenpunkt) führt zu deinem Problem.

          Kannst du die Seite eingrenzen und sehen, wann der Fehler passiert? Dann wäre das der Anhaltspunkt zur Suche in der Seiten-Konfiguration.

          Den Screensaver würde ich aktuell ausschließen, da der andere Funktionen durchläuft...

          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 Reply Last reply
          0
          • SmartStuffCoyoteS Offline
            SmartStuffCoyoteS Offline
            SmartStuffCoyote
            wrote on last edited by SmartStuffCoyote
            #8105

            Ich brauch nochmal eure Hilfe. Ich versuche, die stundenaktuellen Strompreise per ChardCard anzuzeigen. Ich hab aber ein Problem mit der Skalierung. Die Preise hab ich im Original in Euro, ich hätte aber gerne Cent. Deswegen multipliziere ich sie mit Faktor 1000 (100 * 10 für den Panel-Skalierungsfaktor). Dann sieht das so aus:

            20260626_171130_resized.jpg

            Der Wert oben ist richtig und die Balken sind falsch.

            javascript.0	17:11:11.351	info	
            ChartPayload: entityUpd~Strompreis~button~bPrev~~65535~~~button~bNext~~65535~~~65504~Preis [Ct]~0:50:100~335^00h~317~303~301^03h~300~313~332^06h~341~317~294^09h~286~259~226^12h~204~221~262^15h~295~311~405^18h~596~636~635^21h~460~363
            
            let Strompreis: PageType = {
                "type": "cardChart",
                "heading": "Strompreis",
                "subPage": false,
                "parent": undefined,
                'items': [{ 
                            id: 'alias.0.NSPanel.Strompreis',
                            yAxis: 'Preis [Ct]',
                            yAxisTicks: [0, 50, 100],
                            onColor: Yellow
                         }]
            };
            

            Skaliere ich nur mit 100 oder weniger, ist der Wert oben natürlich falsch und die Balken richtig:

            20260626_171558_resized.jpg

            javascript.0	17:17:19.055	info	
            ChartPayload: entityUpd~Strompreis~button~bPrev~~65535~~~button~bNext~~65535~~~65504~Preis [Ct]~0:500:1000~33^00h~32~30~30^03h~30~31~33^06h~34~32~29^09h~29~26~23^12h~20~22~26^15h~30~31~41^18h~60~64~63^21h~46~36
            

            Wie mache ich das mit den Ticks (sollte es da nicht ein Auto-Skalieren geben?) und der Skalierung richtig?

            Mit den yAxisTicks stehe ich auch auf Kriegsfuß. Lasse ich die leer wie beschrieben, erscheint "no data" im Display.

            1 Reply Last reply
            0
            • SmartStuffCoyoteS Offline
              SmartStuffCoyoteS Offline
              SmartStuffCoyote
              wrote on last edited by SmartStuffCoyote
              #8106

              Nach etwas rumprobieren: CardChart verkraftet keine Werte > 211 und die Ticks müssen ebenfalls mit Faktor 10 skaliert angegeben werden. Gleichzeitig rundet es dummerweise nur auf eine Nachkommastelle, sodass ich bei Strompreisen weder Cent (27 Ct -> 270 -> Anzeigefehler) noch Euro (wird auf volle 10 Cent gerundet --> zu ungenau) angeben kann. Man könnte es ja skalieren, aber dann stimmen die Werte natürlich hinten und vorne nicht mehr.

              1 Reply Last reply
              0

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              419

              Online

              33.0k

              Users

              83.5k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2026
              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