Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON String zerlegen und verteilen

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

    #31
    Mit dem json_decode() wandelst du den String in ein Array um, greifst aber als Object drauf zu, das funktioniert nicht.

    Es muss z.B. für den Ausgang A1

    PHP-Code:
    $json['time_received'
    heißen. Für die anderen Ausgänge entsprechend.

    Kommentar


      #32
      Hi jonofe,
      ich bin zu....., sorry.
      json_decode() nicht durchführen?
      Steh leider auf dem Schlauch....darum bin ich auch ein schlechter Gärtner :-)

      Kommentar


        #33
        versuch mal diese Syntax:

        Code:
        .
        .
        .
        logic_setOutput($id,1,([B]$json->time_received[/B]));
        .
        .
        .
        und dann natürlich als Objectrückgabe (ohne true)

        Code:
        
          $json = (json_decode($result));   // Hier steht dein JSON String als Object
        Zuletzt geändert von EugenDo; 15.03.2019, 16:39.

        Kommentar


          #34
          Einfach nur in deinem Code das

          PHP-Code:
            $json->time_received 
          durch

          PHP-Code:
            $json['time_received'
          ersetzen.

          Kommentar


            #35
            Hi jonofe,
            log.PNGhier das dazugehörige php
            PHP-Code:
             $ch curl_init();
                
            curl_setopt($chCURLOPT_URL$url);
                
            curl_setopt($chCURLOPT_RETURNTRANSFER1);
                
            curl_setopt($chCURLOPT_VERBOSE1);
                
            curl_setopt($chCURLOPT_HTTPHEADER$headers);
                
            curl_setopt($chCURLOPT_USERPWD"$uid:$upw");
                
            // curl_setopt($curl, CURLOPT_USERPWD, "$uid:$upw");
                
            $result curl_exec($ch);
                
            $ch_error curl_error($ch);
                
            curl_close($ch);
                if (
            $ch_error) {
                       
            // Error occucred
                       
            } else {
                       if(
            $result){
                       
            $json = (json_decode($result,true));   // Hier steht dein JSON String

                       //OUTPUT
                       
            logic_setOutput($id,1,($json['time_received']));
                       
            logic_setOutput($id,2,($json['platform_grid_power']));
                       
            logic_setOutput($id,3,($json['solar_power']));
                       
            logic_setOutput($id,4,($json['solar_power_input1'])); 
            was mache ich denn falsch?

            Kommentar


              #36
              Wie schön, dass sich alle einig sind auf welche Art er es machen soll.

              Laut den Meldungen sind die genannten Schlüssel nicht vorhanden, bist Du sicher, dass die Abfrage funktioniert und auch Daten zurückliefert?
              Zuletzt geändert von Glotzkowski; 15.03.2019, 17:47.

              Kommentar


                #37
                Zitat von Glotzkowski Beitrag anzeigen
                Wie schön, dass sich alle einig sind auf welche Art er es machen soll.

                Laut den Meldungen sind die genannten Schlüssel nicht vorhanden, bist Du sicher, dass die Abfrage funktioniert und auch Daten zurückliefert?
                ... viele Wege führen nach Rom ...


                wie sieht denn der JSON eigentlich wirklich aus? ... kann man irgendwo den var_dump($json); machen?

                Kommentar


                  #38
                  Zitat von EugenDo Beitrag anzeigen
                  wie sieht denn der JSON eigentlich wirklich aus?
                  Das war auch meine Frage.

                  Zitat von EugenDo Beitrag anzeigen
                  kann man irgendwo den var_dump($json); machen?
                  Ich wüsste nicht wie man die Ausgabe von var_dump in EDOMI sichtbar machen könnte.
                  Die etwas schwierigere Variante wäre die Custom-Log-Funktionen von jonofe einzubauen und dann das komplette Objekt oder Array im Log auszugeben.

                  Vielleicht sollte der LBS vorerst um zwei Ausgänge erweitert werden, wo noch der codierte JSON-String (also direkt die Variable $result) und wo evtl. ein cURL-Fehler ($ch_error) ausgegeben werden?!


                  Kommentar


                    #39
                    Das JSON steht ja im ersten Post.
                    Demnach sollte es

                    PHP-Code:
                    $json['lastlog']['time_received']
                    usw
                    sein.

                    Oder besser so:

                    PHP-Code:
                    $log $json['lastlog'];
                    logic_setOutput($id,1,$log['time_received']);
                    logic_setOutput($id,2,$log['platform_grid_power']);
                    logic_setOutput($id,3,$log['solar_power']);
                    logic_setOutput($id,4,$log['solar_power_input1']); 

                    Kommentar


                      #40
                      Hallo Ihr Geduldsamen,
                      hier nochmal der aktuelle Stand....

                      php:
                      PHP-Code:
                      ###[DEF]###
                      [name    = NEDAP v0.1]

                      [e#1    = Trigger #init=1]
                      [e#2    = Loglevel #init=8]
                      [e#3    = UserID]
                      [e#4    = Passwort]
                      [e#5    = PR ID]

                      [a#1    = time_received]
                      [a#2    = platform_grid_power]
                      [a#3    = solar_power]
                      [a#4    = solar_power_input1]
                      [a#5    = solar_temperature_input ]
                      [a#6    = solar_voltage_input1]
                      [a#7    = solar_current_input1]
                      [a#8    = solar_power_input2]
                      [a#9    = solar_temperature_input2 ]
                      [a#10    = solar_voltage_input2 ]
                      [a#11    = solar_current_input2 ]
                      [a#12    = battery_state_of_charge ]
                      [a#13    = battery_bus_power ]
                      [a#14    = battery_voltage ]
                      [a#15    = battery_current ]
                      [a#16    = battery_pack_temperature ]
                      [a#17    = dcac_grid_voltage ]
                      [a#18    = dcac_frequency ]
                      [a#19    = dcac_grid_power ]
                      [a#20    = dcac_local_voltage ]
                      [a#21    = dcac_local_power ]
                      [a#22   = JSON complete ]
                      [a#23   = JSON ERROR ]

                      [v#100    = 0.0.1 ]        // Version
                      [v#101    = 19009999 ]    // LBS ID
                      [v#102    = NEDAP ]        // LBS name
                      [v#103    = 0 ]            // Log level
                      [v#104    = 1 ]            // One logfile per instance
                      [v#105    = 0 ]            // log ID in each line

                      ###[/DEF]###


                      ###[HELP]###

                      E1: if >=1 update will be triggered
                      E2: Enable Logging (0-none|1-emerg|2-alert|3-crit|4-err|5-warning|6-notice|7-info|8-debug)
                      E3: UserID of myPowerouter.com
                      E4: Password of myPowerouter.com
                      E5: PowerrouterID

                      A01 - LastUpdateTime *
                      A02 - Sensor Leistung [W] *
                      A03 - Solar Leistung gesamt [W]*
                      A04 - Leistung Eingang 1 [W] *
                      A05 - Temperatur Eingang 1 [°C] *
                      A06 - Spannung Eingang 1 [V] *
                      A07 - Stromstärke Eingang 1 [A] *
                      A08 - Leistung Eingang 2 [W] *
                      A09 - Temperatur Eingang 2 [°C] *
                      A10 - Spannung Eingang 2 [V] *
                      A11 - Stromstärke Eingang 2 [A] *
                      A12 - Ladezustand Batterie [%]
                      A13 - Leistung Batterie [W] *
                      A14 - Spannung Batterie [V] *
                      A15 - Strom Batterie [A] *
                      A16 - Batterie Temperatur [°C] *
                      A17 - Netzspannung [V] *
                      A18 - Netzfrequenz [Hz] *
                      A19 - Netzleistung [W] *
                      A20 - Spannung am Local Out [V] *
                      A21 - Leistung am Local Out [W] *
                      A22 - Gesamtstring von mypowerrouter *
                      A23 - JSON ERROR CODE

                      V1: Indicator whether daemon is running

                      V100: Version
                      V101: LBS Number
                      V102: Log file name
                      V103: Log level
                      V104: One log file per LBS instance
                      V105: log ID in each log entry

                      Changelog:
                      ==========
                      v0.1: Initial version


                      ###[/HELP]###


                      ###[LBS]###
                      <?




                      function LB_LBSID($id=NULL)
                      {
                      $E = getLogicEingangDataAll($id);
                      if ($E[1]['value'] != 0 && $E[1]['refresh'] == 1) {

                      if (logic_getVar($id, 1) != 1) { // dieses Konstrukt stellt sicher, dass das EXEC-Script nur einmal gestartet wird
                      logic_setVar($id, 1, 1);
                      logic_callExec(LBSID, $id);
                      }
                      }
                      }
                      ?>
                      ###[/LBS]###


                      ###[EXEC]###
                      <?
                      require (dirname(__FILE__) . "/../../../../main/include/php/incl_lbsexec.php");
                      set_time_limit(5);
                      sql_connect();

                      $version = getLogicElementVar($id, 100);
                      $lbsNo = getLogicElementVar($id, 101);
                      $logName = getLogicElementVar($id, 102) . "-LBS$lbsNo";
                      $logName = preg_replace('/ /', '_', $logName);

                      if ($E = logic_getInputs($id)) {
                      $uid = $E[3]['value'];
                      $upw = $E[4]['value'];
                      $prid = $E[5]['value'];
                      $url = 'https://mypowerrouter.com/power_routers/' . $prid . '/logs/1minutes.json?normalize_logs=true&include_last_log=true&solar_power=true&solar_power_input1=true&solar_voltage_input1=true&solar_current_input1=true&solar_temperature_input1=true&solar_power_input2=true&solar_voltage_input2=true&solar_current_input2=true&solar_temperature_input2=true&dcac_grid_power=true&dcac_grid_voltage=true&dcac_frequency=true&dcac_local_power=true&dcac_local_voltage=true&battery_state_of_charge=true&battery_bus_power=true&battery_voltage=true&battery_current=true&battery_pack_temperature=true&platform_grid_power=true&grid_sensor_power_l1=true&grid_sensor_voltage_l1=true&grid_sensor_current_l1=true&grid_sensor_power_l2=true&grid_sensor_voltage_l2=true&grid_sensor_current_l2=true&grid_sensor_power_l3=true&grid_sensor_voltage_l3=true&grid_sensor_current_l3=true&responseContentDataType=json';

                      $headers = array(
                                       'Accept: application/json',
                                       'Content-Type: application/json'
                      );

                       $ch = curl_init();
                          curl_setopt($ch, CURLOPT_URL, $url);
                          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                          curl_setopt($ch, CURLOPT_VERBOSE, 1);
                          curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                          curl_setopt($ch, CURLOPT_USERPWD, "$uid:$upw");
                          // curl_setopt($curl, CURLOPT_USERPWD, "$uid:$upw");
                          $result = curl_exec($ch);
                          $ch_error = curl_error($ch);
                          curl_close($ch);
                          if ($ch_error) {
                                 // Error occucred
                                 } else {
                                 if($result){
                                 $json = (json_decode($result,true));   // Hier steht dein JSON String

                                 //OUTPUT
                                 //  logic_setOutput($id,1,($json['time_received']));
                                 //  logic_setOutput($id,2,($json['platform_grid_power']));
                                 //  logic_setOutput($id,3,($json['solar_power']));
                                 //logic_setOutput($id,4,($json['solar_power_input1']));
                              //
                                 logic_setOutput($id,22,$json);                                   //GESAMTSTRING
                                 logic_setOutput($id,23,$ch_error);                               //JSON Error
                                 logic_SetOutput($id,24,$url);                                    //URL
                              //   logic_setOutput($id,1,($json->{'time_received'}));
                              //   logic_setOutput($id,2,($json->{'platform_grid_power'}));
                              //   logic_setOutput($id,3,($json->{'solar_power'}));
                              //   logic_setOutput($id,4,($json->{'solar_power_input1'}));
                              //   logic_setOutput($id,5,($json->{'solar_temperature_input1'}));
                              //   logic_setOutput($id,6,($json->{'solar_voltage_input1'}));
                              //   logic_setOutput($id,7,($json->{'solar_current_input1'}));
                              //   logic_setOutput($id,8,($json->{'solar_power_input2'}));
                              //   logic_setOutput($id,9,($json->{'solar_temperature_input2'}));
                              //   logic_setOutput($id,10,($json->{'solar_voltage_input2'}));
                              //   logic_setOutput($id,11,($json->{'solar_current_input2'}));
                              //   logic_setOutput($id,12,($json->{'battery_state_of_charge'}));
                              //   logic_setOutput($id,13,($json->{'battery_bus_power'}));
                              //   logic_setOutput($id,14,($json->{'battery_voltage'}));
                              //   logic_setOutput($id,15,($json->{'battery_current'}));
                              //   logic_setOutput($id,16,($json->{'battery_pack_temperature'}));
                              //   logic_setOutput($id,17,($json->{'dcac_grid_voltage'}));
                              //   logic_setOutput($id,18,($json->{'dcac_frequency'}));
                              //   logic_setOutput($id,19,($json->{'dcac_grid_power'}));
                              //   logic_setOutput($id,20,($json->{'dcac_local_voltage'}));
                              //   logic_setOutput($id,21,($json->{'dcac_local_power'}));



                                 

                                 }

                          }
                       }
                      sql_disconnect();
                      ?>
                      ###[/EXEC]###
                      EDOMI error log file :
                      edomi_error.PNG


                      LBS inkl. logik:
                      InkedLBSinlogik_LI.jpg

                      Return wenn ich den erzeugten link aus dem LBS in den Chrombrowser eingebe:
                      JSON_string.PNG

                      Kommentar


                        #41
                        Du musst dich jetzt entscheiden, ob Du den JSON als Object oder als Array umwandeln willst ...

                        Als Array:

                        Code:
                          $json = (json_decode($result,true));
                        Als Object:

                        Code:
                          $json = json_decode($result);

                        und dann kannst Du dann deine Werte aus dem Object "last_log" auslesen ...

                        also als Object:

                        Code:
                          $json = json_decode($result);
                          $log = $result->last_log;
                        
                          .
                          .
                          .
                         logic_setOutput($id,1,[B]$log->time_received[/B]);

                        Kommentar


                          #42
                          Er hat ja das Ausgeben von Werten aus dem Array oder Objekt an die Ausgänge vorerst deaktiviert und bekommt schon einen Fehler.

                          AxelH
                          kommentiere die Zeile
                          PHP-Code:
                          $json = (json_decode($result,true));   // Hier steht dein JSON String" 
                          doch auch mal aus und schau ob der Fehler immer noch auftaucht.

                          Dann an A22 mal direkt das Ergebnis des cURL-Requests ausgeben, also
                          PHP-Code:
                          logic_setOutput($id,22,$result); 
                          anstelle von
                          PHP-Code:
                          logic_setOutput($id,22,$json); 
                          Dann die Ausgabe von A22 nochmal hier zeigen.

                          Kommentar


                            #43
                            Wenn er statt des Versuchs ein Array oder ein Object an einem Ausgang auszugeben (was nicht geht), entweder die Ausgabe der Daten als Object- oder Array-Referenz über "last_log" machen würde, dann wäre er schon lange fertig.
                            Zuletzt geändert von jonofe; 16.03.2019, 20:51.

                            Kommentar


                              #44
                              Salü das ist einfach zu hoch....
                              oder ich zu tief....
                              Hab die dekodierung des ARRAYs abgedreht und auch das last_log eingefügt als referenz und dann im nachgang jede einzelnen AUsgang aufgesplittet...

                              PHP-Code:
                              if ($ch_error) {
                                         
                              // Error occucred
                                         
                              } else {
                                         if(
                              $result){
                                         
                              // $json = (json_decode($result,true));   // Hier steht dein JSON String als ARRAY
                                         
                              $json json_decode($result);           // Hier steht dein JSON String als Object
                                         
                              $log $result->last_log;                 // Object
                                         
                                         //OUTPUT

                                         
                              logic_setOutput($id,22,$log);                                    //GESAMTSTRING
                                         
                              logic_setOutput($id,23,$ch_error);                               //JSON Error
                                         
                              logic_SetOutput($id,24,$url);                                    //URL
                                         
                                         
                              logic_setOutput($id,1,$log->time_received);
                                         
                              logic_setOutput($id,2,$log->platform_grid_power);
                                         
                              logic_setOutput($id,3,$log->solar_power);
                                         
                              logic_setOutput($id,4,$log->solar_power_input1);
                                         
                              logic_setOutput($id,5,$log->solar_temperature_input1);
                                         
                              logic_setOutput($id,6,$log->solar_voltage_input1);
                                         
                              logic_setOutput($id,7,$log->solar_current_input1);
                                         
                              logic_setOutput($id,8,$log->solar_power_input2);
                                         
                              logic_setOutput($id,9,$log->solar_temperature_input2);
                                         
                              logic_setOutput($id,10,$log->solar_voltage_input2);
                                         
                              logic_setOutput($id,11,$log->solar_current_input2);
                                         
                              logic_setOutput($id,12,$log->battery_state_of_charge);
                                         
                              logic_setOutput($id,13,$log->battery_bus_power);
                                         
                              logic_setOutput($id,14,$log->battery_voltage);
                                         
                              logic_setOutput($id,15,$log->battery_current);
                                         
                              logic_setOutput($id,16,$log->battery_pack_temperature);
                                         
                              logic_setOutput($id,17,$log->dcac_grid_voltage);
                                         
                              logic_setOutput($id,18,$log->dcac_frequency);
                                         
                              logic_setOutput($id,19,$log->dcac_grid_power);
                                         
                              logic_setOutput($id,20,$log->dcac_local_voltage);
                                         
                              logic_setOutput($id,21,$log->dcac_local_power); 
                              Ich komme aber auch nicht wirklich dahinter.....
                              Muß ich das Objekt $log noch irgendwie definieren?
                              edomi_error.PNG

                              Kommentar


                                #45
                                Nimm $json->last_log nicht $result->last_log.

                                Kommentar

                                Lädt...
                                X