1 """Support for device connected via Lightwave WiFi-link hub."""
5 from lightwave.lightwave
import LWLink
6 import voluptuous
as vol
20 CONF_SERIAL =
"serial"
21 CONF_PROXY_IP =
"proxy_ip"
22 CONF_PROXY_PORT =
"proxy_port"
25 DEFAULT_PROXY_PORT = 7878
27 LIGHTWAVE_LINK = f
"{DOMAIN}_link"
28 LIGHTWAVE_TRV_PROXY = f
"{DOMAIN}_proxy"
29 LIGHTWAVE_TRV_PROXY_PORT = f
"{DOMAIN}_proxy_port"
31 _LOGGER = logging.getLogger(__name__)
34 CONFIG_SCHEMA = vol.Schema(
38 cv.has_at_least_one_key(CONF_LIGHTS, CONF_SWITCHES, CONF_TRV),
40 vol.Required(CONF_HOST): cv.string,
41 vol.Optional(CONF_LIGHTS, default={}): {
42 cv.string: vol.Schema({vol.Required(CONF_NAME): cv.string})
44 vol.Optional(CONF_SWITCHES, default={}): {
45 cv.string: vol.Schema({vol.Required(CONF_NAME): cv.string})
47 vol.Optional(CONF_TRV, default={}): {
49 CONF_PROXY_PORT, default=DEFAULT_PROXY_PORT
51 vol.Optional(CONF_PROXY_IP): cv.string,
52 vol.Required(CONF_TRVS, default={}): {
53 cv.string: vol.Schema(
55 vol.Required(CONF_NAME): cv.string,
56 vol.Required(CONF_SERIAL): cv.string,
65 extra=vol.ALLOW_EXTRA,
68 PLATFORMS = (Platform.CLIMATE, Platform.SENSOR)
71 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
72 """Try to start embedded Lightwave broker."""
73 host = config[DOMAIN][CONF_HOST]
75 hass.data[LIGHTWAVE_LINK] = lwlink
77 if lights := config[DOMAIN][CONF_LIGHTS]:
78 hass.async_create_task(
82 if switches := config[DOMAIN][CONF_SWITCHES]:
83 hass.async_create_task(
87 if trv := config[DOMAIN][CONF_TRV]:
89 proxy_ip = trv.get(CONF_PROXY_IP)
90 proxy_port = trv[CONF_PROXY_PORT]
92 await lwlink.LW_listen()
94 lwlink.set_trv_proxy(proxy_ip, proxy_port)
96 "Proxy no longer required, remove `proxy_ip` from config to use builtin listener"
99 for platform
in PLATFORMS:
100 hass.async_create_task(
bool async_setup(HomeAssistant hass, ConfigType config)
None async_load_platform(core.HomeAssistant hass, Platform|str component, str platform, DiscoveryInfoType|None discovered, ConfigType hass_config)