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

  • Default (No Skin)
  • No Skin
Collapse
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

Scheduled Pinned Locked Moved Hardware
lovelace uinspanelsonoff
7.7k Posts 271 Posters 6.7m Views 253 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Flipps

    @armilar
    Also, die iob dag hat keine Fehler ergeben, ich habe jetzt auch mal einfach das script neu angelegt und nur den Alexplayer reinkopiert, das schmeißt dann den selben Fehler raus.
    muss ja was mit den aliasen zu tun haben.

    EDIT:
    Mir ist grade auch aufgefallen dass das Script nicht jeden alias akzeptiert, ich hab einmal eine Page mit meinen Poolwerten, Temp, chlor und Ph, sind alles nur Zahlen, die übernimmt der ohne zu meckern.
    Dann habe ich Werte aus meiner PV-Anlage, die Aliase habe ich genau so erstellt wie die vom Pool, die zeigt er mir in den pages nicht an (ohne Fehlermeldung).
    Ersetze ich jetzt einen der PV-Alias pfaden durch einen der Pool-Aliase wird mir da der Pool-Wert angezeigt.

    Ich glaube ich hab hier echt den Wurm in der Installation, vielleicht mache ich heute Abend nochmal eine komplette Neu Installation, der io läuft grade nur für das NS.

    Oder hast du noch eine Idee? 😄

    ArmilarA Offline
    ArmilarA Offline
    Armilar
    Most Active Forum Testing
    wrote on last edited by
    #3483

    @flipps sagte in SONOFF NSPanel mit Lovelace UI:

    Ich glaube ich hab hier echt den Wurm in der Installation, vielleicht mache ich heute Abend nochmal eine komplette Neu Installation, der io läuft grade nur für das NS.
    Oder hast du noch eine Idee?

    Ich kenne deine Installation nicht. Aber wenn es an mehreren Stellen diese Probleme gibt, wäre das ein Ansatz...

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

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

    1 Reply Last reply
    0
    • ArmilarA Armilar

      @icebear

      zu 1:
      da an der Emulation kein TFT angeschlossen ist, benötigst du kein Flash Nextion. Neue Versionen beziehst du über Download der HMI

      zu 2:
      du kannst im Datenpunkt des Alias unter fx eine Funktion bei Read zuweisen:
      "val === true ? false : true"

      Entweder direkt im Gerätemanager oder im Objekt des Datenpunktes:

      c5d58b4e-2ffa-4732-8738-bd200e02f709-image.png

      egalE Offline
      egalE Offline
      egal
      wrote on last edited by
      #3484

      @armilar sagte in SONOFF NSPanel mit Lovelace UI:

      "val === true ? false : true"

      für Faule wie mich 😄
      "!val"

      Gruß Uwe ;-)

      ArmilarA 1 Reply Last reply
      1
      • egalE egal

        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

        "val === true ? false : true"

        für Faule wie mich 😄
        "!val"

        ArmilarA Offline
        ArmilarA Offline
        Armilar
        Most Active Forum Testing
        wrote on last edited by
        #3485

        @egal

        "val === true ? false : true"

        für Faule wie mich 😄
        "!val"

        Ich dachte der Ternary Operator wäre etwas besser für das Verständnis. Aber du hast absolut recht...

        Bei boolschen Werten ist natürlich eine Umkehrung von zwei Zuständen am Besten mit !val beschrieben... 😊

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

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

        1 Reply Last reply
        0
        • icebearI Online
          icebearI Online
          icebear
          wrote on last edited by
          #3486

          Hat funktioniert! Ich danke euch erstmal, und werd dann mal weiter testen bis mein richtiges Panel da ist.

          1 Reply Last reply
          0
          • F Flipps

            @armilar
            Also, die iob dag hat keine Fehler ergeben, ich habe jetzt auch mal einfach das script neu angelegt und nur den Alexplayer reinkopiert, das schmeißt dann den selben Fehler raus.
            muss ja was mit den aliasen zu tun haben.

            EDIT:
            Mir ist grade auch aufgefallen dass das Script nicht jeden alias akzeptiert, ich hab einmal eine Page mit meinen Poolwerten, Temp, chlor und Ph, sind alles nur Zahlen, die übernimmt der ohne zu meckern.
            Dann habe ich Werte aus meiner PV-Anlage, die Aliase habe ich genau so erstellt wie die vom Pool, die zeigt er mir in den pages nicht an (ohne Fehlermeldung).
            Ersetze ich jetzt einen der PV-Alias pfaden durch einen der Pool-Aliase wird mir da der Pool-Wert angezeigt.

            Ich glaube ich hab hier echt den Wurm in der Installation, vielleicht mache ich heute Abend nochmal eine komplette Neu Installation, der io läuft grade nur für das NS.

            Oder hast du noch eine Idee? 😄

            T Offline
            T Offline
            TT-Tom
            wrote on last edited by TT-Tom
            #3487

            @flipps sagte in SONOFF NSPanel mit Lovelace UI:

            Dann habe ich Werte aus meiner PV-Anlage, die Aliase habe ich genau so erstellt wie die vom Pool, die zeigt er mir in den pages nicht an (ohne Fehlermeldung).
            Ersetze ich jetzt einen der PV-Alias pfaden durch einen der Pool-Aliase wird mir da der Pool-Wert angezeigt.

            Zeige mal bitte von beiden, die Objektdaten einmal Channel und einmal Datenpunkt

            Was passiert, wenn du nur den Verweis änderst?

            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 Reply Last reply
            0
            • T TT-Tom

              @flipps sagte in SONOFF NSPanel mit Lovelace UI:

              Dann habe ich Werte aus meiner PV-Anlage, die Aliase habe ich genau so erstellt wie die vom Pool, die zeigt er mir in den pages nicht an (ohne Fehlermeldung).
              Ersetze ich jetzt einen der PV-Alias pfaden durch einen der Pool-Aliase wird mir da der Pool-Wert angezeigt.

              Zeige mal bitte von beiden, die Objektdaten einmal Channel und einmal Datenpunkt

              Was passiert, wenn du nur den Verweis änderst?

              ArmilarA Offline
              ArmilarA Offline
              Armilar
              Most Active Forum Testing
              wrote on last edited by
              #3488

              @tt-tom

              8c770fb4-c206-4501-97cc-2368ecb1c7fc-image.png

              v4.2.0.2

              Neue zusätzliche cardGrid2 mit 8 Steuerelementen
              f483e820-26e7-497d-8884-4d33f6a6613b-image.png

              Variablendeklaration der cardGrid2 analog cardGrid mit:

              let Buero_Seite_2 = <PageGrid2>
              {
                  'type': 'cardGrid2',
                  'heading': 'Büro 2',
                  'useColor': true,
                  ...
              

              Änderungen in der Variable also PageGrid2 und cardGrid2.

              Es reicht den unteren Teil ab ( _______ Ab hier keine Konfiguration mehr ______ ) zu ersetzen.
              Und falls noch nicht geschehen:

              FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.2.0.tft
              

              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.

              ArmilarA 1 Reply Last reply
              1
              • ArmilarA Armilar

                @tt-tom

                8c770fb4-c206-4501-97cc-2368ecb1c7fc-image.png

                v4.2.0.2

                Neue zusätzliche cardGrid2 mit 8 Steuerelementen
                f483e820-26e7-497d-8884-4d33f6a6613b-image.png

                Variablendeklaration der cardGrid2 analog cardGrid mit:

                let Buero_Seite_2 = <PageGrid2>
                {
                    'type': 'cardGrid2',
                    'heading': 'Büro 2',
                    'useColor': true,
                    ...
                

                Änderungen in der Variable also PageGrid2 und cardGrid2.

                Es reicht den unteren Teil ab ( _______ Ab hier keine Konfiguration mehr ______ ) zu ersetzen.
                Und falls noch nicht geschehen:

                FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.2.0.tft
                
                ArmilarA Offline
                ArmilarA Offline
                Armilar
                Most Active Forum Testing
                wrote on last edited by
                #3489

                Gibt aber schon einen FeatureRequest von @Kuckuckmann

                https://github.com/joBr99/nspanel-lovelace-ui/issues/964

                ce05d934-87ba-412f-a11f-a737a4327ccd-image.png

                Die Schrift ist bei Darstellung von Werten noch etwas groß...

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

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

                1 Reply Last reply
                0
                • icebearI Online
                  icebearI Online
                  icebear
                  wrote on last edited by icebear
                  #3490

                  Noch eine Frage ich hätt?

                  Ich hab jetzt für ein Thermostat (HomematicIP evo) die cardTHERMO angelegt,

                  office.png

                  funktioniert auch wie man glaub ich sieht soweit.
                  Allerdings bekomm ich unten bei den Indikatoren das Batteriesymbol nicht angezeigt (WIFI funktioniert) woran kann das liegen ?

                  Alias sieht wie folgt aus

                  office1.png

                  Und beinahe vergessen kann man auch 'Open Window' als Indikator einblenden lassen?

                  ArmilarA 2 Replies Last reply
                  0
                  • Marc BergM Offline
                    Marc BergM Offline
                    Marc Berg
                    Most Active
                    wrote on last edited by
                    #3491

                    @icebear sagte in SONOFF NSPanel mit Lovelace UI:

                    Allerdings bekomm ich unten bei den Indikatoren das Batteriesymbol nicht angezeigt (WIFI funktioniert) woran kann das liegen ?

                    Also bei mir wird unter Role "indicator.maintenance.lowbat" angezeigt. Vielleicht liegt es daran?
                    ed1eb6d3-607f-4ab1-baad-6bde171c6fdc-grafik.png

                    NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

                    Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                    Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                    ArmilarA 1 Reply Last reply
                    0
                    • Marc BergM Marc Berg

                      @icebear sagte in SONOFF NSPanel mit Lovelace UI:

                      Allerdings bekomm ich unten bei den Indikatoren das Batteriesymbol nicht angezeigt (WIFI funktioniert) woran kann das liegen ?

                      Also bei mir wird unter Role "indicator.maintenance.lowbat" angezeigt. Vielleicht liegt es daran?
                      ed1eb6d3-607f-4ab1-baad-6bde171c6fdc-grafik.png

                      ArmilarA Offline
                      ArmilarA Offline
                      Armilar
                      Most Active Forum Testing
                      wrote on last edited by
                      #3492

                      @marc-berg

                      Die Rolle wird da eigentlich nicht ausgewertet. Sollte mit der Zuweisung im Alias genügen.

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

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

                      1 Reply Last reply
                      0
                      • icebearI icebear

                        Noch eine Frage ich hätt?

                        Ich hab jetzt für ein Thermostat (HomematicIP evo) die cardTHERMO angelegt,

                        office.png

                        funktioniert auch wie man glaub ich sieht soweit.
                        Allerdings bekomm ich unten bei den Indikatoren das Batteriesymbol nicht angezeigt (WIFI funktioniert) woran kann das liegen ?

                        Alias sieht wie folgt aus

                        office1.png

                        Und beinahe vergessen kann man auch 'Open Window' als Indikator einblenden lassen?

                        ArmilarA Offline
                        ArmilarA Offline
                        Armilar
                        Most Active Forum Testing
                        wrote on last edited by
                        #3493

                        @icebear sagte in SONOFF NSPanel mit Lovelace UI:

                        Und beinahe vergessen kann man auch 'Open Window' als Indikator einblenden lassen?

                        Aktuell nicht. Gehört der zum Thermostaten? Falls ja, könnte man ihn noch einbauen. Denke mal Bool (true/false) bei Fenster offen - Erkennung?

                        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.

                        icebearI 1 Reply Last reply
                        0
                        • ArmilarA Armilar

                          @icebear sagte in SONOFF NSPanel mit Lovelace UI:

                          Und beinahe vergessen kann man auch 'Open Window' als Indikator einblenden lassen?

                          Aktuell nicht. Gehört der zum Thermostaten? Falls ja, könnte man ihn noch einbauen. Denke mal Bool (true/false) bei Fenster offen - Erkennung?

                          icebearI Online
                          icebearI Online
                          icebear
                          wrote on last edited by
                          #3494

                          @armilar said in SONOFF NSPanel mit Lovelace UI:

                          Aktuell nicht. Gehört der zum Thermostaten?

                          Jepp, die HMIP Fenstersensoren können in der CCU mit den Thermostaten verknüpft werden und im Objektmanager tauchen die States dann bei den Thermostaten auf (siehe Screenshots)
                          Wenn das Fenster geöffnet wird setzt das automatisch die Setpointtemp auf einen vordefinierten Wert (Standard ist glaub ich 12°C)

                          hmip1.png

                          hmip2.png

                          Das mit dem Batteriesymbol hab ich übrings immernoch nich hinbekommen (teste weiter)

                          Solltest du noch etwas brauchen einfach melden.

                          ArmilarA 1 Reply Last reply
                          1
                          • icebearI icebear

                            @armilar said in SONOFF NSPanel mit Lovelace UI:

                            Aktuell nicht. Gehört der zum Thermostaten?

                            Jepp, die HMIP Fenstersensoren können in der CCU mit den Thermostaten verknüpft werden und im Objektmanager tauchen die States dann bei den Thermostaten auf (siehe Screenshots)
                            Wenn das Fenster geöffnet wird setzt das automatisch die Setpointtemp auf einen vordefinierten Wert (Standard ist glaub ich 12°C)

                            hmip1.png

                            hmip2.png

                            Das mit dem Batteriesymbol hab ich übrings immernoch nich hinbekommen (teste weiter)

                            Solltest du noch etwas brauchen einfach melden.

                            ArmilarA Offline
                            ArmilarA Offline
                            Armilar
                            Most Active Forum Testing
                            wrote on last edited by Armilar
                            #3495

                            @icebear

                            Sind die Batteriewerte in den Objektdaten ebenfalls vom Typ Number? Falls Boolean, bitte mal manuell am Original-Datenpunkt an/aus-schalten...

                            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.

                            icebearI 1 Reply Last reply
                            0
                            • ArmilarA Armilar

                              @icebear

                              Sind die Batteriewerte in den Objektdaten ebenfalls vom Typ Number? Falls Boolean, bitte mal manuell am Original-Datenpunkt an/aus-schalten...

                              icebearI Online
                              icebearI Online
                              icebear
                              wrote on last edited by
                              #3496

                              @armilar said in SONOFF NSPanel mit Lovelace UI:

                              Sind die Batteriewerte in den Objektdaten ebenfalls vom Typ Number?

                              Guckst du hier

                              bat.png

                              1 Reply Last reply
                              1
                              • icebearI icebear

                                Noch eine Frage ich hätt?

                                Ich hab jetzt für ein Thermostat (HomematicIP evo) die cardTHERMO angelegt,

                                office.png

                                funktioniert auch wie man glaub ich sieht soweit.
                                Allerdings bekomm ich unten bei den Indikatoren das Batteriesymbol nicht angezeigt (WIFI funktioniert) woran kann das liegen ?

                                Alias sieht wie folgt aus

                                office1.png

                                Und beinahe vergessen kann man auch 'Open Window' als Indikator einblenden lassen?

                                ArmilarA Offline
                                ArmilarA Offline
                                Armilar
                                Most Active Forum Testing
                                wrote on last edited by Armilar
                                #3497

                                @icebear

                                Habe den Fehler gefunden. Dein Datenpunkt sollte im ALIAS LOWBAT heißen. Deiner ist LOW_BAT ...

                                Lösche den mal und lege den neu an.

                                Einen LOW_BAT frage ich im TS-Script nicht ab

                                                                case 'LOWBAT':
                                                                    if (existsState(id + '.LOWBAT') && getState(id + '.LOWBAT').val != null) {
                                                                        if (getState(id + '.LOWBAT').val) {
                                                                            bt[i - 1] = Icons.GetIcon('battery-low') + '~63488~1~' + 'LBAT' + '~';
                                                                        } else {
                                                                            bt[i - 1] = Icons.GetIcon('battery-high') + '~2016~1~' + 'LBAT' + '~';
                                                                        }
                                                                    } else i--;
                                                                    break;
                                

                                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.

                                ArmilarA 1 Reply Last reply
                                0
                                • ArmilarA Armilar

                                  @icebear

                                  Habe den Fehler gefunden. Dein Datenpunkt sollte im ALIAS LOWBAT heißen. Deiner ist LOW_BAT ...

                                  Lösche den mal und lege den neu an.

                                  Einen LOW_BAT frage ich im TS-Script nicht ab

                                                                  case 'LOWBAT':
                                                                      if (existsState(id + '.LOWBAT') && getState(id + '.LOWBAT').val != null) {
                                                                          if (getState(id + '.LOWBAT').val) {
                                                                              bt[i - 1] = Icons.GetIcon('battery-low') + '~63488~1~' + 'LBAT' + '~';
                                                                          } else {
                                                                              bt[i - 1] = Icons.GetIcon('battery-high') + '~2016~1~' + 'LBAT' + '~';
                                                                          }
                                                                      } else i--;
                                                                      break;
                                  
                                  ArmilarA Offline
                                  ArmilarA Offline
                                  Armilar
                                  Most Active Forum Testing
                                  wrote on last edited by Armilar
                                  #3498

                                  @icebear

                                  95c59b13-ee0e-4aef-a645-eb06890e8f09-image.png

                                  Ist auch noch ein dicker fetter roter Kringel um den Fehler gemacht worden... ich werde alt 😊

                                  EDIT:
                                  Ich werde den Thermostaten noch um WINDOWOPEN (Boolean erscheint mir sinnvoller - keine Ahnung warum das numerisch ist 😉 ) erweitern. Kann dann beim Lesen im Alias mit fx: "val === 0 ? false : true" von deinen Nummern in true/false geändert werden.

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

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

                                  icebearI ArmilarA 2 Replies Last reply
                                  0
                                  • ArmilarA Armilar

                                    @icebear

                                    95c59b13-ee0e-4aef-a645-eb06890e8f09-image.png

                                    Ist auch noch ein dicker fetter roter Kringel um den Fehler gemacht worden... ich werde alt 😊

                                    EDIT:
                                    Ich werde den Thermostaten noch um WINDOWOPEN (Boolean erscheint mir sinnvoller - keine Ahnung warum das numerisch ist 😉 ) erweitern. Kann dann beim Lesen im Alias mit fx: "val === 0 ? false : true" von deinen Nummern in true/false geändert werden.

                                    icebearI Online
                                    icebearI Online
                                    icebear
                                    wrote on last edited by
                                    #3499

                                    @armilar

                                    Danke hatte ich auch nich gesehen (Wald und Bäume).

                                    Jetzt funktioniert es!

                                    HMIbat.png

                                    ArmilarA 1 Reply Last reply
                                    1
                                    • icebearI icebear

                                      @armilar

                                      Danke hatte ich auch nich gesehen (Wald und Bäume).

                                      Jetzt funktioniert es!

                                      HMIbat.png

                                      ArmilarA Offline
                                      ArmilarA Offline
                                      Armilar
                                      Most Active Forum Testing
                                      wrote on last edited by
                                      #3500

                                      @icebear

                                      hübsche Batterie 😉

                                      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.

                                      icebearI 1 Reply Last reply
                                      0
                                      • ArmilarA Armilar

                                        @icebear

                                        hübsche Batterie 😉

                                        icebearI Online
                                        icebearI Online
                                        icebear
                                        wrote on last edited by
                                        #3501

                                        @armilar

                                        Ich seh schon, ich muß mich ein bischen mehr mit dem unteren Teil des Scripts beschäftigen ☺

                                        ArmilarA 1 Reply Last reply
                                        0
                                        • ArmilarA Armilar

                                          @icebear

                                          95c59b13-ee0e-4aef-a645-eb06890e8f09-image.png

                                          Ist auch noch ein dicker fetter roter Kringel um den Fehler gemacht worden... ich werde alt 😊

                                          EDIT:
                                          Ich werde den Thermostaten noch um WINDOWOPEN (Boolean erscheint mir sinnvoller - keine Ahnung warum das numerisch ist 😉 ) erweitern. Kann dann beim Lesen im Alias mit fx: "val === 0 ? false : true" von deinen Nummern in true/false geändert werden.

                                          ArmilarA Offline
                                          ArmilarA Offline
                                          Armilar
                                          Most Active Forum Testing
                                          wrote on last edited by
                                          #3502

                                          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                                          @icebear

                                          EDIT:
                                          Ich werde den Thermostaten noch um WINDOWOPEN (Boolean erscheint mir sinnvoller - keine Ahnung warum das numerisch ist ) erweitern. Kann dann beim Lesen im Alias mit fx: "val === 0 ? false : true" von deinen Nummern in true/false geändert werden.

                                          Kannste mal testen?

                                          Die function GenerateThermoPage suchen und ersetzen:

                                          function GenerateThermoPage(page: PageThermo): Payload[] {
                                              try {
                                                  let id = page.items[0].id
                                                  let out_msgs: Array<Payload> = [];
                                                  out_msgs.push({ payload: 'pageType~cardThermo' });
                                                  
                                                  // ioBroker
                                                  if (existsObject(id)) {
                                                      let o = getObject(id);
                                                      let name = page.heading !== undefined ? page.heading : o.common.name.de;
                                                      let currentTemp = 0;
                                                      if (existsState(id + '.ACTUAL')) {
                                                          currentTemp = (Math.round(parseFloat(getState(id + '.ACTUAL').val) * 10) / 10);
                                                      }
                                          
                                                      let minTemp = page.items[0].minValue !== undefined ? page.items[0].minValue : 50;   //Min Temp 5°C
                                                      let maxTemp = page.items[0].maxValue !== undefined ? page.items[0].maxValue : 300;  //Max Temp 30°C
                                                      let stepTemp = page.items[0].stepValue !== undefined ? page.items[0].stepValue : 5; //Default 0,5° Schritte
                                          
                                                      let destTemp = 0;
                                                      if (existsState(id + '.SET')) {
                                                          // using minValue, if .SET is null (e.g. for tado AWAY or tado is off)
                                                          let setValue = getState(id + '.SET').val;
                                                          if (setValue == null) {
                                                              setValue = minTemp;
                                                          }
                                          
                                                          destTemp = setValue.toFixed(2) * 10;
                                                      }
                                                      let statusStr: String = 'MANU';
                                          
                                                      if (existsState(id + '.MODE') && getState(id + '.MODE').val != null) {
                                                          if (getState(id + '.MODE').val === 1) {
                                                              statusStr = 'MANU';
                                                          } else {
                                                              statusStr = 'AUTO';
                                                          }
                                                      }
                                          
                                                      //Attribute hinzufügen, wenn im Alias definiert
                                                      let i_list = Array.prototype.slice.apply($('[state.id="' + id + '.*"]'));
                                                      let bt = ['~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~'];
                                                      
                                                      let tempIcon: string = '';
                                                      
                                                      if ((i_list.length - 3) != 0) {
                                          
                                                          let i = 0;
                                          
                                                          if (o.common.role == 'thermostat') {
                                          
                                                              if (existsState(id + '.AUTOMATIC') && getState(id + '.AUTOMATIC').val != null) {
                                                                  if (getState(id + '.AUTOMATIC').val) {
                                                                      bt[i++] = Icons.GetIcon('alpha-a-circle') + '~' + rgb_dec565(On) + '~1~' + 'AUTT' + '~';
                                                                      statusStr = 'AUTO';
                                                                  } else {
                                                                      bt[i++] = Icons.GetIcon('alpha-a-circle') + '~33840~1~' + 'AUTT' + '~';
                                                                  }
                                                              }
                                                              if (existsState(id + '.MANUAL') && getState(id + '.MANUAL').val != null) {
                                                                  if (getState(id + '.MANUAL').val) {
                                                                      bt[i++] = Icons.GetIcon('alpha-m-circle') + '~' + rgb_dec565(On) + '~1~' + 'MANT' + '~';
                                                                      statusStr = 'MANU';
                                                                  } else {
                                                                      bt[i++] = Icons.GetIcon('alpha-m-circle') + '~33840~1~' + 'MANT' + '~';
                                                                  }
                                                              }
                                                              if (existsState(id + '.PARTY') && getState(id + '.PARTY').val != null) {
                                                                  if (getState(id + '.PARTY').val) {
                                                                      bt[i++] = Icons.GetIcon('party-popper') + '~' + rgb_dec565(On) + '~1~' + 'PART' + '~';
                                                                      statusStr = 'PARTY';
                                                                  } else {
                                                                      bt[i++] = Icons.GetIcon('party-popper') + '~33840~1~' + 'PART' + '~';
                                                                  }
                                                              }
                                                              if (existsState(id + '.VACATION') && getState(id + '.VACATION').val != null) {
                                                                  if (getState(id + '.VACATION').val) {
                                                                      bt[i++] = Icons.GetIcon('palm-tree') + '~' + rgb_dec565(On) + '~1~' + 'VACT' + '~';
                                                                      statusStr = 'VAC';
                                                                  } else {
                                                                      bt[i++] = Icons.GetIcon('palm-tree') + '~33840~1~' + 'VACT' + '~';
                                                                  }
                                                              }
                                                              if (existsState(id + '.BOOST') && getState(id + '.BOOST').val != null) {
                                                                  if (getState(id + '.BOOST').val) {
                                                                      bt[i++] = Icons.GetIcon('fast-forward-60') + '~' + rgb_dec565(On) + '~1~' + 'BOOT' + '~';
                                                                      statusStr = 'BOOST';
                                                                  } else {
                                                                      bt[i++] = Icons.GetIcon('fast-forward-60') + '~33840~1~' + 'BOOT' + '~';
                                                                  }
                                                              }
                                          
                                                              for (let i_index in i_list) {
                                                                  let thermostatState = i_list[i_index].split('.');
                                                                  if (
                                                                      thermostatState[thermostatState.length - 1] != 'SET' &&
                                                                      thermostatState[thermostatState.length - 1] != 'ACTUAL' &&
                                                                      thermostatState[thermostatState.length - 1] != 'MODE'
                                                                  ) {
                                                                      i++;
                                          
                                                                      switch (thermostatState[thermostatState.length - 1]) {
                                                                          case 'HUMIDITY':
                                                                              if (existsState(id + '.HUMIDITY') && getState(id + '.HUMIDITY').val != null) {
                                                                                  if (parseInt(getState(id + '.HUMIDITY').val) < 40) {
                                                                                      bt[i - 1] = Icons.GetIcon('water-percent') + '~65504~1~' + 'HUM' + '~';
                                                                                  } else if (parseInt(getState(id + '.HUMIDITY').val) < 30) {
                                                                                      bt[i - 1] = Icons.GetIcon('water-percent') + '~63488~1~' + 'HUM' + '~';
                                                                                  } else if (parseInt(getState(id + '.HUMIDITY').val) >= 40) {
                                                                                      bt[i - 1] = Icons.GetIcon('water-percent') + '~2016~1~' + 'HUM' + '~';
                                                                                  } else if (parseInt(getState(id + '.HUMIDITY').val) > 65) {
                                                                                      bt[i - 1] = Icons.GetIcon('water-percent') + '~65504~1~' + 'HUM' + '~';
                                                                                  } else if (parseInt(getState(id + '.HUMIDITY').val) > 75) {
                                                                                      bt[i - 1] = Icons.GetIcon('water-percent') + '~63488~1~' + 'HUM' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'LOWBAT':
                                                                              if (existsState(id + '.LOWBAT') && getState(id + '.LOWBAT').val != null) {
                                                                                  if (getState(id + '.LOWBAT').val) {
                                                                                      bt[i - 1] = Icons.GetIcon('battery-low') + '~63488~1~' + 'LBAT' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('battery-high') + '~2016~1~' + 'LBAT' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'MAINTAIN':
                                                                              if (existsState(id + '.MAINTAIN') && getState(id + '.MAINTAIN').val != null) {
                                                                                  if (getState(id + '.MAINTAIN').val >> .1) {
                                                                                      bt[i - 1] = Icons.GetIcon('account-wrench') + '~60897~1~' + 'MAIN' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('account-wrench') + '~33840~1~' + 'MAIN' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'UNREACH':
                                                                              if (existsState(id + '.UNREACH') && getState(id + '.UNREACH').val != null) {
                                                                                  if (getState(id + '.UNREACH').val) {
                                                                                      bt[i - 1] = Icons.GetIcon('wifi-off') + '~63488~1~' + 'WLAN' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('wifi') + '~2016~1~' + 'WLAN' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'POWER':
                                                                              if (existsState(id + '.POWER') && getState(id + '.POWER').val != null) {
                                                                                  if (getState(id + '.POWER').val) {
                                                                                      bt[i - 1] = Icons.GetIcon('power-standby') + '~2016~1~' + 'POW' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('power-standby') + '~33840~1~' + 'POW' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'ERROR':
                                                                              if (existsState(id + '.ERROR') && getState(id + '.ERROR').val != null) {
                                                                                  if (getState(id + '.ERROR').val) {
                                                                                      bt[i - 1] = Icons.GetIcon('alert-circle') + '~63488~1~' + 'ERR' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('alert-circle') + '~33840~1~' + 'ERR' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'WORKING':
                                                                              if (existsState(id + '.WORKING') && getState(id + '.WORKING').val != null) {
                                                                                  if (getState(id + '.WORKING').val) {
                                                                                      bt[i - 1] = Icons.GetIcon('briefcase-check') + '~2016~1~' + 'WORK' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('briefcase-check') + '~33840~1~' + 'WORK' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          case 'WINDOWOPEN':
                                                                              if (existsState(id + '.WINDOWOPEN') && getState(id + '.WINDOWOPEN').val != null) {
                                                                                  if (getState(id + '.WINDOWOPEN').val) {
                                                                                      bt[i - 1] = Icons.GetIcon('window-open-variant') + '~63488~1~' + 'WIN' + '~';
                                                                                  } else {
                                                                                      bt[i - 1] = Icons.GetIcon('window-closed-variant') + '~2016~1~' + 'WIN' + '~';
                                                                                  }
                                                                              } else i--;
                                                                              break;
                                                                          default:
                                                                              i--;
                                                                              break;
                                                                      }
                                                                  }
                                                              }
                                          
                                                              for (let j = i; j < 9; j++) {
                                                                  bt[j] = '~~~~';
                                                              }
                                                          }
                                          
                                                          if (o.common.role == 'airCondition') {
                                                              if (existsState(id + '.MODE') && getState(id + '.MODE').val != null) {
                                                                  let Mode = getState(id + '.MODE').val
                                                                  let States = getObject(id + '.MODE').common.states;
                                                                  
                                                                  let iconIndex: number = 1;
                                                                  for(const statekey in States) {
                                                                      let stateName: string = States[statekey];
                                                                      let stateKeyNumber: number = parseInt(statekey);
                                                                      if(stateName == 'OFF' || stateKeyNumber > 6) {
                                                                          continue;
                                                                      }
                                                                      if(stateKeyNumber == Mode) {
                                                                          statusStr = stateName.replace('_', ' ');
                                                                      }
                                          
                                                                      switch(stateName) {
                                                                          case 'AUTO':
                                                                              if (page.items[0].iconArray !== undefined && page.items[0].iconArray[1] !== '') {
                                                                                  tempIcon = page.items[0].iconArray[1];
                                                                              } else {
                                                                                  tempIcon = 'air-conditioner';
                                                                              }
                                                                              if(stateKeyNumber == Mode) {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~1024~1~' + 'AUTO' + '~';
                                                                              } else {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'AUTO' + '~';
                                                                              }
                                                                              break;
                                                                          case 'COOL':
                                                                              if (page.items[0].iconArray !== undefined && page.items[0].iconArray[2] !== '') {
                                                                                  tempIcon = page.items[0].iconArray[2];
                                                                              } else {
                                                                                  tempIcon = 'snowflake';
                                                                              }
                                                                              if(stateKeyNumber == Mode) {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~11487~1~' + 'COOL' + '~';
                                                                              } else {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'COOL' + '~';
                                                                              }
                                                                              break;
                                                                          case 'HEAT':
                                                                              if (page.items[0].iconArray !== undefined && page.items[0].iconArray[3] !== '') {
                                                                                  tempIcon = page.items[0].iconArray[3];
                                                                              } else {
                                                                                  tempIcon = 'fire';
                                                                              }
                                                                              if(stateKeyNumber == Mode) {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~64512~1~' + 'HEAT' + '~';
                                                                              } else {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'HEAT' + '~';
                                                                              }
                                                                              break;
                                                                          case 'ECO':
                                                                              if (page.items[0].iconArray !== undefined && page.items[0].iconArray[4] !== '') {
                                                                                  tempIcon = page.items[0].iconArray[4];
                                                                              } else {
                                                                                  tempIcon = 'alpha-e-circle-outline';
                                                                              }
                                                                              if(stateKeyNumber == Mode) {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'ECO' + '~';
                                                                              } else {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'ECO' + '~';
                                                                              }
                                                                              break;
                                                                          case 'FAN_ONLY':
                                                                              if (page.items[0].iconArray !== undefined && page.items[0].iconArray[5] !== '') {
                                                                                  tempIcon = page.items[0].iconArray[5];
                                                                              } else {
                                                                                  tempIcon = 'fan';
                                                                              }
                                                                              if(stateKeyNumber == Mode) {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~11487~1~' + 'FAN_ONLY' + '~';
                                                                              } else {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'FAN_ONLY' + '~';
                                                                              }
                                                                              break;
                                                                          case 'DRY':
                                                                              if (page.items[0].iconArray !== undefined && page.items[0].iconArray[6] !== '') {
                                                                                  tempIcon = page.items[0].iconArray[6];
                                                                              } else {
                                                                                  tempIcon = 'water-percent';
                                                                              }
                                                                              if(stateKeyNumber == Mode) {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~60897~1~' + 'DRY' + '~';
                                                                              } else {
                                                                                  bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'DRY' + '~';
                                                                              }
                                                                              break;
                                                                      }
                                                                      iconIndex++;
                                                                  }
                                                                  
                                                                  if (iconIndex <= 7 && existsState(id + '.ECO') && getState(id + '.ECO').val != null) {
                                                                      if (page.items[0].iconArray !== undefined && page.items[0].iconArray[4] !== '') {
                                                                          tempIcon = page.items[0].iconArray[4];
                                                                      } else {
                                                                          tempIcon = 'alpha-e-circle-outline';
                                                                      }
                                                                      if (getState(id + '.ECO').val && getState(id + '.ECO').val == 1) {
                                                                          bt[iconIndex] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'ECO' + '~';
                                                                          statusStr = 'ECO';
                                                                      } else {
                                                                          bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'ECO' + '~';
                                                                      }
                                                                      iconIndex++;
                                                                  }
                                          
                                                                  if (iconIndex <= 7 && existsState(id + '.SWING') && getState(id + '.SWING').val != null) {
                                                                      if (page.items[0].iconArray !== undefined && page.items[0].iconArray[7] !== '') {
                                                                          tempIcon = page.items[0].iconArray[7];
                                                                      } else {
                                                                          tempIcon = 'swap-vertical-bold';
                                                                      }
                                                                      if (getState(id + '.POWER').val && getState(id + '.SWING').val == 1) {          //0=ON oder .SWING = true
                                                                          bt[7] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'SWING' + '~';
                                                                      } else {
                                                                          bt[7] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'SWING' + '~';
                                                                      }
                                                                      iconIndex++;
                                                                  }
                                          
                                                                  // Power Icon zuletzt pruefen, damit der Mode ggf. mit OFF ueberschrieben werden kann
                                                                  if (existsState(id + '.POWER') && getState(id + '.POWER').val != null) {
                                                                      if (page.items[0].iconArray !== undefined && page.items[0].iconArray[0] !== '') {
                                                                          tempIcon = page.items[0].iconArray[0];
                                                                      } else {
                                                                          tempIcon = 'power-standby';
                                                                      }
                                                                      if (States[Mode] == 'OFF' || !getState(id + '.POWER').val) {
                                                                          bt[0] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'POWER' + '~';
                                                                          statusStr = 'OFF';
                                                                      }
                                                                      else {
                                                                          bt[0] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'POWER' + '~';
                                                                      }
                                                                  }
                                                              }
                                                          }
                                                      }
                                          
                                                      let destTemp2 = '';
                                                      if (page.items[0].setThermoDestTemp2 != undefined) {
                                                          let setValue2 = getState(id + '.' + page.items[0].setThermoDestTemp2).val;
                                                          destTemp2 = '' + setValue2.toFixed(2) * 10;
                                                      }
                                          
                                                      let thermoPopup = 1;
                                                      if (page.items[0].popupThermoMode1 != undefined) {
                                                          thermoPopup = 0;
                                                      }
                                                      
                                                      let temperatureUnit = getState(NSPanel_Path + 'Config.temperatureUnit').val;
                                          
                                                      let icon_res = bt[0] + bt[1] + bt[2] + bt[3] + bt[4] + bt[5] + bt[6] + bt[7];
                                          
                                                      out_msgs.push({
                                                          payload: 'entityUpd~'
                                                              + name + '~'                                        // Heading
                                                              + GetNavigationString(pageId) + '~'                 // Page Navigation
                                                              + id + '~'                                          // internalNameEntity
                                                              + currentTemp + temperatureUnit+ '~'                // Ist-Temperatur (String)
                                                              + destTemp + '~'                                    // Soll-Temperatur (numerisch ohne Komma)
                                                              + statusStr + '~'                                   // Mode
                                                              + minTemp + '~'                                     // Thermostat Min-Temperatur
                                                              + maxTemp + '~'                                     // Thermostat Max-Temperatur
                                                              + stepTemp + '~'                                    // Schritte für Soll (5°C)
                                                              + icon_res                                      	// Icons Status
                                                              + findLocale('thermostat', 'Currently') + '~'       // Bezeichner vor Aktueller Raumtemperatur
                                                              + findLocale('thermostat', 'State') + '~~'          // Bezeichner vor State
                                                              + temperatureUnit + '~'                      	// iconTemperature dstTempTwoTempMode
                                                              + destTemp2 + '~'                                   // dstTempTwoTempMode --> Wenn Wert, dann 2 Temp
                                                              + thermoPopup                                       // PopUp
                                          
                                                      });
                                          
                                                  }
                                          
                                                  if (Debug) {
                                                      console.log('GenerateThermoPage payload: ' + out_msgs);
                                                  }
                                                  return out_msgs;
                                              } catch (err) {
                                                  console.warn('error at function GenerateThermoPage: ' + err.message);
                                              }
                                          }
                                          

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

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

                                          1 Reply Last reply
                                          1
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          730

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe