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

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SONOFF NSPanel mit Lovelace UI

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

      @armilar
      Wurde es eigentlich mal geändert mit dem Wetter Alias? Habe gerade festgestellt dass ich zwei Aliase habe, einen in Alias Ordner vom NS Panel (den erinnere ich mich selbst erstellt zu haben) und einen direkt alias.0.wetter.
      Ich vermute das war mein Problem. Irgendwie ging an mir vorüber dass er da einen automatisch macht.

      Gruß

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

        @tom_w

        Ja, wird vieles mittlerweile automatisch erstellt 😉

        Ansonsten einfach den anderen in der Config eintragen...

        1 Reply Last reply Reply Quote 0
        • M
          Mercyful 0 @Vocaris last edited by Mercyful 0

          @vocaris said in SONOFF NSPanel mit Lovelace UI:

          //Subpage 1 von Buero
          var Buero_Thermostat: PageThermo =
          {
          "type": "cardThermo",
          "heading": "Thermostat Büro",
          "useColor": true,
          "subPage": true,
          "parent": Buero,
          "items": [
          <PageItem>{ id: "alias.0.NS-Panel.Buero.Thermostat", minValue: 100, maxValue: 300 }]
          };

          Wenn es bei dir eine Hauptseite sein soll, dann bei subpage: false eingeben und bei parent: undefined
          Den Alias muss du natürlich ersetzen.

          So kannst du dir dann von jedem Thermo. die Daten im NSP anzeigen lassen und ggf. abändern.
          Aber um das zu realisieren benötigst du erst einmal die HM Hardware sowie dessen Einbindung via RPC Adapter in den ioB. Ergo braucht du eine CCU oder eine Raspberrymatic. Letzteres setze ich ein. Die HM Geräte können ja auch ohne CCU miteinander kommunizieren (Direktverbindung). Aber dann kannst du sie nicht via ioB ansprechen.
          Ich hoffe ich konnte dir insoweit helfen.

          Ich möchte da gern mal einsteigen und auch eine Frage stellen:
          Ich habe vor das NSP für die Fußbodenheizung zu nutzen. Es sind normale Stellmotoren verbaut die NC (normal closed) sind. Diese werden zur Zeit über die einfachen Thermostaten geregelt.
          Nun möchte ich gern dass der linke Taster die Heizung aus oder ein schaltet und auf dem Display möchte ich gern
          einen Regler haben (so ähnlich wie im Auslieferungszustand des NSP) der entsprechend der Temperatur den Stellmotor öffnet oder schließt. Der rechte Taster soll einfach nur stumpf das Licht aus- oder einschalten.
          Ich sehe den Vorteil darin, dass ich diese Kombi aus Lichtschalter unten und Heizungsthermostaten oben aus der Schalter Serie entfernen kann und dafür das NSP nutze.
          Wie stelle ich das am Besten an? Die Seite für Thermo habe ich erstellt, aber das sieht so erstmal schlicht aus und die
          Logik dahinter (Speichern der Temperatur und ab wann der Stellmotor geöffnet oder geschlossen werden soll) ist mir im Moment auch noch fern. Hat das schon mal jemand gemacht?
          Danke und Gruß
          Mercy

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

            @mercyful-0 sagte in SONOFF NSPanel mit Lovelace UI:

            Ich möchte da gern mal einsteigen und auch eine Frage stellen:
            Ich habe vor das NSP für die Fußbodenheizung zu nutzen. Es sind normale Stellmotoren verbaut die NC (normal closed) sind. Diese werden zur Zeit über die einfachen Thermostaten geregelt.
            Nun möchte ich gern dass der linke Taster die Heizung aus oder ein schaltet und auf dem Display möchte ich gern
            einen Regler haben (so ähnlich wie im Auslieferungszustand des NSP) der entsprechend der Temperatur den Stellmotor öffnet oder schließt. Der rechte Taster soll einfach nur stumpf das Licht aus- oder einschalten.
            Ich sehe den Vorteil darin, dass ich diese Kombi aus Lichtschalter unten und Heizungsthermostaten oben aus der Schalter Serie entfernen kann und dafür das NSP nutze.
            Wie stelle ich das am Besten an? Die Seite für Thermo habe ich erstellt, aber das sieht so erstmal schlicht aus und die
            Logik dahinter (Speichern der Temperatur und ab wann der Stellmotor geöffnet oder geschlossen werden soll) ist mir im Moment auch noch fern. Hat das schon mal jemand gemacht?
            Danke und Gruß
            Mercy

            Zunächst einmal ist die Thermostatseite eine Backendseite, die mit Datenpunkten des ioBroker über ALIASE verbunden ist. Sie visualisiert Zustände (z.B. die Raumtemperatur) und schaltet Zustände (wie z.B. die SetPoint-Temperatur). Das NSPanel hat hierbei keine Logik, außer die eingestellten Zustände an den ioBroker zu übermitteln.

            Wenn "irgendeine Logik" jetzt ein Relais schalten soll, so muss die Werteverarbeitung in einem externen Bklockly, JavaScript oder TypeScript erfolgen.

            Beispiel: Du stellst die Setpoint-Temperatur (Zieltemperatur) im Panel ein. Anhand der Raumtemperatur (gemessen am Panel NTC oder irgendeinem anderen Raumthermometer) errechnest du, die Temperatur und schaltest ein Relay des NSPanel oder irgendeinen anderen Datenpunkt im ioBroker

            So ganz habe ich dein Anliegen aber noch nicht verstanden... Du möchtest mit dem linken Button die Heizung an/aus schalten? Soll denn das Relais zum Button genutzt werden, oder wird der Button entkoppelt mit einem Datenpunkt genutzt?

            Wie sehen die Datenpunkte aus, die die Stellmotoren steuern sollen?

            und auf dem Display möchte ich gern
            einen Regler haben (so ähnlich wie im Auslieferungszustand des NSP) der entsprechend der Temperatur den Stellmotor öffnet oder schließt.

            Es stehen nur die aktuell beschriebenen Steuerelemente der cardThermo zur Verfügung. Keine Kreise oder sonstige optische Features aus dem Original-Panel.

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

              @armilar said in SONOFF NSPanel mit Lovelace UI:

              @mercyful-0 sagte in SONOFF NSPanel mit Lovelace UI:

              Ich möchte da gern mal einsteigen und auch eine Frage stellen:
              Ich habe vor das NSP für die Fußbodenheizung zu nutzen. Es sind normale Stellmotoren verbaut die NC (normal closed) sind. Diese werden zur Zeit über die einfachen Thermostaten geregelt.
              Nun möchte ich gern dass der linke Taster die Heizung aus oder ein schaltet und auf dem Display möchte ich gern
              einen Regler haben (so ähnlich wie im Auslieferungszustand des NSP) der entsprechend der Temperatur den Stellmotor öffnet oder schließt. Der rechte Taster soll einfach nur stumpf das Licht aus- oder einschalten.
              Ich sehe den Vorteil darin, dass ich diese Kombi aus Lichtschalter unten und Heizungsthermostaten oben aus der Schalter Serie entfernen kann und dafür das NSP nutze.
              Wie stelle ich das am Besten an? Die Seite für Thermo habe ich erstellt, aber das sieht so erstmal schlicht aus und die
              Logik dahinter (Speichern der Temperatur und ab wann der Stellmotor geöffnet oder geschlossen werden soll) ist mir im Moment auch noch fern. Hat das schon mal jemand gemacht?
              Danke und Gruß
              Mercy

              Zunächst einmal ist die Thermostatseite eine Backendseite, die mit Datenpunkten des ioBroker über ALIASE verbunden ist. Sie visualisiert Zustände (z.B. die Raumtemperatur) und schaltet Zustände (wie z.B. die SetPoint-Temperatur). Das NSPanel hat hierbei keine Logik, außer die eingestellten Zustände an den ioBroker zu übermitteln.

              Wenn "irgendeine Logik" jetzt ein Relais schalten soll, so muss die Werteverarbeitung in einem externen Bklockly, JavaScript oder TypeScript erfolgen.

              Beispiel: Du stellst die Setpoint-Temperatur (Zieltemperatur) im Panel ein. Anhand der Raumtemperatur (gemessen am Panel NTC oder irgendeinem anderen Raumthermometer) errechnest du, die Temperatur und schaltest ein Relay des NSPanel oder irgendeinen anderen Datenpunkt im ioBroker

              So ganz habe ich dein Anliegen aber noch nicht verstanden... Du möchtest mit dem linken Button die Heizung an/aus schalten? Soll denn das Relais zum Button genutzt werden, oder wird der Button entkoppelt mit einem Datenpunkt genutzt?

              Wie sehen die Datenpunkte aus, die die Stellmotoren steuern sollen?

              und auf dem Display möchte ich gern
              einen Regler haben (so ähnlich wie im Auslieferungszustand des NSP) der entsprechend der Temperatur den Stellmotor öffnet oder schließt.

              Es stehen nur die aktuell beschriebenen Steuerelemente der cardThermo zur Verfügung. Keine Kreise oder sonstige optische Features aus dem Original-Panel.

              Hallo Armilar!
              Vielen Dank für deine Ausführungen. Ich werde mal versuchen zu erklären was ich möchte.


              Lichtschalter.jpg

              Ich habe mal ein Foto der verbauten Einheiten angehängt.
              Dort ist unter 1 ein Schalter der die Fußbodenheizung aus- oder einschaltet. Diese Funktion soll der linke Taster auf dem NSP übernehmen. Ich gehe davon aus dass ich diesen nur mit dem Stellmotor verbinden muss. Die 2 soll auf dem NSP abgebildet werden , sprich ich stelle eine Temperatur ein und der interne Fühler soll das Relais schalten an dem der Stellmotor dran hängt. Als Goodie würde ich den rechten Taster auf dem NSP für den Lichtschalter nutzen wollen.
              Auch da gehe ich davon aus diese nur an das NSP anzuschliessen.
              Die Stellmotoren sind strunzen doof, die bekommen Strom und öffnen den Heizkreislauf, nimmst man Strom weg, gehen die zu.
              Daher ist für mich die Frage ob das so realisierbar ist.
              Klar ist es nett wenn ich die Datenpunkte im ioBroker auswerten und in eine Automatisierung machen kann, aber das ist Stand jetzt nicht geplant.
              Ich hoffe das mein Anliegen klarer ist.
              Liebe Grüße
              Mercy

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

                @mercyful-0

                Sehr viel klarer

                Fasse mal zusammen:

                • Stellmotoren werden über 230V versorgt und könnten an einen der 230V Ausgänge des NSPanel angeschlossen werden
                • Heizungs(an/aus)schalter kann sowohl die physische linke Taste übernehmen, als auch in der cardThermo ein On/Off Button. Oder beides.
                • Licht kann natürlich auf die rechte Taste (somit über das rechte Relais). Alternativ aber auch entkoppelt zu einem Datenpunkt.

                Bis hier kein Problem. Das Original Panel wird temperaturseitig in der Cloud gesteuert. D.h. es hat eine Logik, die die Temperatur des internen Fühlers nach China sendet. Ebenfalls wird über den Kreis deine Solltemperatur (Setpoint) nach China gesendet. Wenn jetzt die Raum-Temperatur mit einem Offset überschritten wird, dann sitzt bei Sonoff ein Chinese, macht den den Schalter aus (wird aber wohl eine Cloud-Funktion sein 😉 ) und sendet die Daten an das Panel zu dir nach Hause. Da geht dann halt auch das Relais aus. Umgekehrt natürlich auch, wenn es zu kalt wird, schaltet irgendetwas in China das Relais wieder an.

                Diese Funktionalität ist aber im Tasmota nicht mehr vorhanden und muss jetzt durch eine Steuerlogik im ioBroker ersetzt werden.

                Klar ist es nett wenn ich die Datenpunkte im ioBroker auswerten und in eine Automatisierung machen kann, aber das ist Stand jetzt nicht geplant.

                Also ohne eine zusätzliche Logik geht das nicht.

                Die ist aber im Prinzip sehr einfach zu realisieren.

                Über z.B.

                0_userdata.0.Heizungoderähnlich.Stellmotor.DeinRaum.
                

                legst du 4 Datenpunkte an:

                • Raumtemperatur (numerisch): Bei Verwendung des internen NTC ist Datenpunkt bereits vorhanden
                • Zieltemperatur (numerisch)
                • Offset (numerisch)
                • Schalter (boolean)

                Dann eine einfache Blockly-Logik schreiben, das den Cloud-Chinesen ersetzt.

                Wenn Schalter an, dann

                • Wenn Raumtemperatur - Offset < Zieltemperatur, dann Relay 1 an (Relay1 - Datenpunkt im NSPanel vorhanden)
                • Wenn Raumtemperatur + Offset > Zieltemperatur, dann Relay 1 aus
                  (Relay1 - Datenpunkt im NSPanel vorhanden)

                Sonst wenn Schalter aus, dann Relay1 aus.

                Das wars. Der linke Schalter sollte per Rule entkoppelt werden. Der linke Schalter, falls mit einem herkömmlichen Verbraucher (Lampe) ohne Dauerstrom betrieben, dann per Rule nicht entkoppelt. Falls HUE-Lampe, dann ebenfalls entkoppelt.

                Kann also auch noch erweitert werden. Wenn Uhrzeit zwischen XX:XX und XX:XX, dann Heizung aus.
                Der Temperatur-Logik durch das externe Script sind für deine Anwendungsbereiche, im Gegensatz zu deinen aktuellen Thermostaten, keine Grenzen gesetzt

                Das wärs auch schon. Mit der zusätzlichen einfachen Schaltlogik wird es möglich sein, deine aktuellen Komponenten Raumthermostat und Lichtschalter zu ersetzen.

                Klar könnte man diese einfache Temperaturlogik jetzt auch in das NSPanel-TypeScript übernehmen. Ist aber wahrscheinlich für alle User flexibler, wenn die Datenpunkte im ioBroker separat gesteuert werden.

                @Kuckuckmann vielleicht könnte man für eine einfache Temperatursteuerung (Thermostatersatz) mit Relais-Steuerung über 230V (Elektro-Heizkörper oder Stellmotor 230V) mal ein kurzes Beispiel für die Wiki erstellen?

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

                  @armilar sagte in SONOFF NSPanel mit Lovelace UI:
                  Sollte eigentlich in die Bearbeitung:

                  • Zieltemperatur (numerisch);

                  Ist dann nicht mehr 0-6 wie in deinem aktuellen Thermostaten, sondern die exakte Zieltemperatur in °C

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

                    @armilar said in SONOFF NSPanel mit Lovelace UI:
                    Vielen Dank für die super schnelle Antwort!

                    @mercyful-0

                    Sehr viel klarer

                    Fasse mal zusammen:

                    • Stellmotoren werden über 230V versorgt und könnten an einen der 230V Ausgänge des NSPanel angeschlossen werden
                    • Heizungs(an/aus)schalter kann sowohl die physische linke Taste übernehmen, als auch in der cardThermo ein On/Off Button. Oder beides.
                    • Licht kann natürlich auf die rechte Taste (somit über das rechte Relais). Alternativ aber auch entkoppelt zu einem Datenpunkt.

                    Bis hier kein Problem. Das Original Panel wird temperaturseitig in der Cloud gesteuert. D.h. es hat eine Logik, die die Temperatur des internen Fühlers nach China sendet. Ebenfalls wird über den Kreis deine Solltemperatur (Setpoint) nach China gesendet. Wenn jetzt die Raum-Temperatur mit einem Offset überschritten wird, dann sitzt bei Sonoff ein Chinese, macht den den Schalter aus (wird aber wohl eine Cloud-Funktion sein 😉 ) und sendet die Daten an das Panel zu dir nach Hause. Da geht dann halt auch das Relais aus. Umgekehrt natürlich auch, wenn es zu kalt wird, schaltet irgendetwas in China das Relais wieder an.

                    Soweit habe ich das verstanden.

                    Diese Funktionalität ist aber im Tasmota nicht mehr vorhanden und muss jetzt durch eine Steuerlogik im ioBroker ersetzt werden.

                    Darum habe ich ja Tasmota und Lovelace UI geflasht.

                    Klar ist es nett wenn ich die Datenpunkte im ioBroker auswerten und in eine Automatisierung machen kann, aber das ist Stand jetzt nicht geplant.

                    Also ohne eine zusätzliche Logik geht das nicht.

                    Die ist aber im Prinzip sehr einfach zu realisieren.

                    Über z.B.

                    0_userdata.0.Heizungoderähnlich.Stellmotor.DeinRaum.
                    

                    legst du 4 Datenpunkte an:

                    • Raumtemperatur (numerisch): Bei Verwendung des internen NTC ist Datenpunkt bereits vorhanden
                    • Zieltemperatur (numerisch)
                    • Offset (numerisch)
                    • Schalter (boolean)

                    Diese habe ich erstellt.

                    Dann eine einfache Blockly-Logik schreiben, das den Cloud-Chinesen ersetzt.

                    Wenn Schalter an, dann

                    • Wenn Raumtemperatur - Offset < Zieltemperatur, dann Relay 1 an (Relay1 - Datenpunkt im NSPanel vorhanden)
                    • Wenn Raumtemperatur + Offset > Zieltemperatur, dann Relay 1 aus
                      (Relay1 - Datenpunkt im NSPanel vorhanden)

                    Sonst wenn Schalter aus, dann Relay1 aus.

                    Und hier hakt es bei mir ein wenig.

                    <block xmlns="https://developers.google.com/blockly/xml" type="on" id="RJ}*ldcZ,mnDdfy!rj(8" x="63" y="-187">
                      <field name="OID">0_userdata.0.NSPanel.1.Relay.1</field>
                      <field name="CONDITION">ne</field>
                      <field name="ACK_CONDITION"></field>
                      <statement name="STATEMENT">
                        <block type="debug" id="iBLP*hCxO;n|P$.|BV.x">
                          <field name="Severity">log</field>
                          <value name="TEXT">
                            <shadow type="text" id="*ctM~D[h[~/iG3G*[F{u">
                              <field name="TEXT">Los geht es mit dem NSPanel</field>
                            </shadow>
                          </value>
                          <next>
                            <block type="controls_if" id="h3v[8n56qCZ9Yty^xg!h">
                              <value name="IF0">
                                <block type="logic_compare" id="hi}1Y:o?yv9bP5YSOOmw">
                                  <field name="OP">EQ</field>
                                  <value name="A">
                                    <block type="get_value" id="o`-}LPTwPhO?!DPZ9VgR">
                                      <field name="ATTR">val</field>
                                      <field name="OID">0_userdata.0.NSPanel.1.Relay.1</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <block type="logic_boolean" id="#}tPmPgcpnh]r!SLhfY,">
                                      <field name="BOOL">TRUE</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <statement name="DO0">
                                <block type="debug" id=",wrnlhdR@Vx=P(Wxx50s">
                                  <field name="Severity">log</field>
                                  <value name="TEXT">
                                    <shadow type="text" id="f$^u#q*0h5.Cz%NZL]fw">
                                      <field name="TEXT">Geht da überhaupt etwas</field>
                                    </shadow>
                                  </value>
                                  <next>
                                    <block type="controls_if" id="(6-JROpAzSW,{j9`q)Y$">
                                      <value name="IF0">
                                        <block type="logic_compare" id="A,cgskI7W(?9QP*k**zb">
                                          <field name="OP">LT</field>
                                          <value name="A">
                                            <block type="math_arithmetic" id=")(3I}qVyjNy^0eD],Kd-">
                                              <field name="OP">MINUS</field>
                                              <value name="A">
                                                <shadow type="math_number" id="cb!y0Is{pa,YX1^/vgg+">
                                                  <field name="NUM">1</field>
                                                </shadow>
                                                <block type="get_value" id="2b#i}*UP,JL,3]?B7hlH">
                                                  <field name="ATTR">val</field>
                                                  <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Temperature</field>
                                                </block>
                                              </value>
                                              <value name="B">
                                                <shadow type="math_number" id="-,O8_;B1Ows)8Km9y7hS">
                                                  <field name="NUM">1</field>
                                                </shadow>
                                                <block type="get_value" id="$*Gxh,Us3VFKgvl)cS~e">
                                                  <field name="ATTR">val</field>
                                                  <field name="OID">0_userdata.0.DJ_Oase.Offset</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="get_value" id="puoXnNU@cuqLS9H15^3(">
                                              <field name="ATTR">val</field>
                                              <field name="OID">0_userdata.0.DJ_Oase.Zieltemperatur</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="control" id="D}~:q_y}Jrkt}h8wAU+S">
                                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                          <field name="OID">0_userdata.0.NSPanel.1.Relay.1</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE">
                                            <block type="logic_boolean" id=";@$htC/:grLE/X%-3W#/">
                                              <field name="BOOL">TRUE</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                      <next>
                                        <block type="controls_if" id="=zQk|6LdJ(3)sI#=[s8w">
                                          <value name="IF0">
                                            <block type="logic_compare" id="Y[p2M;f=~ZEm9dDozT^R">
                                              <field name="OP">GT</field>
                                              <value name="A">
                                                <block type="math_arithmetic" id="/x{ONhb(iW[j.E?PeDRr">
                                                  <field name="OP">ADD</field>
                                                  <value name="A">
                                                    <shadow type="math_number">
                                                      <field name="NUM">1</field>
                                                    </shadow>
                                                    <block type="get_value" id="7{##k%q,B@+:^$[Y=OGm">
                                                      <field name="ATTR">val</field>
                                                      <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Temperature</field>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <shadow type="math_number">
                                                      <field name="NUM">1</field>
                                                    </shadow>
                                                    <block type="get_value" id="QqiNkQQ?jnf@xp7GOYB%">
                                                      <field name="ATTR">val</field>
                                                      <field name="OID">0_userdata.0.DJ_Oase.Offset</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="B">
                                                <block type="get_value" id="iLd?XJ@^?E,TekFB6Xee">
                                                  <field name="ATTR">val</field>
                                                  <field name="OID">0_userdata.0.DJ_Oase.Zieltemperatur</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <statement name="DO0">
                                            <block type="control" id="!~@ErPa=+r%xMqP/V.$w">
                                              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                              <field name="OID">0_userdata.0.NSPanel.1.Relay.1</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE">
                                                <block type="logic_boolean" id="/adW+f/sii|{G?)XiWLa">
                                                  <field name="BOOL">FALSE</field>
                                                </block>
                                              </value>
                                            </block>
                                          </statement>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </statement>
                            </block>
                          </next>
                        </block>
                      </statement>
                    </block>
                    

                    Wenn ich jetzt den linken Taster drücke, geht der Status kurz auf True und sofort wieder auf false.

                    Das wars. Der linke Schalter sollte per Rule entkoppelt werden. Der linke Schalter, falls mit einem herkömmlichen Verbraucher (Lampe) ohne Dauerstrom betrieben, dann per Rule nicht entkoppelt. Falls HUE-Lampe, dann ebenfalls entkoppelt.

                    Welcher Schalter sollte jetzt entkoppelt werden? Der linke, der den Stellmotor an- und ausschaltet?
                    Wo finde ich eine Anleitung wie Schalter entkoppelt werden?

                    Kann also auch noch erweitert werden. Wenn Uhrzeit zwischen XX:XX und XX:XX, dann Heizung aus.
                    Der Temperatur-Logik durch das externe Script sind für deine Anwendungsbereiche, im Gegensatz zu deinen aktuellen Thermostaten, keine Grenzen gesetzt

                    Das wärs auch schon. Mit der zusätzlichen einfachen Schaltlogik wird es möglich sein, deine aktuellen Komponenten Raumthermostat und Lichtschalter zu ersetzen.

                    Klar könnte man diese einfache Temperaturlogik jetzt auch in das NSPanel-TypeScript übernehmen. Ist aber wahrscheinlich für alle User flexibler, wenn die Datenpunkte im ioBroker separat gesteuert werden.

                    @Kuckuckmann vielleicht könnte man für eine einfache Temperatursteuerung (Thermostatersatz) mit Relais-Steuerung über 230V (Elektro-Heizkörper oder Stellmotor 230V) mal ein kurzes Beispiel für die Wiki erstellen?

                    Ist Lovelace UI dafür erforderlich oder ist deine Beschreibung für Tasmota mit der original Display Firmware gedacht?
                    Liebe Grüße
                    Mercy

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

                      @mercyful-0

                      Die Beschreibung für die Originalsoftware verfolgen wir hier nicht...

                      Alles für Lovelace UI mit Tasmota...

                      Ich mache später mal ein Beispiel (gerade etwas viel um die Ohren)... Habe mir aber das Blockly angesehen... Du schaltest im Trigger einen Datenpunkt den du Triggerst. Deshalb hast du einen Trigger-Loop... und deshalb schaltet der auch gleich wieder in den anderen Modus.

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

                        @armilar said in SONOFF NSPanel mit Lovelace UI:
                        Danke für die flotte Antwort!

                        @mercyful-0

                        Die Beschreibung für die Originalsoftware verfolgen wir hier nicht...

                        Daher meine Frage 🙂

                        Alles für Lovelace UI mit Tasmota...

                        Ich mache später mal ein Beispiel (gerade etwas viel um die Ohren)... Habe mir aber das Blockly angesehen... Du schaltest im Trigger einen Datenpunkt den du Triggerst. Deshalb hast du einen Trigger-Loop... und deshalb schaltet der auch gleich wieder in den anderen Modus.

                        Das wäre toll wenn ich da ein Beispiel hätte auf dem ich dann aufbauen kann. Ich lese mich grad in MQTT ein da dieses noch Neuland für mich ist. Ich bin gespannt.
                        Vielen Dank!
                        Liebe Grüße
                        Mercy

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

                          @mercyful-0

                          Hier mal mein Blockly, welches genau das macht was du erreichen willst. Ich mache es zwar nicht wie du mit dem tastet (da dort meine Kids des öfteren hindrücken würden und ich nicht merke dass die Heizung aus ist) sondern mit einem Button auf der Thermopage, aber vom Prinzip her müsste es verständlich werden. Du brauchst für das "Ein / Aus" der Heizung einen extra Datenpunkt den du schaltest. Der wird dann in deinem Skript mit eingebaut.

                          <xml xmlns="https://developers.google.com/blockly/xml">
                            <block type="on_ext" id="R3`G5gEHw1h%w=7y$o(n" x="237" y="-237">
                              <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="~BZD7sur;u._a|Pe@ezj">
                                  <field name="oid">0_userdata.0.NSPanel.1.Sensor.ANALOG.Temperature</field>
                                </shadow>
                              </value>
                              <statement name="STATEMENT">
                                <block type="update" id="b9iO%[W$*cf5Y5!4#ifD">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                  <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Temperatur_korrigiert</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="math_arithmetic" id="a@5L2MON#y;j[=5SvJEW">
                                      <field name="OP">ADD</field>
                                      <value name="A">
                                        <shadow type="math_number" id="sO3+V_/5pzJOZpxJ_mfB">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="on_source" id="HY+}gnUf`azx0y/^+3zQ">
                                          <field name="ATTR">state.val</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="x.5z5MCi;-z@3OA[f8uy">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="get_value" id="i^C;5k|)0SJ^mM(9-2o(">
                                          <field name="ATTR">val</field>
                                          <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Offset</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                </block>
                              </statement>
                              <next>
                                <block type="on_ext" id="vov=F]}HrWCo~O`PU9zn">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation>
                                  <field name="CONDITION">ne</field>
                                  <field name="ACK_CONDITION"></field>
                                  <value name="OID0">
                                    <shadow type="field_oid" id="%3sI!*_$Lw6arDrZ/16Y">
                                      <field name="oid">0_userdata.0.NSPanel.1.Sensor.ANALOG.Temperatur_korrigiert</field>
                                    </shadow>
                                  </value>
                                  <value name="OID1">
                                    <shadow type="field_oid" id="90cj(gOyTRyd9AKfeN?,">
                                      <field name="oid">alias.0.Wohnzimmer.Temperatur Wohnzimmer</field>
                                    </shadow>
                                  </value>
                                  <statement name="STATEMENT">
                                    <block type="controls_if" id="ZO`zh=-~P8B`08DS-f)I">
                                      <mutation else="1"></mutation>
                                      <value name="IF0">
                                        <block type="logic_compare" id="W3-N*Cy!ow*1G-_D.3lw">
                                          <field name="OP">EQ</field>
                                          <value name="A">
                                            <block type="get_value" id="ATLuk36g7PJ`IHmeiHot">
                                              <field name="ATTR">val</field>
                                              <field name="OID">alias.0.Wohnzimmer.Erreichbar Multisensor Wohnzimmer</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="logic_boolean" id="~FtTgc]n=}~t0QCUctv:">
                                              <field name="BOOL">TRUE</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="update" id="=B3iYMIn.r0Z~s3hhA!U">
                                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                          <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Verwendete_Temperatur</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE">
                                            <block type="get_value" id="^G#)Zwla;,;rK#=,Chy;">
                                              <field name="ATTR">val</field>
                                              <field name="OID">alias.0.Wohnzimmer.Temperatur Wohnzimmer</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                      <statement name="ELSE">
                                        <block type="update" id="di]o,@l]/B85:LCotX5n">
                                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                          <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Verwendete_Temperatur</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE">
                                            <block type="get_value" id="Bs#[5z|n_FZE:#}hZX?0">
                                              <field name="ATTR">val</field>
                                              <field name="OID">0_userdata.0.NSPanel.1.Sensor.ANALOG.Temperatur_korrigiert</field>
                                            </block>
                                          </value>
                                        </block>
                                      </statement>
                                    </block>
                                  </statement>
                                  <next>
                                    <block type="on_ext" id="6Sno1Vs}R0[!`JG3}p[$">
                                      <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="aV`/[rsPL5L`!9z4kPb:">
                                          <field name="oid">0_userdata.0.NSPanel.1.Sensor.ANALOG.Verwendete_Temperatur</field>
                                        </shadow>
                                      </value>
                                      <statement name="STATEMENT">
                                        <block type="controls_if" id="1.j]e]wPFC=N)(y0-%Ys">
                                          <value name="IF0">
                                            <block type="logic_compare" id="%?w}jp:v/eRll^+t?J;=">
                                              <field name="OP">EQ</field>
                                              <value name="A">
                                                <block type="get_value" id="c*mP?(~9tqo@O^`xiCOt">
                                                  <field name="ATTR">val</field>
                                                  <field name="OID">0_userdata.0.NSPanel.1.Eigene.Modi.AUTOMATIC</field>
                                                </block>
                                              </value>
                                              <value name="B">
                                                <block type="logic_boolean" id="Q,)j`#qI`+6l=S~7Yzrq">
                                                  <field name="BOOL">TRUE</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <statement name="DO0">
                                            <block type="controls_if" id="B.P-%R26%%^Pa~IIhB,B">
                                              <mutation else="1"></mutation>
                                              <value name="IF0">
                                                <block type="logic_compare" id="tCUH]p|~R2Gij6{]GNKE">
                                                  <field name="OP">LTE</field>
                                                  <value name="A">
                                                    <block type="on_source" id="pv~v_CvM(.OUQmab#}:R">
                                                      <field name="ATTR">state.val</field>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <block type="get_value" id="5^Z-ALUStC(BNBt3TDz^">
                                                      <field name="ATTR">val</field>
                                                      <field name="OID">0_userdata.0.NSPanel.1.Eigene.SolltemperaturWohnzimmer</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <statement name="DO0">
                                                <block type="control" id="xvzY43Ar+47WgqU-)hYc">
                                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                  <field name="OID">mqtt.0.cmnd.NSPanel_Wohnzimmer.POWER</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="math_number" id="w8cS!@es].v%.@9WXf/A">
                                                      <field name="NUM">1</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </statement>
                                              <statement name="ELSE">
                                                <block type="control" id="=Dms)Tmk%.,@9.`l}]Q/">
                                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                  <field name="OID">mqtt.0.cmnd.NSPanel_Wohnzimmer.POWER</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="math_number" id="C7W-(1hQ*HB@$pg8*j-6">
                                                      <field name="NUM">0</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </statement>
                                            </block>
                                          </statement>
                                        </block>
                                      </statement>
                                      <next>
                                        <block type="on_ext" id="t7m6:/x+}f$5Acz=%)7;">
                                          <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="%b@$1#|*~)IA_6uEwkbw">
                                              <field name="oid">0_userdata.0.NSPanel.1.Eigene.Modi.AUTOMATIC</field>
                                            </shadow>
                                          </value>
                                          <statement name="STATEMENT">
                                            <block type="controls_if" id="HXNUdBtmw*yQMd%@[]90">
                                              <value name="IF0">
                                                <block type="logic_compare" id="1Lj4jX%eS;^`Egu`b7nw">
                                                  <field name="OP">EQ</field>
                                                  <value name="A">
                                                    <block type="on_source" id="p!k5,473^w!`(WGbgEV5">
                                                      <field name="ATTR">state.val</field>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <block type="logic_boolean" id="CS~es[me[c1w[y.r=V.d">
                                                      <field name="BOOL">FALSE</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <statement name="DO0">
                                                <block type="control" id=")$ta3c^m=WOaRwdzISOi">
                                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                  <field name="OID">mqtt.0.cmnd.NSPanel_Wohnzimmer.POWER</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="math_number" id="Tb#-d/Xh{du~QP#1n,Ye">
                                                      <field name="NUM">0</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </statement>
                                            </block>
                                          </statement>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </xml>
                          
                          M 1 Reply Last reply Reply Quote 1
                          • M
                            Mercyful 0 @Tom_W last edited by

                            @tom_w said in SONOFF NSPanel mit Lovelace UI:

                            @mercyful-0

                            Hier mal mein Blockly, welches genau das macht was du erreichen willst. Ich mache es zwar nicht wie du mit dem tastet (da dort meine Kids des öfteren hindrücken würden und ich nicht merke dass die Heizung aus ist) sondern mit einem Button auf der Thermopage, aber vom Prinzip her müsste es verständlich werden. Du brauchst für das "Ein / Aus" der Heizung einen extra Datenpunkt den du schaltest. Der wird dann in deinem Skript mit eingebaut.

                            Vielen Dank!
                            Leider kann ich das nicht importieren, muss ich das noch manuell anpassen?
                            Danke und liebe Grüße
                            Mercy

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

                              @mercyful-0

                              Ich habs nochmal neu rein kopiert, da lief bei copy & paste was schief.

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

                                @tom_w @Mercyful-0

                                ich habe hier mal noch ein TS für die Reglung:

                                const Thermo_Path = '0_userdata.0.Thermostat.Raum1.';           //Thermo Pfad der je nach raum neu angelegt wird
                                const NSPanel_Path = '0_userdata.0.NSPanel.2.'                  //NSPanel Pfad
                                const TargetTemp = Thermo_Path + 'TargetTemp';                  //Datenpunkt für Zieltemperatur
                                const OffsetTemp = Thermo_Path + 'OffsetTemp';                  //Offset Temperatur, beim erstellen wir 1°C eingestellt
                                const Relay = NSPanel_Path + 'Relay.1' ;                        //Relay was geschalten werden soll, NSPanel_Path + 'Relay.1' oder NSPanel_Path + 'Relay.2' sein oder extra Datenpunkt Thermo_Path + 'Relay'
                                const RoomTemp = NSPanel_Path + 'Sensor.ANALOG.Temperature';    //Raumtemperaturwert, kann NSPanel_Path + 'Sensor.ANALOG.Temperature' oder ein ander Datenpunkt sein
                                const DEBUG = false;
                                
                                
                                async function create_Stats(){
                                    if(existsObject(TargetTemp) == false){
                                         await createStateAsync(TargetTemp, 0, <iobJS.StateCommon>{ type: 'number', 'unit': '°C' });
                                    }
                                    if(existsObject(OffsetTemp) == false){
                                         await createStateAsync(OffsetTemp, 1, <iobJS.StateCommon>{ type: 'number', 'unit': '°C' });
                                    }
                                    if(existsObject(Relay) == false){
                                         await createStateAsync(Relay, false, { type: 'boolean'});
                                    }
                                }
                                create_Stats();
                                
                                on({id: RoomTemp, change: "ne"}, async function (obj) {
                                    try {
                                
                                        if((getState(TargetTemp).val - getState(OffsetTemp).val) >= getState(RoomTemp).val){
                                            setStateAsync(Relay,true);
                                            if(DEBUG){
                                                console.log("Relay on")
                                            }
                                        }else if((getState(TargetTemp).val + getState(OffsetTemp).val) <= getState(RoomTemp).val){
                                            setStateAsync(Relay,false);
                                            if(DEBUG){
                                                console.log("Relay off")
                                            }
                                        }else{
                                            if(DEBUG){
                                                console.log("Relay do nothing")
                                            }
                                        }
                                    } catch (err) { 
                                        console.warn('Error to set Relay ' + err.message); 
                                    }
                                });
                                

                                Hinweis: wenn du die Tasmota Sensor Daten nehmen willst musst du wissen das Standard nur alle 5min die Sensordaten übermittelt werden, man kann das mit TelePeriod über die Tasmota-Konsole einstellen (minimal 10Sek)

                                1 Reply Last reply Reply Quote 1
                                • M
                                  Mercyful 0 last edited by

                                  @ronny130286
                                  Vielen Dank! Das Script läuft und macht was es soll.
                                  Liebe Grüße
                                  Mercy

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    Mercyful 0 @Tom_W last edited by

                                    @tom_w said in SONOFF NSPanel mit Lovelace UI:

                                    @mercyful-0

                                    Ich habs nochmal neu rein kopiert, da lief bei copy & paste was schief.

                                    Ich konnte es importieren.
                                    Ich habe Fragen zu den Datenpunkten:
                                    Welchen Typ hat 'alias.0.Wohnzimmer.Temperatur Wohnzimmer' und womit wird dieser verbunden?
                                    Woher bekommst Du die Informationen von 'Wert' (beim ersten aktualisiere 0_userdata...)?
                                    Der Datenpunkt 'alias.0.Wohnzimmer.Erreichbar Multisensor Wohnzimmer' ist sicherlich ein Boolscher der prüft ob ein anderer Sensor erreichbar ist?
                                    Was ist das für ein Datenpunkt '0_userdata.0.NSPanel.1.Eigene.Modi.AUTOMATIC' und welche Werte kann dieser annehmen?
                                    Danke für die Info!
                                    Liebe Grüße
                                    Mercy

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

                                      @mercyful-0

                                      https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-ALIAS-Definitionen#thermostat---cardthermo---channel-thermostat

                                      Ihr seid ja schon fertig. Tolle Skripte...

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

                                        @mercyful-0 sagte in SONOFF NSPanel mit Lovelace UI:

                                        Welchen Typ hat 'alias.0.Wohnzimmer.Temperatur Wohnzimmer' und womit wird dieser verbunden?

                                        Temperatur Wohnzimmer ist die Temperatur eines Batteriebetriebenen Temperatursensors

                                        Woher bekommst Du die Informationen von 'Wert' (beim ersten aktualisiere 0_userdata...)?

                                        In 'Wert' steht ja der Wert des Triggerereignisses. Der erste Trigger macht nichts anderes, als wenn sich der interne Temperaturwert des NS Panel ändert uu diesem 'Wert' ein Offset zu addieren und in einen neuen Wert zu schreiben.
                                        Das mache ich, da der interne Temperaturfühler bei mir einfach zu weit vom tatsächlichen entfernt ist.

                                        Der Datenpunkt 'alias.0.Wohnzimmer.Erreichbar Multisensor Wohnzimmer' ist sicherlich ein Boolscher der prüft ob ein anderer Sensor erreichbar ist?

                                        Richtig, das ist ein boolscher Wert der genau das von dir angegebene macht. Ist der Sensor (wieder mein Batteriebetriebener Temperatursensor) erreichbar, schreibe ich diesen Wert in einen Datenpunkt, ist er nicht erreichbar, dann den errechneten des NSPanel Sensors.
                                        Das alles macht der zweite Triggerblock

                                        Was ist das für ein Datenpunkt '0_userdata.0.NSPanel.1.Eigene.Modi.AUTOMATIC' und welche Werte kann dieser annehmen?

                                        Das ist ein boolscher Wert, ist der false ist die Heizung aus (4. Triggerblock) oder true, dann ist die Heizungsregelung aktiv.
                                        Also genau der Wert den du mit deiner Hardwaretaste umschalten musst.

                                        Gruß

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          DaPeace @Mercyful 0 last edited by

                                          @mercyful-0 es gibt aber auch einen heat-manager-adapter der genau diese Regelung macht und dabei sogar alle anderen Annehmlichkeiten einer modernen Heizungssteuerung hat (Heizperioden/Partymodus/Urlaubsmodus). Dann braucht es nicht zwingend ein Blocky.

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

                                            @dapeace

                                            Den Adapter hatte ich mir damals auch angesehen, ich fand ihn aber für ne FBH mit Erdwärmepumpe, einfach zu umfangreich.
                                            Da hilft auch das einfache Skript, weil viele Sachen die der Adapter mitbringt nicht benötigt werden.
                                            Bspw. die FBH ist viel zu träge um auf ein offenes Fenster zu reagieren, Party/Urlaubsmodus wir in der Heizung eingestellt => Heizungsadapter (Nibe, Wolf etc.)

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            712
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

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