Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI

NEWS

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

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

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

SONOFF NSPanel mit Lovelace UI

Geplant Angeheftet Gesperrt Verschoben Hardware
lovelace uinspanelsonoff
7.8k Beiträge 272 Kommentatoren 6.7m Aufrufe 254 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ArmilarA Armilar

    @carlos

    Habe jetzt mal ein neues Blocky-Beispiel für die cardPower zum spielen und ausprobieren gebaut.

    "cardPower simple example"

    Das Blockly:
    bb839e1f-3429-4677-8ff1-ab8b921c3b18-cardPower_simple_Example.jpg

    https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/Blockly/cardPower_simple_example.xml

    Beim ersten Aufruf sollte die card so aussehen:
    49d009ad-aac1-4780-a179-ce596eceb073-image.png

    Die restlichen Variablen können analog der id: 1 verändert werden, oder durch Datenpunkte mit echter Logik ersetzt werden.

    Ich denke das wird dem allgemeinen Verständnis helfen...

    PS.:

    • direction wurde im Script noch nie abgefragt und ist deshalb im Beispiel auch nicht mehr enthalten
    • speed_id_1-6 kann auch negative Werte enthalten und kehrt somit die Laufrichtung des Punktes um (Empfehlung -5 bis +5)
    • Der mittlere größere Block hat kein Speed
    • Ich habe einen Timer eingebaut, der jede Minute das JSONzusammenbaut und in den Datenpunkt schreibt. Bei Bedarf die Zeit ändern oder durch einen Trigger ersetzten
    • Die Farben gehen von 0=weiß, 1=grün bis 10=rot
    H Offline
    H Offline
    holgerwolf
    schrieb am zuletzt editiert von
    #2047

    @armilar

    @armilar sagte in SONOFF NSPanel mit Lovelace UI:

    @carlos

    Habe jetzt mal ein neues Blocky-Beispiel für die cardPower zum spielen und ausprobieren gebaut.

    "cardPower simple example"

    Das Blockly:
    bb839e1f-3429-4677-8ff1-ab8b921c3b18-cardPower_simple_Example.jpg

    https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/Blockly/cardPower_simple_example.xml

    Beim ersten Aufruf sollte die card so aussehen:
    49d009ad-aac1-4780-a179-ce596eceb073-image.png

    Die restlichen Variablen können analog der id: 1 verändert werden, oder durch Datenpunkte mit echter Logik ersetzt werden.

    Ich denke das wird dem allgemeinen Verständnis helfen...

    PS.:

    • direction wurde im Script noch nie abgefragt und ist deshalb im Beispiel auch nicht mehr enthalten
    • speed_id_1-6 kann auch negative Werte enthalten und kehrt somit die Laufrichtung des Punktes um (Empfehlung -5 bis +5)
    • Der mittlere größere Block hat kein Speed
    • Ich habe einen Timer eingebaut, der jede Minute das JSONzusammenbaut und in den Datenpunkt schreibt. Bei Bedarf die Zeit ändern oder durch einen Trigger ersetzten
    • Die Farben gehen von 0=weiß, 1=grün bis 10=rot

    Muss in dem Script der Trigger nicht auch um die Variablen Erstellung drumrum. Ich habe immer alte Werte zum Zeitpunkt des Scriptspeicherns.

    ArmilarA 2 Antworten Letzte Antwort
    0
    • H holgerwolf

      @armilar

      @armilar sagte in SONOFF NSPanel mit Lovelace UI:

      @carlos

      Habe jetzt mal ein neues Blocky-Beispiel für die cardPower zum spielen und ausprobieren gebaut.

      "cardPower simple example"

      Das Blockly:
      bb839e1f-3429-4677-8ff1-ab8b921c3b18-cardPower_simple_Example.jpg

      https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/Blockly/cardPower_simple_example.xml

      Beim ersten Aufruf sollte die card so aussehen:
      49d009ad-aac1-4780-a179-ce596eceb073-image.png

      Die restlichen Variablen können analog der id: 1 verändert werden, oder durch Datenpunkte mit echter Logik ersetzt werden.

      Ich denke das wird dem allgemeinen Verständnis helfen...

      PS.:

      • direction wurde im Script noch nie abgefragt und ist deshalb im Beispiel auch nicht mehr enthalten
      • speed_id_1-6 kann auch negative Werte enthalten und kehrt somit die Laufrichtung des Punktes um (Empfehlung -5 bis +5)
      • Der mittlere größere Block hat kein Speed
      • Ich habe einen Timer eingebaut, der jede Minute das JSONzusammenbaut und in den Datenpunkt schreibt. Bei Bedarf die Zeit ändern oder durch einen Trigger ersetzten
      • Die Farben gehen von 0=weiß, 1=grün bis 10=rot

      Muss in dem Script der Trigger nicht auch um die Variablen Erstellung drumrum. Ich habe immer alte Werte zum Zeitpunkt des Scriptspeicherns.

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

      @holgerwolf

      Welcher Trigger?

      Das abgebildete Blockly arbeitet zyklisch (so wie eingestellt jede Minute)

      83d60365-b105-4d14-9a36-ae20d559c3cf-image.png

      Das heißt, was auch immer dort verarbeitet wird erzeigt jede Minute einen cardPower-String

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

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

      H 1 Antwort Letzte Antwort
      0
      • ArmilarA Armilar

        @holgerwolf

        Welcher Trigger?

        Das abgebildete Blockly arbeitet zyklisch (so wie eingestellt jede Minute)

        83d60365-b105-4d14-9a36-ae20d559c3cf-image.png

        Das heißt, was auch immer dort verarbeitet wird erzeigt jede Minute einen cardPower-String

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

        @armilar Die Werte für die Variablen"value_ID_XX" werden doch drüber gesetzt.
        Der Zeitplan stellt dann jede Minute den gleichen String zusammen.

        Habe den Zeitplan jetzt mal komplett um alles gelegt und schon passt es.

        1 Antwort Letzte Antwort
        1
        • H holgerwolf

          @armilar

          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

          @carlos

          Habe jetzt mal ein neues Blocky-Beispiel für die cardPower zum spielen und ausprobieren gebaut.

          "cardPower simple example"

          Das Blockly:
          bb839e1f-3429-4677-8ff1-ab8b921c3b18-cardPower_simple_Example.jpg

          https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/Blockly/cardPower_simple_example.xml

          Beim ersten Aufruf sollte die card so aussehen:
          49d009ad-aac1-4780-a179-ce596eceb073-image.png

          Die restlichen Variablen können analog der id: 1 verändert werden, oder durch Datenpunkte mit echter Logik ersetzt werden.

          Ich denke das wird dem allgemeinen Verständnis helfen...

          PS.:

          • direction wurde im Script noch nie abgefragt und ist deshalb im Beispiel auch nicht mehr enthalten
          • speed_id_1-6 kann auch negative Werte enthalten und kehrt somit die Laufrichtung des Punktes um (Empfehlung -5 bis +5)
          • Der mittlere größere Block hat kein Speed
          • Ich habe einen Timer eingebaut, der jede Minute das JSONzusammenbaut und in den Datenpunkt schreibt. Bei Bedarf die Zeit ändern oder durch einen Trigger ersetzten
          • Die Farben gehen von 0=weiß, 1=grün bis 10=rot

          Muss in dem Script der Trigger nicht auch um die Variablen Erstellung drumrum. Ich habe immer alte Werte zum Zeitpunkt des Scriptspeicherns.

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

          @holgerwolf

          921d2d01-1af2-41db-8f19-c1084943af46-image.png

          Für jeden Wert muss natürlich ein Datenpunkt zugewiesen werden. Die Scheduler sollte die Variablen umschließen, da sie sonst nicht erneut abgerufen werden --> ja

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

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

          1 Antwort Letzte Antwort
          0
          • wendy2702W wendy2702

            @tt-tom sagte in SONOFF NSPanel mit Lovelace UI:

            @armilar @wendy2702

            Dann passt -2500 als min und +2500 als max.

            Ich habe das mal so eingetragen. Habe jetz aber ein anderes Problem festgestellt.

            Der Wert wird solange aktualisiert bis ich das Panel einmal an tippe. Dann friert er ein und verändert sich nicht mehr.

            VIDEO-2023-02-03-09-29-55.mp4

            Kann das daran liegen das ich direkten Datenpunkt verwende und keinen Alias?

            Wenn nicht, was könnte sonst die Ursache sein bzw. welche logs/infos benötigt ihr noch?

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

            @wendy2702

            3f1086b1-0f48-497f-9d5a-89674fde0b94-Nextion_Editor_eWhFTF2uXG.gif

            Habe in der Emulation (das gleiche im Original-Panel) mal nachgestellt und einfach unterschiedliche Werte in den Datenpunkt eingegeben. Ich habe das Verhalten nicht...

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

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

            wendy2702W 1 Antwort Letzte Antwort
            0
            • ArmilarA Armilar

              @wendy2702

              3f1086b1-0f48-497f-9d5a-89674fde0b94-Nextion_Editor_eWhFTF2uXG.gif

              Habe in der Emulation (das gleiche im Original-Panel) mal nachgestellt und einfach unterschiedliche Werte in den Datenpunkt eingegeben. Ich habe das Verhalten nicht...

              wendy2702W Online
              wendy2702W Online
              wendy2702
              schrieb am zuletzt editiert von
              #2052

              @armilar das heißt auch nach antippen des displays (Dimmer aus) wird weiterhin aktualisiert?

              Gibt es irgendwo logs die ich mir ansehen kann vom/im Display?

              Sonst werden die Daten ja vom Mqtt Adapter übertragen, wenn da keine aktuellen Werte mehr übertragen werden läge am Server. Sonst eher am Display, oder?

              Bitte keine Fragen per PN, die gehören ins Forum!

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

              ArmilarA 1 Antwort Letzte Antwort
              0
              • wendy2702W wendy2702

                @armilar das heißt auch nach antippen des displays (Dimmer aus) wird weiterhin aktualisiert?

                Gibt es irgendwo logs die ich mir ansehen kann vom/im Display?

                Sonst werden die Daten ja vom Mqtt Adapter übertragen, wenn da keine aktuellen Werte mehr übertragen werden läge am Server. Sonst eher am Display, oder?

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

                @wendy2702

                519f5034-0ec6-4c46-8fdf-b661fe11a813-image.png

                Ja die werden kontinuierlich getriggert. Die Funktionalität ist seit der ersten Version des Scriptes drin. Ist auch völlig egal, ob ein Screensaver an ist oder nicht. Die werden befüllt...

                Kannst zwischen die Zeilen auch mit:

                console.log("Was auch immer");
                

                Logs einbauen.

                • Das Script triggert die Datenpunkte und Sendet ein Update der Werte über die function HandleScreensaverUpdate()
                  Damit werden alle Statuswerte der unteren Zeile aktualisiert.
                • Danach wird ein Payload zur Aktualisierung via MQTT an das Panel gesendet...

                Das gleiche passiert aber auch an anderer Stelle mit der Zeit und dem Datum.

                Was mich mal interessieren würde ist, passiert das permanent oder wirklich immer?

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

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

                wendy2702W 1 Antwort Letzte Antwort
                0
                • ArmilarA Armilar

                  @wendy2702

                  519f5034-0ec6-4c46-8fdf-b661fe11a813-image.png

                  Ja die werden kontinuierlich getriggert. Die Funktionalität ist seit der ersten Version des Scriptes drin. Ist auch völlig egal, ob ein Screensaver an ist oder nicht. Die werden befüllt...

                  Kannst zwischen die Zeilen auch mit:

                  console.log("Was auch immer");
                  

                  Logs einbauen.

                  • Das Script triggert die Datenpunkte und Sendet ein Update der Werte über die function HandleScreensaverUpdate()
                    Damit werden alle Statuswerte der unteren Zeile aktualisiert.
                  • Danach wird ein Payload zur Aktualisierung via MQTT an das Panel gesendet...

                  Das gleiche passiert aber auch an anderer Stelle mit der Zeit und dem Datum.

                  Was mich mal interessieren würde ist, passiert das permanent oder wirklich immer?

                  wendy2702W Online
                  wendy2702W Online
                  wendy2702
                  schrieb am zuletzt editiert von
                  #2054

                  @armilar ok.

                  Gerade noch kurz mal probiert. Wenn der Wert eingefroren ist, ich dann den screensaver verlasse. Warte bis er wieder zurück zum screensaver springt wird der Wert wieder aktualisiert.

                  Bitte keine Fragen per PN, die gehören ins Forum!

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

                  ArmilarA 2 Antworten Letzte Antwort
                  0
                  • wendy2702W wendy2702

                    @armilar ok.

                    Gerade noch kurz mal probiert. Wenn der Wert eingefroren ist, ich dann den screensaver verlasse. Warte bis er wieder zurück zum screensaver springt wird der Wert wieder aktualisiert.

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

                    @wendy2702

                    Versuche mal den Ereignisschwellenwert in der Admin-Instanz hochzusetzen.

                    1b932394-f656-4183-b85e-a3ab861d125a-image.png

                    Hat mir bei einigen Tests schon den Tag versaut, weil einige Adapter so viele Ereignisse in einer Sekunde produzieren wie nichts gutes.

                    Bestes Beispiel für solche Adapter sind Börsen, Corona, Binance, etc.

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

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

                    1 Antwort Letzte Antwort
                    0
                    • wendy2702W wendy2702

                      @armilar ok.

                      Gerade noch kurz mal probiert. Wenn der Wert eingefroren ist, ich dann den screensaver verlasse. Warte bis er wieder zurück zum screensaver springt wird der Wert wieder aktualisiert.

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

                      @wendy2702

                      ff843b09-7ad5-488f-a581-5549b9c65e71-image.png

                      Der Haken "Nur bei Änderungen publizieren" ist bei dir ebenfalls nicht gesetzt?

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

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

                      wendy2702W 1 Antwort Letzte Antwort
                      0
                      • ArmilarA Armilar

                        @wendy2702

                        ff843b09-7ad5-488f-a581-5549b9c65e71-image.png

                        Der Haken "Nur bei Änderungen publizieren" ist bei dir ebenfalls nicht gesetzt?

                        wendy2702W Online
                        wendy2702W Online
                        wendy2702
                        schrieb am zuletzt editiert von wendy2702
                        #2057

                        @armilar Den haken habe ich nicht drin.

                        Wert im Admin hoch gesetzt.

                        Gleich Mal schnell testen

                        EDIT: Hat leider nichts geändert.

                        Bitte keine Fragen per PN, die gehören ins Forum!

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

                        ArmilarA 1 Antwort Letzte Antwort
                        0
                        • wendy2702W wendy2702

                          @armilar Den haken habe ich nicht drin.

                          Wert im Admin hoch gesetzt.

                          Gleich Mal schnell testen

                          EDIT: Hat leider nichts geändert.

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

                          @wendy2702

                          Kannst du mal kurz die Einstellungen vom Screensaver-Wetter senden? Servicepage...

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

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

                          wendy2702W 1 Antwort Letzte Antwort
                          0
                          • ArmilarA Armilar

                            @wendy2702

                            Kannst du mal kurz die Einstellungen vom Screensaver-Wetter senden? Servicepage...

                            wendy2702W Online
                            wendy2702W Online
                            wendy2702
                            schrieb am zuletzt editiert von wendy2702
                            #2059

                            @armilar bin unterwegs.

                            Kommt spätestens morgen.

                            Edit:

                            @Armilar : meinst du das?

                             Parameter - Bitte anpassen - siehe auch Wiki
                                firstScreensaverEntity:   { ScreensaverEntity: 'modbus.3.holdingRegisters.20498_Wirkenergie_Total',
                                                            ScreensaverEntityFactor: 1,                                 //New
                                                            ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                            ScreensaverEntityIcon: 'solar-power', 
                                                            ScreensaverEntityText: 'Leistung', 
                                                            ScreensaverEntityUnitText: ' W', 
                                                            ScreensaverEntityIconColor: {'val_min': -2500, 'val_max': 2500} 
                                                          },
                                secondScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.windgusts_value', 
                                                            ScreensaverEntityFactor: (1000/3600),                       //New
                                                            ScreensaverEntityDecimalPlaces: 1,                          //New 
                                                            ScreensaverEntityIcon: 'weather-windy', 
                                                            ScreensaverEntityText: "Wind", 
                                                            ScreensaverEntityUnitText: 'km/h', 
                                                            ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 35} 
                                                          },
                                thirdScreensaverEntity:   { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.uv_index_value',
                                                            ScreensaverEntityFactor: 1,                                 //New
                                                            ScreensaverEntityDecimalPlaces: 0,                          //New  
                                                            ScreensaverEntityIcon: 'solar-power', 
                                                            ScreensaverEntityText: 'UV', 
                                                            ScreensaverEntityUnitText: '', 
                                                            ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 9} 
                                                          },
                                fourthScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.humidity_value', 
                                                            ScreensaverEntityFactor: 1,                                 //New
                                                            ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                            ScreensaverEntityIcon: 'water-percent', 
                                                            ScreensaverEntityText: 'Luft', 
                                                            ScreensaverEntityUnitText: '%', 
                                                            ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                                          },
                            
                            

                            Bitte keine Fragen per PN, die gehören ins Forum!

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

                            T 2 Antworten Letzte Antwort
                            1
                            • wendy2702W wendy2702

                              @armilar bin unterwegs.

                              Kommt spätestens morgen.

                              Edit:

                              @Armilar : meinst du das?

                               Parameter - Bitte anpassen - siehe auch Wiki
                                  firstScreensaverEntity:   { ScreensaverEntity: 'modbus.3.holdingRegisters.20498_Wirkenergie_Total',
                                                              ScreensaverEntityFactor: 1,                                 //New
                                                              ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                              ScreensaverEntityIcon: 'solar-power', 
                                                              ScreensaverEntityText: 'Leistung', 
                                                              ScreensaverEntityUnitText: ' W', 
                                                              ScreensaverEntityIconColor: {'val_min': -2500, 'val_max': 2500} 
                                                            },
                                  secondScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.windgusts_value', 
                                                              ScreensaverEntityFactor: (1000/3600),                       //New
                                                              ScreensaverEntityDecimalPlaces: 1,                          //New 
                                                              ScreensaverEntityIcon: 'weather-windy', 
                                                              ScreensaverEntityText: "Wind", 
                                                              ScreensaverEntityUnitText: 'km/h', 
                                                              ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 35} 
                                                            },
                                  thirdScreensaverEntity:   { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.uv_index_value',
                                                              ScreensaverEntityFactor: 1,                                 //New
                                                              ScreensaverEntityDecimalPlaces: 0,                          //New  
                                                              ScreensaverEntityIcon: 'solar-power', 
                                                              ScreensaverEntityText: 'UV', 
                                                              ScreensaverEntityUnitText: '', 
                                                              ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 9} 
                                                            },
                                  fourthScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.humidity_value', 
                                                              ScreensaverEntityFactor: 1,                                 //New
                                                              ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                              ScreensaverEntityIcon: 'water-percent', 
                                                              ScreensaverEntityText: 'Luft', 
                                                              ScreensaverEntityUnitText: '%', 
                                                              ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                                            },
                              
                              
                              T Offline
                              T Offline
                              TT-Tom
                              schrieb am zuletzt editiert von
                              #2060

                              @wendy2702

                              ich kann es bei mir jetzt nachstellen, wir arbeiten an der Problemlösung.

                              Gruß Tom
                              https://github.com/tt-tom17
                              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                              NSPanel Script Wiki
                              https://github.com/joBr99/nspanel-lovelace-ui/wiki

                              NSPanel Adapter Wiki
                              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                              1 Antwort Letzte Antwort
                              0
                              • wendy2702W wendy2702

                                @armilar bin unterwegs.

                                Kommt spätestens morgen.

                                Edit:

                                @Armilar : meinst du das?

                                 Parameter - Bitte anpassen - siehe auch Wiki
                                    firstScreensaverEntity:   { ScreensaverEntity: 'modbus.3.holdingRegisters.20498_Wirkenergie_Total',
                                                                ScreensaverEntityFactor: 1,                                 //New
                                                                ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                                ScreensaverEntityIcon: 'solar-power', 
                                                                ScreensaverEntityText: 'Leistung', 
                                                                ScreensaverEntityUnitText: ' W', 
                                                                ScreensaverEntityIconColor: {'val_min': -2500, 'val_max': 2500} 
                                                              },
                                    secondScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.windgusts_value', 
                                                                ScreensaverEntityFactor: (1000/3600),                       //New
                                                                ScreensaverEntityDecimalPlaces: 1,                          //New 
                                                                ScreensaverEntityIcon: 'weather-windy', 
                                                                ScreensaverEntityText: "Wind", 
                                                                ScreensaverEntityUnitText: 'km/h', 
                                                                ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 35} 
                                                              },
                                    thirdScreensaverEntity:   { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.uv_index_value',
                                                                ScreensaverEntityFactor: 1,                                 //New
                                                                ScreensaverEntityDecimalPlaces: 0,                          //New  
                                                                ScreensaverEntityIcon: 'solar-power', 
                                                                ScreensaverEntityText: 'UV', 
                                                                ScreensaverEntityUnitText: '', 
                                                                ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 9} 
                                                              },
                                    fourthScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.humidity_value', 
                                                                ScreensaverEntityFactor: 1,                                 //New
                                                                ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                                ScreensaverEntityIcon: 'water-percent', 
                                                                ScreensaverEntityText: 'Luft', 
                                                                ScreensaverEntityUnitText: '%', 
                                                                ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                                              },
                                
                                
                                T Offline
                                T Offline
                                TT-Tom
                                schrieb am zuletzt editiert von TT-Tom
                                #2061

                                @wendy2702

                                so wir haben eine Lösung gefunden, bitte als Hotfix die Funktion HandleButtonEvent komplett austauschen mit folgendem Code im Spoiler

                                function HandleButtonEvent(words: any): void {
                                   try {
                                       let tempid = words[2].split('?');
                                       let id = tempid[0];
                                       let buttonAction = words[3];
                                
                                       if (Debug) {
                                           console.log(words[0] + ' - ' + words[1] + ' - ' + words[2] + ' - ' + words[3] + ' - ' + words[4] + ' - PageId: ' + pageId);
                                       }
                                
                                       if ((words[2]).substring(0, 8) == 'navigate') {
                                           GeneratePage(eval((words[2]).substring(9, (words[2]).length)));
                                           return;
                                       }
                                
                                       if (words[2] == 'bNext' || words[2] == 'bPrev' || words[2] == 'bUp' || words[2] == 'bHome' || words[2] == 'bSubNext' || words[2] == 'bSubPrev' ) {
                                           buttonAction = words[2];
                                       }
                                
                                       if (Debug) {
                                           console.log(buttonAction);
                                       }
                                
                                       let pageNum:number = 0;
                                
                                       if (buttonAction.startsWith('swipe')) {
                                           buttonAction = 'bExit';
                                       }
                                       switch (buttonAction) {
                                
                                           case 'bUp':
                                               if (pageId < 0) { // Prüfen, ob button1page oder button2page
                                                   pageId = 0;
                                                   UnsubscribeWatcher();
                                                   GeneratePage(config.pages[pageId]);
                                               } else {
                                                   pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                                                   pageId = pageNum;
                                                   UnsubscribeWatcher();
                                                   if (activePage != undefined && activePage.parent != undefined) {
                                                       //update pageID
                                                       for (let i = 0; i < config.pages.length; i++) {
                                                           if (config.pages[i] == activePage.parent) {
                                                               pageId = i;
                                                               break;
                                                           }
                                                       }
                                                       GeneratePage(activePage.parent);
                                                   }
                                                   else {
                                                       GeneratePage(config.pages[pageId]);
                                                   }
                                                   break;
                                               }
                                               break;
                                           case 'bNext':
                                               pageNum = (((pageId + 1) % config.pages.length) + config.pages.length) % config.pages.length;
                                               pageId = pageNum;
                                               UnsubscribeWatcher();
                                               GeneratePage(config.pages[pageId]);
                                               break;
                                           case 'bSubNext':
                                               UnsubscribeWatcher();
                                               GeneratePage(eval(activePage.next));
                                               break;
                                           case 'bPrev':
                                               pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                                               pageId = pageNum;
                                               UnsubscribeWatcher();
                                               if (activePage != undefined && activePage.parent != undefined) {
                                                   //update pageID
                                                   for (let i = 0; i < config.pages.length; i++) {
                                                       if (config.pages[i] == activePage.parent) {
                                                           pageId = i;
                                                           break;
                                                       }
                                                   }
                                                   GeneratePage(activePage.parent);
                                               }
                                               else {
                                                   GeneratePage(config.pages[pageId]);
                                               }
                                               break;
                                           case 'bSubPrev':          
                                               UnsubscribeWatcher();
                                               GeneratePage(eval(activePage.prev));
                                               break;
                                           case 'bExit':
                                               if (getState(NSPanel_Path + 'Config.Screensaver.screenSaverDoubleClick').val && words[2] == 'screensaver') {
                                                   if (words[4] >= 2) {
                                                       setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                                                       setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                                                       if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                                                           pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val;
                                                           activePage = config.pages[pageId];
                                                           GeneratePage(activePage);
                                                       } else {
                                                           GeneratePage(activePage);
                                                       }
                                                   } else {
                                                       setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                                                       setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                                                       screensaverEnabled = true;
                                                       break;
                                                   }
                                               } else {
                                                   if (Debug) {
                                                       console.log('bExit: ' + words[4] + ' - ' + pageId);
                                                   }
                                                   setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                                                   setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                                                   if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                                                       pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val
                                                       activePage = config.pages[pageId];
                                                       GeneratePage(activePage);
                                                   } else {
                                                       GeneratePage(activePage);
                                                   }    
                                               }
                                               break;
                                           case 'bHome':
                                               if (Debug) {
                                                   console.log('bExit: ' + words[4] + ' - ' + pageId);
                                               }
                                               UnsubscribeWatcher();
                                               if (activePage.home != undefined) {
                                                   GeneratePage(eval(activePage.home));
                                               } else {
                                                   GeneratePage(config.pages[0]);
                                               }
                                               break;
                                           case 'notifyAction':
                                               if (words[4] == 'yes') {
                                                   setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                                                   setState(popupNotifyAction, <iobJS.State>{ val: true, ack: true });
                                               } else if (words[4] == 'no') {
                                                   setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                                                   setState(popupNotifyAction, <iobJS.State>{ val: false, ack: true });
                                               }
                                
                                               setIfExists(config.panelSendTopic, 'exitPopup');
                                
                                               break;
                                           case 'OnOff':
                                               if (existsObject(id)) {
                                                   let action = false;
                                                   if (words[4] == '1')
                                                       action = true;
                                                   let o = getObject(id);
                                                   switch (o.common.role) {
                                                       case 'level.mode.fan':
                                                       case 'socket':
                                                       case 'light':
                                                           let pageItem = findPageItem(id);	
                                   						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
                                   							triggerButton(id + ".SET");
                                   						}	
                                   						else {	
                                   							setIfExists(id + '.SET', action);
                                   						}		
                                   						break;
                                                       case 'dimmer':
                                                           setIfExists(id + '.ON_SET', action) ? true : setIfExists(id + '.ON_ACTUAL', action);
                                                           break;
                                                       case 'ct':
                                                           setIfExists(id + '.ON', action);
                                                           break;
                                                       case 'rgb':
                                                       case 'rgbSingle':
                                                       case 'hue':
                                                           setIfExists(id + '.ON_ACTUAL', action);
                                                   }
                                               }
                                               break;
                                           case 'button':
                                               if (existsObject(id)) {
                                                   let action = false;
                                                   if (words[4] == '1')
                                                       action = true;
                                                   let o = getObject(id);
                                                   switch (o.common.role) {
                                                       case 'lock':
                                                       case 'button':
                                                           toggleState(id + '.SET') ? true : toggleState(id + '.ON_SET');
                                                           break; 
                                                       case 'buttonSensor':
                                                           if (existsObject(id + '.ACTUAL')) {
                                                               toggleState(id + '.ACTUAL');
                                                           }
                                                           break;
                                                       case 'socket':
                                                       case 'light':
                                                           // Änderung für Monobutton	
                                                           let pageItem = findPageItem(id);	
                                   						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
                                   							triggerButton(id + ".SET");
                                   						}	
                                   						else {	
                                   							toggleState(id + ".SET") ? true : toggleState(id + ".ON_SET");
                                   						}	
                                   						break;	
                                                       case 'dimmer':
                                                           toggleState(id + '.ON_SET') ? true : toggleState(id + '.ON_ACTUAL');
                                                           break;
                                                       case 'ct':
                                                           toggleState(id + '.ON');
                                                           break;
                                                       case 'rgb':
                                                       case 'rgbSingle':
                                                       case 'hue': // Armilar
                                                           toggleState(id + '.ON_ACTUAL');
                                                       case 'media':
                                                           if (tempid[1] == 'repeat') {
                                                               let pageItemRepeat = findPageItem(id);
                                                               let adapterInstanceRepeat = pageItemRepeat.adapterPlayerInstance;
                                                               let adapterRepeat = adapterInstanceRepeat.split('.');
                                                               let deviceAdapterRP = adapterRepeat[0];
                                
                                                               switch (deviceAdapterRP) {
                                                                   case 'spotify-premium':
                                                                       let stateSpotifyRepeat = getState(id + '.REPEAT').val
                                                                       if (stateSpotifyRepeat == 'off') {
                                                                           setIfExists(id + '.REPEAT', 'context');
                                                                       } else if (stateSpotifyRepeat == 'context') {
                                                                           setIfExists(id + '.REPEAT', 'track');
                                                                       } else if (stateSpotifyRepeat == 'track') {
                                                                           setIfExists(id + '.REPEAT', 'off');
                                                                       }
                                                                       break;
                                                                   case 'alexa2':
                                                                       try {
                                                                           if (getState(id + '.REPEAT').val == 'false') {
                                                                               setIfExists(id + '.REPEAT', true);
                                                                           } else {
                                                                               setIfExists(id + '.REPEAT', false);
                                                                           }
                                                                       } catch (err) {
                                                                           console.log('Repeat kann nicht verändert werden');
                                                                       }
                                                                       break;
                                                                   case 'volumio':
                                                                       request({ url:`${getState(adapterInstanceRepeat+'info.host').val}/api/commands/?cmd=repeat`, headers: {'User-Agent': 'ioBroker'} }, 
                                                                           async (error, response, result)=>{}); /* nothing todo @ error */
                                                                       break;
                                                               }
                                                           }
                                                   }
                                               }
                                               break;
                                           case 'up':
                                               setIfExists(id + '.OPEN', true);
                                               break;
                                           case 'stop':
                                               setIfExists(id + '.STOP', true);
                                               break;
                                           case 'down':
                                               setIfExists(id + '.CLOSE', true);
                                               break;
                                           case 'positionSlider':
                                               (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                               timeoutSlider = setTimeout(async function () {
                                                   setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                               }, 250);
                                               break;
                                           case 'tiltOpen':
                                               setIfExists(id + '.TILT_OPEN', true);
                                               break;
                                           case 'tiltStop':
                                               setIfExists(id + '.TILT_STOP', true);
                                               break;
                                           case 'tiltClose':
                                               setIfExists(id + '.TILT_CLOSE', true);
                                               break;
                                           case 'tiltSlider':
                                               (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                               timeoutSlider = setTimeout(async function () {
                                                   setIfExists(id + '.TILT_SET', parseInt(words[4])) ? true : setIfExists(id + '.TILT_ACTUAL', parseInt(words[4]));
                                               }, 250);
                                               break;
                                           case 'brightnessSlider':
                                               (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                               timeoutSlider = setTimeout(async function () {
                                                   if (existsObject(id)) {
                                                       let o = getObject(id);
                                                       let pageItem = findPageItem(id);
                                
                                                       switch (o.common.role) {
                                                           case 'dimmer':
                                                               if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                                                   let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                                                   setIfExists(id + '.SET', sliderPos) ? true : setIfExists(id + '.ACTUAL', sliderPos);
                                                               } else {
                                                                   setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                                               }
                                                               break;
                                                           case 'rgb':
                                                           case 'ct':
                                                           case 'rgbSingle':
                                                           case 'hue':
                                                               if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                                                   let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                                                   setIfExists(id + '.DIMMER', sliderPos);
                                                               } else {
                                                                   setIfExists(id + '.DIMMER', parseInt(words[4]));
                                                               }
                                                               break;
                                                       }
                                                   }
                                               }, 250);
                                               break;
                                           case 'colorTempSlider': // Armilar - Slider tickt verkehrt - Hell = 0 / Dunkel = 100 -> Korrektur
                                               (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                               timeoutSlider = setTimeout(async function () {
                                                   let pageItem = findPageItem(id);
                                                   if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) {
                                                       let colorTempK = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.minValueColorTemp, pageItem.maxValueColorTemp));
                                                       setIfExists(id + '.TEMPERATURE', (colorTempK));
                                                   } else {
                                                       setIfExists(id + '.TEMPERATURE', 100 - words[4]);
                                                   }
                                               }, 250);
                                               break;
                                           case 'colorWheel':
                                               let colorCoordinates = words[4].split('|');
                                               let rgb = pos_to_color(colorCoordinates[0], colorCoordinates[1]);
                                               if (Debug) {
                                                   console.log(rgb);
                                               }
                                               if (Debug) {
                                                   console.log(getHue(rgb.red, rgb.green, rgb.blue));
                                               }
                                               let o = getObject(id);
                                               switch (o.common.role) {
                                                   case 'hue':
                                                       setIfExists(id + '.HUE', getHue(rgb.red, rgb.green, rgb.blue));
                                                       break;
                                                   case 'rgb':
                                                       setIfExists(id + '.RED', rgb.red);
                                                       setIfExists(id + '.GREEN', rgb.green);
                                                       setIfExists(id + '.BLUE', rgb.blue);
                                                       break;
                                                   case 'rgbSingle':
                                                       let pageItem = findPageItem(id);
                                                       if (pageItem.colormode == "xy") {
                                                           //Für z.B. Deconz XY
                                                           setIfExists(id + ".RGB", rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                                                           if (Debug) {
                                                               console.log(rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                                                           }
                                                       }
                                                       else {
                                                           //Für RGB
                                                           setIfExists(id + ".RGB", ConvertRGBtoHex(rgb.red, rgb.green, rgb.blue));
                                                       }
                                                       break;
                                               }
                                               break;
                                           case 'tempUpd':
                                               setIfExists(id + '.SET', parseInt(words[4]) / 10);
                                               break;
                                           case 'media-back':
                                               setIfExists(id + '.PREV', true);
                                               break;
                                           case 'media-pause':
                                               let pageItemTemp = findPageItem(id);
                                               let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
                                               if (adaInstanceSplit[0] == 'squeezeboxrpc') {
                                                   let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val;
                                                   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);
                                                   }
                                               }
                                               break;
                                           case 'media-next':
                                               setIfExists(id + '.NEXT', true);
                                               break;
                                           case 'media-shuffle':
                                               if ((findPageItem(id).adapterPlayerInstance).startsWith("volumio")) { findPageItem(id).playList = []; break; } //Volumio: empty playlist $uha-20230103
                                               if (getState(id + '.SHUFFLE').val == 'off') {
                                                   setIfExists(id + '.SHUFFLE', 'on');
                                               } else {
                                                   setIfExists(id + '.SHUFFLE', 'off');
                                               }
                                               break;
                                           case 'volumeSlider':
                                               setIfExists(id + '.VOLUME', parseInt(words[4]))
                                               break;
                                           case 'mode-speakerlist':
                                               let pageItem = findPageItem(id);
                                               let adapterInstance = pageItem.adapterPlayerInstance;
                                               let adapter = adapterInstance.split('.');
                                               let deviceAdapter = adapter[0];
                                
                                               switch (deviceAdapter) {
                                                   case 'spotify-premium':
                                                       let strDevicePI = pageItem.speakerList[words[4]];
                                                       let strDeviceID = spotifyGetDeviceID(strDevicePI);
                                                       setState(adapterInstance + 'devices.' + strDeviceID + ".useForPlayback", true);
                                                       break;
                                                   case 'alexa2':
                                                       let i_list = Array.prototype.slice.apply($('[state.id="' + adapterInstance + 'Echo-Devices.*.Info.name"]'));
                                                       for (let i_index in i_list) {
                                                           let i = i_list[i_index];
                                                           if ((getState(i).val) === pageItem.speakerList[words[4]]) {
                                                               console.log(getState(i).val + ' - ' + pageItem.speakerList[words[4]]);
                                                               let deviceId = i;
                                                               deviceId = deviceId.split('.');
                                                               setIfExists(adapterInstance + 'Echo-Devices.' + pageItem.mediaDevice + '.Commands.textCommand', 'Schiebe meine Musik auf ' + pageItem.speakerList[words[4]]);
                                                               pageItem.mediaDevice = deviceId[3];
                                                           } 
                                                       }
                                                       break;
                                                   case 'sonos':
                                                       break;
                                                   case 'chromecast':
                                                       break;
                                               }
                                               break;
                                           case 'mode-playlist':
                                               let pageItemPL = findPageItem(id);
                                               let adapterInstancePL = pageItemPL.adapterPlayerInstance;
                                               let adapterPL = adapterInstancePL.split('.');
                                               let deviceAdapterPL = adapterPL[0];
                                
                                               switch (deviceAdapterPL) {
                                                   case 'spotify-premium':
                                                       let strDevicePI = pageItemPL.playList[words[4]];
                                                       console.log(strDevicePI);
                                                       let playlistListString = (getState(adapterInstancePL + 'playlists.playlistListString').val).split(';');
                                                       let playlistListIds = (getState(adapterInstancePL + 'playlists.playlistListIds').val).split(';');
                                                       let playlistIndex = playlistListString.indexOf(strDevicePI);
                                                       setState(adapterInstancePL + 'playlists.playlistList', playlistListIds[playlistIndex]);
                                                       setTimeout(async function () {
                                                           globalTracklist = (function () { try {return JSON.parse(getState(adapterInstancePL + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                                                       }, 2000);
                                                       break;
                                                   case 'alexa2':
                                                       let tempListItem = pageItemPL.playList[words[4]].split('.');
                                                       setState(adapterInstancePL + 'Echo-Devices.' + pageItemPL.mediaDevice + '.Music-Provider.' + tempListItem[0], tempListItem[1]);
                                                       break;
                                                   case 'volumio':
                                                       let strDevicePL = pageItemPL.playList[words[4]];
                                                       request({ url:`${getState(adapterInstancePL+'info.host').val}/api/commands/?cmd=playplaylist&name=${strDevicePL}`, headers: {'User-Agent': 'ioBroker'} }, 
                                                                 async (error, response, result)=>{}); /* nothing todo @ error */
                                                       break;
                                               }
                                               break;
                                           case 'mode-tracklist':
                                               let pageItemTL = findPageItem(id);
                                               let adapterInstanceTL = pageItemTL.adapterPlayerInstance;
                                               let adapterTL = adapterInstanceTL.split('.')
                                               let deviceAdapterTL = adapterTL[0];
                                
                                               switch (deviceAdapterTL) {
                                                   case 'spotify-premium':
                                                       let trackArray = (function () { try {return JSON.parse(getState(pageItemTL.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                                                       setState(adapterInstanceTL + 'player.trackId', getAttr(trackArray, words[4] + '.id'));
                                                       break;
                                                   case 'alexa2':
                                                       if (Debug) console.log('Aktuell hat alexa2 keine Tracklist');
                                                       break;
                                                   case 'volumio':
                                                       request({ url:`${getState(adapterInstanceTL+'info.host').val}/api/commands/?cmd=play&N=${words[4]}`, headers: {'User-Agent': 'ioBroker'} }, 
                                                           async (error, response, result)=>{}); /* nothing todo @ error */
                                                       break;
                                               }
                                               break;
                                           case 'mode-repeat':
                                               let pageItemRP = findPageItem(id);
                                               let adapterInstanceRP = pageItemRP.adapterPlayerInstance;
                                               let adapterRP = adapterInstanceRP.split('.');
                                               let deviceAdapterRP = adapterRP[0];
                                
                                               switch (deviceAdapterRP) {
                                                   case 'spotify-premium':
                                                       setIfExists(id + '.REPEAT', pageItemRP.repeatList[words[4]]);
                                                       break;
                                                   case 'alexa2':
                                                       break;
                                               }
                                               break;
                                           case 'mode-equalizer':
                                               let pageItemEQ = findPageItem(id);
                                               if (Debug) console.log(id);
                                               let lastIndex = (id.split('.')).pop();
                                               setState(NSPanel_Path + 'Media.Player.' + lastIndex + '.EQ.activeMode', pageItemEQ.equalizerList[words[4]]);
                                               setTimeout(async function () {
                                                   GenerateDetailPage('popupInSel','equalizer', pageItemEQ);
                                               }, 2000);
                                               break;
                                           case 'mode-insel':
                                               setIfExists(id + '.VALUE', parseInt(words[4]));
                                               break;
                                           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);
                                                       setIfExists(id + '.STATE', 1);
                                                   } else {
                                                       setState(pageItemTem.adapterPlayerInstance + 'Power', 0);
                                                       setIfExists(id + '.STOP', true);
                                                       setIfExists(id + '.STATE', 0);
                                                   }
                                               } else {
                                                   setIfExists(id + '.STOP', true);
                                               }
                                               break;
                                           case 'timer-start':
                                               if (words[4] != undefined) {
                                                   let timer_panel = words[4].split(':');
                                                   setIfExists(id + '.ACTUAL', (parseInt(timer_panel[1]) * 60) + parseInt(timer_panel[2]));
                                               }
                                               setIfExists(id + '.STATE', 'active');
                                               break;
                                           case 'timer-pause':
                                               setIfExists(id + '.STATE', 'paused');
                                               break;
                                           case 'timer-cancle':
                                               setIfExists(id + '.STATE', 'idle');
                                               setIfExists(id + '.ACTUAL', 0);
                                               break;
                                           case 'timer-finish':
                                               setIfExists(id + '.STATE', 'idle');
                                               setIfExists(id + '.ACTUAL', 0);
                                               break;
                                           case 'hvac_action':
                                               if (words[4] == 'BOOT' || words[4] == 'PART' || words[4] == 'AUTT' || words[4] == 'MANT' || words[4] == 'VACT') {
                                
                                                   switch (words[4]) {
                                                       case 'BOOT':
                                                           setIfExists(words[2] + '.' + 'BOOST', !getState(words[2] + '.' + 'BOOST').val);
                                                           break;
                                                       case 'PART':
                                                           setIfExists(words[2] + '.' + 'PARTY', !getState(words[2] + '.' + 'PARTY').val);
                                                           break;
                                                       case 'AUTT':
                                                           setIfExists(words[2] + '.' + 'AUTOMATIC', !getState(words[2] + '.' + 'AUTOMATIC').val);
                                                           break;
                                                       case 'MANT':
                                                           setIfExists(words[2] + '.' + 'MANUAL', !getState(words[2] + '.' + 'MANUAL').val);
                                                           break;
                                                       case 'VACT':
                                                           setIfExists(words[2] + '.' + 'VACATION', !getState(words[2] + '.' + 'VACATION').val);
                                                           break;
                                                   }
                                                   let modes = ['BOOT', 'PART', 'AUTT', 'MANT', 'VACT'];
                                                   let modesDP = ['BOOST', 'PARTY', 'AUTOMATIC', 'MANUAL', 'VACATION'];
                                                   for (let mode=0; mode < 5; mode++) {
                                                       if (words[4] != modes[mode]) {
                                                           setIfExists(words[2] + '.' + modesDP[mode], false);
                                                       }
                                                   }
                                                   GeneratePage(config.pages[pageId]);
                                               } else {
                                                   let HVACMode = 0;
                                                   switch (words[4]) {
                                                       case 'POWER':
                                                           HVACMode = 0;
                                                           setIfExists(words[2] + '.' + words[4], !getState(words[2] + '.' + words[4]).val);
                                                           if (getState(words[2] + '.' + words[4]).val) {
                                                               HVACMode = 1;
                                                           }
                                                           break;
                                                       case 'AUTO':
                                                           HVACMode = 1;
                                                           break;
                                                       case 'COOL':
                                                           HVACMode = 2;
                                                           break;
                                                       case 'HEAT':
                                                           HVACMode = 3;
                                                           break;
                                                       case 'ECO':
                                                           HVACMode = 4;
                                                           break;
                                                       case 'FAN':
                                                           HVACMode = 5;
                                                           break;
                                                       case 'DRY':
                                                           HVACMode = 6;
                                                           break;
                                                       case 'SWING':
                                                           HVACMode = getState(words[2] + '.MODE').val;
                                                           if (getState(words[2] + '.SWING').val == 0) {
                                                               setIfExists(words[2] + '.SWING', 1);
                                                           } else {
                                                               setIfExists(words[2] + '.' + 'SWING', 0);
                                                           }
                                                           break;
                                                   }
                                                   setIfExists(words[2] + '.' + 'MODE', HVACMode);
                                                   GeneratePage(config.pages[pageId]);
                                               }
                                               break;
                                           case 'mode-modus1':
                                               let pageItemT1 = findPageItem(id);
                                               setIfExists(id + '.' + pageItemT1.setThermoAlias[0], pageItemT1.popupThermoMode1[parseInt(words[4])]);
                                               break;
                                           case 'mode-modus2':
                                               let pageItemT2 = findPageItem(id);
                                               setIfExists(id + '.' + pageItemT2.setThermoAlias[1], pageItemT2.popupThermoMode2[parseInt(words[4])]);
                                               break;
                                           case 'mode-modus3':
                                               let pageItemT3 = findPageItem(id);
                                               setIfExists(id + '.' + pageItemT3.setThermoAlias[2], pageItemT3.popupThermoMode3[parseInt(words[4])]);
                                               break;
                                           case 'number-set':
                                               let nobj = getObject(id);
                                               switch (nobj.common.role) {
                                                   case 'level.mode.fan':
                                                       (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                       timeoutSlider = setTimeout(async function () {
                                                           setIfExists(id + '.SPEED', parseInt(words[4]));
                                                       }, 250);
                                                       break;
                                                   default:    
                                                       (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                       timeoutSlider = setTimeout(async function () {
                                                           setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                                       }, 250);
                                                       break;
                                               }
                                               break;
                                           case 'mode-preset_modes':
                                               setIfExists(id + '.MODE', parseInt(words[4]));
                                               break; 
                                           case 'A1': // Alarm-Page Alarm 1 aktivieren
                                               if (words[4] != '') {
                                                   setIfExists(id + '.TYPE', 'A1');
                                                   setIfExists(id + '.PIN', words[4]);
                                                   setIfExists(id + '.ACTUAL', 'arming');
                                                   setIfExists(id + '.PANEL', NSPanel_Path);
                                               }
                                               setTimeout(function(){
                                                   GeneratePage(activePage);
                                               },250);
                                               break;
                                           case 'A2': // Alarm-Page Alarm 2 aktivieren
                                               if (words[4] != '') {
                                                   setIfExists(id + '.TYPE', 'A2');
                                                   setIfExists(id + '.PIN', words[4]);
                                                   setIfExists(id + '.ACTUAL', 'arming');
                                                   setIfExists(id + '.PANEL', NSPanel_Path);
                                               }
                                               setTimeout(function(){
                                                   GeneratePage(activePage);
                                               },250);
                                               break;
                                           case 'A3': // Alarm-Page Alarm 3 aktivieren
                                               if (words[4] != '') {
                                                   setIfExists(id + '.TYPE', 'A3');
                                                   setIfExists(id + '.PIN', words[4]);
                                                   setIfExists(id + '.ACTUAL', 'arming');
                                                   setIfExists(id + '.PANEL', NSPanel_Path);
                                               }
                                               setTimeout(function(){
                                                   GeneratePage(activePage);
                                               },250);
                                               break;
                                           case 'A4': // Alarm-Page Alarm 4 aktivieren
                                               if (words[4] != '') {
                                                   setIfExists(id + '.TYPE', 'A4');
                                                   setIfExists(id + '.PIN', words[4]);
                                                   setIfExists(id + '.ACTUAL', 'arming');
                                                   setIfExists(id + '.PANEL', NSPanel_Path);
                                               }
                                               setTimeout(function(){
                                                   GeneratePage(activePage);
                                               },250);
                                               break;
                                           case 'D1': // Alarm-Page Alarm Deaktivieren
                                               if (Debug) {
                                                   console.log('D1: ' + getState(id + '.PIN').val);
                                               }
                                               if (Debug) {
                                                   console.log(words[4]);
                                               }
                                               if (words[4] != '') {
                                                   if (getState(id + '.PIN').val == words[4]) {
                                                       setIfExists(id + '.PIN', '0000');
                                                       setIfExists(id + '.TYPE', 'D1');
                                                       setIfExists(id + '.ACTUAL', 'pending');
                                                       setIfExists(id + '.PIN_Failed', 0);
                                                   } else {
                                                       setIfExists(id + '.PIN_Failed', getState(id + '.PIN_Failed').val + 1);
                                                       setIfExists(id + '.ACTUAL', 'triggered');
                                                   }
                                                   setIfExists(id + '.PANEL', NSPanel_Path);
                                                   setTimeout(function(){
                                                       GeneratePage(activePage);
                                                   },500);
                                               }
                                               break;
                                           default:
                                               break;
                                       }
                                   } catch (err) {
                                       console.log('function HandleButtonEvent: ' + err.message);
                                   }
                                }
                                

                                EDIT: Hotfix ist jetzt auch auf Github verfügbar v3.9.0.2

                                Gruß Tom
                                https://github.com/tt-tom17
                                Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                                NSPanel Script Wiki
                                https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                NSPanel Adapter Wiki
                                https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                                ArmilarA 1 Antwort Letzte Antwort
                                0
                                • T TT-Tom

                                  @wendy2702

                                  so wir haben eine Lösung gefunden, bitte als Hotfix die Funktion HandleButtonEvent komplett austauschen mit folgendem Code im Spoiler

                                  function HandleButtonEvent(words: any): void {
                                     try {
                                         let tempid = words[2].split('?');
                                         let id = tempid[0];
                                         let buttonAction = words[3];
                                  
                                         if (Debug) {
                                             console.log(words[0] + ' - ' + words[1] + ' - ' + words[2] + ' - ' + words[3] + ' - ' + words[4] + ' - PageId: ' + pageId);
                                         }
                                  
                                         if ((words[2]).substring(0, 8) == 'navigate') {
                                             GeneratePage(eval((words[2]).substring(9, (words[2]).length)));
                                             return;
                                         }
                                  
                                         if (words[2] == 'bNext' || words[2] == 'bPrev' || words[2] == 'bUp' || words[2] == 'bHome' || words[2] == 'bSubNext' || words[2] == 'bSubPrev' ) {
                                             buttonAction = words[2];
                                         }
                                  
                                         if (Debug) {
                                             console.log(buttonAction);
                                         }
                                  
                                         let pageNum:number = 0;
                                  
                                         if (buttonAction.startsWith('swipe')) {
                                             buttonAction = 'bExit';
                                         }
                                         switch (buttonAction) {
                                  
                                             case 'bUp':
                                                 if (pageId < 0) { // Prüfen, ob button1page oder button2page
                                                     pageId = 0;
                                                     UnsubscribeWatcher();
                                                     GeneratePage(config.pages[pageId]);
                                                 } else {
                                                     pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                                                     pageId = pageNum;
                                                     UnsubscribeWatcher();
                                                     if (activePage != undefined && activePage.parent != undefined) {
                                                         //update pageID
                                                         for (let i = 0; i < config.pages.length; i++) {
                                                             if (config.pages[i] == activePage.parent) {
                                                                 pageId = i;
                                                                 break;
                                                             }
                                                         }
                                                         GeneratePage(activePage.parent);
                                                     }
                                                     else {
                                                         GeneratePage(config.pages[pageId]);
                                                     }
                                                     break;
                                                 }
                                                 break;
                                             case 'bNext':
                                                 pageNum = (((pageId + 1) % config.pages.length) + config.pages.length) % config.pages.length;
                                                 pageId = pageNum;
                                                 UnsubscribeWatcher();
                                                 GeneratePage(config.pages[pageId]);
                                                 break;
                                             case 'bSubNext':
                                                 UnsubscribeWatcher();
                                                 GeneratePage(eval(activePage.next));
                                                 break;
                                             case 'bPrev':
                                                 pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                                                 pageId = pageNum;
                                                 UnsubscribeWatcher();
                                                 if (activePage != undefined && activePage.parent != undefined) {
                                                     //update pageID
                                                     for (let i = 0; i < config.pages.length; i++) {
                                                         if (config.pages[i] == activePage.parent) {
                                                             pageId = i;
                                                             break;
                                                         }
                                                     }
                                                     GeneratePage(activePage.parent);
                                                 }
                                                 else {
                                                     GeneratePage(config.pages[pageId]);
                                                 }
                                                 break;
                                             case 'bSubPrev':          
                                                 UnsubscribeWatcher();
                                                 GeneratePage(eval(activePage.prev));
                                                 break;
                                             case 'bExit':
                                                 if (getState(NSPanel_Path + 'Config.Screensaver.screenSaverDoubleClick').val && words[2] == 'screensaver') {
                                                     if (words[4] >= 2) {
                                                         setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                                                         setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                                                         if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                                                             pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val;
                                                             activePage = config.pages[pageId];
                                                             GeneratePage(activePage);
                                                         } else {
                                                             GeneratePage(activePage);
                                                         }
                                                     } else {
                                                         setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                                                         setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                                                         screensaverEnabled = true;
                                                         break;
                                                     }
                                                 } else {
                                                     if (Debug) {
                                                         console.log('bExit: ' + words[4] + ' - ' + pageId);
                                                     }
                                                     setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                                                     setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                                                     if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                                                         pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val
                                                         activePage = config.pages[pageId];
                                                         GeneratePage(activePage);
                                                     } else {
                                                         GeneratePage(activePage);
                                                     }    
                                                 }
                                                 break;
                                             case 'bHome':
                                                 if (Debug) {
                                                     console.log('bExit: ' + words[4] + ' - ' + pageId);
                                                 }
                                                 UnsubscribeWatcher();
                                                 if (activePage.home != undefined) {
                                                     GeneratePage(eval(activePage.home));
                                                 } else {
                                                     GeneratePage(config.pages[0]);
                                                 }
                                                 break;
                                             case 'notifyAction':
                                                 if (words[4] == 'yes') {
                                                     setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                                                     setState(popupNotifyAction, <iobJS.State>{ val: true, ack: true });
                                                 } else if (words[4] == 'no') {
                                                     setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                                                     setState(popupNotifyAction, <iobJS.State>{ val: false, ack: true });
                                                 }
                                  
                                                 setIfExists(config.panelSendTopic, 'exitPopup');
                                  
                                                 break;
                                             case 'OnOff':
                                                 if (existsObject(id)) {
                                                     let action = false;
                                                     if (words[4] == '1')
                                                         action = true;
                                                     let o = getObject(id);
                                                     switch (o.common.role) {
                                                         case 'level.mode.fan':
                                                         case 'socket':
                                                         case 'light':
                                                             let pageItem = findPageItem(id);	
                                     						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
                                     							triggerButton(id + ".SET");
                                     						}	
                                     						else {	
                                     							setIfExists(id + '.SET', action);
                                     						}		
                                     						break;
                                                         case 'dimmer':
                                                             setIfExists(id + '.ON_SET', action) ? true : setIfExists(id + '.ON_ACTUAL', action);
                                                             break;
                                                         case 'ct':
                                                             setIfExists(id + '.ON', action);
                                                             break;
                                                         case 'rgb':
                                                         case 'rgbSingle':
                                                         case 'hue':
                                                             setIfExists(id + '.ON_ACTUAL', action);
                                                     }
                                                 }
                                                 break;
                                             case 'button':
                                                 if (existsObject(id)) {
                                                     let action = false;
                                                     if (words[4] == '1')
                                                         action = true;
                                                     let o = getObject(id);
                                                     switch (o.common.role) {
                                                         case 'lock':
                                                         case 'button':
                                                             toggleState(id + '.SET') ? true : toggleState(id + '.ON_SET');
                                                             break; 
                                                         case 'buttonSensor':
                                                             if (existsObject(id + '.ACTUAL')) {
                                                                 toggleState(id + '.ACTUAL');
                                                             }
                                                             break;
                                                         case 'socket':
                                                         case 'light':
                                                             // Änderung für Monobutton	
                                                             let pageItem = findPageItem(id);	
                                     						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
                                     							triggerButton(id + ".SET");
                                     						}	
                                     						else {	
                                     							toggleState(id + ".SET") ? true : toggleState(id + ".ON_SET");
                                     						}	
                                     						break;	
                                                         case 'dimmer':
                                                             toggleState(id + '.ON_SET') ? true : toggleState(id + '.ON_ACTUAL');
                                                             break;
                                                         case 'ct':
                                                             toggleState(id + '.ON');
                                                             break;
                                                         case 'rgb':
                                                         case 'rgbSingle':
                                                         case 'hue': // Armilar
                                                             toggleState(id + '.ON_ACTUAL');
                                                         case 'media':
                                                             if (tempid[1] == 'repeat') {
                                                                 let pageItemRepeat = findPageItem(id);
                                                                 let adapterInstanceRepeat = pageItemRepeat.adapterPlayerInstance;
                                                                 let adapterRepeat = adapterInstanceRepeat.split('.');
                                                                 let deviceAdapterRP = adapterRepeat[0];
                                  
                                                                 switch (deviceAdapterRP) {
                                                                     case 'spotify-premium':
                                                                         let stateSpotifyRepeat = getState(id + '.REPEAT').val
                                                                         if (stateSpotifyRepeat == 'off') {
                                                                             setIfExists(id + '.REPEAT', 'context');
                                                                         } else if (stateSpotifyRepeat == 'context') {
                                                                             setIfExists(id + '.REPEAT', 'track');
                                                                         } else if (stateSpotifyRepeat == 'track') {
                                                                             setIfExists(id + '.REPEAT', 'off');
                                                                         }
                                                                         break;
                                                                     case 'alexa2':
                                                                         try {
                                                                             if (getState(id + '.REPEAT').val == 'false') {
                                                                                 setIfExists(id + '.REPEAT', true);
                                                                             } else {
                                                                                 setIfExists(id + '.REPEAT', false);
                                                                             }
                                                                         } catch (err) {
                                                                             console.log('Repeat kann nicht verändert werden');
                                                                         }
                                                                         break;
                                                                     case 'volumio':
                                                                         request({ url:`${getState(adapterInstanceRepeat+'info.host').val}/api/commands/?cmd=repeat`, headers: {'User-Agent': 'ioBroker'} }, 
                                                                             async (error, response, result)=>{}); /* nothing todo @ error */
                                                                         break;
                                                                 }
                                                             }
                                                     }
                                                 }
                                                 break;
                                             case 'up':
                                                 setIfExists(id + '.OPEN', true);
                                                 break;
                                             case 'stop':
                                                 setIfExists(id + '.STOP', true);
                                                 break;
                                             case 'down':
                                                 setIfExists(id + '.CLOSE', true);
                                                 break;
                                             case 'positionSlider':
                                                 (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                 timeoutSlider = setTimeout(async function () {
                                                     setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                                 }, 250);
                                                 break;
                                             case 'tiltOpen':
                                                 setIfExists(id + '.TILT_OPEN', true);
                                                 break;
                                             case 'tiltStop':
                                                 setIfExists(id + '.TILT_STOP', true);
                                                 break;
                                             case 'tiltClose':
                                                 setIfExists(id + '.TILT_CLOSE', true);
                                                 break;
                                             case 'tiltSlider':
                                                 (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                 timeoutSlider = setTimeout(async function () {
                                                     setIfExists(id + '.TILT_SET', parseInt(words[4])) ? true : setIfExists(id + '.TILT_ACTUAL', parseInt(words[4]));
                                                 }, 250);
                                                 break;
                                             case 'brightnessSlider':
                                                 (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                 timeoutSlider = setTimeout(async function () {
                                                     if (existsObject(id)) {
                                                         let o = getObject(id);
                                                         let pageItem = findPageItem(id);
                                  
                                                         switch (o.common.role) {
                                                             case 'dimmer':
                                                                 if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                                                     let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                                                     setIfExists(id + '.SET', sliderPos) ? true : setIfExists(id + '.ACTUAL', sliderPos);
                                                                 } else {
                                                                     setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                                                 }
                                                                 break;
                                                             case 'rgb':
                                                             case 'ct':
                                                             case 'rgbSingle':
                                                             case 'hue':
                                                                 if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                                                     let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                                                     setIfExists(id + '.DIMMER', sliderPos);
                                                                 } else {
                                                                     setIfExists(id + '.DIMMER', parseInt(words[4]));
                                                                 }
                                                                 break;
                                                         }
                                                     }
                                                 }, 250);
                                                 break;
                                             case 'colorTempSlider': // Armilar - Slider tickt verkehrt - Hell = 0 / Dunkel = 100 -> Korrektur
                                                 (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                 timeoutSlider = setTimeout(async function () {
                                                     let pageItem = findPageItem(id);
                                                     if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) {
                                                         let colorTempK = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.minValueColorTemp, pageItem.maxValueColorTemp));
                                                         setIfExists(id + '.TEMPERATURE', (colorTempK));
                                                     } else {
                                                         setIfExists(id + '.TEMPERATURE', 100 - words[4]);
                                                     }
                                                 }, 250);
                                                 break;
                                             case 'colorWheel':
                                                 let colorCoordinates = words[4].split('|');
                                                 let rgb = pos_to_color(colorCoordinates[0], colorCoordinates[1]);
                                                 if (Debug) {
                                                     console.log(rgb);
                                                 }
                                                 if (Debug) {
                                                     console.log(getHue(rgb.red, rgb.green, rgb.blue));
                                                 }
                                                 let o = getObject(id);
                                                 switch (o.common.role) {
                                                     case 'hue':
                                                         setIfExists(id + '.HUE', getHue(rgb.red, rgb.green, rgb.blue));
                                                         break;
                                                     case 'rgb':
                                                         setIfExists(id + '.RED', rgb.red);
                                                         setIfExists(id + '.GREEN', rgb.green);
                                                         setIfExists(id + '.BLUE', rgb.blue);
                                                         break;
                                                     case 'rgbSingle':
                                                         let pageItem = findPageItem(id);
                                                         if (pageItem.colormode == "xy") {
                                                             //Für z.B. Deconz XY
                                                             setIfExists(id + ".RGB", rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                                                             if (Debug) {
                                                                 console.log(rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                                                             }
                                                         }
                                                         else {
                                                             //Für RGB
                                                             setIfExists(id + ".RGB", ConvertRGBtoHex(rgb.red, rgb.green, rgb.blue));
                                                         }
                                                         break;
                                                 }
                                                 break;
                                             case 'tempUpd':
                                                 setIfExists(id + '.SET', parseInt(words[4]) / 10);
                                                 break;
                                             case 'media-back':
                                                 setIfExists(id + '.PREV', true);
                                                 break;
                                             case 'media-pause':
                                                 let pageItemTemp = findPageItem(id);
                                                 let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
                                                 if (adaInstanceSplit[0] == 'squeezeboxrpc') {
                                                     let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val;
                                                     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);
                                                     }
                                                 }
                                                 break;
                                             case 'media-next':
                                                 setIfExists(id + '.NEXT', true);
                                                 break;
                                             case 'media-shuffle':
                                                 if ((findPageItem(id).adapterPlayerInstance).startsWith("volumio")) { findPageItem(id).playList = []; break; } //Volumio: empty playlist $uha-20230103
                                                 if (getState(id + '.SHUFFLE').val == 'off') {
                                                     setIfExists(id + '.SHUFFLE', 'on');
                                                 } else {
                                                     setIfExists(id + '.SHUFFLE', 'off');
                                                 }
                                                 break;
                                             case 'volumeSlider':
                                                 setIfExists(id + '.VOLUME', parseInt(words[4]))
                                                 break;
                                             case 'mode-speakerlist':
                                                 let pageItem = findPageItem(id);
                                                 let adapterInstance = pageItem.adapterPlayerInstance;
                                                 let adapter = adapterInstance.split('.');
                                                 let deviceAdapter = adapter[0];
                                  
                                                 switch (deviceAdapter) {
                                                     case 'spotify-premium':
                                                         let strDevicePI = pageItem.speakerList[words[4]];
                                                         let strDeviceID = spotifyGetDeviceID(strDevicePI);
                                                         setState(adapterInstance + 'devices.' + strDeviceID + ".useForPlayback", true);
                                                         break;
                                                     case 'alexa2':
                                                         let i_list = Array.prototype.slice.apply($('[state.id="' + adapterInstance + 'Echo-Devices.*.Info.name"]'));
                                                         for (let i_index in i_list) {
                                                             let i = i_list[i_index];
                                                             if ((getState(i).val) === pageItem.speakerList[words[4]]) {
                                                                 console.log(getState(i).val + ' - ' + pageItem.speakerList[words[4]]);
                                                                 let deviceId = i;
                                                                 deviceId = deviceId.split('.');
                                                                 setIfExists(adapterInstance + 'Echo-Devices.' + pageItem.mediaDevice + '.Commands.textCommand', 'Schiebe meine Musik auf ' + pageItem.speakerList[words[4]]);
                                                                 pageItem.mediaDevice = deviceId[3];
                                                             } 
                                                         }
                                                         break;
                                                     case 'sonos':
                                                         break;
                                                     case 'chromecast':
                                                         break;
                                                 }
                                                 break;
                                             case 'mode-playlist':
                                                 let pageItemPL = findPageItem(id);
                                                 let adapterInstancePL = pageItemPL.adapterPlayerInstance;
                                                 let adapterPL = adapterInstancePL.split('.');
                                                 let deviceAdapterPL = adapterPL[0];
                                  
                                                 switch (deviceAdapterPL) {
                                                     case 'spotify-premium':
                                                         let strDevicePI = pageItemPL.playList[words[4]];
                                                         console.log(strDevicePI);
                                                         let playlistListString = (getState(adapterInstancePL + 'playlists.playlistListString').val).split(';');
                                                         let playlistListIds = (getState(adapterInstancePL + 'playlists.playlistListIds').val).split(';');
                                                         let playlistIndex = playlistListString.indexOf(strDevicePI);
                                                         setState(adapterInstancePL + 'playlists.playlistList', playlistListIds[playlistIndex]);
                                                         setTimeout(async function () {
                                                             globalTracklist = (function () { try {return JSON.parse(getState(adapterInstancePL + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                                                         }, 2000);
                                                         break;
                                                     case 'alexa2':
                                                         let tempListItem = pageItemPL.playList[words[4]].split('.');
                                                         setState(adapterInstancePL + 'Echo-Devices.' + pageItemPL.mediaDevice + '.Music-Provider.' + tempListItem[0], tempListItem[1]);
                                                         break;
                                                     case 'volumio':
                                                         let strDevicePL = pageItemPL.playList[words[4]];
                                                         request({ url:`${getState(adapterInstancePL+'info.host').val}/api/commands/?cmd=playplaylist&name=${strDevicePL}`, headers: {'User-Agent': 'ioBroker'} }, 
                                                                   async (error, response, result)=>{}); /* nothing todo @ error */
                                                         break;
                                                 }
                                                 break;
                                             case 'mode-tracklist':
                                                 let pageItemTL = findPageItem(id);
                                                 let adapterInstanceTL = pageItemTL.adapterPlayerInstance;
                                                 let adapterTL = adapterInstanceTL.split('.')
                                                 let deviceAdapterTL = adapterTL[0];
                                  
                                                 switch (deviceAdapterTL) {
                                                     case 'spotify-premium':
                                                         let trackArray = (function () { try {return JSON.parse(getState(pageItemTL.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                                                         setState(adapterInstanceTL + 'player.trackId', getAttr(trackArray, words[4] + '.id'));
                                                         break;
                                                     case 'alexa2':
                                                         if (Debug) console.log('Aktuell hat alexa2 keine Tracklist');
                                                         break;
                                                     case 'volumio':
                                                         request({ url:`${getState(adapterInstanceTL+'info.host').val}/api/commands/?cmd=play&N=${words[4]}`, headers: {'User-Agent': 'ioBroker'} }, 
                                                             async (error, response, result)=>{}); /* nothing todo @ error */
                                                         break;
                                                 }
                                                 break;
                                             case 'mode-repeat':
                                                 let pageItemRP = findPageItem(id);
                                                 let adapterInstanceRP = pageItemRP.adapterPlayerInstance;
                                                 let adapterRP = adapterInstanceRP.split('.');
                                                 let deviceAdapterRP = adapterRP[0];
                                  
                                                 switch (deviceAdapterRP) {
                                                     case 'spotify-premium':
                                                         setIfExists(id + '.REPEAT', pageItemRP.repeatList[words[4]]);
                                                         break;
                                                     case 'alexa2':
                                                         break;
                                                 }
                                                 break;
                                             case 'mode-equalizer':
                                                 let pageItemEQ = findPageItem(id);
                                                 if (Debug) console.log(id);
                                                 let lastIndex = (id.split('.')).pop();
                                                 setState(NSPanel_Path + 'Media.Player.' + lastIndex + '.EQ.activeMode', pageItemEQ.equalizerList[words[4]]);
                                                 setTimeout(async function () {
                                                     GenerateDetailPage('popupInSel','equalizer', pageItemEQ);
                                                 }, 2000);
                                                 break;
                                             case 'mode-insel':
                                                 setIfExists(id + '.VALUE', parseInt(words[4]));
                                                 break;
                                             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);
                                                         setIfExists(id + '.STATE', 1);
                                                     } else {
                                                         setState(pageItemTem.adapterPlayerInstance + 'Power', 0);
                                                         setIfExists(id + '.STOP', true);
                                                         setIfExists(id + '.STATE', 0);
                                                     }
                                                 } else {
                                                     setIfExists(id + '.STOP', true);
                                                 }
                                                 break;
                                             case 'timer-start':
                                                 if (words[4] != undefined) {
                                                     let timer_panel = words[4].split(':');
                                                     setIfExists(id + '.ACTUAL', (parseInt(timer_panel[1]) * 60) + parseInt(timer_panel[2]));
                                                 }
                                                 setIfExists(id + '.STATE', 'active');
                                                 break;
                                             case 'timer-pause':
                                                 setIfExists(id + '.STATE', 'paused');
                                                 break;
                                             case 'timer-cancle':
                                                 setIfExists(id + '.STATE', 'idle');
                                                 setIfExists(id + '.ACTUAL', 0);
                                                 break;
                                             case 'timer-finish':
                                                 setIfExists(id + '.STATE', 'idle');
                                                 setIfExists(id + '.ACTUAL', 0);
                                                 break;
                                             case 'hvac_action':
                                                 if (words[4] == 'BOOT' || words[4] == 'PART' || words[4] == 'AUTT' || words[4] == 'MANT' || words[4] == 'VACT') {
                                  
                                                     switch (words[4]) {
                                                         case 'BOOT':
                                                             setIfExists(words[2] + '.' + 'BOOST', !getState(words[2] + '.' + 'BOOST').val);
                                                             break;
                                                         case 'PART':
                                                             setIfExists(words[2] + '.' + 'PARTY', !getState(words[2] + '.' + 'PARTY').val);
                                                             break;
                                                         case 'AUTT':
                                                             setIfExists(words[2] + '.' + 'AUTOMATIC', !getState(words[2] + '.' + 'AUTOMATIC').val);
                                                             break;
                                                         case 'MANT':
                                                             setIfExists(words[2] + '.' + 'MANUAL', !getState(words[2] + '.' + 'MANUAL').val);
                                                             break;
                                                         case 'VACT':
                                                             setIfExists(words[2] + '.' + 'VACATION', !getState(words[2] + '.' + 'VACATION').val);
                                                             break;
                                                     }
                                                     let modes = ['BOOT', 'PART', 'AUTT', 'MANT', 'VACT'];
                                                     let modesDP = ['BOOST', 'PARTY', 'AUTOMATIC', 'MANUAL', 'VACATION'];
                                                     for (let mode=0; mode < 5; mode++) {
                                                         if (words[4] != modes[mode]) {
                                                             setIfExists(words[2] + '.' + modesDP[mode], false);
                                                         }
                                                     }
                                                     GeneratePage(config.pages[pageId]);
                                                 } else {
                                                     let HVACMode = 0;
                                                     switch (words[4]) {
                                                         case 'POWER':
                                                             HVACMode = 0;
                                                             setIfExists(words[2] + '.' + words[4], !getState(words[2] + '.' + words[4]).val);
                                                             if (getState(words[2] + '.' + words[4]).val) {
                                                                 HVACMode = 1;
                                                             }
                                                             break;
                                                         case 'AUTO':
                                                             HVACMode = 1;
                                                             break;
                                                         case 'COOL':
                                                             HVACMode = 2;
                                                             break;
                                                         case 'HEAT':
                                                             HVACMode = 3;
                                                             break;
                                                         case 'ECO':
                                                             HVACMode = 4;
                                                             break;
                                                         case 'FAN':
                                                             HVACMode = 5;
                                                             break;
                                                         case 'DRY':
                                                             HVACMode = 6;
                                                             break;
                                                         case 'SWING':
                                                             HVACMode = getState(words[2] + '.MODE').val;
                                                             if (getState(words[2] + '.SWING').val == 0) {
                                                                 setIfExists(words[2] + '.SWING', 1);
                                                             } else {
                                                                 setIfExists(words[2] + '.' + 'SWING', 0);
                                                             }
                                                             break;
                                                     }
                                                     setIfExists(words[2] + '.' + 'MODE', HVACMode);
                                                     GeneratePage(config.pages[pageId]);
                                                 }
                                                 break;
                                             case 'mode-modus1':
                                                 let pageItemT1 = findPageItem(id);
                                                 setIfExists(id + '.' + pageItemT1.setThermoAlias[0], pageItemT1.popupThermoMode1[parseInt(words[4])]);
                                                 break;
                                             case 'mode-modus2':
                                                 let pageItemT2 = findPageItem(id);
                                                 setIfExists(id + '.' + pageItemT2.setThermoAlias[1], pageItemT2.popupThermoMode2[parseInt(words[4])]);
                                                 break;
                                             case 'mode-modus3':
                                                 let pageItemT3 = findPageItem(id);
                                                 setIfExists(id + '.' + pageItemT3.setThermoAlias[2], pageItemT3.popupThermoMode3[parseInt(words[4])]);
                                                 break;
                                             case 'number-set':
                                                 let nobj = getObject(id);
                                                 switch (nobj.common.role) {
                                                     case 'level.mode.fan':
                                                         (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                         timeoutSlider = setTimeout(async function () {
                                                             setIfExists(id + '.SPEED', parseInt(words[4]));
                                                         }, 250);
                                                         break;
                                                     default:    
                                                         (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                                                         timeoutSlider = setTimeout(async function () {
                                                             setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                                         }, 250);
                                                         break;
                                                 }
                                                 break;
                                             case 'mode-preset_modes':
                                                 setIfExists(id + '.MODE', parseInt(words[4]));
                                                 break; 
                                             case 'A1': // Alarm-Page Alarm 1 aktivieren
                                                 if (words[4] != '') {
                                                     setIfExists(id + '.TYPE', 'A1');
                                                     setIfExists(id + '.PIN', words[4]);
                                                     setIfExists(id + '.ACTUAL', 'arming');
                                                     setIfExists(id + '.PANEL', NSPanel_Path);
                                                 }
                                                 setTimeout(function(){
                                                     GeneratePage(activePage);
                                                 },250);
                                                 break;
                                             case 'A2': // Alarm-Page Alarm 2 aktivieren
                                                 if (words[4] != '') {
                                                     setIfExists(id + '.TYPE', 'A2');
                                                     setIfExists(id + '.PIN', words[4]);
                                                     setIfExists(id + '.ACTUAL', 'arming');
                                                     setIfExists(id + '.PANEL', NSPanel_Path);
                                                 }
                                                 setTimeout(function(){
                                                     GeneratePage(activePage);
                                                 },250);
                                                 break;
                                             case 'A3': // Alarm-Page Alarm 3 aktivieren
                                                 if (words[4] != '') {
                                                     setIfExists(id + '.TYPE', 'A3');
                                                     setIfExists(id + '.PIN', words[4]);
                                                     setIfExists(id + '.ACTUAL', 'arming');
                                                     setIfExists(id + '.PANEL', NSPanel_Path);
                                                 }
                                                 setTimeout(function(){
                                                     GeneratePage(activePage);
                                                 },250);
                                                 break;
                                             case 'A4': // Alarm-Page Alarm 4 aktivieren
                                                 if (words[4] != '') {
                                                     setIfExists(id + '.TYPE', 'A4');
                                                     setIfExists(id + '.PIN', words[4]);
                                                     setIfExists(id + '.ACTUAL', 'arming');
                                                     setIfExists(id + '.PANEL', NSPanel_Path);
                                                 }
                                                 setTimeout(function(){
                                                     GeneratePage(activePage);
                                                 },250);
                                                 break;
                                             case 'D1': // Alarm-Page Alarm Deaktivieren
                                                 if (Debug) {
                                                     console.log('D1: ' + getState(id + '.PIN').val);
                                                 }
                                                 if (Debug) {
                                                     console.log(words[4]);
                                                 }
                                                 if (words[4] != '') {
                                                     if (getState(id + '.PIN').val == words[4]) {
                                                         setIfExists(id + '.PIN', '0000');
                                                         setIfExists(id + '.TYPE', 'D1');
                                                         setIfExists(id + '.ACTUAL', 'pending');
                                                         setIfExists(id + '.PIN_Failed', 0);
                                                     } else {
                                                         setIfExists(id + '.PIN_Failed', getState(id + '.PIN_Failed').val + 1);
                                                         setIfExists(id + '.ACTUAL', 'triggered');
                                                     }
                                                     setIfExists(id + '.PANEL', NSPanel_Path);
                                                     setTimeout(function(){
                                                         GeneratePage(activePage);
                                                     },500);
                                                 }
                                                 break;
                                             default:
                                                 break;
                                         }
                                     } catch (err) {
                                         console.log('function HandleButtonEvent: ' + err.message);
                                     }
                                  }
                                  

                                  EDIT: Hotfix ist jetzt auch auf Github verfügbar v3.9.0.2

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

                                  @tt-tom @wendy2702

                                  Es gab tatsächlich 2 Lücken, die den Screensaver zum anhalten gebracht haben.

                                  1. Unbekannte Befehle, die in der HMI ausgelöst wurden, jedoch im Script nicht behandelt wurden
                                  2. Ein Event hat den Screensaver angehalten, für den Fall, das eine Notify aufgeschaltet wird und die Screensaver-Updates die Notify nicht überschreiben. Das passiert auch immer noch, jedoch wird das bei einem einfachen Druck auf den Screensaver jetzt verhindert.

                                  Sollte jetzt funktionieren...

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

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

                                  wendy2702W 1 Antwort Letzte Antwort
                                  0
                                  • ArmilarA Armilar

                                    @tt-tom @wendy2702

                                    Es gab tatsächlich 2 Lücken, die den Screensaver zum anhalten gebracht haben.

                                    1. Unbekannte Befehle, die in der HMI ausgelöst wurden, jedoch im Script nicht behandelt wurden
                                    2. Ein Event hat den Screensaver angehalten, für den Fall, das eine Notify aufgeschaltet wird und die Screensaver-Updates die Notify nicht überschreiben. Das passiert auch immer noch, jedoch wird das bei einem einfachen Druck auf den Screensaver jetzt verhindert.

                                    Sollte jetzt funktionieren...

                                    wendy2702W Online
                                    wendy2702W Online
                                    wendy2702
                                    schrieb am zuletzt editiert von wendy2702
                                    #2063

                                    @armilar @TT-Tom

                                    Danke.

                                    Werde ich morgen testen

                                    EDIT: Der Hotfix funktioniert. Danke für die schnelle Lösung

                                    Bitte keine Fragen per PN, die gehören ins Forum!

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

                                    1 Antwort Letzte Antwort
                                    0
                                    • D Offline
                                      D Offline
                                      Dieter Kurz
                                      schrieb am zuletzt editiert von
                                      #2064

                                      Hallo zusammen,
                                      ich habe ein Panel mit 3.6.0 erfolgreich am laufen, zumindest mit dem was ich brauche 😉
                                      Nun habe ich ein zweites Panel und möchte dies mit der aktuellen Version installieren.
                                      Können dann beide parallel betrieben werden, oder bringt das alles durcheinander?
                                      Welche Vorgehensweise würdet ihr mir empfehlen?
                                      Freue mich auf Tipps und Anregungen ....

                                      Dieter

                                      ArmilarA T 2 Antworten Letzte Antwort
                                      0
                                      • D Dieter Kurz

                                        Hallo zusammen,
                                        ich habe ein Panel mit 3.6.0 erfolgreich am laufen, zumindest mit dem was ich brauche 😉
                                        Nun habe ich ein zweites Panel und möchte dies mit der aktuellen Version installieren.
                                        Können dann beide parallel betrieben werden, oder bringt das alles durcheinander?
                                        Welche Vorgehensweise würdet ihr mir empfehlen?
                                        Freue mich auf Tipps und Anregungen ....

                                        Dieter

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

                                        @dieter-kurz

                                        Im Script gibt es einen Pfad für jedes Panel:

                                        const NSPanel_Path = '0_userdata.0.NSPanel.2.'; // Anpassen an das jeweilige NSPanel

                                        Die MQTT-Parameter müssen natürlich auch auf das neue Panel angepasst werden.

                                        panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_2.tele.RESULT',       // anpassen
                                        panelSendTopic: 'mqtt.0.SmartHome.NSPanel_2.cmnd.CustomSend',   // anpassen
                                        

                                        Das wäre alles...

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

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

                                        1 Antwort Letzte Antwort
                                        0
                                        • D Dieter Kurz

                                          Hallo zusammen,
                                          ich habe ein Panel mit 3.6.0 erfolgreich am laufen, zumindest mit dem was ich brauche 😉
                                          Nun habe ich ein zweites Panel und möchte dies mit der aktuellen Version installieren.
                                          Können dann beide parallel betrieben werden, oder bringt das alles durcheinander?
                                          Welche Vorgehensweise würdet ihr mir empfehlen?
                                          Freue mich auf Tipps und Anregungen ....

                                          Dieter

                                          T Offline
                                          T Offline
                                          TT-Tom
                                          schrieb am zuletzt editiert von
                                          #2066

                                          @dieter-kurz

                                          Es gibt schon Unterschiede bei den Parameter zwischen 3.6.0 und 3.9.0. im Script.

                                          Gruß Tom
                                          https://github.com/tt-tom17
                                          Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                                          NSPanel Script Wiki
                                          https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                          NSPanel Adapter Wiki
                                          https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          543

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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