Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for interacting with Vultr subscriptions."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 import voluptuous as vol
9 
11  PLATFORM_SCHEMA as SWITCH_PLATFORM_SCHEMA,
12  SwitchEntity,
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 = SWITCH_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 switch."""
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([VultrSwitch(vultr, subscription, name)], True)
66 
67 
69  """Representation of a Vultr subscription switch."""
70 
71  def __init__(self, vultr, subscription, name):
72  """Initialize a new Vultr switch."""
73  self._vultr_vultr = vultr
74  self._name_name = name
75 
76  self.subscriptionsubscription = subscription
77  self.datadata = None
78 
79  @property
80  def name(self):
81  """Return the name of the switch."""
82  try:
83  return self._name_name.format(self.datadata["label"])
84  except (TypeError, KeyError):
85  return self._name_name
86 
87  @property
88  def is_on(self):
89  """Return true if switch is on."""
90  return self.datadata["power_status"] == "running"
91 
92  @property
93  def icon(self):
94  """Return the icon of this server."""
95  return "mdi:server" if self.is_onis_onis_on else "mdi:server-off"
96 
97  @property
99  """Return the state attributes of the Vultr subscription."""
100  return {
101  ATTR_ALLOWED_BANDWIDTH: self.datadata.get("allowed_bandwidth_gb"),
102  ATTR_AUTO_BACKUPS: self.datadata.get("auto_backups"),
103  ATTR_COST_PER_MONTH: self.datadata.get("cost_per_month"),
104  ATTR_CREATED_AT: self.datadata.get("date_created"),
105  ATTR_DISK: self.datadata.get("disk"),
106  ATTR_IPV4_ADDRESS: self.datadata.get("main_ip"),
107  ATTR_IPV6_ADDRESS: self.datadata.get("v6_main_ip"),
108  ATTR_MEMORY: self.datadata.get("ram"),
109  ATTR_OS: self.datadata.get("os"),
110  ATTR_REGION: self.datadata.get("location"),
111  ATTR_SUBSCRIPTION_ID: self.datadata.get("SUBID"),
112  ATTR_SUBSCRIPTION_NAME: self.datadata.get("label"),
113  ATTR_VCPUS: self.datadata.get("vcpu_count"),
114  }
115 
116  def turn_on(self, **kwargs: Any) -> None:
117  """Boot-up the subscription."""
118  if self.datadata["power_status"] != "running":
119  self._vultr_vultr.start(self.subscriptionsubscription)
120 
121  def turn_off(self, **kwargs: Any) -> None:
122  """Halt the subscription."""
123  if self.datadata["power_status"] == "running":
124  self._vultr_vultr.halt(self.subscriptionsubscription)
125 
126  def update(self) -> None:
127  """Get the latest data from the device and update the data."""
128  self._vultr_vultr.update()
129  self.datadata = self._vultr_vultr.data[self.subscriptionsubscription]
def __init__(self, vultr, subscription, name)
Definition: switch.py:71
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)
Definition: switch.py:54