Fix flipper zero
This commit is contained in:
@@ -29,6 +29,8 @@ class CANStatsPage(InfoPage):
|
||||
|
||||
def get_lines(self) -> list[str]:
|
||||
"""Get statistics lines for display."""
|
||||
# Force refresh to get fresh data
|
||||
self._provider.refresh()
|
||||
data = self._provider.get_data()
|
||||
|
||||
lines = [
|
||||
|
||||
@@ -29,10 +29,12 @@ class SystemInfoPage(InfoPage):
|
||||
|
||||
def get_lines(self) -> list[str]:
|
||||
"""Get system info lines for display."""
|
||||
# Force refresh to get fresh data
|
||||
self._provider.refresh()
|
||||
data = self._provider.get_data()
|
||||
|
||||
lines = [
|
||||
f"CPU Temp: {data.cpu_temp:.1f}C {self._get_temp_indicator(data.cpu_temp)}",
|
||||
f"CPU: {data.cpu_temp:.1f}C {self._get_temp_indicator(data.cpu_temp)}",
|
||||
f"Power: {data.power_watts:.2f}W",
|
||||
]
|
||||
|
||||
|
||||
@@ -35,6 +35,8 @@ class UPSStatusPage(InfoPage):
|
||||
self._provider.get_last_error() or "Check I2C connection"
|
||||
]
|
||||
|
||||
# Force refresh to get fresh data
|
||||
self._provider.refresh()
|
||||
data = self._provider.get_data()
|
||||
|
||||
# Battery bar visualization
|
||||
|
||||
@@ -12,6 +12,9 @@ from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
from flipper.providers.base import BaseProvider
|
||||
from logger import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -50,16 +53,31 @@ class SystemProvider(BaseProvider):
|
||||
Float value or None on error
|
||||
"""
|
||||
try:
|
||||
output = subprocess.check_output(args).decode("utf-8")
|
||||
output = subprocess.check_output(args, stderr=subprocess.DEVNULL).decode("utf-8")
|
||||
value_str = output.split("=")[1].strip().rstrip(strip_chars)
|
||||
return float(value_str)
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
logger.debug(f"Failed to read metric {args}: {e}")
|
||||
return None
|
||||
|
||||
def _read_cpu_temp(self) -> float:
|
||||
"""Read CPU temperature in Celsius."""
|
||||
# Try vcgencmd first
|
||||
result = self._read_metric(["vcgencmd", "measure_temp"], "'C")
|
||||
return result if result is not None else 0.0
|
||||
if result is not None:
|
||||
return result
|
||||
|
||||
# Fallback to sysfs thermal zone
|
||||
try:
|
||||
thermal_path = Path("/sys/class/thermal/thermal_zone0/temp")
|
||||
if thermal_path.exists():
|
||||
with open(thermal_path, "r") as f:
|
||||
temp_millicelsius = int(f.read().strip())
|
||||
return temp_millicelsius / 1000.0
|
||||
except Exception as e:
|
||||
logger.debug(f"Failed to read sysfs temp: {e}")
|
||||
|
||||
return 0.0
|
||||
|
||||
def _read_cpu_volts(self) -> float:
|
||||
"""Read CPU core voltage."""
|
||||
@@ -149,19 +167,32 @@ class SystemProvider(BaseProvider):
|
||||
def refresh(self) -> bool:
|
||||
"""Refresh system metrics."""
|
||||
try:
|
||||
cpu_temp = self._read_cpu_temp()
|
||||
cpu_volts = self._read_cpu_volts()
|
||||
cpu_amps = self._read_cpu_amps()
|
||||
power_watts = self._read_power_watts()
|
||||
fan_rpm = self._read_fan_rpm()
|
||||
input_voltage = self._read_input_voltage()
|
||||
|
||||
self._data = SystemData(
|
||||
cpu_temp=self._read_cpu_temp(),
|
||||
cpu_volts=self._read_cpu_volts(),
|
||||
cpu_amps=self._read_cpu_amps(),
|
||||
power_watts=self._read_power_watts(),
|
||||
fan_rpm=self._read_fan_rpm(),
|
||||
input_voltage=self._read_input_voltage()
|
||||
cpu_temp=cpu_temp,
|
||||
cpu_volts=cpu_volts,
|
||||
cpu_amps=cpu_amps,
|
||||
power_watts=power_watts,
|
||||
fan_rpm=fan_rpm,
|
||||
input_voltage=input_voltage
|
||||
)
|
||||
|
||||
logger.debug(
|
||||
f"System metrics: temp={cpu_temp}, power={power_watts}W, "
|
||||
f"fan={fan_rpm}, input={input_voltage}V"
|
||||
)
|
||||
|
||||
self._set_cached("data", self._data)
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to refresh system metrics: {e}")
|
||||
self._last_error = str(e)
|
||||
return False
|
||||
|
||||
|
||||
@@ -10,6 +10,9 @@ from typing import Optional, Tuple
|
||||
from dataclasses import dataclass
|
||||
|
||||
from flipper.providers.base import BaseProvider
|
||||
from logger import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
Reference in New Issue
Block a user