Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. JSON Abfrage per Request liefert nur Matsch

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    JSON Abfrage per Request liefert nur Matsch

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

      Hallo zusammen!

      Ich hab nun schon Stunden investiert und per SuFu bin ich auch nicht fündig geworden, nun erstelle ich mal nen Beitrag in der Hoffnung das jmd. ne Lösung hat 😉
      Vorhaben: Ich möchte die Wetterdaten vom Großen Arber abgreifen.
      Dazu habe ich mich hier mal belesen: https://listed.to/@DieSieben/7851/api-des-deutschen-wetterdienstes
      Hab mir die URL zurecht gelegt, sieht so aus: https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json
      -> Funktioniert im Browser einwandfrei, im iobroker aber dann nicht mehr.
      Zum Test hab ich einfach mal ein Testobjekt angelegt und wollte da alles was kommt reinschreiben.
      d2cdf644-8909-46e6-91c2-f8dc9aa2aeab-image.png
      Bin ich zu blöd?
      Browser sieht OK aus:
      6f48a9fd-2b17-4b54-89e8-7c26b3d4d3a3-image.png
      Habe so was auch für andere Wetterstation gemacht, allerdings anderer Provider. Funktioniert dort prima.
      Scheint für mich so als käme nicht wie erwartet JSON Format zurück, sondern iwas. anderes...

      Danke schon mal für eure Hilfe!

      Meister Mopper OliverIO 3 Replies Last reply Reply Quote 0
      • Meister Mopper
        Meister Mopper @schrecki last edited by

        @schrecki

        Vielleicht hilft es dir weiter. Ich rufe beispielsweise die Standortadresse meines Pkw bei google ab:

        a39cf3e8-7bb0-4340-b20e-97a3e88b1268-grafik.png

        S 1 Reply Last reply Reply Quote 0
        • S
          schrecki @Meister Mopper last edited by

          @meister-mopper Skript funktioniert an und für sich, ich habe noch eine andere API Abfrage probiert für Vorhersage, da funktioniert alles.
          Also quasi in meinem Blockly nur die URL ausgetauscht, dann kommt da was verwertbares. Nur wenn ich diese hier bei URL stehen hab "https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json" dann kommt da nur Müll
          Hab noch gar nichts gefiltert, ich lasse einfach mal alles was kommt in ein Objekt schreiben.
          Ergo schließe ich daraus, obwohl da .JSON dahinter steht, es halt das nicht ist...

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @schrecki last edited by

            @schrecki ist das Verschlüsselt?
            braucht es für Warnwetter.de zugangsdaten?

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @schrecki last edited by OliverIO

              @schrecki

              also ich konnte den fehler nachvollziehen.
              auch die adresse mal mit https://www.google.de getauscht kamen ein korrektes ergebnis.
              erst dachte ich, das es evtl daran liegt, das kein user-agent mit dabei ist.
              manche anbieter prüfen das, aber daran lag es nicht

              ich denke das der anbieter am request irgendwas noch prüft und dann irgendwas ausgibt.
              bei solchen zeichen würde ich mal auf binäre daten tippen. evtl ist es auch ein bild, aber auf dem screenshot fehlt der anfang. aber lohnt sich auch nicht da noch weiter zu forschen.

              den befehl mit axios als javascript nachgebildet funktioniert korrekt

              const axios = require('axios');
              const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
              
              try {
                  const response = await axios.get("https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json",{
                      headers: {
                          userAgent: userAgent
                      }
                  });
                  console.log(response.data);
              } catch (error) {
                  console.error('Fehler Abruf', error);
              }
              
              
              Homoran 1 Reply Last reply Reply Quote 1
              • Homoran
                Homoran Global Moderator Administrators @OliverIO last edited by

                @oliverio sagte in JSON Abfrage per Request liefert nur Matsch:

                ich denke das der anbieter am request irgendwas noch prüft und dann irgendwas ausgibt.
                bei solchen zeichen würde ich mal auf binäre daten tippen. evtl ist es auch ein bild, aber auf dem screenshot fehlt der anfang. aber lohnt sich auch nicht da noch weiter zu forschen.

                mit "STOP - so nicht" 😂

                1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Homoran last edited by

                  @homoran sagte in JSON Abfrage per Request liefert nur Matsch:

                  ist das Verschlüsselt?
                  braucht es für Warnwetter.de zugangsdaten?

                  nein, wenn du selbst auf den link klickst und ihn im browser öffnest, dann kommt ein json-objekt
                  nur halt nicht in blockly

                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @schrecki last edited by

                    @schrecki

                    ok nochmal nachtrag.
                    irgendwas scheint bei dieser abfrage mit der request bibliothek nicht zu stimmen.
                    was auch immer die durcheinanderbringt oder man noch eine option setzen muss.

                    auch das folgende funktioniert nicht

                    try {
                        const request = require("request");
                        request.get("https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json", async(error, response, result) => {
                            console.log(response);
                        }).on("error", (e) => {
                            console.error(e);
                        });
                    } catch (e) {
                        console.error(e);
                    }
                    
                    
                    
                    S 1 Reply Last reply Reply Quote 0
                    • S
                      schrecki @OliverIO last edited by

                      @oliverio Leute, ich habs mittlerweile gefunden...
                      Bin einfach mal auf ein Ubundu in's Terminal und hab mal geschaut was mit "wget" so passiert...
                      Da gibts noch die Option "-d" um da mehr Infos raus zu bekommen...
                      -> Das was da kommt ist GZIP...
                      "Content-Encoding: gzip" steht da in der Ausgabe.
                      Der Browser ist so schlau und verwurstet es gleich oder bekommt es evtl bereits anders ausgeliefert, aber ein

                      wget https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json -O Arber.json.gzip && gunzip Arber.json.gzip
                      

                      Liefert dann das korrekte File 🙄
                      Jetzt muss ich das nur noch meinem Blockly beibringen 😊

                      OliverIO 1 Reply Last reply Reply Quote 0
                      • OliverIO
                        OliverIO @schrecki last edited by OliverIO

                        @schrecki

                        dazu müsste man in blockly, an der stelle an der die url übergeben wird
                        ein options objekt übergeben,

                        das würde dann ungefähr so aussehen

                        const options = {
                          url: 'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json',
                          method: "get",
                          gzip: true,
                          headers: {
                            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
                          }
                        };
                        
                        

                        https://www.npmjs.com/package/request#:~:text=encoding%3A null.)-,gzip,-- if true%2C add

                        ob das in blockly geht weiß ich nicht

                        hab in javascript gerade getestet, funktioniert

                        try {
                            const options = {
                                url: 'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json',
                                method: "get",
                                gzip: true,
                                headers: {
                                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
                                }
                            };
                        
                            const request = require("request");
                            request.get(options, async(error, response, result) => {
                                console.log(response);
                            }).on("error", (e) => {
                                console.error(e);
                            });
                        } catch (e) {
                            console.error(e);
                        }
                        
                        S 1 Reply Last reply Reply Quote 0
                        • S
                          schrecki @OliverIO last edited by

                          @oliverio Danke für deine Mühen... aber bei JS setzt es aus bei mir 😥
                          Was ich geschafft hätte, ich kann es mit einem "exec" block runterladen und dann auch entpacken, hätte lokal ein JSON liegen, aber da bin ich erneut gescheitert, denn der "request" Block kann scheinbar nix lokales verarbeiten, oder ich bin erneut mal wieder zu doof...

                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @schrecki last edited by

                            @schrecki
                            Was ich damit sagen wollte ist, blockly Request verwendet im Hintergrund die Bibliothek Request. Und die hat die Möglichkeit ein Optionen Objekt mitzugeben. Wie gesagt keine Ahnung ob der blocklybaustein das kann.
                            Wenn nicht dann kratzt der echt nur an der Oberfläche der Möglichkeiten.
                            Du kannst ja mal bei GitHub zum Adapter ein issue anlegen.

                            Homoran 1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators @OliverIO last edited by

                              @oliverio sagte in JSON Abfrage per Request liefert nur Matsch:

                              Du kannst ja mal bei GitHub zum Adapter ein issue anlegen.

                              wo request schon ewig als deprecated getaggt ist?

                              S 1 Reply Last reply Reply Quote 0
                              • S
                                schrecki @Homoran last edited by

                                @homoran
                                Das hab ich mir auch gedacht, wird nichts nützen vermutlich.
                                Aber i hab einen Plan B in der Hinterhand... Ich werde des nochmal probieren mit "exec", hole mir das File, unzip (so weit war ich ja schon), dann auf's NAS schieben und von da kann ich's hoffentlich wieder mit "requests" abholen vom dortigen Webserver.
                                Is von hinten durch die Brust ins Auge, aber würde funktionieren - vermutlich.
                                Plan 😄 Feature Request beim DWD Adapter.
                                Aktuell is es noch so, ich habe die Daten im iobroker, greife sie von einer Pimatic Installation ab. Das hatte ich vor iobroker. Dort gibt es ein DWD Plugin das genau das kann. Der Adapter von iobroker kann "nur" Warnungen. Evtl könnte man ihn einfach um die Funktion der Stationsabfrage erweitern.

                                Homoran 1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators @schrecki last edited by

                                  @schrecki sagte in JSON Abfrage per Request liefert nur Matsch:

                                  Evtl könnte man ihn einfach um die Funktion der Stationsabfrage erweitern.

                                  mach ich mit dem Parser Adapter

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

                                    @schrecki Du kannst doch den Code von @OliverIO und als Funktion in Blockly einbinden?

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      schrecki @Homoran last edited by

                                      @homoran den wenn ich kapieren würde 😂
                                      Ich befürchte den werd ich nie verstehen...

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        schrecki @mickym last edited by

                                        @mickym
                                        Wenn du mir sagst wie das geht?
                                        Sorry, da steh ich grad komplett am Schlauch. Ich dachte immer, entweder oder. Javascript oder Blockly, aber beides mischen?

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

                                          @schrecki Nehmen wir mal an Du willst diesen Code von @OliverIO verwenden:

                                          try {
                                              const options = {
                                                  url: 'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json',
                                                  method: "get",
                                                  gzip: true,
                                                  headers: {
                                                      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
                                                  }
                                              };
                                           
                                              const request = require("request");
                                              request.get(options, async(error, response, result) => {
                                                  console.log(response);
                                              }).on("error", (e) => {
                                                  console.error(e);
                                              });
                                          } catch (e) {
                                              console.error(e);
                                          }
                                          
                                          

                                          oder Du nimmst den Code mit der axios Bibliothek - ich nehm mal nur den mit der request Bibliothek.

                                          Ich glaube zwar - dass das nicht ganz richtig ist, weil ich den konsolen output abfrage, aber es scheint zu funktionieren:

                                          143a4b92-d932-484a-96ca-8c64bd48870c-image.png

                                          Du musst halt @OliverIO oder @paul53 fragen, wie man das asynchron einbindet damit Du was im Blockly zurückbekommst. Im Moment ist das nur die Konsolenausgabe der Funktion - aber keine Rückgabe in die response Variable. - Aber ich kenn mich mit Puzzeln nicht so gut aus.

                                          Hier das Blockly mit dem Code von @OliverIO

                                          <xml xmlns="https://developers.google.com/blockly/xml">
                                           <variables>
                                             <variable id="Drc3,5E3dtsooSRbdv}K">url</variable>
                                             <variable id="!eY@+?{]SiMQl]U-]_S$">response</variable>
                                           </variables>
                                           <block type="procedures_defcustomreturn" id="=Ib|l%wE0-!(2!$i:6GY" x="113" y="38">
                                             <mutation statements="false">
                                               <arg name="url" varid="Drc3,5E3dtsooSRbdv}K"></arg>
                                             </mutation>
                                             <field name="NAME">URL mit gzip</field>
                                             <field name="SCRIPT">bGV0IHJlc3BvbnNlID0gYXdhaXQgbXlyZXF1ZXN0KHVybCk7Cgphc3luYyBmdW5jdGlvbiBteXJlcXVlc3QodXJsKSB7CnRyeSB7CiAgICBjb25zdCBvcHRpb25zID0gewogICAgICAgIHVybDogdXJsLAogICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgZ3ppcDogdHJ1ZSwKICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTYuMC4wLjAgU2FmYXJpLzUzNy4zNicKICAgICAgICB9CiAgICB9OwogCiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZSgicmVxdWVzdCIpOwogICAgcmVxdWVzdC5nZXQob3B0aW9ucywgYXN5bmMoZXJyb3IsIHJlc3BvbnNlLCByZXN1bHQpID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgCiAgICB9KS5vbigiZXJyb3IiLCAoZSkgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICB9KTsKfSBjYXRjaCAoZSkgewogICAgY29uc29sZS5lcnJvcihlKTsKfQp9CnJldHVybiAwOw==</field>
                                             <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                           </block>
                                           <block type="variables_set" id="ugEH}nuaFt2cgP:-pOl#" x="113" y="88">
                                             <field name="VAR" id="!eY@+?{]SiMQl]U-]_S$">response</field>
                                             <value name="VALUE">
                                               <block type="procedures_callcustomreturn" id="_`5Lbo9XrR+}/[H_K8x^">
                                                 <mutation name="URL mit gzip">
                                                   <arg name="url"></arg>
                                                 </mutation>
                                                 <value name="ARG0">
                                                   <block type="text" id="Q/3.^E$8=iXD4`7Q!/Y~">
                                                     <field name="TEXT">https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/current_measurement_10791.json</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                             <next>
                                               <block type="debug" id="(*Ckl_s:[HiNpm,cZU%*">
                                                 <field name="Severity">log</field>
                                                 <value name="TEXT">
                                                   <shadow type="text" id="=c/u4J;{z?`e3o6dIvCL">
                                                     <field name="TEXT">test</field>
                                                   </shadow>
                                                   <block type="variables_get" id="jf^V/=:|Da(~L4ki#T%L">
                                                     <field name="VAR" id="!eY@+?{]SiMQl]U-]_S$">response</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </next>
                                           </block>
                                          </xml>
                                          

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

                                            @mickym

                                            Weiter oben ist die Version mit axios die funktioniert

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            918
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            26
                                            2374
                                            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