Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for displaying details about a Gitter.im chat room."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 from gitterpy.client import GitterClient
8 from gitterpy.errors import GitterRoomError, GitterTokenError
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
13  SensorEntity,
14 )
15 from homeassistant.const import CONF_API_KEY, CONF_NAME, CONF_ROOM
16 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
20 
21 _LOGGER = logging.getLogger(__name__)
22 
23 ATTR_MENTION = "mention"
24 ATTR_ROOM = "room"
25 ATTR_USERNAME = "username"
26 
27 DEFAULT_NAME = "Gitter messages"
28 DEFAULT_ROOM = "home-assistant/home-assistant"
29 
30 
31 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
32  {
33  vol.Required(CONF_API_KEY): cv.string,
34  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
35  vol.Optional(CONF_ROOM, default=DEFAULT_ROOM): cv.string,
36  }
37 )
38 
39 
41  hass: HomeAssistant,
42  config: ConfigType,
43  add_entities: AddEntitiesCallback,
44  discovery_info: DiscoveryInfoType | None = None,
45 ) -> None:
46  """Set up the Gitter sensor."""
47 
48  name = config.get(CONF_NAME)
49  api_key = config.get(CONF_API_KEY)
50  room = config.get(CONF_ROOM)
51 
52  gitter = GitterClient(api_key)
53  try:
54  username = gitter.auth.get_my_id["name"]
55  except GitterTokenError:
56  _LOGGER.error("Token is not valid")
57  return
58 
59  add_entities([GitterSensor(gitter, room, name, username)], True)
60 
61 
63  """Representation of a Gitter sensor."""
64 
65  _attr_icon = "mdi:message-cog"
66 
67  def __init__(self, data, room, name, username):
68  """Initialize the sensor."""
69  self._name_name = name
70  self._data_data = data
71  self._room_room = room
72  self._username_username = username
73  self._state_state = None
74  self._mention_mention = 0
75  self._unit_of_measurement_unit_of_measurement = "Msg"
76 
77  @property
78  def name(self):
79  """Return the name of the sensor."""
80  return self._name_name
81 
82  @property
83  def native_value(self):
84  """Return the state of the sensor."""
85  return self._state_state
86 
87  @property
89  """Return the unit the value is expressed in."""
90  return self._unit_of_measurement_unit_of_measurement
91 
92  @property
94  """Return the state attributes."""
95  return {
96  ATTR_USERNAME: self._username_username,
97  ATTR_ROOM: self._room_room,
98  ATTR_MENTION: self._mention_mention,
99  }
100 
101  def update(self) -> None:
102  """Get the latest data and updates the state."""
103 
104  try:
105  data = self._data_data.user.unread_items(self._room_room)
106  except GitterRoomError as error:
107  _LOGGER.error(error)
108  return
109 
110  if "error" not in data:
111  self._mention_mention = len(data["mention"])
112  self._state_state = len(data["chat"])
113  else:
114  _LOGGER.error("Not joined: %s", self._room_room)
def __init__(self, data, room, name, username)
Definition: sensor.py:67
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:45
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40