Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Binary sensor to read Proxmox VE data."""
2 
3 from __future__ import annotations
4 
6  BinarySensorDeviceClass,
7  BinarySensorEntity,
8 )
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
12 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
13 
14 from .const import COORDINATORS, DOMAIN, PROXMOX_CLIENTS
15 from .entity import ProxmoxEntity
16 
17 
19  hass: HomeAssistant,
20  config: ConfigType,
21  add_entities: AddEntitiesCallback,
22  discovery_info: DiscoveryInfoType | None = None,
23 ) -> None:
24  """Set up binary sensors."""
25  if discovery_info is None:
26  return
27 
28  sensors = []
29 
30  for host_config in discovery_info["config"][DOMAIN]:
31  host_name = host_config["host"]
32  host_name_coordinators = hass.data[DOMAIN][COORDINATORS][host_name]
33 
34  if hass.data[PROXMOX_CLIENTS][host_name] is None:
35  continue
36 
37  for node_config in host_config["nodes"]:
38  node_name = node_config["node"]
39 
40  for dev_id in node_config["vms"] + node_config["containers"]:
41  coordinator = host_name_coordinators[node_name][dev_id]
42 
43  # unfound case
44  if (coordinator_data := coordinator.data) is None:
45  continue
46 
47  name = coordinator_data["name"]
48  sensor = create_binary_sensor(
49  coordinator, host_name, node_name, dev_id, name
50  )
51  sensors.append(sensor)
52 
53  add_entities(sensors)
54 
55 
57  coordinator,
58  host_name: str,
59  node_name: str,
60  vm_id: int,
61  name: str,
62 ) -> ProxmoxBinarySensor:
63  """Create a binary sensor based on the given data."""
64  return ProxmoxBinarySensor(
65  coordinator=coordinator,
66  unique_id=f"proxmox_{node_name}_{vm_id}_running",
67  name=f"{node_name}_{name}",
68  icon="",
69  host_name=host_name,
70  node_name=node_name,
71  vm_id=vm_id,
72  )
73 
74 
76  """A binary sensor for reading Proxmox VE data."""
77 
78  _attr_device_class = BinarySensorDeviceClass.RUNNING
79 
80  def __init__(
81  self,
82  coordinator: DataUpdateCoordinator,
83  unique_id: str,
84  name: str,
85  icon: str,
86  host_name: str,
87  node_name: str,
88  vm_id: int,
89  ) -> None:
90  """Create the binary sensor for vms or containers."""
91  super().__init__(
92  coordinator, unique_id, name, icon, host_name, node_name, vm_id
93  )
94 
95  @property
96  def is_on(self) -> bool | None:
97  """Return the state of the binary sensor."""
98  if (data := self.coordinatorcoordinator.data) is None:
99  return None
100 
101  return data["status"] == "running"
102 
103  @property
104  def available(self) -> bool:
105  """Return sensor availability."""
106 
107  return super().available and self.coordinatorcoordinator.data is not None
None __init__(self, DataUpdateCoordinator coordinator, str unique_id, str name, str icon, str host_name, str node_name, int vm_id)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
ProxmoxBinarySensor create_binary_sensor(coordinator, str host_name, str node_name, int vm_id, str name)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)