Total Connect Integration Broken?

The Total Connect integration is not able to be configured. “Unknown error occurred” is shown in the GUI after attempting to log in with a username and password. Below is the log. Any thoughts? Thanks!

> Logger: aiohttp.server
> Source: components/totalconnect/config_flow.py:39
> First occurred: 2:07:04 PM (1 occurrences)
> Last logged: 2:07:04 PM
> 
> Error handling request
> Traceback (most recent call last):
>   File "/usr/local/lib/python3.9/site-packages/zeep/loader.py", line 50, in parse_xml
>     return fromstring(
>   File "/usr/local/lib/python3.9/site-packages/defusedxml/lxml.py", line 143, in fromstring
>     rootelement = _etree.fromstring(text, parser, base_url=base_url)
>   File "src/lxml/etree.pyx", line 3237, in lxml.etree.fromstring
>   File "src/lxml/parser.pxi", line 1896, in lxml.etree._parseMemoryDocument
>   File "src/lxml/parser.pxi", line 1784, in lxml.etree._parseDoc
>   File "src/lxml/parser.pxi", line 1141, in lxml.etree._BaseParser._parseDoc
>   File "src/lxml/parser.pxi", line 615, in lxml.etree._ParserContext._handleParseResultDoc
>   File "src/lxml/parser.pxi", line 725, in lxml.etree._handleParseResult
>   File "src/lxml/parser.pxi", line 654, in lxml.etree._raiseParseError
>   File "https://rs.alarmnet.com/TC21api/tc2.asmx?WSDL", line 1
> lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1
> 
> During handling of the above exception, another exception occurred:
> 
> Traceback (most recent call last):
>   File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
>     resp = await self._request_handler(request)
>   File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 499, in _handle
>     resp = await handler(request)
>   File "/usr/local/lib/python3.9/site-packages/aiohttp/web_middlewares.py", line 119, in impl
>     return await handler(request)
>   File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
>     return await handler(request)
>   File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 197, in forwarded_middleware
>     return await handler(request)
>   File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
>     return await handler(request)
>   File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 78, in ban_middleware
>     return await handler(request)
>   File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 144, in auth_middleware
>     return await handler(request)
>   File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 135, in handle
>     result = await result
>   File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 155, in post
>     return await super().post(request, flow_id)
>   File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 63, in wrapper
>     result = await method(view, request, *args, **kwargs)
>   File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 109, in post
>     result = await self._flow_mgr.async_configure(flow_id, data)
>   File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 202, in async_configure
>     result = await self._async_handle_step(flow, cur_step["step_id"], user_input)
>   File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 260, in _async_handle_step
>     result: FlowResult = await getattr(flow, method)(user_input)
>   File "/usr/src/homeassistant/homeassistant/components/totalconnect/config_flow.py", line 39, in async_step_user
>     client = await self.hass.async_add_executor_job(
>   File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
>     result = self.fn(*self.args, **self.kwargs)
>   File "/usr/local/lib/python3.9/site-packages/total_connect_client/TotalConnectClient.py", line 73, in __init__
>     self.soapClient = zeep.Client("https://rs.alarmnet.com/TC21api/tc2.asmx?WSDL")
>   File "/usr/local/lib/python3.9/site-packages/zeep/client.py", line 73, in __init__
>     self.wsdl = Document(wsdl, self.transport, settings=self.settings)
>   File "/usr/local/lib/python3.9/site-packages/zeep/wsdl/wsdl.py", line 92, in __init__
>     self.load(location)
>   File "/usr/local/lib/python3.9/site-packages/zeep/wsdl/wsdl.py", line 97, in load
>     root_definitions = Definition(self, document, self.location)
>   File "/usr/local/lib/python3.9/site-packages/zeep/wsdl/wsdl.py", line 193, in __init__
>     self._load(doc)
>   File "/usr/local/lib/python3.9/site-packages/zeep/wsdl/wsdl.py", line 198, in _load
>     self.parse_types(doc)
>   File "/usr/local/lib/python3.9/site-packages/zeep/wsdl/wsdl.py", line 330, in parse_types
>     self.types.add_documents(schema_nodes, self.location)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/schema.py", line 111, in add_documents
>     document = self.create_new_document(node, location)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/schema.py", line 195, in create_new_document
>     schema.load(self, node)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/schema.py", line 421, in load
>     visitor.visit_schema(node)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 165, in visit_schema
>     self.process(child, parent=node)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 93, in process
>     result = visit_func(self, node, parent)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 615, in visit_complex_type
>     kwargs = self.visit_complex_content(children[0], node)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 659, in visit_complex_content
>     base, element, attributes = self.visit_restriction_complex_content(
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 773, in visit_restriction_complex_content
>     base_type = self._get_type(base_name)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 1204, in _get_type
>     name = self._create_qname(name)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 1226, in _create_qname
>     self.visit_import(import_node, None)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 238, in visit_import
>     schema_node = self._retrieve_data(location, base_url=self.document._location)
>   File "/usr/local/lib/python3.9/site-packages/zeep/xsd/visitor.py", line 1198, in _retrieve_data
>     return load_external(
>   File "/usr/local/lib/python3.9/site-packages/zeep/loader.py", line 80, in load_external
>     return parse_xml(content, transport, base_url, settings=settings)
>   File "/usr/local/lib/python3.9/site-packages/zeep/loader.py", line 58, in parse_xml
>     raise XMLSyntaxError(
> zeep.exceptions.XMLSyntaxError: Invalid XML content received (Start tag expected, '<' not found, line 1, column 1)

That’s also when mine stopped working. I’ve been trying to remove and reinstall the integration but it’s giving “unknown error” when I enter the username and password for it. Still not sure what to do to fix.

@fistowutini Did you ever get this problem sorted out? I’m having the same issue: Total Connect can't sign in after re-adding integration

I did. Turns out having AdGuard on was the killer. Disabling that got it working.

That also seemed to help improve my Belkin Wemo devices that kept going unavailable in HA. Curiously, adding my alarm panel to the exceptions so it wasn’t getting filtered at all did nothing help(I’m just now realizing I didn’t test with HA in Adguard’s exceptions. Might have to test that). I had tried re-renabling AdGuard and it works for a time before eventually disconnecting again. The Wemo devices seem to have trouble sometimes even without AdGuard on.

I haven’t turned on ad guard, so I must have a different issue. Bummer. Thanks for replying, though!

I have run into the same issue. I am getting “Unknown error occurred”. This occurred when trying to remove and add the total connect alarm integration again. To eliminate the possibility of configuration issues, I downloaded the ESXi image of Home Assistant, booted, and tried to add the integration - same issue.

Log Details:
Logger: aiohttp.server
Source: util/async_.py:140
First occurred: 3:13:19 PM (2 occurrences)
Last logged: 3:27:05 PM

Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
    resp = await self._request_handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 499, in _handle
    resp = await handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_middlewares.py", line 119, in impl
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 98, in forwarded_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 78, in ban_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 138, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 135, in handle
    result = await result
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 157, in post
    return await super().post(request, flow_id)
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 62, in wrapper
    result = await method(view, request, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 246, in async_configure
    result = await self._async_handle_step(flow, cur_step["step_id"], user_input)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 320, in _async_handle_step
    result: FlowResult = await getattr(flow, method)(user_input)
  File "/usr/src/homeassistant/homeassistant/components/totalconnect/config_flow.py", line 48, in async_step_user
    return await self.async_step_locations()
  File "/usr/src/homeassistant/homeassistant/components/totalconnect/config_flow.py", line 91, in async_step_locations
    for location_id in self.client.locations:
  File "/usr/local/lib/python3.9/site-packages/total_connect_client/client.py", line 80, in locations
    location.get_partition_details()
  File "/usr/local/lib/python3.9/site-packages/total_connect_client/location.py", line 111, in get_partition_details
    result = self.parent.request("GetPartitionsDetails", (
  File "/usr/local/lib/python3.9/site-packages/total_connect_client/client.py", line 181, in request
    response = self._send_one_request(operation_name, args)
  File "/usr/local/lib/python3.9/site-packages/total_connect_client/client.py", line 161, in _send_one_request
    return zeep.helpers.serialize_object(operation_proxy(*args))
  File "/usr/local/lib/python3.9/site-packages/zeep/proxy.py", line 46, in __call__
    return self._proxy._binding.send(
  File "/usr/local/lib/python3.9/site-packages/zeep/wsdl/bindings/soap.py", line 127, in send
    response = client.transport.post_xml(options["address"], envelope, http_headers)
  File "/usr/local/lib/python3.9/site-packages/zeep/transports.py", line 107, in post_xml
    return self.post(address, message, headers)
  File "/usr/local/lib/python3.9/site-packages/zeep/transports.py", line 73, in post
    response = self.session.post(
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 590, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
  File "/usr/local/lib/python3.9/http/client.py", line 1279, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/local/lib/python3.9/http/client.py", line 1290, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 219, in putrequest
    return _HTTPConnection.putrequest(self, method, url, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 151, in protected_loop_func
    check_loop()
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 140, in check_loop
    raise RuntimeError(
RuntimeError: I/O must be done in the executor; Use `await hass.async_add_executor_job()` at homeassistant/components/totalconnect/config_flow.py, line 91: for location_id in self.client.locations:

2021-11-14 15_27_26-Window

I’m also having this issue. Are there any solutions?

I did get mine working after a totally fresh install of HA.

These steps worked for me, but I’m not 100% sure why:

  1. Create a totally new user in total connect with non-admin permissions.
  2. Log in to TC2 with your new account and set your user code.
  3. Go back to your admin account in TC2 and give the new user a slot on the panel,then sync users, then do a full panel sync.
  4. Add the integration in HA using the new user info from a non-mobile browser session - it always failed for me from the HA app.

Hopefully this helps! It was a super frustrating error.