| Autor |
|
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
22.01.2008, 09:40 |
 |
Hallo,
ich suche verzweifelt ein Beispiel wie ich mit PHP der Webbox Daten entlocken kann.
JSON Formatierung ist meine ich nicht das Problem, mir fehlt der Ansatz wie ich der Box den Request schicke und die Antwort "abhole".
Ich würde gerne die POST Variante nutzen (Portfreigabetechnisch einfacher momentan), notfalls auch via Socket.
Hat jemand hier schon eine funktionierende Anwendung, bzw. ist jemand am gleichen Thema ?
Gruß
C.Zahn |
|
|
|
 |
Sascha Beverungen
SMA-Team Kundendialog

Info: Hersteller
Angemeldet: 13.12.2007
Beiträge: 4
|
Verfasst am:
22.01.2008, 11:03 |
 |
Hallo,
bei den meisten PHP Installationen ist die Curl Bibliothek installiert. Damit funktioniert es relativ einfach
| Code: |
// Hier der JSON request
$request = 'RPC='.rawurlencode($request);
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".$webboxip."/rpc");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_HEADER , 0);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
// Hier das Ergebnis
$response = curl_exec ($ch);
if (curl_errno($ch)) {
$err=1;
$errtext = curl_error($ch);
}
curl_close($ch); |
Gruß |
_________________ Sascha Beverungen | SMA Technologie AG | Team Kundendialog
GANZ NEU VON SMA: http://www.solar-is-future.de/kids - Deutschlands größtes Solartechnikportal für Kinder |
|
|
 |
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
22.01.2008, 14:10 |
 |
ich war sooo knapp davor
vielen Dank für den Tipp, mir hat nur der eigentliche $request gefehlt und zwar das "RPC=".
ich poste hier noch mein Ergebnis wenns soweit ist.
C. Zahn |
|
|
|
 |
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
22.01.2008, 16:25 |
 |
Zur Vervollständigung, hier mein Test PHP Script für den Zugriff auf die Webbox API.
| Code: |
PHP
//IP der Webbox (SMA hat übrigends eine WebBox zu Demozwecken im Internet)
$webboxip = "192.168.0.100";
//JSON Request im PHP Array Format (wird später umgewandelt durch die in PHP5 vvorhandene json_encode/decode Funktion)
$requestarray1 = array(
'version'=>"1.0",
'proc'=>"GetPlantOverview",
'id'=>"1",
'format'=>"JSON"
);
// Noch ein Test Request
$requestarray2 = array(
'version'=>"1.0",
'proc'=>"GetDevices",
'id'=>"1",
'format'=>"JSON"
);
//Aufruf der Funktion REQUEST und übergabe der IP und dem JSON Request
request($webboxip,$requestarray1);
function request($webboxip,$requestarray) {
//codieren in JSON
$request = json_encode($requestarray);
// Hier der JSON request
$request = 'RPC='.rawurlencode($request);
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".$webboxip."/rpc");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_HEADER , 0);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
// Hier das Ergebnis
$response = curl_exec ($ch);
if (curl_errno($ch)) {
$err=1;
$errtext = curl_error($ch);
}
curl_close($ch);
//Decodieren der Antwort
$response = json_decode($response);
Auffruf der Funktion OUTPUT
output($response);
}
function output($response) {
//Ausgabe für erstes RequestBeispiel
echo "<table>";
echo "<tr>";
echo "<td>Leistung: </td><td>".$response->result->overview[0]->value."".$response->result->overview[0]->unit."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>Tagesertrag: </td><td>".$response->result->overview[1]->value."".$response->result->overview[0]->unit."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>Gesamtertrag: </td><td>".$response->result->overview[2]->value."".$response->result->overview[0]->unit."</td>";
echo "</tr>";
echo "</table>";
//Ausgabe des gesamten AusgabeArrays
echo "<pre>";
print_r($response);
}
|
Ich bin jedenfalls damit beschäftig eine Paar Auswertungen und evtl. eine Speicherung der Daten via MySQL zu realisieren. Wer Fragen hat -> melden
C. Zahn |
|
|
|
 |
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
22.01.2008, 18:45 |
 |
