feat(api): humidity, CO2, current pressure and 24h pressure history
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+14
-4
@@ -10,14 +10,16 @@ namespace Weerscherm;
|
||||
*/
|
||||
final class StationMapper
|
||||
{
|
||||
private const EMPTY_OUTDOOR = ['temp' => null, 'trend' => null, 'min' => null, 'min_at' => null, 'max' => null, 'max_at' => null];
|
||||
private const EMPTY_OUTDOOR = ['temp' => null, 'trend' => null, 'min' => null, 'min_at' => null, 'max' => null, 'max_at' => null, 'humidity' => null];
|
||||
private const EMPTY_PRESSURE = ['current' => null, 'trend' => null];
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $body
|
||||
* @param array<string, string> $indoorModules _id => label, in de gewenste volgorde
|
||||
* @return array{timezone: ?string, lat: ?float, lon: ?float, device_id: ?string, measured_at: ?int,
|
||||
* outdoor: array{temp: ?float, trend: ?string, min: ?float, min_at: ?int, max: ?float, max_at: ?int},
|
||||
* indoor: list<array{id: string, name: string, temp: ?float, min: ?float, max: ?float, reachable: bool}>,
|
||||
* outdoor: array{temp: ?float, trend: ?string, min: ?float, min_at: ?int, max: ?float, max_at: ?int, humidity: ?float},
|
||||
* indoor: list<array{id: string, name: string, temp: ?float, min: ?float, max: ?float, humidity: ?float, co2: ?int, reachable: bool}>,
|
||||
* pressure: array{current: ?float, trend: ?string},
|
||||
* rain_module_id: ?string, sum_rain_24: ?float}
|
||||
*/
|
||||
public static function map(array $body, ?string $deviceId, array $indoorModules): array
|
||||
@@ -26,7 +28,8 @@ final class StationMapper
|
||||
if ($device === null) {
|
||||
return [
|
||||
'timezone' => null, 'lat' => null, 'lon' => null, 'device_id' => null, 'measured_at' => null,
|
||||
'outdoor' => self::EMPTY_OUTDOOR, 'indoor' => [], 'rain_module_id' => null, 'sum_rain_24' => null,
|
||||
'outdoor' => self::EMPTY_OUTDOOR, 'indoor' => [], 'pressure' => self::EMPTY_PRESSURE,
|
||||
'rain_module_id' => null, 'sum_rain_24' => null,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -43,6 +46,10 @@ final class StationMapper
|
||||
'measured_at' => self::intOrNull(self::dashboard($device)['time_utc'] ?? self::dashboard($outdoor)['time_utc'] ?? null),
|
||||
'outdoor' => self::mapOutdoor($outdoor),
|
||||
'indoor' => self::mapIndoor($device, $modules, $indoorModules),
|
||||
'pressure' => [
|
||||
'current' => self::floatOrNull(self::dashboard($device)['Pressure'] ?? null),
|
||||
'trend' => self::stringOrNull(self::dashboard($device)['pressure_trend'] ?? null),
|
||||
],
|
||||
'rain_module_id' => $rain === null ? null : self::stringOrNull($rain['_id'] ?? null),
|
||||
'sum_rain_24' => self::floatOrNull(self::dashboard($rain)['sum_rain_24'] ?? null),
|
||||
];
|
||||
@@ -92,6 +99,7 @@ final class StationMapper
|
||||
'min_at' => self::intOrNull($d['date_min_temp'] ?? null),
|
||||
'max' => self::floatOrNull($d['max_temp'] ?? null),
|
||||
'max_at' => self::intOrNull($d['date_max_temp'] ?? null),
|
||||
'humidity' => self::floatOrNull($d['Humidity'] ?? null),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -118,6 +126,8 @@ final class StationMapper
|
||||
'temp' => self::floatOrNull($d['Temperature'] ?? null),
|
||||
'min' => self::floatOrNull($d['min_temp'] ?? null),
|
||||
'max' => self::floatOrNull($d['max_temp'] ?? null),
|
||||
'humidity' => self::floatOrNull($d['Humidity'] ?? null),
|
||||
'co2' => self::intOrNull($d['CO2'] ?? null),
|
||||
'reachable' => $d !== [],
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user