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.
    • dietlman
      dietlman last edited by

      Ich brächte bitte etwas Hilfe mit der Auswertung eines Json file welches bei mir am FTP Server liegt.

      Situation: Ich habe einen Fronius Wechselrichter, und den Fronius Adapter installiert, der funktioniert auch perfekt, allerdings gibt es einen Wert welchen ich mit dem Adapter nicht bekomme, der kann nur mittles Fonius-Push Service auf einen FTP Server gepusht werden. Das habe ich auch schon eingerichtet, es wird alle 10 sec. ein file auf meinen FTP Server geschrieben, Beispiel file ist hier angehängt (digital_out.txt):

      Jetzt brauche ich von diesem file eigentlich nur einen Status/Wert abfragen (habe ihn rot markiert weiter unten) und diesen möchte ich dann gerne visualisieren.

      {

      "pin 0" : {

      "direction" : "out",

      "function" : "SystemOperationalManagementGranted",

      "set" : false,

      "type" : "DIGITAL"

      },

      "pin 1" : {

      "direction" : "out",

      "function" : "EMRS_OUTPUT_1",

      "set" : false,

      "type" : "DIGITAL"

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

      Vielen Dank!
      3139_digital_out.txt

      1 Reply Last reply Reply Quote 0
      • 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

                            822
                            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