Skip to content
Closed
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
05041c9
Merge remote-tracking branch 'home-assistant/dev' into dev
Apr 5, 2018
aaa5e5f
Support binary_sensor and device_tracker for HomeKit
Apr 5, 2018
1e4cd78
Line wrap to 79 chars
Apr 5, 2018
af89ce6
Check 'home' for device_tracker for HomeKit
Apr 5, 2018
cacf0e5
Refine params/const based on advice:
Apr 6, 2018
c72faea
Trim trailing whitespace and align hanging indent
Apr 6, 2018
469b7e9
Trim trailing whitespace
Apr 6, 2018
a80f739
Revise param/const/device_class_key based on advice
Apr 6, 2018
4eb721e
Wrap long line and add a blank line
Apr 6, 2018
d10c6cf
Merge remote-tracking branch 'home-assistant/dev' into Yonsm_dev
Apr 6, 2018
ef448c7
Merge remote-tracking branch 'home-assistant/dev' into Yonsm_dev
Apr 6, 2018
3fe9284
Revise const and coding style
Apr 6, 2018
8548761
Update Homekit to 1.1.9 (#13716)
cdce8p Apr 6, 2018
3394916
Update docstrings (#13720)
fabaff Apr 6, 2018
48fe2d1
Add option to ignore availability in google calendar events (#13714)
cgtobi Apr 6, 2018
c77d013
Allow use of date_string in service call (#13256)
bjw-s Apr 6, 2018
262ea14
Add timeout / debounce (for brightness and others) (#13534)
cdce8p Apr 6, 2018
fdf93d1
added support for smappee water sensors (#12831)
hmn Apr 6, 2018
286476f
Initialise filter_sensor with historical values (#13075)
dgomes Apr 7, 2018
58f3690
Fix Gogogate2 'available' attribute (#13728)
dlbroadfoot Apr 7, 2018
669dbe6
Support binary_sensor and device_tracker for HomeKit
Apr 5, 2018
7fa34fe
Line wrap to 79 chars
Apr 5, 2018
050d0d9
Check 'home' for device_tracker for HomeKit
Apr 5, 2018
44436ce
Refine params/const based on advice:
Apr 6, 2018
8af2099
Trim trailing whitespace and align hanging indent
Apr 6, 2018
43c5ea7
Trim trailing whitespace
Apr 6, 2018
82606ae
Revise param/const/device_class_key based on advice
Apr 6, 2018
260a47d
Wrap long line and add a blank line
Apr 6, 2018
73cac24
Revise const and coding style
Apr 6, 2018
51d8e22
Remove should_callback=False for HAP-python 1.1.9
Apr 7, 2018
4e08e1e
Merge remote-tracking branch 'origin/Yonsm_dev' into Yonsm_dev
Apr 7, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions homeassistant/components/homekit/__init__.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,11 @@ def get_accessory(hass, state, aid, config):
return TYPES['HumiditySensor'](hass, state.entity_id, state.name,
aid=aid)

elif state.domain == 'binary_sensor' or state.domain == 'device_tracker':
_LOGGER.debug('Add "%s" as "%s"', state.entity_id, 'BinarySensor')
return TYPES['BinarySensor'](hass, state.entity_id,
state.name, aid=aid)

elif state.domain == 'cover':
# Only add covers that support set_cover_position
features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0)
Expand Down
26 changes: 24 additions & 2 deletions homeassistant/components/homekit/const.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -34,35 +34,48 @@

# #### Services ####
SERV_ACCESSORY_INFO = 'AccessoryInformation'
SERV_CARBON_DIOXIDE_SENSOR = 'CarbonDioxideSensor'
SERV_CARBON_MONOXIDE_SENSOR = 'CarbonMonoxideSensor'
SERV_CONTACT_SENSOR = 'ContactSensor'
SERV_HUMIDITY_SENSOR = 'HumiditySensor'
# CurrentRelativeHumidity | StatusActive, StatusFault, StatusTampered,
# StatusLowBattery, Name
SERV_LEAK_SENSOR = 'LeakSensor'
SERV_LIGHTBULB = 'Lightbulb' # On | Brightness, Hue, Saturation, Name
SERV_MOTION_SENSOR = 'MotionSensor'
SERV_OCCUPANCY_SENSOR = 'OccupancySensor'
SERV_SECURITY_SYSTEM = 'SecuritySystem'
SERV_SMOKE_SENSOR = 'SmokeSensor'
SERV_SWITCH = 'Switch'
SERV_TEMPERATURE_SENSOR = 'TemperatureSensor'
SERV_THERMOSTAT = 'Thermostat'
SERV_WINDOW_COVERING = 'WindowCovering'


# #### Characteristics ####
CHAR_BRIGHTNESS = 'Brightness' # Int | [0, 100]
CHAR_CARBON_DIOXIDE_DETECTED = 'CarbonDioxideDetected'
CHAR_CARBON_MONOXIDE_DETECTED = 'CarbonMonoxideDetected'
CHAR_COLOR_TEMPERATURE = 'ColorTemperature'
CHAR_CONTACT_SENSOR_STATE = 'ContactSensorState'
CHAR_COOLING_THRESHOLD_TEMPERATURE = 'CoolingThresholdTemperature'
CHAR_CURRENT_HEATING_COOLING = 'CurrentHeatingCoolingState'
CHAR_CURRENT_POSITION = 'CurrentPosition'
CHAR_CURRENT_HUMIDITY = 'CurrentRelativeHumidity' # percent
CHAR_CURRENT_POSITION = 'CurrentPosition'
CHAR_CURRENT_SECURITY_STATE = 'SecuritySystemCurrentState'
CHAR_CURRENT_TEMPERATURE = 'CurrentTemperature'
CHAR_HEATING_THRESHOLD_TEMPERATURE = 'HeatingThresholdTemperature'
CHAR_HUE = 'Hue' # arcdegress | [0, 360]
CHAR_LEAK_DETECTED = 'LeakDetected'
CHAR_MANUFACTURER = 'Manufacturer'
CHAR_MODEL = 'Model'
CHAR_MOTION_DETECTED = 'MotionDetected'
CHAR_NAME = 'Name'
CHAR_OCCUPANCY_DETECTED = 'OccupancyDetected'
CHAR_ON = 'On' # boolean
CHAR_POSITION_STATE = 'PositionState'
CHAR_SATURATION = 'Saturation' # percent
CHAR_SERIAL_NUMBER = 'SerialNumber'
CHAR_SMOKE_DETECTED = 'SmokeDetected'
CHAR_TARGET_HEATING_COOLING = 'TargetHeatingCoolingState'
CHAR_TARGET_POSITION = 'TargetPosition'
CHAR_TARGET_SECURITY_STATE = 'SecuritySystemTargetState'
Expand All @@ -71,3 +84,12 @@

# #### Properties ####
PROP_CELSIUS = {'minValue': -273, 'maxValue': 999}

# #### Device Class ####
DEVICE_CLASS_CO2 = 'co2'
DEVICE_CLASS_GAS = 'gas'
DEVICE_CLASS_MOISTURE = 'moisture'
DEVICE_CLASS_MOTION = 'motion'
DEVICE_CLASS_OCCUPANCY = 'occupancy'
DEVICE_CLASS_OPENING = 'opening'
DEVICE_CLASS_SMOKE = 'smoke'
62 changes: 60 additions & 2 deletions homeassistant/components/homekit/type_sensors.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,45 @@
import logging

from homeassistant.const import (
ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS)
ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS,
ATTR_DEVICE_CLASS, STATE_ON, STATE_HOME)

from . import TYPES
from .accessories import HomeAccessory, add_preload_service
from .const import (
CATEGORY_SENSOR, SERV_HUMIDITY_SENSOR, SERV_TEMPERATURE_SENSOR,
CHAR_CURRENT_HUMIDITY, CHAR_CURRENT_TEMPERATURE, PROP_CELSIUS)
CHAR_CURRENT_HUMIDITY, CHAR_CURRENT_TEMPERATURE, PROP_CELSIUS,
DEVICE_CLASS_CO2, SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED,
DEVICE_CLASS_GAS, SERV_CARBON_MONOXIDE_SENSOR,
CHAR_CARBON_MONOXIDE_DETECTED,
DEVICE_CLASS_MOISTURE, SERV_LEAK_SENSOR, CHAR_LEAK_DETECTED,
DEVICE_CLASS_MOTION, SERV_MOTION_SENSOR, CHAR_MOTION_DETECTED,
DEVICE_CLASS_OCCUPANCY, SERV_OCCUPANCY_SENSOR, CHAR_OCCUPANCY_DETECTED,
DEVICE_CLASS_OPENING, SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE,
DEVICE_CLASS_SMOKE, SERV_SMOKE_SENSOR, CHAR_SMOKE_DETECTED)
from .util import convert_to_float, temperature_to_homekit


_LOGGER = logging.getLogger(__name__)


BINARY_SENSOR_SERVICE_MAP = {
DEVICE_CLASS_CO2:
(SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED),
DEVICE_CLASS_GAS:
(SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED),
DEVICE_CLASS_MOISTURE:
(SERV_LEAK_SENSOR, CHAR_LEAK_DETECTED),
DEVICE_CLASS_MOTION:
(SERV_MOTION_SENSOR, CHAR_MOTION_DETECTED),
DEVICE_CLASS_OCCUPANCY:
(SERV_OCCUPANCY_SENSOR, CHAR_OCCUPANCY_DETECTED),
DEVICE_CLASS_OPENING:
(SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE),
DEVICE_CLASS_SMOKE:
(SERV_SMOKE_SENSOR, CHAR_SMOKE_DETECTED)}


@TYPES.register('TemperatureSensor')
class TemperatureSensor(HomeAccessory):
"""Generate a TemperatureSensor accessory for a temperature sensor.
Expand Down Expand Up @@ -75,3 +101,35 @@ def update_state(self, entity_id=None, old_state=None, new_state=None):
self.char_humidity.set_value(humidity, should_callback=False)
_LOGGER.debug('%s: Percent set to %d%%',
self.entity_id, humidity)


@TYPES.register('BinarySensor')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

expected 2 blank lines, found 1

class BinarySensor(HomeAccessory):
"""Generate a BinarySensor accessory as binary sensor."""

def __init__(self, hass, entity_id, name, **kwargs):
"""Initialize a BinarySensor accessory object."""
super().__init__(name, entity_id, CATEGORY_SENSOR, **kwargs)

self.hass = hass
self.entity_id = entity_id

device_class = hass.states.get(entity_id).attributes \
.get(ATTR_DEVICE_CLASS)
service_char = BINARY_SENSOR_SERVICE_MAP[device_class] \
if device_class in BINARY_SENSOR_SERVICE_MAP \
else BINARY_SENSOR_SERVICE_MAP[DEVICE_CLASS_OCCUPANCY]

service = add_preload_service(self, service_char[0])
self.char_detected = service.get_characteristic(service_char[1])
self.char_detected.value = 0

def update_state(self, entity_id=None, old_state=None, new_state=None):
"""Update accessory after state change."""
if new_state is None:
return

state = new_state.state
detected = (state == STATE_ON) or (state == STATE_HOME)
self.char_detected.set_value(detected, should_callback=False)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We just updated HAP-python to 1.1.9. 'Should_callback=False' will no longer be necessary. You probably need to rebase your branch, take take advantage of the update.

_LOGGER.debug('%s: Set to %d', self.entity_id, detected)