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. Shelly addon über Node Red auf einer NAS mit iobroker

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Shelly addon über Node Red auf einer NAS mit iobroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      Ronnyempire @mickym last edited by

      @mickym Gibt es dafür eine Anleitung? Weil der jetzige Datenpunkt (switch0) ja mehrere Parameter enthält.sss.png

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

        @ronnyempire Schau mal grundsätzlich hier: https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Mqtt

        So nun zu Deinen jetzigen Datenpunkten.

        Zum Auslesen ist das ja ziemlich simple - Du liest einfach den output Parameter aus.

        444e8d72-d69c-4dce-9185-734da0d0621a-image.png

        Du lässt den Datenpunkt einfach triggern und liest dann den Datenpunkt aus und selektierst das Attribut. Schreiben tust Du im Prinzip über das command topic.

        Wenn Du es über einen Datenpunkt machen willst, den Du auch in der VIS bedienen kannst, dann musst Du selbst einen Datenpunkt erstellten. - Ich kann Dich schon durch den Prozess führen - auch wenn ich das Puzzeln nicht besonders mag.

        Also wenn Du es über einen Datenpunkt machen willst, dann kopiere mir mal den Wert von switch:0 hier in codetags rein und ich simuliere das dann bei mir über einen Datenpunkt und führe Dich durch den Prozess.

        Code-Tags.gif

        R 1 Reply Last reply Reply Quote 0
        • R
          Ronnyempire @mickym last edited by

          @mickym Alles klar, also VIS muss nicht unbedingt sein. Mir ist nur wichtig, dass meine Blockly Skripte weiter funktionieren. Ich musste ja vom Shelly Adapter auf den Mqtt Adapter umstellen, damit ich die Temperatur richtig auslesen kann.

          {"id":0, "source":"HTTP", "output":true, "apower":1189.5, "voltage":226.2, "current":5.269, "aenergy":{"total":16468.090,"by_minute":[19845.818,19817.516,19857.311],"minute_ts":1692544679},"temperature":{"tC":67.5, "tF":153.4}}
          
          mickym 2 Replies Last reply Reply Quote 0
          • mickym
            mickym Most Active @Ronnyempire last edited by mickym

            @ronnyempire sagte in Shelly addon über Node Red auf einer NAS mit iobroker:

            {"id":0, "source":"HTTP", "output":true, "apower":1189.5, "voltage":226.2, "current":5.269, "aenergy":{"total":16468.090,"by_minute":[19845.818,19817.516,19857.311],"minute_ts":1692544679},"temperature":{"tC":67.5, "tF":153.4}}

            So nur für Dich zur Info - ich habe jetzt mal 2 Datenpunkte unter 0_userdata.0 angelegt - Du brauchst aber für Dein Relais Schalter nur einen Datenpunkt vom Typ Boolean - ich hab den schalter genannt. der shelly1pm repräsentiert Deinen Datenpunkt des Shelly1PMs im Mqtt.

            f3811419-1972-4674-a099-ef0694b76bad-image.png

            Mit diesem Blockly setzt Du den Wert Deines Datenpunktes - Schalter, sobald vom mqtt ein neuer Status kommt.

            b53ddebc-faa3-4164-9cda-a33533a5fb89-image.png

            <xml xmlns="https://developers.google.com/blockly/xml">
             <block type="on" id="*7X?[f+XtD0vAcAVMqFY" x="-362" y="-487">
               <field name="OID">0_userdata.0.Test.shelly1pm</field>
               <field name="CONDITION">ne</field>
               <field name="ACK_CONDITION">true</field>
               <statement name="STATEMENT">
                 <block type="update" id="zd@Eas).84:(^VE{[m6a">
                   <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                   <field name="OID">0_userdata.0.Test.schalter</field>
                   <field name="WITH_DELAY">FALSE</field>
                   <value name="VALUE">
                     <block type="get_attr" id="J@ZUCDah{NrYy`??WN4m">
                       <value name="PATH">
                         <shadow type="text" id="b72GuGuAr)l8T8KB*dXu">
                           <field name="TEXT">output</field>
                         </shadow>
                       </value>
                       <value name="OBJECT">
                         <block type="on_source" id="t=b1rMSd+C%zd(y%1WA*">
                           <field name="ATTR">state.val</field>
                         </block>
                       </value>
                     </block>
                   </value>
                 </block>
               </statement>
             </block>
            </xml>
            

            Du musst halt die Pfade zu Deinen Datenpunkten anpassen.

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

              So hier ist dann auch der umgekehrte Weg. Wenn Du also in Deinen selbst erstellten DP mit steuer also ACK=False schreibst, dann wird der untere Ast selektiert:

              04b8728c-efa4-409c-b6cf-69b453ae80a6-image.png

              <xml xmlns="https://developers.google.com/blockly/xml">
                <variables>
                  <variable id="IWCFnZr0b.`3kTR;i}9f">Schalter1</variable>
                </variables>
                <block type="on" id="*7X?[f+XtD0vAcAVMqFY" x="-387" y="-537">
                  <field name="OID">0_userdata.0.Test.shelly1pm</field>
                  <field name="CONDITION">ne</field>
                  <field name="ACK_CONDITION">true</field>
                  <statement name="STATEMENT">
                    <block type="update" id="zd@Eas).84:(^VE{[m6a">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">0_userdata.0.Test.schalter</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="get_attr" id="J@ZUCDah{NrYy`??WN4m">
                          <value name="PATH">
                            <shadow type="text" id="b72GuGuAr)l8T8KB*dXu">
                              <field name="TEXT">output</field>
                            </shadow>
                          </value>
                          <value name="OBJECT">
                            <block type="on_source" id="t=b1rMSd+C%zd(y%1WA*">
                              <field name="ATTR">state.val</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </statement>
                  <next>
                    <block type="on" id="-_0G]27pLb=[)%L(@5@k">
                      <field name="OID">0_userdata.0.Test.schalter</field>
                      <field name="CONDITION">ne</field>
                      <field name="ACK_CONDITION">false</field>
                      <statement name="STATEMENT">
                        <block type="controls_if" id="!o=;)%+mI6a6QPg):2(:">
                          <mutation else="1"></mutation>
                          <value name="IF0">
                            <block type="on_source" id="P{B9%6M?Av5.^+!.fJsT">
                              <field name="ATTR">state.val</field>
                            </block>
                          </value>
                          <statement name="DO0">
                            <block type="variables_set" id="b$zi{jmUA:O:=~-DP(7A">
                              <field name="VAR" id="IWCFnZr0b.`3kTR;i}9f">Schalter1</field>
                              <value name="VALUE">
                                <block type="text" id="fJO_.5wQ}*3;H:0(MyD{">
                                  <field name="TEXT">on</field>
                                </block>
                              </value>
                            </block>
                          </statement>
                          <statement name="ELSE">
                            <block type="variables_set" id="}UCd#8ZqgBgO(X$p3Qvf">
                              <field name="VAR" id="IWCFnZr0b.`3kTR;i}9f">Schalter1</field>
                              <value name="VALUE">
                                <block type="text" id="c^h^9kn,x1~YJ;cfSub^">
                                  <field name="TEXT">off</field>
                                </block>
                              </value>
                            </block>
                          </statement>
                          <next>
                            <block type="sendto_custom" id="ls8@a?b_FZd{/PwZ%,li">
                              <mutation xmlns="http://www.w3.org/1999/xhtml" items="topic,message" with_statement="false"></mutation>
                              <field name="INSTANCE">mqtt.1</field>
                              <field name="COMMAND">sendMessage2Client</field>
                              <field name="LOG"></field>
                              <field name="WITH_STATEMENT">FALSE</field>
                              <value name="ARG0">
                                <shadow type="text" id="$,O^*f*}($?[H8_(d*+U">
                                  <field name="TEXT">shellyplus1pm-80646fe3f840/command/switch:0</field>
                                </shadow>
                              </value>
                              <value name="ARG1">
                                <shadow type="text" id="kYzE4%b}Px*fTaC#_m53">
                                  <field name="TEXT">Meine Nachricht</field>
                                </shadow>
                                <block type="variables_get" id="FQbgf[f./6MlUVZ},6Lg">
                                  <field name="VAR" id="IWCFnZr0b.`3kTR;i}9f">Schalter1</field>
                                </block>
                              </value>
                            </block>
                          </next>
                        </block>
                      </statement>
                    </block>
                  </next>
                </block>
              </xml>
              
              

              Unter Deinen mqtt- Datenpunkten sollte dann auch der command Ast auftauchen:

              c2093855-44ee-4c82-a926-6e6904546433-image.png

              Sobald der Datenpunkt unten erstellt ist, kannst Du diesen anstelle von SendTo auch mit steuere direkt in den Datenpunkt schreiben.

              So nun habe ich aber genug gepuzzelt - ich hasse puzzeln. 😉

              ===============================================================

              Eine Alternative ist DOCH ein Alias zu nutzen (s. nächster Post)

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

                Ah ich sehe man kann doch unterschiedliche IDs zum Lesen und Schreiben in EINEM ALIAS verwenden, dann probieren wir das ohne Blockly. So also alles zurück - es funktioniert mit einem ALIAS.

                a757b0f8-c1c1-466c-a46d-fe35a129e83d-image.png

                Zum Lesen musst Du Deinen status Datenpunkt eingeben.

                mqtt.0.shellyplus1pm-80646fe3f840.status.switch:0
                

                Zum Schreiben den manuell erstellten Datenpunkt unter command.

                mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0
                

                Die Lesen Konvertierungsfunktion ist dann wie gehabt:

                JSON.parse(val).output
                

                Die Schreiben Konvertierungsfunktion:

                val ? "on" : "off"
                

                Damit kannst Du dann ganz normal mit dem ALIAS über steuere und Blockly/VIS EIN und AUS-Schalten und liest den Status gleichzeitig über die Lesefunktion ein.

                Ich wusste selbst nicht, dass das inzwischen aufgebohrt wurde. Aber damit geht alles über EINEN Alias

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

                  @ronnyempire

                  So ich hab es auch noch mal mit einem Blockly getestet zum EIN- und AUSSCHALTEN und EINEM Alias

                  52ef01f4-5c49-4221-93a7-732f459a79ae-image.png

                  also mit steuere und das funktioniert!

                  Den unteren Teil kannst vergessen, den habe ich nur genommen, um Deinen Shelly1PM zu simulieren.

                  Um manuell übrigens den Datenpunkt im mqtt zu erstellen, musst Du den Expertenmodus einschalten.

                  1 Reply Last reply Reply Quote 0
                  • R
                    Ronnyempire @mickym last edited by Ronnyempire

                    @mickym said in Shelly addon über Node Red auf einer NAS mit iobroker:

                    val ? "on" : "off"

                    Ich danke dir herzlich für deine Mühen, jedoch bekomme ich es bei mir nicht zum laufen. Es erscheint beim Wert immer nur "null" und ein ändern bringt gar keinen effekt.

                    state.png

                    {
                      "common": {
                        "name": "SwitchPool",
                        "desc": "Manuell erzeugt",
                        "role": "state",
                        "type": "boolean",
                        "read": true,
                        "write": true,
                        "def": "",
                        "alias": {
                          "id": {
                            "read": "mqtt.1.shellyplus1pm-80646fe3f840.status.switch:0",
                            "write": "mqtt.1.shellyplus1pm-80646fe3f840.command.switch:0"
                          },
                          "read": "JSON.parse(val).output",
                          "write": "val ? \"on\" : \"off\""
                        }
                      },
                      "type": "state",
                      "native": {},
                      "_id": "alias.0.SwitchPool",
                      "from": "system.adapter.admin.0",
                      "user": "system.user.admin",
                      "ts": 1692625966200
                    
                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @Ronnyempire last edited by mickym

                      @ronnyempire Ist das bei Dir nicht mqtt.0 ? - anstelle von mqtt.1 ? Ich habs unten mal ausgebessert - da nur bei mir die 1. Instanz und nicht die 0. ist.

                      Du müsstest im Log auch Warnungen haben, wenn die Quelldatenpunkte nicht gefunden werden. Hast Du den Datenpunkt:

                      mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0
                      

                      auch erstellt?

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        Ronnyempire @mickym last edited by

                        @mickym said in Shelly addon über Node Red auf einer NAS mit iobroker:

                        mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0

                        Ok ich habe es angepasst, aber immer noch kein effekt. Der Datenpunt war schon da unter command

                        {
                          "_id": "mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0",
                          "common": {
                            "name": "shellyplus1pm-80646fe3f840/command/switch:0",
                            "write": true,
                            "read": true,
                            "role": "variable",
                            "desc": "mqtt server variable",
                            "type": "boolean"
                          },
                          "native": {
                            "topic": "shellyplus1pm-80646fe3f840/command/switch:0"
                          },
                          "type": "state",
                          "from": "system.adapter.admin.0",
                          "user": "system.user.admin",
                          "ts": 1692626757693
                        }
                        
                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @Ronnyempire last edited by

                          @ronnyempire na ok. Dann halt erstmal schauen ob es grundsätzlich funktioniert ohne Alias.

                          Schreibe doch mal „on“ oder „off“ ohne Bestätigung in den command Datenpunkt und schau ob das Relais schaltet.

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            Ronnyempire @mickym last edited by

                            @mickym Danke dir, dass war der entscheidende Hinweis. Der Datenpunkt war als Logikwert hinterlegt. Ich habe es auf Zeichenkette geändert und jetzt geht es. 🙂

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

                              @ronnyempire ok das heißt jetzt geht auch der ganze Zyklus mit Lesen und Schreiben? Und du kannst mit Blockly steuere über den Alias schalten?

                              R 1 Reply Last reply Reply Quote 0
                              • R
                                Ronnyempire @mickym last edited by

                                @mickym Ja korrekt, skript läuft einwandfrei durch, danke dir

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

                                  @ronnyempire na dann viel Spaß. Ich began schon an mir zu zweifeln. 😂

                                  1 Reply Last reply Reply Quote 0
                                  • G
                                    garbleflux @mickym last edited by

                                    @mickym
                                    Hallo mickym,

                                    herzlichen Dank für die tolle Erklärung und das Beispiel. Mit Deiner Hilfe habe ich es jetzt nach unendlich vielen Versuchen geschafft, die Werte der neuen Shelly-Plus-Generation aus dem JSON-String zu extrahieren und kann damit die Datenpunkte für die weitere Auswertung/Steuerung nutzen. 👍 👍 👍 👍 👍 👍

                                    Wenn man's weiß, ist das ja ganz einfach
                                    VG Michael

                                    L 1 Reply Last reply Reply Quote 1
                                    • L
                                      Laser @garbleflux last edited by

                                      @mickym Ich habe ein ähnliches Problem und bekomme die Konvertierungsfunktion nicht hin. Iobroker hängt teilweise minutenlang.
                                      Dannpunkt vorhanden:
                                      {"sn":{"Time":"2023-12-03T10:49:52","MHZ19B":{"Model":"B","CarbonDioxide":741,"Temperature":24.0},"TempUnit":"C"},"ver":1}
                                      Meine Funktion:
                                      e73323c6-1fc9-48eb-819f-839f7bd04bc5-image.png
                                      Es wird kein Datenpunkt generiert.

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

                                        @laser Na Datenpunkt generiert ist etwas missverständlich - es liegt auch daran, dass Du den Pfad nicht richtig definierst.

                                        die Konvertierung muss lauten:

                                        JSON.parse(val).sn.MHZ19B.CarbonDioxide
                                        

                                        Wenn Du so was nicht auf den ersten Block siehst empfehle ich Dir den JSON Formatter:
                                        https://jsonformatter.org/

                                        Wenn Du Deinen JSON links einträgst und dann auf Format Beauty klickst, bekommst die Hierarchie schön zu sehen.

                                        ab156422-4c98-44fd-a086-1268b9474d47-image.png

                                        Wenn Du auf den Filter gehst, kannst Du direkt überprüfen, ob Du den Pfad richtig eingegeben hast:

                                        eb7ad360-f6ea-4a62-8880-df5c6206d70c-image.png

                                        L 1 Reply Last reply Reply Quote 1
                                        • L
                                          Laser @mickym last edited by

                                          @mickym Danke, das funktioniert. Mit dem richtigen Pfad. Es wird kein neuer Datenpunkt generiert, sondern im Vorhandenen wird der selektierte Wert eingetragen.

                                          L 1 Reply Last reply Reply Quote 1
                                          • L
                                            Laser @Laser last edited by

                                            @mickym muß ich noch etwas tun, damit der Wert im Alias-Datenpunkt automatisch aktualisiert wird?
                                            Wenn ich den MQTT Adapter neu starte , wird aktualisiert.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            820
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            74
                                            6742
                                            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