Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Einfache Steuerung Steckdose/Temperatur

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Einfache Steuerung Steckdose/Temperatur

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Hc-Yami last edited by

      Die größere Baustelle ist die Visualisierung. Wären fixe Werte nicht in Ordnung? Weiterhin; warum noch die Steckdose nutzen wenn du eh schon den TH16 im Einsatz hast?

      1 Reply Last reply Reply Quote 0
      • Seb K.
        Seb K. last edited by

        Der th16 kann nur 10A schalten.

        Wären ja dann fixe Werte wenn ich die in der Vis mittels Regler einstelle .

        Oder wie meinst du das?

        CrunkFX 1 Reply Last reply Reply Quote 0
        • CrunkFX
          CrunkFX Forum Testing @Seb K. last edited by

          @Seb-K Muss die Steuerung denn mit Node-Red erfolgen? Node-Red ist zum verknüpfen eine super Software aber für solche vorhaben recht ungeeignet. Ich würde dir sonst anbieten, dass wir einen Script mit Blockly oder Javascript schreiben der die Anlage dann auch mit dynamischen Werten steuern kann.

          MFG
          CrunkFX

          Seb K. 1 Reply Last reply Reply Quote 0
          • Seb K.
            Seb K. @CrunkFX last edited by

            @CrunkFX Hey super gerne,

            allerdings habe ich das Problem Java zu installieren..... und soweit ich weiß ist das zwingen für Blocky notwendig oder?

            CrunkFX 2 Replies Last reply Reply Quote 0
            • CrunkFX
              CrunkFX Forum Testing @Seb K. last edited by

              @Seb-K Versuch mal in IOB den Javascript Adapter zu installieren. Dann sollten alle dependencies automatisch mitinstalliert werden.

              1 Reply Last reply Reply Quote 0
              • CrunkFX
                CrunkFX Forum Testing @Seb K. last edited by

                @Seb-K Falls bei dir die Installation klappt gehst du wie folgt vor:

                1. Im ObjektBrowser unter Userdata.0 einen neuen Datenpunkt als Zahl anlegen, der deine Wunschtemperatur wird.

                2. Ich gehe davon aus, dass die Werte für Temp im TH16 als Zahl angelegt werden. Falls nicht ändern wir nochmal was.
                  Dann also ein neues Blockly Script anlegen und oben rechts auf Importieren gehen:

                 <xml xmlns="http://www.w3.org/1999/xhtml">
                  <block type="on_ext" id="W1ukkv8+-RJ^m%krfUK6" x="37" y="37">
                    <mutation items="1"></mutation>
                    <field name="CONDITION">ne</field>
                    <field name="ACK_CONDITION"></field>
                    <value name="OID0">
                      <shadow type="field_oid" id="Q?7Bcztc=QdB~m}3^dbc">
                        <field name="oid">default</field>
                      </shadow>
                      <block type="get_value" id="~8pkp]f@pXX1@CQ.IY2,">
                        <field name="ATTR">val</field>
                        <field name="OID">0_userdata.0.dein_TH16_Temp_DP</field>
                      </block>
                    </value>
                    <statement name="STATEMENT">
                      <block type="controls_if" id="2kqxJ}$lU85L!ft-/kxE">
                        <value name="IF0">
                          <block type="logic_compare" id="rkTXol`rxf/1q~i@Kjaa">
                            <field name="OP">LT</field>
                            <value name="A">
                              <block type="get_value" id="G?=^}GmR84glD`Zi+tQb">
                                <field name="ATTR">val</field>
                                <field name="OID">0_userdata.0.dein_TH16_Temp_DP</field>
                              </block>
                            </value>
                            <value name="B">
                              <block type="math_arithmetic" id="lHTnf(PKJk%5BAS^.du3">
                                <field name="OP">MINUS</field>
                                <value name="A">
                                  <shadow type="math_number" id="Iqlpl#{S5S}bv]mWtT]P">
                                    <field name="NUM">1</field>
                                  </shadow>
                                  <block type="get_value" id="^.{.Qf.FXqJR.dskU*;X">
                                    <field name="ATTR">val</field>
                                    <field name="OID">0_userdata.0.deine_Wunschtemperatur</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <shadow type="math_number" id="`$v%dB0EWl]qrkcsdAuz">
                                    <field name="NUM">0.2</field>
                                  </shadow>
                                </value>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="control" id="@]0_0[C?0^jLax0O%*%7">
                            <mutation delay_input="false"></mutation>
                            <field name="OID">0_userdata.0.deine_Gosund_Steckdose</field>
                            <field name="WITH_DELAY">FALSE</field>
                            <value name="VALUE">
                              <block type="logic_boolean" id="~C/-P,sOktY:cG4{H;oz">
                                <field name="BOOL">TRUE</field>
                              </block>
                            </value>
                          </block>
                        </statement>
                        <next>
                          <block type="controls_if" id="YNr;-AsS@8l|_wD(q9Qw">
                            <value name="IF0">
                              <block type="logic_compare" id="C$EOUzST`sN/Y5{=MH6-">
                                <field name="OP">GT</field>
                                <value name="A">
                                  <block type="get_value" id="t;-XAAJ@NVUG8/K%]xE*">
                                    <field name="ATTR">val</field>
                                    <field name="OID">0_userdata.0.dein_TH16_Temp_DP</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <block type="math_arithmetic" id="8$B;`_}JFe$$a^Rz5Lv7">
                                    <field name="OP">ADD</field>
                                    <value name="A">
                                      <shadow type="math_number" id="Iqlpl#{S5S}bv]mWtT]P">
                                        <field name="NUM">1</field>
                                      </shadow>
                                      <block type="get_value" id="xx]3:*!$^s9o5)9/|LPM">
                                        <field name="ATTR">val</field>
                                        <field name="OID">0_userdata.0.deine_Wunschtemperatur</field>
                                      </block>
                                    </value>
                                    <value name="B">
                                      <shadow type="math_number" id="4`$HIlisil=:DXC8S%hM">
                                        <field name="NUM">0.2</field>
                                      </shadow>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="control" id="n|N[iCG$i]0?9TeM_~K6">
                                <mutation delay_input="false"></mutation>
                                <field name="OID">0_userdata.0.deine_Gosund_Steckdose</field>
                                <field name="WITH_DELAY">FALSE</field>
                                <value name="VALUE">
                                  <block type="logic_boolean" id="S4SCo58|12bec#+nx8Me">
                                    <field name="BOOL">TRUE</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                          </block>
                        </next>
                      </block>
                    </statement>
                  </block>
                </xml>
                

                In Blockly lässt sich leider keine anständige Hysterese einbauen, daher hab ich für min und max einen Offset von 0,2 angesetzt. Das funktioniert bei unserer Fußbodenheizung super. Damit soll verhindert werden, dass die Pumpe und Ventile ständig schnell hintereinander schalten.

                In VIS kannst du dann einen Slider o.ä bauen mit dem du dann die Wunschtemperatur anpassen kannst.

                Bei Rückfragen stehe ich gerne zur Verfügung.

                MFG CrunkFX

                1 Reply Last reply Reply Quote 0
                • Seb K.
                  Seb K. last edited by

                  @CrunkFX said in Einfache Steuerung Steckdose/Temperatur:

                  rowser unter Us

                  ich installiere jetzt erstmal iobroker auf nem neuem system und dann teste ich noch mal JS

                  CrunkFX 1 Reply Last reply Reply Quote 0
                  • CrunkFX
                    CrunkFX Forum Testing @Seb K. last edited by

                    @Seb-K OK welche Plattform nutzt du?

                    1 Reply Last reply Reply Quote 0
                    • Seb K.
                      Seb K. last edited by

                      debian auf einem Thin PC

                      CrunkFX 1 Reply Last reply Reply Quote 0
                      • CrunkFX
                        CrunkFX Forum Testing @Seb K. last edited by

                        @Seb-K OK damit sollte es auf jeden Fall klappen

                        1 Reply Last reply Reply Quote 0
                        • Seb K.
                          Seb K. last edited by

                          ich installiere erstmal alles und melde mich nochmal. bisher erst einmal besten dank

                          1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active last edited by

                            Ich verstehe nicht, warum manche hier was Blockly oder Java Schript schreiben in einem Thread wo nach einer Node-Red Lösung gefragt wird. Für solche Probleme - die man soweit ich weiß Hysterese genannt werden - kann man sogar im Node-Red fertige Lösungen installieren und muss quasi nichts programmieren.

                            Ich denke - dass man hier sicher selbst einen Flow basteln kann, aber es gibt auch einen Node / Modul, dass man ausprobieren kann:

                            https://flows.nodered.org/node/node-red-contrib-hysteresis

                            CrunkFX 1 Reply Last reply Reply Quote 0
                            • CrunkFX
                              CrunkFX Forum Testing @mickym last edited by

                              @mickym Wie du vielleicht mitbekommen hast sollte die Hysterese dynamisch gestaltet werden, ich hab jahrelang nodered benutzt und bin mir darüber im Klaren, dass das eine super Software ist, aber das verarbeiten von variablen aus anderen Quellen z.b. Datenpunkte in IOBroker ist mehr ein workaround als hilfreich. Ich lasse mich aber gerne eines besseren belehren, wenn du mir hier nen Flow postest der eine dynamische Hysterese ermöglicht.

                              MFG
                              CrunkFX

                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @CrunkFX last edited by mickym

                                @CrunkFX

                                ...aber das verarbeiten von variablen aus anderen Quellen z.b. Datenpunkte in IOBroker ist mehr ein workaround als hilfreich. - was ich an dem Satz nicht verstehe ist, dass Du doch nahezu auf alle Datenpunkte im IOBroker (mal abgesehen von den Systemdaten) zugreifen kannst. Ok man muss oft noch eine Typkonvertierung ggf. durchführen.

                                Man kann z.Bsp um Levels dynamisch zu starten - die Hysterese als Subflow implementieren.

                                [
                                    {
                                        "id": "2963f527.4194ba",
                                        "type": "switch",
                                        "z": "b42815ec.5e6c58",
                                        "name": "fLevel.On < Temperatur > fLevel.Off",
                                        "property": "payload",
                                        "propertyType": "msg",
                                        "rules": [
                                            {
                                                "t": "lt",
                                                "v": "fLevel.On",
                                                "vt": "flow"
                                            },
                                            {
                                                "t": "gt",
                                                "v": "fLevel.Off",
                                                "vt": "flow"
                                            },
                                            {
                                                "t": "lte",
                                                "v": "fLevel.Off",
                                                "vt": "flow"
                                            }
                                        ],
                                        "checkall": "false",
                                        "repair": false,
                                        "outputs": 3,
                                        "x": 560,
                                        "y": 100,
                                        "wires": [
                                            [],
                                            [],
                                            []
                                        ]
                                    }
                                ]
                                

                                Zum Initialisieren bzw. Verändern der Levels schicke ich ein Nachrichten-Objekt in dem ich das untere und ober Level setzen kann.

                                In dem Beispiel:

                                msg.level -
                                Objekt mit On und Off - als nummerische Werte, um die Standardlevels von 10 (level.On) und 20 (level.Off) zu überschreiben.

                                Bei mir sieht das Ganze komplexer aus - aber ich denke das Prinzip kann man erkennen:

                                screen.png

                                Insofern find ich das eigentlich super einfach - gerade für jemand der nicht programmiert. 😉

                                Die Verzögerung habe ich nur gebaut - damit man Initialisierung und Veränderungen von aktuellen Daten unterschiedlich behandeln kann.

                                Das was Du mit eigenem Datenpunkt unter userdata.0 zu erstellen für die VIS ist ja völlig richtig und würde ich auch so machen. 🙂

                                Im Prinzip ist es eigentlich noch einfacher - als ich eben dargestellt habe. Man kann die in userdata.0 erstellten Datenpunkte eigenlich direkt einlesen und dann in flow Variablen abspeichern und somit ist das Ganze eigentlich schon erledigt und dynamisiert!

                                Ob man die Spanne zwischen oben oder unterem Level dann verarbeiten will - bleibt freigestellt, dann eben diesen Fall im Switch löschen.

                                Und wenn man die Level in den userdata-Punkten dynamisch berechnen will - kann man dies ja mathematisch mit einer Function-Node machen oder einer Change-Node. Dann stelle ich halt eine Temperatur ein und setze die flow-Variablen eben nach Berechnung, wenn userdata.0.temperatur geändert wurde.
                                Wenn Du kein VIS nutzt, sondern das Node-Red Dashboard - kannst natürlich auch die Flow Variablen direkt setzen - muss man halt nur initialisieren.

                                Ansonsten wird der Flow ja einfach mit den Temperaturen der Sonoff TH16 gespeist.

                                CrunkFX 1 Reply Last reply Reply Quote 0
                                • CrunkFX
                                  CrunkFX Forum Testing @mickym last edited by

                                  @mickym Hi, deinen Ansatz finde ich sehr gut und verstehe deine Argumente für Node-Red, aber für jemanden der wenig bis gar keine Erfahrung in NodeRed hat sind das komplett böhmische Dörfer. Die hier zu bewältigende Aufgabe ist Technisch gesehen nicht sonderlich Komplex, aber in Blockly(trotz grauenvoller Übersetzung) einfacher zu Realisieren als in NodeRed, da Blockly Baukastentechnisch Arbeitet und Nodered Flow basiert. Wenn man also ganz frisch jemandem Nodered beibringen muss, dann sollte die Anfangsaufgabe keine Mammutaufgabe sein. Wenn hier jemand mit entsprechender Nodered Erfahrung dieses Problem gestellt hätte wäre ich sicher drauf eingegangen. Nichts desto trotz bleibt jedem selbst überlassen wie er seine Probleme löst, Nodered ist wie gesagt eine Super Software auch für Anfänger aber gerade bei Beispielen in denen mit Flow Messages gearbeitet wird(sprich man sieht nicht was passiert, da der Wert ja unsichtbar im Flow verteilt wird) könnte ich mir Vorstellen, dass da nicht jeder auf anhieb den durchblick hat sowie bei Blockly.

                                  MFG
                                  CrunkFX

                                  mickym 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @CrunkFX last edited by mickym

                                    @CrunkFX
                                    Ich habe mal Dein Blockly Skript importiert und versucht in Node-Red umzusetzen:

                                    [
                                        {
                                            "id": "9f04b667.5cd998",
                                            "type": "tab",
                                            "label": "Flow 2",
                                            "disabled": false,
                                            "info": ""
                                        },
                                        {
                                            "id": "3bcbf948.4c3446",
                                            "type": "ioBroker in",
                                            "z": "9f04b667.5cd998",
                                            "name": "",
                                            "topic": "0_userdata.0.dein_TH16_Temp_DP",
                                            "payloadType": "value",
                                            "onlyack": "",
                                            "func": "all",
                                            "gap": "",
                                            "x": 230,
                                            "y": 200,
                                            "wires": [
                                                [
                                                    "9deba34c.8a806"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "9deba34c.8a806",
                                            "type": "change",
                                            "z": "9f04b667.5cd998",
                                            "name": "to Number",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "payload",
                                                    "pt": "msg",
                                                    "to": "$number(msg.payload)\t",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 470,
                                            "y": 200,
                                            "wires": [
                                                [
                                                    "79074a2f.e315f4",
                                                    "79a6662f.b72558"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "79074a2f.e315f4",
                                            "type": "change",
                                            "z": "9f04b667.5cd998",
                                            "name": "Level Oben + 0.2",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "payload",
                                                    "pt": "msg",
                                                    "to": "payload + 0.2",
                                                    "tot": "jsonata"
                                                },
                                                {
                                                    "t": "set",
                                                    "p": "LevelOff",
                                                    "pt": "flow",
                                                    "to": "payload",
                                                    "tot": "msg"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 690,
                                            "y": 180,
                                            "wires": [
                                                []
                                            ]
                                        },
                                        {
                                            "id": "79a6662f.b72558",
                                            "type": "change",
                                            "z": "9f04b667.5cd998",
                                            "name": "Level Unten - 0.2",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "payload",
                                                    "pt": "msg",
                                                    "to": "payload - 0.2",
                                                    "tot": "jsonata"
                                                },
                                                {
                                                    "t": "set",
                                                    "p": "LevelOn",
                                                    "pt": "flow",
                                                    "to": "payload",
                                                    "tot": "msg"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 690,
                                            "y": 220,
                                            "wires": [
                                                []
                                            ]
                                        },
                                        {
                                            "id": "a3f4a48c.5fbea8",
                                            "type": "inject",
                                            "z": "9f04b667.5cd998",
                                            "name": "",
                                            "topic": "Temperatur",
                                            "payload": "19",
                                            "payloadType": "str",
                                            "repeat": "",
                                            "crontab": "",
                                            "once": false,
                                            "onceDelay": 0.1,
                                            "x": 150,
                                            "y": 360,
                                            "wires": [
                                                [
                                                    "200998b7.04c3e8"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "200998b7.04c3e8",
                                            "type": "change",
                                            "z": "9f04b667.5cd998",
                                            "name": "to Number",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "payload",
                                                    "pt": "msg",
                                                    "to": "$number(msg.payload)\t",
                                                    "tot": "jsonata"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 310,
                                            "y": 360,
                                            "wires": [
                                                [
                                                    "60e1c1db.31561"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "60e1c1db.31561",
                                            "type": "switch",
                                            "z": "9f04b667.5cd998",
                                            "name": "Schalte",
                                            "property": "payload",
                                            "propertyType": "msg",
                                            "rules": [
                                                {
                                                    "t": "gt",
                                                    "v": "LevelOff",
                                                    "vt": "flow"
                                                },
                                                {
                                                    "t": "lt",
                                                    "v": "LevelOn",
                                                    "vt": "flow"
                                                }
                                            ],
                                            "checkall": "true",
                                            "repair": false,
                                            "outputs": 2,
                                            "x": 460,
                                            "y": 360,
                                            "wires": [
                                                [
                                                    "775acae7.a07974"
                                                ],
                                                [
                                                    "c65452e7.c57c8"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "775acae7.a07974",
                                            "type": "change",
                                            "z": "9f04b667.5cd998",
                                            "name": "Ausschalten Off/False",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "payload",
                                                    "pt": "msg",
                                                    "to": "false",
                                                    "tot": "bool"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 700,
                                            "y": 340,
                                            "wires": [
                                                [
                                                    "184ff99a.c85ca6"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "c65452e7.c57c8",
                                            "type": "change",
                                            "z": "9f04b667.5cd998",
                                            "name": "Einschalten On/true",
                                            "rules": [
                                                {
                                                    "t": "set",
                                                    "p": "payload",
                                                    "pt": "msg",
                                                    "to": "true",
                                                    "tot": "bool"
                                                }
                                            ],
                                            "action": "",
                                            "property": "",
                                            "from": "",
                                            "to": "",
                                            "reg": false,
                                            "x": 690,
                                            "y": 380,
                                            "wires": [
                                                [
                                                    "184ff99a.c85ca6"
                                                ]
                                            ]
                                        },
                                        {
                                            "id": "184ff99a.c85ca6",
                                            "type": "ioBroker out",
                                            "z": "9f04b667.5cd998",
                                            "name": "zur Steckdose",
                                            "topic": "",
                                            "ack": "false",
                                            "autoCreate": "false",
                                            "x": 980,
                                            "y": 360,
                                            "wires": []
                                        }
                                    ]
                                    

                                    Das sieht dann so aus:

                                    screen.png

                                    Und ich will niemand bekehren, aber doch vielleicht auch Alternativen aufzeigen.

                                    Das wäre in meinen Augen das, was Du mit dem Blockly machst - ich habe mir das extra mal importiert. 😉

                                    Ich persönlich mag dieses Flow basierende, da es gerade für Neulinge einfacher zu verstehen ist, was passiert wenn ....
                                    Im Übrigen wird man eben auch gezwungen zu unterscheiden, was sind "Parameter" Flows oder dann "Schalter" Flows. Ich finde, dass man hier "erzogen" wird, die Probleme richtig zu strukturieren - deshalb bin ich halt ein kleiner Fan-Boy von Node-Red. Man möge mir das Nachsehen.

                                    Statt dem Inject Node - für die Temperatur natürlich den Datenpunkt der Sonoff setzen und analog zu oben in Zahl konvertieren und natürlich den Datenpunkt zur Steckdose anpassen und ob True/False oder 0/1 oder On/Off gesetzt werden muss.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    1.1k
                                    Online

                                    31.7k
                                    Users

                                    79.7k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    17
                                    1872
                                    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