Ankündigung

Einklappen
Keine Ankündigung bisher.

HOYMILES Inverter auslesen -->JSON Probleme

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HOYMILES Inverter auslesen -->JSON Probleme

    Hallo zusammen,

    ich versuche aus meinem HOYMILES converter folgenden JSON in eine Visu einzubinden.
    Scheitere aber an der Aufsplittung.....JSON sieht wie folgt aus und kommt als $result:

    {"inverter":[[{"fld":"U_DC","unit":"V","val":"39.90"},{"fld": "I_ DC","unit":"A","val":"0.03"},{"fld":"P_DC","unit ": "W","val":"1.20"},{"fld":"YieldDay","unit":"Wh ","v al":"91.00"},{"fld":"YieldTotal","unit":"kWh","v al ":"8.76"},{"fld":"Irradiation","unit":"%","val ":"0 .30"},{"fld":"U_DC","unit":"V","val":"38.40"},{"f l d":"I_DC","unit":"A","val":"0.01"},{"fld":"P_DC "," unit":"W","val":"0.20"},{"fld":"YieldDay","unit":" Wh","val":"43.00"},{"fld":"YieldTotal","unit":"k Wh ","val":"7.38"},{"fld":"Irradiation","unit":"% ","v al":"0.05"},{"fld":"U_AC","unit":"V","val":"0.50 "} ,{"fld":"I_AC","unit":"A","val":"0.00"},{"fld":" P_ AC","unit":"W","val":"0.00"},{"fld":"Q_AC","unit ": "var","val":"0.00"},{"fld":"F_AC","unit":"Hz", "val ":"0.00"},{"fld":"PF_AC","unit":"","val":"0.00 "},{ "fld":"Temp","unit":"°C","val":"7.80"},{"fld": "ALA RM_MES_ID","unit":"","val":"341.00"},{"fld":"Yield Day","unit":"Wh","val":"134.00"},{"fld":"YieldTot a l","unit":"kWh","val":"16.14"},{"fld":"P_DC","u nit ":"W","val":"1.40"},{"fld":"Efficiency","unit" :"%" ,"val":"0.00"}]]}

    SO schaut es im JSON PARSER aus
    image.png
    Interessant für mich sind die Werte die jeweils als "val" abgebildet sind

    Und hier mein Versuch der Daten Herr zu werden und über eine For Schleife 24 Ausgänge mit jeweils einem Wert zu versorgen :

    $json = json_decode($result);
    $ConvData = $json->inverter;
    for ($i = 1; $i <= 24; $i++)
    {
    foreach ($ConvData as $Wert)
    {
    $v_output = $Wert->val;
    logic_setOutput($id,$i,$Wert->val);
    $i++;
    }
    }
    logic_setOutput($id,26,$url);
    logic_setOutput($id,25,$result);​

    Hat mir jemand einen TIP?

    Liebe Grüße

    Axel

    #2
    Warum machst du das nicht mit dem JSON Extractor LBS?

    E1: dein JSON
    E2: inverter|0|val
    E3: inverter|1|val
    E4: inverter|2|val
    ...
    E11: inverter|10|val

    usw. mit dem nächsten JSON Extractor LBS...

    Als PHP Code würde es vermutlich so funktionieren:

    PHP-Code:

    $data
    =json_decode($result,true);
    $i 1;
    foreach (
    $data['inverter'] as $value) {
       
    logic_setOutput($id,$i++,$value['val']); 
    Zuletzt geändert von jonofe; 02.02.2023, 16:04.

    Kommentar


      #3
      Salü Jonofe,

      auf Deine Frage hin waruum ich nicht mit dem JSON Extraktor arbeite fällt mir leider keine gute ANtwort ein......
      HAbe es ind dn LBS kopiert,und es kommt folgender Fehler......
      image.pngWenn ich es richtig verstehe ist das wieder die Objekt/Array Thematik...die ich bisher nicht durchdrungen habe....

      Habe es gerade mit dem LBS probiert, der kriegt das Konstrukt leider nicht aufgelöst.........
      Zuletzt geändert von AxelH; 02.02.2023, 14:16.

      Kommentar


        #4
        Am besten zeigst Du einen Screenshot der Logik und schreibst hier die Inhalte der Eingänge zur weiteren Fehlersuche.

        Kommentar


          #5
          image.png
          E1 Momentan handbetätigt, später ein Minutentimer aus EDOMI
          E2 ist die IP Adresse des INverters
          Der Abruf des o.g. JSON erfolgt über die IP Adresse und einem Adressstring (A26) und kommt soweit zurück und wird in A25 ausgegeben
          image.png

          Kommentar


            #6
            In meinem Beispiel ist noch ein Fehler. Dort muss es beim foreach natürlich $data['inverter'] heissen, nicht $result[...]

            Kommentar


              #7
              Habe jetzt nochmals einen anderen Ansatz verfolgt und nun tutet es......Euch vielen Dank....

              $rawDataAsObj=json_decode($result); // die Liste an Datenobjekten für den ersten [0] Inverter aus der gesamten Antwort der DTU
              $inverterDataSet = $rawDataAsObj->inverter [0]; // iteriere über alle Einträge in der Messdatenliste des Inverters
              for ($i = 0; $i < count($inverterDataSet); ++$i)
              {
              $data = $inverterDataSet[$i];
              logic_setOutput($id,$i+1,$data->val);
              }


              logic_setOutput($id,26,$url);
              logic_setOutput($id,25,$result);​

              Wenn jemand Interesse hat...einfach nachfragen.
              Die Fehlerbehandlung ist allerdings bisher nicht existent......

              LG

              Axel

              Kommentar


                #8
                Hallo AxelH!

                Wie holst Du die Daten aus dem Hoymiles? Hast Du eine URL, über die Du das abfragst oder so? Habe nämlich jetzt auch 2 Hoymiles und überlege gerade, wie ich die Werte in meinen HS bekomme.

                Grüße

                Olaf
                Möchte den Komfort meiner Installation nicht mehr missen!

                Kommentar


                  #9
                  Hallo,

                  ich hol bei mir die Daten aus der OpenDTU Box:
                  Home - OpenDTU Documentation

                  Im Prinzip ein ESP32 mit einem Funkmodul (NRF24L01+)
                  Anbindung an Edomi oder HASS mittels MQTT


                  lg

                  Kommentar


                    #10
                    Hallo!

                    Hhm, ich suche eigentlich nach einer Möglichkeit ohne weitere Hardware (OpenDTU) oder Software (MQTT Server) auszukommen. Hatte gehofft, dass es eine URL gibt, über die man die Werte per Webabfrage direkt vom Wechselrichter auslesen kann.
                    Möchte den Komfort meiner Installation nicht mehr missen!

                    Kommentar


                      #11
                      Ah ok..
                      ich glaube die alte Serie hat nur die proprietäre Kommunikation.
                      Die neu Serie (W zum Schluss) hat integriertes WLAN, so verspricht es halt die Werbung ^^
                      HMS-600W/700W/800W/900W/1000W-2T (Wi-Fi integrated) - Hoymiles

                      Inwiefern man hier die Daten rausbekommt weiss ich aber leider nicht

                      Kommentar


                        #12
                        Hallo miteinander,

                        da mein Hoymiles ein proprietären Funkstandard nutzt muss ich ebenfalls über die OpenDTU Lösung gehen. Dnach kann man aber auf den Webserver der OpenDTU zugreifen und schon flutscht es.....

                        Kommentar


                          #13
                          Zitat von Hightech Beitrag anzeigen
                          Hatte gehofft, dass es eine URL gibt, über die man die Werte per Webabfrage direkt vom Wechselrichter auslesen kann.
                          Zumindest ein Commandline-Tool gibt es:
                          https://github.com/suaveolent/hoymiles-wifi
                          Alternativ (obiges Tool basiert auf den gleichen sourcen) einen Docker Container, der das publishen zu mqtt übernimmt:
                          https://github.com/DennisOSRM/hms-mqtt-publisher
                          Zuletzt geändert von fisch3009; 30.08.2024, 12:06. Grund: Autokorrektur korrigiert
                          Grüße
                          Matze

                          Kommentar


                            #14
                            Hey,

                            hab auch nen neueren Hoymiles und benutze den HMS-MQTT-Publisher.

                            wenn du noch Fragen dazu hast, einfach melden.

                            Gruß Dennis
                            Gruß Dennis


                            Alles geht, außer dem Känguru, das hüpft. :-)

                            Kommentar

                            Lädt...
                            X