From af934ffdc26b81b2c5e4fd91b67b4f93dec569cd Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Mon, 16 Jun 2025 14:40:01 +0200 Subject: [PATCH] feat(#34): adds support for header 'battery-percent' --- app/Models/Device.php | 25 +++++++++++++++++++++++++ routes/api.php | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/app/Models/Device.php b/app/Models/Device.php index 4182743..68b3301 100644 --- a/app/Models/Device.php +++ b/app/Models/Device.php @@ -45,6 +45,31 @@ class Device extends Model return round($percent); } + /** + * Calculate battery voltage from percentage + * + * @param int $percent Battery percentage (0-100) + * @return float Calculated voltage + */ + public function calculateVoltageFromPercent(int $percent): float + { + // Define min and max voltage for Li-ion battery (3.0V empty, 4.2V full) + $min_volt = 3.0; + $max_volt = 4.2; + + // Ensure the percentage is within range + if ($percent <= 0) { + return $min_volt; + } elseif ($percent >= 100) { + return $max_volt; + } + + // Calculate voltage + $voltage = $min_volt + (($percent / 100) * ($max_volt - $min_volt)); + + return round($voltage, 2); + } + public function getWifiStrengthAttribute() { $rssi = $this->last_rssi_level; diff --git a/routes/api.php b/routes/api.php index 36a9650..f91df50 100644 --- a/routes/api.php +++ b/routes/api.php @@ -48,6 +48,14 @@ Route::get('/display', function (Request $request) { 'last_refreshed_at' => now(), ]); + if ($request->hasHeader('battery-percent')) { + $batteryPercent = (int) $request->header('battery-percent'); + $batteryVoltage = $device->calculateVoltageFromPercent($batteryPercent); + $device->update([ + 'last_battery_voltage' => $batteryVoltage, + ]); + } + // Get current screen image from a mirror device or continue if not available if (! $image_uuid = $device->mirrorDevice?->current_screen_image) { $refreshTimeOverride = null;