This repository has been archived by the owner on Dec 21, 2022. It is now read-only.
forked from home-assistant/core
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add BeeWi SmartClim BLE sensors (home-assistant#26174)
* Add BeeWi SmartClim BLE temperature and humidity sensor * Update missing CODEOWNERS and .coveragerc files * Updated requirements file * Update documentation * Fixed requested changes and decoupled IO library * Add unique_id property * Improve unique_id
- Loading branch information
1 parent
b542676
commit 1617c2c
Showing
6 changed files
with
126 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
"""The beewi_smartclim component.""" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
{ | ||
"domain": "beewi_smartclim", | ||
"name": "BeeWi SmartClim BLE sensor", | ||
"documentation": "https://www.home-assistant.io/components/beewi_smartclim", | ||
"requirements": [ | ||
"beewi_smartclim==0.0.7" | ||
], | ||
"dependencies": [], | ||
"codeowners": [ | ||
"@alemuro" | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
"""Platform for beewi_smartclim integration.""" | ||
import logging | ||
|
||
from beewi_smartclim import BeewiSmartClimPoller | ||
import voluptuous as vol | ||
|
||
from homeassistant.components.sensor import PLATFORM_SCHEMA | ||
import homeassistant.helpers.config_validation as cv | ||
from homeassistant.const import ( | ||
CONF_NAME, | ||
CONF_MAC, | ||
TEMP_CELSIUS, | ||
DEVICE_CLASS_HUMIDITY, | ||
DEVICE_CLASS_TEMPERATURE, | ||
DEVICE_CLASS_BATTERY, | ||
) | ||
from homeassistant.helpers.entity import Entity | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
# Default values | ||
DEFAULT_NAME = "BeeWi SmartClim" | ||
|
||
# Sensor config | ||
SENSOR_TYPES = [ | ||
[DEVICE_CLASS_TEMPERATURE, "Temperature", TEMP_CELSIUS], | ||
[DEVICE_CLASS_HUMIDITY, "Humidity", "%"], | ||
[DEVICE_CLASS_BATTERY, "Battery", "%"], | ||
] | ||
|
||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( | ||
{ | ||
vol.Required(CONF_MAC): cv.string, | ||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, | ||
} | ||
) | ||
|
||
|
||
def setup_platform(hass, config, add_entities, discovery_info=None): | ||
"""Set up the beewi_smartclim platform.""" | ||
|
||
mac = config[CONF_MAC] | ||
prefix = config[CONF_NAME] | ||
poller = BeewiSmartClimPoller(mac) | ||
|
||
sensors = [] | ||
|
||
for sensor_type in SENSOR_TYPES: | ||
device = sensor_type[0] | ||
name = sensor_type[1] | ||
unit = sensor_type[2] | ||
# `prefix` is the name configured by the user for the sensor, we're appending | ||
# the device type at the end of the name (garden -> garden temperature) | ||
if prefix: | ||
name = f"{prefix} {name}" | ||
|
||
sensors.append(BeewiSmartclimSensor(poller, name, mac, device, unit)) | ||
|
||
add_entities(sensors) | ||
|
||
|
||
class BeewiSmartclimSensor(Entity): | ||
"""Representation of a Sensor.""" | ||
|
||
def __init__(self, poller, name, mac, device, unit): | ||
"""Initialize the sensor.""" | ||
self._poller = poller | ||
self._name = name | ||
self._mac = mac | ||
self._device = device | ||
self._unit = unit | ||
self._state = None | ||
|
||
@property | ||
def name(self): | ||
"""Return the name of the sensor.""" | ||
return self._name | ||
|
||
@property | ||
def state(self): | ||
"""Return the state of the sensor. State is returned in Celsius.""" | ||
return self._state | ||
|
||
@property | ||
def device_class(self): | ||
"""Device class of this entity.""" | ||
return self._device | ||
|
||
@property | ||
def unique_id(self): | ||
"""Return a unique, HASS-friendly identifier for this entity.""" | ||
return f"{self._mac}_{self._device}" | ||
|
||
@property | ||
def unit_of_measurement(self): | ||
"""Return the unit of measurement.""" | ||
return self._unit | ||
|
||
def update(self): | ||
"""Fetch new state data from the poller.""" | ||
self._poller.update_sensor() | ||
self._state = None | ||
if self._device == DEVICE_CLASS_TEMPERATURE: | ||
self._state = self._poller.get_temperature() | ||
if self._device == DEVICE_CLASS_HUMIDITY: | ||
self._state = self._poller.get_humidity() | ||
if self._device == DEVICE_CLASS_BATTERY: | ||
self._state = self._poller.get_battery() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters