Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JSON Werte in Datenpunkte

    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 Werte in Datenpunkte

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

      @andre1979:

      Jetzt stehe ich an einer Sache an und komme nicht weiter, daher habe ich mich jetzt mal angemeldet unf hoffe ihr könnt mir ein wenig helfen… `

      Ach ja… und herzlich willkommen im Forum 🙂

      Viel Spaß mit ioBroker!

      1 Reply Last reply Reply Quote 0
      • A
        andre1979 last edited by

        Hallo Ruhr70,

        vielen Dank für deine Erklärung. Wie Du dir vielleicht vorstellen kannst, bin ich jetzt als Nicht-Profi nicht wirklich in der Lage Dir zu folgen.. 😄

        Wenn möglich kannst Du mir die Stellen, an den die Änderung hin muss in meinem Script markieren. Wenn ich genau wüsste wo die Änderung hin muss, kann ich es bestimmt auch besser nachvollziehen.

        Vielen Dank schon mal für deinen Support!

        1 Reply Last reply Reply Quote 0
        • A
          andre1979 last edited by

          So, habe noch etwas rum probiert und habe es hinbekommen.

          `var request = require('request');
          
           Intervall = setInterval(SendRequest,1000);
          
          function SendRequest(){
          
              var options = {
                  url: 'https://home.sensibo.com/api/v2/pods/2mXar2sZ/acStates?apiKey=rBQm5j58LKw76FrUzLIU5KhgYoP2Rz',
              };
          
              request(options, function (error, response, body){
          
                  if (!error){
                      CreateDevices(JSON.parse(body));
                      console.log(body);
                  }
          
                  else{ console.error(error);}
          
              });
          
          }//End of Function SendRequest
          
          function CreateDevices(data){
          
          if ("undefined" !== typeof  data.result){    
          
              for (i = 0; i < data.result.length; i++) {
          
                           for (var ObjName in data.result[i].acState) {
          
                               if (!getObject('javascript.0.KlimaEsszimmer.States.' +i +'.acState' +'.' +ObjName)){
          
                                   createState('javascript.0.KlimaEsszimmer.States.' +i +'.acState' +'.' +ObjName,data.result[i].acState[ObjName],{type: typeof data.result[i].acState[ObjName], role: ObjName});
          
                                   console.log('ERSTELLT');
                               }
          
                               else{setState('javascript.0.KlimaEsszimmer.States.' +i +'.acState' + '.' +ObjName,data.result[i].acState[ObjName],akt=true)}
                           }
              }
          }
          else{console.warn('Response in JSON nicht gefunden ! ')}
          
          }//End of Function CreateDevices`[/i][/i][/i][/i]
          
          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            @andre1979:

            So, habe noch etwas rum probiert und habe es hinbekommen. `

            Top! 🙂

            1 Reply Last reply Reply Quote 0
            • Kevin
              Kevin last edited by

              Hallo zusammen,
              Ich bin ganz neu in der Welt des ioBrokers und Umsteiger von fhem.

              Ich versuche gerade auch eine Json von meinem 3D Drucker auszulesen und die entsprechenden Datensätze selbst anlegen zulassen. Leider komme ich nicht weiter:

              Das ist der Output von meiner URL von dem 3D Drucker.

              {"status":"P","coords":{"axesHomed":[1,1,1,1,1,1],"wpl":1,"xyz":[160.851,108.581,27.592,45.000,2.000,24.000],"machine":[115.842,58.395,33.482,45.000,2.000,18.110],"extr":[20722.2,0.0,0.0,0.0]},"speeds":{"requested":40.0,"top":40.0},"currentTool":0,"params":{"atxPower":-1,"fanPercent":[0,100,-1,90,100,0,100,0,100,50],"speedFactor":100.0,"extrFactors":[100.0,100.0,100.0,100.0],"babystep":0.000},"seq":2,"sensors":{"probeValue":0,"fanRPM":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},"temps":{"bed":{"current":90.0,"active":90.0,"standby":0.0,"state":2,"heater":0},"current":[90.0,235.4,30.4,31.9,32.7],"state":[2,2,0,0,0],"tools":{"active":[[235.0],[0.0],[0.0],[0.0]],"standby":[[235.0],[0.0],[0.0],[0.0]]},"extra":[]},"time":45569.0,"currentLayer":138,"currentLayerTime":77.1,"extrRaw":[20698.6,0.0,0.0,0.0],"fractionPrinted":88.1,"filePosition":16983003,"firstLayerDuration":749.6,"firstLayerHeight":0.20,"printDuration":24418.6,"warmUpDuration":397.2,"timesLeft":{"file":3431.8,"filament":2551.1,"layer":6133.5}}
              

              Das ist dazu mein Script:

              var request = require('request');
              
               
               Intervall = setInterval(SendRequest,5000);
               
              function SendRequest(){
               
                  var options = {
                      url: 'http://URLVON3DRUCKER',
                  };
               
                  request(options, function (error, response, body){
               
                      if (!error){
                          CreateDevices(JSON.parse(body));
                          console.log(body);
                      }
               
                      else{ console.error(error);}
               
                  });
               
              }//End of Function SendRequest
               
              function CreateDevices(data){
               
              if ("undefined" !== typeof  data.result){    
               
                  for (i = 0; i < data.result.length; i++) {
               
                               for (var ObjName in data.result[i].acState) {
               
                                   if (!getObject('0_userdata.0.3DPrinter.' +i +'.acState' +'.' +ObjName)){
               
                                       createState('0_userdata.0.3DPrinter.' +i +'.acState' +'.' +ObjName,data.result[i].acState[ObjName],{type: typeof data.result[i].acState[ObjName], role: ObjName});
               
                                       console.log('ERSTELLT');
                                   }
               
                                   else{setState('0_userdata.0.3DPrinter.' +i +'.acState' + '.' +ObjName,data.result[i].acState[ObjName],akt=true)}
                               }
                  }
              }
              else{console.warn('Response in JSON nicht gefunden ! ')}
               
              }//End of Function CreateDevices
              

              Dann bekomme ich folgende Meldung in dem Log:

              javascript.0	2020-07-29 20:53:50.291	warn	(24214) script.js.common.3D_Printer: Response in JSON nicht gefunden !
              javascript.0	2020-07-29 20:53:45.258	info	(24214) script.js.common.3D_Printer: {"status":"P","coords":{"axesHomed":[1,1,1,1,1,1],"wpl":1,"xyz":[164.129,107.010,27.592,45.000,2.000,24.000],"machine":[123.229,61.852,33.48
              

              An was kann das liegen?

              Die Werte einzeln an ioBroker zu schreiben bekomme ich über ein anderes Skript hin. Nur hätte ich gerne alle Werte automatisch angelegt.

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

                @Kevin sagte:

                An was kann das liegen?

                Das Objekt enthält keine Eigenschaft result und ist auch kein Array.
                Versuche es mal so:

                function iter(name, obj) {
                   for(let i in obj) {
                      if(typeof obj[i] == 'object') iter(name + '.' + i, obj[i]);
                      else {
                         log(name + '.' + i + ': ' + obj[i]);
                         if(existsState(name + '.' + i)) setState(name + '.' + i, obj[i]);
                         else createState(name + '.' + i, obj[i]); // type: "mixed"
                      }
                   }
                }
                
                function SendRequest(){
                    var options = {
                        url: 'http://URLVON3DRUCKER'
                    };
                    request(options, function (error, response, body){
                        if (!error) iter('0_userdata.0.3DPrinter', JSON.parse(body));
                        else console.error(error);
                    });
                }
                
                schedule('*/5 * * * * *', SendRequest);
                
                Kevin 1 Reply Last reply Reply Quote 0
                • Kevin
                  Kevin @paul53 last edited by

                  @paul53 said in JSON Werte in Datenpunkte:

                                                                                                                                              function iter(name, obj) {                                                                                                                                                                               for(let i in obj) {                                                                                                                                                                                  if(typeof obj[i] == 'object') iter(name + '.' + i, obj[i]);                                                                                                                                                                                  else {                                                                                                                                                                                     log(name + '.' + i + ': ' + obj[i]);                                                                                                                                                                                     if(existsState(name + '.' + i) setState(name + '.' + i, obj[i]);                                                                                                                                                                                     else createState(name + '.' + i, obj[i]); // type: "mixed"                                                                                                                                                                                  }                                                                                                                                                                               }                                                                                                                                                                            }                                                                                                                                                                                                                                                                                                                                                         function SendRequest(){                                                                                                                                                                                var options = {                                                                                                                                                                                    url: 'http://URLVON3DRUCKER',                                                                                                                                                                                };                                                                                                                                                                                request(options, function (error, response, body){                                                                                                                                                                                    if (!error) iter('0_userdata.0.3DPrinter', JSON.parse(body));                                                                                                                                                                                    else console.error(error);                                                                                                                                                                                });                                                                                                                                                                            }                                                                                                                                                                                                                                                                                                                                                         schedule('*/5 * * * * *', SendRequest);                                            
                  

                  Danke schon mal für dein Hilfe 🙂

                  Leider hat es nicht ganz funktioniert:

                  javascript.0	2020-07-29 22:56:55.543	error	(24214) at process._tickCallback (internal/process/next_tick.js:68:7)
                  javascript.0	2020-07-29 22:56:55.543	error	(24214) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49)
                  javascript.0	2020-07-29 22:56:55.542	error	(24214) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
                  javascript.0	2020-07-29 22:56:55.542	error	(24214) at client.get (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17)
                  javascript.0	2020-07-29 22:56:55.542	error	(24214) at adapter.getForeignState (/opt/iobroker/node_modules/iobroker.javascript/main.js:1124:17)
                  javascript.0	2020-07-29 22:56:55.541	error	(24214) at createProblemObject (/opt/iobroker/node_modules/iobroker.javascript/main.js:1533:17)
                  javascript.0	2020-07-29 22:56:55.541	error	(24214) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1480:37)
                  javascript.0	2020-07-29 22:56:55.541	error	(24214) at compile (/opt/iobroker/node_modules/iobroker.javascript/main.js:1257:28)
                  javascript.0	2020-07-29 22:56:55.540	error	(24214) at Object.createScript (vm.js:277:10)
                  javascript.0	2020-07-29 22:56:55.540	error	(24214) at new Script (vm.js:83:7)
                  javascript.0	2020-07-29 22:56:55.540	error	(24214) SyntaxError: Unexpected identifier
                  javascript.0	2020-07-29 22:56:55.539	error	(24214) ^^^^^^^^
                  javascript.0	2020-07-29 22:56:55.539	error	(24214) if(existsState(name + '.' + i) setState(name + '.' + i, obj[i]);
                  javascript.0	2020-07-29 22:56:55.539	error	at script.js.common.Skript_1:6
                  javascript.0	2020-07-29 22:56:55.539	error	(24214) script.js.common.Skript_1 compile failed:
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Kevin last edited by

                    @Kevin sagte:

                    Leider hat es nicht ganz funktioniert:

                    existsState(id) wird anscheinend angemeckert. Welche Version des Javascript-Adapters ?

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

                      @paul53 Sollte eigentlich die aktuellste Version sein: 4.6.21

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

                        @Kevin
                        Sorry, da fehlt eine schließende Klammer vor setState. Habe sie ergänzt.

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

                          @paul53 Perfekt danke für die schnelle Hilfe. Genau wie ich es mir vorgestellt habe.

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

                            @Kevin sagte:

                            Genau wie ich es mir vorgestellt habe.

                            Dann markiere bitte das Thema in der Überschrift des ersten Beitrags als [gelöst].

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

                              @paul53 Ich habe noch eine Frage 🙂

                              Lässt sich verhindern, dass die Abfrage durchgeführt wird, wenn der Drucker ausgeschaltet ist?

                              javascript.0	2020-07-31 07:08:11.796	error	(24214) Request error: Error: connect ETIMEDOUT 91.15.159.27:8000
                              javascript.0	2020-07-31 07:08:11.795	error	(24214) script.js.common.3D_Printer: {'errno':'ETIMEDOUT','code':'ETIMEDOUT','syscall':'connect','address':'IP','port':8000}
                              
                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @Kevin last edited by paul53

                                @Kevin sagte:

                                wenn der Drucker ausgeschaltet ist?

                                Wie kann man das feststellen ? Nur ping ?

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

                                  @paul53 Ich könnte es über einen Datenpunkt an der Fritzbox abfragen. Dann wäre Datenpunkt 3Drucker.active auf true sobald er im netzwerk ist

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

                                    @Kevin sagte:

                                    über einen Datenpunkt an der Fritzbox abfragen

                                    Dann mache die Abfrage als erstes in der Funktion SendRequest().

                                    function SendRequest(){
                                      if(getState('abc.0.xyz.3Drucker.active').val) {
                                        var options = {
                                            url: 'http://URLVON3DRUCKER'
                                        };
                                        request(options, function (error, response, body){
                                            if (!error) iter('0_userdata.0.3DPrinter', JSON.parse(body));
                                            else console.error(error);
                                        });
                                      }
                                    }
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    549
                                    Online

                                    31.8k
                                    Users

                                    80.0k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    18
                                    4130
                                    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