Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON String zerlegen und verteilen

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

  • jonofe
    antwortet
    Einfach nur in deinem Code das

    PHP-Code:
      $json->time_received 
    durch

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

    Einen Kommentar schreiben:


  • EugenDo
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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.

    Einen Kommentar schreiben:


  • AxelH
    antwortet
    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]###

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Glotzkowski
    antwortet
    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.

    Einen Kommentar schreiben:


  • AxelH
    antwortet
    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

    Einen Kommentar schreiben:


  • Glotzkowski
    antwortet
    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.

    Einen Kommentar schreiben:


  • AxelH
    antwortet
    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

    Einen Kommentar schreiben:


  • vento66
    antwortet
    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 )

    Einen Kommentar schreiben:


  • EugenDo
    antwortet
    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!

    Einen Kommentar schreiben:


  • AxelH
    antwortet
    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???

    Einen Kommentar schreiben:


  • vento66
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X