48 lines
1.6 KiB
PHP
48 lines
1.6 KiB
PHP
<?php
|
|
|
|
require_once(APPDIR."/Measurement/Measurement.php");
|
|
require_once(APPDIR."/Measurement/MeasurementModel.php");
|
|
|
|
class MeasurementsApicontroller extends mfBaseApicontroller
|
|
{
|
|
protected function init()
|
|
{
|
|
// Initialize database connection if needed
|
|
$this->addRoute("/measurements/latest", "getLatestMeasurements", "GET");
|
|
}
|
|
|
|
/**
|
|
* Get the latest measurements grouped by unique device_id and sensor_id combinations
|
|
* Returns one measurement per combination, limited to 50 results
|
|
*/
|
|
protected function getLatestMeasurements()
|
|
{
|
|
// Get limit from query parameters, default to 50, max 100
|
|
$limit = 50;
|
|
if (isset($this->get['limit']) && is_numeric($this->get['limit'])) {
|
|
$limit = min(100, max(1, intval($this->get['limit'])));
|
|
}
|
|
|
|
// Get the latest measurements grouped by device_id and sensor_id
|
|
$measurements = MeasurementModel::getLatestGroupedByDeviceAndSensor($limit);
|
|
|
|
$result = [];
|
|
foreach ($measurements as $measurement) {
|
|
$result[] = [
|
|
'id' => $measurement->id,
|
|
'device_id' => $measurement->device_id,
|
|
'sensor_id' => $measurement->sensor_id,
|
|
'value' => (float)$measurement->value,
|
|
'unit' => $measurement->unit,
|
|
'timestamp' => $measurement->create,
|
|
'created_at' => date('Y-m-d H:i:s', $measurement->create)
|
|
];
|
|
}
|
|
|
|
return mfResponse::Ok([
|
|
'count' => count($result),
|
|
'measurements' => $result
|
|
]);
|
|
}
|
|
}
|