Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Daten aus Url abfragen und in Datenpunkt schreiben

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    UNSOLVED Daten aus Url abfragen und in Datenpunkt schreiben

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

      Hallo,

      ist es möglich von einer Url Daten abzufragen und einen Wert in einen Datenpunkt zu schreiben?

      Ich habe einen Rasenmähroboter und möchte davon gerne die Qualität der Messer abfragen und diese in meiner Visualisierung anzeigen lassen.

      Vielen Dank

      paul53 OliverIO 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @steff.h. last edited by

        @steff-h
        Stichwort für Suche: request

        1 Reply Last reply Reply Quote 0
        • C
          cburghardt last edited by

          Beispiel für Javascript:

          var request = require('request');
          const link = "http://...";
          request(link, function(error, response, body) {
                if (error) {
                    log('Error from request:' + error, 'error');        
                } else {
                    // do something with body
                }    
          });
          

          Als Beispiel hatte ich mal ein Script für die Abfrage des bitcoin erstellt:

          if (getState("bitcoin").notExist) {
              createState("bitcoin", 0);
          }
          const link = "https://api.coinbase.com/v2/prices/spot?currency=EUR";
              request(link, function(error, response, body) {
                  if (error) log('Error from Coinbase API:' + error, 'error');        
                  else {
                      var result = JSON.parse(body);
                      var amount = Number(result.data.amount);         
                      setState("bitcoin", amount.toFixed(0), true);
                  }    
              });
          
          MartinK. 1 Reply Last reply Reply Quote 0
          • E
            el_malto last edited by el_malto

            Und hier dann gleich noch ein Blockly.
            Unbenannt.JPG
            Loglevel kann man natürlich ändern. War nur zum testen. Ebenso das letzte debug output war nur zum test um zu im log gucken wie der output aussieht.

            P 1 Reply Last reply Reply Quote 0
            • MartinK.
              MartinK. @cburghardt last edited by MartinK.

              @cburghardt said in Daten aus Url abfragen und in Datenpunkt schreiben:

              https://api.coinbase.com/v2/prices/spot?currency=EUR

              Ich habe noch eine Frage zu dem Skript, wie bekomme ich es denn hin, das der Kurs Wert z.B. alle 10 sek. aktualisiert wird ? Ich habe leider nicht so die große Ahnung von Java Skripten... und auch das Blockly von @el_malto durchblicke ich noch nicht so ganz....

              Woher bekomme ich denn die genaue URL zum Kurs Wert der in Skript angezeigt werden soll ? Wenn ich jetzt z.B. einen anderen Wert von einer anderen URL einbinden möchte ?? mit dem Internet Browser den Quelltext untersuchen, und dann die Zeile mit dem Kurs Wert heraus suchen??? Sorry für die Frage, aber ich bin da noch nicht so fit 😉

              E B 2 Replies Last reply Reply Quote 0
              • E
                el_malto @MartinK. last edited by el_malto

                @martink said in Daten aus Url abfragen und in Datenpunkt schreiben:

                Ich habe noch eine Frage zu dem Skript, wie bekomme ich es denn hin, das der Kurs Wert z.B. alle 10 sek. aktualisiert wird ? Ich habe leider nicht so die große Ahnung von Java Skripten...

                Das machst du mit einer Zeitfunktion bzw. Cron (schedule). Kann JS wohl lesen, aber selber nicht "schreiben". Hoffe die Syntax passt so. Einfach mal testen:

                if (getState("bitcoin").notExist) {
                    createState("bitcoin", 0);
                }
                const link = "https://api.coinbase.com/v2/prices/spot?currency=EUR";
                schedule("*/10 * * * * *", function () {
                    request(link, function(error, response, body) {
                        if (error) log('Error from Coinbase API:' + error, 'error');        
                        else {
                            var result = JSON.parse(body);
                            var amount = Number(result.data.amount);         
                            setState("bitcoin", amount.toFixed(0), true);
                        }    
                    });
                });
                

                und auch das Blockly von @el_malto durchblicke ich noch nicht so ganz....

                Es kommt auf deinen Link an was der liefert. Die Coinbase API liefert eine JSON Datei.

                https://api.coinbase.com/v2/prices/spot?currency=EUR

                Der Inhalt sieht so aus:

                {"data":{"base":"BTC","currency":"EUR","amount":"31778.28"}}
                

                Grob erklärt:
                Das JS Script definiert in Zeile 8 die result Variable und schreibt das JSON in diese Variable var result = JSON.parse(body)). In Zeile 9 wird nun die die amount Variable definiert und gesagt, schreibe den Wert unter data amount in die Variable. Da ist ja der aktuelle Bitcoins Kurs drin. In Zeile 10 wird nun mit setState der Datenpunkt bitcoin mit den Inhalt der Variable amount (wo ja jetzt der aktuelle Bitcoin Kurs drin steht) beschrieben.

                Mein Blockly
                Bild Text
                hilft dir, wenn der Wert den man haben will nicht irgendwie einfacher über eine API ausgelesen werden kann. Der Quellcode sah ca. so aus:

                Ganz viel Code
                .
                .
                .
                </b> Detection resumed </body>
                .
                .
                .
                weitere Code
                

                Meinen Wert (Detection resumed) den ich haben wollte steht also zwischen </b> und </body>. Das Blockly sucht nun das erste auftretende </b> und nimmt alles bis </body> und schreibt das in die result Variable. Dann gucke ich ob in der result Variable Detection resumed steht und steuere dementsprechend was.
                Wie gesagt, es kommt immer drauf an welche Möglichkeiten der "Anbieter" dir zum auslesen gibt.

                Woher bekomme ich denn die genaue URL zum Kurs Wert der in Skript angezeigt werden soll ? Wenn ich jetzt z.B. einen anderen Wert von einer anderen URL einbinden möchte ?? mit dem Internet Browser den Quelltext untersuchen, und dann die Zeile mit dem Kurs Wert heraus suchen???

                Du musst gucken ob der "Anbieter" oder die Seite vielleicht eine API hat wo Dokumentiert ist wie man Werte usw. auslesen oder verarbeiten kann. Wenn es so etwas nicht gibt, musst du selber basteln wie ich es mit dem Blockly gemacht habe.
                Es gibt auch den Parser Adapter -> https://github.com/ioBroker/ioBroker.parser
                Der erspart dir das "selber basteln" eines Blocklys. eine hilfreiche Seite für die Syntax ist https://regex101.com/. Diese wird auch in der Adapterbeschreibung erwähnt. Man muss sich aber schon ein bisschen damit beschäftigen um die Syntax zu verstehen. Ich verstehe diese bis heute noch nicht wirklich. Habe mir alles irgendwo ergooglet und habs dann mit "try and error" hinbekommen.

                MartinK. paul53 2 Replies Last reply Reply Quote 0
                • MartinK.
                  MartinK. @el_malto last edited by

                  @el_malto Vielen Dank für die Erklärung 👍 .... Ich muss mich da noch ein bissen mehr einlesen bis ich das verstehe... 😉
                  Ich habe den Parser Adapter auch installiert, aber auch da kann ich noch nicht so wirklich viel mit anfangen, weil ich nicht genau weiß, was ich in die Zeilen einsetzten muss um an den Kurs Wert zu kommen ...

                  e7333433-1fa2-4204-be13-9afee68e4b8c-image.png

                  Ich finde auch nicht so recht eine verständliche Doku für Anfänger dazu 😕

                  Gargano E 2 Replies Last reply Reply Quote 0
                  • Gargano
                    Gargano @MartinK. last edited by

                    @martink

                    1 Reply Last reply Reply Quote 0
                    • E
                      el_malto @MartinK. last edited by el_malto

                      @martink die Syntax von regex ist mir auch noch ein Rätsel. Ich konnte mir bisher alles ergooglen was ich brauche und habe mich daher noch nicht so intentiv damit beschäftigt. Aber da gibt es bestimmt im Netz irgendwo Beispiele oder so.

                      Ich vermute mal das du dich auf der Seite angemeldet hast und so mit dem Link https://coinmarketcap.com/watchlist/ an deine Watchlist kommst. Das wird dir so aber nicht viel nützen weil du dich ja anmelden müsstest um die Werte zu bekommen. Habe auf der Seite gesehen, dass die eine API haben. Vielleicht kannst du da mal rein gucken. Man muss sich wohl einen API Key erstellen. Über die API kann man dann vielleicht auch die Anmeldedaten übergeben und man kann dann seine Werte auslesen. Denke aber, dass das für einen Anfänger (nicht böse gemeint) zu viel des Guten ist.
                      Die API ist ja Dokumentiert -> https://coinmarketcap.com/api/documentation/v1/

                      Welche Coins willst du denn auslesen?

                      MartinK. 1 Reply Last reply Reply Quote 0
                      • MartinK.
                        MartinK. @el_malto last edited by

                        @el_malto ... Ja, ich bin sonst im ioBroker , Blockly und Co. schon ganz mit mir zufrieden - aber das ist mir dann doch noch zu hoch 😄 .... Ich möchte gerne den Aktuellen BTC = EURO Wert der Tradingbörse Coinbase... und das als json
                        protokoll... damit ich damit wieder im Blockly arbeiten kann 🙂

                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @el_malto last edited by paul53

                          @MartinK. said: "https://api.coinbase.com/v2/prices/spot?currency=EUR"

                          Mit diesem Link funktioniert es so:

                          Blockly_temp.JPG

                          Homoran MartinK. A caravandriver 4 Replies Last reply Reply Quote 2
                          • Homoran
                            Homoran Global Moderator Administrators @paul53 last edited by

                            @paul53 said in Daten aus Url abfragen und in Datenpunkt schreiben:

                            Mit diesem Link funktioniert es so:

                            @MartinK
                            Da würde ich auch gar nicht mit dem parser rangehen.
                            Das zurückgeliefert json:
                            {"data":{"base":"BTC","currency":"EUR","amount":"31458.0"}}
                            ist so minimal, dass die von @paul53 geannte Lösung die mit Sicherheit einfachste ist, zumal

                            @el_malto said in Daten aus Url abfragen und in Datenpunkt schreiben:

                            die Syntax von regex ist mir auch noch ein Rätsel.

                            das anscheinend auch für dich gilt 😉

                            1 Reply Last reply Reply Quote 0
                            • MartinK.
                              MartinK. @paul53 last edited by

                              @paul53 said in Daten aus Url abfragen und in Datenpunkt schreiben:

                              @MartinK. said: "https://api.coinbase.com/v2/prices/spot?currency=EUR"

                              Mit diesem Link funktioniert es so:

                              Blockly_temp.JPG

                              Vielen Dank. 🙂 👍 Ich werde das gleich einmal einbauen und testen.... Aber ich ich möchte auf langer Sicht auch die Logik dahinter verstehen und wie das ganze sich zusammensetzt ! 😀 .... damit ich auch was dazu lerne !

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @MartinK. last edited by

                                @martink said: wie das ganze sich zusammensetzt !

                                Bei der Analyse eines JSON hilft der JSONViewer.

                                MartinK. 1 Reply Last reply Reply Quote 0
                                • MartinK.
                                  MartinK. @paul53 last edited by

                                  @paul53 Woher bekomme ich denn diesen Wert? Da stehe ich noch etwas auf dem Schlauch??

                                  cfcf6482-699d-49ea-980e-472f01a86874-image.png

                                  E 1 Reply Last reply Reply Quote 0
                                  • E
                                    el_malto @MartinK. last edited by

                                    @martink einfach in Blockly unter "Variablen" eine Varibale erstellen die "result" heißt.

                                    MartinK. 1 Reply Last reply Reply Quote 0
                                    • MartinK.
                                      MartinK. @el_malto last edited by

                                      @el_malto ok, und er Punkt "data.amount" - was beschreibt der bzw. welcher Datenpunkt ist das ????

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

                                        @martink said in Daten aus Url abfragen und in Datenpunkt schreiben:

                                        data.amount

                                        wenn du dir das json ansiehstgibt es eine Hierarchie data in der es dann den Punkt amount gibt, dessen Wert du haben willst

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

                                          @homoran ...puuh ok.... ! Und dann habe ich noch eine Frage: Im Blockly wird ja "aktualisiere Objekt ID" eingefügt,
                                          ist das ein Datenpunkt den manuell erzeugen muss mit dem Attribut "Zahl" ? ..... Wie gesagt ich bin noch nicht so fit und solchen "tricky" Sachen .... Bis jetzt mache ich nur ein bisschen Visualisierung und hier und da ein paar Blockly Automatisierungen 😉

                                          paul53 1 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 @MartinK. last edited by

                                            @martink said: ist das ein Datenpunkt den manuell erzeugen muss mit dem Attribut "Zahl" ?

                                            Ja, das ist ein eigener, virtueller Datenpunkt vom Typ "Zahl" (unter "0_userdata.0").

                                            MartinK. 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            654
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly communication javascript monitoring
                                            14
                                            50
                                            7850
                                            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