Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JSON File Auswerten

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

      @dietlman:

      I

      Leider hab ich keine Ahnung wie ich das am Besten anstelle, vielleicht hat jemand eine Idee. `

      Wenn Du die Datei auf Deinem ioBroker Server übertragen kannst versuche mal dieses Skript:

      ! var pfad = "fronius" + "."; var cronStr = "*/1 * * * *"; // wie of soll die Datei abgefragt werden var abfragePin1 = "cat /tmp/digital_out.txt"; //hier den Pfad und den Dateinamen ! var forceCreation = false; ! var datenpunkte = { 'pin1': { "init":false, "common": { name: 'Wert Pin 1', desc: 'Wert Pin 1', type: 'boolean', unit: '', role: 'value' } } }; ! function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } ! // Average Load mit uptime auslesen function getData() { exec(abfragePin1, function(err, stdout, stderr) { if (err) { log(err); return; } var json = JSON.parse(stdout); log(stdout); log(json["pin 1"].set); setState(pfad + 'pin1',json["pin 1"].set); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, getData); ! // main // ----------------------------------------------------------------------------- function main() { getData(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 500); !

      Dazu muss ioBroker auf einem Linux laufen (wg. dem Kommando cat).

      Der Pfad und Dateiname muss Deinen Werten entsprechend angepasst werden:

      var abfragePin1 = "cat /tmp/digital_out.txt"; //hier den Pfad und den Dateinamen

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

        das ist schon mal ein guter Ansatz, ich muss mir jettz überlegen wie ich von meinem Fronius WR die Datei auf meinen iobroker bekomme. Der läuft auf einer Synology im docker. Wenn ich dort einen FTP service zum laufen bringe dann könnte ich das file direkt in den iobroker schreiben. Ob das "cat" command bei dieser Version läuft muss ich erst schauen, ich werde weiter berichten,

        danke schon mal inzwischen für die Hilfe.

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

          @dietlman:

          Wenn ich dort einen FTP service zum laufen bringe dann könnte ich das file direkt in den iobroker schreiben. `

          Kannst Du nicht das Verzeichnis von Deinem FTP Server mounten?

          Dann könntest Du den Pfad angeben.

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

            @ruhr70:

            @dietlman:

            Wenn ich dort einen FTP service zum laufen bringe dann könnte ich das file direkt in den iobroker schreiben. `

            Kannst Du nicht das Verzeichnis von Deinem FTP Server mounten?

            Dann könntest Du den Pfad angeben. `

            ja denke schon nur weiss ich noch nicht wie ich das im iobroker terminal mache…

            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              @dietlman:

              file auf meinen FTP Server geschrieben `
              Ist die Datei dann auch per HTTP erreichbar oder ist das ein reiner FTP-Server? Falls ersteres kannst du mit dem request-Modul die Datei in regelmäßigen Abständen abrufen und dann auslesen.

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

                @AlCalzone:

                @dietlman:

                file auf meinen FTP Server geschrieben Ist die Datei dann auch per HTTP erreichbar oder ist das ein reiner FTP-Server? Falls ersteres kannst du mit dem request-Modul die Datei in regelmäßigen Abständen abrufen und dann auslesen.

                Leider ist die Datei nicht per HTTP erreichbar, ich werde aber noch schauen ob ich es irgendwie schaffe diese per HTTP zur Verfügung zu stellen

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

                  @AlCalzone:

                  @dietlman:

                  file auf meinen FTP Server geschrieben
                  Ist die Datei dann auch per HTTP erreichbar

                  so jetzt ist die Datei auch per HTTP erreichbar, jetzt bräuchte ich nur noch Hilfe mit dem request-modul. Wie muss ich das konfigurieren bzw. wie kann ich meine Datei dann per HTTP abfragen?

                  habe folgende URL wo ich mein file angezeigt bekomme: 192.168.1.33/files/digital_out.json

                  bekomme dann dieses file angezeigt, und möchte da eigentlich nur den teil in Rot markeirt abfragen:

                  {

                  "pin 0" : {

                  "direction" : "out",

                  "function" : "SystemOperationalManagementGranted",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 1" : {

                  "direction" : "out",

                  "function" : "EMRS_OUTPUT_1",

                  "set" : true,

                  "type" : "DIGITAL"

                  },

                  "pin 2" : {

                  "direction" : "in",

                  "function" : "EVU_INPUT_1",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 3" : {

                  "direction" : "in",

                  "function" : "EVU_INPUT_2",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 4" : {

                  "direction" : "in",

                  "function" : "SystemOperationalManagementRequest",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 5" : {

                  "direction" : "in",

                  "function" : "SystemOperationalManagementAcknowledge",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 6" : {

                  "direction" : "in",

                  "function" : "EVU_INPUT_5",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 7" : {

                  "direction" : "in",

                  "function" : "EVU_INPUT_6",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 8" : {

                  "direction" : "in",

                  "function" : "EVU_INPUT_7",

                  "set" : false,

                  "type" : "DIGITAL"

                  },

                  "pin 9" : {

                  "direction" : "in",

                  "function" : "EVU_INPUT_8",

                  "set" : false,

                  "type" : "DIGITAL"

                  }

                  }

                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    @dietlman:

                    jetzt bräuchte ich nur noch Hilfe mit dem request-modul. Wie muss ich das konfigurieren bzw. wie kann ich meine Datei dann per HTTP abfragen? `
                    Du brauchst den JavaScript-Adapter und trägst in dessen Konfiguration bei "zusätliche Module" request ein.

                    Hier findest du Dokumentation dazu: https://github.com/request/request

                    Der einfachste Fall, der für dich ausreichen sollte steht ganz oben. Baue ein neues Skript (nicht unter global!):

                    var request = require('request');
                    
                    // Diese Funktion immer ausführen, wenn du neue Daten abrufen willst, z.b. per schedule:
                    request('!!!hier die URL hin!!!', function (error, response, body) {
                    	if (error) {
                    		log("Fehler aufgetreten: " + error);
                    	} else {
                    		var json = JSON.parse(body);
                    		// Daten aus json auswerten (siehe anderes Skript in diesem Thread)
                    	}
                    });
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      Etwa so

                      var request = require('request');
                      var url = '...';
                      
                      createState('Wechselrichter.pin1.set', false, {
                          type: 'boolean',
                          read: true,
                          write: true
                      });    
                      
                      function wr() {
                          request(url, function(error,response, body) {
                              if(error) log('Fehler request: ' + error, 'error');
                              else {
                                  var obj = JSON.parse(body);
                                  setState('Wechselrichter.pin1.set', obj['pin 1'].set);  // Wert von Pin 1: set in Datenpunkt
                              }    
                          });
                      }
                      
                      schedule('*/1 * * * *', wr);  // jede Minute
                      
                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 last edited by

                        @AlCalzone:

                        und trägst in dessen Konfiguration bei "zusätliche Module" request ein. `
                        Das ist nicht erforderlich, denn 'request' ist schon im JS-Adapter installiert.

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

                          @ALLE

                          Vielen Dank für eure Hilfe. Funktioniert perfekt jetzt, hab wieder etwas dazugelernt 🙂

                          LG

                          Duke

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          718
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          4
                          12
                          2212
                          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