Erster Schuß.....
visu_NEDAP.PNG
Ankündigung
Einklappen
Keine Ankündigung bisher.
JSON String zerlegen und verteilen
Einklappen
X
-
I made it !!!!!!!LBSinlogik.PNGVielen lieben Dank für Eure Geduldigkeit, Ausdauer und auch Schmerzfreiheit .........
Ich denke ich habe es jetzt kapiert mit den ARRAYS.
Aber es lag noch ein ganz anderer Stolperstein.......
Der Seite gab erst nach erweiterung der CURLOPT_USERAGENT,.... die Daten frei
Jetzt arbeite ich noch an der Visu und stelle diese dann mal ein :-)PHP-Code:curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
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($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
Yipeeeihei !!!!
Grüße aus dem sonnigen Süden
Axel
- Likes 1
Einen Kommentar schreiben:
-
Ehrlich gesagt wäre mein dringender Vorschlag PHP zu lernen, denn so kommen wir hier nicht zum Erfolg.
Letzter Hinweis:
PHP-Code:if ($ch_error) {
// Error occucred
} else {
if ($result) {
$json = json_decode($result,true);
$log = $result['last_log'];
//OUTPUT
logic_setOutput($id,1,$log['time_received']);
}
}
}
Zuletzt geändert von jonofe; 16.03.2019, 22:47.
Einen Kommentar schreiben:
-
edomi_error.PNGPHP-Code:$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 als ARRAY
$json = json_decode($result); // Hier steht dein JSON String als Object
$log = $json->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);
Zuletzt geändert von AxelH; 16.03.2019, 22:43.
Einen Kommentar schreiben:
-
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...
Ich komme aber auch nicht wirklich dahinter.....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);
Muß ich das Objekt $log noch irgendwie definieren?
edomi_error.PNG
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
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
doch auch mal aus und schau ob der Fehler immer noch auftaucht.PHP-Code:$json = (json_decode($result,true)); // Hier steht dein JSON String"
Dann an A22 mal direkt das Ergebnis des cURL-Requests ausgeben, also
anstelle vonPHP-Code:logic_setOutput($id,22,$result);
Dann die Ausgabe von A22 nochmal hier zeigen.PHP-Code:logic_setOutput($id,22,$json);
Einen Kommentar schreiben:
-
Du musst dich jetzt entscheiden, ob Du den JSON als Object oder als Array umwandeln willst ...
Als Array:
Als Object:Code:$json = (json_decode($result,true));
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]);
Einen Kommentar schreiben:
-
Hallo Ihr Geduldsamen,
hier nochmal der aktuelle Stand....
php:
EDOMI error log file :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.PNG
LBS inkl. logik:
InkedLBSinlogik_LI.jpg
Return wenn ich den erzeugten link aus dem LBS in den Chrombrowser eingebe:
JSON_string.PNG
Einen Kommentar schreiben:
-
Das JSON steht ja im ersten Post.
Demnach sollte es
sein.PHP-Code:$json['lastlog']['time_received']
usw.
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']);
Einen Kommentar schreiben:
-
Das war auch meine Frage.Zitat von EugenDo Beitrag anzeigenwie sieht denn der JSON eigentlich wirklich aus?
Ich wüsste nicht wie man die Ausgabe von var_dump in EDOMI sichtbar machen könnte.Zitat von EugenDo Beitrag anzeigenkann man irgendwo den var_dump($json); machen?
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?!
- Likes 1
Einen Kommentar schreiben:
-
Zitat von Glotzkowski Beitrag anzeigenWie 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?
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
Hi jonofe,
log.PNGhier das dazugehörige php
was mache ich denn falsch?PHP-Code:$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']));
Einen Kommentar schreiben:


Einen Kommentar schreiben: