Add per-enclosure temperature metrics + Home Assistant MQTT publisher
- enclosure: fetch SES element descriptor page (0x07) and label temp/fan/ psu/voltage elements with human-readable names - temps service + /api/temps: per-enclosure hotspot (max across SES sensors and housed drive temps) plus named SES sensor list - mqtt_publisher: paho-mqtt with HA discovery (device per enclosure, hotspot + per-sensor entities), LWT availability, opt-in via MQTT_HOST - secrets: OpenBao KV v2 reader; MQTT creds sourced from secret/home_assistant with env fallback - compose/requirements/README updated
This commit is contained in:
@@ -67,6 +67,7 @@ class SlotWithDrive(BaseModel):
|
||||
|
||||
class PsuStatus(BaseModel):
|
||||
index: int
|
||||
name: str | None = None
|
||||
status: str
|
||||
fail: bool = False
|
||||
ac_fail: bool = False
|
||||
@@ -75,6 +76,7 @@ class PsuStatus(BaseModel):
|
||||
|
||||
class FanStatus(BaseModel):
|
||||
index: int
|
||||
name: str | None = None
|
||||
status: str
|
||||
rpm: int | None = None
|
||||
fail: bool = False
|
||||
@@ -82,12 +84,14 @@ class FanStatus(BaseModel):
|
||||
|
||||
class TempSensor(BaseModel):
|
||||
index: int
|
||||
name: str | None = None
|
||||
status: str
|
||||
temperature_c: float | None = None
|
||||
|
||||
|
||||
class VoltageSensor(BaseModel):
|
||||
index: int
|
||||
name: str | None = None
|
||||
status: str
|
||||
voltage: float | None = None
|
||||
|
||||
@@ -147,3 +151,25 @@ class Overview(BaseModel):
|
||||
class HealthCheck(BaseModel):
|
||||
status: str
|
||||
tools: dict[str, bool]
|
||||
|
||||
|
||||
class EnclosureTempSensor(BaseModel):
|
||||
index: int
|
||||
name: str | None = None
|
||||
status: str
|
||||
temperature_c: float | None = None
|
||||
|
||||
|
||||
class EnclosureTemps(BaseModel):
|
||||
id: str
|
||||
vendor: str
|
||||
model: str
|
||||
hotspot_c: float | None = None
|
||||
drive_max_c: float | None = None
|
||||
drive_temp_count: int = 0
|
||||
sensors: list[EnclosureTempSensor] = []
|
||||
|
||||
|
||||
class TempSnapshot(BaseModel):
|
||||
node: str
|
||||
enclosures: list[EnclosureTemps] = []
|
||||
|
||||
Reference in New Issue
Block a user