Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. SONOFF NSPanel mit Lovelace UI

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SONOFF NSPanel mit Lovelace UI

    This topic has been deleted. Only users with topic management privileges can see it.
    • U
      uSi @Armilar last edited by

      @armilar Das ging ja rasend schnell - Danke!
      Das steht drin:
      {
      "Info2": {
      "WebServerMode": "Admin",
      "Hostname": "uSi-NSPanel1",
      "IPAddress": "192.168.2.114"
      }
      }

      Armilar 1 Reply Last reply Reply Quote 0
      • Armilar
        Armilar Most Active Forum Testing @Elluminatus last edited by 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 Ja die habe ich eingetragen. Also wenn ein Song spielt ist es 1, bei druck auf Pause wird es 0, das Icon ändert sich aber nicht vom Pausen Icon auf das Play Icon. Nochmaliger druck auf Pause bleibt bei 0. Wenn ich zwei daneben auf den Power Button drücke dann ändert es sich wieder auf 1. Status 2 also Stop habe ich noch nicht erreichen können...

        Also ich steuere jetzt praktisch mit Pause und PowerIcon

        Stop gibt es im Player auch nicht wirklich und wird bei einigen Adaptern synonym für Power benutzt. Der ist also in der Squeezebox ungenutzt.
        Habe aber soeben (denke ich) das Problem gefunden. Der Alias Datenpunkt STATE geht auf Power, aber Power geht mit Pause nicht auf "false" (wie in den anderen Adaptern der eigentliche state-DP). Dadurch geht der niemals in den Play-Status. Muss ich ebenfalls eine Änderung im Script machen. Würde noch eine Abfrage auf "PAUSE === false" einbauen - dann sollte es demnächst funktionieren.

        Kannst du auch gerne vorher testen...

        Du müsstest bei ca. Zeile 2920 diese Zeilen austauschen

                    case 'media-pause':
                        if (getState(id + '.STATE').val === true || getState(id + '.PAUSE').val === false) {
                            setIfExists(id + '.PAUSE', true);
                        } else {
                            setIfExists(id + '.PLAY', true);
                        }
                        setTimeout(function(){
                            GeneratePage(activePage);  
                        },3000)
                        break;
        

        Hi, das brachte leider noch nicht den gewünschten Erfolg. Der PowerIcon ist nach wie vor play und der PauseIcon ist Pause. Nochmaliger Druck auf Pause macht nichts. Habe allerdings herausgefunden, dass der State Datenpunkt auf True ist, wenn der ganze Player eingeschaltet ist. Bei der Ipeng App kann ich den gesamten Player aus-/ und einschalten. Damit ändere ich dann den Zustand im State von true auf false. Während des laufenden Betriebes bleibt der Punkt immer auf true.

        Also ich habe das bei mir mal soweit durchgespielt.

        Info Zum Icon (Play/Pause) - das wechselt aktuell nicht wirklich, da das erst mit dem Rendern (Versions Update) passiert. Aber der Zustand sollte sich ändern.

        Also mein Versuchsaufbau:

        Unter 0_userdata habe ich mal deinen Adapter nachgebildet.

        55ee4574-a906-4558-8801-7f9741bcbb92-image.png

        Unter alias.0. sieht das so aus
        a73ecc7b-e9ac-4c7e-84dc-4cffb8e732ab-image.png

        und im TS-Script so:

        var SqueezeboxRPC: PageMedia = 
        {
            "type": "cardMedia",
            "heading": "SqueezeboxRPC",
            "useColor": true,
            "subPage": false,
            "parent": undefined,
            "items": [<PageItem>{ 
                        id: "alias.0.NSPanel_1.Media.SqueezeBoxRPC", 
                        adapterPlayerInstance: "squeezeboxrpc.0.Players.piCoreKUE.",
                        speakerList: ['KE_HWR']
                     }] 
        };
        

        Wenn ich jetzt auf den Pausen-Button drücke -->
        b001494d-58f7-4b8e-9992-e87a1fb54ec5-image.png

        0 = Pause

        Wenn ich nochmal drauf drücke (Bei mir gibt es mittlerweile sogar einen Icon-Wechsel)
        c1ca4688-c20a-4717-bef4-ba1919213a17-image.png

        1 = Play

        Wenn ich erneut drauf drücke
        6ded2161-5d0f-4ff2-a57e-45a05d1f4c1b-image.png

        0 = Pause

        Kann ich beliebig oft wiederholen

        Wenn ich auf Power drücke passiert das
        ce0b8858-a5a1-4bb9-bb32-edc34b14f704-image.png

        2 = Stop

        Was passiert bei dir? So ist es in der Beschreibung bei github doch auch beschrieben

        E 1 Reply Last reply Reply Quote 0
        • Armilar
          Armilar Most Active Forum Testing @uSi last edited by

          @usi sagte in SONOFF NSPanel mit Lovelace UI:

          @armilar Das ging ja rasend schnell - Danke!
          Das steht drin:
          {
          "Info2": {
          "WebServerMode": "Admin",
          "Hostname": "uSi-NSPanel1",
          "IPAddress": "192.168.2.114"
          }
          }

          Tausche die mal kurz aus durch

          function get_current_tasmota_ip_address() {
              try {
                  const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                  const infoObj = JSON.parse(getState(infoObjId).val);
          
                  console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
          
                  return infoObj.Info2.IPAddress;
              } catch (err) {
                  console.warn('function get_current_tasmota_ip_address: ' + err.message);
              }
          }
          

          und starte das Script erneut

          U 1 Reply Last reply Reply Quote 0
          • U
            uSi @Armilar last edited by

            @armilar sagte in SONOFF NSPanel mit Lovelace UI:

            @usi sagte in SONOFF NSPanel mit Lovelace UI:

            @armilar Das ging ja rasend schnell - Danke!
            Das steht drin:
            {
            "Info2": {
            "WebServerMode": "Admin",
            "Hostname": "uSi-NSPanel1",
            "IPAddress": "192.168.2.114"
            }
            }

            Tausche die mal kurz aus durch

            function get_current_tasmota_ip_address() {
                try {
                    const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                    const infoObj = JSON.parse(getState(infoObjId).val);
            
                    console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
            
                    return infoObj.Info2.IPAddress;
                } catch (err) {
                    console.warn('function get_current_tasmota_ip_address: ' + err.message);
                }
            }
            

            und starte das Script erneut

            Super, keine Fehler nur noch Warnungen. In '0_userdata.0.NSPanel.1.NSPanel_ipAddress' steht aber keine IP-Adresse sondern '{"ack":true}'! Es sind viel mehr einträge in '0_userdata.0.NSPanel.1' vorhanden aber Panel wartet immer noch.
            e5ffd693-0dfd-466e-ad53-b3cdc9589432-grafik.png

            Armilar 1 Reply Last reply Reply Quote 0
            • Armilar
              Armilar Most Active Forum Testing @uSi last edited by Armilar

              @usi sagte in SONOFF NSPanel mit Lovelace UI:

              @armilar sagte in SONOFF NSPanel mit Lovelace UI:

              @usi sagte in SONOFF NSPanel mit Lovelace UI:

              @armilar Das ging ja rasend schnell - Danke!
              Das steht drin:
              {
              "Info2": {
              "WebServerMode": "Admin",
              "Hostname": "uSi-NSPanel1",
              "IPAddress": "192.168.2.114"
              }
              }

              Tausche die mal kurz aus durch

              function get_current_tasmota_ip_address() {
                  try {
                      const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                      const infoObj = JSON.parse(getState(infoObjId).val);
              
                      console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
              
                      return infoObj.Info2.IPAddress;
                  } catch (err) {
                      console.warn('function get_current_tasmota_ip_address: ' + err.message);
                  }
              }
              

              und starte das Script erneut

              Super, keine Fehler nur noch Warnungen. In '0_userdata.0.NSPanel.1.NSPanel_ipAddress' steht aber keine IP-Adresse sondern '{"ack":true}'! Es sind viel mehr einträge in '0_userdata.0.NSPanel.1' vorhanden aber Panel wartet immer noch.
              e5ffd693-0dfd-466e-ad53-b3cdc9589432-grafik.png

              Zeige mal deine Einstellungen unter:

              export const config: Config = {
                  panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                  panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
              

              und am besten noch einen Screenshot vom mqtt.0. , in dem man den gesamten Pfad sehen kann

              U 1 Reply Last reply Reply Quote 0
              • U
                uSi @Armilar last edited by

                @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                @usi sagte in SONOFF NSPanel mit Lovelace UI:

                @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                @usi sagte in SONOFF NSPanel mit Lovelace UI:

                @armilar Das ging ja rasend schnell - Danke!
                Das steht drin:
                {
                "Info2": {
                "WebServerMode": "Admin",
                "Hostname": "uSi-NSPanel1",
                "IPAddress": "192.168.2.114"
                }
                }

                Tausche die mal kurz aus durch

                function get_current_tasmota_ip_address() {
                    try {
                        const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                        const infoObj = JSON.parse(getState(infoObjId).val);
                
                        console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
                
                        return infoObj.Info2.IPAddress;
                    } catch (err) {
                        console.warn('function get_current_tasmota_ip_address: ' + err.message);
                    }
                }
                

                und starte das Script erneut

                Super, keine Fehler nur noch Warnungen. In '0_userdata.0.NSPanel.1.NSPanel_ipAddress' steht aber keine IP-Adresse sondern '{"ack":true}'! Es sind viel mehr einträge in '0_userdata.0.NSPanel.1' vorhanden aber Panel wartet immer noch.
                e5ffd693-0dfd-466e-ad53-b3cdc9589432-grafik.png

                Zeige mal deine Einstellungen unter:

                export const config: Config = {
                    panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                    panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
                

                und am besten noch einen Screenshot vom mqtt.0. , in dem man den gesamten Pfad sehen kann

                mach ich
                5e7461d1-99da-4bc6-95dc-5e7177da39ea-grafik.png

                3d7f1e54-0f80-4522-b6a2-f861edd6a486-grafik.png

                Armilar 1 Reply Last reply Reply Quote 0
                • Armilar
                  Armilar Most Active Forum Testing @uSi last edited by Armilar

                  @usi sagte in SONOFF NSPanel mit Lovelace UI:

                  @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                  @usi sagte in SONOFF NSPanel mit Lovelace UI:

                  @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                  @usi sagte in SONOFF NSPanel mit Lovelace UI:

                  @armilar Das ging ja rasend schnell - Danke!
                  Das steht drin:
                  {
                  "Info2": {
                  "WebServerMode": "Admin",
                  "Hostname": "uSi-NSPanel1",
                  "IPAddress": "192.168.2.114"
                  }
                  }

                  Tausche die mal kurz aus durch

                  function get_current_tasmota_ip_address() {
                      try {
                          const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                          const infoObj = JSON.parse(getState(infoObjId).val);
                  
                          console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
                  
                          return infoObj.Info2.IPAddress;
                      } catch (err) {
                          console.warn('function get_current_tasmota_ip_address: ' + err.message);
                      }
                  }
                  

                  und starte das Script erneut

                  Super, keine Fehler nur noch Warnungen. In '0_userdata.0.NSPanel.1.NSPanel_ipAddress' steht aber keine IP-Adresse sondern '{"ack":true}'! Es sind viel mehr einträge in '0_userdata.0.NSPanel.1' vorhanden aber Panel wartet immer noch.
                  e5ffd693-0dfd-466e-ad53-b3cdc9589432-grafik.png

                  Zeige mal deine Einstellungen unter:

                  export const config: Config = {
                      panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                      panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
                  

                  und am besten noch einen Screenshot vom mqtt.0. , in dem man den gesamten Pfad sehen kann

                  mach ich
                  5e7461d1-99da-4bc6-95dc-5e7177da39ea-grafik.png

                  3d7f1e54-0f80-4522-b6a2-f861edd6a486-grafik.png

                  Ändere bitte mal deine Pfade im TS-Script auf "Smarthome" statt "SmartHome". Dann sollte es gehen... Der kann sonst wirklich nicht den Inhalt sehen. Groß- und Kleinschreibung ist sehr wichtig...

                  Bei beiden Einträgen in der export const config: Config = {

                  U 1 Reply Last reply Reply Quote 0
                  • U
                    uSi @Armilar last edited by

                    @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                    @usi sagte in SONOFF NSPanel mit Lovelace UI:

                    @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                    @usi sagte in SONOFF NSPanel mit Lovelace UI:

                    @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                    @usi sagte in SONOFF NSPanel mit Lovelace UI:

                    @armilar Das ging ja rasend schnell - Danke!
                    Das steht drin:
                    {
                    "Info2": {
                    "WebServerMode": "Admin",
                    "Hostname": "uSi-NSPanel1",
                    "IPAddress": "192.168.2.114"
                    }
                    }

                    Tausche die mal kurz aus durch

                    function get_current_tasmota_ip_address() {
                        try {
                            const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                            const infoObj = JSON.parse(getState(infoObjId).val);
                    
                            console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
                    
                            return infoObj.Info2.IPAddress;
                        } catch (err) {
                            console.warn('function get_current_tasmota_ip_address: ' + err.message);
                        }
                    }
                    

                    und starte das Script erneut

                    Super, keine Fehler nur noch Warnungen. In '0_userdata.0.NSPanel.1.NSPanel_ipAddress' steht aber keine IP-Adresse sondern '{"ack":true}'! Es sind viel mehr einträge in '0_userdata.0.NSPanel.1' vorhanden aber Panel wartet immer noch.
                    e5ffd693-0dfd-466e-ad53-b3cdc9589432-grafik.png

                    Zeige mal deine Einstellungen unter:

                    export const config: Config = {
                        panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                        panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
                    

                    und am besten noch einen Screenshot vom mqtt.0. , in dem man den gesamten Pfad sehen kann

                    mach ich
                    5e7461d1-99da-4bc6-95dc-5e7177da39ea-grafik.png

                    3d7f1e54-0f80-4522-b6a2-f861edd6a486-grafik.png

                    Ändere bitte mal deine Pfade im TS-Script auf "Smarthome" statt "SmartHome". Dann sollte es gehen... Der kann sonst wirklich nicht den Inhalt sehen. Groß- und Kleinschreibung ist sehr wichtig...

                    Bei beiden Einträgen in der export const config: Config = {

                    Herzlichen Dank - Jetzt hat's geklappt!

                    Armilar 1 Reply Last reply Reply Quote 0
                    • E
                      Elluminatus @Armilar last edited by Elluminatus

                      @armilar Hi ich ergänze mal mit meinem Aufbau in gleicher Art und Weise:

                      Also bei mir nicht unter userdata da installierter Adapter:

                      LMS13.jpg

                      der Alias:

                      LMS14.jpg

                      im TS-Script:

                      var SpotifyPremium: PageMedia = 
                      {
                          "type": "cardMedia",
                          "heading": "Musikwiedergabe Küche",
                          "useColor": true,
                          "subPage": false,
                          "parent": undefined,
                          "items": [<PageItem>{ 
                                      id: "alias.0.Media.LMS.KE_HWR", 
                                      adapterPlayerInstance: "squeezeboxrpc.0.Players.piCoreKUE.",
                                      speakerList: ['LENOVO-W11-X','Terrasse','Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero']
                                   }] 
                      };
                      

                      Hier noch kurz eine Frage. Die kleinen state Fotos sind aus dem Adapter, nicht die state aus dem alias?

                      Den die state im Adapter sind nummerisch 0,1,2 und der state im alias ist wie gesagt ein und ausschalten und ist ja true /false

                      Weiter geht es also mit den state im squeezeboxrpc.0.Players.piCoreKUE.state

                      ich drücke im NSPanel Pause und der Wert ist

                      LMS15.jpg

                      Ich drücke nochmal auf Pause und der Wert ist

                      LMS16.jpg

                      Nochmal auf Pause gedrückt

                      LMS17.jpg

                      Drücke ich auf den Power Button

                      LMS18.jpg

                      So wie es bei Dir läuft kann ich es mit der Handy App Ipeng reproduzieren. Da ist Pause dann 0, erneuter Druck geht auf Play Icon und 1 und drücke ich den Power Button geht es auf 2. Aber eben nicht beim NSPanel.

                      Ach und hier zur Vollständigkeit noch:

                      LMS19.jpg

                      LMS20.jpg

                      LMS21.jpg

                      Sorry für den ganzen Umstand. Gruß Elluminatus

                      Armilar 1 Reply Last reply Reply Quote 0
                      • Armilar
                        Armilar Most Active Forum Testing @uSi last edited by

                        @usi sagte in SONOFF NSPanel mit Lovelace UI:

                        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                        @usi sagte in SONOFF NSPanel mit Lovelace UI:

                        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                        @usi sagte in SONOFF NSPanel mit Lovelace UI:

                        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                        @usi sagte in SONOFF NSPanel mit Lovelace UI:

                        @armilar Das ging ja rasend schnell - Danke!
                        Das steht drin:
                        {
                        "Info2": {
                        "WebServerMode": "Admin",
                        "Hostname": "uSi-NSPanel1",
                        "IPAddress": "192.168.2.114"
                        }
                        }

                        Tausche die mal kurz aus durch

                        function get_current_tasmota_ip_address() {
                            try {
                                const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
                                const infoObj = JSON.parse(getState(infoObjId).val);
                        
                                console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`);
                        
                                return infoObj.Info2.IPAddress;
                            } catch (err) {
                                console.warn('function get_current_tasmota_ip_address: ' + err.message);
                            }
                        }
                        

                        und starte das Script erneut

                        Super, keine Fehler nur noch Warnungen. In '0_userdata.0.NSPanel.1.NSPanel_ipAddress' steht aber keine IP-Adresse sondern '{"ack":true}'! Es sind viel mehr einträge in '0_userdata.0.NSPanel.1' vorhanden aber Panel wartet immer noch.
                        e5ffd693-0dfd-466e-ad53-b3cdc9589432-grafik.png

                        Zeige mal deine Einstellungen unter:

                        export const config: Config = {
                            panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                            panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
                        

                        und am besten noch einen Screenshot vom mqtt.0. , in dem man den gesamten Pfad sehen kann

                        mach ich
                        5e7461d1-99da-4bc6-95dc-5e7177da39ea-grafik.png

                        3d7f1e54-0f80-4522-b6a2-f861edd6a486-grafik.png

                        Ändere bitte mal deine Pfade im TS-Script auf "Smarthome" statt "SmartHome". Dann sollte es gehen... Der kann sonst wirklich nicht den Inhalt sehen. Groß- und Kleinschreibung ist sehr wichtig...

                        Bei beiden Einträgen in der export const config: Config = {

                        Herzlichen Dank - Jetzt hat's geklappt!

                        Gerne - Die meisten Fehler sind eher banal - aber manchmal sieht man den Wald vor lauter Bäumen nicht 😉

                        Viel Spaß mit dem Panel

                        1 Reply Last reply Reply Quote 0
                        • Armilar
                          Armilar Most Active Forum Testing @Elluminatus last edited by

                          @elluminatus sagte in SONOFF NSPanel mit Lovelace UI:

                          @armilar Hi ich ergänze mal mit meinem Aufbau in gleicher Art und Weise:

                          Also bei mir nicht unter userdata da installierter Adapter:

                          LMS13.jpg

                          der Alias:

                          LMS14.jpg

                          im TS-Script:

                          var SpotifyPremium: PageMedia = 
                          {
                              "type": "cardMedia",
                              "heading": "Musikwiedergabe Küche",
                              "useColor": true,
                              "subPage": false,
                              "parent": undefined,
                              "items": [<PageItem>{ 
                                          id: "alias.0.Media.LMS.KE_HWR", 
                                          adapterPlayerInstance: "squeezeboxrpc.0.Players.piCoreKUE.",
                                          speakerList: ['LENOVO-W11-X','Terrasse','Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero']
                                       }] 
                          };
                          

                          Hier noch kurz eine Frage. Die kleinen state Fotos sind aus dem Adapter, nicht die state aus dem alias?

                          Den die state im Adapter sind nummerisch 0,1,2 und der state im alias ist wie gesagt ein und ausschalten und ist ja true /false

                          Weiter geht es also mit den state im squeezeboxrpc.0.Players.piCoreKUE.state

                          ich drücke im NSPanel Pause und der Wert ist

                          LMS15.jpg

                          Ich drücke nochmal auf Pause und der Wert ist

                          LMS16.jpg

                          Nochmal auf Pause gedrückt

                          LMS17.jpg

                          Drücke ich auf den Power Button

                          LMS18.jpg

                          So wie es bei Dir läuft kann ich es mit der Handy App Ipeng reproduzieren. Da ist Pause dann 0, erneuter Druck geht auf Play Icon und 1 und drücke ich den Power Button geht es auf 2. Aber eben nicht beim NSPanel.

                          Ach und hier zur Vollständigkeit noch:

                          LMS19.jpg

                          LMS20.jpg

                          LMS21.jpg

                          Sorry für den ganzen Umstand. Gruß Elluminatus

                          Versuche die wundersame Welt gerade zu verstehen. Aber so sehr ich mich auch anstrenge - es gelingt mir nicht. Analyse

                          Fangen wir bei Power an:
                          Sobald der gedrückt wird sendet das Panel über Tasmota ein on/off. Das TS-Skript wertet es aus und bedient den ALIAS-DP Stop mit true - Dein Alias Datenpunkt STOP hat eine Funktion die in den Datenpunkt eine 2 schreibt. Aber es steht eine 1 drin. Kann mir das einer erklären? 😕

                          E 1 Reply Last reply Reply Quote 0
                          • E
                            Elluminatus @Armilar last edited by Elluminatus

                            @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

                            Armilar 1 Reply Last reply Reply Quote 0
                            • Armilar
                              Armilar Most Active Forum Testing @Elluminatus last edited by Armilar

                              @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

                              E 1 Reply Last reply Reply Quote 0
                              • E
                                Elluminatus @Armilar last edited by

                                @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.

                                Armilar 2 Replies Last reply Reply Quote 0
                                • Armilar
                                  Armilar Most Active Forum Testing @Elluminatus last edited by

                                  @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.

                                  Wir werden eine Lösung finden 😉

                                  1 Reply Last reply Reply Quote 0
                                  • Armilar
                                    Armilar Most Active Forum Testing @Elluminatus last edited by 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... 😊

                                    E 1 Reply Last reply Reply Quote 0
                                    • E
                                      Elluminatus @Armilar last edited by 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 😊 , ich sehe da nämlich die nächste am Horizont...

                                      Armilar 2 Replies Last reply Reply Quote 0
                                      • Armilar
                                        Armilar Most Active Forum Testing @Elluminatus last edited by 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 😊 , 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...

                                        1 Reply Last reply Reply Quote 0
                                        • Armilar
                                          Armilar Most Active Forum Testing @Elluminatus last edited by

                                          @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 😊 , ich sehe da nämlich die nächste am Horizont...

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

                                          E 1 Reply Last reply Reply Quote 0
                                          • H
                                            holgerwolf last edited by

                                            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,
                                            
                                            Armilar 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            762
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            lovelace ui nspanel sonoff
                                            263
                                            7230
                                            4961428
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo