Das sehe ich auch so aber damit file_get_contents das macht muss es mit dem Stream-Context aufgerufen werden, sonst bricht es ab.
Ankündigung
Einklappen
Keine Ankündigung bisher.
JSON String zerlegen und verteilen
Einklappen
X
-
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
-
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
-
Zitat von EugenDo Beitrag anzeigenda 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 ...
Für einen Abruf mit User / pass würde ich in php die curl function nutzen.
Kommentar
-
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
-
Zitat von vento66 Beitrag anzeigenDann 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
-
Das hier sollte schon reichenPHP-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($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_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
}
}
)
- Likes 1
Kommentar
-
Zitat von AxelH Beitrag anzeigenVielleicht krieg ich das ja auch mit einem eignen LBS auf die Reihe.....
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
-
Zitat von AxelH Beitrag anzeigenWelche LBS Nummer darf ich verwenden, wer weist diese zu?
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
-
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
-
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.PNGPHP-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
Kommentar