mirror of
https://github.com/home-assistant/core.git
synced 2025-07-29 08:07:45 +00:00
Add connection control for netgear_lte (#22946)
This commit is contained in:
parent
9007e17c3e
commit
d0f9595ad9
@ -35,11 +35,18 @@ DATA_KEY = 'netgear_lte'
|
|||||||
EVENT_SMS = 'netgear_lte_sms'
|
EVENT_SMS = 'netgear_lte_sms'
|
||||||
|
|
||||||
SERVICE_DELETE_SMS = 'delete_sms'
|
SERVICE_DELETE_SMS = 'delete_sms'
|
||||||
|
SERVICE_SET_OPTION = 'set_option'
|
||||||
|
SERVICE_CONNECT_LTE = 'connect_lte'
|
||||||
|
|
||||||
ATTR_HOST = 'host'
|
ATTR_HOST = 'host'
|
||||||
ATTR_SMS_ID = 'sms_id'
|
ATTR_SMS_ID = 'sms_id'
|
||||||
ATTR_FROM = 'from'
|
ATTR_FROM = 'from'
|
||||||
ATTR_MESSAGE = 'message'
|
ATTR_MESSAGE = 'message'
|
||||||
|
ATTR_FAILOVER = 'failover'
|
||||||
|
ATTR_AUTOCONNECT = 'autoconnect'
|
||||||
|
|
||||||
|
FAILOVER_MODES = ['auto', 'wire', 'mobile']
|
||||||
|
AUTOCONNECT_MODES = ['never', 'home', 'always']
|
||||||
|
|
||||||
|
|
||||||
NOTIFY_SCHEMA = vol.Schema({
|
NOTIFY_SCHEMA = vol.Schema({
|
||||||
@ -74,10 +81,22 @@ CONFIG_SCHEMA = vol.Schema({
|
|||||||
}, extra=vol.ALLOW_EXTRA)
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
DELETE_SMS_SCHEMA = vol.Schema({
|
DELETE_SMS_SCHEMA = vol.Schema({
|
||||||
vol.Required(ATTR_HOST): cv.string,
|
vol.Optional(ATTR_HOST): cv.string,
|
||||||
vol.Required(ATTR_SMS_ID): vol.All(cv.ensure_list, [cv.positive_int]),
|
vol.Required(ATTR_SMS_ID): vol.All(cv.ensure_list, [cv.positive_int]),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
SET_OPTION_SCHEMA = vol.Schema(
|
||||||
|
vol.All(cv.has_at_least_one_key(ATTR_FAILOVER, ATTR_AUTOCONNECT), {
|
||||||
|
vol.Optional(ATTR_HOST): cv.string,
|
||||||
|
vol.Optional(ATTR_FAILOVER): vol.In(FAILOVER_MODES),
|
||||||
|
vol.Optional(ATTR_AUTOCONNECT): vol.In(AUTOCONNECT_MODES),
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
CONNECT_LTE_SCHEMA = vol.Schema({
|
||||||
|
vol.Optional(ATTR_HOST): cv.string,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
class ModemData:
|
class ModemData:
|
||||||
@ -116,7 +135,11 @@ class LTEData:
|
|||||||
|
|
||||||
def get_modem_data(self, config):
|
def get_modem_data(self, config):
|
||||||
"""Get modem_data for the host in config."""
|
"""Get modem_data for the host in config."""
|
||||||
return self.modem_data.get(config[CONF_HOST])
|
if config[CONF_HOST] is not None:
|
||||||
|
return self.modem_data.get(config[CONF_HOST])
|
||||||
|
if len(self.modem_data) != 1:
|
||||||
|
return None
|
||||||
|
return next(iter(self.modem_data.values()))
|
||||||
|
|
||||||
|
|
||||||
async def async_setup(hass, config):
|
async def async_setup(hass, config):
|
||||||
@ -126,24 +149,43 @@ async def async_setup(hass, config):
|
|||||||
hass, cookie_jar=aiohttp.CookieJar(unsafe=True))
|
hass, cookie_jar=aiohttp.CookieJar(unsafe=True))
|
||||||
hass.data[DATA_KEY] = LTEData(websession)
|
hass.data[DATA_KEY] = LTEData(websession)
|
||||||
|
|
||||||
async def delete_sms_handler(service):
|
async def service_handler(service):
|
||||||
"""Apply a service."""
|
"""Apply a service."""
|
||||||
host = service.data[ATTR_HOST]
|
host = service.data.get(ATTR_HOST)
|
||||||
conf = {CONF_HOST: host}
|
conf = {CONF_HOST: host}
|
||||||
modem_data = hass.data[DATA_KEY].get_modem_data(conf)
|
modem_data = hass.data[DATA_KEY].get_modem_data(conf)
|
||||||
|
|
||||||
if not modem_data:
|
if not modem_data:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"%s: host %s unavailable", SERVICE_DELETE_SMS, host)
|
"%s: host %s unavailable", service.service, host)
|
||||||
return
|
return
|
||||||
|
|
||||||
for sms_id in service.data[ATTR_SMS_ID]:
|
if service.service == SERVICE_DELETE_SMS:
|
||||||
await modem_data.modem.delete_sms(sms_id)
|
for sms_id in service.data[ATTR_SMS_ID]:
|
||||||
|
await modem_data.modem.delete_sms(sms_id)
|
||||||
|
elif service.service == SERVICE_SET_OPTION:
|
||||||
|
failover = service.data.get(ATTR_FAILOVER)
|
||||||
|
if failover:
|
||||||
|
await modem_data.modem.set_failover_mode(failover)
|
||||||
|
|
||||||
|
autoconnect = service.data.get(ATTR_AUTOCONNECT)
|
||||||
|
if autoconnect:
|
||||||
|
await modem_data.modem.set_autoconnect_mode(autoconnect)
|
||||||
|
elif service.service == SERVICE_CONNECT_LTE:
|
||||||
|
await modem_data.modem.connect_lte()
|
||||||
|
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
DOMAIN, SERVICE_DELETE_SMS, delete_sms_handler,
|
DOMAIN, SERVICE_DELETE_SMS, service_handler,
|
||||||
schema=DELETE_SMS_SCHEMA)
|
schema=DELETE_SMS_SCHEMA)
|
||||||
|
|
||||||
|
hass.services.async_register(
|
||||||
|
DOMAIN, SERVICE_SET_OPTION, service_handler,
|
||||||
|
schema=SET_OPTION_SCHEMA)
|
||||||
|
|
||||||
|
hass.services.async_register(
|
||||||
|
DOMAIN, SERVICE_CONNECT_LTE, service_handler,
|
||||||
|
schema=CONNECT_LTE_SCHEMA)
|
||||||
|
|
||||||
netgear_lte_config = config[DOMAIN]
|
netgear_lte_config = config[DOMAIN]
|
||||||
|
|
||||||
# Set up each modem
|
# Set up each modem
|
||||||
|
@ -7,3 +7,23 @@ delete_sms:
|
|||||||
sms_id:
|
sms_id:
|
||||||
description: Integer or list of integers with inbox IDs of messages to delete.
|
description: Integer or list of integers with inbox IDs of messages to delete.
|
||||||
example: 7
|
example: 7
|
||||||
|
|
||||||
|
set_option:
|
||||||
|
description: Set options on the modem.
|
||||||
|
fields:
|
||||||
|
host:
|
||||||
|
description: The modem to set options on.
|
||||||
|
example: 192.168.5.1
|
||||||
|
failover:
|
||||||
|
description: Failover mode, auto/wire/mobile.
|
||||||
|
example: auto
|
||||||
|
autoconnect:
|
||||||
|
description: Auto-connect mode, never/home/always.
|
||||||
|
example: home
|
||||||
|
|
||||||
|
connect_lte:
|
||||||
|
description: Ask the modem to establish the LTE connection.
|
||||||
|
fields:
|
||||||
|
host:
|
||||||
|
description: The modem that should connect.
|
||||||
|
example: 192.168.5.1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user