Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Status einlesen und in einzelne Variablen zerlegen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Status einlesen und in einzelne Variablen zerlegen

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

      Hallo,

      nun versuch ich schon einige Stunden einen brauchbaren Skript-Schnipsel oder was fertiges zu finden, bin bisher aber nicht fündig geworden. Nun hoffe ich, das mir jemand einen kleinen oder großen Denkanstoß geben kann.

      Ist wahrscheinlich für viele hier einfacher als ich denken kann. Folgendes: Ich besitze seit kurzem die go-e Charger Wallbox. Wenn ich mit http://go-eCharger/status die Box aufrufe, erhalte ich folgendes als Antwort:

      {"version":"B","car":"2","amp":"10","err":"0","ast":"1","alw":"1","stp":"0","cbl":"32","pha":"63","tmp":"22","dws":"1850271","dwo":"0","adi":"0","uby":"1","eto":"710","wst":"3",
      "nrg":[227,228,227,0,77,78,78,11,11,12,0,356,67,66,67,0],"fwv":"012","sse":"000223","wss":"WLAN-SSID","wke":"WLAN-Key","wen":"1","tof":"101",
      "tds":"1","lbr":"10","aho":"3", "afi":"7","ama":"16","al1":"6","al2":"8","al3":"10","al4":"12","al5":"16","cid":"658175","cch":"65535","cfi":"65280","ust":"0","wak":"d4383b77c0","nmo":"0","eca":"340",
      "ecr":"0", "ecd":"0","ec4":"0","ec5":"0","ec6":"0","ec7":"0","ec8":"0","ec9":"0","ec1":"0","rca":"EE089F59","rcr":"A7E35264","rcd":"","rc4":"","rc5":"","rc6":"","rc7":"","rc8":"","rc9":"",
      "rc1":"","rna":"","rnm":"","rne":"","rn4":"","rn5":"","rn6":"","rn7":"","rn8":"","rn9":"","rn1":""}
      ````(In Firefox aufgerufen erhalte ich die Ausgabe untereinander und schöner lesbar, oben steht JSON, Rohdaten, Kopfzeilen.)
      
      Nun möchte ich die einzelnen Angaben (wie zB. amp, err, ast, alw,…) in einzelne Variablen schreiben, um diese natürlich nutzbar zu machen. Ich brauch nicht alle Angaben, da manche ja keinen Wert haben, aber schaden kann es ja nicht.
      
      Wie kann ich das nun ohne viel Schreibarbeit (da sehr viele Variablen) machen? Hoffe, ihr wisst, wie ich es meine!
      
      Gruß
      
      jgoller
      1 Reply Last reply Reply Quote 0
      • J
        jgoller last edited by

        :?: Hat denn niemand eine Idee, einen Link oder Hinweis, so daß ich zu einer Lösung komme? Ich kann leider mit JS wenig anfangen und hab momentan wenig Zeit, mich da einzuarbeiten, Sorry.

        Also, es wäre echt toll, wenn jemand ein Skript-Schnippsel oder eben einen Link auf ein ähnliches Thema oder sonstwas posten könnte! Und wenn noch Angaben fehlen sollten, lasst es mich wissen, bitte.

        Gruß

        jgoller

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

          Referenz wurde gelöscht.

          1 Reply Last reply Reply Quote 0
          • F
            fuchs1978 last edited by

            Hast du inzwischen etwas hinbekommen?

            1 Reply Last reply Reply Quote 0
            • F
              FriMatze last edited by

              Moin, mal den Adapter ModBus versucht?

              1 Reply Last reply Reply Quote 0
              • S
                Schwarzwald-Stromer last edited by

                Würde mich gerne dranhängen, habe ebenfalls den Go-e Charger und möchte zukünftig die Ladung eines E-Autos in Abhängigkeit der PV-Anlagenleistung unter Berücksichtigung des aktuellen Eigenverbrauchs steuern.

                1 Reply Last reply Reply Quote 0
                • T
                  tempestas last edited by

                  Habe am Handy kein fertiges Script, aber ich würde über nen schedule alle x Minuten abfragen (request).
                  Mittels json.parse in ein JS Object umwandeln und dann mit einer for Schleife über Objekt Keys iterieren zum Auslesen.

                  Die states kann man entweder einmalig so auch erstellen lassen oder man erstellt die einmal "manuell" im Skript.
                  Man kann auch ohne Iteration dann zB nur die drei benötigen Daten abholen.

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    Schwarzwald-Stromer @tempestas last edited by

                    leider kann ich nicht selbst scripten, nur kopieren und anpassen ;(

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

                      Vielleicht ist der Systeminfo Adapter was dafür.

                      ich nutze den zur Abfrage des Akkus meiner WIN 10 Tablets.

                      Da kommt so etwas zurück:

                      c30fca2c-dd7a-4011-a2ce-c76d7ec7b3c3-image.png

                      Im Adapter dann das eingetragen:

                      e713ba78-5bc7-49e5-a326-0bee97301850-image.png

                      Untere Zeile ist die wichtige.

                      Ergebnis in den Objekten sieht dann so aus:

                      b25af267-a7c0-46ff-a349-9d986a74f2be-image.png

                      Wenn die Box allerdings Modbus kann, würde ich das an deiner Stelle bevorzugen.

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

                        @jgoller sagte:

                        einen Link auf ein ähnliches Thema

                        Hier ein Link auf ein ähnliches Thema.

                        Die Objektstruktur kann man sich im JSON Viewer anzeigen lassen.

                        1 Reply Last reply Reply Quote 0
                        • B
                          Brati last edited by

                          Hmm,

                          du müsstest dir mal das JSON aufgliedern und einlesen, dass kann ich aber auch nur über probieren.

                          Der Anfang wäre, dass du das JSON einliest:

                          var link    = "",
                          	request = require('request'),
                          	parseString = require('xml2js').parseString,
                          	logging = true;
                          
                          
                          
                          var xml, result;
                          
                              link        = 'http://go-eCharger/status';
                              request(link, function (error, response, body) {
                                          parseString(body, function (err, result) {
                                                  if (logging) log("XML Objekt: " + result);
                                                  xml = JSON.stringify(result);
                                                  if (logging) log("XML Objekt: " + xml);
                                                  
                                                  log ("amp:  " + xml.amp.value);
                                                  log ("tmp:  " + xml.tmp.value);
                                                  
                                              });
                                        
                              
                              
                              });   // Ende request 
                          

                          Du musst in der JS Instanz unbedingt das npm Modul "xml2js" hinzufügen.

                          Das ist ungetestet und sollte die Werte für amp und tmp im log ausgeben. Ansonsten könnte man sich mit split auch noch alles zerlegen.

                          Grüße

                          Brati

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

                            @Brati sagte:

                            npm Modul "xml2js" hinzufügen.

                            Wozu ? Wo siehst Du XML-Code ?

                            B 1 Reply Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active last edited by

                              Hallo,
                              von mir auch ein kleines Script (ich hole damit den json meines Mähroboters (robonect) und weise die Werte Variablen zu.
                              Danach kannst du diese Variablen in VIS darstellen.

                              
                              function weiter() {
                                  var request = require('request');
                                  request('http://192.168.xxx......', function (error, response, body) {
                                      if (!error && response.statusCode == 200) {
                                          var obj = JSON.parse(body);
                                              setState('javascript.0.Status.Mähroboter.Battery', obj.status.battery);
                                              setState('javascript.0.Status.Mähroboter.Hours', obj.status.hours);
                                              setState('javascript.0.Status.Mähroboter.Messer', obj.blades.quality);
                                      } else {
                                          log("Error = " + error);
                                      }
                                      });
                              }
                              
                              
                              
                              // alle 2 Minuten ------------------------------------------------------------------------------------------------------------------------
                              
                              schedule("*/2 * * * *", function () {
                                  weiter();           // Werte holen
                              });
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • B
                                Brati @paul53 last edited by

                                @paul53 sagte in Status einlesen und in einzelne Variablen zerlegen:

                                @Brati sagte:

                                npm Modul "xml2js" hinzufügen.

                                Wozu ? Wo siehst Du XML-Code ?

                                Nigends :). Bin immer froh wenn es klappt.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  Schwarzwald-Stromer last edited by Schwarzwald-Stromer

                                  Mit ioBroker den go-E Charger auslesen, den Werten aus dem json array Variablen zuordnen und diese an Objekte übergeben, damit von anderen Programmteilen darauf zugegriffen werden kann.

                                  • Im Tutorial des go-E Charger die gewünschten Werte markieren

                                  • In Admin ioBroker in der gewünschten JavaScript Instanz dann Objekte anlegen bei mir in javascript.0/Energie/
                                    (ich hab da noch ein paar andere drin, da ich die Ladung in Abhängigkeit von PV_Leistung und aktuellem Verbrauch im Haus steuern möchte. Das Programm ist aber noch nicht fertig).
                                    Bildschirmfoto 2019-03-24 um 11.05.25.png

                                  • In Admin ioBroker zu Skripte wechseln, mit + eine neue Gruppe anlegen (bei mir Eigene Skripte),
                                    dann in der neuen Gruppe ein neues Skript (mittlere Auswahl JS -JavaScript anlegen (Abfrage go-E Charger)

                                  • Mit copy & paste nachfolgende Zeilen einfügen:

                                  var alwx, alw0, etox, etoxd, nrg, nrg_x, nrg_4x, nrg_4xd, nrg_7x, nrg_7xd
                                  // Trigger 1 min
                                  schedule("*/1 * * * *", function () {
                                  try {
                                  require("request")('http://xxx.xxx.xxx.xxx/status', function (error, response, result) {
                                  setState("javascript.0.Energie.go-E_Abfrage"/go-E_Abfrage/, result, true);
                                  }).on("error", function (e) {console.error(e);});
                                  } catch (e) { console.error(e); }

                                  data = (function () { try {return JSON.parse(getState("javascript.0.Energie.go-E_Abfrage").val);} catch(e) {return {};}})();

                                  var alwx = parseInt(data["alw"]);
                                  setState("javascript.0.Energie.alw_0"/alw_0/, alwx, true);

                                  var etoxd = parseInt(data["eto"]);
                                  //Umrechnung in 1kWh
                                  var etox = etoxd / 1000;
                                  setState("javascript.0.Energie.eto_0"/eto_0/, etox, true);

                                  var nrg = data["nrg"]

                                  var nrg_0x = parseInt(nrg[0])
                                  setState("javascript.0.Energie.nrg_0"/nrg_0/, nrg_0x, true);

                                  var nrg_4xd = parseInt(nrg[4])
                                  //Umrechnung in 1A
                                  var nrg_4x = nrg_4xd / 10
                                  setState("javascript.0.Energie.nrg_4"/nrg_4/, nrg_4x, true);

                                  var nrg_7xd = parseInt(nrg[7])
                                  //Umrechnung in 1kW
                                  var nrg_7x = nrg_7xd / 10
                                  setState("javascript.0.Energie.nrg_7"/nrg_7/, nrg_7x, true);
                                  });

                                  • Die xxx.xxx.xxx. der IP Adresse noch durch die des eigenen go-E ersetzen und das Script starten,
                                    Objektansicht aktualisieren. In der Objektansicht sollten jetzt die gleichen Werte stehen, wie bei der direkten Abfrage des go-E Chargers über den Browser. Evtl. die Javascript Instanz auch noch neu starten

                                  • Dieses Script wird automatisch/ zeitgesteuert ausgeführt. Den Trigger hierzu könnt ihr übernehmen oder Euch mit Blockly einen "basteln" und die Zeile dann in dieses Skript reinkopieren. Wer andere Variablen benötigt muss dann zuerst wieder die Objekte anlegen und dann das Script anpassen

                                  Viel Erfolg
                                  Jürgen

                                  F 1 Reply Last reply Reply Quote 0
                                  • F
                                    FriMatze @Schwarzwald-Stromer last edited by

                                    @Schwarzwald-Stromer
                                    Moin Schwarzwald-Stromer,

                                    ich bin leider auch nur ein Copy und Paste nutzer. Und leider komme ich mit den ersten beiden Punkten nicht klar 😞

                                    Im Tutorial des go-E Charger die gewünschten Werte markieren

                                    In Admin ioBroker in der gewünschten JavaScript Instanz dann Objekte anlegen bei mir in javascript.0/Energie/

                                    Magst du mir da weiterhelfen?

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      Schwarzwald-Stromer @FriMatze last edited by

                                      @FriMatze Sorry, kann dir leider auch nicht helfen, habe hierzu auch Unterstützung gebraucht.
                                      Punkt 1 markieren, ist ja nur auf dem Papier in der go-eCharger API Spezifikation , damit man keine Variable vergisst.

                                      1 Reply Last reply Reply Quote 0
                                      • F
                                        FriMatze last edited by

                                        Moin zusammen,

                                        mit meiner Frage hatte ich natürlich erhofft den bequemen weg gehen zu können. Habe mich dann selber noch mal mit dem Thema beschäftigt und musste dann schnell feststellen das ich ganz falsch gedacht habe. Darum kam auch nicht auf die Lösung. Als der Knoten dann geplatzt war, ging alles ganz schnell.
                                        Habe alles über Blockly schnell und einfach gelöst, siehe Bilder.

                                        Ich habe in der Homematic 2 Variabeln angelegt:
                                        go-eCharger Automatic & go-eCharger Manuell.

                                        Im Automatik Modus wird ausschließlich Überschuss bzw. aus meinem E3DC Hausakku geladen.

                                        Die Daten aus dem E3DC System werden über die MODBus Schnittstelle abgerufen.

                                        Bild 1 zeigt das das Batteriestatus und PV-Leistung die Ampere Stufe vom go-eCharger steuern.

                                        Bild 2 zeigt das das der go-eCharger abgestellt wird, wenn der Akku vom E3DC System bei 20% ist. Dann schaffe ICH die Nacht und muss nichts einkaufen. Zum Herbst hin muss ich evtl. die Zahl anpassen.

                                        Es läuft seitdem genauso wie ich es mir gewünscht habe.

                                        Steuerung1.png

                                        Steuerung2.png

                                        E 1 Reply Last reply Reply Quote 0
                                        • E
                                          Elektro_G @FriMatze last edited by

                                          @FriMatze Kannst du den go e Charger empfehlen? ich bekomme bald auch einen Stromer und suche schon mal nach einer Wallbox die sich gut ioBroker auslesen und steuern lässt. OpenWB gibt es da ja auch.

                                          1 Reply Last reply Reply Quote 0
                                          • I
                                            Ioniq-2018 last edited by

                                            Ich werde die (oder den?) GO-e holen und dann hoffe ich ein Porgramm schreiben zu können, welches den PV-Überschuss optimal ins Auto bringt. Momentan kann ich nur EIN/AUS steuern.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            843
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            12
                                            21
                                            3720
                                            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