1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
"""Helper functions for YoLink devices."""
from __future__ import annotations
from .const import CLASS_AD_KEEPALIVE_TIME, CLASS_C_KEEPALIVE_TIME, HUB_KEEPALIVE_TIME
from .const import (
ATTR_DEVICE_LEAK_SENSOR,
ATTR_DEVICE_TH_SENSOR,
ATTR_DEVICE_DOOR_SENSOR,
ATTR_GARAGE_DOOR_CONTROLLER,
ATTR_DEVICE_DIMMER,
ATTR_DEVICE_FINGER,
ATTR_DEVICE_MANIPULATOR,
ATTR_DEVICE_CO_SMOKE_SENSOR,
ATTR_DEVICE_OUTLET,
ATTR_DEVICE_MULTI_OUTLET,
ATTR_DEVICE_SIREN,
ATTR_DEVICE_POWER_FAILURE_ALARM,
ATTR_DEVICE_MOTION_SENSOR,
ATTR_DEVICE_SWITCH,
ATTR_DEVICE_THERMOSTAT,
ATTR_DEVICE_SOIL_TH_SENSOR,
ATTR_DEVICE_LOCK,
ATTR_DEVICE_LOCK_V2,
ATTR_DEVICE_WATER_METER_CONTROLLER,
ATTR_DEVICE_VIBRATION_SENSOR,
ATTR_DEVICE_SMART_REMOTER,
ATTR_DEVICE_HUB,
ATTR_DEVICE_SPEAKER_HUB,
ATTR_DEVICE_WATER_DEPTH_SENSOR,
ATTR_DEVICE_MULTI_WATER_METER_CONTROLLER,
ATTR_DEVICE_SMOKE_ALARM,
ATTR_DEVICE_SPRINKLER,
ATTR_DEVICE_SPRINKLER_V2,
)
def get_net_type(device_type: str, device_model: str) -> str | None:
"""Get device network mode."""
if device_type in [
ATTR_DEVICE_LEAK_SENSOR,
ATTR_DEVICE_DOOR_SENSOR,
ATTR_DEVICE_TH_SENSOR,
ATTR_DEVICE_MOTION_SENSOR,
ATTR_DEVICE_CO_SMOKE_SENSOR,
ATTR_DEVICE_POWER_FAILURE_ALARM,
ATTR_DEVICE_SOIL_TH_SENSOR,
ATTR_DEVICE_VIBRATION_SENSOR,
ATTR_DEVICE_SMART_REMOTER,
ATTR_DEVICE_WATER_DEPTH_SENSOR,
ATTR_DEVICE_SMOKE_ALARM,
]:
if device_model in [
"YS7A02",
"YS8006",
]:
return "D"
return "A"
if device_type in [
ATTR_DEVICE_MANIPULATOR,
ATTR_DEVICE_OUTLET,
ATTR_DEVICE_MULTI_OUTLET,
ATTR_DEVICE_THERMOSTAT,
ATTR_DEVICE_SIREN,
ATTR_DEVICE_SWITCH,
ATTR_GARAGE_DOOR_CONTROLLER,
ATTR_DEVICE_DIMMER,
ATTR_DEVICE_SPRINKLER,
]:
if device_model in [
#
"YS4909",
# Mainpulator(Class D)
"YS5001",
"YS5002",
"YS5003",
"YS5012",
# Switch(Class D)
"YS5709",
# Siren(Class D)
"YS7104",
"YS7105",
"YS7107",
]:
return "D"
return "C"
if device_type in [
ATTR_DEVICE_FINGER,
ATTR_DEVICE_LOCK,
ATTR_DEVICE_LOCK_V2,
ATTR_DEVICE_WATER_METER_CONTROLLER,
ATTR_DEVICE_MULTI_WATER_METER_CONTROLLER,
ATTR_DEVICE_SPRINKLER_V2,
]:
if device_model in ["YS5007"]:
return "A"
return "D"
if device_type in [ATTR_DEVICE_HUB, ATTR_DEVICE_SPEAKER_HUB]:
return "Hub"
return None
def get_keepalive_time(device_type: str, device_model: str) -> int:
"""Get device keepalive time in seconds."""
device_class_mode = get_net_type(device_type, device_model)
if device_class_mode in ["A", "D"]:
return CLASS_AD_KEEPALIVE_TIME
if device_class_mode == "C":
return CLASS_C_KEEPALIVE_TIME
if device_class_mode == "Hub":
return HUB_KEEPALIVE_TIME
|