FOR TESTING ONLY (QuickAndDirty dahingecodet)
ich versuche aus der WebBox die nötigen Daten zu erhalten die man für eine umfassende Auswertung braucht. Das ganze ist derzeit nur Informativ und somit auch etwas unübersichtlich .
Ich Plane die Daten in gesteuerten Zeitabständen in eine MySQL DB zu schaufeln und dann mit Grafiklibs schön aufzumotzen (SMA-Portal like nur halt inHaus)
Fortschritt:
einen Schritt weiter, es werden jetzt sämtliche Daten sämtlicher Wechselrichter angezeigt (soweit die Theorie )
Ich habe die Arraykonvertierung geändert, somit muss der JSON Request nicht erst in ein PHP Array umgefrickelt werden.
Das ganze ist nicht gerade ein "Laufzeitwunder" und "Programmiertechnisch" nicht gerade ein Highlight, aber für Tests taugts.
Ich bin für Anregungen usw. offen, und wenn Fehler auftauchen MELDEN
| Code: |
PHP
$webboxip = "192.168.0.100";
$requestarray1 = '{
"version": "1.0",
"proc": "GetPlantOverview",
"id": "1",
"format": "JSON"
}';
$response1 = request($webboxip,$requestarray1);
//echo "<pre>";
//print_r($response1);
echo "<table>";
echo "<tr>";
echo "<td>Realtime Values</td>";
echo "</tr>";
echo "<tr>";
echo "<td>Leistung: </td><td>".$response1->result->overview[0]->value."".$response1->result->overview[0]->unit."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>Tagesertrag: </td><td>".$response1->result->overview[1]->value."".$response1->result->overview[1]->unit."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>Gesamtertrag: </td><td>".$response1->result->overview[2]->value."".$response1->result->overview[2]->unit."</td>";
echo "</tr>";
echo "</table><br><br>";
$requestarray2 = '{
"version": "1.0",
"proc": "GetDevices",
"id": "1",
"format": "JSON"
}';
$response2 = request($webboxip,$requestarray2);
//echo "<pre>";
//print_r($response2);
echo "<table>";
echo "<tr>";
echo "<td>Devicelist</td>";
echo "</tr>";
$i = 0;
while ($i <response2>result->totalDevicesReturned)
{
echo "<tr>";
echo "<td>Wechselrichter: </td><td>".$response2->result->devices[$i]->name."</td><td>".$response2->result->devices[$i]->key."</td>";
echo "</tr>";
$i++;
}
echo "</table><br><br>";
$requestarray2 = '{
"version": "1.0",
"proc": "GetDevices",
"id": "1",
"format": "JSON"
}';
$response2 = request($webboxip,$requestarray2);
//echo "<pre>";
//print_r($response2);
$i = 0;
while ($i <response2>result->totalDevicesReturned)
{
$device = $response2->result->devices[$i]->name;
$requestarray3 = '{
"version": "1.0",
"proc": "GetProcessDataChannels",
"id": "1",
"format": "JSON",
"params":
{
"device": "'.$device.'"
}
}';
$response3 = request($webboxip,$requestarray3);
//echo "<pre>";
//print_r($response3);
echo "<table>";
echo "<tr>";
echo "<td>Properties and Values for device $device</td>";
echo "</tr>";
foreach($response3->result->$device as $key => $value)
{
$requestarray4 = '{
"version": "1.0",
"proc": "GetProcessData",
"id": "1",
"format": "JSON",
"params":
{
"devices":
[
{
"key": "'.$device.'",
"channels":
[
"'.$value.'"
]
}
]
}
}';
$response4 = request($webboxip,$requestarray4);
echo "<tr>";
echo "<td>Property: </td><td>".$key."</td><td>".$value."</td><td>".$response4->result->devices[0]->channels[0]->value."".$response4->result->devices[0]->channels[0]->unit;
echo "</tr>";
}
echo "</table><br><br>";
$i++;
}
function request($webboxip,$requestarray) {
$request = json_encode($requestarray);
$request = $requestarray;
// Hier der JSON request
$request = 'RPC='.rawurlencode($request);
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".$webboxip."/rpc");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_HEADER , 0);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
// Hier das Ergebnis
$response = curl_exec ($ch);
if (curl_errno($ch)) {
$err=1;
$errtext = curl_error($ch);
}
curl_close($ch);
$response = json_decode($response);
return($response);
}
|
wers Testen will, den kram in eine phpdatei (solar.php), $webboxip anpassen, auf nen WebServer damit (PHP, php-curl muss aktiv sein - Stichwort LAMP), die Seite Aufrufen und hoffen.
Dann dauerst nen Moment und es werden alle aktuellen Daten angezeigt. |
|
|
|
 |
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
07.02.2008, 11:58 |
 |
