Skip to content

Commit b739a3f

Browse files
Add comprehensive unit info diagnostic sensors and update to pymitsubishi 0.1.6
- Add focused diagnostic sensors: Unit Info, Firmware Version, Unit Type, WiFi Info - Enhanced device information with unit info data integration - All diagnostic sensors properly categorized and include relevant attributes - Maintains compatibility with existing entities
1 parent f53d12c commit b739a3f

File tree

5 files changed

+140
-0
lines changed

5 files changed

+140
-0
lines changed

custom_components/mitsubishi/sensor.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ async def async_setup_entry(
2929
MitsubishiErrorSensor(coordinator, config_entry),
3030
MitsubishiDehumidifierLevelSensor(coordinator, config_entry),
3131
MitsubishiUnitInfoSensor(coordinator, config_entry),
32+
MitsubishiFirmwareVersionSensor(coordinator, config_entry),
33+
MitsubishiUnitTypeSensor(coordinator, config_entry),
34+
MitsubishiWifiInfoSensor(coordinator, config_entry),
3235
]
3336
)
3437

@@ -211,3 +214,140 @@ def extra_state_attributes(self) -> dict[str, Any]:
211214
# Remove None values
212215
return {k: v for k, v in attributes.items() if v is not None}
213216

217+
218+
class MitsubishiFirmwareVersionSensor(MitsubishiEntity, SensorEntity):
219+
"""Firmware version diagnostic sensor for Mitsubishi AC."""
220+
221+
_attr_name = "Firmware Version"
222+
_attr_icon = "mdi:chip"
223+
_attr_entity_category = "diagnostic"
224+
225+
def __init__(
226+
self,
227+
coordinator: MitsubishiDataUpdateCoordinator,
228+
config_entry: ConfigEntry,
229+
) -> None:
230+
"""Initialize the firmware version sensor."""
231+
super().__init__(coordinator, config_entry, "firmware_version")
232+
233+
@property
234+
def native_value(self) -> str | None:
235+
"""Return the app version as the main state."""
236+
if self.coordinator.unit_info:
237+
adaptor_info = self.coordinator.unit_info.get("adaptor_info", {})
238+
return adaptor_info.get("app_version", "Unknown")
239+
return "Unknown"
240+
241+
@property
242+
def extra_state_attributes(self) -> dict[str, Any]:
243+
"""Return detailed version information as attributes."""
244+
if not self.coordinator.unit_info:
245+
return {"status": "Unit info not available"}
246+
247+
adaptor_info = self.coordinator.unit_info.get("adaptor_info", {})
248+
unit_info = self.coordinator.unit_info.get("unit_info", {})
249+
250+
attributes = {
251+
"release_version": adaptor_info.get("release_version"),
252+
"flash_version": adaptor_info.get("flash_version"),
253+
"boot_version": adaptor_info.get("boot_version"),
254+
"platform_version": adaptor_info.get("platform_version"),
255+
"test_version": adaptor_info.get("test_version"),
256+
"protocol_version": unit_info.get("it_protocol_version"),
257+
}
258+
259+
# Remove None values
260+
return {k: v for k, v in attributes.items() if v is not None}
261+
262+
263+
class MitsubishiUnitTypeSensor(MitsubishiEntity, SensorEntity):
264+
"""Unit type diagnostic sensor for Mitsubishi AC."""
265+
266+
_attr_name = "Unit Type"
267+
_attr_icon = "mdi:air-conditioner"
268+
_attr_entity_category = "diagnostic"
269+
270+
def __init__(
271+
self,
272+
coordinator: MitsubishiDataUpdateCoordinator,
273+
config_entry: ConfigEntry,
274+
) -> None:
275+
"""Initialize the unit type sensor."""
276+
super().__init__(coordinator, config_entry, "unit_type")
277+
278+
@property
279+
def native_value(self) -> str | None:
280+
"""Return the unit type."""
281+
if self.coordinator.unit_info:
282+
unit_info = self.coordinator.unit_info.get("unit_info", {})
283+
return unit_info.get("type", "Unknown")
284+
return "Unknown"
285+
286+
@property
287+
def extra_state_attributes(self) -> dict[str, Any]:
288+
"""Return unit-related information as attributes."""
289+
if not self.coordinator.unit_info:
290+
return {"status": "Unit info not available"}
291+
292+
adaptor_info = self.coordinator.unit_info.get("adaptor_info", {})
293+
unit_info = self.coordinator.unit_info.get("unit_info", {})
294+
295+
attributes = {
296+
"model": adaptor_info.get("model"),
297+
"device_id": adaptor_info.get("device_id"),
298+
"manufacturing_date": adaptor_info.get("manufacturing_date"),
299+
"protocol_version": unit_info.get("it_protocol_version"),
300+
"unit_error_code": unit_info.get("error_code"),
301+
}
302+
303+
# Remove None values
304+
return {k: v for k, v in attributes.items() if v is not None}
305+
306+
307+
class MitsubishiWifiInfoSensor(MitsubishiEntity, SensorEntity):
308+
"""WiFi information diagnostic sensor for Mitsubishi AC."""
309+
310+
_attr_name = "WiFi Information"
311+
_attr_icon = "mdi:wifi"
312+
_attr_entity_category = "diagnostic"
313+
314+
def __init__(
315+
self,
316+
coordinator: MitsubishiDataUpdateCoordinator,
317+
config_entry: ConfigEntry,
318+
) -> None:
319+
"""Initialize the WiFi info sensor."""
320+
super().__init__(coordinator, config_entry, "wifi_info")
321+
322+
@property
323+
def native_value(self) -> str | None:
324+
"""Return the WiFi signal strength as the main state."""
325+
if self.coordinator.unit_info:
326+
adaptor_info = self.coordinator.unit_info.get("adaptor_info", {})
327+
rssi = adaptor_info.get("rssi_dbm")
328+
if rssi is not None:
329+
return f"{rssi} dBm"
330+
return "Unknown"
331+
332+
@property
333+
def extra_state_attributes(self) -> dict[str, Any]:
334+
"""Return WiFi and communication status as attributes."""
335+
if not self.coordinator.unit_info:
336+
return {"status": "Unit info not available"}
337+
338+
adaptor_info = self.coordinator.unit_info.get("adaptor_info", {})
339+
340+
attributes = {
341+
"mac_address": adaptor_info.get("mac_address"),
342+
"wifi_channel": adaptor_info.get("wifi_channel"),
343+
"rssi_dbm": adaptor_info.get("rssi_dbm"),
344+
"it_comm_status": adaptor_info.get("it_comm_status"),
345+
"server_operation": adaptor_info.get("server_operation"),
346+
"server_comm_status": adaptor_info.get("server_comm_status"),
347+
"hems_comm_status": adaptor_info.get("hems_comm_status"),
348+
"soi_comm_status": adaptor_info.get("soi_comm_status"),
349+
}
350+
351+
# Remove None values
352+
return {k: v for k, v in attributes.items() if v is not None}
353+
38.5 KB
Binary file not shown.
38.1 KB
Binary file not shown.
38.1 KB
Binary file not shown.

mitsubishi-integration.tar.gz

38.1 KB
Binary file not shown.

0 commit comments

Comments
 (0)