Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <header>
- </header>
- <body>
- <?php
- // Code written in a night by Roeland Kindt for SEMS portal retrieval
- // PVoutput portion copied from older Goodwe2PVoutput script, thanks Antonboonstra!
- // Below portion is for PVOUTput site
- // Retrieve API key from PVOutput, you can create it on http://pvoutput.org/account.jsp under API settings
- $keyPVO = "";
- // Fill in your System ID, you can retrieve it from http://pvoutput.org/account.jsp (at the bottom)
- $sidPVO = "";
- // // SEMS portal portion
- // You can retriev powerstation id from URL if you visit website, or run the script once, it will provide the ID to you.
- $powerstation_id="3eac9f1a-bf1b-45ab-9e07-404c0cf8c083"; // not mandatory first run
- // Login SEMS portal website
- $email="";
- // Password SEMS portal website.
- $password="";
- //enable+/disable debug/test mode
- $test=true; // if true shows pvoutput url but does not submit it, set to false if working.
- $debug=false; // prints var_dump of vars, set to true to var_dump
- // below code does not need modifications.
- $vars = "{\"account\":\"$email\",\"pwd\":\"$password\"}";
- //logic retrieved from original script by antonboostra
- echo "<pre>\n";
- // determine if it is night or day, to prevent retrieval of data (reduce API calls)
- $day = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, 52, 5.5);
- $night = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, 52, 5.5);
- $now = time();
- if($now < ($day-600) || $now > ($night+600)) // 600 seconds (=10 minutes) margin
- {
- echo "It is before dusk (".date("H:i",$day)." hour) or after sunset (".date("H:i",$night)." hour) \n";
- if(!$test) exit(); // exit so we don't run the rest of the code
- }
- //basic setup for logging into SEMS portal
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL,"https://globalapi.sems.com.cn/api/v1/Common/CrossLogin");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); //Post Fields
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- $headers = [
- 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- 'Accept-Encoding: gzip, deflate',
- 'Accept: */*',
- 'Connect: Keep-alive',
- 'Content-Type: application/json',
- 'Host: globalapi.sems.com.cn',
- 'Token: {"version":"v2.1.0","client":"ios","language":"en"}',
- 'User-Agent: PVMaster/2.1.0 (iPhone; iOS 12.0; Scale/2.00)',
- ];
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- $server_output = curl_exec ($ch);
- //retrieved basic login details
- $server_output = json_decode($server_output, true);
- if($debug) echo var_dump($server_output);
- $uid="";
- $timestamp="";
- $token="";
- $retrieval=false;
- if($server_output["msg"]=="success"){
- echo "<br/>retrieval ok <br/>";
- $uid=$server_output["data"]["uid"];
- $timestamp=$server_output["data"]["timestamp"];
- $token=$server_output["data"]["token"];
- $retrieval=true;
- }else{
- echo "<br/>Basic SEMS portal login failed. Enable debug mode <br/>";
- curl_close ($ch);
- exit();
- }
- if($retrieval && trim($powerstation_id)==""){
- $vars="{\"page_size\":\"5\",\"orderby\":\"\",\"powerstation_status\":\"\",\"key\":\"\",\"page_index\":\"1\",\"powerstation_id\":\"\",\"powerstation_type\":\"\"}";
- $headers = [
- 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- 'Accept-Encoding: gzip, deflate',
- 'Accept: */*',
- 'Connect: Keep-alive',
- 'Content-Type: application/json',
- 'Host: globalapi.sems.com.cn',
- 'Token: {"version":"v2.1.0","client":"ios","language":"en","timestamp":'.$timestamp.',"uid":"'.$uid.'","token":"'.$token.'"}',
- 'User-Agent: PVMaster/2.1.0 (iPhone; iOS 12.0; Scale/2.00)',
- ];
- curl_setopt($ch, CURLOPT_URL,"https://euapi.sems.com.cn/api/PowerStationMonitor/QueryPowerStationMonitorForApp");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); //Post Fields
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- $server_output2 = curl_exec ($ch);
- $server_output2 = json_decode($server_output2, true);
- if($server_output2["msg"]=="success"){
- if($debug) var_dump($server_output2);
- echo "<br/>retrieval powerstation ok <br/>";
- $powerstation_id=$server_output2["data"][0]["powerstation_id"];
- echo "retrieved ".$powerstation_id."<br/>";
- }
- }else{
- echo "Powerstation id is provided: ".$powerstation_id."<br/>";
- }
- $retrieval3=false;
- if($retrieval&& !trim($powerstation_id)==""){
- echo "retrieval 3 ok <br/>";
- $vars="{\"powerStationId\":\"$powerstation_id\"}";
- $headers = [
- 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- 'Accept-Encoding: gzip, deflate',
- 'Accept: */*',
- 'Connect: Keep-alive',
- 'Content-Type: application/json',
- 'Host: globalapi.sems.com.cn',
- 'Token: {"version":"v2.1.0","client":"ios","language":"en","timestamp":'.$timestamp.',"uid":"'.$uid.'","token":"'.$token.'"}',
- 'User-Agent: PVMaster/2.1.0 (iPhone; iOS 12.0; Scale/2.00)',
- ];
- curl_setopt($ch, CURLOPT_URL,"https://euapi.sems.com.cn/api/v1/PowerStation/GetMonitorDetailByPowerstationId");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); //Post Fields
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- $server_output3 = curl_exec ($ch);
- $server_output3 = json_decode($server_output3, true);
- if($debug) var_dump($server_output3);
- $retrieval3=true;
- $pac=$server_output3["data"]["kpi"]["pac"];
- $powerpki=$server_output3["data"]["kpi"]["power"];
- $temp=$server_output3["data"]["inverter"][0]["tempperature"];
- $vpv1=$server_output3["data"]["inverter"][0]["d"]["vpv1"];
- $vpv2=$server_output3["data"]["inverter"][0]["d"]["vpv2"];
- $power = intval($pac);
- $energy_cum = round(floatval($powerpki)*1000);
- $vdc = round(floatval($vpv1),1); // v6 = Voltage DC van MPP1
- $temperature = round(floatval($temp),1);
- echo "<h1>Energy = $energy_cum Wh - Power = $power W - DC voltage 1 = $vdc, DC voltage 2 = $vpv2 - Temperature = $temperature degr.C\n </h1>";
- }else{
- echo "<br/>Advanced SEMS portal data retrieval failed. Enable debug mode <br/>";
- curl_close ($ch);
- exit();
- }
- curl_close ($ch);
- if($retrieval && $retrieval3){
- // Combine the RUL to call PVoutpout and submit data Stel
- $url = 'http://pvoutput.org/service/r2/addstatus.jsp?key='.$keyPVO.'&sid='.$sidPVO.'&d='.date("Ymd").'&t='.date("H:i").'&v1='.$energy_cum.'&v2='.$power.'&v5='.$temperature.'&v6='.$vdc.'&c1=0';
- // if $test is true, only show url otherwise submit
- if($test){
- echo "URL = $url \n";
- }else{
- $responds = file_get_contents($url);
- echo "Responds PVOutput was: $responds \n";
- if($responds == "OK 200: Added Status")
- {
- echo "The values were succesfully retrieved and submitted to PVOutput \n";
- }
- else
- {
- echo "Issue submitting to PVOutput, let's try again...<br>\n";
- sleep(4); // wacht 4 seconden
- $responds = file_get_contents($url);
- if($responds == "OK 200: Added Status")
- {
- echo "The values were succesfully retrieved and submitted to PVOutput \n";
- }
- else
- {
- echo "PVOutput submit failed for a second time, please verify if settings are correct.\n";
- echo "Responds PVOutput was: $responds \n";
- }
- }
- }
- }
- echo '</pre>';
- ?>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement