Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JSON File Auswerten

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

JSON File Auswerten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 4 Kommentatoren 2.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • dietlmanD Offline
    dietlmanD Offline
    dietlman
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • ruhr70R Offline
      ruhr70R Offline
      ruhr70
      schrieb am zuletzt editiert von
      #2

      @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

      Adapter: Fritzbox, Unify Circuit
      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

      1 Antwort Letzte Antwort
      0
      • dietlmanD Offline
        dietlmanD Offline
        dietlman
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          schrieb am zuletzt editiert von
          #4

          @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.

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          1 Antwort Letzte Antwort
          0
          • dietlmanD Offline
            dietlmanD Offline
            dietlman
            schrieb am zuletzt editiert von
            #5

            @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 Antwort Letzte Antwort
            0
            • AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              schrieb am zuletzt editiert von
              #6

              @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.

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

              1 Antwort Letzte Antwort
              0
              • dietlmanD Offline
                dietlmanD Offline
                dietlman
                schrieb am zuletzt editiert von
                #7

                @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 Antwort Letzte Antwort
                0
                • dietlmanD Offline
                  dietlmanD Offline
                  dietlman
                  schrieb am zuletzt editiert von
                  #8

                  @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 Antwort Letzte Antwort
                  0
                  • AlCalzoneA Offline
                    AlCalzoneA Offline
                    AlCalzone
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    @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)
                    	}
                    });
                    
                    

                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

                      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
                      

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @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.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • dietlmanD Offline
                          dietlmanD Offline
                          dietlman
                          schrieb am zuletzt editiert von
                          #12

                          @ALLE

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

                          LG

                          Duke

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          426

                          Online

                          32.4k

                          Benutzer

                          81.4k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe