Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Blockly-Baustein für HTTP PUT

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Blockly-Baustein für HTTP PUT

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

      Hallo zusammen,

      hoffentlich löse ich jetzt keine Reaktion in der Form von "nicht schon wieder" aus... Denn ich habe schon viel Posts gelesen und vieles selbst versucht, aber ich bekomme es einfach nicht hin. Deshalb würde ich mich sehr über Eure Vorschläge und Hilfe freuen.

      Ich möchte meine Wallbox über die HTTP-API ansprechen. Als HTTP GET, also als Blockly-Request, ist das auch alles kein Problem. Das ein HTTP PUT nicht mit einen Blockly-Aktionen-Request-Baustein funktioniert ist mir klar.
      Deshalb habe ich andere Wege gesucht. Unter Postman bekomme ich den HTTP PUT zum Beispiel erfolgreich abgesetzt.
      644cdcef-4a23-4b85-ad2c-cd343b2215a6-image.png

      Aber wie bekomme ich das mit einem Blockly-Aktionen-exec-Baustein hin? Oder mit einem Blockly-Funktionen-Javascript-Baustein? Oder wie auch immer😊

      Mir fehlen einfach zu viele Grundlagen, so dass ich nicht weiß, wie die korrekte Syntax zur Umsetzung aussehen könnte...
      Wenn Ihr mir hier helfen könntet, wäre das großartig und ich hätte wieder einen neuen Baustein verstanden.

      Vielen Dank vorab und Gruß, Thomas

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

        @thomkast mit NodeRed würdest nicht solche Probleme haben.

        Ansonsten musst dir halt die axioms Bibliothek installieren und dann eine JS Funktion nutzen: https://axios-http.com/docs/api_intro
        Um die axios Bibliothek zu installieren gibst du es als zusätzliches Modul im JS Adapter an.

        3dba33fb-c876-4afd-bb62-560f88eb1248-image.png

        Ich habe nun ein Blockly für Dich erstellt und mit NodeRed als Server getestet. - siehe nächster Post.

        Aber ansonsten ist das wieder ein Beispiel wo NodeRed aufgrund seiner Vielzahl von Nodes Blockly weit überlegen ist. Ich dachte ja, dass du NodeRed eh nutzt- warum dann wieder dieser Rückschritt auf Blockly?

        Unabhängig - davon warum Du NodeRed nicht benutzt, werde ich mal versuchen einen PUT Request über Blockly auf einen NodeRed Server abzusetzen. ...

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

          Hier das ist ein Blockly mit dem DU einen PUT Request via Blockly absetzen kann. (Mit NodeRed ist es wie gesagt einfacher). Ich habe NodeRed als Webserver verwendet, um Dir einen Response zu schicken:

          das hat mich zwar etwas Tüftelei gekostet, aber meines Erachtens müsste es tun, wobei ich nicht weiß - wie Dein Empfänger das verarbeitet.
          Man muss als Body doch ein Objekt schicken, damit es sauber ankommt.

          31b501c8-0d79-4132-928b-5395df74b2f3-image.png

          Hier der Import:

          <xml xmlns="https://developers.google.com/blockly/xml">
           <variables>
             <variable id="J@VJaITtHzTUPW23ad[Y">url</variable>
             <variable id="|DZb(ot!F]}v_Lz{lGAD">body</variable>
           </variables>
           <block type="procedures_defcustomreturn" id=")fw0F#s9S.sJ`;{TN2(9" x="-937" y="38">
             <mutation statements="false">
               <arg name="url" varid="J@VJaITtHzTUPW23ad[Y"></arg>
               <arg name="body" varid="|DZb(ot!F]}v_Lz{lGAD"></arg>
             </mutation>
             <field name="NAME">HTTP-Put</field>
             <field name="SCRIPT">Y29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpOwoKbGV0IHJlc3BvbnNlVmFsdWUgPSAnJzsKCmF3YWl0IGF4aW9zLnB1dCh1cmwsIEpTT04ucGFyc2UoYm9keSkpCiAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZGF0YTsKICAgIC8vIGNvbnNvbGUubG9nKCByZXNwb25zZVZhbHVlKTsKICB9KQogIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTsKICB9KTsKCnJldHVybiByZXNwb25zZVZhbHVlOwo=</field>
             <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
           </block>
           <block type="debug" id="]X72[5FWF2ACXCgTcQ30" x="-937" y="113">
             <field name="Severity">log</field>
             <value name="TEXT">
               <shadow type="text" id="CX^t*iR!_;aDJfhk*Or^">
                 <field name="TEXT">test</field>
               </shadow>
               <block type="procedures_callcustomreturn" id="i^A(A{ZHA:JWAGHmvL;_">
                 <mutation name="HTTP-Put">
                   <arg name="url"></arg>
                   <arg name="body"></arg>
                 </mutation>
                 <value name="ARG0">
                   <block type="text" id="k8)NS|h3za-6B4c(vhp4">
                     <field name="TEXT">http://mwhome:1881/mickym</field>
                   </block>
                 </value>
                 <value name="ARG1">
                   <block type="text" id="V*Z#d=:/a`INMHLI2F?n">
                     <field name="TEXT">{"power":11000,"name":"thomkast"}</field>
                   </block>
                 </value>
               </block>
             </value>
           </block>
          </xml>
          

          Das man ein Objekt schicken MUSS - habe ich erst später rausgefunden:

          const axios = require('axios');
          
          let responseValue = '';
          
          await axios.put(url, JSON.parse(body))
            .then(function (response) {
              responseValue = response.data;
              // console.log( responseValue);
            })
            .catch(function (error) {
              console.error('Error:', error);
            });
          
          return responseValue;
          
          

          dazu ist es immer wieder genial - NodeRed auch als Webserver zu nutzen, dann sieht man was ankommt. 😉

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

            Wie gesagt mit NodeRed hast Du es einfacher - da Du erstens direkt Objekte mit PUT verschicken kannst und die auch so ankommen.

            78ae93e4-9531-4309-9815-d0838da423e8-image.png

            b9fa18c6-c8a3-4fd2-bf8f-008c423bf4a3-image.png

            Aber wie gesagt - eine Blockly Lösung mit AXIOS habe ich Dir ja im vorigen Post zur Verfügung gestellt.

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

              @mickym 😉 mach mal Pause bitte 😉 ich bin gar nicht so schnell im nachbauen 😬

              Es ist echt kein guter Tag bei mir... Denn warum ich nicht gleich auf NodeRed gegangen bin, kann ich echt nicht sagen. Denn Du hast recht. Nutze ich in anderen Fällen ja schon...

              Jetzt versuche ich erst mal Deinen Blockly-Vorschlag umzusetzen und daran zu lernen. Wie bekomme ich die beiden Bezeichner "url" und "body" in den Baustein? Bei mir sieht das so aus:

              82306e53-1a6d-409a-ae83-65df8635c8a5-image.png

              mickym T 3 Replies Last reply Reply Quote 0
              • mickym
                mickym Most Active @ThomKast last edited by

                @thomkast sagte in Blockly-Baustein für HTTP PUT:

                @mickym 😉 mach mal Pause bitte 😉 ich bin gar nicht so schnell im nachbauen 😬

                Es ist echt kein guter Tag bei mir... Denn warum ich nicht gleich auf NodeRed gegangen bin, kann ich echt nicht sagen. Denn Du hast recht. Nutze ich in anderen Fällen ja schon...

                Jetzt versuche ich erst mal Deinen Blockly-Vorschlag umzusetzen und daran zu lernen. Wie bekomme ich die beiden Bezeichner "url" und "body" in den Baustein? Bei mir sieht das so aus:

                82306e53-1a6d-409a-ae83-65df8635c8a5-image.png

                Ich hab Dir unten das gesamte Blockly zum Import bereit gestellt - musst eigentlich nur Importieren. Ja ich hatte es nochmal verändert - aber nun sollte es final sein.

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

                  @thomkast Ahh, halt!!! Habe den Import noch nicht drinnen...

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

                    @thomkast Wie gesagt - ich habe da auch jetzt eine ganze Weile rumgetüffelt, insbesondere weil man im Blockly die JS Funktion und die Axios Bibliothek asynchron aufrufen muss, da es ja ein bisschen dauert, bis die Antwort vom Webserver kommt und ich mit der asynchronen Verarbeitung von JS immer wieder auf Kriegsfuß stehe. Aber so hat es nun geklappt. 😉

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

                      @thomkast sagte in Blockly-Baustein für HTTP PUT:

                      Jetzt versuche ich erst mal Deinen Blockly-Vorschlag umzusetzen und daran zu lernen. Wie bekomme ich die beiden Bezeichner "url" und "body" in den Baustein? Bei mir sieht das so aus:

                      Wie gesagt im Import ist alles drin. 😉

                      Ansonsten wenn Du auf das Zahnrad klickst, kannst Du die Parameter benennen.

                      011b30ad-6215-41a1-a0d8-a0a11d4cdd5a-image.png

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

                        @mickym 👏 👏 👏 Wie schräg ist das denn?..? Ich musste meinen Rechner durchstarten, weil ich keine Daten in das Import-Fenster vom Blockly pasten konnte. Heute ist ein Tag...

                        ABER ;-). Jetzt funktioniert der PUT - 1a 👍 😀

                        Unter NodeRed werde ich es auch noch nachstellen, wird allerdings ein wenig dauern, da mir die Zeit wieder davongelaufen ist. Rückmeldung dazu kommt dann späääääter ;-).

                        Erst einmal VIELEN Dank. AXIOS hatte ich mir zwar auch schon angelesen, hatte aber keinen Plan, dass ich das in der JS-Instanz einbinden muss. Da wäre ich ohne Dich nie drauf gekommen.

                        Beste Grüße, Thomas

                        mickym 2 Replies Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @ThomKast last edited by mickym

                          @thomkast Na das freut mich - ich habe noch eine andere Version. In der Funktion selbst wird nichts mehr konvertiert sondern nur noch im Blockly - dann kann man nämlich 2 Schreibweisen verwenden:

                          const axios = require('axios');
                          
                          let responseValue = '';
                          
                          await axios.put(url, body)
                            .then(function (response) {
                              responseValue = response.data;
                              
                            })
                            .catch(function (error) {
                              console.error('Error:', error);
                            });
                          
                          return responseValue;
                          
                          

                          bf9cc49b-a9a1-454a-94d6-3455483bd4cb-image.png

                          hier wieder der Import:

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <variables>
                             <variable id="J@VJaITtHzTUPW23ad[Y">url</variable>
                             <variable id="|DZb(ot!F]}v_Lz{lGAD">body</variable>
                           </variables>
                           <block type="procedures_defcustomreturn" id=")fw0F#s9S.sJ`;{TN2(9" x="-937" y="38">
                             <mutation statements="false">
                               <arg name="url" varid="J@VJaITtHzTUPW23ad[Y"></arg>
                               <arg name="body" varid="|DZb(ot!F]}v_Lz{lGAD"></arg>
                             </mutation>
                             <field name="NAME">HTTP-Put</field>
                             <field name="SCRIPT">Y29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpOwoKbGV0IHJlc3BvbnNlVmFsdWUgPSAnJzsKCmF3YWl0IGF4aW9zLnB1dCh1cmwsIGJvZHkpCiAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZGF0YTsKICAgIAogIH0pCiAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpOwogIH0pOwoKcmV0dXJuIHJlc3BvbnNlVmFsdWU7Cg==</field>
                             <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                           </block>
                           <block type="debug" id="]X72[5FWF2ACXCgTcQ30" x="-937" y="113">
                             <field name="Severity">log</field>
                             <value name="TEXT">
                               <shadow type="text" id="CX^t*iR!_;aDJfhk*Or^">
                                 <field name="TEXT">test</field>
                               </shadow>
                               <block type="procedures_callcustomreturn" id="i^A(A{ZHA:JWAGHmvL;_">
                                 <mutation name="HTTP-Put">
                                   <arg name="url"></arg>
                                   <arg name="body"></arg>
                                 </mutation>
                                 <value name="ARG0">
                                   <block type="text" id="k8)NS|h3za-6B4c(vhp4">
                                     <field name="TEXT">http://mwhome:1881/mickym</field>
                                   </block>
                                 </value>
                                 <value name="ARG1">
                                   <block type="convert_json2object" id="m6rI6Q;/%Mk5dDfJmDD.">
                                     <value name="VALUE">
                                       <block type="text" id="V*Z#d=:/a`INMHLI2F?n">
                                         <field name="TEXT">{"power":11000,"name":"thomkast"}</field>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <next>
                               <block type="debug" id="@T@IM0UtiPpXlw0Gg(Gu">
                                 <field name="Severity">log</field>
                                 <value name="TEXT">
                                   <shadow type="text">
                                     <field name="TEXT">test</field>
                                   </shadow>
                                   <block type="procedures_callcustomreturn" id="m?^CI8g7?P)A3}`%/[`g">
                                     <mutation name="HTTP-Put">
                                       <arg name="url"></arg>
                                       <arg name="body"></arg>
                                     </mutation>
                                     <value name="ARG0">
                                       <block type="text" id="m||:{S+o-`Ux,O~=|r}$">
                                         <field name="TEXT">http://mwhome:1881/mickym</field>
                                       </block>
                                     </value>
                                     <value name="ARG1">
                                       <block type="text" id="YZF0BF?MkR5.S~_P4Bsc">
                                         <field name="TEXT">power=11000&amp;name=thomkast</field>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                               </block>
                             </next>
                           </block>
                          </xml>
                          

                          Der Vorteil hier ist, dass Du im Blockly selbst definieren kannst, ob Du ein Objekt übergibst oder nur einen String.

                          Die letzte Schreibweise wird gemäß der Axios Bibliothek auch unterstützt:
                          407f16cf-6295-4a1a-bbac-6d86c36cde73-image.png

                          Wobei man aufpassen muss!!!

                          In der 2. Schreibweise wird alles in Strings konvertiert - das heißt - wenn Zahlen gefragt sind, ist es besser Objekte zu schicken.

                          Hier siehst Du nämlich, was am Webserver ankommt:

                          5614665b-4a2e-4944-a8eb-99e3ac71b1c8-image.png

                          Oben ist die Übergabe also Objekt also;

                          {"power":11000,"name":"thomkast"}
                          

                          und unten als Zeichenkette.

                          power=11000&name=thomkast
                          

                          Du siehst also, dass man NodeRed auch gut als Webserver nutzen kann, um zu sehen, was ankommt, wenn man mit Blockly und der Axios Bibliothek was schickt.

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

                            @thomkast sagte in Blockly-Baustein für HTTP PUT:

                            Unter NodeRed werde ich es auch noch nachstellen, wird allerdings ein wenig dauern, da mir die Zeit wieder davongelaufen ist. Rückmeldung dazu kommt dann späääääter ;-).

                            Achso hier noch der Flow - um einen Put in Node Red zu senden - ist easy - aber trotzdem hier noch zum Import

                            300e941a-64a6-413f-b0f2-2bddb7992d68-image.png

                            [
                               {
                                   "id": "155a757534926020",
                                   "type": "inject",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "props": [
                                       {
                                           "p": "payload"
                                       }
                                   ],
                                   "repeat": "",
                                   "crontab": "",
                                   "once": false,
                                   "onceDelay": 0.1,
                                   "topic": "",
                                   "payload": "{\"name\":\"mickym\",\"power\":2000}",
                                   "payloadType": "json",
                                   "x": 2550,
                                   "y": 840,
                                   "wires": [
                                       [
                                           "23a3d2b797152c44"
                                       ]
                                   ]
                               },
                               {
                                   "id": "23a3d2b797152c44",
                                   "type": "http request",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "method": "PUT",
                                   "ret": "txt",
                                   "paytoqs": "ignore",
                                   "url": "http://mwhome:1881/mickym",
                                   "tls": "",
                                   "persist": false,
                                   "proxy": "",
                                   "insecureHTTPParser": false,
                                   "authType": "",
                                   "senderr": false,
                                   "headers": [],
                                   "credentials": {},
                                   "x": 2710,
                                   "y": 840,
                                   "wires": [
                                       [
                                           "48aeaae45286273d"
                                       ]
                                   ]
                               },
                               {
                                   "id": "48aeaae45286273d",
                                   "type": "debug",
                                   "z": "7e6af0015415146d",
                                   "name": "response auf PUT",
                                   "active": true,
                                   "tosidebar": true,
                                   "console": false,
                                   "tostatus": false,
                                   "complete": "payload",
                                   "targetType": "msg",
                                   "statusVal": "",
                                   "statusType": "auto",
                                   "x": 2930,
                                   "y": 840,
                                   "wires": []
                               }
                            ]
                            

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            862
                            Online

                            32.0k
                            Users

                            80.5k
                            Topics

                            1.3m
                            Posts

                            2
                            12
                            838
                            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