Merge pull request #42724 from home-assistant/rc

This commit is contained in:
Paulus Schoutsen 2020-11-01 21:29:21 +01:00 committed by GitHub
commit 6c51ff63ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 59 additions and 51 deletions

View File

@ -78,6 +78,7 @@ class CanaryCamera(CoordinatorEntity, Camera):
def __init__(self, hass, coordinator, location_id, device, timeout, ffmpeg_args): def __init__(self, hass, coordinator, location_id, device, timeout, ffmpeg_args):
"""Initialize a Canary security camera.""" """Initialize a Canary security camera."""
super().__init__(coordinator) super().__init__(coordinator)
Camera.__init__(self)
self._ffmpeg = hass.data[DATA_FFMPEG] self._ffmpeg = hass.data[DATA_FFMPEG]
self._ffmpeg_arguments = ffmpeg_args self._ffmpeg_arguments = ffmpeg_args
self._location_id = location_id self._location_id = location_id

View File

@ -2,7 +2,7 @@
"domain": "cloudflare", "domain": "cloudflare",
"name": "Cloudflare", "name": "Cloudflare",
"documentation": "https://www.home-assistant.io/integrations/cloudflare", "documentation": "https://www.home-assistant.io/integrations/cloudflare",
"requirements": ["pycfdns==1.1.1"], "requirements": ["pycfdns==1.2.1"],
"codeowners": ["@ludeeus", "@ctalkington"], "codeowners": ["@ludeeus", "@ctalkington"],
"config_flow": true "config_flow": true
} }

View File

@ -321,7 +321,7 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
"""Return the current temperature.""" """Return the current temperature."""
if self._temp_sensor_device: if self._temp_sensor_device:
device = self._temp_sensor_device.fibaro_device device = self._temp_sensor_device.fibaro_device
if device.properties.heatingThermostatSetpoint: if "heatingThermostatSetpoint" in device.properties:
return float(device.properties.heatingThermostatSetpoint) return float(device.properties.heatingThermostatSetpoint)
return float(device.properties.value) return float(device.properties.value)
return None return None
@ -331,7 +331,7 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
"""Return the temperature we try to reach.""" """Return the temperature we try to reach."""
if self._target_temp_device: if self._target_temp_device:
device = self._target_temp_device.fibaro_device device = self._target_temp_device.fibaro_device
if device.properties.heatingThermostatSetpointFuture: if "heatingThermostatSetpointFuture" in device.properties:
return float(device.properties.heatingThermostatSetpointFuture) return float(device.properties.heatingThermostatSetpointFuture)
return float(device.properties.targetLevel) return float(device.properties.targetLevel)
return None return None

View File

@ -2,6 +2,6 @@
"domain": "geo_rss_events", "domain": "geo_rss_events",
"name": "GeoRSS", "name": "GeoRSS",
"documentation": "https://www.home-assistant.io/integrations/geo_rss_events", "documentation": "https://www.home-assistant.io/integrations/geo_rss_events",
"requirements": ["georss_generic_client==0.3"], "requirements": ["georss_generic_client==0.4"],
"codeowners": ["@exxamalte"] "codeowners": ["@exxamalte"]
} }

View File

@ -9,7 +9,7 @@ from datetime import timedelta
import logging import logging
from georss_client import UPDATE_OK, UPDATE_OK_NO_DATA from georss_client import UPDATE_OK, UPDATE_OK_NO_DATA
from georss_client.generic_feed import GenericFeed from georss_generic_client import GenericFeed
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA

View File

