MINI Sh3ll
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Solar\Repositories\Treepye\TreepyeInterface;
use App\Solar\Repositories\User\UserInterface;
use DB;
use App\User;
use Excel;
use Illuminate\Support\Facades\Log;
class ChartController extends Controller
{
/**
* @var TreePye Interface
*/
private $api;
private $user;
public function __construct(TreepyeInterface $api,UserInterface $user) {
$this->api = $api;
$this->user = $user;
ini_set('memory_limit', '1024M');
}
/*
* Get panel charts Type
*/
public function getCharts(Request $req) {
$charts = config('charts_constant.'.$req->key);
unset($charts['default_key']);
return $charts;
}
/*
* Get daily energy for last date on treepye.
*/
public function getdata(Request $request)
{
$graph_duration = $request->graph_duration;
$plot_type = $request->plot_type;
$qid = $request->qid;
$x_value = $request->x_value;
$y_value = $request->y_value;
$z_value = $request->z_value;
$unit_value = $request->unit_value;
$service_id = $request->service_id;
$min_date_key = $request->min_date;
$max_date_key = $request->max_date;
$apiresponse = $this->getApiData($graph_duration,$plot_type,$qid,$x_value,$y_value,$request,$service_id,$min_date_key,$max_date_key);
//echo json_encode($apiresponse);exit;
// $apiresponse = json_decode('{"status":true,"details":{"records":[{"created":"2020-04-16 01:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"0.000000"},{"created":"2020-04-16 01:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"0.000000"},{"created":"2020-04-16 01:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"0.000000"},{"created":"2020-04-16 01:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"0.000000"},{"created":"2020-04-16 01:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"0.000000"},{"created":"2020-04-16 01:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"0.000000"},{"created":"2020-04-16 02:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"100.039063"},{"created":"2020-04-16 02:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"100.039063"},{"created":"2020-04-16 02:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"700.312500"},{"created":"2020-04-16 02:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"700.312500"},{"created":"2020-04-16 02:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"1296.656250"},{"created":"2020-04-16 02:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"1296.656250"},{"created":"2020-04-16 03:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"2000.656250"},{"created":"2020-04-16 03:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"2000.656250"},{"created":"2020-04-16 03:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"2993.375000"},{"created":"2020-04-16 03:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"2993.375000"},{"created":"2020-04-16 03:30:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"4195.000000"},{"created":"2020-04-16 03:30:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"4195.000000"},{"created":"2020-04-16 03:45:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"5475.125000"},{"created":"2020-04-16 03:45:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"5475.125000"},{"created":"2020-04-16 04:00:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"6979.250000"},{"created":"2020-04-16 04:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"8647.000000"},{"created":"2020-04-16 04:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"8647.000000"},{"created":"2020-04-16 04:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"10695.500000"},{"created":"2020-04-16 04:45:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"12808.000000"},{"created":"2020-04-16 04:45:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"12808.000000"},{"created":"2020-04-16 05:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 05:17:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 05:17:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 05:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 05:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 05:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 05:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:17:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:17:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 06:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 07:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 07:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 07:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 07:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 07:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 07:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 08:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"15304.750000"},{"created":"2020-04-16 08:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"15304.750000"},{"created":"2020-04-16 08:16:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"16402.000000"},{"created":"2020-04-16 08:16:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"16402.000000"},{"created":"2020-04-16 08:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"19091.500000"},{"created":"2020-04-16 08:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"19091.500000"},{"created":"2020-04-16 08:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"21396.500000"},{"created":"2020-04-16 08:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"21396.500000"},{"created":"2020-04-16 09:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"24214.000000"},{"created":"2020-04-16 09:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"24214.000000"},{"created":"2020-04-16 09:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"26519.000000"},{"created":"2020-04-16 09:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"26519.000000"},{"created":"2020-04-16 09:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"28824.000000"},{"created":"2020-04-16 09:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"28824.000000"},{"created":"2020-04-16 09:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"30873.000000"},{"created":"2020-04-16 09:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"30873.000000"},{"created":"2020-04-16 10:00:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"32666.000000"},{"created":"2020-04-16 10:00:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"32666.000000"},{"created":"2020-04-16 10:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"34102.000000"},{"created":"2020-04-16 10:30:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"35639.000000"},{"created":"2020-04-16 10:30:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"35639.000000"},{"created":"2020-04-16 10:45:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"36921.000000"},{"created":"2020-04-16 10:45:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"36921.000000"},{"created":"2020-04-16 11:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"38714.000000"},{"created":"2020-04-16 11:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"38714.000000"},{"created":"2020-04-16 11:30:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39227.000000"},{"created":"2020-04-16 11:30:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"39227.000000"},{"created":"2020-04-16 11:45:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"39739.000000"},{"created":"2020-04-16 11:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39739.000000"},{"created":"2020-04-16 12:00:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"39995.000000"},{"created":"2020-04-16 12:00:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39995.000000"},{"created":"2020-04-16 12:16:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39996.000000"},{"created":"2020-04-16 12:16:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"39996.000000"},{"created":"2020-04-16 12:30:01","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39996.000000"},{"created":"2020-04-16 12:30:01","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"39996.000000"},{"created":"2020-04-16 12:45:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39996.000000"},{"created":"2020-04-16 13:00:00","service_id":"jqqpsG4BOkKlyces8NZP","Daily Energy":"39996.000000"},{"created":"2020-04-16 13:00:00","service_id":"jaqpsG4BOkKlycesndZ4","Daily Energy":"39996.000000"}]},"service_id":"jaqpsG4BOkKlycesndZ4,jqqpsG4BOkKlyces8NZP","plants":["Solar Company plant - 1","Solar Company plant - 3"]}',2);
$mappedData = $this->transformAPIResponse($apiresponse,$graph_duration,$request,$x_value,$y_value,$service_id,$z_value);
$mappedData['url'] = $apiresponse;
//return \Response::json($mappedData);
return $mappedData;
}
public function validateDate($date, $format = 'Y-m-d H:i:s')
{
if(strlen($date)==10){
$format = 'Y-m-d';
}
$d = \DateTime::createFromFormat($format, $date);
// The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue.
return $d && $d->format($format) === $date;
}
public function transformAPIResponse($apiresponse,$graph_duration,$request,$x_value,$y_value,$service_id,$z_value) {
try {
$IS_X_DATE = false;
$IS_Y_DATE = false;
//CONFIG OPTIONS
$OP_X_KEYS = 'x';
$OP_Y_KEYS = 'y';
$OP_Z_KEYS = 'r';
$response = array("status"=>$apiresponse['status'],"records"=>[]);
if(config('treepye_constants.status')) {
if($apiresponse['status']==true) {
$data = $apiresponse['details']['records'];
$serviceCollections = collect($data)->groupBy($service_id);
$firstService = $serviceCollections->first();
$IS_X_DATE = $this->validateDate($firstService->first()[$x_value]);
$IS_Y_DATE = $this->validateDate($firstService->first()[$y_value]);
// dd($firstService->first()[$x_value],$this->validateDate($firstService->first()[$x_value]));
$response['x_date'] = $IS_X_DATE;
$response['y_date'] = $IS_Y_DATE;
foreach ($serviceCollections as $serviceId => $serviceCollection) {
$plantData = $this->api->getPlantName($serviceId);
$plantName = $plantData->plant_name;
$chart_color = $plantData->chart_color;
//First Case
if($IS_X_DATE && $IS_Y_DATE){
throw new \Exception("Invalid API Response to generate graph.", 1);
}else if(!$IS_X_DATE && !$IS_Y_DATE){
$RESPONSE_ARRAY = [];
$serviceCollection->each(function($item) use ($RESPONSE_ARRAY,$x_value,$y_value,$z_value){
$arr = array(
'x'=>$item[$x_value],
'y'=>$item[$y_value],
);
if(!empty($z_value)){
$arr['r'] = $item[$z_value];
}
$RESPONSE_ARRAY[] = $arr;
});
$record = array("label"=>$plantName,"chart_color"=>$chart_color,"records"=>$RESPONSE_ARRAY);
$record['x_label'] = NULL;
$record['y_label'] = NULL;
$response['records'][] = $record;
}else{
$COORDINATES = [];
$DATE_KEY = $IS_X_DATE?$x_value:$y_value;
$OTHER_KEY = $DATE_KEY==$x_value?$y_value:$x_value;
$RESPONSE_ARRAY = [];
if($graph_duration==1) {
//For Hours
$COORDINATES = array_fill(1,24,0);
$CURRENT_DATE = date('Y-m-d',strtotime($serviceCollection->first()[$DATE_KEY]));
foreach ($COORDINATES as $key => $value) {
$minTime = strtotime($CURRENT_DATE . ' '.($key-1).':00:00');
$maxTime = strtotime($CURRENT_DATE . ' '.($key).':59:59');
$timeCollection = $serviceCollection->filter(function($item) use ($DATE_KEY,$minTime,$maxTime){
$cTime = strtotime($item[$DATE_KEY]);
// dd($cTime,$minTime,$maxTime);
return $cTime>=$minTime && $cTime<=$maxTime;
});
$key_val = $timeCollection->count()>0?$timeCollection->max($OTHER_KEY):0;
$arr = array(
$DATE_KEY==$x_value?$OP_X_KEYS:$OP_Y_KEYS=>$key,
$OTHER_KEY==$x_value?$OP_X_KEYS:$OP_Y_KEYS=>$key_val,
);
if(!empty($z_value)){
$z_val = $timeCollection->count()>0?$timeCollection->max($z_value):1;
if(!is_numeric($z_val)){
$z_val=1;
}
$arr[$OP_Z_KEYS] = $z_val;
}
$RESPONSE_ARRAY[] = $arr;
}
$record = array("label"=>$plantName,"chart_color"=>$chart_color,"records"=>$RESPONSE_ARRAY);
$record['x_label'] = $DATE_KEY==$x_value?'Hours':null;
$record['y_label'] = $DATE_KEY==$y_value?'Hours':null;
$response['records'][] = $record;
}else if($graph_duration==2){
//For Daily(1-30)
$MONTH_DAYS =(int) date('t',strtotime($serviceCollection->first()[$DATE_KEY]));
$MONTH =date('m',strtotime($serviceCollection->first()[$DATE_KEY]));
if($MONTH){
$MONTH=30;
}
$MONTH_STR = date('Y-m',strtotime($serviceCollection->first()[$DATE_KEY]));
$COORDINATES = array_fill(1,$MONTH_DAYS,0);
foreach ($COORDINATES as $key => $value) {
$minTime = strtotime($MONTH_STR . '-'.($key).' 00:00:00');
$maxTime = strtotime($MONTH_STR . '-'.($key).' 23:59:59');
$timeCollection = $serviceCollection->filter(function($item) use ($DATE_KEY,$minTime,$maxTime){
$cTime = strtotime($item[$DATE_KEY]);
return $cTime>=$minTime && $cTime<=$maxTime;
});
$key_val = $timeCollection->count()>0?$timeCollection->max($OTHER_KEY):0;
$arr = array(
$DATE_KEY==$x_value?$OP_X_KEYS:$OP_Y_KEYS=>$key,
$OTHER_KEY==$x_value?$OP_X_KEYS:$OP_Y_KEYS=>$key_val,
);
if(!empty($z_value)){
$z_val = $timeCollection->count()>0?$timeCollection->max($z_value):1;
if(!is_numeric($z_val)){
$z_val=1;
}
$arr[$OP_Z_KEYS] = $z_val;
}
$RESPONSE_ARRAY[] = $arr;
}
$record = array("label"=>$plantName,"chart_color"=>$chart_color,"records"=>$RESPONSE_ARRAY);
$record['x_label'] = $DATE_KEY==$x_value?'Days':null;
$record['y_label'] = $DATE_KEY==$y_value?'Days':null;
$response['records'][] = $record;
}else if($graph_duration==3){
//For Monthly(1-12)
$YEAR = date('Y',strtotime($serviceCollection->first()[$DATE_KEY]));
$COORDINATES = array_fill(1,12,0);
$RESPONSE_ARRAY = [];
foreach ($COORDINATES as $key => $value) {
$maxDay = date('t',strtotime($YEAR.'-'.$key));
$minTime = strtotime($YEAR . '-'.($key).'-'.'01'.' 00:00:00');
$maxTime = strtotime($YEAR . '-'.($key).'-'.$maxDay.' 23:59:59');
$timeCollection = $serviceCollection->filter(function($item) use ($DATE_KEY,$minTime,$maxTime){
$cTime = strtotime($item[$DATE_KEY]);
return $cTime>=$minTime && $cTime<=$maxTime;
});
$key_val = $timeCollection->count()>0?$timeCollection->max($OTHER_KEY):0;
//TODO: Decide what to do with scatter plot
$arr = array(
$DATE_KEY==$x_value?$OP_X_KEYS:$OP_Y_KEYS=>date('m',$minTime),
$OTHER_KEY==$x_value?$OP_X_KEYS:$OP_Y_KEYS=>$key_val,
);
if(!empty($z_value)){
$z_val = $timeCollection->count()>0?$timeCollection->max($z_value):1;
if(!is_numeric($z_val)){
$z_val=1;
}
$arr[$OP_Z_KEYS] = $z_val;
}
$RESPONSE_ARRAY[] = $arr;
}
$record = array("label"=>$plantName,"chart_color"=>$chart_color,"records"=>$RESPONSE_ARRAY);
$record['x_label'] = $DATE_KEY==$x_value?'Months':null;
$record['y_label'] = $DATE_KEY==$y_value?'Months':null;
$response['records'][] = $record;
}
}
}
}
}
return $response;
} catch(Exception $ex) {
}
//return $graphData;
return json_encode(['status' => $status , 'records' => $graphData]);
}
public function getApiData($graph_duration,$plot_type,$qid,$x_value,$y_value,$request,$service_id,$min_date_key,$max_date_key)
{
$startDate = '';
$endDate = '';
if($graph_duration == 1)
{ // TODAY
$startDate = $request->day ? $request->day:date('Y-m-d');
$endDate = $request->day ? $request->day:date('Y-m-d');
/*For testing dates plotting*/
// $startDate = '2020-04-16';
// $endDate = '2020-04-16';
}elseif($graph_duration == 2)
{ // Daily
/*For dynamic dates plotting*/
$date = $request->date ? $request->date : date('Y-m');
$lastday = $request->date ? date('Y-m',strtotime($request->date)) : date('y-m-d');
$end = $request->date ? date('t',strtotime($lastday)) : date('d');
$startDate = $date.'-01';
$endDate = $date.'-'.$end;
/*For testing dates plotting*/
// $startDate = '2020-02-01';
// $endDate = '2020-02-28';
}elseif($graph_duration == 3)
{ //MONTH
/*For dynamic dates plotting*/
$year = $request->year ? $request->year : date('Y');
$startDate = $year.'-01-01';
$endDate = $year.'-12-31';
// $startDate = $year.'-01-01';
// $endDate = $year.'-12-31';
}elseif ($graph_duration == 4) {
// total energy/power till date //
// $startDate = '2019-06-02';
$startDate = date('Y-01-01');
$endDate = date('Y-m-d',strtotime("-1 days"));
} elseif ($graph_duration == 5) {
// total energy/power till date //
// $startDate = '2019-06-02';
$startDate = config('treepye_constants.tillDate_startDate');
$endDate = date('Y-m-d');
}
$apiResponseData = $this->api->getApiResponseData($startDate,$endDate,$graph_duration,$plot_type,$qid,$x_value,$y_value,$request,$service_id,$min_date_key,$max_date_key);
return $apiResponseData;
}
/*
* Get daily energy for last date on treepye.
*/
public function getTotalEnergyTillDate( Request $request){
try {
$startDate = '2019-06-02';
$endDate = date('Y-m-d');
$response = array();
if(config('treepye_constants.status')) {
$result = $this->api->getTotalEnergy($startDate,$endDate,$request);
if($result['status']!=false) {
$result = $result['details']['records'][0]['sum_of_Total Energy'];
$result = $result/1000;
$result = round($result, 2);
if($result['details']['records'][0]['Total Energy-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '.$unit;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get daily energy for this month on treepye.
*/
public function getTotalEnergyThisMonth(Request $request){
try {
$startDate = date('Y-m-01');
$endDate = date('Y-m-d');
$response = array();
if(config('treepye_constants.status')) {
$result = $this->api->getTotalEnergy($startDate,$endDate,$request);
if($result['status']!=false){
$result = $result['details']['records'][0]['sum_of_Total Energy'];
$result = $result/1000;
$result = round($result, 2);
if($result['details']['records'][0]['Total Energy-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '.$unit;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get daily energy for today on treepye.
*/
public function getTotalEnergyToday(Request $request){
try {
$startDate = date('Y-m-d');
$endDate = date('Y-m-d');
$response = array();
if(config('treepye_constants.status')) {
if($result['status']!=false) {
$result = $this->api->getTotalEnergy($startDate,$endDate ,$request);
if($result['status']!=false){
$result = $result['details']['records'][0]['sum_of_Total Energy'];
$result = $result/1000;
$result = round($result, 2);
if($result['details']['records'][0]['Total Energy-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '.$unit;
}}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get daily energy for last date on treepye.
*/
public function getDailyEnergyLastDate(Request $request){
try {
$startDate = date('Y-m-d',strtotime("-1 days"));
$endDate = date('Y-m-d',strtotime("-1 days"));
$response = array();
if(config('treepye_constants.status')) {
$result = $this->api->getDailyEnergy($startDate,$endDate,$request);
if($result['status']!=false) {
$result = $result['details']['records'][0]['sum_of_Daily Energy'];
$result = $result/1000;
$result = round($result, 2);
if($result['details']['records'][0]['Daily Energy-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '.$unit;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Group array by dates
*/
public function group_by($key, $data) {
$result = array();
foreach($data as $val) {
if(array_key_exists($key, $val)){
$result[$val[$key]][] = $val;
}else{
$result[""][] = $val;
}
}
return $result;
}
/*
* Preview charts according to selected data
*/
public function previewCharts(Request $request) {
try {
$res = array();
$records =array();
$response=array();
if(config('treepye_constants.status')) {
if($request->panel == config('panel_constant.panel.hourlyEnergy.key')) {
$records = $this->getTodayEnergyChart($request);
} elseif($request->panel == config('panel_constant.panel.dayWiseEnergy.key')) {
$records = $this->getDayWiseEnergyChart($request);
} elseif($request->panel == config('panel_constant.panel.monthlyEnergy.key')) {
$records = 'test 2';
} elseif($request->panel == config('panel_constant.panel.InvertersTemperature.key')) {
$records = $this->getInvertersTemperatureToday($request);
}
elseif($request->panel == config('panel_constant.panel.dailyPowerGrid.key')) {
$records = $this->getDailyPowerGeneratedByGrid($request);
}
elseif($request->panel == config('panel_constant.panel.todaysPowerGenrationTrend.key')) {
$records = $this->getInvertersTemperatureToday($request);
}
elseif($request->panel == config('panel_constant.panel.todayseEnergyGenrationTrend.key')) {
$records = $this->getTodayEnergyTrendChart($request);
}
elseif($request->panel == config('panel_constant.panel.DailyPowerGenerated.key')) {
$records = $this->getDailyPowerChart($request);
}
elseif($request->panel == config('panel_constant.panel.dailyEnergyGeneratedGrid.key')) {
$records = $this->getDailyEnergyGridChart($request);
}
}
return $records;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for daily energy generated by plants.
*/
public function getDayWiseEnergyChart(Request $request) {
try {
$multiline = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.dayWiseEnergy.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getDayWiseEnergyChartData($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$dates = array();
$lastday = $request->date ? date('Y-m',strtotime($request->date)) : date('y-m');
$end = $request->date ? date('t',strtotime($lastday)) : date('t');
for ($i = 1; $i <= $end; $i++) {
$dates[str_pad($i, 2, '0', STR_PAD_LEFT)] = 0;
}
$i = 0;
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $dates;
foreach ($values as $value) {
$records['records'][date("d", strtotime($value['created_as_string']))] = $value['sum_of_Daily Energy'];
}
$multilineData[] = $records;
$i++;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$multiline = array('chart_type' => $type ,'multilineData' => $multilineData);
}
}
return \Response::json($multiline);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get total power generated for this month on treepye.
*/
public function getTotalPowerThisMonth(Request $request) {
try {
$startDate = date('Y-m-01');
$endDate = date('Y-m-d');
$response = array();
if(config('treepye_constants.status')) {
$input1 = $this->api->getTotalPowerInput1($startDate,$endDate,$request);
$input2 = $this->api->getTotalPowerInput2($startDate,$endDate,$request);
if($input1['status']!=false && $input2['status']!=false) {
$result = $input1['details']['records'][0]['sum_of_Input-1 Power']+$input2['details']['records'][0]['sum_of_Input-2 Power'];
$result = $result/1000;
$result = round($result, 2);
if($input2['details']['records'][0]['Input-2 Power-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '.$unit;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get total power generated for till date on treepye.
*/
public function getTotalPowerTillDate( Request $request) {
try {
$startDate = '2019-10-01';
$endDate = date('Y-m-d');
$response = array();
if(config('treepye_constants.status')) {
$input1 = $this->api->getTotalPowerInput1($startDate,$endDate,$request);
$input2 = $this->api->getTotalPowerInput2($startDate,$endDate,$request);
if($input1['status']!=false && $input2['status']!=false) {
$result = $input1['details']['records'][0]['sum_of_Input-1 Power']+$input2['details']['records'][0]['sum_of_Input-2 Power'];
$result = $result/1000;
$result = round($result, 2);
if($input2['details']['records'][0]['Input-2 Power-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '. $unit ;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get total power generated for last date on treepye.
*/
public function getTotalPowerLastDate() {
try {
$startDate = date('Y-m-d',strtotime("-1 days"));
$endDate = date('Y-m-d',strtotime("-1 days"));
$response = array();
if(config('treepye_constants.status')) {
$input1 = $this->api->getTotalPowerInput1($startDate,$endDate ,$request);
$input2 = $this->api->getTotalPowerInput2($startDate,$endDate,$request);
if($input1['status']!=false && $input2['status']!=false) {
$result = $input1['details']['records'][0]['sum_of_Input-1 Power']+$input2['details']['records'][0]['sum_of_Input-2 Power'];
$result = $result/1000;
$result = round($result, 2);
if($input2['details']['records'][0]['Input-2 Power-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '. $unit ;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get total power generated for today on treepye.
*/
public function getTotalPowerToday() {
try {
$startDate = date('Y-m-d');
$endDate = date('Y-m-d');
$response = array();
if(config('treepye_constants.status')) {
$input1 = $this->api->getTotalPowerInput1($startDate,$endDate ,$request);
$input2 = $this->api->getTotalPowerInput2($startDate,$endDate,$request);
if($input1['status']!=false && $input2['status']!=false) {
$result = $input1['details']['records'][0]['sum_of_Input-1 Power']+$input2['details']['records'][0]['sum_of_Input-2 Power'];
$result = $result/1000;
$result = round($result, 2);
if($input2['details']['records'][0]['Input-2 Power-UNIT'] == 'W') {
$unit = 'kWh';
} else {
$unit = 'MWh';
}
$response = $result.' '. $unit ;
}
}
return $response;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get Inverters Temperature trend for today on treepye.
*/
public function getInvertersTemperatureToday(Request $request) {
try {
$date = date('Y-m-d');
$day_before = date( 'Y-m-d', strtotime( $date . ' -1 day' ) );
$startDate =$day_before;
$endDate = $day_before;
$sortedData = array();
$data = array();
if(config('treepye_constants.status')) {
$result = $this->api->getInvertersTemperatureToday($startDate,$endDate,$request);
if($result['status'] != false) {
$groupByPalnts = $this->group_by("service_id", $result['details']['records']);
$plants = explode(',',$result['service_id']);
$i = 0;
foreach ($groupByPalnts as $key => $res) {
$sortedArray = collect($res)->sortBy('created')->all();
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
foreach ($sortedArray as $value) {
$created = explode(' ', $value['created']);
$response['inverter_temperature'] = $value['Inverter Temperature'];
$response['inverter_temperature_unit'] = $value['Inverter Temperature-UNIT'];
$response['time'] = $created[1];
$records['data'][] = $response;
}
$sortedData[] = $records;
$i++;
}
$data = array('chartData'=>$sortedData);
}
}
return $data;
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Get Hourly Energy for Today on treepye.
*/
public function getTodayEnergyChart(Request $request) {
try {
$daysData = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.hourlyEnergy.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getTodayEnergyChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$i = 0;
foreach ($results as $key => $values) {
$sortedArray = collect($values)->sortBy('created')->all();
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
foreach ($sortedArray as $value) {
$date = explode(' ', $value['created']);
$response['created'] =$value['created'];
$response['date']= $date[0];
$response['time']= $date[1];
$response['daily_energy'] = $value['Daily Energy'];
$response['unit'] = $value['Daily Energy-UNIT'];
$records['records'][] = $response;
}
$dayData[] = $records;
$i++;
}
$daysData = array('chart_type' => $panels->chart_type,'daysData' => $dayData);
}
}
return \Response::json($daysData);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for Todays power genration trend
*/
public function getTodayPowerChart(Request $request) {
try {
$powerData=array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.todaysPowerGenrationTrend.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getTodayPowerChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$i = 0;
foreach ($results as $key => $values) {
$sortedArray = collect($values)->sortBy('created')->all();
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
foreach ($sortedArray as $value) {
$date = explode(' ', $value['created']);
$response['created'] =$value['created'];
$response['date']= $date[0];
$response['time']= $date[1];
$response['grid_power'] = $value['Input-1 Power'];
$response['unit'] = $value['Input-1 Power-UNIT'];
$records['records'][] = $response;
}
$powerData[] = $records;
$i++;
}
$powerData = array('chart_type' => $panels->chart_type,'powerData' => $powerData);
}
}
return \Response::json($powerData);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for Todays energy genration trend
*/
public function getTodayEnergyTrendChart(Request $request) {
try {
$energyData =array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.hourlyEnergy.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getTodayEnergyTrendChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$i = 0;
foreach ($results as $key => $values) {
$sortedArray = collect($values)->sortBy('created')->all();
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
foreach ($sortedArray as $value) {
$date = explode(' ', $value['created']);
$response['created'] =$value['created'];
$response['date']= $date[0];
$response['time']= $date[1];
$response['energy_trend'] = $value['Daily Energy'];
$response['unit'] = $value['Daily Energy-UNIT'];
$records['records'][] = $response;
}
$energyData[] = $records;
$i++;
}
$energyData = array('chart_type' => $panels->chart_type,'energyData' => $energyData);
}
}
return \Response::json($energyData);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Daily power generated by grid on treepye
*/
public function getDailyPowerGeneratedByGrid(Request $request) {
try {
$multiline = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.dailyPowerGrid.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getDailyPowerGeneratedByGrid($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$dates = array();
$lastday = $request->date ? date('Y-m',strtotime($request->date)) : date('y-m-d');
$end = $request->date ? date('t',strtotime($lastday)) : date('t');
for ($i = 1; $i <= $end; $i++) {
$dates[str_pad($i, 2, '0', STR_PAD_LEFT)] = 0;
}
$i = 0;
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $dates;
foreach ($values as $value) {
$records['records'][date("d", strtotime($value['created_as_string']))] = $value['sum_of_Grid Power'];
}
$multilineData[] = $records;
$i++;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$multiline = array('chart_type' => $type ,'multilineData' => $multilineData);
}
}
return \Response::json($multiline);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for daily power generated by plants
*/
public function getDailyPowerChart(Request $request) {
try {
$multiline = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.dailyPowerGenerated.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getDailyPowerChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$dates = array();
$lastday = $request->date ? date('Y-m',strtotime($request->date)) : date('y-m-d');
$end = $request->date ? date('t',strtotime($lastday)) : date('t');
for ($i = 1; $i <= $end; $i++) {
$dates[str_pad($i, 2, '0', STR_PAD_LEFT)] = 0;
}
$i = 0;
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $dates;
foreach ($values as $value) {
$records['records'][date("d", strtotime($value['date']))] = $value['value'];
}
$multilineData[] = $records;
$i++;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$multiline = array('chart_type' => $type ,'multilineData' => $multilineData);
}
}
return \Response::json($multiline);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Daily Energy generated by Grid
*/
public function getDailyEnergyGridChart(Request $request) {
try {
$startDate = date('Y-m-01');;
$endDate = date('Y-m-d');
$multiline = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.dailyEnergyGeneratedGrid.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getDailyEnergyGridChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$dates = array();
$lastday = $request->date ? date('Y-m',strtotime($request->date)) : date('y-m-d');
$end = $request->date ? date('t',strtotime($lastday)) : date('t');
for ($i = 1; $i <= $end; $i++) {
$dates[str_pad($i, 2, '0', STR_PAD_LEFT)] = 0;
}
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $dates;
foreach ($values as $value) {
$records['records'][date("d", strtotime($value['created_as_string']))] = $value['sum_of_Grid Power'];
}
$multilineData[] = $records;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$multiline = array('chart_type' => $type ,'multilineData' => $multilineData);
}
}
return \Response::json($multiline);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for monthly power generated by grid
*/
public function getMonthlyPowerGridChart(Request $request) {
try {
$monthlyPowerGrid = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.monthlyPowerGeneratedGrid.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getMonthlyPowerGridChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$month = array();
$year = $request->year ? $request->year : date('Y');
for ($i = 1; $i <= 12; $i++) {
if($i<=9){
$m = '-0'.$i;
}
else{
$m = '-'.$i;
}
$firstDate = $year.$m.'-01';
$month[$firstDate] = 0;
}
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $month;
foreach ($values as $value) {
$key = explode(' ', $value['date']);
$records['records'][$key[0]] = $value['value'];
$records['unit'] = $value['Monthly Power-UNIT'];
}
$powerGrid[] = $records;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$monthlyPowerGrid = array('chart_type' => $type ,'monthlyPower' => $powerGrid);
}
}
return \Response::json($monthlyPowerGrid);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for monthly power generated by plant
*/
public function getMonthlyPowerPlantChart(Request $request) {
try {
$monthlyPowerPlant = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.monthlyPowerGeneratedPlant.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getMonthlyPowerPlantChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$month = array();
$year = $request->year ? $request->year : date('Y');
for ($i = 1; $i <= 12; $i++) {
if($i<=9){
$m = '-0'.$i;
}
else{
$m = '-'.$i;
}
$firstDate = $year.$m.'-01';
$month[$firstDate] = 0;
}
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $month;
foreach ($values as $value) {
$key = explode(' ', $value['date']);
$records['records'][$key[0]] = $value['value'];
$records['unit'] = $value['Monthly Power-UNIT'];
}
$powerPlant[] = $records;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$monthlyPowerByPlant = array('chart_type' => $type ,'monthlyPowerPlant' => $powerPlant);
}
}
return \Response::json($monthlyPowerByPlant);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
/*
* Multiline/stacked chart data for monthly energy generated by plants
*/
public function getMonthlyEnergyChart(Request $request){
try {
$monthlyEnergy = array();
if(config('treepye_constants.status')) {
$api_type = config('panel_constant.panel.monthlyEnergy.key');
$panels = $this->api->getPanelDetails($request,$api_type);
$byGroup = $this->api->getMonthlyEnergyPlantChart($request);
if($byGroup['status']!=false) {
$plants = explode(',',$byGroup['service_id']);
$data = $byGroup['details']['records'];
$results = $this->group_by('service_id', $data);
$month = array();
$year = $request->year ? $request->year : date('Y');
for ($i = 1; $i <= 12; $i++) {
if($i<=9){
$m = '-0'.$i;
}
else{
$m = '-'.$i;
}
$firstDate = $year.$m.'-01';
$month[$firstDate] = 0;
}
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $month;
foreach ($values as $value) {
$key = explode(' ', $value['date']);
$records['records'][$key[0]] = $value['value'];
$records['unit'] = $value['Monthly Energy-UNIT'];
}
$powerPlant[] = $records;
}
if($request->has('chart_type')) {
$type = $request->chart_type;
} else {
$type = $panels->chart_type;
}
$monthlyEnergy = array('chart_type' => $type ,'monthlyEnergyPlant' => $powerPlant);
}
}
return \Response::json($monthlyEnergy);
} catch (\Exception $exc) {
logger($exc->getMessage());
}
}
public function reportLog() {
$breadcrumb = breadCrumb('Report And Log', 'reportLog', '');
$companies_name = $this->user->getCompany();
return view('report_and_log.report',compact('companies_name','breadcrumb'));
}
/*
* Get Report and logs From treepye
*/
public function reportLogRecords(Request $request){
try {
$records = array();
$returnArray = array();
if(config('treepye_constants.status')) {
$reports = $this->api->getReportLog($request);
if($reports['status']!=false) {
$results = $reports['details']['records'];
$sortedArray = collect($results)->sortBy('created')->all();
$index =1;
foreach ($sortedArray as $result) {
// $date = explode(' ',$result['created'])[0];
// $records['date'] = $date;
$sr_num = $index++;
$created = $result['created'];
$grid_power = $result['Grid Power'];
$grid_power_unit = $result['Grid Power-UNIT'];
$partial_energy = $result['Partial Energy'];
$partial_energy_unit = $result['Partial Energy-UNIT'];
$weekly_energy= $result['Weekly Energy'];
$weekly_energy_unit = $result['Weekly Energy-UNIT'];
$input_1_power = $result['Input-1 Power'];
$input_1_power_unit = $result['Input-1 Power-UNIT'];
$frequency = $result['Frequency'];
$frequency_unit = $result['Frequency-UNIT'];
$daily_energy = $result['Daily Energy'];
$daily_energy_unit = $result['Daily Energy-UNIT'];
$total_energy = $result['Total Energy'];
$total_energy_unit = $result['Total Energy-UNIT'];
$inverter_temperature = $result['Inverter Temperature'];
$inverter_temperature_unit = $result['Inverter Temperature-UNIT'];
$grid_voltage = $result['Grid Voltage'];
$grid_voltage_unit = $result['Grid Voltage-UNIT'];
$input_2_power = $result['Input-2 Power'];
$input_2_power_unit = $result['Input-2 Power-UNIT'];
$input_2_currnet = $result['Input-2 Currnet'];
$input_2_currnet_unit = $result['Input-2 Currnet-UNIT'];
$wind_generator_frequency = $result['Wind Generator Frequency'];
$wind_generator_frequency_unit = $result['Wind Generator Frequency-UNIT'];
$grid_current = $result['Grid Current'];
$grid_current_unit = $result['Grid Current-UNIT'];
$monthly_energy = $result['Monthly Energy'];
$monthly_energy_unit = $result['Monthly Energy-UNIT'];
$yearly_energy = $result['Yearly Energy'];
$yearly_energy_unit = $result['Yearly Energy-UNIT'];
$input_2_voltage = $result['Input-2 Voltage'];
$input_2_voltage_unit = $result['Input-2 Voltage-UNIT'];
$input_1_currnet = $result['Input-1 Currnet'];
$input_1_currnet_unit = $result['Input-1 Currnet-UNIT'];
$input_1_voltage = $result['Input-1 Voltage'];
$input_1_voltage_unit = $result['Input-1 Voltage-UNIT'];
$booster_temperature = $result['Booster Temperature'];
$booster_temperature_unit = $result['Booster Temperature-UNIT'];
$isolation_temperature = $result['Isolation Temperature'];
$isolation_temperature_unit = $result['Isolation Temperature-UNIT'];
$inverter_state_byte_3_DC_DC_channel_2_state = $result['Inverter_States_(Byte 3)_DC/DC Channel 2 state'];
$inverter_state_byte_3_DC_DC_channel_2_state_unit = $result['Inverter_States_(Byte 3)_DC/DC Channel 2 state-UNIT'];
$inverter_states_byte_4_alarm_state = $result['Inverter_States_(Byte 4)_Alarm state'];
$inverter_states_byte_4_alarm_state_unit = $result['Inverter_States_(Byte 4)_Alarm state-UNIT'];
$inverter_states_byte_2_DC_DC_channel_1_state = $result['Inverter_States_(Byte 2)_DC/DC Channel 1 state'];
$inverter_states_byte_2_DC_DC_channel_1_state_unit = $result['Inverter_States_(Byte 2)_DC/DC Channel 1 state-UNIT'];
$inverter_states_byte_1_inverter_state = $result['Inverter_States_(Byte 1)_Inverter state'];
$inverter_states_byte_1_inverter_state_unit = $result['Inverter_States_(Byte 1)_Inverter state-UNIT'];
$inverter_states_byte_0_global_state = $result['Inverter_States_(Byte 0)_Global state'];
$inverter_states_byte_0_global_state_unit = $result['Inverter_States_(Byte 0)_Global state-UNIT'];
$service_id = $result['service_id'];
$host = $result['host'];
$owner_id = $result['owner_id'];
$modbus = $result['modbus'];
$file_source = $result['file_source'];
$path = $result['path'];
$type = $result['type'];
$version = $result['@version'];
$id = $result['_id'];
$created_epoch_ist = $result['created_epoch_ist'];
$returnArray[] = array($sr_num,$id,$service_id,$frequency,$frequency_unit,$wind_generator_frequency,$wind_generator_frequency_unit,$inverter_temperature,$inverter_temperature_unit,$booster_temperature,$booster_temperature_unit,$isolation_temperature,$isolation_temperature_unit,$partial_energy,$partial_energy_unit,$daily_energy,$daily_energy_unit,$weekly_energy,$weekly_energy_unit,$monthly_energy,$monthly_energy_unit,$yearly_energy,$yearly_energy_unit,$total_energy,$total_energy_unit,$grid_power,$grid_power_unit,$grid_voltage,$grid_voltage_unit,$grid_current,$grid_current_unit,$input_1_voltage,$input_1_voltage_unit,$input_1_power,$input_1_power_unit,$input_1_currnet,$input_1_currnet_unit,$input_2_voltage,$input_2_voltage_unit,$input_2_power,$input_2_power_unit,$input_2_currnet,$input_2_currnet_unit,$inverter_states_byte_0_global_state,$inverter_states_byte_0_global_state_unit,$inverter_states_byte_1_inverter_state,$inverter_states_byte_1_inverter_state_unit,$inverter_state_byte_3_DC_DC_channel_2_state,$inverter_state_byte_3_DC_DC_channel_2_state_unit,$inverter_states_byte_2_DC_DC_channel_1_state,$inverter_states_byte_2_DC_DC_channel_1_state_unit,$inverter_states_byte_4_alarm_state,$inverter_states_byte_4_alarm_state_unit,$host,$owner_id,$modbus,$file_source,$path,$type,$version,$created_epoch_ist,$created);
}
}
}
} catch (\Exception $exc) {
$returnArray = array();
}
return json_encode(['data' => $returnArray]);
}
/*
* Get numeric value data
*/
public function numericData(Request $request) {
try {
$value = 0;
$status = false;
$unit = null;
if(config('treepye_constants.status')) {
$getData = $this->api->numericData($request);
if($getData['status']==true) {
$status = true;
$value = data_get($getData,'details.records.0.'.$request->y_value,0);
$unit = data_get($getData,'details.records.0.'.$request->unit_value,null);
}
}
} catch(Exception $ex) {
}
return json_encode(['status' => $status , 'value' => $value,'unit'=>$unit ,'plants'=> $getData['plants']]);
}
public function mappedDataByDuration($apiresponse,$graph_duration,$request,$x_value,$y_value) {
try {
$value = 0;
$status = false;
$graphData = array();
if(config('treepye_constants.status')) {
if($apiresponse['status']==true) {
$status = true;
$data = $apiresponse['details']['records'];
$plants = explode(',',$apiresponse['service_id']);
$results = $this->group_by('service_id', $data);
if($graph_duration == '1') {
foreach ($results as $key => $res) {
$sortedArray = collect($res)->sortBy('created')->all();
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
foreach ($sortedArray as $value) {
$created = explode(' ', $value[$x_value]);
$response['y_value'] = $value[$y_value];
$response['x_value'] = $created[1];
$records['records'][] = $response;
}
$graphData[] = $records;
}
} else if($graph_duration == '2') {
$dates = array();
$lastday = '2019-11';
$end = '30';
for ($i = 1; $i <= $end; $i++) {
$dates[str_pad($i, 2, '0', STR_PAD_LEFT)] = 0;
}
$i = 0;
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $dates;
foreach ($values as $value) {
//dd($value);
$records['records'][date("d", strtotime($value[$x_value]))] = $value[$y_value];
}
$graphData[] = $records;
$i++;
}
} elseif ($graph_duration == '3') {
$month = array();
$year = '2019';
for ($i = 1; $i <= 12; $i++) {
if($i<=9){
$m = '-0'.$i;
}
else{
$m = '-'.$i;
}
$firstDate = $year.$m.'-01';
$month[$firstDate] = 0;
}
foreach ($results as $key => $values) {
$records = array();
$plantName = $this->api->getPlantName($key);
$records['label'] = $plantName;
$records['records'] = $month;
foreach ($values as $value) {
$key = explode(' ', $value[$x_value]);
$records['records'][$key[0]] = $value[$x_value];
}
$graphData[] = $records;
}
}
}
}
} catch(Exception $ex) {
}
//return $graphData;
return json_encode(['status' => $status , 'records' => $graphData]);
}
/*
* Get all API list from treepye
*/
public function getApiList(){
$APIs = array();
$status = false;
try{
$apiresponse = $this->api->getAllApiList();
if(config('treepye_constants.status')) {
if($apiresponse['status']==true) {
$status = true;
$APIs = $apiresponse['details']['queries'];
}
}
}catch(Exception $ex) {
logger($exc->getMessage());
}
return json_encode(['status' => $status , 'records' => $APIs]);
}
/* Download excel for report and log*/
// public function downloadExcel(Request $req)
// {
// $data = array();
// ini_set("max_execution_time", 0);
// ini_set("memory_limit", "-1");
// try{
// $req->request->add(['status' => '1']);
// $reports = $this->api->getReportLog($req);
// if($reports['status']!=false) {
// $results = $reports['details']['records'];
// $data = collect($results)->sortBy('created')->all();
// $data_chunk = array_chunk($data,100,true);
// return Excel::create('Reports', function($excel) use ($data) {
// $excel->sheet('Reports', function($sheet) use ($data)
// {
// $sheet->setTitle('Report And Log');
// $sheet->setFontFamily('Verdana');
// $sheet->setStyle(array(
// 'font' => array(
// 'name' => 'Verdana',
// 'size' => 10,
// )));
// $sheet->setFitToHeight(true);
// $sheet->setFitToWidth(true);
// $sheet->cell('A1:BJ1', function ($cells) {
// $cells->setFontWeight('bold');
// $cells->setBackground('#FFFF00 ');
// });
// foreach($data_chunk as $rows){
// foreach($rows as $row){
// $sheet->appendRow($row);
// }
// }
// //$sheet->fromArray($data);
// });
// })->download('xls');
// }
// } catch(Exception $ex){
// dd($ex->getMessage());
// }
// }
public function downloadExcel(Request $req)
{
$data = array();
$data_chunk = array();
ini_set("max_execution_time", 0);
ini_set("memory_limit", "-1");
try{
$req->request->add(['status' => '1']);
$reports = $this->api->getReportLog($req);
if($reports['status']!=false) {
$data = $reports['details']['records'];
//$data = collect($results)->sortBy('created')->all();
$data_chunk = array_chunk($data,100,true);
return Excel::create('Reports', function($excel) use ($data_chunk) {
$excel->sheet('Reports', function($sheet) use ($data_chunk)
{
$sheet->setTitle('Report And Log');
$sheet->appendRow(array('Inverter_States_(Byte 3)_DC/DC Channel 2 state-UNIT', 'Inverter_States_(Byte 4)_Alarm state-UNIT', 'Inverter_States_(Byte 2)_DC/DC Channel 1 state Input-1 Voltage-UNIT', 'Input-2 Power-UNIT', 'Booster Temperature-UNIT', 'Input-2 Voltage-UNIT', 'Grid Power', 'Inverter Temperature-UNIT ', 'Input-1 Power-UNIT', 'Total Energy-UNIT', 'Partial Energy', 'Inverter_States_(Byte 2)_DC/DC Channel 1 state-UNIT', 'Inverter_States_(Byte 0)_Global state-UNIT', 'Weekly Energy', 'Input-2 Currnet-UNIT', 'Grid Voltage-UNIT', 'Input-1 Power', 'Inverter_States_(Byte 4)_Alarm state', 'service_id', 'created', 'Grid Power-UNIT', 'Monthly Energy-UNIT', 'Isolation Temperature', 'host', 'Inverter_States_(Byte 0)_Global state', 'Isolation Temperature-UNIT', 'Frequency', 'Daily Energy', 'owner_id', 'Total Energy', 'Inverter Temperature', 'Grid Voltage', 'modbus', 'Inverter_States_(Byte 1)_Inverter state-UNIT', 'file_source', 'Input-2 Power', 'Booster Temperature', 'path', 'Input-2 Currnet', 'Grid Current-UNIT', 'Wind Generator Frequency-UNIT', 'Wind Generator Frequency', 'Inverter_States_(Byte 3)_DC/DC Channel 2 state', 'Monthly Energy', 'Yearly Energy', 'type', 'Weekly Energy-UNIT', 'Partial Energy-UNIT', 'Yearly Energy-UNIT', 'Input-1 Currnet-UNIT', 'Daily Energy-UNIT', 'Input-2 Voltage', 'Input-1 Currnet', 'Input-1 Voltage', 'Inverter_States_(Byte 1)_Inverter state Frequency-UNIT', '@version' , 'Grid Current', 'created_date', '_id', 'created_epoch_ist'));
$sheet->setFontFamily('Verdana');
$sheet->setStyle(array(
'font' => array(
'name' => 'Verdana',
'size' => 10,
)));
$sheet->setFitToHeight(true);
$sheet->setFitToWidth(true);
$sheet->cell('A1:BJ1', function ($cells) {
$cells->setFontWeight('bold');
$cells->setBackground('#FFFF00 ');
});
foreach($data_chunk as $rows){
foreach($rows as $key => $row){
$sheet->appendRow($row);
Log::info($key);
}
}
// $sheet->fromArray($data);
});
})->export('xlsx');
}else{
throw new \Exception("Error while processing the request");
}
} catch(\Exception $ex){
dd($ex->getMessage());
}
}
}
OHA YOOOO