grml, da unsere WebBox noch auf sich warten lässt gibts leider nichts neues zu berichten.
Die WebOberfläche sieht schonmal ganz nett aus, Auswertung mit Graphen funktionieren (Tage, Monate, Jahresauswertung).
Eine Ampel die den Status der Anlage angibt und die aktuell ausgelesenen Daten der Anlage werden angezeigt.
Hoffe bald auf Echtwerte zurückgreifen zukönnen, dann gibts nen Link
SoweitSoGut
Christian |
|
|
|
 |
BadDarkShadow
Stammmitglied

Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg
|
Verfasst am:
26.04.2008, 15:32 |
 |
Hallo Christian, Hallo @Alle,
so wie es aussieht hast du zwei Fehler in deinem letzten Script:
jeweils in der while Schleife:
| Code: |
while ($i <response2>result->totalDevicesReturned)
|
müsste lauten:
| Code: |
while ($i <response2>result->totalDevicesReturned)
|
weis jemand von euch wir man das Script auf UDP umstellt ?
So wie es aussieht braucht mein Script auf der Basis von Christian bei 3 WR gute 20 Sekunden um was anzuzeigen.
LG
Thorsten
PS:Script im nächsten Posting
[/quote] |
_________________ 08.2006 Inbetriebnahme
12,54 kWp - 74x BP Solar 3165S
1x SMA SB 4200 TL HC MS 2*14 Module
2x SMA SB 3300 3*8 Module
http://www.sonnenertrag.eu/detail.php?pk=536
http://www.kasel.eu/solar |
|
|
 |
BadDarkShadow
Stammmitglied

Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg
|
Verfasst am:
26.04.2008, 15:38 |
 |
Hier meine Scripte:
webbox_kontakt.php:
| Code: |
function request($webboxip,$requestarray) {
$request = json_encode($requestarray);
$request = $requestarray;
// Hier der JSON request
$request = 'RPC='.rawurlencode($request);
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".$webboxip."/rpc");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,0);
curl_setopt($ch, CURLOPT_HEADER , 0);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
// Hier das Ergebnis
$response = curl_exec ($ch);
if (curl_errno($ch)) {
$err=1;
$errtext = curl_error($ch);
}
curl_close($ch);
$response = json_decode($response);
return($response);
}
function channels_data($webboxip,$device,$value)
{
$requestarray3 = '{
"version": "1.0",
"proc": "GetProcessData",
"id": "1",
"format": "JSON",
"params":
{
"devices":
[
{
"key": "'.$device.'",
"channels":
[
"'.$value.'"
]
}
]
}
}';
$response3 = request($webboxip,$requestarray3);
return($response3);
}
function channels($webboxip,$device)
{
$requestarray2 = '{
"version": "1.0",
"proc": "GetProcessDataChannels",
"id": "1",
"format": "JSON",
"params":
{
"device": "'.$device.'"
}
}';
$response2 = request($webboxip,$requestarray2);
return($response2);
}
function getdevice($webboxip)
{
$requestarray1 = '{
"version": "1.0",
"proc": "GetDevices",
"id": "1",
"format": "JSON"
}';
$response1 = request($webboxip,$requestarray1);
return($response1);
}
function overview($webboxip)
{
$requestarray0 = '{
"version": "1.0",
"proc": "GetPlantOverview",
"id": "1",
"format": "JSON"
}';
$response0 = request($webboxip,$requestarray0);
return($response0);
}
|
|
_________________ 08.2006 Inbetriebnahme
12,54 kWp - 74x BP Solar 3165S
1x SMA SB 4200 TL HC MS 2*14 Module
2x SMA SB 3300 3*8 Module
http://www.sonnenertrag.eu/detail.php?pk=536
http://www.kasel.eu/solar |
|
|
 |
BadDarkShadow
Stammmitglied

Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg
|
Verfasst am:
26.04.2008, 15:41 |
 |
