Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. URL Request mit Blockly

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

URL Request mit Blockly

Scheduled Pinned Locked Moved Skripten / Logik
12 Posts 3 Posters 4.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    George_Best
    wrote on last edited by
    #1

    Guten Abend zusammen,

    ich versuche von meiner ETA Heizung den Status via Blockly und URL Request-Funktion auszulesen.

    Der URL Request sieht so aus:````
    http://192.168.178.13:8080/user/var//112/10021/0/0/12000

    Die Antwort sieht so aus (aus Chrome):````
     <eta xmlns="http://www.eta.co.at/rest/v1" version="1.0"><value uri="/user/var//112/10021/0/0/12000" strvalue="Heizen" unit/decplaces="0" scalefactor="1" advtextoffset="2000">2006</value></eta> 
    

    Mein Blockly sieht so aus: 3428_unbenannt.jpg

    Als Ergebnis kommt jedoch nur der "Wert", also "2006" zurück:

    19:55:05.498	[info]	javascript.0 Stop script script.js.TEST
    19:55:05.530	[info]	javascript.0 Start javascript script.js.TEST
    19:55:05.530	[info]	javascript.0 script.js.TEST: request: http://192.168.178.13:8080/user/var//112/10021/0/0/12000
    19:55:05.530	[info]	javascript.0 script.js.TEST: registered 0 subscriptions and 0 schedules
    19:55:05.573	[info]	javascript.0 script.js.TEST: 2006
    

    "Response" oder "Result" ist scheinbar egal - es kommt nur "2006" zurück.

    Gibt es eine Möglichkeit den kompletten String "einzulesen"?

    1 Reply Last reply
    0
    • G Offline
      G Offline
      George_Best
      wrote on last edited by
      #2

      Ich befürchte mit Blockly wird das nix….

      Ich habe mir jetzt folgende Zeilen aus einem anderen Beitrag geklaut und ein klein wenig abgeändert:

      var parseString = require('xml2js').parseString;
      var request = require('request');
      arr_test = [];
      
      request('http://192.168.178.13:8080/user/var//112/10021/0/0/12000', function (error, response, body) {
          if (!error && response.statusCode == 200) {
      
            parseString(body, {
                  explicitArray: false,
                  mergeAttrs: true
               }, 
               function (err, result) {
                  if (err) {
                     log("Fehler: " + err);
                  } else {
      
                     arr_test = (JSON.stringify(result.eta));
                     log("arr_test: "+arr_test);
                  }
               });
         } else  {
           log(error);
         }
      });
      

      Nun kommt sogar im log das erwartete Ergebnis:````
      javascript.0 script.js.Skript1: arr_test: {"version":"1.0","xmlns":"http://www.eta.co.at/rest/v1","value":{"_":"2006","uri":"/user/var//112/10021/0/0/12000","strValue":"Heizen","unit":"","decPlaces":"0","scaleFactor":"1","advTextOffset":"2000"}}

      
      Ich würde nun gerne das Objekt "arr_test" in einem anderen Script (Blockly) weiterverwenden. Die Idee ist eine globale Variable. Aber scheinbar hat das nicht so ganz funktioniert````
      arr_test = [];
      
      ````. Zumindest sehe ich dieses Objekt weder in den "Objekten" noch kann ich darauf in anderen Blockly zugreifen. Ich vermute einen großen Gedankenfehler meinerseits….
      
      Mein großes Ziel ist das Erstellen eines eigenen Widget in .vis. Aber ich befürchte, da bin ich noch Lichtjahre davon entfernt....
      1 Reply Last reply
      0
      • G Offline
        G Offline
        George_Best
        wrote on last edited by
        #3

        Ich komm einfach nicht weiter…

        Wie kann ich denn mein Objekt````
        arr_test

        
        Ich hoffe mir kann jemand helfen - ich versuch' es schon den ganzen Tag.
        1 Reply Last reply
        0
        • DutchmanD Offline
          DutchmanD Offline
          Dutchman
          Developer Most Active Administrators
          wrote on last edited by
          #4

          Was möchtest du genau erreichen?

          Es sieht für mich so aus als ob die Webseite eine json oder XML zurück gibt.

          Wilste diese nun in ein object ablegen oder die darin enthaltenen Werte?

          Ein bespiel wie man json aus einer url abfragen kann habe ich letztens nach verlinkt, suche Mal nach Domoticz (bin gerade an Jahres sorry)

          –-----------------------

          Send from mobile device

          1 Reply Last reply
          0
          • G Offline
            G Offline
            George_Best
            wrote on last edited by
            #5

            @Dutchman:

            Es sieht für mich so aus als ob die Webseite eine json oder XML zurück gibt.

            Wilste diese nun in ein object ablegen oder die darin enthaltenen Werte?

            e `

            Ich möchte den Zustand meiner ETA-Heizung auslesen. Die Heizung gibt mir auf den Request

            http://192.168.178.13:8080/user/var//112/10021/0/0/12000
            

            eine Antwort

            "version":"1.0","xmlns":"http://www.eta.co.at/rest/v1","value": "_":"2006","uri":"/user/var//112/10021/0/0/12000","strValue":"Heizen","unit":"","decPlaces":"0","scaleFactor":"1","advTextOffset":"2000"
            

            Ich habe es bereits geschafft in einem Javascript (siehe oben) den Antwort-String (oder XML?) in eine (scheinbar lokale) Variable```
            arr_test = [][/code] zu schreiben.

            Nun würde ich gerne auf diese Variable bzw. auf den String in einem anderen Javascript und/oder Blockly daraufzugreifen. Und genau daran scheitere ich.

            1 Reply Last reply
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              wrote on last edited by
              #6

              Und brauchst dir dafür den kompletten String oder eine Variable aus diesem String ?

              –-----------------------

              Send from mobile device

              1 Reply Last reply
              0
              • G Offline
                G Offline
                George_Best
                wrote on last edited by
                #7

                Den kompletten String.

                Den Wert bekomm ich über Parser oder in Blockly via URL-Request. Der Wert ist aber leider nur ein Code (z.b. 2006). Im String steht der Status im Klartext (strValue":"Heizen").

                1 Reply Last reply
                0
                • DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  wrote on last edited by
                  #8

                  Ok,

                  Variabelen existieren nur im entsprechenden Script. Wenn du auch aus anderen scripten darauf zugreifen möchtest solltest du mit objecten arbeiten

                  1. erstellen dir ein neues object nach beliebigen Namen

                  2. schreibe den String in das object

                  3. in anderen Script: hohle die den Wert aus den object

                  –-----------------------

                  Send from mobile device

                  1 Reply Last reply
                  0
                  • G Offline
                    G Offline
                    George_Best
                    wrote on last edited by
                    #9

                    Guten Morgen,

                    vielen herzlichen Dank, Dutchman, für deine Unterstützung und deine Geduld.

                    Ich stelle mich leider viel zu blöd an.

                    Ich habe jetzt ein Objekt````
                    javascript.0.Test_Objekt_JS

                    
                    (sieht als RAW so aus: 
                    >! {
                    >! "common": {
                    >! "name": "Test_Objekt_JS",
                    >! "role": "",
                    >! "type": "object",
                    >! "desc": "Manuell erzeugt",
                    >! "read": true,
                    >! "write": true
                    >! },
                    >! "native": {},
                    >! "acl": {
                    >! "object": 1638,
                    >! "owner": "system.user.admin",
                    >! "ownerGroup": "system.group.administrator",
                    >! "state": 1638
                    >! },
                    >! "_id": "javascript.0.Test_Objekt_JS",
                    >! "type": "state"
                    >! })
                    
                    Aber wie schreibe ich den String nun in dieses Objekt?
                    

                    "javascript.0.Test_Objekt_JS"/Test_Objekt_JS/ = arr_test;

                    javascript.0.Test_Objekt_JS = arr_test;

                    Test_Objekt_JS = arr_test;

                    
                    Sorry - aber ich komm immer noch nicht weiter. Über jegliche Hilfe bin ich sehr, sehr dankbar!
                    1 Reply Last reply
                    0
                    • DutchmanD Offline
                      DutchmanD Offline
                      Dutchman
                      Developer Most Active Administrators
                      wrote on last edited by
                      #10

                      @George_Best:

                      Guten Morgen,

                      vielen herzlichen Dank, Dutchman, für deine Unterstützung und deine Geduld. `

                      gerne 🙂

                      @George_Best:

                      Ich stelle mich leider viel zu blöd an. `

                      Ganz und garnicht du probierst und man muss ja erstmal rausfinden wie alles geht 😉

                      @George_Best:

                      Ich habe jetzt ein Objekt````
                      javascript.0.Test_Objekt_JS

                      
                      Aber wie schreibe ich den String nun in dieses Objekt?
                      

                      "javascript.0.Test_Objekt_JS"/Test_Objekt_JS/ = arr_test;
                      ````erscheint eine Fehlermeldung "ReferenceError: Invalid left-hand side in assignment" `

                      Object mit daten fuellen machst du mit setstate, in deinem fall muesste das dan sein:

                      setState (javascript.0.Test_Objekt_JS, arr_test);
                      
                      

                      siehe dazu fuer mehr informationen die javascript adapter docu: https://github.com/ioBroker/ioBroker.ja … d#setstate

                      1 Reply Last reply
                      0
                      • AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        wrote on last edited by
                        #11

                        @Dutchman:

                        setState (javascript.0.Test_Objekt_JS, arr_test);
                        
                        ```` `  
                        

                        Das muss

                        setState("javascript.0.Test_Objekt_JS", arr_test);
                        

                        heißen (mit Anführungszeichen).

                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                        1 Reply Last reply
                        0
                        • G Offline
                          G Offline
                          George_Best
                          wrote on last edited by
                          #12

                          Ich werd narrisch 😄

                          Genau so funktioniert es! Vielen, herzlichen Dank an Dutchman und AlCalzone.

                          Ich hatte schon in vielen anderen Foren-Beiträgen den Hinweis mit setState gelesen. Ich konnte es aber nie richtig in meinem Script umsetzen (habe z.B. setState("javascript.0.Test_Objekt_JS").val = arr_test; versucht usw…). Aber jetzt habe ich es verstanden.

                          Ich poste hier mal für alle anderen Suchenden meine Lösung.

                          Use-Case: Meine ETA-Heizung (mit Web-Server) liefert mir auf einen URL-Request eine entsprechende Antwort als XML (siehe Beispiel oben). Ich möchte nun diese Antwort in ein (globales) Objekt speichern. Ziel ist diesen String in JS/ Blockly/ vis weiterzuverwenden.

                          Das Objekt "javascript.0.Test_Objekt_JS" bzw. Datenpunkt habe ich in ioBroker im Reiter "Objekte" als Objekt definiert

                          Das Script sieht so aus:

                          var parseString = require('xml2js').parseString;
                          var request = require('request');
                          arr_test = [];
                          
                          request('http://192.168.178.13:8080/user/var//112/10021/0/0/12000', function (error, response, body) {
                              if (!error && response.statusCode == 200) {
                                parseString(body, {
                                      explicitArray: false,
                                      mergeAttrs: true
                                   }, 
                                   function (err, result) {
                                      if (err) {
                                         log("Fehler: " + err);
                                      } else {
                          
                                        arr_test = (JSON.stringify(result.eta));
                                        setState("javascript.0.Test_Objekt_JS", arr_test);
                                      }
                                   });
                             } else  {
                               log(error);
                             }
                          });
                          

                          Kleiner Schönheitsfehler: Es erscheint im log die Warnung````
                          10:52:30.773 [warn] javascript.0 at script.js.Skript1:30:15
                          10:52:30.778 [warn] javascript.0 at Request._callback (script.js.Skript1:20:7)

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          608

                          Online

                          32.4k

                          Users

                          81.4k

                          Topics

                          1.3m

                          Posts
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          ioBroker Community 2014-2025
                          logo
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Recent
                          • Tags
                          • Unread 0
                          • Categories
                          • Unreplied
                          • Popular
                          • GitHub
                          • Docu
                          • Hilfe