File: device_helper.py

package info (click to toggle)
python-yolink-api 0.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 184 kB
  • sloc: python: 1,146; makefile: 2
file content (113 lines) | stat: -rw-r--r-- 3,198 bytes parent folder | download
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