daten.php
| Code: |
include ("../sql_zugang.php");
include ("./webbox_kontakt.php");
$requestarray2 = '{"version": "1.0","proc": "GetDevices","id": "1","format": "JSON"}';
$response2 = request($webboxip,$requestarray2);
$i = 0;
while ($i <response2>result->totalDevicesReturned)
{
$device = $response2->result->devices[$i]->name;
$requestarray3 = '{"version": "1.0","proc": "GetProcessDataChannels","id": "1","format": "JSON","params":{"device": "'.$device.'"}}';
$response3 = request($webboxip,$requestarray3);
echo "<table>";
echo "<tr>";
echo "<td>Properties and Values for device $device</td>";
echo "</tr>";
foreach($response3->result->$device as $key => $value)
{
$requestarray4 = '{"version": "1.0","proc": "GetProcessData","id": "1","format": "JSON","params":{"devices":[{"key": "'.$device.'","channels":["'.$value.'"]}]}}';
$response4 = request($webboxip,$requestarray4);
echo "<tr>";
echo "<td>Property: </td><td>".$key."</td><td>".$value."</td><td>".$response4->result->devices[0]->channels[0]->value."".$response4->result->devices[0]->channels[0]->unit;
echo "</tr>";
}
echo "</table><br><br>";
$i++;
}
|
|
_________________ 08.2006 Inbetriebnahme
12,54 kWp - 74x BP Solar 3165S
1x SMA SB 4200 TL HC MS 2*14 Module
2x SMA SB 3300 3*8 Module
http://www.sonnenertrag.eu/detail.php?pk=536
http://www.kasel.eu/solar |
|
|
 |
BadDarkShadow
Stammmitglied

Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg
|
Verfasst am:
26.04.2008, 15:44 |
 |
sql_zugang.php
| Code: |
$hostname = "sql_server";
$database = "datenbankname";
$username = "benutzername";
$password = "password";
$webboxip = "webbox ip bzw. dyndns_name";
|
[/code] |
_________________ 08.2006 Inbetriebnahme
12,54 kWp - 74x BP Solar 3165S
1x SMA SB 4200 TL HC MS 2*14 Module
2x SMA SB 3300 3*8 Module
http://www.sonnenertrag.eu/detail.php?pk=536
http://www.kasel.eu/solar |
|
|
 |
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
28.04.2008, 11:28 |
 |
Hi,
ich habe seit Februar meine Webbox am laufen. An dem Script habe ich noch einiges (wegen der laufzeit) verändert, eigentlich fast alles .
Aussehen tuts so:
http://www.sensopart.biz/solar/index.php
Da die Abfragen manchmal nicht klappen (latenzeiten oder andere laufende Abfragen), überlege ich ob ich nicht besser die CSVs auswerten soll. Aber bisher sieht das alles so aus:
ich habe die Dateien entkoppelt:
scan_data.php
scan_quickdata.php
scan_devices.php
request.php
config.php
mysql.php
head.php
style.php
welche von der index.php aufgerufen werden, bzw. über cron gestartet werden können.
an die request.php werde nur die notwendigen Abfragen geschickt was die laufzeit deutlich verkürzt.
scan_data.php und scan_quickdata.php schreibt (bei mir stündlich über cron) die Daten in die DB
config.php enthält so kram wie ipadresse, Zeitzonenen Angaben, Seiten Titel usw.
Das Script (oder ein Teil davon) prüft stündlich ob die Werte bzw. Fehler Felder einen bestimmten Zustand haben und spuckt je nach Fehler eine StatusMail aus.
ich kann gern den ganzen kram posten wenn du willst.
Gruß
Christian |
|
|
|
 |
czahn
Öfters hier

Angemeldet: 21.01.2008
Beiträge: 15
|
Verfasst am:
28.04.2008, 11:39 |
 |
Zum Fehler, kann gut sein ist mir aber nicht aufgefallen. Hab wie gesagt alles nochmal überarbeitet. Funktioniert hats bei mir damals  |
|
|
|
 |
BadDarkShadow
Stammmitglied

Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg
|
Verfasst am:
28.04.2008, 15:56 |
 |
Hallo Christian,
ja gerne wenn die Scripte nicht zu aufwendig sind(zu Groß).
Ansonsten per Mail.
Bin zur Zeit auch bei der Programierung für den Import der CSV Dateien, mit automatischem anlegen der neuen Tabelle.
Was mir noch fehlt ist der Ftp-Download von der Webbox und die Grafiken mit jpgraph.
Denke das Geschwindigkeitsproblem lässt sich nur lösen wenns auf UDP umgestellt wird.
LG
BDS |
_________________ 08.2006 Inbetriebnahme
12,54 kWp - 74x BP Solar 3165S
1x SMA SB 4200 TL HC MS 2*14 Module
2x SMA SB 3300 3*8 Module
http://www.sonnenertrag.eu/detail.php?pk=536
http://www.kasel.eu/solar |
|
|
 |
|
|
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|