@ -3,7 +3,7 @@
"name": "Lutron Caséta", "name": "Lutron Caséta",
"documentation": "https://www.home-assistant.io/integrations/lutron_caseta", "documentation": "https://www.home-assistant.io/integrations/lutron_caseta",
"requirements": [ "requirements": [
"pylutron-caseta==0.7.0" "pylutron-caseta==0.7.1"
], ],
"codeowners": [ "codeowners": [
"@swails" "@swails"

View File

@ -74,6 +74,14 @@ class EventManager:
async def async_start(self) -> bool: async def async_start(self) -> bool:
"""Start polling events.""" """Start polling events."""
if await self.device.create_pullpoint_subscription(): if await self.device.create_pullpoint_subscription():
# Create subscription manager
self._subscription = self.device.create_subscription_service(
"PullPointSubscription"
)
# Renew immediately
await self.async_renew()
# Initialize events # Initialize events
pullpoint = self.device.create_pullpoint_service() pullpoint = self.device.create_pullpoint_service()
try: try:
@ -87,11 +95,6 @@ class EventManager:
# Parse event initialization # Parse event initialization
await self.async_parse_messages(response.NotificationMessage) await self.async_parse_messages(response.NotificationMessage)
# Create subscription manager
self._subscription = self.device.create_subscription_service(
"PullPointSubscription"
)
self.started = True self.started = True
return True return True

View File

@ -2,6 +2,6 @@
"domain": "rpi_gpio_pwm", "domain": "rpi_gpio_pwm",
"name": "pigpio Daemon PWM LED", "name": "pigpio Daemon PWM LED",
"documentation": "https://www.home-assistant.io/integrations/rpi_gpio_pwm", "documentation": "https://www.home-assistant.io/integrations/rpi_gpio_pwm",
"requirements": ["pwmled==1.5.3"], "requirements": ["pwmled==1.6.6"],
"codeowners": [] "codeowners": []
} }

View File

