Implement telemetry endpoints.

This commit is contained in:
Djonathan 2022-06-24 10:46:06 -03:00
parent 6e58cf08fe
commit b5297229b6
4 changed files with 105 additions and 53 deletions

View File

@ -49,19 +49,18 @@ class TelemetryController extends Controller
} }
} }
public function discretized15min($params) public function discretization(Request $request)
{ {
try {
$response = $this->med5minContract->getDiscretization($request->all());
return (new TelemetryResource($response))
->response()
->setStatusCode(Response::HTTP_OK);
} catch (\Exception $ex) {
return $this->errorResponse(false, $ex->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
}
} }
public function discretizedOneHour($params)
{
}
public function discretizedOneDay($params)
{
}
} }

View File

@ -6,10 +6,12 @@ use App\Repositories\ContractInterface;
interface Med5minContractInterface extends ContractInterface interface Med5minContractInterface extends ContractInterface
{ {
public function getDiscretized5min($params);
public function getDiscretized15min($params); public function getDiscretized15min($params);
public function getDiscretizedOneHour($params); public function getDiscretizedOneHour($params);
public function getDiscretizedOneDay($params); public function getDiscretizedOneDay($params);
public function getPowerFactor($params); public function getPowerFactor($params);
public function getDemand($params); public function getDemand($params);
public function getDiscretization($params);
} }

View File

@ -81,6 +81,99 @@ class Med5minRepository extends AbstractRepository implements Med5minContractInt
->get(); ->get();
} }
public function getDiscretization($params)
{
if (empty( $params['type'])){
return abort(404, 'Error! The type field needs to be filled in.');
}
$type = $params['type'];
$params = static::filterRow($params);
return match ($type) {
'5_min' => $this->getDiscretized5min($params),
'15_min' => $this->getDiscretized15min($params),
'1_hora' => $this->getDiscretizedOneHour($params),
'1_dia' => $this->getDiscretizedOneDay($params)
};
}
public function getDiscretized5min($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("TO_CHAR((date('1899-12-30') + interval '1' day * med_5min.dia_num), 'DD/MM/YYYY') as day_formatted"),
DB::raw("(med_5min.minuto/60) AS hora"),
DB::raw("MOD(med_5min.minuto,60) AS minut"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("SUM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];
return $this->execute($fields, $params)
->groupBy(["med_5min.ponto", "med_5min.dia_num", "day_formatted", 'hora', 'minut'])
->distinct()
->get();
}
public function getDiscretized15min($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("TO_CHAR((date('1899-12-30') + interval '1' day * med_5min.dia_num), 'DD/MM/YYYY') as day_formatted"),
DB::raw("(med_5min.minuto/60) AS hora"),
DB::raw("((MOD(med_5min.minuto,60)/15)+1)*15 AS minut"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("SUM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];
return $this->execute($fields, $params)
->groupBy(["med_5min.ponto", "med_5min.dia_num", "day_formatted", 'hora', 'minut'])
->distinct()
->get();
}
public function getDiscretizedOneHour($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("TO_CHAR((date('1899-12-30') + interval '1' day * med_5min.dia_num), 'DD/MM/YYYY') as day_formatted"),
DB::raw("(med_5min.minuto/60) AS hora"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("SUM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];;
return $this->execute($fields, $params)
->groupBy(["med_5min.ponto", "med_5min.dia_num", "day_formatted", 'hora'])
->distinct()
->get();
}
public function getDiscretizedOneDay($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("TO_CHAR((date('1899-12-30') + interval '1' day * med_5min.dia_num), 'DD/MM/YYYY') as day_formatted"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("SUM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];
return $this->execute($fields, $params)
->groupBy(["med_5min.ponto", "med_5min.dia_num", "day_formatted"])
->distinct()
->get();
}
public static function filterRow($params, $field = 'dia_num'): array public static function filterRow($params, $field = 'dia_num'): array
{ {
$arr['filters'] = collect($params['filters']) $arr['filters'] = collect($params['filters'])
@ -94,47 +187,4 @@ class Med5minRepository extends AbstractRepository implements Med5minContractInt
return $arr; return $arr;
} }
public function getDiscretized15min($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("(med_5min.minuto/60) AS hora"),
DB::raw("((MOD(med_5min.minuto,60)/15)+1)*15 AS minut"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];
return $this->execute($fields, $params);
}
public function getDiscretizedOneHour($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("(med_5min.minuto/60) AS hora"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];;
return $this->execute($fields, $params);
}
public function getDiscretizedOneDay($params)
{
$fields =
[
'med_5min.ponto',
'med_5min.dia_num',
DB::raw("(med_5min.minuto/60) AS hora"),
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
];
return $this->execute($fields, $params);
}
} }

View File

@ -61,6 +61,7 @@ Route::middleware(['auth:sanctum', 'ability:Client'])->group(function () {
// Route::post('telemetry', [\App\Http\Controllers\TelemetryController::class, 'index']); // Route::post('telemetry', [\App\Http\Controllers\TelemetryController::class, 'index']);
Route::post('telemetry/powerFactor', [\App\Http\Controllers\TelemetryController::class, 'powerFactor']); Route::post('telemetry/powerFactor', [\App\Http\Controllers\TelemetryController::class, 'powerFactor']);
Route::post('telemetry/demand', [\App\Http\Controllers\TelemetryController::class, 'demand']); Route::post('telemetry/demand', [\App\Http\Controllers\TelemetryController::class, 'demand']);
Route::post('telemetry/discretization', [\App\Http\Controllers\TelemetryController::class, 'discretization']);
// Route::post('telemetry/grossMonthly', [\App\Http\Controllers\TelemetryController::class, 'grossMonthlyEconomy']); // Route::post('telemetry/grossMonthly', [\App\Http\Controllers\TelemetryController::class, 'grossMonthlyEconomy']);
// Route::post('telemetry/estimates', [\App\Http\Controllers\TelemetryController::class, 'captiveMonthlyEconomy']); // Route::post('telemetry/estimates', [\App\Http\Controllers\TelemetryController::class, 'captiveMonthlyEconomy']);
// Route::post('telemetry/MWh', [\App\Http\Controllers\TelemetryController::class, 'costMWhEconomy']); // Route::post('telemetry/MWh', [\App\Http\Controllers\TelemetryController::class, 'costMWhEconomy']);