Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for monitoring the state of Vultr subscriptions (VPS)."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 import voluptuous as vol
8 
10  PLATFORM_SCHEMA as BINARY_SENSOR_PLATFORM_SCHEMA,
11  BinarySensorDeviceClass,
12  BinarySensorEntity,
13 )
14 from homeassistant.const import CONF_NAME
15 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
19 
20 from . import (
21  ATTR_ALLOWED_BANDWIDTH,
22  ATTR_AUTO_BACKUPS,
23  ATTR_COST_PER_MONTH,
24  ATTR_CREATED_AT,
25  ATTR_DISK,
26  ATTR_IPV4_ADDRESS,
27  ATTR_IPV6_ADDRESS,
28  ATTR_MEMORY,
29  ATTR_OS,
30  ATTR_REGION,
31  ATTR_SUBSCRIPTION_ID,
32  ATTR_SUBSCRIPTION_NAME,
33  ATTR_VCPUS,
34  CONF_SUBSCRIPTION,
35  DATA_VULTR,
36 )
37 
38 _LOGGER = logging.getLogger(__name__)
39 
40 DEFAULT_NAME = "Vultr {}"
41 PLATFORM_SCHEMA = BINARY_SENSOR_PLATFORM_SCHEMA.extend(
42  {
43  vol.Required(CONF_SUBSCRIPTION): cv.string,
44  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
45  }
46 )
47 
48 
50  hass: HomeAssistant,
51  config: ConfigType,
52  add_entities: AddEntitiesCallback,
53  discovery_info: DiscoveryInfoType | None = None,
54 ) -> None:
55  """Set up the Vultr subscription (server) binary sensor."""
56  vultr = hass.data[DATA_VULTR]
57 
58  subscription = config.get(CONF_SUBSCRIPTION)
59  name = config.get(CONF_NAME)
60 
61  if subscription not in vultr.data:
62  _LOGGER.error("Subscription %s not found", subscription)
63  return
64 
65  add_entities([VultrBinarySensor(vultr, subscription, name)], True)
66 
67 
69  """Representation of a Vultr subscription sensor."""
70 
71  _attr_device_class = BinarySensorDeviceClass.POWER
72 
73  def __init__(self, vultr, subscription, name):
74  """Initialize a new Vultr binary sensor."""
75  self._vultr_vultr = vultr
76  self._name_name = name
77 
78  self.subscriptionsubscription = subscription
79  self.datadata = None
80 
81  @property
82  def name(self):
83  """Return the name of the sensor."""
84  try:
85  return self._name_name.format(self.datadata["label"])
86  except (KeyError, TypeError):
87  return self._name_name
88 
89  @property
90  def icon(self):
91  """Return the icon of this server."""
92  return "mdi:server" if self.is_onis_on else "mdi:server-off"
93 
94  @property
95  def is_on(self):
96  """Return true if the binary sensor is on."""
97  return self.datadata["power_status"] == "running"
98 
99  @property
101  """Return the state attributes of the Vultr subscription."""
102  return {
103  ATTR_ALLOWED_BANDWIDTH: self.datadata.get("allowed_bandwidth_gb"),
104  ATTR_AUTO_BACKUPS: self.datadata.get("auto_backups"),
105  ATTR_COST_PER_MONTH: self.datadata.get("cost_per_month"),
106  ATTR_CREATED_AT: self.datadata.get("date_created"),
107  ATTR_DISK: self.datadata.get("disk"),
108  ATTR_IPV4_ADDRESS: self.datadata.get("main_ip"),
109  ATTR_IPV6_ADDRESS: self.datadata.get("v6_main_ip"),
110  ATTR_MEMORY: self.datadata.get("ram"),
111  ATTR_OS: self.datadata.get("os"),
112  ATTR_REGION: self.datadata.get("location"),
113  ATTR_SUBSCRIPTION_ID: self.datadata.get("SUBID"),
114  ATTR_SUBSCRIPTION_NAME: self.datadata.get("label"),
115  ATTR_VCPUS: self.datadata.get("vcpu_count"),
116  }
117 
118  def update(self) -> None:
119  """Update state of sensor."""
120  self._vultr_vultr.update()
121  self.datadata = self._vultr_vultr.data[self.subscriptionsubscription]
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)