-
Notifications
You must be signed in to change notification settings - Fork 156
/
__init__.py
105 lines (98 loc) · 3.72 KB
/
__init__.py
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
"""Config schemas and validation."""
import voluptuous as vol
from zigpy.config.defaults import (
CONF_NWK_CHANNEL_DEFAULT,
CONF_NWK_CHANNELS_DEFAULT,
CONF_NWK_EXTENDED_PAN_ID_DEFAULT,
CONF_NWK_KEY_DEFAULT,
CONF_NWK_KEY_SEQ_DEFAULT,
CONF_NWK_PAN_ID_DEFAULT,
CONF_NWK_TC_ADDRESS_DEFAULT,
CONF_NWK_TC_LINK_KEY_DEFAULT,
CONF_NWK_UPDATE_ID_DEFAULT,
CONF_OTA_IKEA_DEFAULT,
CONF_OTA_LEDVANCE_DEFAULT,
CONF_OTA_OTAU_DIR_DEFAULT,
CONF_TOPO_SCAN_ENABLED_DEFAULT,
CONF_TOPO_SCAN_PERIOD_DEFAULT,
CONF_TOPO_SKIP_COORDINATOR_DEFAULT,
)
from zigpy.config.validators import cv_boolean, cv_hex, cv_key
import zigpy.types as t
CONF_DATABASE = "database_path"
CONF_DEVICE = "device"
CONF_DEVICE_PATH = "path"
CONF_NWK = "network"
CONF_NWK_CHANNEL = "channel"
CONF_NWK_CHANNELS = "channels"
CONF_NWK_EXTENDED_PAN_ID = "extended_pan_id"
CONF_NWK_PAN_ID = "pan_id"
CONF_NWK_KEY = "key"
CONF_NWK_KEY_SEQ = "key_sequence_number"
CONF_NWK_TC_ADDRESS = "tc_address"
CONF_NWK_TC_LINK_KEY = "tc_link_key"
CONF_NWK_UPDATE_ID = "update_id"
CONF_OTA = "ota"
CONF_OTA_DIR = "otau_directory"
CONF_OTA_IKEA = "ikea_provider"
CONF_OTA_IKEA_URL = "ikea_update_url"
CONF_OTA_LEDVANCE = "ledvance_provider"
CONF_TOPO_SCAN_PERIOD = "topology_scan_period"
CONF_TOPO_SCAN_ENABLED = "topology_scan_enabled"
CONF_TOPO_SKIP_COORDINATOR = "topology_scan_skip_coordinator"
SCHEMA_DEVICE = vol.Schema({vol.Required(CONF_DEVICE_PATH): str})
SCHEMA_NETWORK = vol.Schema(
{
vol.Optional(CONF_NWK_CHANNEL, default=CONF_NWK_CHANNEL_DEFAULT): vol.All(
cv_hex, vol.Range(min=11, max=26)
),
vol.Optional(CONF_NWK_CHANNELS, default=CONF_NWK_CHANNELS_DEFAULT): vol.Any(
t.Channels, vol.All(list, t.Channels.from_channel_list)
),
vol.Optional(
CONF_NWK_EXTENDED_PAN_ID, default=CONF_NWK_EXTENDED_PAN_ID_DEFAULT
): vol.Any(None, t.ExtendedPanId, t.ExtendedPanId.convert),
vol.Optional(CONF_NWK_KEY, default=CONF_NWK_KEY_DEFAULT): vol.Any(None, cv_key),
vol.Optional(CONF_NWK_KEY_SEQ, default=CONF_NWK_KEY_SEQ_DEFAULT): vol.Range(
min=0, max=255
),
vol.Optional(CONF_NWK_PAN_ID, default=CONF_NWK_PAN_ID_DEFAULT): vol.Any(
None, t.PanId, vol.All(cv_hex, vol.Coerce(t.PanId))
),
vol.Optional(CONF_NWK_TC_ADDRESS, default=CONF_NWK_TC_ADDRESS_DEFAULT): vol.Any(
None, t.EUI64, t.EUI64.convert
),
vol.Optional(
CONF_NWK_TC_LINK_KEY, default=CONF_NWK_TC_LINK_KEY_DEFAULT
): cv_key,
vol.Optional(CONF_NWK_UPDATE_ID, default=CONF_NWK_UPDATE_ID_DEFAULT): vol.All(
cv_hex, vol.Range(min=0, max=255)
),
}
)
SCHEMA_OTA = {
vol.Optional(CONF_OTA_DIR, default=CONF_OTA_OTAU_DIR_DEFAULT): vol.Any(None, str),
vol.Optional(CONF_OTA_IKEA, default=CONF_OTA_IKEA_DEFAULT): cv_boolean,
vol.Optional(CONF_OTA_IKEA_URL): vol.Url(),
vol.Optional(CONF_OTA_LEDVANCE, default=CONF_OTA_LEDVANCE_DEFAULT): cv_boolean,
}
ZIGPY_SCHEMA = vol.Schema(
{
vol.Optional(CONF_DATABASE, default=None): vol.Any(None, str),
vol.Optional(CONF_NWK, default={}): SCHEMA_NETWORK,
vol.Optional(CONF_OTA, default={}): SCHEMA_OTA,
vol.Optional(
CONF_TOPO_SCAN_PERIOD, default=CONF_TOPO_SCAN_PERIOD_DEFAULT
): vol.All(int, vol.Range(min=20)),
vol.Optional(
CONF_TOPO_SCAN_ENABLED, default=CONF_TOPO_SCAN_ENABLED_DEFAULT
): cv_boolean,
vol.Optional(
CONF_TOPO_SKIP_COORDINATOR, default=CONF_TOPO_SKIP_COORDINATOR_DEFAULT
): cv_boolean,
},
extra=vol.ALLOW_EXTRA,
)
CONFIG_SCHEMA = ZIGPY_SCHEMA.extend(
{vol.Required(CONF_DEVICE): SCHEMA_DEVICE}, extra=vol.ALLOW_EXTRA
)