Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON String zerlegen und verteilen

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

    #16
    Das sehe ich auch so aber damit file_get_contents das macht muss es mit dem Stream-Context aufgerufen werden, sonst bricht es ab.

    Kommentar


      #17
      Das kann durchaus sein, das ist mir persoenlich zu "tiefes PHP"

      Kommentar


        #18
        da ich das EDOMI persönlich nicht kenne, weiß ich nicht, ob Du an den PHP Aufruf in den tiefen ran kommst und diesen manipulieren kannst ... sonst könntest Du aber einen Art PROXY basteln ...

        installiere dir auf dem System Apache und PHP und mache den Aufruf manuell in einer PHP-Datei, die du per "http://localhost/abruf.php" oder so im Logikbaustein aufrufst und dir so den vllt. sogar schon gestrippten JSON zurück geben lässt.
        Zuletzt geändert von EugenDo; 26.02.2019, 21:16.

        Kommentar


          #19
          Sodele, bin zurück von der Gemeinderatssitzung....
          und nochmals vielen Dank für die Geduld !!!!!!
          Wie auf Seite1 angewiesen habe ich nochmals das wget durchgeführt und mit CAT angezeigt.
          wget.PNG
          Der gleiche Abruf über CHROME:
          Browser.PNG

          Kommentar


            #20
            Zitat von EugenDo Beitrag anzeigen
            da ich das EDOMI persönlich nicht kenne, weiß ich nicht, ob Du an den PHP Aufruf in den tiefen ran kommst und diesen manipulieren kannst ... sonst könntest Du aber einen Art PROXY basteln ...
            Dann würde ich keine solchen Aussagen treffen, da Du nicht mal weist, was er sich damit alles zerschiest, zumal er ja sagt das er keine tieferen Kentnisse in Linux hat.
            Für einen Abruf mit User / pass würde ich in php die curl function nutzen.

            Kommentar


              #21
              Salü, wenn curl lese und dann etwas google, dann komme ich auf dieser Seite raus.....

              https://www.symcon.de/forum/threads/...Daten-auslesen

              In wieweit kann das in einen LBS für EDOMI übernommen werden???

              Kommentar


                #22
                Zitat von vento66 Beitrag anzeigen
                Dann würde ich keine solchen Aussagen treffen, da Du nicht mal weist, was er sich damit alles zerschiest, zumal er ja sagt das er keine tieferen Kentnisse in Linux hat.
                Für einen Abruf mit User / pass würde ich in php die curl function nutzen.
                'Tschuldigung ... aber dann mach auch mal weiter ....ich halte mich mal zurück!

                Kommentar


                  #23
                  Das hier sollte schon reichen
                  PHP-Code:
                                  $url "hier die URL für die Abfrage";
                                  
                  $user "";
                                  
                  $pass "";
                                  
                                  
                  $headers = array(
                                          
                  'Accept: application/json',
                                          
                  'Content-Type: application/json',
                                      );
                                  
                  $ch curl_init();
                                  
                  curl_setopt($chCURLOPT_URL$url);
                                  
                  curl_setopt($chCURLOPT_RETURNTRANSFER1);
                                  
                  curl_setopt($chCURLOPT_VERBOSE1);
                                  
                  curl_setopt($chCURLOPT_HTTPHEADER$headers);
                                  
                  curl_setopt($curlCURLOPT_USERPWD"$user:$pass");
                                  
                  $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
                                          
                  }
                                  } 
                  Dann hast Du in $json deinen gewünschten String (hoffentlich )

                  Kommentar


                    #24
                    Ich bin entzückt!!!!!
                    Da werde ich mich morgen Abend mal ransetzen und dann wieder berichten.
                    Vielleicht krieg ich das ja auch mit einem eignen LBS auf die Reihe.....

                    Gute Nacht :-)

                    Axel

                    Kommentar


                      #25
                      Zitat von AxelH Beitrag anzeigen
                      Vielleicht krieg ich das ja auch mit einem eignen LBS auf die Reihe.....
                      Dann könntest Du auch vorerst den vorhandenen LBS für Dich erweitern, wie es in einem meiner vorherigen Beiträge verlinkt war.

                      Code:
                      ###[DEF]###
                      [name        =    JSON-Abfrage               ]
                      
                      [e#1  TRIGGER    = Trigger                   ]
                      [e#2  IMPORTANT    = Request URL    ]
                      [B][e#3              = Username                      ]
                      [e#4              = Password                      ]
                      [e#5              = Log level #init=8 ][/B]
                      
                      [a#1        = Result ]
                      
                      ...
                      
                      setLogicElementVar($id, 103, $E[[B]5[/B]]['value']); //set loglevel to #VAR 103
                      
                      ...
                      
                      $url = $E[2]['value']; // URL to get content from
                      [B]$username = $E[3]['value'];
                      $password = $E[4]['value'];[/B]
                      
                      [B]$context = stream_context_create(array(
                          'http' => array(
                              'header'  => "Authorization: Basic " . base64_encode("$username:$password")
                          )
                      ));[/B]
                      
                      if($result = file_get_contents($url[B], false, $context[/B])){

                      Wenn Du einen neuen LBS dafür machst würde ich es auch wie Micha machen und cURL nutzen.
                      Zuletzt geändert von Glotzkowski; 27.02.2019, 18:56.

                      Kommentar


                        #26
                        Hallo zusammen,
                        bin aus meinem Urlaub zurück und habe gestern am LBS gebastelt.
                        Mehrere php Skript zu einem NEDAP Baustein geknüpft
                        Welche LBS Nummer darf ich verwenden, wer weist diese zu?
                        Und wie kann ich diesen testen? Nur nach import in EDOMI?
                        Danke im vorraus :-)
                        Axel

                        Kommentar


                          #27
                          Zitat von AxelH Beitrag anzeigen
                          Welche LBS Nummer darf ich verwenden, wer weist diese zu?
                          Für Dich darfst Du jede LBS Nummer verwenden, ich würde dazu recht hohe Nummern aus dem Bereich 19XXXXXX wählen.
                          Erst wenn Du einen LBS veröffentlichen möchtest, musst Du Dir Nummern vergeben lassen.

                          Testen kannst Du diesen in EDOMI nur nach Import in EDOMI.
                          Ansonsten ist es möglich das Script ohne den "EDOMI-Rahmen" in der Shell zu testen.
                          Ist aber u.U. nicht sinnvoll und auch nicht unbedingt aussagekrägtig, dass es auch in EDOMI funktioniert.

                          Kommentar


                            #28
                            wer hätte das gedacht .....
                            NEDAP error.PNG
                            In welchem log finde ich denn nähere Hinweise?????

                            Kommentar


                              #29
                              M.W in keinem Logfile. Die Ursache findest du in deinem LBS
                              Verwendest du einen PHP Editor mit Syntax Highlighting? Evtl. Siehst du dann schon den Fehler.
                              Ansonsten noch mal die Struktur prüfen. Doppelte Eingang/Ausgangsnummern führen auch zu Fehlern.
                              Oder einfach mal den LBS Code hier im Forum (in einem PHP Tag) posten, dann kann man vielleicht schon erkennen, wo das Problem ist.

                              Kommentar


                                #30
                                Hab den einen Fehler behoben :-)
                                Aber es wird irgendwie nicht besser :-(
                                Sukzessive Approximation ;-)
                                Ich denke es klemmt gerade an der Ausgabefunktion........
                                Hier versuche ich den json string an die entsprechenden Ausgänge, gemäß der "Benennung" zu verteilen....Versuch macht kluch.......
                                NEDAP error2.PNG
                                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 ]

                                [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 *

                                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,22,$json);                               //GESAMTSTRING
                                           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]###

                                Kommentar

                                Lädt...
                                X