core/homeassistant/components/notion/binary_sensor.py

69 lines
2.2 KiB
Python

"""Support for Notion binary sensors."""
import logging
from homeassistant.components.binary_sensor import BinarySensorDevice
from . import (
BINARY_SENSOR_TYPES, SENSOR_BATTERY, SENSOR_DOOR, SENSOR_GARAGE_DOOR,
SENSOR_LEAK, SENSOR_MISSING, SENSOR_SAFE, SENSOR_SLIDING, SENSOR_SMOKE_CO,
SENSOR_WINDOW_HINGED_HORIZONTAL, SENSOR_WINDOW_HINGED_VERTICAL,
NotionEntity)
from .const import DATA_CLIENT, DOMAIN
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass, entry, async_add_entities):
"""Set up Notion sensors based on a config entry."""
notion = hass.data[DOMAIN][DATA_CLIENT][entry.entry_id]
sensor_list = []
for task_id, task in notion.tasks.items():
if task['task_type'] not in BINARY_SENSOR_TYPES:
continue
name, device_class = BINARY_SENSOR_TYPES[task['task_type']]
sensor = notion.sensors[task['sensor_id']]
sensor_list.append(
NotionBinarySensor(
notion,
task_id,
sensor['id'],
sensor['bridge']['id'],
sensor['system_id'],
name,
device_class))
async_add_entities(sensor_list, True)
class NotionBinarySensor(NotionEntity, BinarySensorDevice):
"""Define a Notion sensor."""
@property
def is_on(self):
"""Return whether the sensor is on or off."""
task = self._notion.tasks[self._task_id]
if task['task_type'] == SENSOR_BATTERY:
return self._state != 'battery_good'
if task['task_type'] in (
SENSOR_DOOR, SENSOR_GARAGE_DOOR, SENSOR_SAFE, SENSOR_SLIDING,
SENSOR_WINDOW_HINGED_HORIZONTAL,
SENSOR_WINDOW_HINGED_VERTICAL):
return self._state != 'closed'
if task['task_type'] == SENSOR_LEAK:
return self._state != 'no_leak'
if task['task_type'] == SENSOR_MISSING:
return self._state == 'not_missing'
if task['task_type'] == SENSOR_SMOKE_CO:
return self._state != 'no_alarm'
async def async_update(self):
"""Fetch new state data for the sensor."""
task = self._notion.tasks[self._task_id]
self._state = task['status']['value']