Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]Homepilot JSON einlesen

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [gelöst]Homepilot JSON einlesen

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

      Hallo zusammen,

      ich steh irgendwie auf dem Schlauch. Nachdem der Node-Red Adapter bei mir zu Zeit spinnt, versuche ich einige der Flows direkt in JavaScript zu realisieren. Nach diesem Vorbild (http://forum.iobroker.net/viewtopic.php?f=21&t=880&sid=968c7f80b8566ec431d300d339231afc) habe ich vor, die JSON Datei meines Hompilot einzulesen. Es sind nur zwei Devices angelernt (zwei Rollläden), deren Position ich in Objekten speichern will.

      JSON Datei: http://homepilot.local/deviceajax.do?devices=1

      ! ````
      { "response" : "get_visible_devices", "status" : "ok", "devices" : [{"did":10000,"name":"Rollo SZ links","description":"Rollotron Standard Schlafzimmer linkes Fenster","initialized":1,"position":80,"productName":"RolloTron Standard","serial":"40","statusesMap":{"Position":80,"Manuellbetrieb":1},"status_changed":1435843704,"deviceGroup":2,"iconSet":{"name":"Rollladen 2","description":"Rollladen Icon-Set mit Streben","strMin":"Auf","strMax":"Zu","valMax":100,"valMin":0,"sprite":{ "imageUri" : "images/sets/rollladen2.png", "numTiles" : 5 },"k":"iconset15"},"iconSetInverted":0,"paired":0,"statusValid":true,"uid":"40 59 0A","visible":true,"groups" : [ ] ,"favoredId":5003,"properties":{"generic":3,"wind":3,"trigger":3,"closingContact":3,"dusk":3,"smoke":3,"sun":3,"temperature":3,"manual":3,"time":3,"dawn":3,"dust":3,"favored":0,"smartphone":3,"motion":3,"temperator":3,"warning":3,"rain":3,"states":[{"cfgKey":"setEveningAuto","cfgId":107,"state":0},{"cfgKey":"setSunAuto","cfgId":105,"state":0},{"cfgKey":"setTimeAuto","cfgId":101,"state":0},{"cfgKey":"setAutomationOverall","cfgId":99,"state":1},{"cfgKey":"setMorningAuto","cfgId":103,"state":0}]},"sortId":914,"sTypes":[],"version":"1.2","sync":-2147481675,"messages":[],"hasErrors":0,"autos":[3,2,0,1,4]},{"did":10001,"name":"Rollo SZ rechts","description":"Rollotron Standard Schlafzimmer rechtesFenster","initialized":1,"position":88,"productName":"RolloTron Standard","serial":"40","statusesMap":{"Position":88,"Manuellbetrieb":0},"status_changed":1435843708,"deviceGroup":2,"iconSet":{"name":"Rollladen 2","description":"Rollladen Icon-Set mit Streben","strMin":"Auf","strMax":"Zu","valMax":100,"valMin":0,"sprite":{ "imageUri" : "images/sets/rollladen2.png", "numTiles" : 5 },"k":"iconset15"},"iconSetInverted":0,"paired":0,"statusValid":true,"uid":"40 58 EA","visible":true,"groups" : [ ] ,"favoredId":5002,"properties":{"generic":3,"wind":3,"trigger":3,"closingContact":3,"dusk":3,"smoke":3,"sun":3,"temperature":3,"manual":3,"time":3,"dawn":3,"dust":3,"favored":0,"smartphone":3,"motion":3,"temperator":3,"warning":3,"rain":3,"states":[{"cfgKey":"setEveningAuto","cfgId":107,"state":0},{"cfgKey":"setSunAuto","cfgId":105,"state":0},{"cfgKey":"setTimeAuto","cfgId":101,"state":0},{"cfgKey":"setAutomationOverall","cfgId":99,"state":0},{"cfgKey":"setMorningAuto","cfgId":103,"state":0}]},"sortId":915,"sTypes":[],"version":"1.2","sync":-2147481767,"messages":[],"hasErrors":0,"autos":[3,2,0,1,4]}] }

      
      Dies ist mein kläglicher Versuch mt JSON.parse, der aber nicht läuft. Was ist falsch?
      
      

      /* Homepilot einlesen

      Homepilot Daten in JS Variablen schreiben

      erstellt: 02.07.2015 von Pix
      */

      createState('Homepilot.json');
      createState('Homepilot.Rollladen.Schlafzimmer.links.Level');
      createState('Homepilot.Rollladen.Schlafzimmer.rechts.Level');

      var link = 'http://homepilot.local/deviceajax.do?devices=1';

      function readHomepilot() {
      log('Start Homepilot Daten einlesen');
      var request = require('request');

      request(link, function (error, response, body) {
          if (!error && response.statusCode == 200) {
      
              JSON.parse(body, {
                  explicitArray: false,
                  mergeAttrs: true
              },
              function (err, result) {
                  var data = JSON.stringify(result, null, 2);
                  log(data);
                  setState("javascript.0.Homepilot.json", data);
      
                  if (err) {
                      log("Fehler: " + err);
                  } else {     
                      log('Kein Fehler :-D');
                      setState("javascript.0.Homepilot.Rollladen.Schlafzimmer.links.Level", result.devices[0].position); // device 10000
                      setState("javascript.0.Homepilot.Rollladen.Schlafzimmer.rechts.Level", result.devices[1].position); // device 10001
                  }
              });
          } else {
              log('Fehler:' + error);
          }
      
      });   // Ende request 
      log('Daten aus Homepilot eingelesen');
      

      }

      schedule("*/1 * * * *", readHomepilot);
      readHomepilot();

      
      Ich brauche die Devices nicht durchzuiterieren. Wenn man später mal einen Adapter baut, kann das sinnvoll sein. Die manuelle Abfrage über __result.devices[x].position__ reicht mir.
      
      Gruß
      
      Pix
      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        Irgendwie strange versuchst du JSON.parse zu benutzen:

        /* Homepilot einlesen
        
        Homepilot Daten in JS Variablen schreiben
        
        erstellt: 02.07.2015 von Pix
        */
        var request = require('request');
        createState('Homepilot.json');
        createState('Homepilot.Rollladen.Schlafzimmer.links.Level');
        createState('Homepilot.Rollladen.Schlafzimmer.rechts.Level');
        
        var link = 'http://homepilot.local/deviceajax.do?devices=1';
        
        function readHomepilot() {
            log('Start Homepilot Daten einlesen');
            var request = require('request');
        
            request(link, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                                var result;
                    try{
                        result = JSON.parse(body);
                        var data = JSON.stringify(result, null, 2);
                        log(data);
                        setState("javascript.0.Homepilot.json", data);
                        log('Kein Fehler :-D');
                    } catch (e) {
                        log('Parse Fehler:' + e);
                    }    
                    if (result) {
                        setState("javascript.0.Homepilot.Rollladen.Schlafzimmer.links.Level", result.devices[0].position); // device 10000
                        setState("javascript.0.Homepilot.Rollladen.Schlafzimmer.rechts.Level", result.devices[1].position); // device 10001
                    }
                } else {
                    log('Fehler:' + error);
                }
        
            });   // Ende request 
            log('Daten aus Homepilot eingelesen');
        }
        
        schedule("*/1 * * * *", readHomepilot); 
        readHomepilot();
        
        
        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo Bluefox,

          try und catch sagen mir gar nix. Jedenfalls geht es jetzt wunderbar. Ist mir erstmal lieber, als länger auf node-red zu setzen.

          Vielen Dank für die schnelle Hilfe!

          Gruß

          Pix

          1 Reply Last reply Reply Quote 0
          • Y
            ykuendig last edited by

            Er hat das Script etwas zerlegt, und das Ergebnis von JSON.parse in eine Variable (result) überführt um damit zu arbeiten.

            Mit 'try' wird versucht die nachfolgenden Befehle abzuarbeiten. Sollte ein Fehler auftreten, soll nicht das ganze Script sterben, sondern der Fehler mit 'catch' abgefangen werden. Dort wird in Deinem Fall ein erklärender Log-Eintrag erzeugt.

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              Danke für die Erklärung. Ich lerne nie aus.

              Allerdings habe ich festgestellt, dass das Skript so deutlich mehr Ressourcen braucht, als der Node-Red Flow. Bei 15sekündlicher Ausführung ging auf dem MacMini der Lüfter an und die cpu Auslastung auf 100%.

              Eigentlich reicht eine Ausführung pro Minute, aber in Node Red waren alle 10s kein Problem.

              Vielleicht schaffe ich es irgendwann, einen Adapter draus zu bauen.

              Gruß

              Pix

              Gesendet von meinem iPhone mit Tapatalk

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

                Hallo Pix,

                kannst du bitte erklären wo man den Code im Javascript Engine einfügen

                muss komme da nicht weiter, danke.

                Grüße Alex

                1 Reply Last reply Reply Quote 0
                • P
                  pix last edited by

                  Hallo Alex,

                  So wie hier beschrieben.

                  http://forum.iobroker.net/viewtopic.php?t=2011#p17349

                  Gruß,

                  Pix

                  Gesendet mit Tapatalk

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

                    Hallo Pix,

                    Danke,

                    der Heftrücken hat noch gefehlt in der Beschreibung

                    nun bekomme ich eine Position ermittelt allerdings

                    stimmt die nicht.

                    Er zeigt mir 100% an obwohl 80 oder 0 sind und das

                    auch noch 5 min. später , hast du da eine Idee an was

                    das liegt

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    719
                    Online

                    31.6k
                    Users

                    79.4k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    3199
                    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