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

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    SONOFF NSPanel mit Lovelace UI

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      PROcrastinator @TT-Tom last edited by

      @tt-tom Das es nicht in die Zukunft sehen kann ist mir klar. Aber ist es möglich die X Achse von 0 bis 0 Uhr zu fixieren und während des Tages dann die Daten aufzufüllen?

      Mein Skript:

      const sourceDP = 'alias.0.NSPanel_1.Sensor_temp_gewächshaus.ACTUAL';
      const targetDP = '0_userdata.0.NSPanel.1.Charts.Temp_Gewächshaus';
      const numberOfHoursAgo = 24;   // Period of time in hours which shall be visualized 
      const xAxisTicksEveryM = 240;   // Time after x axis gets a tick in minutes
      const xAxisLabelEveryM = 240;  // Time after x axis is labeled in minutes
      const historyInstance = 'history.0';
      //const date = new Date();
      //const start_date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
      //const end_date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
       
      
      const Debug = false;
      const maxX = 1420;
      const limitMeasurements = 35;
      
      createState(targetDP, "", {
              name: 'SensorGrid',
              desc: 'Sensor Values [~<time>:<value>]*',
              type: 'string',
              role: 'value',
      });
      
      on({id: sourceDP, change: "any"}, async function (obj) {
                      let date = new Date;
                      let start_date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
                      let end_date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
                      
                  
                      sendTo(historyInstance, 'getHistory', {
                          id: sourceDP,
                              options: {
                              start:    start_date, 
                              end:      end_date,
                              count:     limitMeasurements,
                              limit:     limitMeasurements,
                              aggregate: 'average'
                          }
                      }, function (result) {
                          var ticksAndLabels = ""
                          var coordinates = "";
                          var cardLChartString = "";
                  
                          let ticksAndLabelsList = []
                          var ts = Math.round(start_date.getTime() / 1000);
                          var tsYesterday = Math.round(end_date.getTime() / 1000);
                          
                          for (var x = tsYesterday, i = 0; x < ts; x += (xAxisTicksEveryM * 60), i += xAxisTicksEveryM)
      
              {
                  if (i % xAxisLabelEveryM) 
                  {
                      ticksAndLabelsList.push(i);
                  } else 
                  {
                      var currentDate = new Date(x * 1000);
                      // Hours part from the timestamp
                      var hours = "0" + currentDate.getHours();
                      // Minutes part from the timestamp
                      var minutes = "0" + currentDate.getMinutes();
                      // Seconds part from the timestamp
                      var seconds = "0" + currentDate.getSeconds();
                      var formattedTime = hours.slice(-2) + ':' + minutes.slice(-2);
                      ticksAndLabelsList.push(String(i) + "^" + formattedTime);
                  }
              }
              ticksAndLabels = ticksAndLabelsList.join("+");        
      
              let list = [];
              let offSetTime = Math.round(result.result[0].ts / 1000);
              let counter = Math.round((result.result[result.result.length -1 ].ts / 1000 - offSetTime) / maxX);        
              for (var i = 0; i <  result.result.length; i++) 
              {           
                  var time = Math.round(((result.result[i].ts / 1000) - offSetTime) / counter);
                  var value = Math.round(result.result[i].val * 10);
                  if ((value != null) && (value != 0)){
                      list.push(time + ":" + value)
                  }
              }
      
              coordinates = list.join("~");
              cardLChartString = ticksAndLabels + '~' + coordinates
              setState(targetDP, cardLChartString, true);
              
              if (Debug) console.log(cardLChartString);
          });    
      });
      

      Und das Objekt:

      ~33:229~100:222~167:219~234:214~300:209~367:203~500:195~567:192~634:197~701:208~767:224~834:235~901:250~967:292~1034:287~1101:294~1168:306~1234:323~1301:323~1368:324~1434:333
      

      Und die fesgelegte Skalierung im Panel Skript:

      let Temp_Gewaechshaus = <PageChart>
      {
          "type": "cardLChart",
          "heading": "Gewächshaus",
          "useColor": true,
          'items': [<PageItem>{ 
                      id: 'alias.0.NSPanel_1.Chart_temp_gewaechshaus',
                      yAxis: 'Temperatur [°C]',
                      yAxisTicks: [0,50, 100, 150, 200,250, 300,350, 400],
                      onColor: Yellow
                   }]
      };
      

      Ich habe das Skript auch durchsucht, ob da irgendwo die Skalierung weiter unten nochmal auftaucht aber habe nix gefunden.
      Vielen Dank, Roland

      T 1 Reply Last reply Reply Quote 0
      • T
        TT-Tom @PROcrastinator last edited by

        @procrastinator sagte in SONOFF NSPanel mit Lovelace UI:

        for (var x = tsYesterday, i = 0; x < ts; x += (xAxisTicksEveryM * 60), i += xAxisTicksEveryM)
        

        bitte ändern, da dein Diagramm vorwärts zählt

        for (var x = ts, i = 0; x < tsYesterday; x += (xAxisTicksEveryM * 60), i += xAxisTicksEveryM)
        

        mit der Y-Achse gibt es schon ein Issue von mir, es werden auch keine negativen Werte angezeigt. Kannst dich ja mit ran hängen.

        P 1 Reply Last reply Reply Quote 0
        • D
          danny_v1 last edited by

          @tt-tom Hatte ich schon mal aber da gab es keine richtige Antwort.

          Ich hab ein kleines Blockly gemacht, welches die Sekunden in eine Zeit umwandelt. Ich muss da nur noch einen Umschalter reinmachen ob der Timer ein Timer ist oder eine Uhrzeit, damit die Uhrzeit nicht runter gezählt wird sobald sie eingestellt ist.

          <xml xmlns="https://developers.google.com/blockly/xml">
            <variables>
              <variable id="86:D-8adXijp2={gDX23">min</variable>
              <variable id="r9w9}E;K]NRS:pL{,V%4">std</variable>
            </variables>
            <block type="on_ext" id="!*|$z^H*ZXYt?sTK*chm" x="113" y="-587">
              <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="3SKRKl%A3kg+R46C@SrH">
                  <field name="oid">0_userdata.0.Timer.ACTUAL</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="controls_if" id="W6j|lu.e?F64/a5R2+!/">
                  <mutation elseif="1"></mutation>
                  <value name="IF0">
                    <block type="logic_compare" id="dPXpAnMtYN|vo{ZN@DRD">
                      <field name="OP">GT</field>
                      <value name="A">
                        <block type="on_source" id="q%h;;.j:aF8eLOq0W)fx">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="he4I6e,jS?x1P-coYg^,">
                          <field name="NUM">59</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="variables_set" id="4HBrdd2#s0t5dUuWCV]~">
                      <field name="VAR" id="86:D-8adXijp2={gDX23">min</field>
                      <value name="VALUE">
                        <block type="math_modulo" id="WyYd?3;TUi[Kj9N;RmA#">
                          <value name="DIVIDEND">
                            <shadow type="math_number" id="tt^3A#VF#m;Gx;b:9XAg">
                              <field name="NUM">64</field>
                            </shadow>
                            <block type="on_source" id="}%42#6@f[Qz95@2:Lpd[">
                              <field name="ATTR">state.val</field>
                            </block>
                          </value>
                          <value name="DIVISOR">
                            <shadow type="math_number" id=".?7hFOLfC.1YQ/rTW;k?">
                              <field name="NUM">60</field>
                            </shadow>
                          </value>
                        </block>
                      </value>
                      <next>
                        <block type="variables_set" id="Hh;MTmaxBD^(@s$]K!+b">
                          <field name="VAR" id="r9w9}E;K]NRS:pL{,V%4">std</field>
                          <value name="VALUE">
                            <block type="math_arithmetic" id="%Pxsz^z:`Mk[Xh1{@ZO.">
                              <field name="OP">DIVIDE</field>
                              <value name="A">
                                <shadow type="math_number" id="?XvM(/Z9rJaq_ByB;-1[">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="math_arithmetic" id="Jwo8Gdsf6DZ*}M~2bWGw">
                                  <field name="OP">MINUS</field>
                                  <value name="A">
                                    <shadow type="math_number" id="o@Ul)m+x=)jF0lth.WFY">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="on_source" id="I#VoJa5*b[jW|6-Xs2XC">
                                      <field name="ATTR">state.val</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <shadow type="math_number" id="F`mWn%m$vLIkOw)!z$9O">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="variables_get" id="yj#G1*{JMSv%[.EgGLpY">
                                      <field name="VAR" id="86:D-8adXijp2={gDX23">min</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <value name="B">
                                <shadow type="math_number" id="tO2o(96fy:qz!j)X}2kc">
                                  <field name="NUM">60</field>
                                </shadow>
                              </value>
                            </block>
                          </value>
                        </block>
                      </next>
                    </block>
                  </statement>
                  <value name="IF1">
                    <block type="logic_compare" id="bbBvgb;%w7.;$TL8gcXc">
                      <field name="OP">LTE</field>
                      <value name="A">
                        <block type="on_source" id="@{!BfD!,1MGg0JjPX`/@">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="r}]UJd|1{2B27+@L|frZ">
                          <field name="NUM">59</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO1">
                    <block type="variables_set" id="y!YFxqxr,A[jgGh)Jn5Q">
                      <field name="VAR" id="86:D-8adXijp2={gDX23">min</field>
                      <value name="VALUE">
                        <block type="on_source" id=",Az_K{xVZWGMGEy6MuU-">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                  <next>
                    <block type="control" id="tOGxdGp,[2b$rHwHUp{v">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">0_userdata.0.Timer.Zeit.std</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="variables_get" id="vMtU^(jbol6i,-I.X.a%">
                          <field name="VAR" id="r9w9}E;K]NRS:pL{,V%4">std</field>
                        </block>
                      </value>
                      <next>
                        <block type="control" id="Zz[)mx.;P1$=RD3TrsFs">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">0_userdata.0.Timer.Zeit.min</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="variables_get" id="Ol~.{Zw2xyMb@R2OFP`7">
                              <field name="VAR" id="86:D-8adXijp2={gDX23">min</field>
                            </block>
                          </value>
                          <next>
                            <block type="control" id="w5?op69x/#WL)ChDImu#">
                              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                              <field name="OID">0_userdata.0.Timer.Zeit.Zeit</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="text_join" id="Dz..P0PH}U+y*,=x.[2M">
                                  <mutation items="5"></mutation>
                                  <value name="ADD0">
                                    <block type="variables_get" id=",E+RX=qXxg79m#+J=X6G">
                                      <field name="VAR" id="r9w9}E;K]NRS:pL{,V%4">std</field>
                                    </block>
                                  </value>
                                  <value name="ADD1">
                                    <block type="text" id="pRoD#[vtwzAnWY@)zz-m">
                                      <field name="TEXT">:</field>
                                    </block>
                                  </value>
                                  <value name="ADD2">
                                    <block type="variables_get" id=")8Mo94l4kYjL!OEqB#Q=">
                                      <field name="VAR" id="86:D-8adXijp2={gDX23">min</field>
                                    </block>
                                  </value>
                                  <value name="ADD3">
                                    <block type="text" id="@pQu}W.@VrE32ny[x#n_">
                                      <field name="TEXT">:</field>
                                    </block>
                                  </value>
                                  <value name="ADD4">
                                    <block type="text" id="0E!wP$K[R4C)Z@BJNtY-">
                                      <field name="TEXT">00</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
            <block type="schedule" id="CT1[DYShkPFSs,*O#g]:" x="763" y="-537">
              <field name="SCHEDULE">*/10 * * * * *</field>
              <statement name="STATEMENT">
                <block type="controls_if" id="0HEj[/r]9f6D|B8;Y`[?">
                  <value name="IF0">
                    <block type="time_compare_ex" id="FI~[ksEr0IwTcg=QkwBE">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="false" actual_time="true"></mutation>
                      <field name="USE_ACTUAL_TIME">TRUE</field>
                      <field name="OPTION">==</field>
                      <value name="START_TIME">
                        <shadow type="text" id="XL89tet[4DQ5cb)y~yt=">
                          <field name="TEXT">12:00</field>
                        </shadow>
                        <block type="get_value" id="x@I%dHA33Pol:IzuUQ_[">
                          <field name="ATTR">val</field>
                          <field name="OID">0_userdata.0.Timer.Zeit.Zeit</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="control" id="Xyt]m1MR,knVLpkR_8-.">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">0_userdata.0.Timer.Zeit.Alarm</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="logic_boolean" id="sMK/cam7xTpNI]G-!EO7">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </xml>
          
          T 1 Reply Last reply Reply Quote 0
          • T
            tobiasp @danny_v1 last edited by tobiasp

            Hallo zusammen,ich mal wieder.
            Habe heute das Update durchgeführt.
            Wasjetzt ist, das der Bildschwirm "schwarz" wird und wenn ich ihn berühre kommt der "Normale Screensaver".
            Was muss ich ändern das immer der "normale" bleibt?
            Daaanke

            T 1 Reply Last reply Reply Quote 0
            • T
              TT-Tom @tobiasp last edited by

              @tobiasp

              Was für ein Update, ein paar Infos muss du schon geben.

              T 1 Reply Last reply Reply Quote 0
              • T
                tobiasp @TT-Tom last edited by tobiasp

                @tt-tom
                Ok habe auf die aktuelle Version aktualisiert (Berry 8 und Nextion 4.1.1)

                T 1 Reply Last reply Reply Quote 0
                • T
                  tobiasp @tobiasp last edited by

                  @tobiasp
                  So habe gerade Nextion nocheinmal geflasht und alles ist wieder normal.
                  Danke trotzdem

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    TT-Tom @tobiasp last edited by TT-Tom

                    @tobiasp okay

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

                      Habe seit Java script 7.0.5 aktuell 7.1.0 folgenden Fehler:

                      14.6.2023, 09:16:28.744	[info ]: javascript.0 (12132) Stop script script.js.NSPanels.NsPanelTS40514_
                      14.6.2023, 09:16:30.334	[info ]: javascript.0 (12132) script.js.NSPanels.NsPanelTS40514_: compiling TypeScript source...
                      14.6.2023, 09:16:30.937	[error]: javascript.0 (12132) script.js.NSPanels.NsPanelTS40514_: TypeScript compilation failed:
                              if ((pageItem.useColor || useColors) && ((typeof (value) === 'boolean' && value) || value > (pageItem.minValueBrightness !== undefined ? pageItem.minValueBrightness : 0))) {
                                                                                                                  ^
                      ERROR: Operator '>' cannot be applied to types 'number | boolean' and 'number'.
                      

                      7.0.3 fumktioniert

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

                        @carlos

                        Ja, JS-Adapter (stable) ist immer noch 6.1.4.

                        Größer 7.0.3 funktioniert bei mir auch nicht...

                        Gargano 1 Reply Last reply Reply Quote 0
                        • C
                          chuckle last edited by

                          Hallo zusammen

                          Auch nach viel Lesen scheitere ich immer noch am "waiting for content" Bildschirm. Ich weiss echt nicht was ich noch prüfen soll.
                          Die MQTT Verbindung steht aber das Panel scheint immer mit unknown command zu antworten.
                          Hier mal meine Konfig:
                          08251fbd-1612-44ff-9946-6550bdf12b4c-grafik.png 68a657d1-7bd3-4b99-9db5-e51e40e30415-grafik.png 731dc7e4-4939-4d9e-81e9-4df53bcd560b-grafik.png d456eb8f-00b9-41ab-95bd-fa357ab4e1cc-grafik.png

                          Das ist dann eine Payload im CustomSend:
                          entityUpd~Büro~button~bPrev~~65535~button~bNext~~65535~deletedeletedelete~~delete~

                          Und das Panel sendet dann im STAT RESULT zurück
                          {
                          "Command": "Unknown"
                          }

                          Was habe ich falsch gemacht, ich blicks wirklich nicht mehr. Hoffe ihr könnt mir helfen.

                          1 Reply Last reply Reply Quote 0
                          • T
                            TT-Tom last edited by

                            @chuckle
                            nimm mal die Websockets raus.

                            kannst du mal auf der Tasmota Konsole schauen was dort ankommt.

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

                              @tt-tom Websockets mal rausgenommen, hat nicht geholfen.
                              Auf der Panel Konsole sehe ich nur das:
                              d3aa7c05-9991-490d-bce5-0c6bbe0b12e5-grafik.png
                              Kann ich da noch mehr ausgeben lassen?

                              L 1 Reply Last reply Reply Quote 0
                              • L
                                L4rs @chuckle last edited by

                                @chuckle Da bei mir der ioBroker auch als Client gegen einen Mosquitto läuft sehen meine Einstellungen etwas anders aus - ich finde allerdings Deine die IP in Deinem ersten Screenshot merkwürdig, meine IPv4 Adressen sind alle ohne irgendwelche Zusätze geschrieben.
                                Was Du noch ausprobieren könntest wäre, den MQTT Explorer herunterzuladen und gegen den ioBroker zu connecten, um die Einstellungen zu verifizieren.

                                Gruß, Lars

                                C 1 Reply Last reply Reply Quote 0
                                • C
                                  chuckle @L4rs last edited by

                                  @l4rs Danke für die Hinweise. Das ist das Interface, ioBroker läuft auf einer ProxMox VM. Ich hatte zuerst es auch über eine Moqutto Instanz am laufen, das ging aber auch nicht, also hab ich den Server in ioBroker inkludiert.
                                  Ich habe die mqtt Verbindungen mit MQTTX getestet, das funktioniert soweit. Interessanterweise sehe ich dort die Änderung an einem Relais nicht. Aber im ioBroker sehe ich den Zustand sofort....

                                  T 1 Reply Last reply Reply Quote 0
                                  • T
                                    TT-Tom @chuckle last edited by

                                    @chuckle deine Einstellungen passen zu meinem Testsystem. Das läuft auch auf einer VM.

                                    Läuft dein Panel Script, kommen Meldungen im Log?
                                    Ggf das Script nochmal neu starten und den Debug Modus mal aktivieren im Script (Debug = True).

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

                                      @tt-tom Panel Script läuft, Debug Modus ist bereits eingeschaltet. Messages kommen am MQTT-Broker an, aber am Panel irgendwie nicht so, das es damit was anfangen kann.

                                      T 1 Reply Last reply Reply Quote 0
                                      • T
                                        TT-Tom @chuckle last edited by

                                        @chuckle

                                        Hast du das Panel frisch geflasht. Vielleicht ist da was schief gegangen

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

                                          @tt-tom du meinst damit: FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.0.5.tft?
                                          Ja schon 3mal 😞

                                          T 1 Reply Last reply Reply Quote 0
                                          • T
                                            TT-Tom @chuckle last edited by

                                            @chuckle ich frage mal im Backoffice nach 👨‍💻

                                            Armilar 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            917
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            lovelace ui nspanel sonoff
                                            260
                                            7128
                                            4460533
                                            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