Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. webseite auslesen und in Datenpunkte darstellen json

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    webseite auslesen und in Datenpunkte darstellen json

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

      Ich komme nicht weiter. Folgendes habe ich zum Ziel:

      • per webrequest hole ich die Zustandsdaten im json Format meines Torantriebes ab: klappt
      {"connected":true,"hi":true}
      
      • jetzt möchte ich die zwei Variablen in zwei Datenpunkte schreiben. Das bekomme ich nicht hin. Ich erhalte immer nur die ganze Zeile im State
        0b844f7f-3e08-463b-a272-87873fba5fc2-grafik.png
      • den Datenpunkt schreibe ich aus einem blockly script via result
        block.jpg
      • muss ich result jetzt noch irgendwie parsen?

      Ich komm einfach nicht weiter momentan. Leider habe ich von javascript usw. fast keine Ahnung.

      Homoran Gargano paul53 3 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @LukyLuke last edited by

        @LukyLuke sagte in webseite auslesen und in Datenpunkte darstellen json:

        Ich erhalte immer nur die ganze Zeile im State

        das macht dein Blockly ja auch so 😉

        @LukyLuke sagte in webseite auslesen und in Datenpunkte darstellen json:

        muss ich result jetzt noch irgendwie parsen?

        wenn du zwei States mit je einem Inhalt haben willst, ja!

        @LukyLuke sagte in webseite auslesen und in Datenpunkte darstellen json:

        Leider habe ich von javascript usw. fast keine Ahnung.

        dann versuch mal mal den Block "Attribut von" o.ä.

        1 Reply Last reply Reply Quote 0
        • bahnuhr
          bahnuhr Forum Testing Most Active last edited by

          var dp ={"connected":true,"hi":true}
          const obj = JSON.stringify(dp);
          log (dp.connected);
          log (dp.hi);
          
          setState("neuer_dp_1",dp.connected);
          setState("neuer_dp_2",dp.hi);
          
          
          1 Reply Last reply Reply Quote 0
          • Gargano
            Gargano @LukyLuke last edited by Gargano

            @LukyLuke
            TorConnected und TorHi vorher als Objekt anlegen

            
            var Tor =JSON.parse(getState('Torzustand').val);
            log (Tor.connected);
            log (Tor.hi);
            
            setState('TorConnected',Tor.connected);
            setState('TorHi',Tor.hi);
            
            
            bahnuhr 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators last edited by

              @Gargano
              @bahnuhr

              Ist ja lieb und richtig was ihr da macht, aber wenn der TE schreibt:

              @LukyLuke sagte in webseite auslesen und in Datenpunkte darstellen json:

              Leider habe ich von javascript usw. fast keine Ahnung.

              erscheint mir das wenig hilfreich.

              Habt Ihr zugriff auf Blockly?
              dann macht doch bitte einen Screenshot von dem entsprechenden Baustein.
              Auf dem Tablet geht das leider nicht 😞

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

                @Homoran
                ich würde ja auch ein javascript erstellen. Nur fehlt mir sämtliches Wissen dazu. Leider.

                var Tor =JSON.parse(getState('https://svr39.supla.org/direct/**************/read?format=json').val);
                
                log (Tor.connected);
                log (Tor.hi);
                
                setState('TorConnected',Tor.connected);
                setState('TorHi',Tor.hi);
                

                Das klappt noch nicht so richtig.

                5.1.2021, 11:08:00.710	[error]: javascript.0 (3658) script.js.common.Tor_neu: TypeError: Cannot read property 'connected' of null
                5.1.2021, 11:08:00.712	[error]: javascript.0 (3658)     at script.js.common.Tor_neu:3:10
                5.1.2021, 11:08:00.712	[error]: javascript.0 (3658)     at script.js.common.Tor_neu:8:3
                
                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @LukyLuke last edited by

                  @LukyLuke sagte in webseite auslesen und in Datenpunkte darstellen json:

                  Nur fehlt mir sämtliches Wissen dazu. Leider.

                  mir leider auch, aber mit getstate kannst du keine Website auslesen sondern nur den bisherigen Datenpunkt, in den du das JSON geschrieben hast

                  1 Reply Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active @Gargano last edited by

                    @Gargano sagte in webseite auslesen und in Datenpunkte darstellen json:

                    @LukyLuke
                    TorConnected und TorHi vorher als Objekt anlegen

                    
                    var Tor =JSON.parse(getState('Torzustand').val);
                    log (Tor.connected);
                    log (Tor.hi);
                    
                    setState('TorConnected',Tor.connected);
                    setState('TorHi',Tor.hi);
                    
                    

                    Bei mir steht stringify !
                    Warum nimmst du parse ?

                    Gargano 1 Reply Last reply Reply Quote 0
                    • Gargano
                      Gargano @bahnuhr last edited by

                      @bahnuhr Ein JSON.stringify wandelt ein JSON Objekt in einen String. JSON.parse macht dies umgekehrt.

                      bahnuhr 1 Reply Last reply Reply Quote 0
                      • bahnuhr
                        bahnuhr Forum Testing Most Active @Gargano last edited by

                        @Gargano sagte in webseite auslesen und in Datenpunkte darstellen json:

                        @bahnuhr Ein JSON.stringify wandelt ein JSON Objekt in einen String. JSON.parse macht dies umgekehrt.

                        Genau.
                        Und mit parse klappt es nicht.

                        Gargano 1 Reply Last reply Reply Quote 0
                        • Gargano
                          Gargano @bahnuhr last edited by

                          @bahnuhr In dem Datenpunkt Torzustand steht doch ein String drin,oder nicht ?

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

                            @Gargano nee, ein json!
                            deshalb müsste @LukyLuke diesen zum parsen ja aufrufen, wenn er getstate nuten will

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

                              @LukyLuke sagte:

                              möchte ich die zwei Variablen in zwei Datenpunkte schreiben.

                              Blockly_temp.JPG

                              LukyLuke 1 Reply Last reply Reply Quote 1
                              • LukyLuke
                                LukyLuke @paul53 last edited by

                                @paul53
                                @bahnuhr
                                @Gargano
                                @Homoran

                                Danke, das klappt so. Ich habe die Datenpunkte TorConnected und TorHi angelegt und dann das blockly von Paul53 übernommen. Die Zustände werden jetzt korrekt angezeigt.
                                Hoffentlich versteh ich irgendwann wie man sowas als script richtig erstellt.

                                Fall gelöst.
                                Nochmals vielen Dank!!

                                paul53 Gargano 2 Replies Last reply Reply Quote 0
                                • paul53
                                  paul53 @LukyLuke last edited by

                                  @LukyLuke sagte:

                                  Fall gelöst.

                                  So wird die Abfrage aber nur einmal bei Skript-Start ausgeführt. Für eine zyklische Abfrage sollte request innerhalb eines Zeitplans ausgeführt werden.

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

                                    @paul53

                                    Da hast du recht. Ich überlege noch wie ich das am sinnvollsten regele. Das Tor wird von mehreren Funksendern, Handys und zukünftig auch von der Doorstation im Haus bedient.
                                    Entweder ich lasse das im Intervall abfragen oder immer nur bei bedarf wenn z.B. das Tor per webrequest bedient werden soll.

                                    Das besondere ist das ich auch noch die Teilöffnung mit berücksichtigen möchte. Das Tor öffnet dann nur etwa 1 m.

                                    1 Reply Last reply Reply Quote 0
                                    • Gargano
                                      Gargano @LukyLuke last edited by Gargano

                                      @LukyLuke Hier mal das Script zum Anschauen und evtl. Ausprobieren. Liest jede Minute den Zustand des Tores ein und speichert den Zustand in '0_userdata.0.Tor.Connected' und '0_userdata.0.Tor.Hi'

                                      Vorher das npm Module axios in de JS Instanz eintragen

                                      2c383cee-48f7-403c-9b8b-69a909051265-grafik.png

                                      const prefix = '0_userdata.0.'; //'javascript.0.'; //
                                      const idTorConnected = prefix+"Tor.Connected";
                                      const idTorHi = prefix+"Tor.Hi";
                                      
                                      const creatStateList = [
                                          {name :idTorConnected, type:"boolean", role : "value"},
                                          {name :idTorHi, type:"boolean", role : "value"}
                                      ]
                                      
                                      async function createState (item){
                                          await createStateAsync(item.name, { 
                                                  type: item.type,
                                                  min: 0,
                                                  def: 0,
                                                  role: item.role
                                              });
                                      }
                                      
                                      async function makeStatList() {
                                          creatStateList.forEach (function(item) {
                                              createState(item);
                                          });
                                      }
                                      
                                      makeStatList();
                                      
                                      const axios = require('axios');
                                      const url = 'https://svr39.supla.org/direct/**************/read?format=json';
                                      
                                      // mySchedule im JS Editor mit dem Uhrsymbol oben rechts erstellen
                                      
                                      var mySchedule ='* * * * *';  // jede Minute
                                      schedule(mySchedule, getTor);
                                      
                                      function getTor() {
                                          axios.get(url)
                                              .then(function (response) {
                                                  // handle success
                                                  let tor = response.data;  
                                                  console.log ('JSON '+JSON.stringify(tor));
                                                  setState(idTorConnected, tor.connected);
                                                  setState(idTorHi, tor.hi);
                                              })
                                              .catch(function (error) {
                                                  // handle error
                                                  console.log(error);
                                              })
                                          
                                      }
                                      
                                      
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      895
                                      Online

                                      32.0k
                                      Users

                                      80.4k
                                      Topics

                                      1.3m
                                      Posts

                                      5
                                      17
                                      1175
                                      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