Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for displaying the current CPU speed."""
2 
3 from __future__ import annotations
4 
5 from cpuinfo import cpuinfo
6 
7 from homeassistant.components.sensor import SensorDeviceClass, SensorEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import UnitOfFrequency
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.device_registry import DeviceInfo
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from .const import DOMAIN
15 
16 ATTR_BRAND = "brand"
17 ATTR_HZ = "ghz_advertised"
18 ATTR_ARCH = "arch"
19 
20 HZ_ACTUAL = "hz_actual"
21 HZ_ADVERTISED = "hz_advertised"
22 
23 
25  hass: HomeAssistant,
26  entry: ConfigEntry,
27  async_add_entities: AddEntitiesCallback,
28 ) -> None:
29  """Set up the platform from config_entry."""
30  async_add_entities([CPUSpeedSensor(entry)], True)
31 
32 
34  """Representation of a CPU sensor."""
35 
36  _attr_device_class = SensorDeviceClass.FREQUENCY
37  _attr_has_entity_name = True
38  _attr_name = None
39  _attr_native_unit_of_measurement = UnitOfFrequency.GIGAHERTZ
40 
41  def __init__(self, entry: ConfigEntry) -> None:
42  """Initialize the CPU sensor."""
43  self._attr_unique_id_attr_unique_id = entry.entry_id
44  self._attr_device_info_attr_device_info = DeviceInfo(
45  name="CPU Speed",
46  identifiers={(DOMAIN, entry.entry_id)},
47  )
48 
49  def update(self) -> None:
50  """Get the latest data and updates the state."""
51  info = cpuinfo.get_cpu_info()
52 
53  if info and HZ_ACTUAL in info:
54  self._attr_native_value_attr_native_value = round(float(info[HZ_ACTUAL][0]) / 10**9, 2)
55  else:
56  self._attr_native_value_attr_native_value = None
57 
58  if info:
59  self._attr_extra_state_attributes_attr_extra_state_attributes = {
60  ATTR_ARCH: info.get("arch_string_raw"),
61  ATTR_BRAND: info.get("brand_raw"),
62  }
63  if HZ_ADVERTISED in info:
64  self._attr_extra_state_attributes_attr_extra_state_attributes[ATTR_HZ] = round(
65  info[HZ_ADVERTISED][0] / 10**9, 2
66  )
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:28