1 """Support for QVR Pro NVR software by QNAP."""
5 from pyqvrpro
import Client
6 from pyqvrpro.client
import AuthenticationError, InsufficientPermissionsError
7 from requests.exceptions
import ConnectionError
as RequestsConnectionError
8 import voluptuous
as vol
23 CONF_EXCLUDE_CHANNELS,
31 SERVICE_CHANNEL_GUID =
"guid"
33 _LOGGER = logging.getLogger(__name__)
35 CONFIG_SCHEMA = vol.Schema(
39 vol.Required(CONF_HOST): cv.string,
40 vol.Required(CONF_USERNAME): cv.string,
41 vol.Required(CONF_PASSWORD): cv.string,
42 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
43 vol.Optional(CONF_EXCLUDE_CHANNELS, default=[]): vol.All(
44 cv.ensure_list_csv, [cv.positive_int]
49 extra=vol.ALLOW_EXTRA,
52 SERVICE_CHANNEL_RECORD_SCHEMA = vol.Schema(
53 {vol.Required(SERVICE_CHANNEL_GUID): cv.string}
57 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
58 """Set up the QVR Pro component."""
60 user = conf[CONF_USERNAME]
61 password = conf[CONF_PASSWORD]
62 host = conf[CONF_HOST]
63 port = conf[CONF_PORT]
64 excluded_channels = conf[CONF_EXCLUDE_CHANNELS]
67 qvrpro = Client(user, password, host, port=port)
69 channel_resp = qvrpro.get_channel_list()
71 except InsufficientPermissionsError:
72 _LOGGER.error(
"User must have Surveillance Management permission")
74 except AuthenticationError:
75 _LOGGER.error(
"Authentication failed")
77 except RequestsConnectionError:
78 _LOGGER.error(
"Error connecting to QVR server")
83 for channel
in channel_resp[
"channels"]:
84 if channel[
"channel_index"] + 1
in excluded_channels:
87 channels.append(channel)
89 hass.data[DOMAIN] = {
"channels": channels,
"client": qvrpro}
94 def handle_start_record(call: ServiceCall) ->
None:
95 guid = call.data[SERVICE_CHANNEL_GUID]
96 qvrpro.start_recording(guid)
98 def handle_stop_record(call: ServiceCall) ->
None:
99 guid = call.data[SERVICE_CHANNEL_GUID]
100 qvrpro.stop_recording(guid)
102 hass.services.register(
104 SERVICE_START_RECORD,
106 schema=SERVICE_CHANNEL_RECORD_SCHEMA,
108 hass.services.register(
112 schema=SERVICE_CHANNEL_RECORD_SCHEMA,
bool setup(HomeAssistant hass, ConfigType config)
None load_platform(core.HomeAssistant hass, Platform|str component, str platform, DiscoveryInfoType|None discovered, ConfigType hass_config)