Werbung:
 
  •  Home   •  Forum   •  letzte Themen   •  Modul-Datenbank   •  PV-Wikipedia   •     Downloads   •  PV-Links   •  Impressum   • 
  •  FAQ   •  Suchen  •   Mitgliederliste   •  Benutzergruppen   •  Registrieren  •  Profil  •  Einloggen, um private Nachrichten zu lesen  •  Login   • 
 Sunny Webbox RPC Schnittstelle via PHP & POST Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Neues Thema eröffnenNeue Antwort erstellen
Autor
czahn
Öfters hier
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 22.01.2008, 09:40 Nach oben

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

BeitragVerfasst am: 22.01.2008, 11:03 Nach oben

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
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 22.01.2008, 14:10 Nach oben

ich war sooo knapp davor Wink

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
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 22.01.2008, 16:25 Nach oben

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 Wink

C. Zahn
czahn
Öfters hier
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 22.01.2008, 18:45 Nach oben

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 Confused .

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 Wink )

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 Exclamation

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
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 07.02.2008, 11:58 Nach oben

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 Wink

SoweitSoGut

Christian
BadDarkShadow
Stammmitglied
Stammmitglied



Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg

BeitragVerfasst am: 26.04.2008, 15:32 Nach oben

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
Stammmitglied



Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg

BeitragVerfasst am: 26.04.2008, 15:38 Nach oben

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
Stammmitglied



Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg

BeitragVerfasst am: 26.04.2008, 15:41 Nach oben

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
Stammmitglied



Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg

BeitragVerfasst am: 26.04.2008, 15:44 Nach oben

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
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 28.04.2008, 11:28 Nach oben

Hi,

ich habe seit Februar meine Webbox am laufen. An dem Script habe ich noch einiges (wegen der laufzeit) verändert, eigentlich fast alles Wink .

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
Öfters hier



Angemeldet: 21.01.2008
Beiträge: 15

BeitragVerfasst am: 28.04.2008, 11:39 Nach oben

Zum Fehler, kann gut sein ist mir aber nicht aufgefallen. Hab wie gesagt alles nochmal überarbeitet. Funktioniert hats bei mir damals Wink
BadDarkShadow
Stammmitglied
Stammmitglied



Angemeldet: 17.09.2006
Beiträge: 124
Wohnort: RLP, Eifel, nähe Bitburg

BeitragVerfasst am: 28.04.2008, 15:56 Nach oben

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
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen


 Gehe zu:   



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.


Werbung:


Forensicherheit

>>Werben Sie auf dieser Seite<<

Powered by Elektron © 2006, phpBB Group Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de
RSS