mirror of
https://github.com/home-assistant/core.git
synced 2025-08-03 12:45:28 +02:00
Add OpenTherm Gateway binary sensor support.
Fix houndci findings.
This commit is contained in:
134
homeassistant/components/binary_sensor/opentherm_gw.py
Normal file
134
homeassistant/components/binary_sensor/opentherm_gw.py
Normal file
@@ -0,0 +1,134 @@
|
||||
"""
|
||||
Support for OpenTherm Gateway binary sensors.
|
||||
|
||||
For more details about this platform, please refer to the documentation at
|
||||
http://home-assistant.io/components/opentherm_gw/
|
||||
"""
|
||||
import logging
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
BinarySensorDevice, ENTITY_ID_FORMAT)
|
||||
from homeassistant.components.opentherm_gw import (
|
||||
DATA_GW_VARS, DATA_OPENTHERM_GW, SIGNAL_OPENTHERM_GW_UPDATE)
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
from homeassistant.helpers.entity import async_generate_entity_id
|
||||
|
||||
DEVICE_CLASS_COLD = 'cold'
|
||||
DEVICE_CLASS_HEAT = 'heat'
|
||||
DEVICE_CLASS_PROBLEM = 'problem'
|
||||
|
||||
DEPENDENCIES = ['opentherm_gw']
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_platform(hass, config, async_add_entities,
|
||||
discovery_info=None):
|
||||
"""Set up the OpenTherm Gateway binary sensors."""
|
||||
gw_vars = hass.data[DATA_OPENTHERM_GW][DATA_GW_VARS]
|
||||
sensor_info = {
|
||||
# [device_class, friendly_name]
|
||||
gw_vars.DATA_MASTER_CH_ENABLED: [
|
||||
None, "Thermostat Central Heating Support"],
|
||||
gw_vars.DATA_MASTER_DHW_ENABLED: [
|
||||
None, "Thermostat Hot Water Support"],
|
||||
gw_vars.DATA_MASTER_COOLING_ENABLED: [
|
||||
None, "Thermostat Cooling Support"],
|
||||
gw_vars.DATA_MASTER_OTC_ENABLED: [
|
||||
None, "Thermostat Outside Temperature Correction Support"],
|
||||
gw_vars.DATA_MASTER_CH2_ENABLED: [
|
||||
None, "Thermostat Central Heating 2 Support"],
|
||||
gw_vars.DATA_SLAVE_FAULT_IND: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Fault Indication"],
|
||||
gw_vars.DATA_SLAVE_CH_ACTIVE: [
|
||||
DEVICE_CLASS_HEAT, "Boiler Central Heating Status"],
|
||||
gw_vars.DATA_SLAVE_DHW_ACTIVE: [
|
||||
DEVICE_CLASS_HEAT, "Boiler Hot Water Status"],
|
||||
gw_vars.DATA_SLAVE_FLAME_ON: [
|
||||
DEVICE_CLASS_HEAT, "Boiler Flame Status"],
|
||||
gw_vars.DATA_SLAVE_COOLING_ACTIVE: [
|
||||
DEVICE_CLASS_COLD, "Boiler Cooling Status"],
|
||||
gw_vars.DATA_SLAVE_CH2_ACTIVE: [
|
||||
DEVICE_CLASS_HEAT, "Boiler Central Heating 2 Status"],
|
||||
gw_vars.DATA_SLAVE_DIAG_IND: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Diagnostics Indication"],
|
||||
gw_vars.DATA_SLAVE_DHW_PRESENT: [None, "Boiler Hot Water Support"],
|
||||
gw_vars.DATA_SLAVE_CONTROL_TYPE: [None, "Boiler Control Type"],
|
||||
gw_vars.DATA_SLAVE_COOLING_SUPPORTED: [None, "Boiler Cooling Support"],
|
||||
gw_vars.DATA_SLAVE_DHW_CONFIG: [
|
||||
None, "Boiler Hot Water Configuration"],
|
||||
gw_vars.DATA_SLAVE_MASTER_LOW_OFF_PUMP: [
|
||||
None, "Boiler Pump Commands Support"],
|
||||
gw_vars.DATA_SLAVE_CH2_PRESENT: [
|
||||
None, "Boiler Central Heating 2 Support"],
|
||||
gw_vars.DATA_SLAVE_SERVICE_REQ: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Service Required"],
|
||||
gw_vars.DATA_SLAVE_REMOTE_RESET: [None, "Boiler Remote Reset Support"],
|
||||
gw_vars.DATA_SLAVE_LOW_WATER_PRESS: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Low Water Pressure"],
|
||||
gw_vars.DATA_SLAVE_GAS_FAULT: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Gas Fault"],
|
||||
gw_vars.DATA_SLAVE_AIR_PRESS_FAULT: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Air Pressure Fault"],
|
||||
gw_vars.DATA_SLAVE_WATER_OVERTEMP: [
|
||||
DEVICE_CLASS_PROBLEM, "Boiler Water Overtemperature"],
|
||||
gw_vars.DATA_REMOTE_TRANSFER_DHW: [
|
||||
None, "Remote Hot Water Setpoint Transfer Support"],
|
||||
gw_vars.DATA_REMOTE_TRANSFER_MAX_CH: [
|
||||
None, "Remote Maximum Central Heating Setpoint Transfer Support"],
|
||||
gw_vars.DATA_REMOTE_RW_DHW: [
|
||||
None, "Remote Hot Water Setpoint Write Support"],
|
||||
gw_vars.DATA_REMOTE_RW_MAX_CH: [
|
||||
None, "Remote Central Heating Setpoint Write Support"],
|
||||
gw_vars.DATA_ROVRD_MAN_PRIO: [
|
||||
None, "Remote Override Manual Change Priority"],
|
||||
gw_vars.DATA_ROVRD_AUTO_PRIO: [
|
||||
None, "Remote Override Program Change Priority"],
|
||||
}
|
||||
sensors = []
|
||||
for var in discovery_info:
|
||||
device_class = sensor_info[var][0]
|
||||
friendly_name = sensor_info[var][1]
|
||||
sensors.append(OpenThermBinarySensor(hass, var, device_class,
|
||||
friendly_name))
|
||||
async_add_entities(sensors)
|
||||
|
||||
|
||||
class OpenThermBinarySensor(BinarySensorDevice):
|
||||
"""Represent an OpenTherm Gateway binary sensor."""
|
||||
|
||||
def __init__(self, hass, var, device_class, friendly_name):
|
||||
"""Initialize the binary sensor."""
|
||||
self.entity_id = async_generate_entity_id(ENTITY_ID_FORMAT, var,
|
||||
hass=hass)
|
||||
self._var = var
|
||||
self._state = None
|
||||
self._device_class = device_class
|
||||
self._friendly_name = friendly_name
|
||||
|
||||
async def async_added_to_hass(self):
|
||||
"""Subscribe to updates from the component."""
|
||||
_LOGGER.debug(
|
||||
"Added OpenTherm Gateway binary sensor %s", self._friendly_name)
|
||||
async_dispatcher_connect(self.hass, SIGNAL_OPENTHERM_GW_UPDATE,
|
||||
self.receive_report)
|
||||
|
||||
async def receive_report(self, status):
|
||||
"""Handle status updates from the component."""
|
||||
self._state = bool(status.get(self._var))
|
||||
self.async_schedule_update_ha_state()
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
"""Return the friendly name."""
|
||||
return self._friendly_name
|
||||
|
||||
@property
|
||||
def is_on(self):
|
||||
"""Return true if the binary sensor is on."""
|
||||
return self._state
|
||||
|
||||
@property
|
||||
def device_class(self):
|
||||
"""Return the class of this device, from component DEVICE_CLASSES."""
|
||||
return self._device_class
|
@@ -49,6 +49,7 @@ REQUIREMENTS = ['pyotgw==0.1b0']
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup(hass, config):
|
||||
"""Set up the OpenTherm Gateway component."""
|
||||
conf = config.get(DOMAIN)
|
||||
@@ -78,6 +79,7 @@ async def connect_and_subscribe(hass, conf):
|
||||
async_dispatcher_send(hass, SIGNAL_OPENTHERM_GW_UPDATE, status)
|
||||
gateway.subscribe(handle_report)
|
||||
|
||||
|
||||
async def setup_monitored_vars(hass, monitored_vars):
|
||||
"""Setup requested sensors and binary_sensors."""
|
||||
gw_vars = hass.data[DATA_OPENTHERM_GW][DATA_GW_VARS]
|
||||
|
@@ -23,6 +23,7 @@ DEPENDENCIES = ['opentherm_gw']
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_platform(hass, config, async_add_entities,
|
||||
discovery_info=None):
|
||||
"""Set up the OpenTherm Gateway sensors."""
|
||||
@@ -100,9 +101,11 @@ async def async_setup_platform(hass, config, async_add_entities,
|
||||
gw_vars.DATA_OEM_DIAG: [None, None, "OEM Diagnostic Code"],
|
||||
gw_vars.DATA_CH_BURNER_STARTS: [
|
||||
None, None, "Central Heating Burner Starts"],
|
||||
gw_vars.DATA_CH_PUMP_STARTS: [None, None, "Central Heating Pump Starts"],
|
||||
gw_vars.DATA_CH_PUMP_STARTS: [
|
||||
None, None, "Central Heating Pump Starts"],
|
||||
gw_vars.DATA_DHW_PUMP_STARTS: [None, None, "Hot Water Pump Starts"],
|
||||
gw_vars.DATA_DHW_BURNER_STARTS: [None, None, "Hot Water Burner Starts"],
|
||||
gw_vars.DATA_DHW_BURNER_STARTS: [
|
||||
None, None, "Hot Water Burner Starts"],
|
||||
gw_vars.DATA_CH_BURNER_HOURS: [
|
||||
None, UNIT_HOUR, "Central Heating Burner Hours"],
|
||||
gw_vars.DATA_CH_PUMP_HOURS: [
|
||||
@@ -112,8 +115,10 @@ async def async_setup_platform(hass, config, async_add_entities,
|
||||
None, UNIT_HOUR, "Hot Water Burner Hours"],
|
||||
gw_vars.DATA_MASTER_OT_VERSION: [
|
||||
None, None, "Thermostat OpenTherm Version"],
|
||||
gw_vars.DATA_SLAVE_OT_VERSION: [None, None, "Boiler OpenTherm Version"],
|
||||
gw_vars.DATA_MASTER_PRODUCT_TYPE: [None, None, "Thermostat Product Type"],
|
||||
gw_vars.DATA_SLAVE_OT_VERSION: [
|
||||
None, None, "Boiler OpenTherm Version"],
|
||||
gw_vars.DATA_MASTER_PRODUCT_TYPE: [
|
||||
None, None, "Thermostat Product Type"],
|
||||
gw_vars.DATA_MASTER_PRODUCT_VERSION: [
|
||||
None, None, "Thermostat Product Version"],
|
||||
gw_vars.DATA_SLAVE_PRODUCT_TYPE: [None, None, "Boiler Product Type"],
|
||||
|
Reference in New Issue
Block a user