Use _attr_native_value in glances sensor (#77494)

This commit is contained in:
epenet 2022-08-29 17:58:36 +02:00 committed by GitHub
parent d4ae81d2bb
commit af9910d143
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -329,7 +329,6 @@ class GlancesSensor(SensorEntity):
"""Initialize the sensor.""" """Initialize the sensor."""
self.glances_data = glances_data self.glances_data = glances_data
self._sensor_name_prefix = sensor_name_prefix self._sensor_name_prefix = sensor_name_prefix
self._state = None
self.unsub_update: CALLBACK_TYPE | None = None self.unsub_update: CALLBACK_TYPE | None = None
self.entity_description = description self.entity_description = description
@ -346,11 +345,6 @@ class GlancesSensor(SensorEntity):
"""Could the device be accessed during the last update call.""" """Could the device be accessed during the last update call."""
return self.glances_data.available return self.glances_data.available
@property
def native_value(self):
"""Return the state of the resources."""
return self._state
async def async_added_to_hass(self) -> None: async def async_added_to_hass(self) -> None:
"""Handle entity which will be added.""" """Handle entity which will be added."""
self.unsub_update = async_dispatcher_connect( self.unsub_update = async_dispatcher_connect(
@ -358,16 +352,16 @@ class GlancesSensor(SensorEntity):
) )
@callback @callback
def _schedule_immediate_update(self): def _schedule_immediate_update(self) -> None:
self.async_schedule_update_ha_state(True) self.async_schedule_update_ha_state(True)
async def will_remove_from_hass(self): async def will_remove_from_hass(self) -> None:
"""Unsubscribe from update dispatcher.""" """Unsubscribe from update dispatcher."""
if self.unsub_update: if self.unsub_update:
self.unsub_update() self.unsub_update()
self.unsub_update = None self.unsub_update = None
async def async_update(self): # noqa: C901 async def async_update(self) -> None: # noqa: C901
"""Get the latest data from REST API.""" """Get the latest data from REST API."""
if (value := self.glances_data.api.data) is None: if (value := self.glances_data.api.data) is None:
return return
@ -379,100 +373,100 @@ class GlancesSensor(SensorEntity):
break break
if self.entity_description.key == "disk_free": if self.entity_description.key == "disk_free":
try: try:
self._state = round(disk["free"] / 1024**3, 1) self._attr_native_value = round(disk["free"] / 1024**3, 1)
except KeyError: except KeyError:
self._state = round( self._attr_native_value = round(
(disk["size"] - disk["used"]) / 1024**3, (disk["size"] - disk["used"]) / 1024**3,
1, 1,
) )
elif self.entity_description.key == "disk_use": elif self.entity_description.key == "disk_use":
self._state = round(disk["used"] / 1024**3, 1) self._attr_native_value = round(disk["used"] / 1024**3, 1)
elif self.entity_description.key == "disk_use_percent": elif self.entity_description.key == "disk_use_percent":
self._state = disk["percent"] self._attr_native_value = disk["percent"]
elif self.entity_description.key == "battery": elif self.entity_description.key == "battery":
for sensor in value["sensors"]: for sensor in value["sensors"]:
if ( if (
sensor["type"] == "battery" sensor["type"] == "battery"
and sensor["label"] == self._sensor_name_prefix and sensor["label"] == self._sensor_name_prefix
): ):
self._state = sensor["value"] self._attr_native_value = sensor["value"]
elif self.entity_description.key == "fan_speed": elif self.entity_description.key == "fan_speed":
for sensor in value["sensors"]: for sensor in value["sensors"]:
if ( if (
sensor["type"] == "fan_speed" sensor["type"] == "fan_speed"
and sensor["label"] == self._sensor_name_prefix and sensor["label"] == self._sensor_name_prefix
): ):
self._state = sensor["value"] self._attr_native_value = sensor["value"]
elif self.entity_description.key == "temperature_core": elif self.entity_description.key == "temperature_core":
for sensor in value["sensors"]: for sensor in value["sensors"]:
if ( if (
sensor["type"] == "temperature_core" sensor["type"] == "temperature_core"
and sensor["label"] == self._sensor_name_prefix and sensor["label"] == self._sensor_name_prefix
): ):
self._state = sensor["value"] self._attr_native_value = sensor["value"]
elif self.entity_description.key == "temperature_hdd": elif self.entity_description.key == "temperature_hdd":
for sensor in value["sensors"]: for sensor in value["sensors"]:
if ( if (
sensor["type"] == "temperature_hdd" sensor["type"] == "temperature_hdd"
and sensor["label"] == self._sensor_name_prefix and sensor["label"] == self._sensor_name_prefix
): ):
self._state = sensor["value"] self._attr_native_value = sensor["value"]
elif self.entity_description.key == "memory_use_percent": elif self.entity_description.key == "memory_use_percent":
self._state = value["mem"]["percent"] self._attr_native_value = value["mem"]["percent"]
elif self.entity_description.key == "memory_use": elif self.entity_description.key == "memory_use":
self._state = round(value["mem"]["used"] / 1024**2, 1) self._attr_native_value = round(value["mem"]["used"] / 1024**2, 1)
elif self.entity_description.key == "memory_free": elif self.entity_description.key == "memory_free":
self._state = round(value["mem"]["free"] / 1024**2, 1) self._attr_native_value = round(value["mem"]["free"] / 1024**2, 1)
elif self.entity_description.key == "swap_use_percent": elif self.entity_description.key == "swap_use_percent":
self._state = value["memswap"]["percent"] self._attr_native_value = value["memswap"]["percent"]
elif self.entity_description.key == "swap_use": elif self.entity_description.key == "swap_use":
self._state = round(value["memswap"]["used"] / 1024**3, 1) self._attr_native_value = round(value["memswap"]["used"] / 1024**3, 1)
elif self.entity_description.key == "swap_free": elif self.entity_description.key == "swap_free":
self._state = round(value["memswap"]["free"] / 1024**3, 1) self._attr_native_value = round(value["memswap"]["free"] / 1024**3, 1)
elif self.entity_description.key == "processor_load": elif self.entity_description.key == "processor_load":
# Windows systems don't provide load details # Windows systems don't provide load details
try: try:
self._state = value["load"]["min15"] self._attr_native_value = value["load"]["min15"]
except KeyError: except KeyError:
self._state = value["cpu"]["total"] self._attr_native_value = value["cpu"]["total"]
elif self.entity_description.key == "process_running": elif self.entity_description.key == "process_running":
self._state = value["processcount"]["running"] self._attr_native_value = value["processcount"]["running"]
elif self.entity_description.key == "process_total": elif self.entity_description.key == "process_total":
self._state = value["processcount"]["total"] self._attr_native_value = value["processcount"]["total"]
elif self.entity_description.key == "process_thread": elif self.entity_description.key == "process_thread":
self._state = value["processcount"]["thread"] self._attr_native_value = value["processcount"]["thread"]
elif self.entity_description.key == "process_sleeping": elif self.entity_description.key == "process_sleeping":
self._state = value["processcount"]["sleeping"] self._attr_native_value = value["processcount"]["sleeping"]
elif self.entity_description.key == "cpu_use_percent": elif self.entity_description.key == "cpu_use_percent":
self._state = value["quicklook"]["cpu"] self._attr_native_value = value["quicklook"]["cpu"]
elif self.entity_description.key == "docker_active": elif self.entity_description.key == "docker_active":
count = 0 count = 0
try: try:
for container in value["docker"]["containers"]: for container in value["docker"]["containers"]:
if container["Status"] == "running" or "Up" in container["Status"]: if container["Status"] == "running" or "Up" in container["Status"]:
count += 1 count += 1
self._state = count self._attr_native_value = count
except KeyError: except KeyError:
self._state = count self._attr_native_value = count
elif self.entity_description.key == "docker_cpu_use": elif self.entity_description.key == "docker_cpu_use":
cpu_use = 0.0 cpu_use = 0.0
try: try:
for container in value["docker"]["containers"]: for container in value["docker"]["containers"]:
if container["Status"] == "running" or "Up" in container["Status"]: if container["Status"] == "running" or "Up" in container["Status"]:
cpu_use += container["cpu"]["total"] cpu_use += container["cpu"]["total"]
self._state = round(cpu_use, 1) self._attr_native_value = round(cpu_use, 1)
except KeyError: except KeyError:
self._state = STATE_UNAVAILABLE self._attr_native_value = STATE_UNAVAILABLE
elif self.entity_description.key == "docker_memory_use": elif self.entity_description.key == "docker_memory_use":
mem_use = 0.0 mem_use = 0.0
try: try:
for container in value["docker"]["containers"]: for container in value["docker"]["containers"]:
if container["Status"] == "running" or "Up" in container["Status"]: if container["Status"] == "running" or "Up" in container["Status"]:
mem_use += container["memory"]["usage"] mem_use += container["memory"]["usage"]
self._state = round(mem_use / 1024**2, 1) self._attr_native_value = round(mem_use / 1024**2, 1)
except KeyError: except KeyError:
self._state = STATE_UNAVAILABLE self._attr_native_value = STATE_UNAVAILABLE
elif self.entity_description.type == "raid": elif self.entity_description.type == "raid":
for raid_device, raid in value["raid"].items(): for raid_device, raid in value["raid"].items():
if raid_device == self._sensor_name_prefix: if raid_device == self._sensor_name_prefix:
self._state = raid[self.entity_description.key] self._attr_native_value = raid[self.entity_description.key]