Navigation

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

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    SONOFF NSPanel mit Lovelace UI

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

      @armilar
      Also 0_userdata.0.NSPanel.1.Power.PowerCard ist angelegt und der json string ist drin.
      Beim blockly habe ich den Teil mit den Konstanten rausgenommen und im oberen Teil die Werte von meinem Senec adapter reingenommen.
      Ganz unten wird dann 0_userdata.0.NSPanel.1.Power.PowerCard mit dem json gesetzt, aber ohne ID 0, da die Schleife ja nur von 1 bis 6 geht.
      Gruß

      Hubert

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

        @carlos

        Die id: 0 muss dem Blockly noch hinzugefügt werden. Die visualisiert den mittleren Balken in der cardPower. Bei den meisten wahrscheinlich immer das gleiche.

        C 1 Reply Last reply Reply Quote 0
        • W
          watcherkb last edited by watcherkb

          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

          Den Trashschedule kannst du vergessen...

          nein das würde ich nicht unbedingt sagen. Ich habe das so hinbekommen. Siehe Blockly

          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

          Ich vermute mal die Stadt, Landkreis, Gemeinde oder was auch immer für so einen iCal zu verklagen bringt nix, oder?

          ärgert mich auch jedes Jahr aufs Neue. Aber verklagen...hmmm nee lass mal.

          @armilar sagte in SONOFF NSPanel mit Lovelace UI:

          Ich denke die Farbe rot (63488) ist im Moment dein kleinstes Problem. Aber ja, es gibt auch einen normalen Konverter:
          https://nodtem66.github.io/nextion-hmi-color-convert/index.html

          Danke. Damit bin ich mehr als zufrieden. Jetzt ist alles so wie ich das haben wollte.

          f616c2f8-8936-493c-8e31-2844736b685f-image.png

          <xml xmlns="https://developers.google.com/blockly/xml">
            <variables>
              <variable id="h}CE-n1lS|gRf(0K%./">i</variable>
              <variable id="j5C=K+Z.E:im1#q:;A=6">Muell_JSON</variable>
              <variable id="bz)nOPh@V8j9EuyGo#tR">Event</variable>
              <variable id="9^)S?J=tLkC7cUWc-u9w">Color</variable>
            </variables>
            <block type="on_ext" id="aFeZac36,?)=rfMg%3T|" x="102" y="-571">
              <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
              <field name="CONDITION">ne</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="GSzQ}epUa))me3m8yyuD">
                  <field name="oid">trashschedule.0.type.json</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="controls_for" id="wduAM(OBPzLJ@bfYAK5%">
                  <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                  <value name="FROM">
                    <shadow type="math_number" id="HK~R2U|xb$U5W+tsHpN">
                      <field name="NUM">0</field>
                    </shadow>
                  </value>
                  <value name="TO">
                    <shadow type="math_number" id="Ed[L/:1e9-cwxrRaZiIv">
                      <field name="NUM">3</field>
                    </shadow>
                  </value>
                  <value name="BY">
                    <shadow type="math_number" id="o@5kngFiPpvl5dGo@Q$9">
                      <field name="NUM">1</field>
                    </shadow>
                  </value>
                  <statement name="DO">
                    <block type="variables_set" id="0T)vK0k8aikvg7mF6XHo">
                      <field name="VAR" id="j5C=K+Z.E:im1#q:;A=6">Muell_JSON</field>
                      <value name="VALUE">
                        <block type="get_value" id="1~kG;UHn$nw2zzbfOIT]">
                          <field name="ATTR">val</field>
                          <field name="OID">trashschedule.0.type.json</field>
                        </block>
                      </value>
                      <next>
                        <block type="control_ex" id="UAu,2OBRJp9~Nzyxouyu">
                          <field name="TYPE">false</field>
                          <field name="CLEAR_RUNNING">FALSE</field>
                          <value name="OID">
                            <shadow type="field_oid" id="J_|uu;{e44n5Z-;qE+hP">
                              <field name="oid">Object ID</field>
                            </shadow>
                            <block type="text_join" id="8/|eHqk))j9Po-O*mKe">
                              <mutation items="3"></mutation>
                              <value name="ADD0">
                                <block type="text" id="Zp8GRfdfXujkeM41=PeZ">
                                  <field name="TEXT">0_userdata.0.Abfallkalender.</field>
                                </block>
                              </value>
                              <value name="ADD1">
                                <block type="math_arithmetic" id="$!!l@[eJ~4Kdb5/Imo.X">
                                  <field name="OP">ADD</field>
                                  <value name="A">
                                    <shadow type="math_number" id="zaU15{yD43xkuY@?)RY(">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="variables_get" id="o3pJ(+3KE~Co%u-dy.:W">
                                      <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <shadow type="math_number" id="_LBb[#z%M$n0~1Y}~8w+">
                                      <field name="NUM">1</field>
                                    </shadow>
                                  </value>
                                </block>
                              </value>
                              <value name="ADD2">
                                <block type="text" id="Vt#-b{iDzusQQx]#0%0,">
                                  <field name="TEXT">.date</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <value name="VALUE">
                            <shadow type="logic_boolean" id="/y1w}eely@o.gl$]#)o=">
                              <field name="BOOL">TRUE</field>
                            </shadow>
                            <block type="text_join" id="Ot@ht^^dx]t.dUS{D-q/">
                              <mutation items="3"></mutation>
                              <value name="ADD0">
                                <block type="text" id="SL}rWlk~qt@@3pdLc214">
                                  <field name="TEXT">in</field>
                                </block>
                              </value>
                              <value name="ADD1">
                                <block type="get_attr" id="p~0A1{eb$lD~.99R4K)">
                                  <value name="PATH">
                                    <shadow type="text">
                                      <field name="TEXT">0.date</field>
                                    </shadow>
                                    <block type="text_join" id="DDs!.^n(V7=A_TK}DFQt">
                                      <mutation items="2"></mutation>
                                      <value name="ADD0">
                                        <block type="variables_get" id="k1+Dybgb:u2y9v57OrCg">
                                          <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                                        </block>
                                      </value>
                                      <value name="ADD1">
                                        <block type="text" id="EXgB=?B}IKiUdQ.2tKoa">
                                          <field name="TEXT">.daysLeft</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <value name="OBJECT">
                                    <block type="variables_get" id="dzLb1f^T!(MM,d=cYU9y">
                                      <field name="VAR" id="j5C=K+Z.E:im1#q:;A=6">Muell_JSON</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <value name="ADD2">
                                <block type="text" id=")w#|wt0P9}b[r$B3-geY">
                                  <field name="TEXT"> Tage(n)</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <value name="DELAY_MS">
                            <shadow type="math_number" id="f8q~r@+q|8Kov#3EufsI">
                              <field name="NUM">0</field>
                            </shadow>
                          </value>
                          <next>
                            <block type="control_ex" id="]_w?GOU-5.~E-i6S#/y]">
                              <field name="TYPE">false</field>
                              <field name="CLEAR_RUNNING">FALSE</field>
                              <value name="OID">
                                <shadow type="field_oid">
                                  <field name="oid">Object ID</field>
                                </shadow>
                                <block type="text_join" id="1IWx]e}A.$qn9~[}SmRH">
                                  <mutation items="3"></mutation>
                                  <value name="ADD0">
                                    <block type="text" id="}}vqlPTz3IN2YehTE##l">
                                      <field name="TEXT">0_userdata.0.Abfallkalender.</field>
                                    </block>
                                  </value>
                                  <value name="ADD1">
                                    <block type="math_arithmetic" id="(A;_Uo2By37YrwU]9mFu">
                                      <field name="OP">ADD</field>
                                      <value name="A">
                                        <shadow type="math_number">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="variables_get" id=",2)MJ?8)IgaPI`_H|7{+">
                                          <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="Lqx[mK!|G-P}_}Re`aty">
                                          <field name="NUM">1</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </value>
                                  <value name="ADD2">
                                    <block type="text" id="zoz4l3;4A!og)lcQa{$e">
                                      <field name="TEXT">.event</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <value name="VALUE">
                                <shadow type="logic_boolean" id="s)#y}=/vy2(5j|pWMtdo">
                                  <field name="BOOL">TRUE</field>
                                </shadow>
                                <block type="text_join" id="vIN]{HQG+8bum%7aAuX|">
                                  <mutation items="2"></mutation>
                                  <value name="ADD0">
                                    <block type="get_attr" id="H~hW%jrPx3;)!8k_MzJC">
                                      <value name="PATH">
                                        <shadow type="text">
                                          <field name="TEXT">0.date</field>
                                        </shadow>
                                        <block type="text_join" id="ufEdj1$Wn(#o_]FG`X$q">
                                          <mutation items="2"></mutation>
                                          <value name="ADD0">
                                            <block type="variables_get" id="dHFn%XN=cKk@n=}+4a[u">
                                              <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                                            </block>
                                          </value>
                                          <value name="ADD1">
                                            <block type="text" id="J[}G3f:sbyCeFGWiN@h7">
                                              <field name="TEXT">.name</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <value name="OBJECT">
                                        <block type="variables_get" id="$)|%;_-Q9.ullt4-k?Y*">
                                          <field name="VAR" id="j5C=K+Z.E:im1#q:;A=6">Muell_JSON</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <value name="ADD1">
                                    <block type="text" id="95lxj}AqSKWZvz!%/s(6">
                                      <field name="TEXT">e Tonne</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <value name="DELAY_MS">
                                <shadow type="math_number" id="8jmxPB/ICrJtPos/}/79">
                                  <field name="NUM">0</field>
                                </shadow>
                              </value>
                              <next>
                                <block type="variables_set" id="%EBcjrb4WrQuDQW#Z(FO">
                                  <field name="VAR" id="bz)nOPh@V8j9EuyGo#tR">Event</field>
                                  <value name="VALUE">
                                    <block type="get_attr" id=";__m$h8Yy1=2Y~r~QE_[">
                                      <value name="PATH">
                                        <shadow type="text">
                                          <field name="TEXT">0.date</field>
                                        </shadow>
                                        <block type="text_join" id="M@!Nitlt:hsg0rwnvzI5">
                                          <mutation items="2"></mutation>
                                          <value name="ADD0">
                                            <block type="variables_get" id="n0?tH}eUFPZ)bIDfeN+?">
                                              <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                                            </block>
                                          </value>
                                          <value name="ADD1">
                                            <block type="text" id=")a0G8E@fOVM$`)t*RpD*">
                                              <field name="TEXT">.name</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <value name="OBJECT">
                                        <block type="variables_get" id="bAfJR^zv_5f.5u#!5g(m">
                                          <field name="VAR" id="j5C=K+Z.E:im1#q:;A=6">Muell_JSON</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="controls_if" id="tXaayC+p1w53M0p2$Qz{">
                                      <mutation elseif="3"></mutation>
                                      <value name="IF0">
                                        <block type="logic_compare" id="Gf?a-8/nEptmd/W(1?AZ">
                                          <field name="OP">EQ</field>
                                          <value name="A">
                                            <block type="variables_get" id="mnE+_j#S55)5tkMyBszO">
                                              <field name="VAR" id="bz)nOPh@V8j9EuyGo#tR">Event</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="text" id="l@ux*P`cj+uhYDUGk_zC">
                                              <field name="TEXT">Rot</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="variables_set" id="`k#VGEVT;q9bd;8%=m44">
                                          <field name="VAR" id="9^)S?J=tLkC7cUWc-u9w">Color</field>
                                          <value name="VALUE">
                                            <block type="text" id="eMh`#rerG7QHO$9^C,HJ">
                                              <field name="TEXT">63488</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                      <value name="IF1">
                                        <block type="logic_compare" id="N+,K`:%@6Xx4vfdpkAE$">
                                          <field name="OP">EQ</field>
                                          <value name="A">
                                            <block type="variables_get" id="|vZqHsotUp9ckk[y|hX@">
                                              <field name="VAR" id="bz)nOPh@V8j9EuyGo#tR">Event</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="text" id="^T04d,^Fc%-L-YjzT,uL">
                                              <field name="TEXT">Grün</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO1">
                                        <block type="variables_set" id="7+%yuK|ZU51VG.~UAPX|">
                                          <field name="VAR" id="9^)S?J=tLkC7cUWc-u9w">Color</field>
                                          <value name="VALUE">
                                            <block type="text" id="rF#S_)zhcIR,({D:,6Gg">
                                              <field name="TEXT">2016</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                      <value name="IF2">
                                        <block type="logic_compare" id="~rONaO{}7ailk.P#ulR^">
                                          <field name="OP">EQ</field>
                                          <value name="A">
                                            <block type="variables_get" id="-B;/3`+B8|a:k2dt51|,">
                                              <field name="VAR" id="bz)nOPh@V8j9EuyGo#tR">Event</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="text" id="}qRYFseQ;p`M[$.%NXmm">
                                              <field name="TEXT">Blau</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO2">
                                        <block type="variables_set" id="_UGXuK6.EG~z[b473Li3">
                                          <field name="VAR" id="9^)S?J=tLkC7cUWc-u9w">Color</field>
                                          <value name="VALUE">
                                            <block type="text" id="T**J}r52Y?EOO,*TI8/V">
                                              <field name="TEXT">31</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                      <value name="IF3">
                                        <block type="logic_compare" id="acD,Sm68eG7q|b~HE(;%">
                                          <field name="OP">EQ</field>
                                          <value name="A">
                                            <block type="variables_get" id="S@qV6E6CP;#L-p15YxC5">
                                              <field name="VAR" id="bz)nOPh@V8j9EuyGo#tR">Event</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="text" id="SZZwEr}.Gx*`Cfs4eD5i">
                                              <field name="TEXT">Gelb</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO3">
                                        <block type="variables_set" id="Fg:grnG/RPtFEm+):MXY">
                                          <field name="VAR" id="9^)S?J=tLkC7cUWc-u9w">Color</field>
                                          <value name="VALUE">
                                            <block type="text" id="?!wdhxoplCDsUalc7tHn">
                                              <field name="TEXT">65504</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                      <next>
                                        <block type="control_ex" id="86u,p}Dxgze{r!N_tOrS">
                                          <field name="TYPE">false</field>
                                          <field name="CLEAR_RUNNING">FALSE</field>
                                          <value name="OID">
                                            <shadow type="field_oid">
                                              <field name="oid">Object ID</field>
                                            </shadow>
                                            <block type="text_join" id="k/AbJMF4QuH#-t6yNWQq">
                                              <mutation items="3"></mutation>
                                              <value name="ADD0">
                                                <block type="text" id="UX(FqRfcaRtglU)#0Ec,">
                                                  <field name="TEXT">0_userdata.0.Abfallkalender.</field>
                                                </block>
                                              </value>
                                              <value name="ADD1">
                                                <block type="math_arithmetic" id="[VKD(T)Iu`[%0,`LaO;9">
                                                  <field name="OP">ADD</field>
                                                  <value name="A">
                                                    <shadow type="math_number">
                                                      <field name="NUM">1</field>
                                                    </shadow>
                                                    <block type="variables_get" id="/fJro16A:Q}{xj-y=5Op">
                                                      <field name="VAR" id="h}CE-n1lS|gRf(0K%./">i</field>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <shadow type="math_number" id=".5Y^SD+M#T@GvtGLkw8x">
                                                      <field name="NUM">1</field>
                                                    </shadow>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="ADD2">
                                                <block type="text" id="`BX]qTGgRz$%?lj:xf~Z">
                                                  <field name="TEXT">.color</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="VALUE">
                                            <shadow type="logic_boolean">
                                              <field name="BOOL">TRUE</field>
                                            </shadow>
                                            <block type="variables_get" id="V635SZTnwPASkZb%7EG1">
                                              <field name="VAR" id="9^)S?J=tLkC7cUWc-u9w">Color</field>
                                            </block>
                                          </value>
                                          <value name="DELAY_MS">
                                            <shadow type="math_number" id="bF4s2sRvXL?HTka(MqfW">
                                              <field name="NUM">0</field>
                                            </shadow>
                                          </value>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </xml>
          
          Armilar 1 Reply Last reply Reply Quote 0
          • Armilar
            Armilar Most Active Forum Testing @watcherkb last edited by

            @watcherkb 👍

            1 Reply Last reply Reply Quote 0
            • C
              carlos @Armilar last edited by

              @armilar
              Das dachte ich mir schon, aber wie mache ich das.
              Bin leider nicht so fit im blockly programmieren.

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

                @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                Kommt jetzt darauf an, was wie gesteuert werden soll. Ich sag es mal so - wenn es einen Heizungs-Aktor gibt der gesteuert werden kann, dann hat der minimalistisch einen On/Off mit true/false. Dann kann es natürlich mit dem NSPanel gesteuert werden.
                Am Panel stellst du eine Zieltemperatur (mit eigenem Datenunkt in 0_userdata) ein und kannst auch die interne Temperatur (Die Temperatur wird vom TS-Script in 0_userdata bei Veränderung in einen DP geschrieben) abgreifen:

                Danke, ich glaube, das war dann der springende Punkt - ich kann also eine cardThermo auch benutzen, ohne wirklich einen "richtigen" Thermostaten im Alias zu haben, sondern DPs für Ziel-Temp. und Relais plus Script genügen. Dann probier' ich das doch mal... 🙂

                Btw, der Sonoff-Sprech für NSPanel lässt mich schon erwarten, dass das Ding "selfcontained" Thermostat spielen kann:

                Equipped with a built-in powerful thermostat, and environmental sensors, the NSPanel picks up the surrounding temperature and lets you trigger your heating or cooling appliances so that they always automatically keep the room temperature stable and adjust to the preferred temperature.

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

                  @jleg

                  Ja das ist der Vorteil der Alias-Struktur... Dem TS-Script und dem NSPanel ist es völlig egal was für eine Gerät am anderen Ende hängt. Und auch völlig egal, ob es eine "echtes" oder ein "virtuelles" Gerät ist.

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

                    @carlos

                    ich erweitere das Blockly-Beispiel (evtl. heute Abend kurz) um die id: 0

                    Dann melde ich mich nochmal dazu ...

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

                      @carlos

                      Ist zwar noch nicht ganz Abend 😉 , aber ich habe mal einen statischen Block für id: 0 eingefügt:

                      Blockly:
                      https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/ioBroker/Blockly/CardPower_Emulator_Skript.xml

                      Einfach den "gelben" Block einsetzen:

                      70ed740c-1dde-467e-8fe7-a14e0abab94a-image.png

                      Sieht dann so aus:
                      78234f26-953a-4ce8-ba7a-157525a5696b-image.png

                      Einfach mal aus dem DP herauskopiert (exemplarisch)

                      [
                        {
                          "id": 0,
                          "value": "",
                          "unit": "",
                          "icon": "home",
                          "iconColor": 0
                        },
                        {
                          "id": 1,
                          "value": 3,
                          "unit": "kW",
                          "direction": "in",
                          "icon": "battery-charging-60",
                          "iconColor": 10,
                          "speed": -3
                        },
                        {
                          "id": 2,
                          "value": 4.7,
                          "unit": "kW",
                          "direction": "in",
                          "icon": "solar-power-variant",
                          "iconColor": 3,
                          "speed": 2
                        },
                        {
                          "id": 3,
                          "value": 4.5,
                          "unit": "kW",
                          "direction": "in",
                          "icon": "wind-turbine",
                          "iconColor": 1,
                          "speed": 3
                        },
                        {
                          "id": 4,
                          "value": 1.9,
                          "unit": "kW",
                          "direction": "in",
                          "icon": "shape",
                          "iconColor": 10,
                          "speed": 3
                        },
                        {
                          "id": 5,
                          "value": 2.9,
                          "unit": "kW",
                          "direction": "in",
                          "icon": "transmission-tower",
                          "iconColor": 0,
                          "speed": 2
                        },
                        {
                          "id": 6,
                          "value": 1.4,
                          "unit": "kW",
                          "direction": "in",
                          "icon": "car",
                          "iconColor": 3,
                          "speed": 3
                        }
                      ]
                      
                      C 1 Reply Last reply Reply Quote 0
                      • R
                        ronny130286 @Armilar last edited by ronny130286

                        @armilar

                        Ja so ist es wäre es richtig 😉

                        So sieht meine Änderung aus => Änderungen sind dort wo Monobutton seht
                        Mein Alias hat dann den zusätzlichen .STATE bekommen, wo von der SPS der eigentliche Ausgange abgefragt wird (der macht dann den Status)

                        panel.ts

                        ggf. kannst du es gleich so übernehmen, ich würde aber auch deine Lösung testen, am besten schreibst mich per PN an 😉
                        Vielleicht kannst du auch gleich das Display Update für die verschieden Panels US-L, US-P, EU mit übernehmen 🙂

                        @ronny130286 said in SONOFF NSPanel mit Lovelace UI:

                        Gibt es eigentlich eine Möglichkeit einen Monobutton (true/false) einzubinden?
                        Weil es steht immer noch oben in der Beschreibung:

                        Taste               - Für Szenen oder Radiosender, etc. --> Nur Funktionsaufruf - Kein Taster wie MonoButton - True/False
                        

                        Dann ist mir noch ein kleiner Bug im Script aufgefallen, die Funktion vom Display Update ignoriert die eigentlich Version des Displays.
                        Ich habe mehrere Panels im Einsatz unter anderem auch die US-L Version, leider zerknallt er dann immer die Software auf dem Display 😞
                        Kann man die Abfrage nicht noch zusätzlich einpflegen, dass auch wirklich nur die Software genommen wird welche das Panel auch benötigt?

                        Edit:
                        habe die Funktion mal angepasst:

                        function update_tft_firmware() {
                            const tft_version: string = 'v3.8.1';
                            let desired_display_firmware_url =""
                        
                            if(getState(NSPanel_Path + '.NSPanel_Version').val =="us-l"){
                                desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-${tft_version}.tft`;
                            }else if (getState(NSPanel_Path + '.NSPanel_Version').val =="us-p"){
                                desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-${tft_version}.tft`;
                            }else{
                                desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-${tft_version}.tft`;
                            }
                            
                            try {
                        
                                let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`;
                                if (tasmota_web_admin_password != '') {
                                    urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=FlashNextion ${desired_display_firmware_url}`;
                                }
                        
                                request({
                                    url: `${urlString}`,
                                    headers: {
                                        'User-Agent': 'ioBroker'
                                    }
                                }, async function () {
                                    await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
                                    await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: tft_version, ack: true });
                                });
                            } catch (err) {
                                console.warn('error at function update_tft_firmware: ' + err.message);
                            }
                        }
                        

                        Ich habe noch eine Kleinigkeit festgestellt (bin mir auch nicht sicher ob das schon immer war) aber scheinbar werden die States doppelt gesetzt und es kommt zum hin und her hüpfen (siehe Video) 20230109-190214_gzDhsaJe.mp4

                        Wenn ich richtig liegt entsteht das verhalten durch die

                        function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = false): string {
                        

                        an der Stelle:

                        // Fallback if no name is given
                                    name = pageItem.name !== undefined ? pageItem.name : o.common.name.de;
                                            
                                    if (existsState(pageItem.id + '.GET')) {
                                        val = getState(pageItem.id + '.GET').val;
                                        RegisterEntityWatcher(pageItem.id + '.GET');
                                    }
                                    // Änderung für Monobutton
                        			if (existsState(pageItem.id + ".STATE")) {
                        				val = getState(pageItem.id + ".STATE").val;
                        				RegisterEntityWatcher(pageItem.id + ".STATE");
                                    }
                                    if (existsState(pageItem.id + '.SET') && !existsState(pageItem.id + ".STATE")) {
                                        val = getState(pageItem.id + '.SET').val;
                                        RegisterEntityWatcher(pageItem.id + '.SET');
                                    } 
                        			// Änderung für Monobutton
                                    if (existsState(pageItem.id + '.ACTUAL')) {
                                        val = getState(pageItem.id + '.ACTUAL').val;
                                        RegisterEntityWatcher(pageItem.id + '.ACTUAL');
                                    }
                                    if (existsState(pageItem.id + '.ON_ACTUAL')) {
                                        val = getState(pageItem.id + '.ON_ACTUAL').val;
                                        RegisterEntityWatcher(pageItem.id + '.ON_ACTUAL');
                                    } 
                                    if (existsState(pageItem.id + '.ON_SET')) {
                                        val = getState(pageItem.id + '.ON_SET').val;
                                        RegisterEntityWatcher(pageItem.id + '.ON_SET');
                                    }
                                    if (existsState(pageItem.id + '.ON')) {
                                        val = getState(pageItem.id + '.ON').val;
                                        RegisterEntityWatcher(pageItem.id + '.ON');
                                    }
                        

                        sobald bsp. .Set und .ACTUAL im Alias hat dann scheint das aufzutreten
                        Quick und dirt würde mir einfallen

                                    let onlyOneState = 0;
                        
                                    if (existsState(pageItem.id + '.GET')) {
                                        onlyOneState = 1;
                                        val = getState(pageItem.id + '.GET').val;
                                        RegisterEntityWatcher(pageItem.id + '.GET');
                                    }
                                    // Änderung für Monobutton
                        			if (existsState(pageItem.id + ".STATE") && onlyOneState==0) {
                                        onlyOneState = 1;
                        				val = getState(pageItem.id + ".STATE").val;
                        				RegisterEntityWatcher(pageItem.id + ".STATE");
                                    }
                                    if (existsState(pageItem.id + '.SET') && !existsState(pageItem.id + ".STATE") && onlyOneState==0) {
                                        onlyOneState = 1;
                                        val = getState(pageItem.id + '.SET').val;
                                        RegisterEntityWatcher(pageItem.id + '.SET');
                                    }
                                    // Änderung für Monobutton 
                                    if (existsState(pageItem.id + '.ACTUAL') && onlyOneState==0) {
                                        onlyOneState = 1;
                                        val = getState(pageItem.id + '.ACTUAL').val;
                                        RegisterEntityWatcher(pageItem.id + '.ACTUAL');
                                    }
                                    if (existsState(pageItem.id + '.ON_ACTUAL') && onlyOneState==0) {
                                        onlyOneState = 1;
                                        val = getState(pageItem.id + '.ON_ACTUAL').val;
                                        RegisterEntityWatcher(pageItem.id + '.ON_ACTUAL');
                                    } 
                                    if (existsState(pageItem.id + '.ON_SET') && onlyOneState==0) {
                                        onlyOneState = 1;
                                        val = getState(pageItem.id + '.ON_SET').val;
                                        RegisterEntityWatcher(pageItem.id + '.ON_SET');
                                    }
                                    if (existsState(pageItem.id + '.ON') && onlyOneState==0) {
                                        onlyOneState = 1;
                                        val = getState(pageItem.id + '.ON').val;
                                        RegisterEntityWatcher(pageItem.id + '.ON');
                                    }
                        
                        Armilar 1 Reply Last reply Reply Quote 0
                        • Armilar
                          Armilar Most Active Forum Testing @ronny130286 last edited by Armilar

                          @ronny130286 sagte in SONOFF NSPanel mit Lovelace UI:

                          Vielleicht kannst du auch gleich das Display Update für die verschieden Panels US-L, US-P, EU mit übernehmen

                          Habe ich bereits gestern eingefügt 😉

                          ggf. kannst du es gleich so übernehmen, ich würde aber auch deine Lösung testen.

                          Brauchst meine Lösung nicht testen. Ich hätte da keine Zeile anders gemacht 😉 . Ist Top so und wandert 1:1 in den Code.

                          Ich habe noch eine Kleinigkeit festgestellt (bin mir auch nicht sicher ob das schon immer war) aber scheinbar werden die States doppelt gesetzt und es kommt zum hin und her hüpfen (siehe Video) 20230109-190214_gzDhsaJe.mp4
                          Wenn ich richtig liegt entsteht das verhalten durch die

                          Wie ist denn das Verhalten des Aktors? Wenn du den Switch bedienst, schaltet die Lampe dann auch? Oder ist das nur das Steuerelement?

                          Für das Verhalten gibt es zwei Ansätze:

                          • Es läuft noch ein anderes Script im Hintergrund
                          • Es liegt irgendwo ein anderer Trigger, der den gleichen State Datenpunkt verändert.

                          Der RegisterEntityWatcher ist ja nur ein Trigger, der erkennt, ob sich der Zustand .State verändert hat. Wenn der also hüpft, dann wird der Zustand des Aktors an anderer Stelle nochmals verändert und der Trigger greift mehrfach.

                          EDIT:
                          Der Fehler wird vermutlich im .ON_SET ausgelöst, da der true und false mitbekommt (Abstand 250ms). Der wird 2x Triggern. Bekommen wir aber mit einem 300ms Timeout wieder raus.

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            ronny130286 @Armilar last edited by ronny130286

                            @armilar
                            Also er schaltet sauber die Lampe ein nur der Status flackert. Mir ist nur aufgefallen bei meiner Änderung zum Monobutton ist es nicht da ich ja hier die den .Set und .State verriegelt habe

                                      // Änderung für Monobutton
                            	   if (existsState(pageItem.id + ".STATE") ) {
                            		val = getState(pageItem.id + ".STATE").val;
                            		RegisterEntityWatcher(pageItem.id + ".STATE");
                                        }
                                        if (existsState(pageItem.id + '.SET') && !existsState(pageItem.id + ".STATE") ) {
                                            val = getState(pageItem.id + '.SET').val;
                                            RegisterEntityWatcher(pageItem.id + '.SET');
                                        }
                                        // Änderung für Monobutton 
                            

                            Ich hatte mal im RegisterEntityWatcher einen Log eingebaut

                            console.log("RegEntityWatcher wurde aufgerufen: " + id)
                            

                            , da sieht man das ein Alias 2x den RegisterEntityWatcher triggert

                            Ist denke ich nur Kosmetik 😉

                            EDIT:
                            @armilar said in SONOFF NSPanel mit Lovelace UI:

                            EDIT:
                            Der Fehler wird vermutlich im .ON_SET ausgelöst, da der true und false mitbekommt (Abstand 250ms). Der wird 2x Triggern. Bekommen wir aber mit einem 300ms Timeout wieder raus.

                            ich glaube das kommt von den If Bedingungen im function CreateEntity, da ich in einem Alias mehrere States habe die es nach der If-Bedingung gibt.
                            Also hat ein Alias bei mir ein .Set 1. RegisterEntityWatcher hat er dann noch ein .ACTUAL 2. RegisterEntityWatcher für ein und das selbe Item auf der Page.

                            Ich habe gerade mal in mein Backup von älteren Scripten geschaut, dort waren das noch If Else IF Else If Bedingungen, da könnte ich mir vorstellen das er den RegisterEntityWatcher nur einmal gestartet hat

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

                              @ronny130286

                              Da hat er leider auch nicht alle Trigger-Events verarbeitet. Ich teste das mal mit einem virtuellen Taster.

                              Wenn du etwas findest, dann poste es.

                              Habe in Zeile 4046 noch ein "S" bei ON_SET hinzugefügt. Ist irgendwie verloren gegangen aber für die meisten doch nicht so ganz unwichtig ;--)

                              R 1 Reply Last reply Reply Quote 0
                              • C
                                c3b @TT-Tom last edited by c3b

                                @tt-tom Hi Leutz
                                Ich noch mal. Ich bin leider noch nicht weiter. Ich habe die drei Datenpunkte angelegt und stecke jetzt bei den Alias fest. Sobald ich einen Alias als Tastensensor anlege, kommt eine leere Seite, anstatt der Zuordnungsliste. Dann kann ich ihn nur noch löschen. Sperrt der iobroker Datenpunkte, wenn sie schon einmal angelegt waren? Ich habe es schon ein paar mal versucht und immer wieder gelöscht.
                                Kennt das Problem jemand? Hab den iobroker schon einmal neu gestartet. Bringt aber nichts. Wenn ich einen anderen Namen nehme, geht es. Ich bekomme aber den DP value nicht angelegt. Deshalb habe ich den DP auch immer wieder gelöscht.

                                Im Protokoll steht folgender Eintrag:

                                	Alias alias.0.Küche.WLED.Gerät_2.PRESS has no target 9
                                javascript.0
                                	2023-01-09 20:44:35.442	warn	Could not add alias subscription: Alias alias.0.Küche.WLED.Gerät_2.PRESS has no target 12
                                javascript.0
                                	2023-01-09 20:44:35.442	warn	Alias alias.0.Küche.WLED.Gerät_2.PRESS has no target 12
                                

                                Ist ja auch klar, da ich die Zuordnungstabelle nicht angezeigt bekomme.

                                LG aus dem Sauerland

                                Armilar 1 Reply Last reply Reply Quote 0
                                • R
                                  ronny130286 @Armilar last edited by

                                  @armilar
                                  Konntest du das Verhalten aus dem Video auch erzeugen? Kann auch sein das es nur bei mir ist.

                                  Das "S" habe ich auch wieder hinzugefügt 😄

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

                                    @ronny130286

                                    Nee, habe ich jetzt mit der Code-Änderung auch... nicht mal mit Taster

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

                                      @c3b sagte in SONOFF NSPanel mit Lovelace UI:

                                      mt eine leere Seite, anstatt der Zuordnungsliste. Dann kann ich ihn nur noch löschen. Sperrt der iobroker Datenpunkte, wenn sie schon einmal angelegt waren? Ich habe es schon ein paar mal versucht und immer wieder gelöscht.
                                      Kennt das Problem jemand? Hab den iobroker schon einmal neu gestartet. Bringt aber nichts. Wenn ich einen anderen Namen nehme, geht es. Ich bekomme aber den DP value nicht angelegt. Deshalb habe ich den DP auch immer wieder gelöscht.
                                      Im Protokoll steht folgender Eintrag:

                                      Du hast bestimmt die Version 1.1.2 vom Geräte-Manager installiert. Die ist sowas von kaputt...

                                      Mach mal ein Downgrade von dem Adapter auf die 1.1.1

                                      Danach kannst du den .VALUE anlegen

                                      EDIT: Ist zwar nicht das Problem, aber versuche Umlaute in Alias-Namen zu vermeiden. Kueche statt Küche. Im PageItem kannst du wieder name: 'Küche...' verwenden

                                      1 Reply Last reply Reply Quote 0
                                      • R
                                        ronny130286 @Armilar last edited by ronny130286

                                        @armilar

                                        dann ist das bei mir durch den Alias, wo es mir aufgefallen ist dieser sieht so aus: c684c2b0-ac99-4daf-a10c-0d3073e832c2-image.png

                                        21:08:33.181	info	javascript.0 (3893) script.js.NSPanel.NSPanelTest: RegEntityWatcher wurde aufgerufen: alias.0.Licht.Terrasse.SET
                                        21:08:33.182	info	javascript.0 (3893) script.js.NSPanel.NSPanelTest: RegEntityWatcher wurde aufgerufen: alias.0.Licht.Terrasse.ACTUAL
                                        
                                        Armilar 2 Replies Last reply Reply Quote 0
                                        • Armilar
                                          Armilar Most Active Forum Testing @ronny130286 last edited by

                                          @ronny130286

                                          schießt bei meinen sogar 4x

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

                                            @ronny130286

                                            bau mal ein else vor den ACTUAL

                                                       if (existsState(pageItem.id + '.SET')  && !existsState(pageItem.id + '.STATE')) { //Bei MonoButton
                                                            console.log('.SET hat getriggert');
                                                            val = getState(pageItem.id + '.SET').val;
                                                            RegisterEntityWatcher(pageItem.id + '.SET');
                                                        } 
                                                        else if (existsState(pageItem.id + '.ACTUAL')) {
                                                            val = getState(pageItem.id + '.ACTUAL').val;
                                                            RegisterEntityWatcher(pageItem.id + '.ACTUAL');
                                                        }
                                            
                                            R 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            950
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

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