Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

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

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.4k

SONOFF NSPanel mit Lovelace UI

Geplant Angeheftet Gesperrt Verschoben Hardware
lovelace uinspanelsonoff
7.8k Beiträge 272 Kommentatoren 6.7m Aufrufe 254 Watching
  • Ä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.
  • E Elluminatus

    @armilar sagte in SONOFF NSPanel mit Lovelace UI:

    @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

    @armilar Und hier noch die Beschreibung was bei Alias passiert:

    LMS22.jpg

    Drücke ich Pause am NSPanel

    ist Pause true
    ist Play false
    ist Stop false
    ist State true

    Drücke ich wieder Pause lädt das Panel neu, aber im iobroker unter Alias

    ist Pause true
    ist Play false
    ist Stop false
    ist State true

    Drücke ich wieder Pause lädt das Panel neu, aber im iobroker unter Alias

    ist Pause true
    ist Play false
    ist Stop false
    ist State true

    Drücke ich auf Power

    ist Pause false
    ist Play false
    ist Stop true
    ist State true

    Drücke ich nochmal auf Power

    ist Pause false
    ist Play false
    ist Stop true
    ist State true

    Drücke ich jetzt auf Pause

    ist Pause true
    ist Play false
    ist Stop true
    ist State true

    Also grundsätzlich wäre auch mein Tipp, das Status 2 bei Alias den State schaltet und nicht stop

    Das wäre der "Rauchniedrighalter" - Also damit es bei dir funktioniert... und somit eine Sonderlocke im Skript...

    Ich denke, die Lösung sollte so aussehen, dass der richtige Status mit der richtigen Aktion am richtigen Ort geschrieben wird... Dann wird es immer funktionieren... Da muss noch ein Fehler außerhalb des Skriptes sein, den ich momentan nicht sehe

    Na ja es wäre insofern für den Adapter Squeezeboxrpc eine Sonderlocke. Da alle Anwender hier bei dem Druck auf Power Ihr jeweiliges Wiedergabegerät ausschalten würden. Und so geht es auch bei der Handy App. Ein Stop ginbt es dort auch nicht.

    Ansonsten bin ich natürlich gerne bereit Dich mit weiteren Infos zu versorgen, Du musst nur sagen was Du haben willst, bzw. was Du an Infos brauchst.

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

    @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

    @armilar sagte in SONOFF NSPanel mit Lovelace UI:

    @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

    @armilar Und hier noch die Beschreibung was bei Alias passiert:

    LMS22.jpg

    Drücke ich Pause am NSPanel

    ist Pause true
    ist Play false
    ist Stop false
    ist State true

    Drücke ich wieder Pause lädt das Panel neu, aber im iobroker unter Alias

    ist Pause true
    ist Play false
    ist Stop false
    ist State true

    Drücke ich wieder Pause lädt das Panel neu, aber im iobroker unter Alias

    ist Pause true
    ist Play false
    ist Stop false
    ist State true

    Drücke ich auf Power

    ist Pause false
    ist Play false
    ist Stop true
    ist State true

    Drücke ich nochmal auf Power

    ist Pause false
    ist Play false
    ist Stop true
    ist State true

    Drücke ich jetzt auf Pause

    ist Pause true
    ist Play false
    ist Stop true
    ist State true

    Also grundsätzlich wäre auch mein Tipp, das Status 2 bei Alias den State schaltet und nicht stop

    Das wäre der "Rauchniedrighalter" - Also damit es bei dir funktioniert... und somit eine Sonderlocke im Skript...

    Ich denke, die Lösung sollte so aussehen, dass der richtige Status mit der richtigen Aktion am richtigen Ort geschrieben wird... Dann wird es immer funktionieren... Da muss noch ein Fehler außerhalb des Skriptes sein, den ich momentan nicht sehe

    Na ja es wäre insofern für den Adapter Squeezeboxrpc eine Sonderlocke. Da alle Anwender hier bei dem Druck auf Power Ihr jeweiliges Wiedergabegerät ausschalten würden. Und so geht es auch bei der Handy App. Ein Stop ginbt es dort auch nicht.

    Ansonsten bin ich natürlich gerne bereit Dich mit weiteren Infos zu versorgen, Du musst nur sagen was Du haben willst, bzw. was Du an Infos brauchst.

    Nächster Versuch... Bitte mal das nochmal austauschen...

                case 'media-pause':
                    let pageItemTemp = findPageItem(id);
                    let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
                    if (adaInstanceSplit[0] == 'squeezeboxrpc') {
                        console.log(pageItemTemp.adapterPlayerInstance)
                        let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val
                        console.log(stateVal);
                        if (stateVal == 0) {
                            setState(pageItemTemp.adapterPlayerInstance + 'state', 1)
                        } else if (stateVal == 1) {
                            setState(pageItemTemp.adapterPlayerInstance + 'state', 0)
                        } else if (stateVal == null) {
                            setState(pageItemTemp.adapterPlayerInstance + 'state', 1)
                        }
                    } else {
                        if (getState(id + '.STATE').val === true) {
                            setIfExists(id + '.PAUSE', true);
                        } else {
                            setIfExists(id + '.PLAY', true);
                        }
                    }
                    setTimeout(function(){
                        GeneratePage(activePage);  
                    },3000)
                    break;
    

    und

                case 'media-OnOff':
                    let pageItemTem = findPageItem(id);
                    let adaInstanceSpli = pageItemTem.adapterPlayerInstance.split('.');
                    if (adaInstanceSpli[0] == 'squeezeboxrpc') {
                        let stateVal = getState(pageItemTem.adapterPlayerInstance + 'Power').val
                        if (stateVal === 0) {
                            setState(pageItemTem.adapterPlayerInstance + 'Power', 1)
                            setIfExists(id + '.STOP', false)
                        } else {
                            setState(pageItemTem.adapterPlayerInstance + 'Power', 0)
                            setIfExists(id + '.STOP', true)
                        }
                    } else {
                        setIfExists(id + '.STOP', true)
                    }
                    break;
    

    und die kannst du auch mal suchen und tauschen

    function GenerateMediaPage(page: PageMedia): Payload[] {
        try {
            var id = page.items[0].id
            
            var out_msgs: Array<Payload> = [];
    
            out_msgs.push({ payload: 'pageType~cardMedia' });
            if (existsObject(id)) {
                let name = getState(id + '.ALBUM').val;
                let title = getState(id + '.TITLE').val;
                let author = getState(id + '.ARTIST').val;
                
                let vInstance = page.items[0].adapterPlayerInstance;
                let v1Adapter = vInstance.split('.');
                let v2Adapter = v1Adapter[0];
    
                //Alexa + neue Adpter/Player
                let media_icon = Icons.GetIcon('playlist-music');
    
                //Spotify-Premium
                if (v2Adapter == 'spotify-premium') {
                    media_icon = Icons.GetIcon('spotify');
                    name = getState(id + '.CONTEXT_DESCRIPTION').val;
                    let nameLenght = name.length;
                    if (name.substring(0,9) == 'Playlist:') {
                        let nameLenght = name.length;
                        name = name.slice(10, nameLenght);
                    } else if (name.substring(0,6) == 'Album:') {
                        let nameLenght = name.length;
                        name = name.slice(10, nameLenght);
                    } else if (name.substring(0,6) == 'Track') { 
                        name = 'Spotify-Premium';
                    }
                    if (nameLenght == 0) {
                        name = 'Spotify-Premium';
                    }
                    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 = 'no music to control';               
                    }
                }
    
                //Sonos
                if (v2Adapter == 'sonos') {
                    media_icon = Icons.GetIcon('music');
                    name = getState(id + '.CONTEXT_DESCRIPTION').val;
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Sonos Player';
                    } 
                    author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                    if ((getState(id + '.ARTIST').val).length == 0) {
                        author = 'no music to control';               
                    }
                }
    
                //Logitech Squeezebox RPC
                if (v2Adapter == 'squeezeboxrpc') {
                    media_icon = Icons.GetIcon('dlna');
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Squeezebox RPC';
                        author = 'no music to control';
                    } 
                }
    
                //Alexa2
                if (v2Adapter == 'alexa2') {
                    media_icon = Icons.GetIcon('playlist-music');
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Alexa Player';
                        author = 'no music to control';  
                    } 
                }
                
                let volume = getState(id + '.VOLUME').val;
                var iconplaypause = Icons.GetIcon('pause'); //pause
                var onoffbutton = 1374;
    
                //Für alle Player
                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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                    onoffbutton = 65535;
                    iconplaypause = Icons.GetIcon('pause'); //pause
                } else {
                    iconplaypause = Icons.GetIcon('play'); //play
                }
    
                if (Debug) console.log(v2Adapter);
    
                let currentSpeaker = 'kein Speaker gefunden';
    
                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') {
                    if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                        currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                    }
                }
                //-------------------------------------------------------------------------------------------------------------
                // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                let speakerlist = '';
                if (page.items[0].speakerList.length > 0) {
                    for (let i_index in page.items[0].speakerList) {
                        speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                    }
                } 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('')))) {
                            speakerlist = speakerlist + getState(i).val + '?';
                        }
                    }
                }
                speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                //--------------------------------------------------------------------------------------------------------------
    
                out_msgs.push({
                    payload: 'entityUpd~' +                   //entityUpd
                        name + '~' +                          //heading
                        GetNavigationString(pageId) + '~' +   //navigation
                        id + '~' +                            //internalNameEntiy
                        media_icon + '~' +                    //icon
                        title + '~' +                         //title
                        author + '~' +                        //author
                        volume + '~' +                        //volume
                        iconplaypause + '~' +                 //playpauseicon
                        currentSpeaker + '~' +                //currentSpeaker
                        speakerlist + '~' +                   //speakerList-seperated-by-?
                        onoffbutton
                });                        //On/Off Button Color
            }
            if (Debug) console.log(out_msgs);
            return out_msgs
        } catch (err) {
            console.warn('function GenerateMediaPage: ' + err.message);
        }
    }
    
    

    und
    c2ff4164-a6ec-4fa3-9b6f-93849710f02b-image.png

    d77373b5-74a9-4bf5-839d-51fd876cdd6e-image.png

    c848049f-3f50-4783-b40d-6ee57533732e-image.png

    Ich verspeise einen Besen, wenn es jetzt nicht mit diesem hartnäckigen Adapter geht... :blush:

    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.

    E 1 Antwort Letzte Antwort
    0
    • ArmilarA Armilar

      @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

      @armilar sagte in SONOFF NSPanel mit Lovelace UI:

      @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

      @armilar Und hier noch die Beschreibung was bei Alias passiert:

      LMS22.jpg

      Drücke ich Pause am NSPanel

      ist Pause true
      ist Play false
      ist Stop false
      ist State true

      Drücke ich wieder Pause lädt das Panel neu, aber im iobroker unter Alias

      ist Pause true
      ist Play false
      ist Stop false
      ist State true

      Drücke ich wieder Pause lädt das Panel neu, aber im iobroker unter Alias

      ist Pause true
      ist Play false
      ist Stop false
      ist State true

      Drücke ich auf Power

      ist Pause false
      ist Play false
      ist Stop true
      ist State true

      Drücke ich nochmal auf Power

      ist Pause false
      ist Play false
      ist Stop true
      ist State true

      Drücke ich jetzt auf Pause

      ist Pause true
      ist Play false
      ist Stop true
      ist State true

      Also grundsätzlich wäre auch mein Tipp, das Status 2 bei Alias den State schaltet und nicht stop

      Das wäre der "Rauchniedrighalter" - Also damit es bei dir funktioniert... und somit eine Sonderlocke im Skript...

      Ich denke, die Lösung sollte so aussehen, dass der richtige Status mit der richtigen Aktion am richtigen Ort geschrieben wird... Dann wird es immer funktionieren... Da muss noch ein Fehler außerhalb des Skriptes sein, den ich momentan nicht sehe

      Na ja es wäre insofern für den Adapter Squeezeboxrpc eine Sonderlocke. Da alle Anwender hier bei dem Druck auf Power Ihr jeweiliges Wiedergabegerät ausschalten würden. Und so geht es auch bei der Handy App. Ein Stop ginbt es dort auch nicht.

      Ansonsten bin ich natürlich gerne bereit Dich mit weiteren Infos zu versorgen, Du musst nur sagen was Du haben willst, bzw. was Du an Infos brauchst.

      Nächster Versuch... Bitte mal das nochmal austauschen...

                  case 'media-pause':
                      let pageItemTemp = findPageItem(id);
                      let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
                      if (adaInstanceSplit[0] == 'squeezeboxrpc') {
                          console.log(pageItemTemp.adapterPlayerInstance)
                          let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val
                          console.log(stateVal);
                          if (stateVal == 0) {
                              setState(pageItemTemp.adapterPlayerInstance + 'state', 1)
                          } else if (stateVal == 1) {
                              setState(pageItemTemp.adapterPlayerInstance + 'state', 0)
                          } else if (stateVal == null) {
                              setState(pageItemTemp.adapterPlayerInstance + 'state', 1)
                          }
                      } else {
                          if (getState(id + '.STATE').val === true) {
                              setIfExists(id + '.PAUSE', true);
                          } else {
                              setIfExists(id + '.PLAY', true);
                          }
                      }
                      setTimeout(function(){
                          GeneratePage(activePage);  
                      },3000)
                      break;
      

      und

                  case 'media-OnOff':
                      let pageItemTem = findPageItem(id);
                      let adaInstanceSpli = pageItemTem.adapterPlayerInstance.split('.');
                      if (adaInstanceSpli[0] == 'squeezeboxrpc') {
                          let stateVal = getState(pageItemTem.adapterPlayerInstance + 'Power').val
                          if (stateVal === 0) {
                              setState(pageItemTem.adapterPlayerInstance + 'Power', 1)
                              setIfExists(id + '.STOP', false)
                          } else {
                              setState(pageItemTem.adapterPlayerInstance + 'Power', 0)
                              setIfExists(id + '.STOP', true)
                          }
                      } else {
                          setIfExists(id + '.STOP', true)
                      }
                      break;
      

      und die kannst du auch mal suchen und tauschen

      function GenerateMediaPage(page: PageMedia): Payload[] {
          try {
              var id = page.items[0].id
              
              var out_msgs: Array<Payload> = [];
      
              out_msgs.push({ payload: 'pageType~cardMedia' });
              if (existsObject(id)) {
                  let name = getState(id + '.ALBUM').val;
                  let title = getState(id + '.TITLE').val;
                  let author = getState(id + '.ARTIST').val;
                  
                  let vInstance = page.items[0].adapterPlayerInstance;
                  let v1Adapter = vInstance.split('.');
                  let v2Adapter = v1Adapter[0];
      
                  //Alexa + neue Adpter/Player
                  let media_icon = Icons.GetIcon('playlist-music');
      
                  //Spotify-Premium
                  if (v2Adapter == 'spotify-premium') {
                      media_icon = Icons.GetIcon('spotify');
                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                      let nameLenght = name.length;
                      if (name.substring(0,9) == 'Playlist:') {
                          let nameLenght = name.length;
                          name = name.slice(10, nameLenght);
                      } else if (name.substring(0,6) == 'Album:') {
                          let nameLenght = name.length;
                          name = name.slice(10, nameLenght);
                      } else if (name.substring(0,6) == 'Track') { 
                          name = 'Spotify-Premium';
                      }
                      if (nameLenght == 0) {
                          name = 'Spotify-Premium';
                      }
                      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 = 'no music to control';               
                      }
                  }
      
                  //Sonos
                  if (v2Adapter == 'sonos') {
                      media_icon = Icons.GetIcon('music');
                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Sonos Player';
                      } 
                      author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                      if ((getState(id + '.ARTIST').val).length == 0) {
                          author = 'no music to control';               
                      }
                  }
      
                  //Logitech Squeezebox RPC
                  if (v2Adapter == 'squeezeboxrpc') {
                      media_icon = Icons.GetIcon('dlna');
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Squeezebox RPC';
                          author = 'no music to control';
                      } 
                  }
      
                  //Alexa2
                  if (v2Adapter == 'alexa2') {
                      media_icon = Icons.GetIcon('playlist-music');
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Alexa Player';
                          author = 'no music to control';  
                      } 
                  }
                  
                  let volume = getState(id + '.VOLUME').val;
                  var iconplaypause = Icons.GetIcon('pause'); //pause
                  var onoffbutton = 1374;
      
                  //Für alle Player
                  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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                      onoffbutton = 65535;
                      iconplaypause = Icons.GetIcon('pause'); //pause
                  } else {
                      iconplaypause = Icons.GetIcon('play'); //play
                  }
      
                  if (Debug) console.log(v2Adapter);
      
                  let currentSpeaker = 'kein Speaker gefunden';
      
                  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') {
                      if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                          currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                      }
                  }
                  //-------------------------------------------------------------------------------------------------------------
                  // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                  // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                  let speakerlist = '';
                  if (page.items[0].speakerList.length > 0) {
                      for (let i_index in page.items[0].speakerList) {
                          speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                      }
                  } 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('')))) {
                              speakerlist = speakerlist + getState(i).val + '?';
                          }
                      }
                  }
                  speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                  //--------------------------------------------------------------------------------------------------------------
      
                  out_msgs.push({
                      payload: 'entityUpd~' +                   //entityUpd
                          name + '~' +                          //heading
                          GetNavigationString(pageId) + '~' +   //navigation
                          id + '~' +                            //internalNameEntiy
                          media_icon + '~' +                    //icon
                          title + '~' +                         //title
                          author + '~' +                        //author
                          volume + '~' +                        //volume
                          iconplaypause + '~' +                 //playpauseicon
                          currentSpeaker + '~' +                //currentSpeaker
                          speakerlist + '~' +                   //speakerList-seperated-by-?
                          onoffbutton
                  });                        //On/Off Button Color
              }
              if (Debug) console.log(out_msgs);
              return out_msgs
          } catch (err) {
              console.warn('function GenerateMediaPage: ' + err.message);
          }
      }
      
      

      und
      c2ff4164-a6ec-4fa3-9b6f-93849710f02b-image.png

      d77373b5-74a9-4bf5-839d-51fd876cdd6e-image.png

      c848049f-3f50-4783-b40d-6ee57533732e-image.png

      Ich verspeise einen Besen, wenn es jetzt nicht mit diesem hartnäckigen Adapter geht... :blush:

      E Offline
      E Offline
      Elluminatus
      schrieb am zuletzt editiert von Elluminatus
      #206

      @armilar sagte in SONOFF NSPanel mit Lovelace UI:

      function GenerateMediaPage(page: PageMedia): Payload[] {
      try {
      var id = page.items[0].id

          var out_msgs: Array<Payload> = [];
      
          out_msgs.push({ payload: 'pageType~cardMedia' });
          if (existsObject(id)) {
              let name = getState(id + '.ALBUM').val;
              let title = getState(id + '.TITLE').val;
              let author = getState(id + '.ARTIST').val;
              
              let vInstance = page.items[0].adapterPlayerInstance;
              let v1Adapter = vInstance.split('.');
              let v2Adapter = v1Adapter[0];
      
              //Alexa + neue Adpter/Player
              let media_icon = Icons.GetIcon('playlist-music');
      
              //Spotify-Premium
              if (v2Adapter == 'spotify-premium') {
                  media_icon = Icons.GetIcon('spotify');
                  name = getState(id + '.CONTEXT_DESCRIPTION').val;
                  let nameLenght = name.length;
                  if (name.substring(0,9) == 'Playlist:') {
                      let nameLenght = name.length;
                      name = name.slice(10, nameLenght);
                  } else if (name.substring(0,6) == 'Album:') {
                      let nameLenght = name.length;
                      name = name.slice(10, nameLenght);
                  } else if (name.substring(0,6) == 'Track') { 
                      name = 'Spotify-Premium';
                  }
                  if (nameLenght == 0) {
                      name = 'Spotify-Premium';
                  }
                  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 = 'no music to control';               
                  }
              }
      
              //Sonos
              if (v2Adapter == 'sonos') {
                  media_icon = Icons.GetIcon('music');
                  name = getState(id + '.CONTEXT_DESCRIPTION').val;
                  let nameLenght = name.length;
                  if (nameLenght == 0) {
                      name = 'Sonos Player';
                  } 
                  author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                  if ((getState(id + '.ARTIST').val).length == 0) {
                      author = 'no music to control';               
                  }
              }
      
              //Logitech Squeezebox RPC
              if (v2Adapter == 'squeezeboxrpc') {
                  media_icon = Icons.GetIcon('dlna');
                  let nameLenght = name.length;
                  if (nameLenght == 0) {
                      name = 'Squeezebox RPC';
                      author = 'no music to control';
                  } 
              }
      
              //Alexa2
              if (v2Adapter == 'alexa2') {
                  media_icon = Icons.GetIcon('playlist-music');
                  let nameLenght = name.length;
                  if (nameLenght == 0) {
                      name = 'Alexa Player';
                      author = 'no music to control';  
                  } 
              }
              
              let volume = getState(id + '.VOLUME').val;
              var iconplaypause = Icons.GetIcon('pause'); //pause
              var onoffbutton = 1374;
      
              //Für alle Player
              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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                  onoffbutton = 65535;
                  iconplaypause = Icons.GetIcon('pause'); //pause
              } else {
                  iconplaypause = Icons.GetIcon('play'); //play
              }
      
              if (Debug) console.log(v2Adapter);
      
              let currentSpeaker = 'kein Speaker gefunden';
      
              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') {
                  if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                      currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                  }
              }
              //-------------------------------------------------------------------------------------------------------------
              // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
              // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
              let speakerlist = '';
              if (page.items[0].speakerList.length > 0) {
                  for (let i_index in page.items[0].speakerList) {
                      speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                  }
              } 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('')))) {
                          speakerlist = speakerlist + getState(i).val + '?';
                      }
                  }
              }
              speakerlist = speakerlist.substring(0, speakerlist.length - 1);
              //--------------------------------------------------------------------------------------------------------------
      
              out_msgs.push({
                  payload: 'entityUpd~' +                   //entityUpd
                      name + '~' +                          //heading
                      GetNavigationString(pageId) + '~' +   //navigation
                      id + '~' +                            //internalNameEntiy
                      media_icon + '~' +                    //icon
                      title + '~' +                         //title
                      author + '~' +                        //author
                      volume + '~' +                        //volume
                      iconplaypause + '~' +                 //playpauseicon
                      currentSpeaker + '~' +                //currentSpeaker
                      speakerlist + '~' +                   //speakerList-seperated-by-?
                      onoffbutton
              });                        //On/Off Button Color
          }
          if (Debug) console.log(out_msgs);
          return out_msgs
      } catch (err) {
          console.warn('function GenerateMediaPage: ' + err.message);
      }
      

      }

      Brauchst Du nicht. ES FUNKTIONIERT!! Power Button ist stop/ein/aus Kombi und Play und Pause mit Iconwechseln gehen.

      So jetzt bitte Paypal Adresse (per PN?) für ne doppelte Kaffeespende bitte...

      Gruß Elluminatus

      P.S. Darf ich jetzt jemals noch eine Frage stellen, oder muss ich mich abmelden :blush: , ich sehe da nämlich die nächste am Horizont...

      ArmilarA 2 Antworten Letzte Antwort
      0
      • E Elluminatus

        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

        function GenerateMediaPage(page: PageMedia): Payload[] {
        try {
        var id = page.items[0].id

            var out_msgs: Array<Payload> = [];
        
            out_msgs.push({ payload: 'pageType~cardMedia' });
            if (existsObject(id)) {
                let name = getState(id + '.ALBUM').val;
                let title = getState(id + '.TITLE').val;
                let author = getState(id + '.ARTIST').val;
                
                let vInstance = page.items[0].adapterPlayerInstance;
                let v1Adapter = vInstance.split('.');
                let v2Adapter = v1Adapter[0];
        
                //Alexa + neue Adpter/Player
                let media_icon = Icons.GetIcon('playlist-music');
        
                //Spotify-Premium
                if (v2Adapter == 'spotify-premium') {
                    media_icon = Icons.GetIcon('spotify');
                    name = getState(id + '.CONTEXT_DESCRIPTION').val;
                    let nameLenght = name.length;
                    if (name.substring(0,9) == 'Playlist:') {
                        let nameLenght = name.length;
                        name = name.slice(10, nameLenght);
                    } else if (name.substring(0,6) == 'Album:') {
                        let nameLenght = name.length;
                        name = name.slice(10, nameLenght);
                    } else if (name.substring(0,6) == 'Track') { 
                        name = 'Spotify-Premium';
                    }
                    if (nameLenght == 0) {
                        name = 'Spotify-Premium';
                    }
                    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 = 'no music to control';               
                    }
                }
        
                //Sonos
                if (v2Adapter == 'sonos') {
                    media_icon = Icons.GetIcon('music');
                    name = getState(id + '.CONTEXT_DESCRIPTION').val;
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Sonos Player';
                    } 
                    author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                    if ((getState(id + '.ARTIST').val).length == 0) {
                        author = 'no music to control';               
                    }
                }
        
                //Logitech Squeezebox RPC
                if (v2Adapter == 'squeezeboxrpc') {
                    media_icon = Icons.GetIcon('dlna');
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Squeezebox RPC';
                        author = 'no music to control';
                    } 
                }
        
                //Alexa2
                if (v2Adapter == 'alexa2') {
                    media_icon = Icons.GetIcon('playlist-music');
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Alexa Player';
                        author = 'no music to control';  
                    } 
                }
                
                let volume = getState(id + '.VOLUME').val;
                var iconplaypause = Icons.GetIcon('pause'); //pause
                var onoffbutton = 1374;
        
                //Für alle Player
                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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                    onoffbutton = 65535;
                    iconplaypause = Icons.GetIcon('pause'); //pause
                } else {
                    iconplaypause = Icons.GetIcon('play'); //play
                }
        
                if (Debug) console.log(v2Adapter);
        
                let currentSpeaker = 'kein Speaker gefunden';
        
                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') {
                    if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                        currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                    }
                }
                //-------------------------------------------------------------------------------------------------------------
                // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                let speakerlist = '';
                if (page.items[0].speakerList.length > 0) {
                    for (let i_index in page.items[0].speakerList) {
                        speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                    }
                } 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('')))) {
                            speakerlist = speakerlist + getState(i).val + '?';
                        }
                    }
                }
                speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                //--------------------------------------------------------------------------------------------------------------
        
                out_msgs.push({
                    payload: 'entityUpd~' +                   //entityUpd
                        name + '~' +                          //heading
                        GetNavigationString(pageId) + '~' +   //navigation
                        id + '~' +                            //internalNameEntiy
                        media_icon + '~' +                    //icon
                        title + '~' +                         //title
                        author + '~' +                        //author
                        volume + '~' +                        //volume
                        iconplaypause + '~' +                 //playpauseicon
                        currentSpeaker + '~' +                //currentSpeaker
                        speakerlist + '~' +                   //speakerList-seperated-by-?
                        onoffbutton
                });                        //On/Off Button Color
            }
            if (Debug) console.log(out_msgs);
            return out_msgs
        } catch (err) {
            console.warn('function GenerateMediaPage: ' + err.message);
        }
        

        }

        Brauchst Du nicht. ES FUNKTIONIERT!! Power Button ist stop/ein/aus Kombi und Play und Pause mit Iconwechseln gehen.

        So jetzt bitte Paypal Adresse (per PN?) für ne doppelte Kaffeespende bitte...

        Gruß Elluminatus

        P.S. Darf ich jetzt jemals noch eine Frage stellen, oder muss ich mich abmelden :blush: , ich sehe da nämlich die nächste am Horizont...

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

        @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

        function GenerateMediaPage(page: PageMedia): Payload[] {
        try {
        var id = page.items[0].id

            var out_msgs: Array<Payload> = [];
        
            out_msgs.push({ payload: 'pageType~cardMedia' });
            if (existsObject(id)) {
                let name = getState(id + '.ALBUM').val;
                let title = getState(id + '.TITLE').val;
                let author = getState(id + '.ARTIST').val;
                
                let vInstance = page.items[0].adapterPlayerInstance;
                let v1Adapter = vInstance.split('.');
                let v2Adapter = v1Adapter[0];
        
                //Alexa + neue Adpter/Player
                let media_icon = Icons.GetIcon('playlist-music');
        
                //Spotify-Premium
                if (v2Adapter == 'spotify-premium') {
                    media_icon = Icons.GetIcon('spotify');
                    name = getState(id + '.CONTEXT_DESCRIPTION').val;
                    let nameLenght = name.length;
                    if (name.substring(0,9) == 'Playlist:') {
                        let nameLenght = name.length;
                        name = name.slice(10, nameLenght);
                    } else if (name.substring(0,6) == 'Album:') {
                        let nameLenght = name.length;
                        name = name.slice(10, nameLenght);
                    } else if (name.substring(0,6) == 'Track') { 
                        name = 'Spotify-Premium';
                    }
                    if (nameLenght == 0) {
                        name = 'Spotify-Premium';
                    }
                    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 = 'no music to control';               
                    }
                }
        
                //Sonos
                if (v2Adapter == 'sonos') {
                    media_icon = Icons.GetIcon('music');
                    name = getState(id + '.CONTEXT_DESCRIPTION').val;
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Sonos Player';
                    } 
                    author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                    if ((getState(id + '.ARTIST').val).length == 0) {
                        author = 'no music to control';               
                    }
                }
        
                //Logitech Squeezebox RPC
                if (v2Adapter == 'squeezeboxrpc') {
                    media_icon = Icons.GetIcon('dlna');
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Squeezebox RPC';
                        author = 'no music to control';
                    } 
                }
        
                //Alexa2
                if (v2Adapter == 'alexa2') {
                    media_icon = Icons.GetIcon('playlist-music');
                    let nameLenght = name.length;
                    if (nameLenght == 0) {
                        name = 'Alexa Player';
                        author = 'no music to control';  
                    } 
                }
                
                let volume = getState(id + '.VOLUME').val;
                var iconplaypause = Icons.GetIcon('pause'); //pause
                var onoffbutton = 1374;
        
                //Für alle Player
                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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                    onoffbutton = 65535;
                    iconplaypause = Icons.GetIcon('pause'); //pause
                } else {
                    iconplaypause = Icons.GetIcon('play'); //play
                }
        
                if (Debug) console.log(v2Adapter);
        
                let currentSpeaker = 'kein Speaker gefunden';
        
                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') {
                    if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                        currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                    }
                }
                //-------------------------------------------------------------------------------------------------------------
                // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                let speakerlist = '';
                if (page.items[0].speakerList.length > 0) {
                    for (let i_index in page.items[0].speakerList) {
                        speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                    }
                } 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('')))) {
                            speakerlist = speakerlist + getState(i).val + '?';
                        }
                    }
                }
                speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                //--------------------------------------------------------------------------------------------------------------
        
                out_msgs.push({
                    payload: 'entityUpd~' +                   //entityUpd
                        name + '~' +                          //heading
                        GetNavigationString(pageId) + '~' +   //navigation
                        id + '~' +                            //internalNameEntiy
                        media_icon + '~' +                    //icon
                        title + '~' +                         //title
                        author + '~' +                        //author
                        volume + '~' +                        //volume
                        iconplaypause + '~' +                 //playpauseicon
                        currentSpeaker + '~' +                //currentSpeaker
                        speakerlist + '~' +                   //speakerList-seperated-by-?
                        onoffbutton
                });                        //On/Off Button Color
            }
            if (Debug) console.log(out_msgs);
            return out_msgs
        } catch (err) {
            console.warn('function GenerateMediaPage: ' + err.message);
        }
        

        }

        Brauchst Du nicht. ES FUNKTIONIERT!! Power Button ist stop/ein/aus Kombi und Play und Pause mit Iconwechseln gehen.

        So jetzt bitte Paypal Adresse (per PN?) für ne doppelte Kaffeespende bitte...

        Gruß Elluminatus

        P.S. Darf ich jetzt jemals noch eine Frage stellen, oder muss ich mich abmelden :blush: , ich sehe da nämlich die nächste am Horizont...

        Zum Fragenstellen ist das hier doch gedacht... immer heraus damit...

        Harte Nuss - ich werde die Schritte morgen mal in die Wiki übertragen und wahrscheinlich auch ein Script-Upgrade planen...

        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
        • E Elluminatus

          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

          function GenerateMediaPage(page: PageMedia): Payload[] {
          try {
          var id = page.items[0].id

              var out_msgs: Array<Payload> = [];
          
              out_msgs.push({ payload: 'pageType~cardMedia' });
              if (existsObject(id)) {
                  let name = getState(id + '.ALBUM').val;
                  let title = getState(id + '.TITLE').val;
                  let author = getState(id + '.ARTIST').val;
                  
                  let vInstance = page.items[0].adapterPlayerInstance;
                  let v1Adapter = vInstance.split('.');
                  let v2Adapter = v1Adapter[0];
          
                  //Alexa + neue Adpter/Player
                  let media_icon = Icons.GetIcon('playlist-music');
          
                  //Spotify-Premium
                  if (v2Adapter == 'spotify-premium') {
                      media_icon = Icons.GetIcon('spotify');
                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                      let nameLenght = name.length;
                      if (name.substring(0,9) == 'Playlist:') {
                          let nameLenght = name.length;
                          name = name.slice(10, nameLenght);
                      } else if (name.substring(0,6) == 'Album:') {
                          let nameLenght = name.length;
                          name = name.slice(10, nameLenght);
                      } else if (name.substring(0,6) == 'Track') { 
                          name = 'Spotify-Premium';
                      }
                      if (nameLenght == 0) {
                          name = 'Spotify-Premium';
                      }
                      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 = 'no music to control';               
                      }
                  }
          
                  //Sonos
                  if (v2Adapter == 'sonos') {
                      media_icon = Icons.GetIcon('music');
                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Sonos Player';
                      } 
                      author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                      if ((getState(id + '.ARTIST').val).length == 0) {
                          author = 'no music to control';               
                      }
                  }
          
                  //Logitech Squeezebox RPC
                  if (v2Adapter == 'squeezeboxrpc') {
                      media_icon = Icons.GetIcon('dlna');
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Squeezebox RPC';
                          author = 'no music to control';
                      } 
                  }
          
                  //Alexa2
                  if (v2Adapter == 'alexa2') {
                      media_icon = Icons.GetIcon('playlist-music');
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Alexa Player';
                          author = 'no music to control';  
                      } 
                  }
                  
                  let volume = getState(id + '.VOLUME').val;
                  var iconplaypause = Icons.GetIcon('pause'); //pause
                  var onoffbutton = 1374;
          
                  //Für alle Player
                  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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                      onoffbutton = 65535;
                      iconplaypause = Icons.GetIcon('pause'); //pause
                  } else {
                      iconplaypause = Icons.GetIcon('play'); //play
                  }
          
                  if (Debug) console.log(v2Adapter);
          
                  let currentSpeaker = 'kein Speaker gefunden';
          
                  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') {
                      if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                          currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                      }
                  }
                  //-------------------------------------------------------------------------------------------------------------
                  // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                  // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                  let speakerlist = '';
                  if (page.items[0].speakerList.length > 0) {
                      for (let i_index in page.items[0].speakerList) {
                          speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                      }
                  } 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('')))) {
                              speakerlist = speakerlist + getState(i).val + '?';
                          }
                      }
                  }
                  speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                  //--------------------------------------------------------------------------------------------------------------
          
                  out_msgs.push({
                      payload: 'entityUpd~' +                   //entityUpd
                          name + '~' +                          //heading
                          GetNavigationString(pageId) + '~' +   //navigation
                          id + '~' +                            //internalNameEntiy
                          media_icon + '~' +                    //icon
                          title + '~' +                         //title
                          author + '~' +                        //author
                          volume + '~' +                        //volume
                          iconplaypause + '~' +                 //playpauseicon
                          currentSpeaker + '~' +                //currentSpeaker
                          speakerlist + '~' +                   //speakerList-seperated-by-?
                          onoffbutton
                  });                        //On/Off Button Color
              }
              if (Debug) console.log(out_msgs);
              return out_msgs
          } catch (err) {
              console.warn('function GenerateMediaPage: ' + err.message);
          }
          

          }

          Brauchst Du nicht. ES FUNKTIONIERT!! Power Button ist stop/ein/aus Kombi und Play und Pause mit Iconwechseln gehen.

          So jetzt bitte Paypal Adresse (per PN?) für ne doppelte Kaffeespende bitte...

          Gruß Elluminatus

          P.S. Darf ich jetzt jemals noch eine Frage stellen, oder muss ich mich abmelden :blush: , ich sehe da nämlich die nächste am Horizont...

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

          @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

          function GenerateMediaPage(page: PageMedia): Payload[] {
          try {
          var id = page.items[0].id

              var out_msgs: Array<Payload> = [];
          
              out_msgs.push({ payload: 'pageType~cardMedia' });
              if (existsObject(id)) {
                  let name = getState(id + '.ALBUM').val;
                  let title = getState(id + '.TITLE').val;
                  let author = getState(id + '.ARTIST').val;
                  
                  let vInstance = page.items[0].adapterPlayerInstance;
                  let v1Adapter = vInstance.split('.');
                  let v2Adapter = v1Adapter[0];
          
                  //Alexa + neue Adpter/Player
                  let media_icon = Icons.GetIcon('playlist-music');
          
                  //Spotify-Premium
                  if (v2Adapter == 'spotify-premium') {
                      media_icon = Icons.GetIcon('spotify');
                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                      let nameLenght = name.length;
                      if (name.substring(0,9) == 'Playlist:') {
                          let nameLenght = name.length;
                          name = name.slice(10, nameLenght);
                      } else if (name.substring(0,6) == 'Album:') {
                          let nameLenght = name.length;
                          name = name.slice(10, nameLenght);
                      } else if (name.substring(0,6) == 'Track') { 
                          name = 'Spotify-Premium';
                      }
                      if (nameLenght == 0) {
                          name = 'Spotify-Premium';
                      }
                      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 = 'no music to control';               
                      }
                  }
          
                  //Sonos
                  if (v2Adapter == 'sonos') {
                      media_icon = Icons.GetIcon('music');
                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Sonos Player';
                      } 
                      author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                      if ((getState(id + '.ARTIST').val).length == 0) {
                          author = 'no music to control';               
                      }
                  }
          
                  //Logitech Squeezebox RPC
                  if (v2Adapter == 'squeezeboxrpc') {
                      media_icon = Icons.GetIcon('dlna');
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Squeezebox RPC';
                          author = 'no music to control';
                      } 
                  }
          
                  //Alexa2
                  if (v2Adapter == 'alexa2') {
                      media_icon = Icons.GetIcon('playlist-music');
                      let nameLenght = name.length;
                      if (nameLenght == 0) {
                          name = 'Alexa Player';
                          author = 'no music to control';  
                      } 
                  }
                  
                  let volume = getState(id + '.VOLUME').val;
                  var iconplaypause = Icons.GetIcon('pause'); //pause
                  var onoffbutton = 1374;
          
                  //Für alle Player
                  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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                      onoffbutton = 65535;
                      iconplaypause = Icons.GetIcon('pause'); //pause
                  } else {
                      iconplaypause = Icons.GetIcon('play'); //play
                  }
          
                  if (Debug) console.log(v2Adapter);
          
                  let currentSpeaker = 'kein Speaker gefunden';
          
                  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') {
                      if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                          currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                      }
                  }
                  //-------------------------------------------------------------------------------------------------------------
                  // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                  // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                  let speakerlist = '';
                  if (page.items[0].speakerList.length > 0) {
                      for (let i_index in page.items[0].speakerList) {
                          speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                      }
                  } 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('')))) {
                              speakerlist = speakerlist + getState(i).val + '?';
                          }
                      }
                  }
                  speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                  //--------------------------------------------------------------------------------------------------------------
          
                  out_msgs.push({
                      payload: 'entityUpd~' +                   //entityUpd
                          name + '~' +                          //heading
                          GetNavigationString(pageId) + '~' +   //navigation
                          id + '~' +                            //internalNameEntiy
                          media_icon + '~' +                    //icon
                          title + '~' +                         //title
                          author + '~' +                        //author
                          volume + '~' +                        //volume
                          iconplaypause + '~' +                 //playpauseicon
                          currentSpeaker + '~' +                //currentSpeaker
                          speakerlist + '~' +                   //speakerList-seperated-by-?
                          onoffbutton
                  });                        //On/Off Button Color
              }
              if (Debug) console.log(out_msgs);
              return out_msgs
          } catch (err) {
              console.warn('function GenerateMediaPage: ' + err.message);
          }
          

          }

          Brauchst Du nicht. ES FUNKTIONIERT!! Power Button ist stop/ein/aus Kombi und Play und Pause mit Iconwechseln gehen.

          So jetzt bitte Paypal Adresse (per PN?) für ne doppelte Kaffeespende bitte...

          Gruß Elluminatus

          P.S. Darf ich jetzt jemals noch eine Frage stellen, oder muss ich mich abmelden :blush: , ich sehe da nämlich die nächste am Horizont...

          https://paypal.me/armilarDE
          Dankeschön
          VG
          Armilar

          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.

          E 1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            holgerwolf
            schrieb am zuletzt editiert von
            #209

            Hallo,

            ich hab heute morgen teils erfolgreich von 3.1. auf 3.4.0.5 geupdatet.

            Jetzt habe ich noch ein kleines Problem:

            Im Screensaver sind die Zahlen und Icons verrutscht:

            8e580b88-d0f6-4d28-b25d-8c6da77830e4-grafik.png

            So sieht der entsprechende Teil im Script aus:

            firstScreensaverEntity: { ScreensaverEntity: "zigbee.0.00158d0002c77840.temperature", ScreensaverEntityIcon: "thermometer", ScreensaverEntityText: "Horreo", ScreensaverEntityUnitText: "°C", ScreensaverEntityIconColor: {'val_min': -5, 'val_max': 40} },
                secondScreensaverEntity: { ScreensaverEntity: "accuweather.0.Daily.Day1.Day.RainProbability", ScreensaverEntityIcon: "water-percent", ScreensaverEntityText: "Regen", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                thirdScreensaverEntity: { ScreensaverEntity: "mqtt.0.openWB.lp.1.%Soc", ScreensaverEntityIcon: "car-electric", ScreensaverEntityText: "Auto", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                fourthScreensaverEntity: { ScreensaverEntity: "javascript.0.Photovoltaik.Leistung_DC_komplett", ScreensaverEntityIcon: "solar-panel", ScreensaverEntityText: "PV", ScreensaverEntityUnitText: "W", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 5000} },
                alternativeScreensaverLayout: true,
                autoWeatherColorScreensaverLayout: true,
            
            ArmilarA 1 Antwort Letzte Antwort
            0
            • H holgerwolf

              Hallo,

              ich hab heute morgen teils erfolgreich von 3.1. auf 3.4.0.5 geupdatet.

              Jetzt habe ich noch ein kleines Problem:

              Im Screensaver sind die Zahlen und Icons verrutscht:

              8e580b88-d0f6-4d28-b25d-8c6da77830e4-grafik.png

              So sieht der entsprechende Teil im Script aus:

              firstScreensaverEntity: { ScreensaverEntity: "zigbee.0.00158d0002c77840.temperature", ScreensaverEntityIcon: "thermometer", ScreensaverEntityText: "Horreo", ScreensaverEntityUnitText: "°C", ScreensaverEntityIconColor: {'val_min': -5, 'val_max': 40} },
                  secondScreensaverEntity: { ScreensaverEntity: "accuweather.0.Daily.Day1.Day.RainProbability", ScreensaverEntityIcon: "water-percent", ScreensaverEntityText: "Regen", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                  thirdScreensaverEntity: { ScreensaverEntity: "mqtt.0.openWB.lp.1.%Soc", ScreensaverEntityIcon: "car-electric", ScreensaverEntityText: "Auto", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                  fourthScreensaverEntity: { ScreensaverEntity: "javascript.0.Photovoltaik.Leistung_DC_komplett", ScreensaverEntityIcon: "solar-panel", ScreensaverEntityText: "PV", ScreensaverEntityUnitText: "W", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 5000} },
                  alternativeScreensaverLayout: true,
                  autoWeatherColorScreensaverLayout: true,
              
              ArmilarA Offline
              ArmilarA Offline
              Armilar
              Most Active Forum Testing
              schrieb am zuletzt editiert von
              #210

              @holgerwolf sagte in SONOFF NSPanel mit Lovelace UI:

              Hallo,

              ich hab heute morgen teils erfolgreich von 3.1. auf 3.4.0.5 geupdatet.

              Jetzt habe ich noch ein kleines Problem:

              Im Screensaver sind die Zahlen und Icons verrutscht:

              8e580b88-d0f6-4d28-b25d-8c6da77830e4-grafik.png

              So sieht der entsprechende Teil im Script aus:

              firstScreensaverEntity: { ScreensaverEntity: "zigbee.0.00158d0002c77840.temperature", ScreensaverEntityIcon: "thermometer", ScreensaverEntityText: "Horreo", ScreensaverEntityUnitText: "°C", ScreensaverEntityIconColor: {'val_min': -5, 'val_max': 40} },
                  secondScreensaverEntity: { ScreensaverEntity: "accuweather.0.Daily.Day1.Day.RainProbability", ScreensaverEntityIcon: "water-percent", ScreensaverEntityText: "Regen", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                  thirdScreensaverEntity: { ScreensaverEntity: "mqtt.0.openWB.lp.1.%Soc", ScreensaverEntityIcon: "car-electric", ScreensaverEntityText: "Auto", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                  fourthScreensaverEntity: { ScreensaverEntity: "javascript.0.Photovoltaik.Leistung_DC_komplett", ScreensaverEntityIcon: "solar-panel", ScreensaverEntityText: "PV", ScreensaverEntityUnitText: "W", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 5000} },
                  alternativeScreensaverLayout: true,
                  autoWeatherColorScreensaverLayout: true,
              

              :blush: Die ist nicht verrutscht. Du bist im alternativen Layout gelandet.
              Schalte mal:

              alternativeScreensaverLayout: true,
              

              auf

              alternativeScreensaverLayout: false,
              

              Dann ist wieder alles wie früher, nur hübscher

              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.

              H 1 Antwort Letzte Antwort
              0
              • ArmilarA Armilar

                @holgerwolf sagte in SONOFF NSPanel mit Lovelace UI:

                Hallo,

                ich hab heute morgen teils erfolgreich von 3.1. auf 3.4.0.5 geupdatet.

                Jetzt habe ich noch ein kleines Problem:

                Im Screensaver sind die Zahlen und Icons verrutscht:

                8e580b88-d0f6-4d28-b25d-8c6da77830e4-grafik.png

                So sieht der entsprechende Teil im Script aus:

                firstScreensaverEntity: { ScreensaverEntity: "zigbee.0.00158d0002c77840.temperature", ScreensaverEntityIcon: "thermometer", ScreensaverEntityText: "Horreo", ScreensaverEntityUnitText: "°C", ScreensaverEntityIconColor: {'val_min': -5, 'val_max': 40} },
                    secondScreensaverEntity: { ScreensaverEntity: "accuweather.0.Daily.Day1.Day.RainProbability", ScreensaverEntityIcon: "water-percent", ScreensaverEntityText: "Regen", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                    thirdScreensaverEntity: { ScreensaverEntity: "mqtt.0.openWB.lp.1.%Soc", ScreensaverEntityIcon: "car-electric", ScreensaverEntityText: "Auto", ScreensaverEntityUnitText: "%", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                    fourthScreensaverEntity: { ScreensaverEntity: "javascript.0.Photovoltaik.Leistung_DC_komplett", ScreensaverEntityIcon: "solar-panel", ScreensaverEntityText: "PV", ScreensaverEntityUnitText: "W", ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 5000} },
                    alternativeScreensaverLayout: true,
                    autoWeatherColorScreensaverLayout: true,
                

                :blush: Die ist nicht verrutscht. Du bist im alternativen Layout gelandet.
                Schalte mal:

                alternativeScreensaverLayout: true,
                

                auf

                alternativeScreensaverLayout: false,
                

                Dann ist wieder alles wie früher, nur hübscher

                H Offline
                H Offline
                holgerwolf
                schrieb am zuletzt editiert von
                #211

                @armilar Stimmt :-)

                Dankeschön, das wars...

                ArmilarA 1 Antwort Letzte Antwort
                0
                • H holgerwolf

                  @armilar Stimmt :-)

                  Dankeschön, das wars...

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

                  @holgerwolf sagte in SONOFF NSPanel mit Lovelace UI:

                  @armilar Stimmt :-)

                  Dankeschön, das wars...

                  https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Config-Screensaver

                  Hier gibt es auch Infos zum aktuellen Screensaver

                  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.

                  H 1 Antwort Letzte Antwort
                  0
                  • ArmilarA Armilar

                    @holgerwolf sagte in SONOFF NSPanel mit Lovelace UI:

                    @armilar Stimmt :-)

                    Dankeschön, das wars...

                    https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Config-Screensaver

                    Hier gibt es auch Infos zum aktuellen Screensaver

                    H Offline
                    H Offline
                    holgerwolf
                    schrieb am zuletzt editiert von
                    #213

                    @armilar Schon gelesen und auch schon angepasst. Muss nur noch einen Zweck für das zweite Icon oben finden.
                    Das Erste hab ich schonmal mit dem Status der Waschmaschine verknüpft. Frau wird begeistert sein :-)

                    E 1 Antwort Letzte Antwort
                    0
                    • D Offline
                      D Offline
                      DirkS. 0
                      schrieb am zuletzt editiert von DirkS. 0
                      #214

                      Hallo ,
                      bin neu hier im Forum und habe dasselbe Problem, wie von @Skatbert etwas weiter oben geschildert, d.h.

                      ich kann nur zwei Seiten schalten bzw. erreichen.
                      Ich habe mittlerweile das 2. Panel ausprobiert und das Problem ist dasselbe.

                      Gibt es da mittlerweile eine Lösung?
                      Habe gerade die aktuelle Software aufgespielt (tasmota, berry treiber, display firmware).

                      ArmilarA 1 Antwort Letzte Antwort
                      0
                      • D DirkS. 0

                        Hallo ,
                        bin neu hier im Forum und habe dasselbe Problem, wie von @Skatbert etwas weiter oben geschildert, d.h.

                        ich kann nur zwei Seiten schalten bzw. erreichen.
                        Ich habe mittlerweile das 2. Panel ausprobiert und das Problem ist dasselbe.

                        Gibt es da mittlerweile eine Lösung?
                        Habe gerade die aktuelle Software aufgespielt (tasmota, berry treiber, display firmware).

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

                        @dirks-0 sagte in SONOFF NSPanel mit Lovelace UI:

                        Hallo ,
                        bin neu hier im Forum und habe dasselbe Problem, wie von @Skatbert etwas weiter oben geschildert, d.h.

                        ich kann nur zwei Seiten schalten bzw. erreichen.
                        Ich habe mittlerweile das 2. Panel ausprobiert und das Problem ist dasselbe.

                        Gibt es da mittlerweile eine Lösung?
                        Habe gerade die aktuelle Software aufgespielt (tasmota, berry treiber, display firmware).

                        Das Problem ist, das wir das wir die Ursache nicht nachvollziehen können... Da es bei 1000+ Usern funktioniert, schließe ich mal das Skript selbst kurz aus. Aber was ist bei euch (Setup/System/Doing) anders, als bei den restlichen (@Skatbert / und bei dir). Das gilt es zu finden - wird bestimmt keine einfache Analyse

                        Eventuell kann man Ableitungen treffen, wenn wir mehr über System und Vorgehensweise bei der Installation (ggfs. externe Tools) kennen.

                        Hast du eine Historie/SQL/influx - Adapter? Dann wäre es schon mal hilfreich, wenn man den CustomSend und den RESULT mitplottet. Die sollten einen Zeitstempel haben.

                        Jede Aktion aus dem Panel sollte im Tasmota zu sehen sein, aber auch zum gleichen Zeitpunkt am RESULT ankommen. Dann beginnt die Verarbeitung im Skript und das Ergebnis wird über den CustomSend an das Panel übermittelt.

                        Hatte (@Kuckuckmann ebenfalls) die Config von @Skatbert auch analysiert und nachgebildet. Bei uns trat der Fehler im Skript nicht auf. @Kuckuckmann hatte die Vermutung, dass durch Tools wie Notepad, etc. Unterschiede zur RAW-Version beim hin- und herkopieren entstehen. Wir sind aktuell zu weit von eurer Systemumgebung entfernt.

                        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.

                        S 1 Antwort Letzte Antwort
                        0
                        • ArmilarA Armilar

                          @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

                          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                          function GenerateMediaPage(page: PageMedia): Payload[] {
                          try {
                          var id = page.items[0].id

                              var out_msgs: Array<Payload> = [];
                          
                              out_msgs.push({ payload: 'pageType~cardMedia' });
                              if (existsObject(id)) {
                                  let name = getState(id + '.ALBUM').val;
                                  let title = getState(id + '.TITLE').val;
                                  let author = getState(id + '.ARTIST').val;
                                  
                                  let vInstance = page.items[0].adapterPlayerInstance;
                                  let v1Adapter = vInstance.split('.');
                                  let v2Adapter = v1Adapter[0];
                          
                                  //Alexa + neue Adpter/Player
                                  let media_icon = Icons.GetIcon('playlist-music');
                          
                                  //Spotify-Premium
                                  if (v2Adapter == 'spotify-premium') {
                                      media_icon = Icons.GetIcon('spotify');
                                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                                      let nameLenght = name.length;
                                      if (name.substring(0,9) == 'Playlist:') {
                                          let nameLenght = name.length;
                                          name = name.slice(10, nameLenght);
                                      } else if (name.substring(0,6) == 'Album:') {
                                          let nameLenght = name.length;
                                          name = name.slice(10, nameLenght);
                                      } else if (name.substring(0,6) == 'Track') { 
                                          name = 'Spotify-Premium';
                                      }
                                      if (nameLenght == 0) {
                                          name = 'Spotify-Premium';
                                      }
                                      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 = 'no music to control';               
                                      }
                                  }
                          
                                  //Sonos
                                  if (v2Adapter == 'sonos') {
                                      media_icon = Icons.GetIcon('music');
                                      name = getState(id + '.CONTEXT_DESCRIPTION').val;
                                      let nameLenght = name.length;
                                      if (nameLenght == 0) {
                                          name = 'Sonos Player';
                                      } 
                                      author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
                                      if ((getState(id + '.ARTIST').val).length == 0) {
                                          author = 'no music to control';               
                                      }
                                  }
                          
                                  //Logitech Squeezebox RPC
                                  if (v2Adapter == 'squeezeboxrpc') {
                                      media_icon = Icons.GetIcon('dlna');
                                      let nameLenght = name.length;
                                      if (nameLenght == 0) {
                                          name = 'Squeezebox RPC';
                                          author = 'no music to control';
                                      } 
                                  }
                          
                                  //Alexa2
                                  if (v2Adapter == 'alexa2') {
                                      media_icon = Icons.GetIcon('playlist-music');
                                      let nameLenght = name.length;
                                      if (nameLenght == 0) {
                                          name = 'Alexa Player';
                                          author = 'no music to control';  
                                      } 
                                  }
                                  
                                  let volume = getState(id + '.VOLUME').val;
                                  var iconplaypause = Icons.GetIcon('pause'); //pause
                                  var onoffbutton = 1374;
                          
                                  //Für alle Player
                                  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 (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
                                      onoffbutton = 65535;
                                      iconplaypause = Icons.GetIcon('pause'); //pause
                                  } else {
                                      iconplaypause = Icons.GetIcon('play'); //play
                                  }
                          
                                  if (Debug) console.log(v2Adapter);
                          
                                  let currentSpeaker = 'kein Speaker gefunden';
                          
                                  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') {
                                      if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
                                          currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
                                      }
                                  }
                                  //-------------------------------------------------------------------------------------------------------------
                                  // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
                                  // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
                                  let speakerlist = '';
                                  if (page.items[0].speakerList.length > 0) {
                                      for (let i_index in page.items[0].speakerList) {
                                          speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
                                      }
                                  } 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('')))) {
                                              speakerlist = speakerlist + getState(i).val + '?';
                                          }
                                      }
                                  }
                                  speakerlist = speakerlist.substring(0, speakerlist.length - 1);
                                  //--------------------------------------------------------------------------------------------------------------
                          
                                  out_msgs.push({
                                      payload: 'entityUpd~' +                   //entityUpd
                                          name + '~' +                          //heading
                                          GetNavigationString(pageId) + '~' +   //navigation
                                          id + '~' +                            //internalNameEntiy
                                          media_icon + '~' +                    //icon
                                          title + '~' +                         //title
                                          author + '~' +                        //author
                                          volume + '~' +                        //volume
                                          iconplaypause + '~' +                 //playpauseicon
                                          currentSpeaker + '~' +                //currentSpeaker
                                          speakerlist + '~' +                   //speakerList-seperated-by-?
                                          onoffbutton
                                  });                        //On/Off Button Color
                              }
                              if (Debug) console.log(out_msgs);
                              return out_msgs
                          } catch (err) {
                              console.warn('function GenerateMediaPage: ' + err.message);
                          }
                          

                          }

                          Brauchst Du nicht. ES FUNKTIONIERT!! Power Button ist stop/ein/aus Kombi und Play und Pause mit Iconwechseln gehen.

                          So jetzt bitte Paypal Adresse (per PN?) für ne doppelte Kaffeespende bitte...

                          Gruß Elluminatus

                          P.S. Darf ich jetzt jemals noch eine Frage stellen, oder muss ich mich abmelden :blush: , ich sehe da nämlich die nächste am Horizont...

                          https://paypal.me/armilarDE
                          Dankeschön
                          VG
                          Armilar

                          E Offline
                          E Offline
                          Elluminatus
                          schrieb am zuletzt editiert von
                          #216

                          @armilar Papal ist raus. Klein aber von Herzen!

                          1 Antwort Letzte Antwort
                          0
                          • H holgerwolf

                            @armilar Schon gelesen und auch schon angepasst. Muss nur noch einen Zweck für das zweite Icon oben finden.
                            Das Erste hab ich schonmal mit dem Status der Waschmaschine verknüpft. Frau wird begeistert sein :-)

                            E Offline
                            E Offline
                            Elluminatus
                            schrieb am zuletzt editiert von
                            #217

                            @holgerwolf Hi,von dem Endergebnis des Screensavers mit Waschmaschine hätte ich gerne mal ein Foto :blush:

                            Gruß Elluminatus

                            H 1 Antwort Letzte Antwort
                            0
                            • E Elluminatus

                              @holgerwolf Hi,von dem Endergebnis des Screensavers mit Waschmaschine hätte ich gerne mal ein Foto :blush:

                              Gruß Elluminatus

                              H Offline
                              H Offline
                              holgerwolf
                              schrieb am zuletzt editiert von
                              #218

                              @elluminatus Bitteschön :-)

                              71f83258-41a2-4814-b380-fffb6b3b29db-grafik.png

                              E 1 Antwort Letzte Antwort
                              0
                              • ArmilarA Armilar

                                @dirks-0 sagte in SONOFF NSPanel mit Lovelace UI:

                                Hallo ,
                                bin neu hier im Forum und habe dasselbe Problem, wie von @Skatbert etwas weiter oben geschildert, d.h.

                                ich kann nur zwei Seiten schalten bzw. erreichen.
                                Ich habe mittlerweile das 2. Panel ausprobiert und das Problem ist dasselbe.

                                Gibt es da mittlerweile eine Lösung?
                                Habe gerade die aktuelle Software aufgespielt (tasmota, berry treiber, display firmware).

                                Das Problem ist, das wir das wir die Ursache nicht nachvollziehen können... Da es bei 1000+ Usern funktioniert, schließe ich mal das Skript selbst kurz aus. Aber was ist bei euch (Setup/System/Doing) anders, als bei den restlichen (@Skatbert / und bei dir). Das gilt es zu finden - wird bestimmt keine einfache Analyse

                                Eventuell kann man Ableitungen treffen, wenn wir mehr über System und Vorgehensweise bei der Installation (ggfs. externe Tools) kennen.

                                Hast du eine Historie/SQL/influx - Adapter? Dann wäre es schon mal hilfreich, wenn man den CustomSend und den RESULT mitplottet. Die sollten einen Zeitstempel haben.

                                Jede Aktion aus dem Panel sollte im Tasmota zu sehen sein, aber auch zum gleichen Zeitpunkt am RESULT ankommen. Dann beginnt die Verarbeitung im Skript und das Ergebnis wird über den CustomSend an das Panel übermittelt.

                                Hatte (@Kuckuckmann ebenfalls) die Config von @Skatbert auch analysiert und nachgebildet. Bei uns trat der Fehler im Skript nicht auf. @Kuckuckmann hatte die Vermutung, dass durch Tools wie Notepad, etc. Unterschiede zur RAW-Version beim hin- und herkopieren entstehen. Wir sind aktuell zu weit von eurer Systemumgebung entfernt.

                                S Offline
                                S Offline
                                Skatbert
                                schrieb am zuletzt editiert von
                                #219

                                @armilar Ich habe wie schon geschrieben ein neues Panel bestellt, wenn dieses da ist werde ich das alte über eine gesonderte einfache direkte Iobrokerinstallation auf einem Raspi ohne irgendwelche sonstigen Tools etc. einbinden und mal schauen was da geht.
                                Das Neue Gerät wird in der aktuellen Umgebung installiert und das muss ja mit dem Teufel zugehen wenn da nicht zumindest irgendein Hinweis oder Unterschied zu erkennen ist.
                                Guter Tipp, ich werde die Datenpunkte mal mit plotten, vielleicht kommt da ja auch was bei rum.

                                1 Antwort Letzte Antwort
                                0
                                • H holgerwolf

                                  @elluminatus Bitteschön :-)

                                  71f83258-41a2-4814-b380-fffb6b3b29db-grafik.png

                                  E Offline
                                  E Offline
                                  Elluminatus
                                  schrieb am zuletzt editiert von
                                  #220

                                  @holgerwolf Das sieht ja klasse aus!

                                  1 Antwort Letzte Antwort
                                  0
                                  • ArmilarA Offline
                                    ArmilarA Offline
                                    Armilar
                                    Most Active Forum Testing
                                    schrieb am zuletzt editiert von Armilar
                                    #221

                                    @skatbert sagte in SONOFF NSPanel mit Lovelace UI:

                                    @armilar Ich habe wie schon geschrieben ein neues Panel bestellt, wenn dieses da ist werde ich das alte über eine gesonderte einfache direkte Iobrokerinstallation auf einem Raspi ohne irgendwelche sonstigen Tools etc. einbinden und mal schauen was da geht.
                                    Das Neue Gerät wird in der aktuellen Umgebung installiert und das muss ja mit dem Teufel zugehen wenn da nicht zumindest irgendein Hinweis oder Unterschied zu erkennen ist.
                                    Guter Tipp, ich werde die Datenpunkte mal mit plotten, vielleicht kommt da ja auch was bei rum.

                                    Auch mal über verdrehte Locales nachdenken. Z.B. ein fehlerhaft konfiguriertes redis könnte ebenfalls zu Problemen führen (siehe z.B. https://forum.iobroker.net/topic/52976/wichtiger-hinweis-für-redis-installationen?_=1665063160718). Oder andere Konstellationen, die wir im Moment nicht erahnen können, für euch aber selbstverständlich aussehen. Selbst das Betriebssystem kann das schon erzeugen. Je simpler, dafür korrekter aufgesetzt, desto besser für die Analyse.

                                    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
                                    • T Offline
                                      T Offline
                                      TopGoal
                                      schrieb am zuletzt editiert von
                                      #222

                                      @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                                      Ich denke du hast in der Tat ein ähnliches Problem wie es @andeas_z hatte. Klingt zumindest nach einem identischen Setup. Würde mal die Tipps (auch mal ohne den Mosquitto) durchgehen.

                                      Hallo zusammen,
                                      es zeigt sich wieder einmal ganz deutlich:
                                      "Wer die Dokumentation aufmerksam ließt, ist eindeutig im Vorteil"!

                                      Ein Bruch in der Kommunikation der Komponenten (Tasmota, NsPanal, Display Firmware, MQTT und TS-Skript) war nicht die Ursache, warum das Panel den Status: "waiting for content" nicht verlassen wollte.

                                      Der Grund war eine unzulässige FullTopic Definition, die ich gemacht hatte (kleiner Fehler mit großer, negativer Wirkung).

                                      Dennoch habe ich alle Tasmota Devices auf die mqtt.0 Instanz (Broker), entsprechend den Vorschlägen im Forum, umgestellt.

                                      Weitere SmartHome Geräte laufen über den Mosquitto Broker, Port 1883 und über mqtt.1 im (Client Mode).

                                      Quelle (sicherlich auch im Forum):
                                      https://tasmota.github.io/docs/MQTT/

                                      Auszug: Using the tokens the following example topics can be made:

                                      FullTopic %prefix%/%topic%/ default
                                      FullTopic tasmota/%topic%/%prefix%/
                                      FullTopic tasmota/bedroom/%topic%/%prefix%/
                                      FullTopic penthouse/bedroom1/bathroom2/%topic%/%prefix%/
                                      FullTopic %prefix%/home/cellar/%topic%/
                                      

                                      Mein Fehler:

                                      FullTopic SmartHome/%topic%/%prefix%/Raumbezug/..usw..
                                      

                                      Korrekturen:

                                      %Topic% = DeviceName (muss eindeutig sein)
                                      FullTopic SmartHome/Raumbezug/%topic%/%prefix%
                                      
                                      1. Mqtt Broker (Mosqitto testweise deaktiviert)
                                      2. mqtt.0 von Client auf Broker konfiguriert
                                      	Port von 1883 ---> <HostIp>:1886 geändert
                                      	WebSocket Port 1887 (1886+1, wird automatisch eingestellt)
                                      3. MQTT.0 Instanz beendet und TS-Skript gestoppt		
                                      4. NsPanel Mqtt Konfiguration analog mqtt.0 geändert
                                      5. Nicht mehr verwendete Strukturbäume aus MQTT.0 (nur NsPanel-Objekte) entfernt
                                      6. Korrektur NsPanel FullTopic und TS-Skript geändert
                                      7. Neustart NsPanel und MQTT.0 Instanz (ohne TS-Skript Start)
                                      8. Objekt CustomSend neu angelegt (entsprechend neuer FullTopic Struktur (im cmnd Zweig))
                                      9. TS-Script starten (dann war Schluss mit: "waiting for content") 
                                      

                                      Vielleicht gibt es ja noch Andere, die ebenfalls diesn Fehler gemacht haben und mein Hinweis hilft weiter.

                                      Viele Grüße in die Runde
                                      TopGoal

                                      ArmilarA 1 Antwort Letzte Antwort
                                      1
                                      • T TopGoal

                                        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                                        Ich denke du hast in der Tat ein ähnliches Problem wie es @andeas_z hatte. Klingt zumindest nach einem identischen Setup. Würde mal die Tipps (auch mal ohne den Mosquitto) durchgehen.

                                        Hallo zusammen,
                                        es zeigt sich wieder einmal ganz deutlich:
                                        "Wer die Dokumentation aufmerksam ließt, ist eindeutig im Vorteil"!

                                        Ein Bruch in der Kommunikation der Komponenten (Tasmota, NsPanal, Display Firmware, MQTT und TS-Skript) war nicht die Ursache, warum das Panel den Status: "waiting for content" nicht verlassen wollte.

                                        Der Grund war eine unzulässige FullTopic Definition, die ich gemacht hatte (kleiner Fehler mit großer, negativer Wirkung).

                                        Dennoch habe ich alle Tasmota Devices auf die mqtt.0 Instanz (Broker), entsprechend den Vorschlägen im Forum, umgestellt.

                                        Weitere SmartHome Geräte laufen über den Mosquitto Broker, Port 1883 und über mqtt.1 im (Client Mode).

                                        Quelle (sicherlich auch im Forum):
                                        https://tasmota.github.io/docs/MQTT/

                                        Auszug: Using the tokens the following example topics can be made:

                                        FullTopic %prefix%/%topic%/ default
                                        FullTopic tasmota/%topic%/%prefix%/
                                        FullTopic tasmota/bedroom/%topic%/%prefix%/
                                        FullTopic penthouse/bedroom1/bathroom2/%topic%/%prefix%/
                                        FullTopic %prefix%/home/cellar/%topic%/
                                        

                                        Mein Fehler:

                                        FullTopic SmartHome/%topic%/%prefix%/Raumbezug/..usw..
                                        

                                        Korrekturen:

                                        %Topic% = DeviceName (muss eindeutig sein)
                                        FullTopic SmartHome/Raumbezug/%topic%/%prefix%
                                        
                                        1. Mqtt Broker (Mosqitto testweise deaktiviert)
                                        2. mqtt.0 von Client auf Broker konfiguriert
                                        	Port von 1883 ---> <HostIp>:1886 geändert
                                        	WebSocket Port 1887 (1886+1, wird automatisch eingestellt)
                                        3. MQTT.0 Instanz beendet und TS-Skript gestoppt		
                                        4. NsPanel Mqtt Konfiguration analog mqtt.0 geändert
                                        5. Nicht mehr verwendete Strukturbäume aus MQTT.0 (nur NsPanel-Objekte) entfernt
                                        6. Korrektur NsPanel FullTopic und TS-Skript geändert
                                        7. Neustart NsPanel und MQTT.0 Instanz (ohne TS-Skript Start)
                                        8. Objekt CustomSend neu angelegt (entsprechend neuer FullTopic Struktur (im cmnd Zweig))
                                        9. TS-Script starten (dann war Schluss mit: "waiting for content") 
                                        

                                        Vielleicht gibt es ja noch Andere, die ebenfalls diesn Fehler gemacht haben und mein Hinweis hilft weiter.

                                        Viele Grüße in die Runde
                                        TopGoal

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

                                        @Berges01 - wie sind hierher umgezogen


                                        Ich habe mir auch so ein Panel zugelegt um damit mein Heizungsthermostat der Gastherme zu ersetzen.
                                        Mit Tasmota habe ich das auch geflascht bekommen (Nur Tasmota das Display ist noch Original).
                                        Dann habe ich versucht die Tasten von den Relais zu endkoppeln, habe ich wie auch immer hinbekommen.
                                        Die Tasten sollen von Hand oder Automatik anwählen.
                                        Das Blocklie dafür läuft auch.
                                        Raumtemperatur habe ich auch angepasst bekommen.

                                        Jetzt zu dem was ich nicht hinbekomme!
                                        Ich möchte den Reglerausgang im MQTT sehen.

                                        Die beiden Ausgänge :

                                        {
                                          "Time": "2022-10-06T19:31:51",
                                          "Switch1": "ON",
                                          "Switch2": "ON",
                                          "ANALOG": {
                                            "Temperature1": 22.5
                                          },
                                          "ESP32": {
                                            "Temperature": 80
                                          },
                                          "TempUnit": "C"
                                        }
                                        

                                        bleiben immer ON.
                                        Ich vermute das es an der Template liegt (Das habe ich noch nicht verstanden).
                                        So sieht die aus :
                                        Sorry kriege ich nur als Bild hin.
                                        78ff0078-2590-4b1e-9058-44fa143c20ce-image.png 45a10590-4970-46ac-978b-640df2b48c80-image.png
                                        Wo muss ich noch was drehen und konfigurieren ?

                                        Wieso ist das Display noch Original? Arbeitest du mit der Sonoff-Original-Software weiter?

                                        Regler? Du meinst die beiden Switches (Schalter-Tasten der Hardware), oder?

                                        Ist zwar für die Displaysoftware mit Lovelace UI, jedoch hast du ja ein Tasmota-Thema mit der Original Firmware. Die Anleitung sollte dennoch funktionieren. Dein Ansatz ist schon korrekt - jetzt muss aber auch der Switchmode gesetzt werden.

                                        https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Tasmota-FAQ#14--switchmode

                                        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.

                                        Berges01B 1 Antwort Letzte Antwort
                                        0
                                        • ArmilarA Armilar

                                          @Berges01 - wie sind hierher umgezogen


                                          Ich habe mir auch so ein Panel zugelegt um damit mein Heizungsthermostat der Gastherme zu ersetzen.
                                          Mit Tasmota habe ich das auch geflascht bekommen (Nur Tasmota das Display ist noch Original).
                                          Dann habe ich versucht die Tasten von den Relais zu endkoppeln, habe ich wie auch immer hinbekommen.
                                          Die Tasten sollen von Hand oder Automatik anwählen.
                                          Das Blocklie dafür läuft auch.
                                          Raumtemperatur habe ich auch angepasst bekommen.

                                          Jetzt zu dem was ich nicht hinbekomme!
                                          Ich möchte den Reglerausgang im MQTT sehen.

                                          Die beiden Ausgänge :

                                          {
                                            "Time": "2022-10-06T19:31:51",
                                            "Switch1": "ON",
                                            "Switch2": "ON",
                                            "ANALOG": {
                                              "Temperature1": 22.5
                                            },
                                            "ESP32": {
                                              "Temperature": 80
                                            },
                                            "TempUnit": "C"
                                          }
                                          

                                          bleiben immer ON.
                                          Ich vermute das es an der Template liegt (Das habe ich noch nicht verstanden).
                                          So sieht die aus :
                                          Sorry kriege ich nur als Bild hin.
                                          78ff0078-2590-4b1e-9058-44fa143c20ce-image.png 45a10590-4970-46ac-978b-640df2b48c80-image.png
                                          Wo muss ich noch was drehen und konfigurieren ?

                                          Wieso ist das Display noch Original? Arbeitest du mit der Sonoff-Original-Software weiter?

                                          Regler? Du meinst die beiden Switches (Schalter-Tasten der Hardware), oder?

                                          Ist zwar für die Displaysoftware mit Lovelace UI, jedoch hast du ja ein Tasmota-Thema mit der Original Firmware. Die Anleitung sollte dennoch funktionieren. Dein Ansatz ist schon korrekt - jetzt muss aber auch der Switchmode gesetzt werden.

                                          https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Tasmota-FAQ#14--switchmode

                                          Berges01B Online
                                          Berges01B Online
                                          Berges01
                                          schrieb am zuletzt editiert von
                                          #224

                                          Wieso ist das Display noch Original? Arbeitest du mit der Sonoff-Original-Software weiter?

                                          Das reicht mir erst mal.
                                          Nur Tasmota damit ich MQTT Kommunikation bekomme.
                                          Dann kann ich im ioBroker den Rest machen.
                                          Wenn ich den Zweipunktregler mit Blockly mache wäre ich jetzt Fertig.
                                          Wenn das alles so läuft wie ich mir das denke, kann ich daran anknüpfen und alles umstellen.
                                          Mein Regler ist Müll und muss schnell ersetzt werden.

                                          F.B.

                                          ArmilarA 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          516

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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