Merge branch 'localtuya_4.0' of github.com:rospogrigio/localtuya-homeassistant into localtuya_4.0
This commit is contained in:
@@ -5,27 +5,26 @@ import time
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.device_registry import DeviceEntry
|
|
||||||
import homeassistant.helpers.entity_registry as er
|
import homeassistant.helpers.entity_registry as er
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_CLIENT_ID,
|
CONF_CLIENT_ID,
|
||||||
CONF_CLIENT_SECRET,
|
CONF_CLIENT_SECRET,
|
||||||
CONF_REGION,
|
|
||||||
CONF_DEVICE_ID,
|
CONF_DEVICE_ID,
|
||||||
CONF_DEVICES,
|
CONF_DEVICES,
|
||||||
CONF_ENTITIES,
|
CONF_ENTITIES,
|
||||||
CONF_HOST,
|
CONF_HOST,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_PLATFORM,
|
CONF_PLATFORM,
|
||||||
|
CONF_REGION,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
SERVICE_RELOAD,
|
SERVICE_RELOAD,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
|
from homeassistant.helpers.device_registry import DeviceEntry
|
||||||
from homeassistant.helpers.event import async_track_time_interval
|
from homeassistant.helpers.event import async_track_time_interval
|
||||||
|
|
||||||
from .cloud_api import TuyaCloudApi
|
from .cloud_api import TuyaCloudApi
|
||||||
@@ -133,13 +132,11 @@ async def async_setup(hass: HomeAssistant, config: dict):
|
|||||||
# settings triggers a reload of the config entry, which tears down the device
|
# settings triggers a reload of the config entry, which tears down the device
|
||||||
# so no need to connect in that case.
|
# so no need to connect in that case.
|
||||||
if updated:
|
if updated:
|
||||||
_LOGGER.debug("Updating keys for device %s: %s %s",
|
_LOGGER.debug(
|
||||||
device_id, device_ip, product_key
|
"Updating keys for device %s: %s %s", device_id, device_ip, product_key
|
||||||
)
|
|
||||||
new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))
|
|
||||||
hass.config_entries.async_update_entry(
|
|
||||||
entry, data=new_data
|
|
||||||
)
|
)
|
||||||
|
new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))
|
||||||
|
hass.config_entries.async_update_entry(entry, data=new_data)
|
||||||
device = hass.data[DOMAIN][TUYA_DEVICES][device_id]
|
device = hass.data[DOMAIN][TUYA_DEVICES][device_id]
|
||||||
if not device.connected:
|
if not device.connected:
|
||||||
device.async_connect()
|
device.async_connect()
|
||||||
|
@@ -11,18 +11,18 @@ from homeassistant.components.climate import (
|
|||||||
ClimateEntity,
|
ClimateEntity,
|
||||||
)
|
)
|
||||||
from homeassistant.components.climate.const import (
|
from homeassistant.components.climate.const import (
|
||||||
|
CURRENT_HVAC_HEAT,
|
||||||
|
CURRENT_HVAC_IDLE,
|
||||||
HVAC_MODE_AUTO,
|
HVAC_MODE_AUTO,
|
||||||
HVAC_MODE_HEAT,
|
HVAC_MODE_HEAT,
|
||||||
HVAC_MODE_OFF,
|
HVAC_MODE_OFF,
|
||||||
|
PRESET_AWAY,
|
||||||
|
PRESET_ECO,
|
||||||
|
PRESET_HOME,
|
||||||
|
PRESET_NONE,
|
||||||
SUPPORT_PRESET_MODE,
|
SUPPORT_PRESET_MODE,
|
||||||
SUPPORT_TARGET_TEMPERATURE,
|
SUPPORT_TARGET_TEMPERATURE,
|
||||||
SUPPORT_TARGET_TEMPERATURE_RANGE,
|
SUPPORT_TARGET_TEMPERATURE_RANGE,
|
||||||
CURRENT_HVAC_IDLE,
|
|
||||||
CURRENT_HVAC_HEAT,
|
|
||||||
PRESET_NONE,
|
|
||||||
PRESET_ECO,
|
|
||||||
PRESET_AWAY,
|
|
||||||
PRESET_HOME,
|
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_TEMPERATURE,
|
ATTR_TEMPERATURE,
|
||||||
@@ -37,21 +37,21 @@ from homeassistant.const import (
|
|||||||
from .common import LocalTuyaEntity, async_setup_entry
|
from .common import LocalTuyaEntity, async_setup_entry
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_CURRENT_TEMPERATURE_DP,
|
CONF_CURRENT_TEMPERATURE_DP,
|
||||||
CONF_MAX_TEMP_DP,
|
CONF_ECO_DP,
|
||||||
CONF_MIN_TEMP_DP,
|
CONF_ECO_VALUE,
|
||||||
CONF_PRECISION,
|
|
||||||
CONF_TARGET_PRECISION,
|
|
||||||
CONF_TARGET_TEMPERATURE_DP,
|
|
||||||
CONF_TEMPERATURE_STEP,
|
|
||||||
CONF_HVAC_MODE_DP,
|
|
||||||
CONF_HVAC_MODE_SET,
|
|
||||||
CONF_HEURISTIC_ACTION,
|
CONF_HEURISTIC_ACTION,
|
||||||
CONF_HVAC_ACTION_DP,
|
CONF_HVAC_ACTION_DP,
|
||||||
CONF_HVAC_ACTION_SET,
|
CONF_HVAC_ACTION_SET,
|
||||||
CONF_ECO_DP,
|
CONF_HVAC_MODE_DP,
|
||||||
CONF_ECO_VALUE,
|
CONF_HVAC_MODE_SET,
|
||||||
|
CONF_MAX_TEMP_DP,
|
||||||
|
CONF_MIN_TEMP_DP,
|
||||||
|
CONF_PRECISION,
|
||||||
CONF_PRESET_DP,
|
CONF_PRESET_DP,
|
||||||
CONF_PRESET_SET,
|
CONF_PRESET_SET,
|
||||||
|
CONF_TARGET_PRECISION,
|
||||||
|
CONF_TARGET_TEMPERATURE_DP,
|
||||||
|
CONF_TEMPERATURE_STEP,
|
||||||
)
|
)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@@ -3,9 +3,10 @@ import functools
|
|||||||
import hashlib
|
import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import json
|
import json
|
||||||
import requests
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
# Signature algorithm.
|
# Signature algorithm.
|
||||||
def calc_sign(msg, key):
|
def calc_sign(msg, key):
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
"""Code shared between all platforms."""
|
"""Code shared between all platforms."""
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
|
||||||
import time
|
import time
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_DEVICE_ID,
|
CONF_DEVICE_ID,
|
||||||
@@ -16,11 +16,11 @@ from homeassistant.const import (
|
|||||||
CONF_SCAN_INTERVAL,
|
CONF_SCAN_INTERVAL,
|
||||||
)
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.helpers.event import async_track_time_interval
|
|
||||||
from homeassistant.helpers.dispatcher import (
|
from homeassistant.helpers.dispatcher import (
|
||||||
async_dispatcher_connect,
|
async_dispatcher_connect,
|
||||||
async_dispatcher_send,
|
async_dispatcher_send,
|
||||||
)
|
)
|
||||||
|
from homeassistant.helpers.event import async_track_time_interval
|
||||||
from homeassistant.helpers.restore_state import RestoreEntity
|
from homeassistant.helpers.restore_state import RestoreEntity
|
||||||
|
|
||||||
from . import pytuya
|
from . import pytuya
|
||||||
@@ -28,8 +28,8 @@ from .const import (
|
|||||||
ATTR_UPDATED_AT,
|
ATTR_UPDATED_AT,
|
||||||
CONF_LOCAL_KEY,
|
CONF_LOCAL_KEY,
|
||||||
CONF_PROTOCOL_VERSION,
|
CONF_PROTOCOL_VERSION,
|
||||||
DOMAIN,
|
|
||||||
DATA_CLOUD,
|
DATA_CLOUD,
|
||||||
|
DOMAIN,
|
||||||
TUYA_DEVICES,
|
TUYA_DEVICES,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ class TuyaDevice(pytuya.TuyaListener, pytuya.ContextualLogger):
|
|||||||
|
|
||||||
except Exception as e: # pylint: disable=broad-except
|
except Exception as e: # pylint: disable=broad-except
|
||||||
self.exception(f"Connect to {self._dev_config_entry[CONF_HOST]} failed")
|
self.exception(f"Connect to {self._dev_config_entry[CONF_HOST]} failed")
|
||||||
if 'json.decode' in str(type(e)):
|
if "json.decode" in str(type(e)):
|
||||||
await self.update_local_key()
|
await self.update_local_key()
|
||||||
|
|
||||||
if self._interface is not None:
|
if self._interface is not None:
|
||||||
@@ -248,7 +248,7 @@ class TuyaDevice(pytuya.TuyaListener, pytuya.ContextualLogger):
|
|||||||
self._disconnect_task()
|
self._disconnect_task()
|
||||||
self.debug(
|
self.debug(
|
||||||
"Closed connection with device %s.",
|
"Closed connection with device %s.",
|
||||||
self._dev_config_entry[CONF_FRIENDLY_NAME]
|
self._dev_config_entry[CONF_FRIENDLY_NAME],
|
||||||
)
|
)
|
||||||
|
|
||||||
async def set_dp(self, state, dp_index):
|
async def set_dp(self, state, dp_index):
|
||||||
|
@@ -9,6 +9,8 @@ import homeassistant.helpers.entity_registry as er
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from homeassistant import config_entries, core, exceptions
|
from homeassistant import config_entries, core, exceptions
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
CONF_CLIENT_ID,
|
||||||
|
CONF_CLIENT_SECRET,
|
||||||
CONF_DEVICE_ID,
|
CONF_DEVICE_ID,
|
||||||
CONF_DEVICES,
|
CONF_DEVICES,
|
||||||
CONF_ENTITIES,
|
CONF_ENTITIES,
|
||||||
@@ -18,10 +20,8 @@ from homeassistant.const import (
|
|||||||
CONF_MODEL,
|
CONF_MODEL,
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_PLATFORM,
|
CONF_PLATFORM,
|
||||||
CONF_SCAN_INTERVAL,
|
|
||||||
CONF_CLIENT_ID,
|
|
||||||
CONF_CLIENT_SECRET,
|
|
||||||
CONF_REGION,
|
CONF_REGION,
|
||||||
|
CONF_SCAN_INTERVAL,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
)
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
@@ -29,18 +29,18 @@ from homeassistant.core import callback
|
|||||||
from .cloud_api import TuyaCloudApi
|
from .cloud_api import TuyaCloudApi
|
||||||
from .common import pytuya
|
from .common import pytuya
|
||||||
from .const import (
|
from .const import (
|
||||||
|
ATTR_UPDATED_AT,
|
||||||
CONF_ACTION,
|
CONF_ACTION,
|
||||||
CONF_ADD_DEVICE,
|
CONF_ADD_DEVICE,
|
||||||
|
CONF_DPS_STRINGS,
|
||||||
CONF_EDIT_DEVICE,
|
CONF_EDIT_DEVICE,
|
||||||
CONF_SETUP_CLOUD,
|
|
||||||
CONF_LOCAL_KEY,
|
CONF_LOCAL_KEY,
|
||||||
CONF_PRODUCT_NAME,
|
CONF_PRODUCT_NAME,
|
||||||
CONF_PROTOCOL_VERSION,
|
CONF_PROTOCOL_VERSION,
|
||||||
|
CONF_SETUP_CLOUD,
|
||||||
CONF_USER_ID,
|
CONF_USER_ID,
|
||||||
CONF_DPS_STRINGS,
|
|
||||||
ATTR_UPDATED_AT,
|
|
||||||
DATA_DISCOVERY,
|
|
||||||
DATA_CLOUD,
|
DATA_CLOUD,
|
||||||
|
DATA_DISCOVERY,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
PLATFORMS,
|
PLATFORMS,
|
||||||
)
|
)
|
||||||
|
@@ -1,24 +1,14 @@
|
|||||||
"""Diagnostics support for LocalTuya."""
|
"""Diagnostics support for LocalTuya."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET, CONF_DEVICES
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.device_registry import DeviceEntry
|
from homeassistant.helpers.device_registry import DeviceEntry
|
||||||
|
|
||||||
|
from .const import CONF_LOCAL_KEY, CONF_USER_ID, DATA_CLOUD, DOMAIN
|
||||||
from homeassistant.const import (
|
|
||||||
CONF_CLIENT_ID,
|
|
||||||
CONF_CLIENT_SECRET,
|
|
||||||
CONF_DEVICES,
|
|
||||||
)
|
|
||||||
|
|
||||||
from .const import (
|
|
||||||
DOMAIN,
|
|
||||||
DATA_CLOUD,
|
|
||||||
CONF_USER_ID,
|
|
||||||
CONF_LOCAL_KEY,
|
|
||||||
)
|
|
||||||
|
|
||||||
CLOUD_DEVICES = "cloud_devices"
|
CLOUD_DEVICES = "cloud_devices"
|
||||||
DEVICE_CONFIG = "device_config"
|
DEVICE_CONFIG = "device_config"
|
||||||
|
@@ -7,41 +7,40 @@ from homeassistant.components.vacuum import (
|
|||||||
DOMAIN,
|
DOMAIN,
|
||||||
STATE_CLEANING,
|
STATE_CLEANING,
|
||||||
STATE_DOCKED,
|
STATE_DOCKED,
|
||||||
STATE_IDLE,
|
|
||||||
STATE_RETURNING,
|
|
||||||
STATE_PAUSED,
|
|
||||||
STATE_ERROR,
|
STATE_ERROR,
|
||||||
|
STATE_IDLE,
|
||||||
|
STATE_PAUSED,
|
||||||
|
STATE_RETURNING,
|
||||||
SUPPORT_BATTERY,
|
SUPPORT_BATTERY,
|
||||||
SUPPORT_FAN_SPEED,
|
SUPPORT_FAN_SPEED,
|
||||||
|
SUPPORT_LOCATE,
|
||||||
SUPPORT_PAUSE,
|
SUPPORT_PAUSE,
|
||||||
SUPPORT_RETURN_HOME,
|
SUPPORT_RETURN_HOME,
|
||||||
SUPPORT_START,
|
SUPPORT_START,
|
||||||
SUPPORT_STATE,
|
SUPPORT_STATE,
|
||||||
SUPPORT_STATUS,
|
SUPPORT_STATUS,
|
||||||
SUPPORT_STOP,
|
SUPPORT_STOP,
|
||||||
SUPPORT_LOCATE,
|
|
||||||
StateVacuumEntity,
|
StateVacuumEntity,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .common import LocalTuyaEntity, async_setup_entry
|
from .common import LocalTuyaEntity, async_setup_entry
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_POWERGO_DP,
|
|
||||||
CONF_IDLE_STATUS_VALUE,
|
|
||||||
CONF_RETURNING_STATUS_VALUE,
|
|
||||||
CONF_DOCKED_STATUS_VALUE,
|
|
||||||
CONF_BATTERY_DP,
|
CONF_BATTERY_DP,
|
||||||
CONF_MODE_DP,
|
|
||||||
CONF_MODES,
|
|
||||||
CONF_FAN_SPEED_DP,
|
|
||||||
CONF_FAN_SPEEDS,
|
|
||||||
CONF_CLEAN_TIME_DP,
|
|
||||||
CONF_CLEAN_AREA_DP,
|
CONF_CLEAN_AREA_DP,
|
||||||
CONF_CLEAN_RECORD_DP,
|
CONF_CLEAN_RECORD_DP,
|
||||||
CONF_LOCATE_DP,
|
CONF_CLEAN_TIME_DP,
|
||||||
|
CONF_DOCKED_STATUS_VALUE,
|
||||||
|
CONF_FAN_SPEED_DP,
|
||||||
|
CONF_FAN_SPEEDS,
|
||||||
CONF_FAULT_DP,
|
CONF_FAULT_DP,
|
||||||
|
CONF_IDLE_STATUS_VALUE,
|
||||||
|
CONF_LOCATE_DP,
|
||||||
|
CONF_MODE_DP,
|
||||||
|
CONF_MODES,
|
||||||
CONF_PAUSED_STATE,
|
CONF_PAUSED_STATE,
|
||||||
|
CONF_POWERGO_DP,
|
||||||
CONF_RETURN_MODE,
|
CONF_RETURN_MODE,
|
||||||
|
CONF_RETURNING_STATUS_VALUE,
|
||||||
CONF_STOP_STATUS,
|
CONF_STOP_STATUS,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user