@ -1,6 +1,7 @@
"""Support for Tasmota sensors.""" """Support for Tasmota sensors."""
from typing import Optional from typing import Optional
from hatasmota import status_sensor
from hatasmota.const import ( from hatasmota.const import (
SENSOR_AMBIENT, SENSOR_AMBIENT,
SENSOR_APPARENT_POWERUSAGE, SENSOR_APPARENT_POWERUSAGE,
@ -162,7 +163,7 @@ class TasmotaSensor(TasmotaAvailability, TasmotaDiscoveryUpdate, Entity):
def entity_registry_enabled_default(self) -> bool: def entity_registry_enabled_default(self) -> bool:
"""Return if the entity should be enabled when first added to the entity registry.""" """Return if the entity should be enabled when first added to the entity registry."""
# Hide status sensors to not overwhelm users # Hide status sensors to not overwhelm users
if self._tasmota_entity.quantity == SENSOR_STATUS_SIGNAL: if self._tasmota_entity.quantity in status_sensor.SENSORS:
return False return False
return True return True

View File

@ -637,7 +637,7 @@ class ZHAGateway:
_LOGGER.debug("Shutting down ZHA ControllerApplication") _LOGGER.debug("Shutting down ZHA ControllerApplication")
for unsubscribe in self._unsubs: for unsubscribe in self._unsubs:
unsubscribe() unsubscribe()
await self.application_controller.shutdown() await self.application_controller.pre_shutdown()
@callback @callback

View File

@ -9,7 +9,7 @@
"zha-quirks==0.0.45", "zha-quirks==0.0.45",
"zigpy-cc==0.5.2", "zigpy-cc==0.5.2",
"zigpy-deconz==0.11.0", "zigpy-deconz==0.11.0",
"zigpy==0.26.0", "zigpy==0.27.0",
"zigpy-xbee==0.13.0", "zigpy-xbee==0.13.0",
"zigpy-zigate==0.6.2", "zigpy-zigate==0.6.2",
"zigpy-znp==0.2.2" "zigpy-znp==0.2.2"

View File

@ -1,7 +1,7 @@
"""Constants used by Home Assistant components.""" """Constants used by Home Assistant components."""
MAJOR_VERSION = 0 MAJOR_VERSION = 0
MINOR_VERSION = 117 MINOR_VERSION = 117
PATCH_VERSION = "1" PATCH_VERSION = "2"
__short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}"
__version__ = f"{__short_version__}.{PATCH_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}"
REQUIRED_PYTHON_VER = (3, 7, 1) REQUIRED_PYTHON_VER = (3, 7, 1)

View File

@ -638,7 +638,7 @@ geojson_client==0.4
geopy==1.21.0 geopy==1.21.0
# homeassistant.components.geo_rss_events # homeassistant.components.geo_rss_events
georss_generic_client==0.3 georss_generic_client==0.4
# homeassistant.components.ign_sismologia # homeassistant.components.ign_sismologia
georss_ign_sismologia_client==0.2 georss_ign_sismologia_client==0.2
@ -1182,7 +1182,7 @@ pushbullet.py==0.11.0
pushover_complete==1.1.1 pushover_complete==1.1.1
# homeassistant.components.rpi_gpio_pwm # homeassistant.components.rpi_gpio_pwm
pwmled==1.5.3 pwmled==1.6.6
# homeassistant.components.august # homeassistant.components.august
py-august==0.25.0 py-august==0.25.0
@ -1288,7 +1288,7 @@ pybotvac==0.0.17
pycarwings2==2.9 pycarwings2==2.9
# homeassistant.components.cloudflare # homeassistant.components.cloudflare
pycfdns==1.1.1 pycfdns==1.2.1
# homeassistant.components.channels # homeassistant.components.channels
pychannels==1.0.0 pychannels==1.0.0
@ -1487,7 +1487,7 @@ pylitejet==0.1
pyloopenergy==0.2.1 pyloopenergy==0.2.1
# homeassistant.components.lutron_caseta # homeassistant.components.lutron_caseta
pylutron-caseta==0.7.0 pylutron-caseta==0.7.1
# homeassistant.components.lutron # homeassistant.components.lutron
pylutron==0.2.5 pylutron==0.2.5
@ -2355,7 +2355,7 @@ zigpy-zigate==0.6.2
zigpy-znp==0.2.2 zigpy-znp==0.2.2
# homeassistant.components.zha # homeassistant.components.zha
zigpy==0.26.0 zigpy==0.27.0
# homeassistant.components.zoneminder # homeassistant.components.zoneminder
zm-py==0.4.0 zm-py==0.4.0

View File

@ -315,7 +315,7 @@ geojson_client==0.4
geopy==1.21.0 geopy==1.21.0
# homeassistant.components.geo_rss_events # homeassistant.components.geo_rss_events
georss_generic_client==0.3 georss_generic_client==0.4
# homeassistant.components.ign_sismologia # homeassistant.components.ign_sismologia
georss_ign_sismologia_client==0.2 georss_ign_sismologia_client==0.2
@ -636,7 +636,7 @@ pyblackbird==0.5
pybotvac==0.0.17 pybotvac==0.0.17
# homeassistant.components.cloudflare # homeassistant.components.cloudflare
pycfdns==1.1.1 pycfdns==1.2.1
# homeassistant.components.cast # homeassistant.components.cast
pychromecast==7.5.1 pychromecast==7.5.1
@ -730,7 +730,7 @@ pylibrespot-java==0.1.0
pylitejet==0.1 pylitejet==0.1
# homeassistant.components.lutron_caseta # homeassistant.components.lutron_caseta
pylutron-caseta==0.7.0 pylutron-caseta==0.7.1
# homeassistant.components.mailgun # homeassistant.components.mailgun
pymailgunner==1.4 pymailgunner==1.4
@ -1124,4 +1124,4 @@ zigpy-zigate==0.6.2
zigpy-znp==0.2.2 zigpy-znp==0.2.2
# homeassistant.components.zha # homeassistant.components.zha
zigpy==0.26.0 zigpy==0.27.0

View File

@ -32,7 +32,7 @@ from .common import (
send_attributes_report, send_attributes_report,
) )
from tests.async_mock import AsyncMock, MagicMock, call, patch from tests.async_mock import AsyncMock, MagicMock, patch
from tests.common import async_capture_events, mock_coro, mock_restore_cache from tests.common import async_capture_events, mock_coro, mock_restore_cache
@ -144,9 +144,10 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device):
DOMAIN, SERVICE_CLOSE_COVER, {"entity_id": entity_id}, blocking=True DOMAIN, SERVICE_CLOSE_COVER, {"entity_id": entity_id}, blocking=True
) )
assert cluster.request.call_count == 1 assert cluster.request.call_count == 1
assert cluster.request.call_args == call( assert cluster.request.call_args[0][0] is False
False, 0x1, (), expect_reply=True, manufacturer=None, tsn=None assert cluster.request.call_args[0][1] == 0x01
) assert cluster.request.call_args[0][2] == ()
assert cluster.request.call_args[1]["expect_reply"] is True
# open from UI # open from UI
with patch( with patch(
@ -156,9 +157,10 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device):
DOMAIN, SERVICE_OPEN_COVER, {"entity_id": entity_id}, blocking=True DOMAIN, SERVICE_OPEN_COVER, {"entity_id": entity_id}, blocking=True
) )
assert cluster.request.call_count == 1 assert cluster.request.call_count == 1
assert cluster.request.call_args == call( assert cluster.request.call_args[0][0] is False
False, 0x0, (), expect_reply=True, manufacturer=None, tsn=None assert cluster.request.call_args[0][1] == 0x00
) assert cluster.request.call_args[0][2] == ()
assert cluster.request.call_args[1]["expect_reply"] is True
# set position UI # set position UI
with patch( with patch(
@ -171,15 +173,11 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device):
blocking=True, blocking=True,
) )
assert cluster.request.call_count == 1 assert cluster.request.call_count == 1
assert cluster.request.call_args == call( assert cluster.request.call_args[0][0] is False
False, assert cluster.request.call_args[0][1] == 0x05
0x5, assert cluster.request.call_args[0][2] == (zigpy.types.uint8_t,)
(zigpy.types.uint8_t,), assert cluster.request.call_args[0][3] == 53
53, assert cluster.request.call_args[1]["expect_reply"] is True
expect_reply=True,
manufacturer=None,
tsn=None,
)
# stop from UI # stop from UI
with patch( with patch(
@ -189,9 +187,10 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device):
DOMAIN, SERVICE_STOP_COVER, {"entity_id": entity_id}, blocking=True DOMAIN, SERVICE_STOP_COVER, {"entity_id": entity_id}, blocking=True
) )
assert cluster.request.call_count == 1 assert cluster.request.call_count == 1
assert cluster.request.call_args == call( assert cluster.request.call_args[0][0] is False
False, 0x2, (), expect_reply=True, manufacturer=None, tsn=None assert cluster.request.call_args[0][1] == 0x02
) assert cluster.request.call_args[0][2] == ()
assert cluster.request.call_args[1]["expect_reply"] is True
# test rejoin # test rejoin
await async_test_rejoin(hass, zigpy_cover_device, [cluster], (1,)) await async_test_rejoin(hass, zigpy_cover_device, [cluster], (1,))

View File

@ -113,6 +113,7 @@ async def test_devices(
0, 0,
expect_reply=True, expect_reply=True,
manufacturer=None, manufacturer=None,
tries=1,
tsn=None, tsn=None,
) )

View File

@ -323,7 +323,7 @@ async def async_test_on_off_from_hass(hass, cluster, entity_id):
assert cluster.request.call_count == 1 assert cluster.request.call_count == 1
assert cluster.request.await_count == 1 assert cluster.request.await_count == 1
assert cluster.request.call_args == call( assert cluster.request.call_args == call(
False, ON, (), expect_reply=True, manufacturer=None, tsn=None False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
await async_test_off_from_hass(hass, cluster, entity_id) await async_test_off_from_hass(hass, cluster, entity_id)
@ -340,7 +340,7 @@ async def async_test_off_from_hass(hass, cluster, entity_id):
assert cluster.request.call_count == 1 assert cluster.request.call_count == 1
assert cluster.request.await_count == 1 assert cluster.request.await_count == 1
assert cluster.request.call_args == call( assert cluster.request.call_args == call(
False, OFF, (), expect_reply=True, manufacturer=None, tsn=None False, OFF, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
@ -360,7 +360,7 @@ async def async_test_level_on_off_from_hass(
assert level_cluster.request.call_count == 0 assert level_cluster.request.call_count == 0
assert level_cluster.request.await_count == 0 assert level_cluster.request.await_count == 0
assert on_off_cluster.request.call_args == call( assert on_off_cluster.request.call_args == call(
False, ON, (), expect_reply=True, manufacturer=None, tsn=None False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
on_off_cluster.request.reset_mock() on_off_cluster.request.reset_mock()
level_cluster.request.reset_mock() level_cluster.request.reset_mock()
@ -373,7 +373,7 @@ async def async_test_level_on_off_from_hass(
assert level_cluster.request.call_count == 1 assert level_cluster.request.call_count == 1
assert level_cluster.request.await_count == 1 assert level_cluster.request.await_count == 1
assert on_off_cluster.request.call_args == call( assert on_off_cluster.request.call_args == call(
False, ON, (), expect_reply=True, manufacturer=None, tsn=None False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
assert level_cluster.request.call_args == call( assert level_cluster.request.call_args == call(
False, False,
@ -383,6 +383,7 @@ async def async_test_level_on_off_from_hass(
100.0, 100.0,
expect_reply=True, expect_reply=True,
manufacturer=None, manufacturer=None,
tries=1,
tsn=None, tsn=None,
) )
on_off_cluster.request.reset_mock() on_off_cluster.request.reset_mock()
@ -396,7 +397,7 @@ async def async_test_level_on_off_from_hass(
assert level_cluster.request.call_count == 1 assert level_cluster.request.call_count == 1
assert level_cluster.request.await_count == 1 assert level_cluster.request.await_count == 1
assert on_off_cluster.request.call_args == call( assert on_off_cluster.request.call_args == call(
False, ON, (), expect_reply=True, manufacturer=None, tsn=None False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
assert level_cluster.request.call_args == call( assert level_cluster.request.call_args == call(
False, False,
@ -406,6 +407,7 @@ async def async_test_level_on_off_from_hass(
1, 1,
expect_reply=True, expect_reply=True,
manufacturer=None, manufacturer=None,
tries=1,
tsn=None, tsn=None,
) )
on_off_cluster.request.reset_mock() on_off_cluster.request.reset_mock()
@ -445,6 +447,7 @@ async def async_test_flash_from_hass(hass, cluster, entity_id, flash):
0, 0,
expect_reply=True, expect_reply=True,
manufacturer=None, manufacturer=None,
tries=1,
tsn=None, tsn=None,
) )

View File

@ -136,7 +136,7 @@ async def test_switch(hass, zha_device_joined_restored, zigpy_device):
) )
assert len(cluster.request.mock_calls) == 1 assert len(cluster.request.mock_calls) == 1
assert cluster.request.call_args == call( assert cluster.request.call_args == call(
False, ON, (), expect_reply=True, manufacturer=None, tsn=None False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
# turn off from HA # turn off from HA
@ -150,7 +150,7 @@ async def test_switch(hass, zha_device_joined_restored, zigpy_device):
) )
assert len(cluster.request.mock_calls) == 1 assert len(cluster.request.mock_calls) == 1
assert cluster.request.call_args == call( assert cluster.request.call_args == call(
False, OFF, (), expect_reply=True, manufacturer=None, tsn=None False, OFF, (), expect_reply=True, manufacturer=None, tries=1, tsn=None
) )
# test joining a new switch to the network and HA # test joining a new switch to the network and HA