Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for showing values from Dweet.io."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import json
7 import logging
8 
9 import dweepy
10 import voluptuous as vol
11 
13  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
14  SensorEntity,
15 )
16 from homeassistant.const import (
17  CONF_DEVICE,
18  CONF_NAME,
19  CONF_UNIT_OF_MEASUREMENT,
20  CONF_VALUE_TEMPLATE,
21 )
22 from homeassistant.core import HomeAssistant
24 from homeassistant.helpers.entity_platform import AddEntitiesCallback
25 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
26 
27 _LOGGER = logging.getLogger(__name__)
28 
29 DEFAULT_NAME = "Dweet.io Sensor"
30 
31 SCAN_INTERVAL = timedelta(minutes=1)
32 
33 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
34  {
35  vol.Required(CONF_DEVICE): cv.string,
36  vol.Required(CONF_VALUE_TEMPLATE): cv.template,
37  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
38  vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
39  }
40 )
41 
42 
44  hass: HomeAssistant,
45  config: ConfigType,
46  add_entities: AddEntitiesCallback,
47  discovery_info: DiscoveryInfoType | None = None,
48 ) -> None:
49  """Set up the Dweet sensor."""
50  name = config.get(CONF_NAME)
51  device = config.get(CONF_DEVICE)
52  value_template = config.get(CONF_VALUE_TEMPLATE)
53  unit = config.get(CONF_UNIT_OF_MEASUREMENT)
54 
55  try:
56  content = json.dumps(dweepy.get_latest_dweet_for(device)[0]["content"])
57  except dweepy.DweepyError:
58  _LOGGER.error("Device/thing %s could not be found", device)
59  return
60 
61  if value_template and value_template.render_with_possible_json_value(content) == "":
62  _LOGGER.error("%s was not found", value_template)
63  return
64 
65  dweet = DweetData(device)
66 
67  add_entities([DweetSensor(hass, dweet, name, value_template, unit)], True)
68 
69 
71  """Representation of a Dweet sensor."""
72 
73  def __init__(self, hass, dweet, name, value_template, unit_of_measurement):
74  """Initialize the sensor."""
75  self.hasshasshass = hass
76  self.dweetdweet = dweet
77  self._name_name = name
78  self._value_template_value_template = value_template
79  self._state_state = None
80  self._unit_of_measurement_unit_of_measurement = unit_of_measurement
81 
82  @property
83  def name(self):
84  """Return the name of the sensor."""
85  return self._name_name
86 
87  @property
89  """Return the unit the value is expressed in."""
90  return self._unit_of_measurement_unit_of_measurement
91 
92  @property
93  def native_value(self):
94  """Return the state."""
95  return self._state_state
96 
97  def update(self) -> None:
98  """Get the latest data from REST API."""
99  self.dweetdweet.update()
100 
101  if self.dweetdweet.data is None:
102  self._state_state = None
103  else:
104  values = json.dumps(self.dweetdweet.data[0]["content"])
105  self._state_state = self._value_template_value_template.render_with_possible_json_value(
106  values, None
107  )
108 
109 
110 class DweetData:
111  """The class for handling the data retrieval."""
112 
113  def __init__(self, device):
114  """Initialize the sensor."""
115  self._device_device = device
116  self.datadata = None
117 
118  def update(self):
119  """Get the latest data from Dweet.io."""
120  try:
121  self.datadata = dweepy.get_latest_dweet_for(self._device_device)
122  except dweepy.DweepyError:
123  _LOGGER.warning("Device %s doesn't contain any data", self._device_device)
124  self.datadata = None
def __init__(self, hass, dweet, name, value_template, unit_of_measurement)
Definition: sensor.py:73
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:48
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40