bosch-thermostat / bosch-thermostat-client-python

Python3 asyncio package to talk to Bosch thermostat devices.
Apache License 2.0
23 stars 20 forks source link

scan/query CT200 B EasyControl sensor #37

Closed bukkideme closed 7 months ago

bukkideme commented 1 year ago

Hi!

Excuse me that i am a Python beginner. I would like to develop a C# lib for this sensor using XMPP protocol. I am looking for any documentation about the Bosch XMPP protocol and how to setup the communication. This is how I found your github page. I have installed latest Python for Windows, and downloaded your source. I try to scan for my CT200 sensor from your Python command line tool, but no success so far. The sensor is reachable via internet, via the installed Android app EasyControl (v4.4.1). The sensor's firmware: 04.02.01

This is what i tried, and failed, see below. (sensitive info replaced by ??? marks)

May I have some help how to fix this, maybe i did not setup the Python environment properly? Besides, are you aware of any documentation for help so i can proceed with C# implementation? But I guess your lib will be a good starting point, i just need to get more familiar with Python, which is also useful anyway :)

Thanks very much! :)

\\bosch_thermostat_client>python bosch_cli.py scan --host ??????? --token ??????? --password "???????????" --protocol XMPP --device EASYCONTROL -d -i
2023-08-09 09:52:37 INFO (MainThread) [__main__] Debug mode active
2023-08-09 09:52:37 INFO (MainThread) [__main__] Running scan
2023-08-09 09:52:37 INFO (MainThread) [__main__] Successfully connected to gateway. Found UUID: None
2023-08-09 09:52:37 ERROR (MainThread) [aioxmpp.node.PresenceManagedClient] main failed
Traceback (most recent call last):
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 837, in _on_main_done
    task.result()
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 1005, in _main
    await self._main_impl()
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 951, in _main_impl
    tls_transport, xmlstream, features = await connect_xmlstream(
                                         ^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 390, in connect_xmlstream
    result = await _try_options(
             ^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 241, in _try_options
    transport, xmlstream, features = await conn.connect(
                                     ^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\connector.py", line 195, in connect
    transport, _ = await ssl_transport.create_starttls_connection(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioopenssl\__init__.py", line 894, in create_starttls_connection
    transport = STARTTLSTransport(loop, sock, protocol,
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioopenssl\__init__.py", line 214, in __init__
    self._initiate_raw()
\\Python\Python311\Lib\site-packages\aioopenssl\__init__.py", line 316, in _initiate_raw
    self._loop.add_reader(self._raw_fd, self._read_ready)
\\Python\Python311\Lib\asyncio\events.py", line 530, in add_reader
    raise NotImplementedError
NotImplementedError
Traceback (most recent call last):
  File "C:\Users\Bükki András\Downloads\bosch-thermostat-client-0.23.2.tar\bosch-thermostat-client-0.23.2\bosch_thermostat_client\bosch_cli.py", line 425, in <module>
    asyncio.get_event_loop().run_until_complete(cli())
                                                ^^^^^
\\Python\Python311\Lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\click\core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\click\decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Bükki András\Downloads\bosch-thermostat-client-0.23.2.tar\bosch-thermostat-client-0.23.2\bosch_thermostat_client\bosch_cli.py", line 103, in wrapper
    return asyncio.run(f(*args, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\asyncio\base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "C:\Users\Bükki András\Downloads\bosch-thermostat-client-0.23.2.tar\bosch-thermostat-client-0.23.2\bosch_thermostat_client\bosch_cli.py", line 271, in scan
    await _scan(gateway, smallscan, output, stdout)
  File "C:\Users\Bükki András\Downloads\bosch-thermostat-client-0.23.2.tar\bosch-thermostat-client-0.23.2\bosch_thermostat_client\bosch_cli.py", line 66, in _scan
    result = await gateway.rawscan()
             ^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\bosch_thermostat_client\gateway\base.py", line 296, in rawscan
    single_scan = await deep_into(root, [], self._connector.get)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\bosch_thermostat_client\helper.py", line 98, in deep_into
    resp = await get(url)
           ^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\bosch_thermostat_client\connectors\xmpp.py", line 94, in get
    data = await self._request(method=GET, path=path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\bosch_thermostat_client\connectors\xmpp.py", line 124, in _request
    await self.start()
\\Python\Python311\Lib\site-packages\bosch_thermostat_client\connectors\xmpp.py", line 113, in start
    self._xmppstream = await self._st.enter_async_context(
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\contextlib.py", line 638, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 1660, in __aenter__
    await conn_future
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 837, in _on_main_done
    task.result()
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 1005, in _main
    await self._main_impl()
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 951, in _main_impl
    tls_transport, xmlstream, features = await connect_xmlstream(
                                         ^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 390, in connect_xmlstream
    result = await _try_options(
             ^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\node.py", line 241, in _try_options
    transport, xmlstream, features = await conn.connect(
                                     ^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioxmpp\connector.py", line 195, in connect
    transport, _ = await ssl_transport.create_starttls_connection(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioopenssl\__init__.py", line 894, in create_starttls_connection
    transport = STARTTLSTransport(loop, sock, protocol,
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
\\Python\Python311\Lib\site-packages\aioopenssl\__init__.py", line 214, in __init__
    self._initiate_raw()
\\Python\Python311\Lib\site-packages\aioopenssl\__init__.py", line 316, in _initiate_raw
    self._loop.add_reader(self._raw_fd, self._read_ready)
\\Python\Python311\Lib\asyncio\events.py", line 530, in add_reader
    raise NotImplementedError
NotImplementedError
2023-08-09 09:52:37 ERROR (MainThread) [asyncio] Future exception was never retrieved
future: <Future finished exception=ConnectionError('stream shut down')>
ConnectionError: stream shut down

C:\Users\Bükki András\Downloads\bosch-thermostat-client-0.23.2.tar\bosch-thermostat-client-0.23.2\bosch_thermostat_client>
pszafer commented 8 months ago

hi, sorry. I missed this issue somehow... Try to install everything in WSL, then inside WSL install this lib. You're missing the newest OpenSSL library.