pull/84729/head 2022.12.7
Paulus Schoutsen 2022-12-17 21:01:22 -05:00 committed by GitHub
commit bf66f39ca4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 294 additions and 28 deletions

View File

@ -471,7 +471,9 @@ omit =
homeassistant/components/greenwave/light.py
homeassistant/components/group/notify.py
homeassistant/components/growatt_server/__init__.py
homeassistant/components/growatt_server/const.py
homeassistant/components/growatt_server/sensor.py
homeassistant/components/growatt_server/sensor_types/*
homeassistant/components/gstreamer/media_player.py
homeassistant/components/gtfs/sensor.py
homeassistant/components/guardian/__init__.py

View File

@ -9,7 +9,7 @@
"bleak==0.19.2",
"bleak-retry-connector==2.10.2",
"bluetooth-adapters==0.12.0",
"bluetooth-auto-recovery==1.0.0",
"bluetooth-auto-recovery==1.0.3",
"bluetooth-data-tools==0.3.0",
"dbus-fast==1.75.0"
],

View File

@ -2,7 +2,7 @@
"domain": "frontend",
"name": "Home Assistant Frontend",
"documentation": "https://www.home-assistant.io/integrations/frontend",
"requirements": ["home-assistant-frontend==20221213.0"],
"requirements": ["home-assistant-frontend==20221213.1"],
"dependencies": [
"api",
"auth",

View File

@ -73,7 +73,7 @@
"connectable": false
}
],
"requirements": ["govee-ble==0.19.1"],
"requirements": ["govee-ble==0.19.3"],
"dependencies": ["bluetooth"],
"codeowners": ["@bdraco"],
"iot_class": "local_push"

View File

@ -315,6 +315,25 @@ class GrowattData:
"%s - No drop detected, using API value", entity_description.name
)
# Lifetime total values should always be increasing, they will never reset, however
# the API sometimes returns 0 values when the clock turns to 00:00 local time
# in that scenario we should just return the previous value
# Scenarios:
# 1 - System has a genuine 0 value when it it first commissioned:
# - will return 0 until a non-zero value is registered
# 2 - System has been running fine but temporarily resets to 0 briefly at midnight:
# - will return the previous value
# 3 - HA is restarted during the midnight 'outage' - Not handled:
# - Previous value will not exist meaning 0 will be returned
# - This is an edge case that would be better handled by looking up the previous
# value of the entity from the recorder
if entity_description.never_resets and api_value == 0 and previous_value:
_LOGGER.debug(
"API value is 0, but this value should never reset, returning previous value (%s) instead",
previous_value,
)
return_value = previous_value
self.previous_values[variable] = return_value
return return_value

View File

@ -20,3 +20,4 @@ class GrowattSensorEntityDescription(SensorEntityDescription, GrowattRequiredKey
precision: int | None = None
currency: bool = False
previous_value_drop_threshold: float | None = None
never_resets: bool = False

View File

@ -1,4 +1,8 @@
"""Growatt Sensor definitions for the TLX type."""
"""
Growatt Sensor definitions for the TLX type.
TLX Type is also shown on the UI as: "MIN/MIC/MOD/NEO"
"""
from __future__ import annotations
from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass
@ -7,6 +11,7 @@ from homeassistant.const import (
ELECTRIC_POTENTIAL_VOLT,
ENERGY_KILO_WATT_HOUR,
FREQUENCY_HERTZ,
PERCENTAGE,
POWER_WATT,
TEMP_CELSIUS,
)
@ -29,8 +34,9 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
api_key="eacTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_energy_total_input_1",
@ -38,8 +44,9 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
api_key="epv1Total",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_energy_today_input_1",
@ -80,8 +87,9 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
api_key="epv2Total",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_energy_today_input_2",
@ -116,6 +124,101 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
device_class=SensorDeviceClass.POWER,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_energy_total_input_3",
name="Lifetime total energy input 3",
api_key="epv3Total",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_energy_today_input_3",
name="Energy Today Input 3",
api_key="epv3Today",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_voltage_input_3",
name="Input 3 voltage",
api_key="vpv3",
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
device_class=SensorDeviceClass.VOLTAGE,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_amperage_input_3",
name="Input 3 Amperage",
api_key="ipv3",
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
device_class=SensorDeviceClass.CURRENT,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_wattage_input_3",
name="Input 3 Wattage",
api_key="ppv3",
native_unit_of_measurement=POWER_WATT,
device_class=SensorDeviceClass.POWER,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_energy_total_input_4",
name="Lifetime total energy input 4",
api_key="epv4Total",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_energy_today_input_4",
name="Energy Today Input 4",
api_key="epv4Today",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_voltage_input_4",
name="Input 4 voltage",
api_key="vpv4",
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
device_class=SensorDeviceClass.VOLTAGE,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_amperage_input_4",
name="Input 4 Amperage",
api_key="ipv4",
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
device_class=SensorDeviceClass.CURRENT,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_wattage_input_4",
name="Input 4 Wattage",
api_key="ppv4",
native_unit_of_measurement=POWER_WATT,
device_class=SensorDeviceClass.POWER,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_solar_generation_total",
name="Lifetime total solar energy",
api_key="epvTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_internal_wattage",
name="Internal wattage",
@ -187,4 +290,143 @@ TLX_SENSOR_TYPES: tuple[GrowattSensorEntityDescription, ...] = (
device_class=SensorDeviceClass.TEMPERATURE,
precision=1,
),
GrowattSensorEntityDescription(
key="tlx_all_batteries_discharge_today",
name="All batteries discharged today",
api_key="edischargeToday",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
),
GrowattSensorEntityDescription(
key="tlx_all_batteries_discharge_total",
name="Lifetime total all batteries discharged",
api_key="edischargeTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_battery_1_discharge_w",
name="Battery 1 discharging W",
api_key="bdc1DischargePower",
native_unit_of_measurement=POWER_WATT,
device_class=SensorDeviceClass.POWER,
),
GrowattSensorEntityDescription(
key="tlx_battery_1_discharge_total",
name="Lifetime total battery 1 discharged",
api_key="bdc1DischargeTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_battery_2_discharge_w",
name="Battery 2 discharging W",
api_key="bdc1DischargePower",
native_unit_of_measurement=POWER_WATT,
device_class=SensorDeviceClass.POWER,
),
GrowattSensorEntityDescription(
key="tlx_battery_2_discharge_total",
name="Lifetime total battery 2 discharged",
api_key="bdc1DischargeTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_all_batteries_charge_today",
name="All batteries charged today",
api_key="echargeToday",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
),
GrowattSensorEntityDescription(
key="tlx_all_batteries_charge_total",
name="Lifetime total all batteries charged",
api_key="echargeTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_battery_1_charge_w",
name="Battery 1 charging W",
api_key="bdc1ChargePower",
native_unit_of_measurement=POWER_WATT,
device_class=SensorDeviceClass.POWER,
),
GrowattSensorEntityDescription(
key="tlx_battery_1_charge_total",
name="Lifetime total battery 1 charged",
api_key="bdc1ChargeTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_battery_2_charge_w",
name="Battery 2 charging W",
api_key="bdc1ChargePower",
native_unit_of_measurement=POWER_WATT,
device_class=SensorDeviceClass.POWER,
),
GrowattSensorEntityDescription(
key="tlx_battery_2_charge_total",
name="Lifetime total battery 2 charged",
api_key="bdc1ChargeTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_export_to_grid_today",
name="Export to grid today",
api_key="etoGridToday",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
),
GrowattSensorEntityDescription(
key="tlx_export_to_grid_total",
name="Lifetime total export to grid",
api_key="etoGridTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_load_consumption_today",
name="Load consumption today",
api_key="elocalLoadToday",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
),
GrowattSensorEntityDescription(
key="mix_load_consumption_total",
name="Lifetime total load consumption",
api_key="elocalLoadTotal",
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
never_resets=True,
),
GrowattSensorEntityDescription(
key="tlx_statement_of_charge",
name="Statement of charge (SoC)",
api_key="bmsSoc",
native_unit_of_measurement=PERCENTAGE,
device_class=SensorDeviceClass.BATTERY,
),
)

View File

@ -268,7 +268,7 @@ class KNXCommonFlow(ABC, FlowHandler):
if selected_tunnelling_type == CONF_KNX_TUNNELING_TCP_SECURE:
return self.async_show_menu(
step_id="secure_key_source",
menu_options=["secure_knxkeys", "secure_routing_manual"],
menu_options=["secure_knxkeys", "secure_tunnel_manual"],
)
return self.finish_flow(title=f"Tunneling @ {_host}")

View File

@ -3,7 +3,7 @@
"name": "Local Calendar",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/local_calendar",
"requirements": ["ical==4.2.2"],
"requirements": ["ical==4.2.3"],
"codeowners": ["@allenporter"],
"iot_class": "local_polling",
"loggers": ["ical"]

View File

@ -58,6 +58,8 @@ class PhilipsTVRemote(CoordinatorEntity[PhilipsTVDataUpdateCoordinator], RemoteE
async def async_added_to_hass(self) -> None:
"""Handle being added to hass."""
await super().async_added_to_hass()
if (entry := self.registry_entry) and entry.device_id:
self.async_on_remove(
self._turn_on.async_register(

View File

@ -2,7 +2,7 @@
"domain": "switchbot",
"name": "SwitchBot",
"documentation": "https://www.home-assistant.io/integrations/switchbot",
"requirements": ["PySwitchbot==0.22.0"],
"requirements": ["PySwitchbot==0.23.2"],
"config_flow": true,
"dependencies": ["bluetooth"],
"codeowners": [

View File

@ -98,7 +98,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
# The central coordinator needs to be refreshed first since
# the next two rely on data from it
coordinator_cameras: SynologyDSMCameraUpdateCoordinator | None = None
if SynoSurveillanceStation.CAMERA_API_KEY in available_apis:
if api.surveillance_station is not None:
coordinator_cameras = SynologyDSMCameraUpdateCoordinator(hass, entry, api)
await coordinator_cameras.async_config_entry_first_refresh()

View File

@ -3,7 +3,7 @@
"domain": "tibber",
"name": "Tibber",
"documentation": "https://www.home-assistant.io/integrations/tibber",
"requirements": ["pyTibber==0.26.4"],
"requirements": ["pyTibber==0.26.5"],
"codeowners": ["@danielhiversen"],
"quality_scale": "silver",
"config_flow": true,

View File

@ -8,7 +8,7 @@ from .backports.enum import StrEnum
APPLICATION_NAME: Final = "HomeAssistant"
MAJOR_VERSION: Final = 2022
MINOR_VERSION: Final = 12
PATCH_VERSION: Final = "6"
PATCH_VERSION: Final = "7"
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0)

View File

@ -13,7 +13,7 @@ bcrypt==3.1.7
bleak-retry-connector==2.10.2
bleak==0.19.2
bluetooth-adapters==0.12.0
bluetooth-auto-recovery==1.0.0
bluetooth-auto-recovery==1.0.3
bluetooth-data-tools==0.3.0
certifi>=2021.5.30
ciso8601==2.2.0
@ -22,7 +22,7 @@ dbus-fast==1.75.0
fnvhash==0.1.0
hass-nabucasa==0.61.0
home-assistant-bluetooth==1.8.1
home-assistant-frontend==20221213.0
home-assistant-frontend==20221213.1
httpx==0.23.1
ifaddr==0.1.7
janus==1.0.0

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "homeassistant"
version = "2022.12.6"
version = "2022.12.7"
license = {text = "Apache-2.0"}
description = "Open-source home automation platform running on Python 3."
readme = "README.rst"

View File

@ -37,7 +37,7 @@ PyRMVtransport==0.3.3
PySocks==1.7.1
# homeassistant.components.switchbot
PySwitchbot==0.22.0
PySwitchbot==0.23.2
# homeassistant.components.transport_nsw
PyTransportNSW==0.1.1
@ -450,7 +450,7 @@ bluemaestro-ble==0.2.0
bluetooth-adapters==0.12.0
# homeassistant.components.bluetooth
bluetooth-auto-recovery==1.0.0
bluetooth-auto-recovery==1.0.3
# homeassistant.components.bluetooth
# homeassistant.components.led_ble
@ -796,7 +796,7 @@ googlemaps==2.5.1
goslide-api==0.5.1
# homeassistant.components.govee_ble
govee-ble==0.19.1
govee-ble==0.19.3
# homeassistant.components.remote_rpi_gpio
gpiozero==1.6.2
@ -884,7 +884,7 @@ hole==0.7.0
holidays==0.17.2
# homeassistant.components.frontend
home-assistant-frontend==20221213.0
home-assistant-frontend==20221213.1
# homeassistant.components.home_connect
homeconnect==0.7.2
@ -926,7 +926,7 @@ ibm-watson==5.2.2
ibmiotf==0.3.4
# homeassistant.components.local_calendar
ical==4.2.2
ical==4.2.3
# homeassistant.components.ping
icmplib==3.0
@ -1432,7 +1432,7 @@ pyRFXtrx==0.30.0
pySwitchmate==0.5.1
# homeassistant.components.tibber
pyTibber==0.26.4
pyTibber==0.26.5
# homeassistant.components.dlink
pyW215==0.7.0

View File

@ -33,7 +33,7 @@ PyRMVtransport==0.3.3
PySocks==1.7.1
# homeassistant.components.switchbot
PySwitchbot==0.22.0
PySwitchbot==0.23.2
# homeassistant.components.transport_nsw
PyTransportNSW==0.1.1
@ -364,7 +364,7 @@ bluemaestro-ble==0.2.0
bluetooth-adapters==0.12.0
# homeassistant.components.bluetooth
bluetooth-auto-recovery==1.0.0
bluetooth-auto-recovery==1.0.3
# homeassistant.components.bluetooth
# homeassistant.components.led_ble
@ -600,7 +600,7 @@ google-nest-sdm==2.1.0
googlemaps==2.5.1
# homeassistant.components.govee_ble
govee-ble==0.19.1
govee-ble==0.19.3
# homeassistant.components.gree
greeclimate==1.3.0
@ -664,7 +664,7 @@ hole==0.7.0
holidays==0.17.2
# homeassistant.components.frontend
home-assistant-frontend==20221213.0
home-assistant-frontend==20221213.1
# homeassistant.components.home_connect
homeconnect==0.7.2
@ -691,7 +691,7 @@ iaqualink==0.5.0
ibeacon_ble==1.0.1
# homeassistant.components.local_calendar
ical==4.2.2
ical==4.2.3
# homeassistant.components.ping
icmplib==3.0
@ -1032,7 +1032,7 @@ pyMetno==0.9.0
pyRFXtrx==0.30.0
# homeassistant.components.tibber
pyTibber==0.26.4
pyTibber==0.26.5
# homeassistant.components.nextbus
py_nextbusnext==0.1.5