1 """Support for monitoring the state of Vultr subscriptions (VPS)."""
3 from __future__
import annotations
7 import voluptuous
as vol
10 PLATFORM_SCHEMA
as BINARY_SENSOR_PLATFORM_SCHEMA,
11 BinarySensorDeviceClass,
21 ATTR_ALLOWED_BANDWIDTH,
32 ATTR_SUBSCRIPTION_NAME,
38 _LOGGER = logging.getLogger(__name__)
40 DEFAULT_NAME =
"Vultr {}"
41 PLATFORM_SCHEMA = BINARY_SENSOR_PLATFORM_SCHEMA.extend(
43 vol.Required(CONF_SUBSCRIPTION): cv.string,
44 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
52 add_entities: AddEntitiesCallback,
53 discovery_info: DiscoveryInfoType |
None =
None,
55 """Set up the Vultr subscription (server) binary sensor."""
56 vultr = hass.data[DATA_VULTR]
58 subscription = config.get(CONF_SUBSCRIPTION)
59 name = config.get(CONF_NAME)
61 if subscription
not in vultr.data:
62 _LOGGER.error(
"Subscription %s not found", subscription)
69 """Representation of a Vultr subscription sensor."""
71 _attr_device_class = BinarySensorDeviceClass.POWER
74 """Initialize a new Vultr binary sensor."""
83 """Return the name of the sensor."""
85 return self.
_name_name.format(self.
datadata[
"label"])
86 except (KeyError, TypeError):
87 return self.
_name_name
91 """Return the icon of this server."""
92 return "mdi:server" if self.
is_onis_on
else "mdi:server-off"
96 """Return true if the binary sensor is on."""
97 return self.
datadata[
"power_status"] ==
"running"
101 """Return the state attributes of the Vultr subscription."""
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"),
119 """Update state of sensor."""
def __init__(self, vultr, subscription, name)
def extra_state_attributes(self)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
web.Response get(self, web.Request request, str config_key)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)