Merge branch 'localtuya_4.0' of github.com:rospogrigio/localtuya-homeassistant into localtuya_4.0

This commit is contained in:
rospogrigio
2022-05-23 13:45:58 +02:00
7 changed files with 53 additions and 66 deletions

View File

@@ -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)) new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))
hass.config_entries.async_update_entry( hass.config_entries.async_update_entry(entry, data=new_data)
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()

View File

@@ -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__)

View File

@@ -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):

View File

@@ -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):

View File

@@ -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,
) )

View File

@@ -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"

View File

@@ -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,
) )