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.
    • 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

                        864
                        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