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 ]); } }