Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install Help #22

Closed
simbaja opened this issue Jul 29, 2021 · 69 comments
Closed

Install Help #22

simbaja opened this issue Jul 29, 2021 · 69 comments

Comments

@simbaja
Copy link
Owner

simbaja commented Jul 29, 2021

Thanks to reply.

I make pip install gehomesdk and install sdk

Then nano secrets.py and I use my credentials in SmartHQ app, that in europe is Ge Appliances

And now? How can i launch websocket_example.py where is ?

I can't install locate in home assistant, so i don't know where is this file.

Also, after launch websocket_example.py, I need more something or only my AC on ? So get automatically debug log?

If yes, where can i get it, to open an issue here on github?

Thanks for the support

Originally posted by @RobertusIT in #15 (comment)

@simbaja
Copy link
Owner Author

simbaja commented Jul 29, 2021

@RobertusIT, I created a new issue to help you though this.

first, you'll need to download SmartHQ (https://play.google.com/store/apps/details?id=com.ge.kitchen&hl=it&gl=US) and sign-in using your account. It'll ask you to authorize, then you should see your appliances in this application (hopefully).

secrets.py should be in the examples directory, which is also the location of the websocket_example.py. If you've installed using pip, these files would be in the site-packages directory, I think pip list -v or pip show gehomesdk should give you the install directory.

once you find the install directory, navigate to the examples directory, then create the secrets.py, then run python websocket_example.py. There might be additional packages that are needed depending on what you have installed, but we can work through those as needed.

the output that the example produces should be logged to a file (or copy/pasted), and then you can post that to this issue.

hope this helps.

@RobertusIT
Copy link

Thanks a lot for these more details.

Here there are my track:

➜  ~ **pip list -v**
_gehomesdk         0.3.21      /usr/lib/python3.9/site-packages pip_
Then i go on it:
cd /usr/lib/python3.9/site-packages/gehomesdk

That contain these files:

➜  gehomesdk ls
__init__.py      __pycache__      clients          erd              exception        ge_appliance.py

And inside clients folder, there is websocket_example.py, so i guess that is the examples folder that you mean, but name is clients and not examples. Need to create a folder with examples or is ok don't touch the clients name ?

Inside the clients folder we can see these files with secrets created by me with nano secrets.py that contain:
USERNAME = "mymail@gmail.com"
PASSWORD = "mypass"
About my Ge appliances app

➜  clients ls
__init__.py           async_login_flows.py  ge_client_xmpp.py     **websocket_client.py**
__pycache__           base_client.py        **secrets.py**                 xmpp_client.py
async_helpers.py      const.py              states.py

Now i tried to launch but i have an error:

➜  clients python3 websocket_client.py
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/gehomesdk/clients/websocket_client.py", line 6, in <module>
    from ..erd import ErdCode, ErdCodeType
ImportError: attempted relative import with no known parent package

Same story with python 3.9, In HA seems that are already installed 2 python version by default, infact if I try to write python, i can see two version:

➜  clients python3.9 websocket_client.py
**python3**    **python3.9**
➜  clients python3.9 websocket_client.py
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/gehomesdk/clients/websocket_client.py", line 6, in <module>
    from ..erd import ErdCode, ErdCodeType
ImportError: attempted relative import with no known parent package

@simbaja
Copy link
Owner Author

simbaja commented Jul 29, 2021

My apologies, I thought I packaged the examples as well with the install, I guess not. For now, the easiest way then is to clone the repo to a local folder, there will be an examples folder (you can see it here: https://github.com/simbaja/gehome/tree/master/examples) that you can then add the secrets file and run the example.

In HA, you don't need to use this repository, you can just go to https://github.com/simbaja/ha_components, and place the "ge_home" folder into your custom integrations (or use HACS). The HA component doesn't yet support AC though, so it might not be relevant for you.

@RobertusIT
Copy link

RobertusIT commented Jul 30, 2021

My apologies, I thought I packaged the examples as well with the install, I guess not. For now, the easiest way then is to clone the repo to a local folder, there will be an examples folder (you can see it here: https://github.com/simbaja/gehome/tree/master/examples) that you can then add the secrets file and run the example.

In HA, you don't need to use this repository, you can just go to https://github.com/simbaja/ha_components, and place the "ge_home" folder into your custom integrations (or use HACS). The HA component doesn't yet support AC though, so it might not be relevant for you.

Hi,

no luck for now.

Here, I'm doing what do you suggest, so i download the project in zip, unzip in config HA folder, then in examples folder, i create secrets.py with mail and passwd about ge appliances app, and when i tried to launch websocket_example.py with python, no luck, some errors

➜  config cd
➜  ~ cd config/gehome-master
➜  gehome-master ls
LICENSE      README.md    gehomesdk    setup.py
MANIFEST.in  examples     notes        tests
➜  gehome-master cd examples
➜  examples ls
__init__.py           websocket_example.py
secrets.py            xmpp_example.py
➜  examples python3 websocket_example.py
Traceback (most recent call last):
  File "/config/gehome-master/examples/websocket_example.py", line 13, in <modul       e>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'
➜  examples python3.9 websocket_example.py
Traceback (most recent call last):
  File "/config/gehome-master/examples/websocket_example.py", line 13, in <modul       e>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'

If i launch with ./websocket_example.py

I can see this:

➜  examples ./websocket_example.py

./websocket_example.py: line 6:
Websocket client example

We're going to run the client in a pre-existing event loop.  We're also going to                                                                        register some event callbacks
to update appliances every five minutes and to turn on our oven the first time w                                                                       e see it.  Because that is safe!
: not found
./websocket_example.py: line 8: import: not found
./websocket_example.py: line 9: import: not found
./websocket_example.py: line 10: import: not found
./websocket_example.py: line 11: from: not found
./websocket_example.py: line 12: from: not found
./websocket_example.py: line 13: from: not found
./websocket_example.py: line 15: syntax error: unexpected "("

@simbaja
Copy link
Owner Author

simbaja commented Jul 30, 2021

Although it won't cause an issue, you should probably not put the sdk files in HA's config directory. This is just a low level library that is used by the HA component to provide the HA support. I'd put it somewhere else (perhaps in your home directory or something).

Python is really sensitive about the working directory when looking for imports try from gehome-master and execute python ./examples/websocket_example.py and see if that gets you a little further.

@RobertusIT
Copy link

Although it won't cause an issue, you should probably not put the sdk files in HA's config directory. This is just a low level library that is used by the HA component to provide the HA support. I'd put it somewhere else (perhaps in your home directory or something).

Python is really sensitive about the working directory when looking for imports try from gehome-master and execute python ./examples/websocket_example.py and see if that gets you a little further.

Moved gehome-master ( the project ) from config HA folder, to home, like you suggested.

➜  config mv gehome-master /home
➜  config cd
➜  ~ cd /home
➜  /home ls
gehome-master

Now tried to launch, without success

➜  gehome-master cd examples
➜  examples python3 websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 13, in <module>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'

Tried also with python3.9

➜  examples python3.9 websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 13, in <module>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'

Tried with ./websocket_example.py or xmpp_example.py but same story

➜  examples ./websocket_example.py
./websocket_example.py: line 6:
Websocket client example

We're going to run the client in a pre-existing event loop.  We're also going to                                                                register some event callbacks
to update appliances every five minutes and to turn on our oven the first time w                                                               e see it.  Because that is safe!
: not found
./websocket_example.py: line 8: import: not found
./websocket_example.py: line 9: import: not found
./websocket_example.py: line 10: import: not found
./websocket_example.py: line 11: from: not found
./websocket_example.py: line 12: from: not found
./websocket_example.py: line 13: from: not found
./websocket_example.py: line 15: syntax error: unexpected "("
➜  examples ./xmpp_example.py
./xmpp_example.py: line 6:
XMPP client example

We're going to run the client in a pre-existing event loop.  We're also going to                                                                register some event callbacks
to update appliances every five minutes and to turn on our oven the first time w                                                               e see it.  Because that is safe!
: not found
./xmpp_example.py: line 8: import: not found
./xmpp_example.py: line 9: import: not found
./xmpp_example.py: line 10: import: not found
./xmpp_example.py: line 11: from: not found
./xmpp_example.py: line 12: from: not found
./xmpp_example.py: line 13: syntax error: unexpected "("

Now i have tried like you suggest at the end like execute command, but doesn't exist this command for HA ( seems )

➜  ~ execute python ./home/gehome-master/examples/websocket_example.py
zsh: command not found: execute

@simbaja
Copy link
Owner Author

simbaja commented Jul 30, 2021

Whoops, put the code in the wrong place: from ./home/gehome-master, execute python3 ./examples/websocket_example.py and see if that works.

@RobertusIT
Copy link

Whoops, put the code in the wrong place: from ./home/gehome-master, execute python3 ./examples/websocket_example.py and see if that works.

➜  ~ ls
addons      backup      config      media       secrets.py  share       ssl
➜  ~ cd /home/gehome-master
➜  gehome-master ls
LICENSE      MANIFEST.in  README.md    examples     gehomesdk    notes        setup.py     tests
➜  gehome-master python3 ./examples/websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/./examples/websocket_example.py", line 13, in <module>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'

@simbaja
Copy link
Owner Author

simbaja commented Jul 30, 2021

I'm guessing there's some sort of pathing issue here, so, let's just force it. Add these lines of code to the websocket_example.py right after the comment (before import aiohttp)

import os, sys

#Following lines are for assigning parent directory dynamically.
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

This should add the right path to the python path search list so that it can find things. You should then be able to follow the in comment above #22 (comment)

@RobertusIT
Copy link

image

The new part in websocket_example.py

Then i have tried to launch:

➜  ~ python3 /home/gehome-master/examples/websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 24, in <module>
    from gehomesdk import (
  File "/home/gehome-master/gehomesdk/__init__.py", line 6, in <module>
    from .clients import *
  File "/home/gehome-master/gehomesdk/clients/__init__.py", line 17, in <module>
    from .base_client import GeBaseClient
  File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in <module>
    from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token
  File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in <module>
    from lxml import etree
ModuleNotFoundError: No module named 'lxml'

➜  ~ python3.9 /home/gehome-master/examples/websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 24, in <module>
    from gehomesdk import (
  File "/home/gehome-master/gehomesdk/__init__.py", line 6, in <module>
    from .clients import *
  File "/home/gehome-master/gehomesdk/clients/__init__.py", line 17, in <module>
    from .base_client import GeBaseClient
  File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in <module>
    from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token
  File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in <module>
    from lxml import etree
ModuleNotFoundError: No module named 'lxml'

@simbaja
Copy link
Owner Author

simbaja commented Jul 30, 2021

pip install lxml should resolve that one.

@RobertusIT
Copy link

pip install lxml should resolve that one.

Gave me a lot of error

➜  ~ pip install lxml
Collecting lxml
  Downloading lxml-4.6.3.tar.gz (3.2 MB)
     |████████████████████████████████| 3.2 MB 1.5 MB/s
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0]                                                            = '"'"'/tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d629dd/setup.py                                                           '"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d6                                                           29dd/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.re                                                           ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__                                                           , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-i0elnirm
         cwd: /tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d629dd/
    Complete output (3 lines):
    Building lxml version 4.6.3.
    Building without Cython.
    Error: Please make sure the libxml2 and libxslt development packages are ins                                                           talled.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/e5/21/a2e4517e3d216f                                                           0051687eea3d3317557bde68736f038a3b105ac3809247/lxml-4.6.3.tar.gz#sha256=39b78571                                                           b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468 (from https://pypi.org/                                                           simple/lxml/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4                                                           .*). Command errored out with exit status 1: python setup.py egg_info Check the                                                            logs for full command output.
  Downloading lxml-4.6.2.tar.gz (3.2 MB)
     |████████████████████████████████| 3.2 MB 21.2 MB/s
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0]                                                            = '"'"'/tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a86289/setup.py                                                           '"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a8                                                           6289/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.re                                                           ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__                                                           , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-o2jl7o8z
         cwd: /tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a86289/
    Complete output (3 lines):
    Building lxml version 4.6.2.
    Building without Cython.
    Error: Please make sure the libxml2 and libxslt development packages are ins                                                           talled.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/db/f7/43fecb94d66959                                                           c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz#sha256=cd11c7e8                                                           d21af997ee8079037fff88f16fda188a9776eb4b81c7e4c9c0a7d7fc (from https://pypi.org/                                                           simple/lxml/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4                                                           .*). Command errored out with exit status 1: python setup.py egg_info Check the                                                            logs for full command output.
  Downloading lxml-4.6.1.tar.gz (3.2 MB)
     |████████████████████████████████| 3.2 MB 14.9 MB/s
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0]                                                            = '"'"'/tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9247c/setup.py                                                           '"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9                                                           247c/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.re                                                           ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__                                                           , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-vnqwuctk
         cwd: /tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9247c/
    Complete output (3 lines):
    Building lxml version 4.6.1.
    Building without Cython.
    Error: Please make sure the libxml2 and libxslt development packages are ins                                                           talled.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/c5/2f/a0d8aa3eee6d53                                                           d5723d89e1fc32eee11e76801b424e30b55c7aa6302b01/lxml-4.6.1.tar.gz#sha256=c152b2e9                                                           3b639d1f36ec5a8ca24cde4a8eefb2b6b83668fcd8e83a67badcb367 (from https://pypi.org/                                                           simple/lxml/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4                                                           .*). Command errored out with exit status 1: python setup.py egg_info Check the                                                            logs for full command output.
  Downloading lxml-4.6.0.tar.gz (3.2 MB)
     |████████████████████████████████| 3.2 MB 12.2 MB/s
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0]                                                            = '"'"'/tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334adde/setup.py                                                           '"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334                                                           adde/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.re                                                           ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__                                                           , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ry8nmtsr
         cwd: /tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334adde/
    Complete output (3 lines):
    Building lxml version 4.6.0.
    Building without Cython.
    Error: Please make sure the libxml2 and libxslt development packages are ins                                                           talled.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/3c/5a/81446fb5a4706b                                                           b07a98427634ab93219dc7fa393841d81f5da5c7e151b7/lxml-4.6.0.tar.gz#sha256=8319abac                                                           bbe9fd9791c2e3c23deb9b6a16abc0fcbdfcc26722035e865b3d207f (from https://pypi.org/                                                           simple/lxml/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4                                                           .*). Command errored out with exit status 1: python setup.py egg_info Check the                                                            logs for full command output.
  Downloading lxml-4.5.2.tar.gz (4.5 MB)
     |████████████████████████████████| 4.5 MB 32.6 MB/s
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0]                                                            = '"'"'/tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f793b/setup.py                                                           '"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f                                                           793b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.re                                                           ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__                                                           , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-8k5oeq54
         cwd: /tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f793b/
    Complete output (3 lines):
    Building lxml version 4.5.2.
    Building without Cython.
    Error: Please make sure the libxml2 and libxslt development packages are ins                                                           talled.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/2c/4d/3ec1ea8512a7fb                                                           f57f02dee3035e2cce2d63d0e9c0ab8e4e376e01452597/lxml-4.5.2.tar.gz#sha256=cdc13a16                                                           82b2a6241080745b1953719e7fe0850b40a5c71ca574f090a1391df6 (from https://pypi.org/                                                           simple/lxml/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4                                                           .*). Command errored out with exit status 1: python setup.py egg_info Check the                                                            logs for full command output.
  Downloading lxml-4.5.1.tar.gz (4.5 MB)
     |████████████████████████████████| 4.5 MB 16.3 MB/s
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/setup.py'"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ml_bk7qp
         cwd: /tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/
    Complete output (3 lines):
    Building lxml version 4.5.1.
    Building without Cython.
    Error: Please make sure the libxml2 and libxslt development packages are installed.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/03/a8/73d795778143be51d8b86750b371b3efcd7139987f71618ad9f4b8b65543/lxml-4.5.1.tar.gz#sha256=27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2 (from https://pypi.org/simple/lxml/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading lxml-4.5.0.tar.gz (4.5 MB)
     |████████████████████████████████| 4.5 MB 10.2 MB/s
Using legacy 'setup.py install' for lxml, since package 'wheel' is not installed.
Installing collected packages: lxml
    Running setup.py install for lxml ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-445wsyzw/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/lxml
         cwd: /tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/
    Complete output (87 lines):
    Building lxml version 4.5.0.
    Building without Cython.
    ERROR: b'/bin/sh: xslt-config: not found\n'
    ** make sure the development packages of libxml2 and libxslt are installed **

    Using build configuration of libxslt
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.9
    creating build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/_elementpath.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/sax.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/__init__.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/doctestcompare.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/ElementInclude.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/usedoctest.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/builder.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/pyclasslookup.py -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/cssselect.py -> build/lib.linux-x86_64-3.9/lxml
    creating build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/__init__.py -> build/lib.linux-x86_64-3.9/lxml/includes
    creating build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/ElementSoup.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/_diffcommand.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/soupparser.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/__init__.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/clean.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/formfill.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/usedoctest.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/defs.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/builder.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/html5parser.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/_html5builder.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/diff.py -> build/lib.linux-x86_64-3.9/lxml/html
    copying src/lxml/html/_setmixin.py -> build/lib.linux-x86_64-3.9/lxml/html
    creating build/lib.linux-x86_64-3.9/lxml/isoschematron
    copying src/lxml/isoschematron/__init__.py -> build/lib.linux-x86_64-3.9/lxml/isoschematron
    copying src/lxml/etree.h -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/etree_api.h -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/lxml.etree.h -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/lxml.etree_api.h -> build/lib.linux-x86_64-3.9/lxml
    copying src/lxml/includes/__init__.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/config.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/c14n.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/xslt.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/schematron.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/xinclude.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/tree.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/xpath.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/uri.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/relaxng.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/etree_defs.h -> build/lib.linux-x86_64-3.9/lxml/includes
    copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-3.9/lxml/includes
    creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources
    creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/rng
    copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/rng
    creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl
    copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl
    copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl
    creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
    running build_ext
    building 'lxml.etree' extension
    creating build/temp.linux-x86_64-3.9
    creating build/temp.linux-x86_64-3.9/src
    creating build/temp.linux-x86_64-3.9/src/lxml
    gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -DCYTHON_CLINE_IN_TRACEBACK=0 -Isrc -Isrc/lxml/includes -I/usr/include/python3.9 -c src/lxml/etree.c -o build/temp.linux-x86_64-3.9/src/lxml/etree.o -w
    Compile failed: command 'gcc' failed: No such file or directory
    creating tmp
    cc -I/usr/include/libxml2 -c /tmp/xmlXPathInitbjb3i8mu.c -o tmp/xmlXPathInitbjb3i8mu.o
    *********************************************************************************
    Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
    *********************************************************************************
    error: command 'gcc' failed: No such file or directory
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"'; __file__='"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-445wsyzw/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/lxml Check the logs for full command output.

And now i tried to launch


➜  ~
➜  ~ cd /home/gehome-master/examples
➜  examples python3 websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 24, in <module>
    from gehomesdk import (
  File "/home/gehome-master/gehomesdk/__init__.py", line 6, in <module>
    from .clients import *
  File "/home/gehome-master/gehomesdk/clients/__init__.py", line 17, in <module>
    from .base_client import GeBaseClient
  File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in <module>
    from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token
  File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in <module>
    from lxml import etree
ModuleNotFoundError: No module named 'lxml'
➜  examples ./websocket_example.py
./websocket_example.py: line 6:
Websocket client example

We're going to run the client in a pre-existing event loop.  We're also going to register some event callbacks
to update appliances every five minutes and to turn on our oven the first time we see it.  Because that is safe!
: not found
./websocket_example.py: line 9: import: not found
./websocket_example.py: line 12: syntax error: unexpected "("
➜  examples

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021 via email

@RobertusIT
Copy link

Please see here then, you probably have some extra steps to install due to missing dependencies: https://lxml.de/installation.html Also, you should install wheel pip install wheel it might help as well.

On Sat, Jul 31, 2021, 4:10 AM RobertusIT @.> wrote: pip install lxml should resolve that one. Gave me a lot of error ➜ ~ pip install lxml Collecting lxml Downloading lxml-4.6.3.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 1.5 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d629dd/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d6 29dd/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-i0elnirm cwd: /tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d629dd/ Complete output (3 lines): Building lxml version 4.6.3. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/e5/21/a2e4517e3d216f 0051687eea3d3317557bde68736f038a3b105ac3809247/lxml-4.6.3.tar.gz#sha256=39b78571 b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468 (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.6.2.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 21.2 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a86289/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a8 6289/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-o2jl7o8z cwd: /tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a86289/ Complete output (3 lines): Building lxml version 4.6.2. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/db/f7/43fecb94d66959 c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz#sha256=cd11c7e8 d21af997ee8079037fff88f16fda188a9776eb4b81c7e4c9c0a7d7fc (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.6.1.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 14.9 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9247c/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9 247c/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-vnqwuctk cwd: /tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9247c/ Complete output (3 lines): Building lxml version 4.6.1. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/c5/2f/a0d8aa3eee6d53 d5723d89e1fc32eee11e76801b424e30b55c7aa6302b01/lxml-4.6.1.tar.gz#sha256=c152b2e9 3b639d1f36ec5a8ca24cde4a8eefb2b6b83668fcd8e83a67badcb367 (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.6.0.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 12.2 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334adde/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334 adde/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ry8nmtsr cwd: /tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334adde/ Complete output (3 lines): Building lxml version 4.6.0. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/3c/5a/81446fb5a4706b b07a98427634ab93219dc7fa393841d81f5da5c7e151b7/lxml-4.6.0.tar.gz#sha256=8319abac bbe9fd9791c2e3c23deb9b6a16abc0fcbdfcc26722035e865b3d207f (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.5.2.tar.gz (4.5 MB) |████████████████████████████████| 4.5 MB 32.6 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f793b/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f 793b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-8k5oeq54 cwd: /tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f793b/ Complete output (3 lines): Building lxml version 4.5.2. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/2c/4d/3ec1ea8512a7fb f57f02dee3035e2cce2d63d0e9c0ab8e4e376e01452597/lxml-4.5.2.tar.gz#sha256=cdc13a16 82b2a6241080745b1953719e7fe0850b40a5c71ca574f090a1391df6 (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.5.1.tar.gz (4.5 MB) |████████████████████████████████| 4.5 MB 16.3 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/setup.py'"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ml_bk7qp cwd: /tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/ Complete output (3 lines): Building lxml version 4.5.1. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are installed. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/03/a8/73d795778143be51d8b86750b371b3efcd7139987f71618ad9f4b8b65543/lxml-4.5.1.tar.gz#sha256=27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2 (from https://pypi.org/simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4.*). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.5.0.tar.gz (4.5 MB) |████████████████████████████████| 4.5 MB 10.2 MB/s Using legacy 'setup.py install' for lxml, since package 'wheel' is not installed. Installing collected packages: lxml Running setup.py install for lxml ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-445wsyzw/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/lxml cwd: /tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/ Complete output (87 lines): Building lxml version 4.5.0. Building without Cython. ERROR: b'/bin/sh: xslt-config: not found\n' ** make sure the development packages of libxml2 and libxslt are installed ** Using build configuration of libxslt running install running build running build_py creating build creating build/lib.linux-x86_64-3.9 creating build/lib.linux-x86_64-3.9/lxml copying src/lxml/_elementpath.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/sax.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/init.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/doctestcompare.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/ElementInclude.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/usedoctest.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/builder.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/pyclasslookup.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/cssselect.py -> build/lib.linux-x86_64-3.9/lxml creating build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/init.py -> build/lib.linux-x86_64-3.9/lxml/includes creating build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/ElementSoup.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/_diffcommand.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/soupparser.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/init.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/clean.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/formfill.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/usedoctest.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/defs.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/builder.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/html5parser.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/_html5builder.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/diff.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/_setmixin.py -> build/lib.linux-x86_64-3.9/lxml/html creating build/lib.linux-x86_64-3.9/lxml/isoschematron copying src/lxml/isoschematron/init.py -> build/lib.linux-x86_64-3.9/lxml/isoschematron copying src/lxml/etree.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/etree_api.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/lxml.etree.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/lxml.etree_api.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/includes/init.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/config.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/c14n.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xslt.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/schematron.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xinclude.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/tree.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xpath.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/uri.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/relaxng.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/etree_defs.h -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-3.9/lxml/includes creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/rng copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/rng creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 running build_ext building 'lxml.etree' extension creating build/temp.linux-x86_64-3.9 creating build/temp.linux-x86_64-3.9/src creating build/temp.linux-x86_64-3.9/src/lxml gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -DCYTHON_CLINE_IN_TRACEBACK=0 -Isrc -Isrc/lxml/includes -I/usr/include/python3.9 -c src/lxml/etree.c -o build/temp.linux-x86_64-3.9/src/lxml/etree.o -w Compile failed: command 'gcc' failed: No such file or directory creating tmp cc -I/usr/include/libxml2 -c /tmp/xmlXPathInitbjb3i8mu.c -o tmp/xmlXPathInitbjb3i8mu.o ********************************************************************************* Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed? ********************************************************************************* error: command 'gcc' failed: No such file or directory ---------------------------------------- ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-445wsyzw/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/lxml Check the logs for full command output. And now i tried to launch ➜ ~ ➜ ~ cd /home/gehome-master/examples ➜ examples python3 websocket_example.py Traceback (most recent call last): File "/home/gehome-master/examples/websocket_example.py", line 24, in from gehomesdk import ( File "/home/gehome-master/gehomesdk/init.py", line 6, in from .clients import * File "/home/gehome-master/gehomesdk/clients/init.py", line 17, in from .base_client import GeBaseClient File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in from lxml import etree ModuleNotFoundError: No module named 'lxml' ➜ examples ./websocket_example.py ./websocket_example.py: line 6: Websocket client example We're going to run the client in a pre-existing event loop. We're also going to register some event callbacks to update appliances every five minutes and to turn on our oven the first time we see it. Because that is safe! : not found ./websocket_example.py: line 9: import: not found ./websocket_example.py: line 12: syntax error: unexpected "(" ➜ examples — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#22 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOEHFXGPA3WT6E63337YDPTT2OVYVANCNFSM5BGS4YJA .

wheel installed

➜  ~ pip install wheel
Requirement already satisfied: wheel in /usr/lib/python3.9/site-packages (0.36.2)

I lost installed log, anyway seems installed

➜  ~ wheel
usage: wheel [-h] {unpack,pack,convert,version,help} ...

positional arguments:
  {unpack,pack,convert,version,help}
                        commands
    unpack              Unpack wheel
    pack                Repack wheel
    convert             Convert egg or wininst to wheel
    version             Print version and exit
    help                Show this help

optional arguments:
  -h, --help            show this help message and exit
➜  ~

About lxml seems there isn't any dep to install, because with pip should install all, or not?

I didn't see any command , except pip install lxml

but this command get errors.

need to install HA in another machine? like raspberry ? i guess change nothing, but you have the knowedge to understand if maybe can help.

@RobertusIT
Copy link

RobertusIT commented Jul 31, 2021

Please see here then, you probably have some extra steps to install due to missing dependencies: https://lxml.de/installation.html Also, you should install wheel pip install wheel it might help as well.

On Sat, Jul 31, 2021, 4:10 AM RobertusIT @.> wrote: pip install lxml should resolve that one. Gave me a lot of error ➜ ~ pip install lxml Collecting lxml Downloading lxml-4.6.3.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 1.5 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d629dd/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d6 29dd/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-i0elnirm cwd: /tmp/pip-install-9_4s9wwy/lxml_704e82104ed84057a326e99035d629dd/ Complete output (3 lines): Building lxml version 4.6.3. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/e5/21/a2e4517e3d216f 0051687eea3d3317557bde68736f038a3b105ac3809247/lxml-4.6.3.tar.gz#sha256=39b78571 b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468 (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.6.2.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 21.2 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a86289/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a8 6289/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-o2jl7o8z cwd: /tmp/pip-install-9_4s9wwy/lxml_b0672826071f41eb9a68b418b9a86289/ Complete output (3 lines): Building lxml version 4.6.2. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/db/f7/43fecb94d66959 c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz#sha256=cd11c7e8 d21af997ee8079037fff88f16fda188a9776eb4b81c7e4c9c0a7d7fc (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.6.1.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 14.9 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9247c/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9 247c/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-vnqwuctk cwd: /tmp/pip-install-9_4s9wwy/lxml_650f91b691cb485e868820a91cc9247c/ Complete output (3 lines): Building lxml version 4.6.1. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/c5/2f/a0d8aa3eee6d53 d5723d89e1fc32eee11e76801b424e30b55c7aa6302b01/lxml-4.6.1.tar.gz#sha256=c152b2e9 3b639d1f36ec5a8ca24cde4a8eefb2b6b83668fcd8e83a67badcb367 (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.6.0.tar.gz (3.2 MB) |████████████████████████████████| 3.2 MB 12.2 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334adde/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334 adde/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ry8nmtsr cwd: /tmp/pip-install-9_4s9wwy/lxml_c2222dd279f74011a96d68319334adde/ Complete output (3 lines): Building lxml version 4.6.0. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/3c/5a/81446fb5a4706b b07a98427634ab93219dc7fa393841d81f5da5c7e151b7/lxml-4.6.0.tar.gz#sha256=8319abac bbe9fd9791c2e3c23deb9b6a16abc0fcbdfcc26722035e865b3d207f (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.5.2.tar.gz (4.5 MB) |████████████████████████████████| 4.5 MB 32.6 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f793b/setup.py '"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f 793b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.re ad().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file , '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-8k5oeq54 cwd: /tmp/pip-install-9_4s9wwy/lxml_b8247d53e37c4d8ba0b29449201f793b/ Complete output (3 lines): Building lxml version 4.5.2. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are ins talled. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/2c/4d/3ec1ea8512a7fb f57f02dee3035e2cce2d63d0e9c0ab8e4e376e01452597/lxml-4.5.2.tar.gz#sha256=cdc13a16 82b2a6241080745b1953719e7fe0850b40a5c71ca574f090a1391df6 (from https://pypi.org/ simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4 .). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.5.1.tar.gz (4.5 MB) |████████████████████████████████| 4.5 MB 16.3 MB/s ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/setup.py'"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-ml_bk7qp cwd: /tmp/pip-install-9_4s9wwy/lxml_ffb29ccc4fb64f2184899dedd8dcf3eb/ Complete output (3 lines): Building lxml version 4.5.1. Building without Cython. Error: Please make sure the libxml2 and libxslt development packages are installed. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/03/a8/73d795778143be51d8b86750b371b3efcd7139987f71618ad9f4b8b65543/lxml-4.5.1.tar.gz#sha256=27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2 (from https://pypi.org/simple/lxml/) (requires-python:>=2.7, !=3.0., !=3.1., !=3.2., !=3.3., != 3.4.*). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Downloading lxml-4.5.0.tar.gz (4.5 MB) |████████████████████████████████| 4.5 MB 10.2 MB/s Using legacy 'setup.py install' for lxml, since package 'wheel' is not installed. Installing collected packages: lxml Running setup.py install for lxml ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-445wsyzw/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/lxml cwd: /tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/ Complete output (87 lines): Building lxml version 4.5.0. Building without Cython. ERROR: b'/bin/sh: xslt-config: not found\n' ** make sure the development packages of libxml2 and libxslt are installed ** Using build configuration of libxslt running install running build running build_py creating build creating build/lib.linux-x86_64-3.9 creating build/lib.linux-x86_64-3.9/lxml copying src/lxml/_elementpath.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/sax.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/init.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/doctestcompare.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/ElementInclude.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/usedoctest.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/builder.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/pyclasslookup.py -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/cssselect.py -> build/lib.linux-x86_64-3.9/lxml creating build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/init.py -> build/lib.linux-x86_64-3.9/lxml/includes creating build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/ElementSoup.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/_diffcommand.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/soupparser.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/init.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/clean.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/formfill.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/usedoctest.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/defs.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/builder.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/html5parser.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/_html5builder.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/diff.py -> build/lib.linux-x86_64-3.9/lxml/html copying src/lxml/html/_setmixin.py -> build/lib.linux-x86_64-3.9/lxml/html creating build/lib.linux-x86_64-3.9/lxml/isoschematron copying src/lxml/isoschematron/init.py -> build/lib.linux-x86_64-3.9/lxml/isoschematron copying src/lxml/etree.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/etree_api.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/lxml.etree.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/lxml.etree_api.h -> build/lib.linux-x86_64-3.9/lxml copying src/lxml/includes/init.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/config.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/c14n.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xslt.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/schematron.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xinclude.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/tree.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xpath.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/uri.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/relaxng.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/etree_defs.h -> build/lib.linux-x86_64-3.9/lxml/includes copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-3.9/lxml/includes creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/rng copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/rng creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl creating build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-x86_64-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 running build_ext building 'lxml.etree' extension creating build/temp.linux-x86_64-3.9 creating build/temp.linux-x86_64-3.9/src creating build/temp.linux-x86_64-3.9/src/lxml gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -DCYTHON_CLINE_IN_TRACEBACK=0 -Isrc -Isrc/lxml/includes -I/usr/include/python3.9 -c src/lxml/etree.c -o build/temp.linux-x86_64-3.9/src/lxml/etree.o -w Compile failed: command 'gcc' failed: No such file or directory creating tmp cc -I/usr/include/libxml2 -c /tmp/xmlXPathInitbjb3i8mu.c -o tmp/xmlXPathInitbjb3i8mu.o ********************************************************************************* Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed? ********************************************************************************* error: command 'gcc' failed: No such file or directory ---------------------------------------- ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"'; file='"'"'/tmp/pip-install-9_4s9wwy/lxml_74334279092f421cafc757be488c38ba/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-445wsyzw/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/lxml Check the logs for full command output. And now i tried to launch ➜ ~ ➜ ~ cd /home/gehome-master/examples ➜ examples python3 websocket_example.py Traceback (most recent call last): File "/home/gehome-master/examples/websocket_example.py", line 24, in from gehomesdk import ( File "/home/gehome-master/gehomesdk/init.py", line 6, in from .clients import * File "/home/gehome-master/gehomesdk/clients/init.py", line 17, in from .base_client import GeBaseClient File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in from lxml import etree ModuleNotFoundError: No module named 'lxml' ➜ examples ./websocket_example.py ./websocket_example.py: line 6: Websocket client example We're going to run the client in a pre-existing event loop. We're also going to register some event callbacks to update appliances every five minutes and to turn on our oven the first time we see it. Because that is safe! : not found ./websocket_example.py: line 9: import: not found ./websocket_example.py: line 12: syntax error: unexpected "(" ➜ examples — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#22 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOEHFXGPA3WT6E63337YDPTT2OVYVANCNFSM5BGS4YJA .

I take my RPI3 with another version of HA, old, and i did again:

1 . Install your sdk, but i remember that is useless, need to get the project. Anyway i did it.

pi@RASPBERRYPi3FLIRC:~ $ **pip install gehomesdk**
Defaulting to user installation because normal site-packages is not writeable

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting gehomesdk
  Downloading https://www.piwheels.org/simple/gehomesdk/gehomesdk-0.3.21-py3-non                                          e-any.whl (127 kB)
     |████████████████████████████████| 127 kB 645 kB/s
Collecting websockets
  Downloading websockets-9.1.tar.gz (76 kB)
     |████████████████████████████████| 76 kB 766 kB/s
Collecting humanize
  Downloading https://www.piwheels.org/simple/humanize/humanize-3.10.0-py3-none-any.whl (87 kB)
     |████████████████████████████████| 87 kB 630 kB/s
Collecting bidict
  Downloading https://www.piwheels.org/simple/bidict/bidict-0.21.2-py2.py3-none-any.whl (37 kB)
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from gehomesdk) (2.21.0)
Collecting aiohttp
  Downloading aiohttp-3.7.4.post0.tar.gz (1.1 MB)
     |████████████████████████████████| 1.1 MB 3.2 MB/s
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting typing-extensions>=3.6.5
  Downloading https://www.piwheels.org/simple/typing-extensions/typing_extensions-3.10.0.0-py3-none-any.whl (26 kB)
Collecting attrs>=17.3.0
  Downloading https://www.piwheels.org/simple/attrs/attrs-21.2.0-py2.py3-none-any.whl (53 kB)
     |████████████████████████████████| 53 kB 489 kB/s
Collecting async-timeout<4.0,>=3.0
  Downloading https://www.piwheels.org/simple/async-timeout/async_timeout-3.0.1-py3-none-any.whl (8.2 kB)
Collecting multidict<7.0,>=4.5
  Downloading multidict-5.1.0.tar.gz (53 kB)
     |████████████████████████████████| 53 kB 436 kB/s
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp->gehomesdk) (3.0.4)
Collecting yarl<2.0,>=1.0
  Downloading yarl-1.6.3.tar.gz (176 kB)
     |████████████████████████████████| 176 kB 8.1 MB/s
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp->gehomesdk) (2.6)
Requirement already satisfied: setuptools in ./.local/lib/python3.8/site-packages (from humanize->gehomesdk) (57.0.0)
Building wheels for collected packages: aiohttp, multidict, yarl, websockets
  Building wheel for aiohttp (PEP 517) ... done
  Created wheel for aiohttp: filename=aiohttp-3.7.4.post0-cp38-cp38-linux_armv7l.whl size=1388946 sha256=1df4fd61e03c47ee34a6b5e416d4f6d71962edbafce03394645a8b4bc4ac68bb
  Stored in directory: /home/pi/.cache/pip/wheels/70/a6/74/e3ee8e169262359ed1d452bdfbe82e6420aa40ccfc2d727126
  Building wheel for multidict (PEP 517) ... done
  Created wheel for multidict: filename=multidict-5.1.0-cp38-cp38-linux_armv7l.whl size=183941 sha256=b7621c90e7e7d284ed9d3ed29ff12bd636d610f63fb2bc09f8d1ecc83be1ca26
  Stored in directory: /home/pi/.cache/pip/wheels/72/97/bc/5bffee542d18b454f73bd1a593cd104de3c46a50e4f2946728
  Building wheel for yarl (PEP 517) ... done
  Created wheel for yarl: filename=yarl-1.6.3-cp38-cp38-linux_armv7l.whl size=299193 sha256=4caa3e2c938c87e1d528b03616cb91d7fd7ab023e9d974dcc30bd3332a4ad28b
  Stored in directory: /home/pi/.cache/pip/wheels/03/1d/d3/9693ea3024088fd2555f0cdbb42cb6b133e389a8e68502f85f
  Building wheel for websockets (setup.py) ... done
  Created wheel for websockets: filename=websockets-9.1-cp38-cp38-linux_armv7l.whl size=101058 sha256=b36d32d7451f7216cf3ae1f04d0347ed627a58666c6b9bd418f53950b8ec7741
  Stored in directory: /home/pi/.cache/pip/wheels/91/27/c6/be3a97fd1c8633d2841fd00fddbbce4c8847837ebcd4bdfb8d
Successfully built aiohttp multidict yarl websockets
Installing collected packages: multidict, yarl, typing-extensions, attrs, async-timeout, websockets, humanize, bidict, aiohttp, gehomesdk
Successfully installed aiohttp-3.7.4.post0 async-timeout-3.0.1 attrs-21.2.0 bidict-0.21.2 gehomesdk-0.3.21 humanize-3.10.0 multidict-5.1.0 typing-extensions-3.10.0.0 websockets-9.1 yarl-1.6.3
WARNING: You are using pip version 21.1.2; however, version 21.2.2 is available.
You should consider upgrading via the '/usr/bin/python3.8 -m pip install --upgrade pip' command.

Now I get gehome-master and put it in home/pi folder.

pi@RASPBERRYPi3FLIRC:/home $ sudo wget https://github.com/simbaja/gehome/archive/refs/heads/master.zip
--2021-07-31 15:45:36--  https://github.com/simbaja/gehome/archive/refs/heads/master.zip
Resolving github.com (github.com)... 140.82.121.4
Connecting to github.com (github.com)|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/simbaja/gehome/zip/refs/heads/master [following]
--2021-07-31 15:45:36--  https://codeload.github.com/simbaja/gehome/zip/refs/heads/master
Resolving codeload.github.com (codeload.github.com)... 140.82.121.9
Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’

master.zip                         [ <=>                                               ] 134.59K  --.-KB/s    in 0.1s

2021-07-31 15:45:37 (973 KB/s) - ‘master.zip’ saved [137824]

Unzip it

pi@RASPBERRYPi3FLIRC:/home $ sudo unzip master.zip
Archive:  master.zip
be18ef8099f45ffa74e4be202f04429084dbe400
   creating: gehome-master/
  inflating: gehome-master/.gitattributes
  inflating: gehome-master/.gitignore
  inflating: gehome-master/LICENSE
 extracting: gehome-master/MANIFEST.in
  inflating: gehome-master/README.md
   creating: gehome-master/examples/
 extracting: gehome-master/examples/__init__.py
  inflating: gehome-master/examples/websocket_example.py
  inflating: gehome-master/examples/xmpp_example.py
   creating: gehome-master/gehomesdk/
  inflating: gehome-master/gehomesdk/__init__.py
   creating: gehome-master/gehomesdk/clients/
  inflating: gehome-master/gehomesdk/clients/__init__.py
  inflating: gehome-master/gehomesdk/clients/async_helpers.py
  inflating: gehome-master/gehomesdk/clients/async_login_flows.py
  inflating: gehome-master/gehomesdk/clients/base_client.py
  inflating: gehome-master/gehomesdk/clients/const.py
  inflating: gehome-master/gehomesdk/clients/ge_client_xmpp.py
  inflating: gehome-master/gehomesdk/clients/states.py
  inflating: gehome-master/gehomesdk/clients/websocket_client.py
  inflating: gehome-master/gehomesdk/clients/xmpp_client.py
   creating: gehome-master/gehomesdk/erd/
  inflating: gehome-master/gehomesdk/erd/__init__.py
   creating: gehome-master/gehomesdk/erd/converters/
  inflating: gehome-master/gehomesdk/erd/converters/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/abstract.py
   creating: gehome-master/gehomesdk/erd/converters/advantium/
  inflating: gehome-master/gehomesdk/erd/converters/advantium/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_setting_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_time_adjust_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_time_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_time_remaining_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_kitchen_timer_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_microwave_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_precision_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_remote_cook_mode_config_converter.py
   creating: gehome-master/gehomesdk/erd/converters/dishwasher/
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/cycle_name_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_cycle_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_dishwasher_door_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_rinse_agent_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_user_setting_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/operating_mode_converter.py
   creating: gehome-master/gehomesdk/erd/converters/fridge/
  inflating: gehome-master/gehomesdk/erd/converters/fridge/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/erd_filter_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_door_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_ice_bucket_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_model_info_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_set_point_limits_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_set_points_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/hot_water_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/ice_maker_control_status_converter.py
   creating: gehome-master/gehomesdk/erd/converters/laundry/
  inflating: gehome-master/gehomesdk/erd/converters/laundry/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/dryness_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/ecodry_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/laundry_cycle_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/laundry_door_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/laundry_sub_cycle_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/machine_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/rinse_option_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/sheet_usage_configuration_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/smart_dispense_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/smart_dispense_tank_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/soil_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/spintime_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/tank_selected_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/temperature_option_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/tumble_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/washtemp_level_converter.py
   creating: gehome-master/gehomesdk/erd/converters/oven/
  inflating: gehome-master/gehomesdk/erd/converters/oven/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/cooktop_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_available_cook_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_cooktop_config_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_oven_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_app_probe_control_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_probe_battery_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_probe_target_time_reached_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_start_sous_vide_timer_active_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/oven_configuration_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/oven_cook_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/oven_ranges_converter.py
   creating: gehome-master/gehomesdk/erd/converters/primitives/
  inflating: gehome-master/gehomesdk/erd/converters/primitives/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_bool_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_bytes_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_int_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_signed_byte_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_string_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_time_span_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_time_span_seconds_converter.py
   creating: gehome-master/gehomesdk/erd/converters/specialized/
  inflating: gehome-master/gehomesdk/erd/converters/specialized/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_appliance_type_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_clock_format_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_end_tone_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_measurement_units_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_model_serial_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_software_version_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_sound_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_unit_type_converter.py
   creating: gehome-master/gehomesdk/erd/converters/water_filter/
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_alert_settings_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_alert_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_manual_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_position_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_valve_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_leak_validity_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_waterfilter_flow_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_waterfilter_life_converter.py
  inflating: gehome-master/gehomesdk/erd/erd_code_class.py
  inflating: gehome-master/gehomesdk/erd/erd_codes.py
  inflating: gehome-master/gehomesdk/erd/erd_configuration.py
  inflating: gehome-master/gehomesdk/erd/erd_encoder.py
   creating: gehome-master/gehomesdk/erd/values/
  inflating: gehome-master/gehomesdk/erd/values/__init__.py
   creating: gehome-master/gehomesdk/erd/values/advantium/
  inflating: gehome-master/gehomesdk/erd/values/advantium/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_cook_setting.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_enums.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_operation_mode.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_operation_mode_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_cook_setting.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_cook_status.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_cook_time_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_kitchen_timer_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_microwave_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_precision_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_remote_cook_mode_config.py
   creating: gehome-master/gehomesdk/erd/values/common/
  inflating: gehome-master/gehomesdk/erd/values/common/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_appliance_type.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_clock_format.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_end_tone.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_measurement_units.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_on_off.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_present.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_sound_level.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_unit_type.py
   creating: gehome-master/gehomesdk/erd/values/dishwasher/
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/cycle_state_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_cycle_state.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_dishwasher_door_status.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_operating_mode.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_rinse_agent.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_user_setting.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/operating_mode.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/operating_mode_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/rinse_agent_mapping.py
   creating: gehome-master/gehomesdk/erd/values/fridge/
  inflating: gehome-master/gehomesdk/erd/values/fridge/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_door_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_filter_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_full_not_full.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_hot_water_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_pod_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_door_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_ice_bucket_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_model_info.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_set_point_limits.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_set_points.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/hot_water_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/ice_maker_control_status.py
   creating: gehome-master/gehomesdk/erd/values/laundry/
  inflating: gehome-master/gehomesdk/erd/values/laundry/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/dryness_level.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/dryness_level_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/ecodry_status.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/ecodry_status_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/laundry_enums.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/machine_state.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/machine_state_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/temperature_option.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/temperature_option_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/washtemp_level.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/washtemp_level_mapping.py
   creating: gehome-master/gehomesdk/erd/values/oven/
  inflating: gehome-master/gehomesdk/erd/values/oven/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/oven/available_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/burner.py
  inflating: gehome-master/gehomesdk/erd/values/oven/const.py
  inflating: gehome-master/gehomesdk/erd/values/oven/cooktop_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_available_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_closed_loop_cooking_configuration.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_closed_loop_cooking_devices_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_cooktop_config.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_cooktop_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_oven_configuration.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_oven_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_oven_state.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_app_probe_control_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_probe_battery_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_probe_target_time_reached.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_start_sous_vide_timer_active_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_configuration.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_cook_mode_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_cook_setting.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_display_state_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_ranges.py
   creating: gehome-master/gehomesdk/erd/values/water_filter/
  inflating: gehome-master/gehomesdk/erd/values/water_filter/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_alert_settings.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_alert_state.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_flowrate.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_leak_validity.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_life.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_manual_mode.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_mode.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_position.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_valve_state.py
   creating: gehome-master/gehomesdk/exception/
  inflating: gehome-master/gehomesdk/exception/__init__.py
  inflating: gehome-master/gehomesdk/exception/ge_auth_failed_error.py
  inflating: gehome-master/gehomesdk/exception/ge_client_disconnected_error.py
  inflating: gehome-master/gehomesdk/exception/ge_duplicate_appliance_error.py
  inflating: gehome-master/gehomesdk/exception/ge_exception.py
  inflating: gehome-master/gehomesdk/exception/ge_general_server_error.py
  inflating: gehome-master/gehomesdk/exception/ge_needs_reauthentication_error.py
  inflating: gehome-master/gehomesdk/exception/ge_not_authenticated_error.py
  inflating: gehome-master/gehomesdk/exception/ge_request_error.py
  inflating: gehome-master/gehomesdk/exception/ge_set_erd_not_allowed_error.py
  inflating: gehome-master/gehomesdk/exception/ge_unsupported_operation_error.py
  inflating: gehome-master/gehomesdk/ge_appliance.py
   creating: gehome-master/notes/
  inflating: gehome-master/notes/oauth_secrets.py
  inflating: gehome-master/setup.py
   creating: gehome-master/tests/
 extracting: gehome-master/tests/__init__.py
  inflating: gehome-master/tests/test_decoders.py

Set up all permission to avoid any trouble

pi@RASPBERRYPi3FLIRC:/home $ sudo chmod 777 -R gehome-master/

Then sudo nano secrets.py into examples folder and insert mail and pass about ge appliances app
https://play.google.com/store/apps/details?id=com.ge.comfort&hl=it&gl=US
That is the europe version i guess of smarthq.

Now tried to launch:

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 8, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

No luck, so i have tried to install all dep from https://lxml.de/installation.html, like you suggested

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ **pip install lxml**
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: lxml in /usr/lib/python3/dist-packages (4.3.2)
WARNING: You are using pip version 21.1.2; however, version 21.2.2 is available.
You should consider upgrading via the '/usr/bin/python3.8 -m pip install --upgrade pip' command.
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo apt-get install python3-lxml
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3-lxml is already the newest version (4.3.2-1+deb10u3).
The following package was automatically installed and is no longer required:
  python-colorzero
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo apt-get install libxml2-dev libxslt-dev python-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'libxslt1-dev' instead of 'libxslt-dev'
libxml2-dev is already the newest version (2.9.4+dfsg1-7+deb10u1).
libxslt1-dev is already the newest version (1.1.32-2.2~deb10u1).
The following package was automatically installed and is no longer required:
  python-colorzero
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  libpython-dev libpython2-dev libpython2.7 libpython2.7-dev python2-dev python2.7-dev
The following NEW packages will be installed:
  libpython-dev libpython2-dev libpython2.7 libpython2.7-dev python-dev python2-dev python2.7-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 32.1 MB of archives.
After this operation, 49.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:6 http://raspbian.raspberrypi.org/raspbian buster/main armhf python2-dev armhf 2.7.16-1 [1,216 B]
Get:1 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython2.7 armhf 2.7.16-2+deb10u1 [873 kB]
Get:7 http://raspbian.raspberrypi.org/raspbian buster/main armhf python-dev armhf 2.7.16-1 [1,192 B]
Get:2 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython2.7-dev armhf 2.7.16-2+deb10u1 [30.9 MB]
Get:3 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython2-dev armhf 2.7.16-1 [20.9 kB]
Get:4 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython-dev armhf 2.7.16-1 [20.9 kB]
Get:5 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python2.7-dev armhf 2.7.16-2+deb10u1 [291 kB]
Fetched 32.1 MB in 14s (2,343 kB/s)
Selecting previously unselected package libpython2.7:armhf.
(Reading database ... 50155 files and directories currently installed.)
Preparing to unpack .../0-libpython2.7_2.7.16-2+deb10u1_armhf.deb ...
Unpacking libpython2.7:armhf (2.7.16-2+deb10u1) ...
Selecting previously unselected package libpython2.7-dev:armhf.
Preparing to unpack .../1-libpython2.7-dev_2.7.16-2+deb10u1_armhf.deb ...
Unpacking libpython2.7-dev:armhf (2.7.16-2+deb10u1) ...
Selecting previously unselected package libpython2-dev:armhf.
Preparing to unpack .../2-libpython2-dev_2.7.16-1_armhf.deb ...
Unpacking libpython2-dev:armhf (2.7.16-1) ...
Selecting previously unselected package libpython-dev:armhf.
Preparing to unpack .../3-libpython-dev_2.7.16-1_armhf.deb ...
Unpacking libpython-dev:armhf (2.7.16-1) ...
Selecting previously unselected package python2.7-dev.
Preparing to unpack .../4-python2.7-dev_2.7.16-2+deb10u1_armhf.deb ...
Unpacking python2.7-dev (2.7.16-2+deb10u1) ...
Selecting previously unselected package python2-dev.
Preparing to unpack .../5-python2-dev_2.7.16-1_armhf.deb ...
Unpacking python2-dev (2.7.16-1) ...
Selecting previously unselected package python-dev.
Preparing to unpack .../6-python-dev_2.7.16-1_armhf.deb ...
Unpacking python-dev (2.7.16-1) ...
Setting up libpython2.7:armhf (2.7.16-2+deb10u1) ...
Setting up libpython2.7-dev:armhf (2.7.16-2+deb10u1) ...
Setting up libpython2-dev:armhf (2.7.16-1) ...
Setting up python2.7-dev (2.7.16-2+deb10u1) ...
Setting up python2-dev (2.7.16-1) ...
Setting up libpython-dev:armhf (2.7.16-1) ...
Setting up python-dev (2.7.16-1) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for libc-bin (2.28-10+rpi1) ...

Try again also with other python version

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 13, in <module>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'

secrets is inside

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ ls
__init__.py  secrets.py  websocket_example.py  xmpp_example.py

Tried other way, no luck

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo python3.8 /home/gehome-master/examples/websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 8, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

Tried also to add this code in websocket_example.py

import os, sys

#Following lines are for assigning parent directory dynamically.
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)


No luck

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo python3.8 /home/gehome-master/examples/websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 16, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

Anyway this time, lxml doesn't have any error in istallation process, so is installed.

wheel is already installed

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ wheel
usage: wheel [-h] {unpack,pack,convert,version,help} ...

positional arguments:
  {unpack,pack,convert,version,help}
                        commands
    unpack              Unpack wheel
    pack                Repack wheel
    convert             Convert egg or wininst to wheel
    version             Print version and exit
    help                Show this help

optional arguments:
  -h, --help            show this help message and exit

What miss?

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

The next one that you're missing appears to be aiohttp. You'll need to do pip install aiohttp... not sure why some of these aren't there, but I'll see if I can get them added to the setup.py for the package so that others don't run into this as much.

@RobertusIT
Copy link

The next one that you're missing appears to be aiohttp. You'll need to do pip install aiohttp... not sure why some of these aren't there, but I'll see if I can get them added to the setup.py for the package so that others don't run into this as much.

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ pip install aiohttp
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: aiohttp in /home/pi/.local/lib/python3.8/site-packages (3.7.4.post0)
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp) (3.0.4)
Requirement already satisfied: attrs>=17.3.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (21.2.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (5.1.0)
Requirement already satisfied: typing-extensions>=3.6.5 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (3.10.0.0)
Requirement already satisfied: yarl<2.0,>=1.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (1.6.3)
Requirement already satisfied: async-timeout<4.0,>=3.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (3.0.1)
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.6)
WARNING: You are using pip version 21.1.2; however, version 21.2.2 is available.
You should consider upgrading via the '/usr/bin/python3.8 -m pip install --upgrade pip' command.

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo python3.8 /home/gehome-master/examples/websocket_example.py
Traceback (most recent call last):
  File "/home/gehome-master/examples/websocket_example.py", line 16, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ ls
__init__.py  secrets.py  websocket_example.py  xmpp_example.py
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 23, in <module>
    from gehomesdk import (
  File "/home/gehome-master/gehomesdk/__init__.py", line 6, in <module>
    from .clients import *
  File "/home/gehome-master/gehomesdk/clients/__init__.py", line 17, in <module>
    from .base_client import GeBaseClient
  File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in <module>
    from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token
  File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in <module>
    from lxml import etree
ImportError: cannot import name 'etree' from 'lxml' (/usr/lib/python3/dist-packages/lxml/__init__.py)
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 16, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

I'm really not sure what you're missing at this point. Looking through the logs, it looks like you have aiohttp, but then when try to run using python, it says you don't. I'm guessing you have multiple versions of Python out there and it's causing problems. It also may be a pathing issue (your PYTHONPATH environment variable may not include the place where these modules are installed). Try this command and see if you get a different error when running the example afterwards:

python3.8 -m pip install aiohttp

@RobertusIT
Copy link

I'm really not sure what you're missing at this point. Looking through the logs, it looks like you have aiohttp, but then when try to run using python, it says you don't. I'm guessing you have multiple versions of Python out there and it's causing problems. It also may be a pathing issue (your PYTHONPATH environment variable may not include the place where these modules are installed). Try this command and see if you get a different error when running the example afterwards:

python3.8 -m pip install aiohttp

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3.8 -m pip install aiohttp

Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: aiohttp in /home/pi/.local/lib/python3.8/site-packages (3.7.4.post0)
Requirement already satisfied: yarl<2.0,>=1.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (1.6.3)
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp) (3.0.4)
Requirement already satisfied: attrs>=17.3.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (21.2.0)
Requirement already satisfied: typing-extensions>=3.6.5 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (3.10.0.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (5.1.0)
Requirement already satisfied: async-timeout<4.0,>=3.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (3.0.1)
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.6)
WARNING: You are using pip version 21.1.2; however, version 21.2.2 is available.
You should consider upgrading via the '/usr/bin/python3.8 -m pip install --upgrade pip' command.

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

I think it is some sort of pathing/versioning issue:

lxml is installed here: /usr/lib/python3/dist-packages
aiohttp installed here: /home/pi/.local/lib/python3.8/site-packages

lxml may not be able to find aiohttp. I'd try the following:

pip uninstall aiohttp
sudo pip install aiohttp

Maybe that'll get them to play nicely together?

@RobertusIT
Copy link

I think it is some sort of pathing/versioning issue:

lxml is installed here: /usr/lib/python3/dist-packages
aiohttp installed here: /home/pi/.local/lib/python3.8/site-packages

lxml may not be able to find aiohttp. I'd try the following:

pip uninstall aiohttp
sudo pip install aiohttp

Maybe that'll get them to play nicely together?

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ pip uninstall aiohttp

Found existing installation: aiohttp 3.7.4.post0
Uninstalling aiohttp-3.7.4.post0:
  Would remove:
    /home/pi/.local/lib/python3.8/site-packages/aiohttp-3.7.4.post0.dist-info/*
    /home/pi/.local/lib/python3.8/site-packages/aiohttp/*
Proceed (y/n)? Your response ('') was not one of the expected responses: y, n
Proceed (y/n)? Y
  Successfully uninstalled aiohttp-3.7.4.post0
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo pip install aiohttp
sudo: pip: command not found
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ pip install aiohttp
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting aiohttp
  Using cached aiohttp-3.7.4.post0-cp38-cp38-linux_armv7l.whl
Requirement already satisfied: attrs>=17.3.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (21.2.0)
Requirement already satisfied: typing-extensions>=3.6.5 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (3.10.0.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (5.1.0)
Requirement already satisfied: async-timeout<4.0,>=3.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (3.0.1)
Requirement already satisfied: yarl<2.0,>=1.0 in /home/pi/.local/lib/python3.8/site-packages (from aiohttp) (1.6.3)
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp) (3.0.4)
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.6)
Installing collected packages: aiohttp
Successfully installed aiohttp-3.7.4.post0
WARNING: You are using pip version 21.1.2; however, version 21.2.2 is available.
You should consider upgrading via the '/usr/bin/python3.8 -m pip install --upgrade pip' command.
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 23, in <module>
    from gehomesdk import (
  File "/home/gehome-master/gehomesdk/__init__.py", line 6, in <module>
    from .clients import *
  File "/home/gehome-master/gehomesdk/clients/__init__.py", line 17, in <module>
    from .base_client import GeBaseClient
  File "/home/gehome-master/gehomesdk/clients/base_client.py", line 4, in <module>
    from gehomesdk.clients.async_login_flows import async_get_oauth2_token, async_refresh_oauth2_token
  File "/home/gehome-master/gehomesdk/clients/async_login_flows.py", line 2, in <module>
    from lxml import etree
ImportError: cannot import name 'etree' from 'lxml' (/usr/lib/python3/dist-packages/lxml/__init__.py)
pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ python3 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 16, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

You have to install aiohttp using sudo so it can go into the right packages directory, doing it without sudo won't work, unfortunately. If pip isn't installed, try pip3. If that's not installed, you'll need to install pip while under sudo.

@RobertusIT
Copy link

You have to install aiohttp using sudo so it can go into the right packages directory, doing it without sudo won't work, unfortunately. If pip isn't installed, try pip3. If that's not installed, you'll need to install pip while under sudo.

unistall aiohttp in pi user

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ pip uninstall aiohttp

Found existing installation: aiohttp 3.7.4.post0
Uninstalling aiohttp-3.7.4.post0:
  Would remove:
    /home/pi/.local/lib/python3.8/site-packages/aiohttp-3.7.4.post0.dist-info/*
    /home/pi/.local/lib/python3.8/site-packages/aiohttp/*
Proceed (y/n)? Your response ('') was not one of the expected responses: y, n
Proceed (y/n)? y
  Successfully uninstalled aiohttp-3.7.4.post0

Now on root user, pip isn't recognize

pi@RASPBERRYPi3FLIRC:/home/gehome-master/examples $ sudo -i
root@RASPBERRYPi3FLIRC:~# pip install aiohttp
-bash: pip: command not found

Need to install pip on root in first

root@RASPBERRYPi3FLIRC:~# sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  python-colorzero
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  gir1.2-glib-2.0 javascript-common libgirepository-1.0-1 libjs-jquery libjs-sphinxdoc libjs-underscore
  libpython-all-dev python-all python-all-dev python-asn1crypto python-cffi-backend python-configparser python-crypto
  python-cryptography python-dbus python-entrypoints python-enum34 python-gi python-ipaddress python-keyring
  python-keyrings.alt python-secretstorage python-setuptools python-six python-wheel python-xdg
Suggested packages:
  apache2 | lighttpd | httpd python-crypto-doc python-cryptography-doc python-cryptography-vectors python-dbus-dbg
  python-dbus-doc python-enum34-doc python-gi-cairo gnome-keyring libkf5wallet-bin gir1.2-gnomekeyring-1.0 python-gdata
  python-keyczar python-secretstorage-doc python-setuptools-doc
The following NEW packages will be installed:
  gir1.2-glib-2.0 javascript-common libgirepository-1.0-1 libjs-jquery libjs-sphinxdoc libjs-underscore
  libpython-all-dev python-all python-all-dev python-asn1crypto python-cffi-backend python-configparser python-crypto
  python-cryptography python-dbus python-entrypoints python-enum34 python-gi python-ipaddress python-keyring
  python-keyrings.alt python-pip python-secretstorage python-setuptools python-six python-wheel python-xdg
0 upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,506 kB of archives.
After this operation, 10.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.raspberrypi.org/debian buster/main armhf python-pip all 18.1-5+rpt1 [215 kB]
Get:2 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf libgirepository-1.0-1 armhf 1.58.3-2 [78.8 kB]
Get:3 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf gir1.2-glib-2.0 armhf 1.58.3-2 [143 kB]
Get:4 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf javascript-common all 11 [6,120 B]
Get:5 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libjs-jquery all 3.3.1~dfsg-3+deb10u1 [332 kB]
Get:8 http://raspbian.raspberrypi.org/raspbian buster/main armhf libpython-all-dev armhf 2.7.16-1 [1,064 B]
Get:9 http://raspbian.raspberrypi.org/raspbian buster/main armhf python-all armhf 2.7.16-1 [1,044 B]
Get:10 http://raspbian.raspberrypi.org/raspbian buster/main armhf python-all-dev armhf 2.7.16-1 [1,068 B]
Get:6 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libjs-underscore all 1.9.1~dfsg-1+deb10u1 [100.0 kB]
Get:7 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libjs-sphinxdoc all 1.8.4-1 [95.9 kB]
Get:11 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-asn1crypto all 0.24.0-1 [78.1 kB]
Get:13 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-configparser all 3.5.0b2-1 [59.2 kB]
Get:14 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-crypto armhf 2.6.1-9+b1 [248 kB]
Get:12 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python-cffi-backend armhf 1.12.2-1 [69.4 kB]
Get:15 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-enum34 all 1.1.6-2 [35.3 kB]
Get:16 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-ipaddress all 1.0.17-1 [18.1 kB]
Get:17 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-six all 1.12.0-1 [15.7 kB]
Get:18 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python-cryptography armhf 2.6.1-3+deb10u2 [184 kB]
Get:19 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-dbus armhf 1.2.8-3 [95.7 kB]
Get:20 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-entrypoints all 0.3-1 [5,444 B]
Get:21 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-gi armhf 3.30.4-1 [208 kB]
Get:22 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-secretstorage all 2.3.1-2 [13.8 kB]
Get:23 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-keyring all 17.1.1-1 [47.1 kB]
Get:24 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf python-keyrings.alt all 3.1.1-1 [18.3 kB]
Get:25 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python-setuptools all 40.8.0-1 [382 kB]
Get:26 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python-wheel all 0.32.3-2 [19.3 kB]
Get:27 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python-xdg all 0.25-5 [35.9 kB]
Fetched 2,506 kB in 6s (416 kB/s)
Selecting previously unselected package libgirepository-1.0-1:armhf.
(Reading database ... 50304 files and directories currently installed.)
Preparing to unpack .../00-libgirepository-1.0-1_1.58.3-2_armhf.deb ...
Unpacking libgirepository-1.0-1:armhf (1.58.3-2) ...
Selecting previously unselected package gir1.2-glib-2.0:armhf.
Preparing to unpack .../01-gir1.2-glib-2.0_1.58.3-2_armhf.deb ...
Unpacking gir1.2-glib-2.0:armhf (1.58.3-2) ...
Selecting previously unselected package javascript-common.
Preparing to unpack .../02-javascript-common_11_all.deb ...
Unpacking javascript-common (11) ...
Selecting previously unselected package libjs-jquery.
Preparing to unpack .../03-libjs-jquery_3.3.1~dfsg-3+deb10u1_all.deb ...
Unpacking libjs-jquery (3.3.1~dfsg-3+deb10u1) ...
Selecting previously unselected package libjs-underscore.
Preparing to unpack .../04-libjs-underscore_1.9.1~dfsg-1+deb10u1_all.deb ...
Unpacking libjs-underscore (1.9.1~dfsg-1+deb10u1) ...
Selecting previously unselected package libjs-sphinxdoc.
Preparing to unpack .../05-libjs-sphinxdoc_1.8.4-1_all.deb ...
Unpacking libjs-sphinxdoc (1.8.4-1) ...
Selecting previously unselected package libpython-all-dev:armhf.
Preparing to unpack .../06-libpython-all-dev_2.7.16-1_armhf.deb ...
Unpacking libpython-all-dev:armhf (2.7.16-1) ...
Selecting previously unselected package python-all.
Preparing to unpack .../07-python-all_2.7.16-1_armhf.deb ...
Unpacking python-all (2.7.16-1) ...
Selecting previously unselected package python-all-dev.
Preparing to unpack .../08-python-all-dev_2.7.16-1_armhf.deb ...
Unpacking python-all-dev (2.7.16-1) ...
Selecting previously unselected package python-asn1crypto.
Preparing to unpack .../09-python-asn1crypto_0.24.0-1_all.deb ...
Unpacking python-asn1crypto (0.24.0-1) ...
Selecting previously unselected package python-cffi-backend.
Preparing to unpack .../10-python-cffi-backend_1.12.2-1_armhf.deb ...
Unpacking python-cffi-backend (1.12.2-1) ...
Selecting previously unselected package python-configparser.
Preparing to unpack .../11-python-configparser_3.5.0b2-1_all.deb ...
Unpacking python-configparser (3.5.0b2-1) ...
Selecting previously unselected package python-crypto.
Preparing to unpack .../12-python-crypto_2.6.1-9+b1_armhf.deb ...
Unpacking python-crypto (2.6.1-9+b1) ...
Selecting previously unselected package python-enum34.
Preparing to unpack .../13-python-enum34_1.1.6-2_all.deb ...
Unpacking python-enum34 (1.1.6-2) ...
Selecting previously unselected package python-ipaddress.
Preparing to unpack .../14-python-ipaddress_1.0.17-1_all.deb ...
Unpacking python-ipaddress (1.0.17-1) ...
Selecting previously unselected package python-six.
Preparing to unpack .../15-python-six_1.12.0-1_all.deb ...
Unpacking python-six (1.12.0-1) ...
Selecting previously unselected package python-cryptography.
Preparing to unpack .../16-python-cryptography_2.6.1-3+deb10u2_armhf.deb ...
Unpacking python-cryptography (2.6.1-3+deb10u2) ...
Selecting previously unselected package python-dbus.
Preparing to unpack .../17-python-dbus_1.2.8-3_armhf.deb ...
Unpacking python-dbus (1.2.8-3) ...
Selecting previously unselected package python-entrypoints.
Preparing to unpack .../18-python-entrypoints_0.3-1_all.deb ...
Unpacking python-entrypoints (0.3-1) ...
Selecting previously unselected package python-gi.
Preparing to unpack .../19-python-gi_3.30.4-1_armhf.deb ...
Unpacking python-gi (3.30.4-1) ...
Selecting previously unselected package python-secretstorage.
Preparing to unpack .../20-python-secretstorage_2.3.1-2_all.deb ...
Unpacking python-secretstorage (2.3.1-2) ...
Selecting previously unselected package python-keyring.
Preparing to unpack .../21-python-keyring_17.1.1-1_all.deb ...
Unpacking python-keyring (17.1.1-1) ...
Selecting previously unselected package python-keyrings.alt.
Preparing to unpack .../22-python-keyrings.alt_3.1.1-1_all.deb ...
Unpacking python-keyrings.alt (3.1.1-1) ...
Selecting previously unselected package python-pip.
Preparing to unpack .../23-python-pip_18.1-5+rpt1_all.deb ...
Unpacking python-pip (18.1-5+rpt1) ...
Selecting previously unselected package python-setuptools.
Preparing to unpack .../24-python-setuptools_40.8.0-1_all.deb ...
Unpacking python-setuptools (40.8.0-1) ...
Selecting previously unselected package python-wheel.
Preparing to unpack .../25-python-wheel_0.32.3-2_all.deb ...
Unpacking python-wheel (0.32.3-2) ...
Selecting previously unselected package python-xdg.
Preparing to unpack .../26-python-xdg_0.25-5_all.deb ...
Unpacking python-xdg (0.25-5) ...
Setting up javascript-common (11) ...
Setting up python-enum34 (1.1.6-2) ...
Setting up python-crypto (2.6.1-9+b1) ...
Setting up libpython-all-dev:armhf (2.7.16-1) ...
Setting up python-wheel (0.32.3-2) ...
Setting up python-asn1crypto (0.24.0-1) ...
Setting up python-all (2.7.16-1) ...
Setting up python-six (1.12.0-1) ...
Setting up python-xdg (0.25-5) ...
Setting up python-dbus (1.2.8-3) ...
Setting up python-pip (18.1-5+rpt1) ...
Setting up python-setuptools (40.8.0-1) ...
Setting up libgirepository-1.0-1:armhf (1.58.3-2) ...
Setting up python-all-dev (2.7.16-1) ...
Setting up libjs-jquery (3.3.1~dfsg-3+deb10u1) ...
Setting up python-ipaddress (1.0.17-1) ...
Setting up libjs-underscore (1.9.1~dfsg-1+deb10u1) ...
Setting up python-cffi-backend (1.12.2-1) ...
Setting up python-keyrings.alt (3.1.1-1) ...
Setting up python-cryptography (2.6.1-3+deb10u2) ...
Setting up gir1.2-glib-2.0:armhf (1.58.3-2) ...
Setting up libjs-sphinxdoc (1.8.4-1) ...
Setting up python-gi (3.30.4-1) ...
Setting up python-secretstorage (2.3.1-2) ...
Setting up python-configparser (3.5.0b2-1) ...
Setting up python-entrypoints (0.3-1) ...
Setting up python-keyring (17.1.1-1) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for libc-bin (2.28-10+rpi1) ...

Now try to unistall aiohttp but is useless at the moment, anyway i have tried

root@RASPBERRYPi3FLIRC:~# pip uninstall aiohttp
Skipping aiohttp as it is not installed.

Now install on root aiohttp and error because need a version of python

root@RASPBERRYPi3FLIRC:~# pip install aiohttp
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting aiohttp
  Downloading https://files.pythonhosted.org/packages/2e/e6/9175733f42cec4f2cd6834564517f2f6260e27dab5edb75afdaa66f101bb/iohttp-2.3.1.tar.gz (1.1MB)
    100% |████████████████████████████████| 1.1MB 189kB/s
  Installing build dependencies ... done
aiohttp requires Python '>=3.4.2' but the running Python is 2.7.16

Install python 3.4

root@RASPBERRYPi3FLIRC:~# apt-get install python3.4
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  python-colorzero
Use 'apt autoremove' to remove it.
The following additional packages will be installed:
  libpython3.4-minimal libpython3.4-stdlib python3.4-minimal
Suggested packages:
  python3.4-venv python3.4-doc binfmt-support
The following NEW packages will be installed:
  libpython3.4-minimal libpython3.4-stdlib python3.4 python3.4-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,020 kB of archives.
After this operation, 20.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython3.4-minimal armhf 3.4.4-3+rpi1 [464 kB]
Get:2 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3.4-minimal armhf 3.4.4-3+rpi1 [1,267 kB]
Get:3 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython3.4-stdlib armhf 3.4.4-3+rpi1 [2,059 kB]
Get:4 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3.4 armhf 3.4.4-3+rpi1 [229 kB]
Fetched 4,020 kB in 3s (1,374 kB/s)
Selecting previously unselected package libpython3.4-minimal:armhf.
(Reading database ... 51245 files and directories currently installed.)
Preparing to unpack .../libpython3.4-minimal_3.4.4-3+rpi1_armhf.deb ...
Unpacking libpython3.4-minimal:armhf (3.4.4-3+rpi1) ...
Selecting previously unselected package python3.4-minimal.
Preparing to unpack .../python3.4-minimal_3.4.4-3+rpi1_armhf.deb ...
Unpacking python3.4-minimal (3.4.4-3+rpi1) ...
Selecting previously unselected package libpython3.4-stdlib:armhf.
Preparing to unpack .../libpython3.4-stdlib_3.4.4-3+rpi1_armhf.deb ...
Unpacking libpython3.4-stdlib:armhf (3.4.4-3+rpi1) ...
Selecting previously unselected package python3.4.
Preparing to unpack .../python3.4_3.4.4-3+rpi1_armhf.deb ...
Unpacking python3.4 (3.4.4-3+rpi1) ...
Setting up libpython3.4-minimal:armhf (3.4.4-3+rpi1) ...
Setting up libpython3.4-stdlib:armhf (3.4.4-3+rpi1) ...
Setting up python3.4-minimal (3.4.4-3+rpi1) ...
Setting up python3.4 (3.4.4-3+rpi1) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for mime-support (3.62) ...

Time to launch

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.4 websocket_example.py
  File "websocket_example.py", line 39
    async def log_state_change(data: Tuple[GeAppliance, Dict[ErdCodeType, Any]]):
            ^
SyntaxError: invalid syntax

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

You'll need at least python 3.8 instead of python 3.4, older versions don't support the newer functionality.

@RobertusIT
Copy link

RobertusIT commented Jul 31, 2021

You'll need at least python 3.8 instead of python 3.4, older versions don't support the newer functionality.

delete python 3.4

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# apt-get purge python3.4
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libpython3.4-minimal libpython3.4-stdlib python-colorzero python3.4-minimal
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  python3.4*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 319 kB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 52067 files and directories currently installed.)
Removing python3.4 (3.4.4-3+rpi1) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for mime-support (3.62) ...

Then install 3.8 but is already installed

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# apt-get install python3.8
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3.8 is already the newest version (3.8.7-1~bpo10+1).
The following packages were automatically installed and are no longer required:
  libpython3.4-minimal libpython3.4-stdlib python-colorzero python3.4-minimal
Use 'apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Try again

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 16, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

Here we can see that aiohttp require python more than 3.4.2, but i have tried with 3.8 and doesn't works, like you see

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# pip install aiohttp
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting aiohttp
  Using cached https://files.pythonhosted.org/packages/2e/e6/9175733f42cec4f2cd6834564517f2f6260e27dab5edb75afdaa66f101bb/aiohttp-2.3.1.tar.gz
  Installing build dependencies ... done
aiohttp requires Python '>=3.4.2' but the running Python is 2.7.16

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

it appears that root is using a different version of python, so when you call pip or python it is using python 2.7 by default. (you can verify by running python --version, it will return 2.7). You might be able to do sudo apt install python-is-python3 to get the system to use python3 by default. If not, you can try the following:

sudo apt-get install python3 python3-pip

Then see what the python alternatives are:
sudo update-alternatives --config python

If you don't see the 3.8 version listed, you can then install it:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 10

@simbaja
Copy link
Owner Author

simbaja commented Jul 31, 2021

You might also be able to do pip3 install aiohttp as well, which might be easier if it works.

@RobertusIT
Copy link

it appears that root is using a different version of python, so when you call pip or python it is using python 2.7 by default. (you can verify by running python --version, it will return 2.7). You might be able to do sudo apt install python-is-python3 to get the system to use python3 by default. If not, you can try the following:

sudo apt-get install python3 python3-pip

Then see what the python alternatives are:
sudo update-alternatives --config python

If you don't see the 3.8 version listed, you can then install it:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 10

In first i want to say thanks for the patience.
On root:

root@RASPBERRYPi3FLIRC:~# python --version
Python 2.7.16

Tried to install python 3 in root

root@RASPBERRYPi3FLIRC:~# apt install python-is-python3
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python-is-python3

Now i tried to install with your 2nd command, about python3

root@RASPBERRYPi3FLIRC:~# apt-get install python3 python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3 is already the newest version (3.7.3-1).
python3 set to manually installed.
The following packages were automatically installed and are no longer required:
  libpython3.4-minimal libpython3.4-stdlib python-colorzero python3.4-minimal
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  dh-python libpython3-dev libpython3.7-dev python3-asn1crypto
  python3-cffi-backend python3-crypto python3-cryptography python3-dbus
  python3-dev python3-distutils python3-entrypoints python3-gi python3-keyring
  python3-keyrings.alt python3-lib2to3 python3-secretstorage
  python3-setuptools python3-wheel python3-xdg python3.7-dev
Suggested packages:
  python-crypto-doc python-cryptography-doc python3-cryptography-vectors
  python-dbus-doc python3-dbus-dbg gnome-keyring libkf5wallet-bin
  gir1.2-gnomekeyring-1.0 python-secretstorage-doc python-setuptools-doc
The following NEW packages will be installed:
  dh-python libpython3-dev libpython3.7-dev python3-asn1crypto
  python3-cffi-backend python3-crypto python3-cryptography python3-dbus
  python3-dev python3-distutils python3-entrypoints python3-gi python3-keyring
  python3-keyrings.alt python3-lib2to3 python3-pip python3-secretstorage
  python3-setuptools python3-wheel python3-xdg python3.7-dev
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 49.5 MB of archives.
After this operation, 80.5 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.raspberrypi.org/debian buster/main armhf python3-pip all 18                               .1-5+rpt1 [171 kB]
Get:2 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-li                               b2to3 all 3.7.3-1 [76.7 kB]
Get:3 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-di                               stutils all 3.7.3-1 [142 kB]
Get:4 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf dh-python                                all 3.20190308 [99.3 kB]
Get:7 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf                                python3-asn1crypto all 0.24.0-1 [78.2 kB]
Get:5 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython3                               .7-dev armhf 3.7.3-2+deb10u3 [47.2 MB]
Get:9 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armhf                                python3-crypto armhf 2.6.1-9+b1 [251 kB]
Get:11 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armh                               f python3-dbus armhf 1.2.8-3 [95.9 kB]
Get:13 http://raspbian.raspberrypi.org/raspbian buster/main armhf python3-dev ar                               mhf 3.7.3-1 [1,264 B]
Get:14 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armh                               f python3-entrypoints all 0.3-1 [5,508 B]
Get:15 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armh                               f python3-gi armhf 3.30.4-1 [161 kB]
Get:16 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armh                               f python3-secretstorage all 2.3.1-2 [14.2 kB]
Get:17 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armh                               f python3-keyring all 17.1.1-1 [43.1 kB]
Get:18 http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian buster/main armh                               f python3-keyrings.alt all 3.1.1-1 [18.2 kB]
Get:6 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf libpython3                               -dev armhf 3.7.3-1 [20.1 kB]
Get:8 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-cf                               fi-backend armhf 1.12.2-1 [70.1 kB]
Get:10 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-c                               ryptography armhf 2.6.1-3+deb10u2 [184 kB]
Get:12 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3.7                               -dev armhf 3.7.3-2+deb10u3 [513 kB]
Get:19 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-s                               etuptools all 40.8.0-1 [306 kB]
Get:20 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-w                               heel all 0.32.3-2 [19.4 kB]
Get:21 http://ftp.arnes.si/mirrors/raspbian/raspbian buster/main armhf python3-x                               dg all 0.25-5 [35.9 kB]
Fetched 49.5 MB in 14s (3,595 kB/s)
Selecting previously unselected package python3-lib2to3.
(Reading database ... 52047 files and directories currently installed.)
Preparing to unpack .../00-python3-lib2to3_3.7.3-1_all.deb ...
Unpacking python3-lib2to3 (3.7.3-1) ...
Selecting previously unselected package python3-distutils.
Preparing to unpack .../01-python3-distutils_3.7.3-1_all.deb ...
Unpacking python3-distutils (3.7.3-1) ...
Selecting previously unselected package dh-python.
Preparing to unpack .../02-dh-python_3.20190308_all.deb ...
Unpacking dh-python (3.20190308) ...
Selecting previously unselected package libpython3.7-dev:armhf.
Preparing to unpack .../03-libpython3.7-dev_3.7.3-2+deb10u3_armhf.deb ...
Unpacking libpython3.7-dev:armhf (3.7.3-2+deb10u3) ...
Selecting previously unselected package libpython3-dev:armhf.
Preparing to unpack .../04-libpython3-dev_3.7.3-1_armhf.deb ...
Unpacking libpython3-dev:armhf (3.7.3-1) ...
Selecting previously unselected package python3-asn1crypto.
Preparing to unpack .../05-python3-asn1crypto_0.24.0-1_all.deb ...
Unpacking python3-asn1crypto (0.24.0-1) ...
Selecting previously unselected package python3-cffi-backend.
Preparing to unpack .../06-python3-cffi-backend_1.12.2-1_armhf.deb ...
Unpacking python3-cffi-backend (1.12.2-1) ...
Selecting previously unselected package python3-crypto.
Preparing to unpack .../07-python3-crypto_2.6.1-9+b1_armhf.deb ...
Unpacking python3-crypto (2.6.1-9+b1) ...
Selecting previously unselected package python3-cryptography.
Preparing to unpack .../08-python3-cryptography_2.6.1-3+deb10u2_armhf.deb ...
Unpacking python3-cryptography (2.6.1-3+deb10u2) ...
Selecting previously unselected package python3-dbus.
Preparing to unpack .../09-python3-dbus_1.2.8-3_armhf.deb ...
Unpacking python3-dbus (1.2.8-3) ...
Selecting previously unselected package python3.7-dev.
Preparing to unpack .../10-python3.7-dev_3.7.3-2+deb10u3_armhf.deb ...
Unpacking python3.7-dev (3.7.3-2+deb10u3) ...
Selecting previously unselected package python3-dev.
Preparing to unpack .../11-python3-dev_3.7.3-1_armhf.deb ...
Unpacking python3-dev (3.7.3-1) ...
Selecting previously unselected package python3-entrypoints.
Preparing to unpack .../12-python3-entrypoints_0.3-1_all.deb ...
Unpacking python3-entrypoints (0.3-1) ...
Selecting previously unselected package python3-gi.
Preparing to unpack .../13-python3-gi_3.30.4-1_armhf.deb ...
Unpacking python3-gi (3.30.4-1) ...
Selecting previously unselected package python3-secretstorage.
Preparing to unpack .../14-python3-secretstorage_2.3.1-2_all.deb ...
Unpacking python3-secretstorage (2.3.1-2) ...
Selecting previously unselected package python3-keyring.
Preparing to unpack .../15-python3-keyring_17.1.1-1_all.deb ...
Unpacking python3-keyring (17.1.1-1) ...
Selecting previously unselected package python3-keyrings.alt.
Preparing to unpack .../16-python3-keyrings.alt_3.1.1-1_all.deb ...
Unpacking python3-keyrings.alt (3.1.1-1) ...
Selecting previously unselected package python3-pip.
Preparing to unpack .../17-python3-pip_18.1-5+rpt1_all.deb ...
Unpacking python3-pip (18.1-5+rpt1) ...
Selecting previously unselected package python3-setuptools.
Preparing to unpack .../18-python3-setuptools_40.8.0-1_all.deb ...
Unpacking python3-setuptools (40.8.0-1) ...
Selecting previously unselected package python3-wheel.
Preparing to unpack .../19-python3-wheel_0.32.3-2_all.deb ...
Unpacking python3-wheel (0.32.3-2) ...
Selecting previously unselected package python3-xdg.
Preparing to unpack .../20-python3-xdg_0.25-5_all.deb ...
Unpacking python3-xdg (0.25-5) ...
Setting up python3-entrypoints (0.3-1) ...
Setting up python3-dbus (1.2.8-3) ...
Setting up libpython3.7-dev:armhf (3.7.3-2+deb10u3) ...
Setting up python3-xdg (0.25-5) ...
Setting up python3-wheel (0.32.3-2) ...
Setting up python3.7-dev (3.7.3-2+deb10u3) ...
Setting up python3-gi (3.30.4-1) ...
Setting up python3-crypto (2.6.1-9+b1) ...
Setting up python3-lib2to3 (3.7.3-1) ...
Setting up python3-asn1crypto (0.24.0-1) ...
Setting up python3-cffi-backend (1.12.2-1) ...
Setting up python3-distutils (3.7.3-1) ...
Setting up dh-python (3.20190308) ...
Setting up libpython3-dev:armhf (3.7.3-1) ...
Setting up python3-setuptools (40.8.0-1) ...
Setting up python3-cryptography (2.6.1-3+deb10u2) ...
Setting up python3-dev (3.7.3-1) ...
Setting up python3-pip (18.1-5+rpt1) ...
Setting up python3-keyrings.alt (3.1.1-1) ...
Setting up python3-secretstorage (2.3.1-2) ...
Setting up python3-keyring (17.1.1-1) ...
Processing triggers for man-db (2.8.5-2) ...

No alternative for python

root@RASPBERRYPi3FLIRC:~# update-alternatives --config python
update-alternatives: error: no alternatives for python
root@RASPBERRYPi3FLIRC:~# update-alternatives --install /usr/bin/python python /usr/bin/python3.8 10
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python (python) in auto mode

Now install aiohttp

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# pip3 install aiohttp
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting aiohttp
  Downloading https://www.piwheels.org/simple/aiohttp/aiohttp-3.7.4.post0-cp37-cp37m-linux_armv7l.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 197kB/s
Collecting async-timeout<4.0,>=3.0 (from aiohttp)
  Downloading https://files.pythonhosted.org/packages/e1/1e/5a4441be21b0726c4464f3f23c8b19628372f606755a9d2e46c187e65ec4/async_timeout-3.0.1-py3-none-any.whl
Collecting attrs>=17.3.0 (from aiohttp)
  Downloading https://files.pythonhosted.org/packages/20/a9/ba6f1cd1a1517ff022b35acd6a7e4246371dfab08b8e42b829b6d07913cc/attrs-21.2.0-py2.py3-none-any.whl (53kB)
    100% |████████████████████████████████| 61kB 883kB/s
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp) (3.0.4)
Collecting typing-extensions>=3.6.5 (from aiohttp)
  Downloading https://files.pythonhosted.org/packages/2e/35/6c4fff5ab443b57116cb1aad46421fb719bed2825664e8fe77d66d99bcbc/typing_extensions-3.10.0.0-py3-none-any.whl
Collecting yarl<2.0,>=1.0 (from aiohttp)
  Downloading https://www.piwheels.org/simple/yarl/yarl-1.6.3-cp37-cp37m-linux_armv7l.whl (262kB)
    100% |████████████████████████████████| 266kB 585kB/s
Collecting multidict<7.0,>=4.5 (from aiohttp)
  Downloading https://files.pythonhosted.org/packages/1c/74/e8b46156f37ca56d10d895d4e8595aa2b344cff3c1fb3629ec97a8656ccb/multidict-5.1.0.tar.gz (53kB)
    100% |████████████████████████████████| 61kB 1.5MB/s
  Installing build dependencies ... done
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.6)
Building wheels for collected packages: multidict
  Running setup.py bdist_wheel for multidict ... done
  Stored in directory: /root/.cache/pip/wheels/e7/05/d2/f5c04c29d0e4b234dbcd4b609b51f8c65d67ff9bbd01c904b1
Successfully built multidict
Installing collected packages: async-timeout, attrs, typing-extensions, multidict, yarl, aiohttp
Successfully installed aiohttp-3.7.4.post0 async-timeout-3.0.1 attrs-21.2.0 multidict-5.1.0 typing-extensions-3.10.0.0 yarl-1.6.3
root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 16, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'

@simbaja
Copy link
Owner Author

simbaja commented Aug 1, 2021

In the install log for python, it looks like it's using python 3.7.3-1, but you have python 3.8 as well, so still looks like a versioning thing potentially. It's clearly installed in some spot. Can you do the following:

pip --version
pip3 --version

pip show
pip3 show

@RobertusIT
Copy link

pip3 --version

root@RASPBERRYPi3FLIRC:~# pip show
pip3 shERROR: Please provide a package name or names.
root@RASPBERRYPi3FLIRC:~# pip3 show
ERROR: Please provide a package name or names.
root@RASPBERRYPi3FLIRC:~# pip --version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.8)
root@RASPBERRYPi3FLIRC:~# pip3 --version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

@simbaja
Copy link
Owner Author

simbaja commented Aug 3, 2021

Can you attach the logs that you got when you ran the example?

@RobertusIT
Copy link

Can you attach the logs that you got when you ran the example?

Yes i edited the previous message

@RobertusIT
Copy link

https://accounts.brillion.geappliances.com/consumer/active/applications

On this i can see this now:
image

It say:

My application:

SmartHQ - that i didn't install because i can use only comfort - ge appliances

@simbaja
Copy link
Owner Author

simbaja commented Aug 3, 2021

Ok, you can kill the example, that's all that I'll need to start getting this into the sdk.
Starting with the line D828C9404C09 marked available and ending with Got initial appliance type for GeAppliance(D828C9404C09) (ErdApplianceType.UNKNOWN) is the piece of interest for getting this setup.

I do see an issue in that the model/serial is not present on your device. I'm not sure why that would be, I will look into the what I can use as a substitute since the serial is what we use in HA for a unique identifier.

@RobertusIT
Copy link

Ok, you can kill the example, that's all that I'll need to start getting this into the sdk.
Starting with the line D828C9404C09 marked available and ending with Got initial appliance type for GeAppliance(D828C9404C09) (ErdApplianceType.UNKNOWN) is the piece of interest for getting this setup.

I do see an issue in that the model/serial is not present on your device. I'm not sure why that would be, I will look into the what I can use as a substitute since the serial is what we use in HA for a unique identifier.

my model is https://community.home-assistant.io/t/support-for-ge-appliances-smarthq/283815/14?u=robertusit

but i guess that can't help you

I can try something to change something in playstore and use smarthq ?

@simbaja
Copy link
Owner Author

simbaja commented Aug 3, 2021

My application:

SmartHQ - that i didn't install because i can use only comfort - ge appliances

Well, I guess that confirms some new logic I added to help another user worked... the code auto-authorized SmartHQ on your behalf.

Let's see what we can do to make this work without you going into SmartHQ. If we need to, we can always try sideloading the app from another source if it's not appearing on Google Play.

@simbaja
Copy link
Owner Author

simbaja commented Aug 3, 2021

Can you attach the logs that you got when you ran the example?

Yes i edited the previous message

Can you post a text file, the copy/pasted version has some odd line breaks that make it a little hard to read. If not, that's fine, I can work with what you posted.

@RobertusIT
Copy link

Can you attach the logs that you got when you ran the example?

Yes i edited the previous message

Can you post a text file, the copy/pasted version has some odd line breaks that make it a little hard to read. If not, that's fine, I can work with what you posted.

You see a log a little malformed, because i used putty in a window that i expansed, so you can see some spaces between rows.

If needed i can re-launch command and put putty full size

@simbaja
Copy link
Owner Author

simbaja commented Aug 3, 2021

I'll work with what you provided... let me look into things and figure it out.

@simbaja
Copy link
Owner Author

simbaja commented Aug 4, 2021

Can you pull down the latest version and then re-run the example? I want to confirm I got all the values identified and it's decoding it correctly. Thanks for your help!

@RobertusIT
Copy link

RobertusIT commented Aug 4, 2021

Can you pull down the latest version and then re-run the example? I want to confirm I got all the values identified and it's decoding it correctly. Thanks for your help!

root@RASPBERRYPi3FLIRC:~# pip install gehomesdk
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: gehomesdk in /usr/local/lib/python3.8/dist-packages (0.4.0)
Requirement already satisfied: bidict in /usr/local/lib/python3.8/dist-packages (from gehomesdk) (0.21.2)
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from gehomesdk) (2.21.0)
Requirement already satisfied: humanize in /usr/local/lib/python3.8/dist-packages (from gehomesdk) (3.11.0)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.8/dist-packages (from gehomesdk) (3.7.4.post0)
Requirement already satisfied: websockets in /usr/local/lib/python3.8/dist-packages (from gehomesdk) (9.1)
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from humanize->gehomesdk) (40.8.0)
Requirement already satisfied: chardet<5.0,>=2.0 in /usr/lib/python3/dist-packages (from aiohttp->gehomesdk) (3.0.4)
Requirement already satisfied: typing-extensions>=3.6.5 in /usr/local/lib/python3.8/dist-packages (from aiohttp->gehomesdk) (3.10.0.0)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.8/dist-packages (from aiohttp->gehomesdk) (1.6.3)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.8/dist-packages (from aiohttp->gehomesdk) (5.1.0)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.8/dist-packages (from aiohttp->gehomesdk) (21.2.0)
Requirement already satisfied: async-timeout<4.0,>=3.0 in /usr/local/lib/python3.8/dist-packages (from aiohttp->gehomesdk) (3.0.1)
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp->gehomesdk) (2.6)

I didn't see upgrade in this way, but maybe i misunderstood

@simbaja
Copy link
Owner Author

simbaja commented Aug 4, 2021

Can you pull down via git or via the zip file method you used (i.e. directly from github)? I haven't packaged it yet, wanted to make sure it all worked first.

@RobertusIT
Copy link

RobertusIT commented Aug 4, 2021

Can you pull down via git or via the zip file method you used (i.e. directly from github)? I haven't packaged it yet, wanted to make sure it all worked first.

I had previous zip version, so delete it

pi@RASPBERRYPi3FLIRC:/home $ ls
gehome-master  homeassistant  master.zip  pi
pi@RASPBERRYPi3FLIRC:/home $ sudo rm master.zip

Rename the old folder
pi@RASPBERRYPi3FLIRC:/home $ sudo mv gehome-master/ gehome-master-OLD

Get from github the new zip

pi@RASPBERRYPi3FLIRC:/home $ sudo wget https://github.com/simbaja/gehome/archive/refs/heads/master.zip
--2021-08-04 21:38:59--  https://github.com/simbaja/gehome/archive/refs/heads/master.zip
Resolving github.com (github.com)... 140.82.121.3
Connecting to github.com (github.com)|140.82.121.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/simbaja/gehome/zip/refs/heads/master [following]
--2021-08-04 21:39:00--  https://codeload.github.com/simbaja/gehome/zip/refs/heads/master
Resolving codeload.github.com (codeload.github.com)... 140.82.121.10
Connecting to codeload.github.com (codeload.github.com)|140.82.121.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’

master.zip                                           [ <=>                                                                                                    ] 141.04K  --.-KB/s    in 0.1s

2021-08-04 21:39:00 (1021 KB/s) - ‘master.zip’ saved [144421]

Unzip it

pi@RASPBERRYPi3FLIRC:/home $ sudo unzip master.zip
Archive:  master.zip
06e978af4ee7f0cf33802f044df707c79ce430f6
   creating: gehome-master/
  inflating: gehome-master/.gitattributes
  inflating: gehome-master/.gitignore
  inflating: gehome-master/LICENSE
 extracting: gehome-master/MANIFEST.in
  inflating: gehome-master/README.md
   creating: gehome-master/examples/
 extracting: gehome-master/examples/__init__.py
  inflating: gehome-master/examples/websocket_example.py
  inflating: gehome-master/examples/xmpp_example.py
   creating: gehome-master/gehomesdk/
  inflating: gehome-master/gehomesdk/__init__.py
   creating: gehome-master/gehomesdk/clients/
  inflating: gehome-master/gehomesdk/clients/__init__.py
  inflating: gehome-master/gehomesdk/clients/async_helpers.py
  inflating: gehome-master/gehomesdk/clients/async_login_flows.py
  inflating: gehome-master/gehomesdk/clients/base_client.py
  inflating: gehome-master/gehomesdk/clients/const.py
  inflating: gehome-master/gehomesdk/clients/ge_client_xmpp.py
  inflating: gehome-master/gehomesdk/clients/states.py
  inflating: gehome-master/gehomesdk/clients/websocket_client.py
  inflating: gehome-master/gehomesdk/clients/xmpp_client.py
   creating: gehome-master/gehomesdk/erd/
  inflating: gehome-master/gehomesdk/erd/__init__.py
   creating: gehome-master/gehomesdk/erd/converters/
  inflating: gehome-master/gehomesdk/erd/converters/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/abstract.py
   creating: gehome-master/gehomesdk/erd/converters/ac/
  inflating: gehome-master/gehomesdk/erd/converters/ac/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_ac_fan_setting_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_ac_filter_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_ac_operation_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_ac_target_temperature_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_sac_available_modes_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_sac_target_temperature_range_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_wac_demand_response_power_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/ac/erd_wac_demand_response_state_converter.py
   creating: gehome-master/gehomesdk/erd/converters/advantium/
  inflating: gehome-master/gehomesdk/erd/converters/advantium/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_setting_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_time_adjust_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_time_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_cook_time_remaining_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_kitchen_timer_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_microwave_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_precision_min_max_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/advantium/erd_advantium_remote_cook_mode_config_converter.py
   creating: gehome-master/gehomesdk/erd/converters/dishwasher/
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/cycle_name_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_cycle_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_dishwasher_door_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_rinse_agent_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/erd_user_setting_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/dishwasher/operating_mode_converter.py
   creating: gehome-master/gehomesdk/erd/converters/fridge/
  inflating: gehome-master/gehomesdk/erd/converters/fridge/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/erd_filter_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_door_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_ice_bucket_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_model_info_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_set_point_limits_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/fridge_set_points_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/hot_water_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/fridge/ice_maker_control_status_converter.py
   creating: gehome-master/gehomesdk/erd/converters/laundry/
  inflating: gehome-master/gehomesdk/erd/converters/laundry/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/dryness_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/ecodry_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/laundry_cycle_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/laundry_door_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/laundry_sub_cycle_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/machine_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/rinse_option_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/sheet_usage_configuration_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/smart_dispense_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/smart_dispense_tank_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/soil_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/spintime_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/tank_selected_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/temperature_option_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/tumble_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/laundry/washtemp_level_converter.py
   creating: gehome-master/gehomesdk/erd/converters/oven/
  inflating: gehome-master/gehomesdk/erd/converters/oven/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/cooktop_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_available_cook_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_cooktop_config_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_oven_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_app_probe_control_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_probe_battery_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_probe_target_time_reached_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/erd_precision_cooking_start_sous_vide_timer_active_status_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/oven_configuration_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/oven_cook_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/oven/oven_ranges_converter.py
   creating: gehome-master/gehomesdk/erd/converters/primitives/
  inflating: gehome-master/gehomesdk/erd/converters/primitives/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_bool_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_bytes_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_int_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_signed_byte_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_string_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_time_span_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/primitives/erd_time_span_seconds_converter.py
   creating: gehome-master/gehomesdk/erd/converters/specialized/
  inflating: gehome-master/gehomesdk/erd/converters/specialized/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_appliance_type_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_clock_format_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_end_tone_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_measurement_units_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_model_serial_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_on_off_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_software_version_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_sound_level_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/specialized/erd_unit_type_converter.py
   creating: gehome-master/gehomesdk/erd/converters/water_filter/
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/__init__.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_alert_settings_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_alert_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_manual_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_mode_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_position_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_filter_valve_state_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_leak_validity_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_waterfilter_flow_converter.py
  inflating: gehome-master/gehomesdk/erd/converters/water_filter/erd_waterfilter_life_converter.py
  inflating: gehome-master/gehomesdk/erd/erd_code_class.py
  inflating: gehome-master/gehomesdk/erd/erd_codes.py
  inflating: gehome-master/gehomesdk/erd/erd_configuration.py
  inflating: gehome-master/gehomesdk/erd/erd_encoder.py
   creating: gehome-master/gehomesdk/erd/values/
  inflating: gehome-master/gehomesdk/erd/values/__init__.py
   creating: gehome-master/gehomesdk/erd/values/ac/
  inflating: gehome-master/gehomesdk/erd/values/ac/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/ac/sac_enums.py
  inflating: gehome-master/gehomesdk/erd/values/ac/wac_enums.py
   creating: gehome-master/gehomesdk/erd/values/advantium/
  inflating: gehome-master/gehomesdk/erd/values/advantium/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_cook_setting.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_enums.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_operation_mode.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/advantium_operation_mode_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_cook_setting.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_cook_status.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_cook_time_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_kitchen_timer_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_microwave_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_precision_min_max.py
  inflating: gehome-master/gehomesdk/erd/values/advantium/erd_advantium_remote_cook_mode_config.py
   creating: gehome-master/gehomesdk/erd/values/common/
  inflating: gehome-master/gehomesdk/erd/values/common/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_appliance_type.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_clock_format.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_end_tone.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_measurement_units.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_on_off.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_present.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_sound_level.py
  inflating: gehome-master/gehomesdk/erd/values/common/erd_unit_type.py
   creating: gehome-master/gehomesdk/erd/values/dishwasher/
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/cycle_state_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_cycle_state.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_dishwasher_door_status.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_operating_mode.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_rinse_agent.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/erd_user_setting.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/operating_mode.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/operating_mode_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/dishwasher/rinse_agent_mapping.py
   creating: gehome-master/gehomesdk/erd/values/fridge/
  inflating: gehome-master/gehomesdk/erd/values/fridge/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_door_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_filter_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_full_not_full.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_hot_water_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/erd_pod_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_door_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_ice_bucket_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_model_info.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_set_point_limits.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/fridge_set_points.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/hot_water_status.py
  inflating: gehome-master/gehomesdk/erd/values/fridge/ice_maker_control_status.py
   creating: gehome-master/gehomesdk/erd/values/laundry/
  inflating: gehome-master/gehomesdk/erd/values/laundry/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/dryness_level.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/dryness_level_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/ecodry_status.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/ecodry_status_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/laundry_enums.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/machine_state.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/machine_state_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/temperature_option.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/temperature_option_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/washtemp_level.py
  inflating: gehome-master/gehomesdk/erd/values/laundry/washtemp_level_mapping.py
   creating: gehome-master/gehomesdk/erd/values/oven/
  inflating: gehome-master/gehomesdk/erd/values/oven/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/oven/available_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/burner.py
  inflating: gehome-master/gehomesdk/erd/values/oven/const.py
  inflating: gehome-master/gehomesdk/erd/values/oven/cooktop_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_available_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_closed_loop_cooking_configuration.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_closed_loop_cooking_devices_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_cooktop_config.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_cooktop_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_oven_configuration.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_oven_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_oven_state.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_app_probe_control_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_probe_battery_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_probe_target_time_reached.py
  inflating: gehome-master/gehomesdk/erd/values/oven/erd_precision_cooking_start_sous_vide_timer_active_status.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_configuration.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_cook_mode.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_cook_mode_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_cook_setting.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_display_state_mapping.py
  inflating: gehome-master/gehomesdk/erd/values/oven/oven_ranges.py
   creating: gehome-master/gehomesdk/erd/values/water_filter/
  inflating: gehome-master/gehomesdk/erd/values/water_filter/__init__.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_alert_settings.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_alert_state.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_flowrate.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_leak_validity.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_life.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_manual_mode.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_mode.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_position.py
  inflating: gehome-master/gehomesdk/erd/values/water_filter/erd_waterfilter_valve_state.py
   creating: gehome-master/gehomesdk/exception/
  inflating: gehome-master/gehomesdk/exception/__init__.py
  inflating: gehome-master/gehomesdk/exception/ge_auth_failed_error.py
  inflating: gehome-master/gehomesdk/exception/ge_client_disconnected_error.py
  inflating: gehome-master/gehomesdk/exception/ge_duplicate_appliance_error.py
  inflating: gehome-master/gehomesdk/exception/ge_exception.py
  inflating: gehome-master/gehomesdk/exception/ge_general_server_error.py
  inflating: gehome-master/gehomesdk/exception/ge_needs_reauthentication_error.py
  inflating: gehome-master/gehomesdk/exception/ge_not_authenticated_error.py
  inflating: gehome-master/gehomesdk/exception/ge_request_error.py
  inflating: gehome-master/gehomesdk/exception/ge_set_erd_not_allowed_error.py
  inflating: gehome-master/gehomesdk/exception/ge_unsupported_operation_error.py
  inflating: gehome-master/gehomesdk/ge_appliance.py
   creating: gehome-master/notes/
  inflating: gehome-master/notes/oauth_secrets.py
  inflating: gehome-master/setup.py
   creating: gehome-master/tests/
 extracting: gehome-master/tests/__init__.py
  inflating: gehome-master/tests/test_decoders.py

Now i copy secret.py from old folder to new folder
pi@RASPBERRYPi3FLIRC:/home/gehome-master-OLD/examples $ sudo cp secret.py /home/gehome-master/examples/

Tried to launch

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 13, in <module>
    from examples.secrets import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples'

So edited with nano
root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# nano websocket_example.py
FROM
from examples.secrets import USERNAME, PASSWORD
TO
from examples.secret import USERNAME, PASSWORD

No luck

So i did it:

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# pip install examples
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting examples
  Downloading https://files.pythonhosted.org/packages/50/5b/1ba3532c18528e49a963664b70896933b2e59049482831953e9d1b387bb7/examples-1.0.2-py3-none-any.whl
Collecting pydantic>=0.32.2 (from examples)
  Downloading https://files.pythonhosted.org/packages/ff/74/54e030641601112309f6d2af620774e9080f99c7a15742fc6a0b170c4076/pydantic-1.8.2-py3-none-any.whl (126kB)
    100% |████████████████████████████████| 133kB 874kB/s
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.8/dist-packages (from pydantic>=0.32.2->examples) (3.10.0.0)
Installing collected packages: pydantic, examples
Successfully installed examples-1.0.2 pydantic-1.8.2

But

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py
Traceback (most recent call last):
  File "websocket_example.py", line 13, in <module>
    from examples.secret import USERNAME, PASSWORD
ModuleNotFoundError: No module named 'examples.secret'

@simbaja
Copy link
Owner Author

simbaja commented Aug 4, 2021

Did you recopy your secret.py file over (or create a new one)?

@RobertusIT
Copy link

Did you recopy your secret.py file over (or create a new one)?

copy

@simbaja
Copy link
Owner Author

simbaja commented Aug 4, 2021

just noticed you did pip install examples, you'll need to do pip uninstall examples. examples in this case is related to the our examples for the library, not a package. After that, if you re-do this: #22 (comment), it should hopefully work for your configuration.

@RobertusIT
Copy link

just noticed you did pip install examples, you'll need to do pip uninstall examples. examples in this case is related to the our examples for the library, not a package. After that, if you re-do this: #22 (comment), it should hopefully work for your configuration.

Done !

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py
2021-08-04 22:08:06,456 DEBUG    Using selector: EpollSelector
websocket_example.py:82: DeprecationWarning: The object should be created within an async function
  session = aiohttp.ClientSession()
2021-08-04 22:08:06,459 DEBUG    Getting OAuth2 token
2021-08-04 22:08:06,470 DEBUG    Client changed state: GeClientState.INITIALIZING to GeClientState.AUTHORIZING_OAUTH
2021-08-04 22:08:08,605 DEBUG    Getting WS credentials
2021-08-04 22:08:08,609 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-04 22:08:08,889 INFO     Starting GE Appliances client
2021-08-04 22:08:09,005 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-04 22:08:09,185 DEBUG    client - state = CONNECTING
2021-08-04 22:08:09,334 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x731fe0e8>)
2021-08-04 22:08:09,335 DEBUG    client > GET /?access_token=ew1cpeeb6imnesmcsqqaynanyazhbp5d HTTP/1.1
2021-08-04 22:08:09,335 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', 'tsZsb39speFdMX                                                                                                                                                                                             b8brRCEw=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-04 22:08:09,602 DEBUG    client - event = data_received(<212 bytes>)
2021-08-04 22:08:09,604 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-04 22:08:09,604 DEBUG    client < Headers([('Date', 'Wed, 04 Aug 2021 20:08:09 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', 'jUBI6GP2yVk5zeThnmdU                                                                                                                                                                                             hSbfkLI='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-04 22:08:09,605 DEBUG    client - state = OPEN
2021-08-04 22:08:09,606 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=Fals                                                                                                                                                                                             e, rsv2=False, rsv3=False)
2021-08-04 22:08:09,608 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "p                                                                                                                                                                                             ath": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:09,610 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-04 22:08:09,724 DEBUG    client - event = data_received(<49 bytes>)
2021-08-04 22:08:09,725 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:09,755 DEBUG    client - event = data_received(<16 bytes>)
2021-08-04 22:08:09,756 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:09,841 DEBUG    client - event = data_received(<256 bytes>)
2021-08-04 22:08:09,842 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","metho                                                                                                                                                                                             d":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Condition                                                                                                                                                                                             er","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:09,846 DEBUG    D828C9404C09 marked available
2021-08-04 22:08:09,847 DEBUG    Adding appliance D828C9404C09
2021-08-04 22:08:09,848 DEBUG    Requesting update for client D828C9404C09
2021-08-04 22:08:09,848 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "p                                                                                                                                                                                             ath": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:09,850 DEBUG    Requesting features for client D828C9404C09
2021-08-04 22:08:09,851 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "p                                                                                                                                                                                             ath": "/v1/appliance/D828C9404C09/feature", "id": "Request-features"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:09,853 DEBUG    Registering update callback for GeAppliance(D828C9404C09) (Unknown Type)
2021-08-04 22:08:10,029 DEBUG    client - event = data_received(<215 bytes>)
2021-08-04 22:08:10,031 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","m                                                                                                                                                                                             ethod":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x000                                                                                                                                                                                             1","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000                                                                                                                                                                                             000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","va                                                                                                                                                                                             lue":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"                                                                                                                                                                                             0x7003","value":"004D","time":"2021-08-04T19:37:26.183Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":                                                                                                                                                                                             "0x7A02","value":"5A","time":"2021-08-04T19:42:38.257Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-04T19:37:22.267Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"                                                                                                                                                                                             0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rs                                                                                                                                                                                             v1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:10,033 DEBUG    Setting ErdCode.MODEL_NUMBER to
2021-08-04 22:08:10,033 DEBUG    Setting ErdCode.SERIAL_NUMBER to
2021-08-04 22:08:10,034 DEBUG    Setting ErdCode.TEMPERATURE_UNIT to ErdMeasurementUnits.METRIC
2021-08-04 22:08:10,035 DEBUG    Setting ErdCode.APPLIANCE_TYPE to ErdApplianceType.SPLIT_AIR_CONDITIONER
2021-08-04 22:08:10,035 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION to 0.0.6.32
2021-08-04 22:08:10,036 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION_AVAILABLE to 0.0.0.0
2021-08-04 22:08:10,037 DEBUG    Setting ErdCode.ACM_UPDATING to False
2021-08-04 22:08:10,037 DEBUG    Setting ErdCode.AC_TARGET_TEMPERATURE to 77
2021-08-04 22:08:10,038 DEBUG    Setting ErdCode.AC_FAN_SETTING to ErdAcFanSetting.HIGH
2021-08-04 22:08:10,038 DEBUG    Setting ErdCode.AC_OPERATION_MODE to ErdAcOperationMode.COOL
2021-08-04 22:08:10,039 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 90
2021-08-04 22:08:10,039 DEBUG    Setting ErdCode.AC_POWER_STATUS to ErdOnOff.ON
2021-08-04 22:08:10,040 DEBUG    Setting ErdCode.SAC_AVAILABLE_MODES to ErdSacAvailableModes(has_heat=1, has_dry=2, has_auto=0, raw_value='03')
2021-08-04 22:08:10,040 DEBUG    Setting ErdCode.SAC_SLEEP_MODE to ErdOnOff.NA
2021-08-04 22:08:10,041 DEBUG    client - state = CLOSING
2021-08-04 22:08:10,042 DEBUG    client > Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:10,051 DEBUG    client - event = data_received(<41 bytes>)
2021-08-04 22:08:10,052 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"Request-features","request":{"host":"api.brillion.geappliances.com","meth                                                                                                                                                                                             od":"GET","path":"/v1/appliance/D828C9404C09/feature"},"success":true,"code":200,"body":{"kind":"appliance#applianceFeature","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","features":[                                                                                                                                                                                             ]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:10,111 DEBUG    client - event = data_received(<4 bytes>)
2021-08-04 22:08:10,112 DEBUG    client < Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:10,114 DEBUG    client - event = connection_lost(None)
2021-08-04 22:08:10,114 DEBUG    client - state = CLOSED
2021-08-04 22:08:10,114 DEBUG    client x code = 1000, reason = [no reason]
2021-08-04 22:08:10,115 DEBUG    client x closing TCP connection
2021-08-04 22:08:10,116 INFO     Unhandled exception while running client: __new__() takes 3 positional arguments but 4 were given, ignoring and restarting
2021-08-04 22:08:10,117 DEBUG    Waiting before reconnecting
2021-08-04 22:08:10,117 DEBUG    Client changed state: GeClientState.CONNECTED to GeClientState.DROPPED
2021-08-04 22:08:10,118 DEBUG    Client changed state: GeClientState.DROPPED to GeClientState.WAITING
2021-08-04 22:08:12,120 DEBUG    Refreshing authentication before reconnecting
2021-08-04 22:08:12,120 DEBUG    Refreshing OAuth2 token
2021-08-04 22:08:12,127 DEBUG    Client changed state: GeClientState.WAITING to GeClientState.AUTHORIZING_OAUTH
2021-08-04 22:08:12,543 DEBUG    Getting WS credentials
2021-08-04 22:08:12,547 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-04 22:08:12,658 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-04 22:08:12,729 DEBUG    client - state = CONNECTING
2021-08-04 22:08:12,874 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x731fe718>)
2021-08-04 22:08:12,876 DEBUG    client > GET /?access_token=ew1cpp5ctqg47dgnzzonr5vnffr8qmrw HTTP/1.1
2021-08-04 22:08:12,876 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', 'iGhsJm9hXtK/pi                                                                                                                                                                                             I9klbWBw=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-04 22:08:13,104 DEBUG    client - event = data_received(<212 bytes>)
2021-08-04 22:08:13,106 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-04 22:08:13,107 DEBUG    client < Headers([('Date', 'Wed, 04 Aug 2021 20:08:13 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', 'abwrByPRh5tn+iZi03v+                                                                                                                                                                                             dQ+e/n0='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-04 22:08:13,108 DEBUG    client - state = OPEN
2021-08-04 22:08:13,109 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=Fals                                                                                                                                                                                             e, rsv2=False, rsv3=False)
2021-08-04 22:08:13,111 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "p                                                                                                                                                                                             ath": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:13,113 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-04 22:08:13,214 DEBUG    client - event = data_received(<49 bytes>)
2021-08-04 22:08:13,215 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:13,330 DEBUG    client - event = data_received(<256 bytes>)
2021-08-04 22:08:13,332 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","metho                                                                                                                                                                                             d":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Condition                                                                                                                                                                                             er","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:13,334 DEBUG    D828C9404C09 marked available
2021-08-04 22:08:13,505 DEBUG    client - event = data_received(<16 bytes>)
2021-08-04 22:08:13,507 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:13,693 DEBUG    client - event = data_received(<51 bytes>)
2021-08-04 22:08:13,695 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","success":true,"change":"ADDED"}', rsv                                                                                                                                                                                             1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:33,121 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'@B\x83-', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:33,190 DEBUG    client - event = data_received(<6 bytes>)
2021-08-04 22:08:33,190 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'@B\x83-', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:33,191 DEBUG    client - received solicited pong: 4042832d
2021-08-04 22:08:43,119 DEBUG    Sending keepalive ping
2021-08-04 22:08:43,120 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:43,213 DEBUG    client - event = data_received(<28 bytes>)
2021-08-04 22:08:43,214 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:53,199 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x06(\xd2C', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:53,268 DEBUG    client - event = data_received(<6 bytes>)
2021-08-04 22:08:53,269 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x06(\xd2C', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:08:53,269 DEBUG    client - received solicited pong: 0628d243
2021-08-04 22:09:09,872 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-04 22:09:09,872 DEBUG    Requesting update for client D828C9404C09
2021-08-04 22:09:09,873 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:10,092 DEBUG    client - event = data_received(<214 bytes>)
2021-08-04 22:09:10,092 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004D","time":"2021-08-04T19:37:26.183Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-04T19:42:38.257Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-04T19:37:22.267Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:10,096 DEBUG    client - state = CLOSING
2021-08-04 22:09:10,096 DEBUG    client > Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:10,164 DEBUG    client - event = data_received(<4 bytes>)
2021-08-04 22:09:10,165 DEBUG    client < Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:10,167 DEBUG    client - event = connection_lost(None)
2021-08-04 22:09:10,168 DEBUG    client - state = CLOSED
2021-08-04 22:09:10,168 DEBUG    client x code = 1000, reason = [no reason]
2021-08-04 22:09:10,169 DEBUG    client x closing TCP connection
2021-08-04 22:09:10,170 INFO     Unhandled exception while running client: __new__() takes 3 positional arguments but 4 were given, ignoring and restarting
2021-08-04 22:09:10,171 DEBUG    Waiting before reconnecting
2021-08-04 22:09:10,172 DEBUG    Client changed state: GeClientState.CONNECTED to GeClientState.DROPPED
2021-08-04 22:09:10,173 DEBUG    Client changed state: GeClientState.DROPPED to GeClientState.WAITING
2021-08-04 22:09:12,175 DEBUG    Refreshing authentication before reconnecting
2021-08-04 22:09:12,175 DEBUG    Refreshing OAuth2 token
2021-08-04 22:09:12,181 DEBUG    Client changed state: GeClientState.WAITING to GeClientState.AUTHORIZING_OAUTH
2021-08-04 22:09:13,170 DEBUG    Getting WS credentials
2021-08-04 22:09:13,174 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-04 22:09:13,760 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-04 22:09:13,916 DEBUG    client - state = CONNECTING
2021-08-04 22:09:14,063 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x7325a0b8>)
2021-08-04 22:09:14,064 DEBUG    client > GET /?access_token=ew1cpyc15zcughx33b30ihgjmfej4jey HTTP/1.1
2021-08-04 22:09:14,064 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', 'KkI/6VU9UGxcAhAM/Z+wng=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-04 22:09:14,445 DEBUG    client - event = data_received(<212 bytes>)
2021-08-04 22:09:14,447 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-04 22:09:14,448 DEBUG    client < Headers([('Date', 'Wed, 04 Aug 2021 20:09:14 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', 'B7QFFJFhDc3aMwu6A1Am/n+25fI='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-04 22:09:14,449 DEBUG    client - state = OPEN
2021-08-04 22:09:14,451 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:14,453 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:14,456 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-04 22:09:14,661 DEBUG    client - event = data_received(<273 bytes>)
2021-08-04 22:09:14,663 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:14,665 DEBUG    D828C9404C09 marked available
2021-08-04 22:09:14,668 DEBUG    client - event = data_received(<19 bytes>)
2021-08-04 22:09:14,670 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:14,805 DEBUG    client - event = data_received(<17 bytes>)
2021-08-04 22:09:14,806 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:15,041 DEBUG    client - event = data_received(<50 bytes>)
2021-08-04 22:09:15,042 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","success":true,"change":"ADDED"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:34,464 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xfe\xd5@Q', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:34,533 DEBUG    client - event = data_received(<6 bytes>)
2021-08-04 22:09:34,533 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xfe\xd5@Q', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:34,534 DEBUG    client - received solicited pong: fed54051
2021-08-04 22:09:44,457 DEBUG    Sending keepalive ping
2021-08-04 22:09:44,458 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:44,547 DEBUG    client - event = data_received(<28 bytes>)
2021-08-04 22:09:44,548 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:54,545 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'E\xc6\xe8S', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:54,613 DEBUG    client - event = data_received(<6 bytes>)
2021-08-04 22:09:54,614 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'E\xc6\xe8S', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:09:54,614 DEBUG    client - received solicited pong: 45c6e853
2021-08-04 22:10:09,889 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-04 22:10:09,890 DEBUG    Requesting update for client D828C9404C09
2021-08-04 22:10:09,891 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:10,214 DEBUG    client - event = data_received(<217 bytes>)
2021-08-04 22:10:10,215 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004D","time":"2021-08-04T19:37:26.183Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-04T19:42:38.257Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-04T19:37:22.267Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:10,221 DEBUG    client - state = CLOSING
2021-08-04 22:10:10,221 DEBUG    client > Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:10,291 DEBUG    client - event = data_received(<4 bytes>)
2021-08-04 22:10:10,292 DEBUG    client < Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:10,294 DEBUG    client - event = connection_lost(None)
2021-08-04 22:10:10,294 DEBUG    client - state = CLOSED
2021-08-04 22:10:10,295 DEBUG    client x code = 1000, reason = [no reason]
2021-08-04 22:10:10,296 DEBUG    client x closing TCP connection
2021-08-04 22:10:10,297 INFO     Unhandled exception while running client: __new__() takes 3 positional arguments but 4 were given, ignoring and restarting
2021-08-04 22:10:10,299 DEBUG    Waiting before reconnecting
2021-08-04 22:10:10,300 DEBUG    Client changed state: GeClientState.CONNECTED to GeClientState.DROPPED
2021-08-04 22:10:10,301 DEBUG    Client changed state: GeClientState.DROPPED to GeClientState.WAITING
2021-08-04 22:10:12,303 DEBUG    Refreshing authentication before reconnecting
2021-08-04 22:10:12,304 DEBUG    Refreshing OAuth2 token
2021-08-04 22:10:12,309 DEBUG    Client changed state: GeClientState.WAITING to GeClientState.AUTHORIZING_OAUTH
2021-08-04 22:10:13,700 DEBUG    Getting WS credentials
2021-08-04 22:10:13,703 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-04 22:10:13,975 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-04 22:10:14,102 DEBUG    client - state = CONNECTING
2021-08-04 22:10:14,254 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x7325a538>)
2021-08-04 22:10:14,256 DEBUG    client > GET /?access_token=ew1cpj0sqxbs9da405ei7bpqs88j3q9t HTTP/1.1
2021-08-04 22:10:14,256 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', 'Zj7f3hUbxa4tdCMUNO+P9w=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-04 22:10:14,524 DEBUG    client - event = data_received(<212 bytes>)
2021-08-04 22:10:14,526 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-04 22:10:14,526 DEBUG    client < Headers([('Date', 'Wed, 04 Aug 2021 20:10:14 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', 'qOHUX6GuBKSJ0Jd/feRBPkkocWg='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-04 22:10:14,528 DEBUG    client - state = OPEN
2021-08-04 22:10:14,530 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:14,532 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:14,535 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-04 22:10:14,644 DEBUG    client - event = data_received(<49 bytes>)
2021-08-04 22:10:14,645 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:14,743 DEBUG    client - event = data_received(<256 bytes>)
2021-08-04 22:10:14,745 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:14,746 DEBUG    D828C9404C09 marked available
2021-08-04 22:10:15,089 DEBUG    client - event = data_received(<16 bytes>)
2021-08-04 22:10:15,090 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:15,348 DEBUG    client - event = data_received(<51 bytes>)
2021-08-04 22:10:15,350 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","success":true,"change":"ADDED"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:34,540 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'U\xcd1{', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:34,609 DEBUG    client - event = data_received(<6 bytes>)
2021-08-04 22:10:34,610 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'U\xcd1{', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:34,611 DEBUG    client - received solicited pong: 55cd317b
2021-08-04 22:10:44,545 DEBUG    Sending keepalive ping
2021-08-04 22:10:44,546 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:44,629 DEBUG    client - event = data_received(<28 bytes>)
2021-08-04 22:10:44,631 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:54,624 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\t\xbf\x16\x94', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:54,692 DEBUG    client - event = data_received(<6 bytes>)
2021-08-04 22:10:54,693 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\t\xbf\x16\x94', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:10:54,693 DEBUG    client - received solicited pong: 09bf1694
2021-08-04 22:11:09,908 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-04 22:11:09,909 DEBUG    Requesting update for client D828C9404C09
2021-08-04 22:11:09,910 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:10,091 DEBUG    client - event = data_received(<214 bytes>)
2021-08-04 22:11:10,092 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004D","time":"2021-08-04T19:37:26.183Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-04T19:42:38.257Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-04T19:37:22.267Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:10,098 DEBUG    client - state = CLOSING
2021-08-04 22:11:10,099 DEBUG    client > Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:10,167 DEBUG    client - event = data_received(<4 bytes>)
2021-08-04 22:11:10,168 DEBUG    client < Frame(fin=True, opcode=<Opcode.CLOSE: 8>, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:10,170 DEBUG    client - event = connection_lost(None)
2021-08-04 22:11:10,170 DEBUG    client - state = CLOSED
2021-08-04 22:11:10,171 DEBUG    client x code = 1000, reason = [no reason]
2021-08-04 22:11:10,172 DEBUG    client x closing TCP connection
2021-08-04 22:11:10,173 INFO     Unhandled exception while running client: __new__() takes 3 positional arguments but 4 were given, ignoring and restarting
2021-08-04 22:11:10,175 DEBUG    Waiting before reconnecting
2021-08-04 22:11:10,176 DEBUG    Client changed state: GeClientState.CONNECTED to GeClientState.DROPPED
2021-08-04 22:11:10,177 DEBUG    Client changed state: GeClientState.DROPPED to GeClientState.WAITING
2021-08-04 22:11:12,179 DEBUG    Refreshing authentication before reconnecting
2021-08-04 22:11:12,180 DEBUG    Refreshing OAuth2 token
2021-08-04 22:11:12,185 DEBUG    Client changed state: GeClientState.WAITING to GeClientState.AUTHORIZING_OAUTH
2021-08-04 22:11:13,325 DEBUG    Getting WS credentials
2021-08-04 22:11:13,328 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-04 22:11:13,585 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-04 22:11:13,708 DEBUG    client - state = CONNECTING
2021-08-04 22:11:13,858 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x7325a9b8>)
2021-08-04 22:11:13,860 DEBUG    client > GET /?access_token=ew1cp3iwpbfuqkxp3abvh9c0zwye3tr0 HTTP/1.1
2021-08-04 22:11:13,861 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', '4rL2T+h5NZdDFb76WpB3hA=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-04 22:11:14,163 DEBUG    client - event = data_received(<212 bytes>)
2021-08-04 22:11:14,164 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-04 22:11:14,164 DEBUG    client < Headers([('Date', 'Wed, 04 Aug 2021 20:11:14 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', '66wofHdv2hwEI8lFPYl6MFSzz7A='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-04 22:11:14,165 DEBUG    client - state = OPEN
2021-08-04 22:11:14,166 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:14,168 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:14,170 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-04 22:11:14,288 DEBUG    client - event = data_received(<49 bytes>)
2021-08-04 22:11:14,289 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:14,352 DEBUG    client - event = data_received(<256 bytes>)
2021-08-04 22:11:14,353 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:14,354 DEBUG    D828C9404C09 marked available
2021-08-04 22:11:14,479 DEBUG    client - event = data_received(<16 bytes>)
2021-08-04 22:11:14,480 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-04 22:11:15,261 DEBUG    client - event = data_received(<51 bytes>)
2021-08-04 22:11:15,262 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","success":true,"change":"ADDED"}', rsv1=False, rsv2=False, rsv3=False)
^CTraceback (most recent call last):
  File "websocket_example.py", line 84, in <module>
    loop.run_until_complete(asyncio.sleep(7400))
  File "/usr/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
    self._run_once()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1823, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.8/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt


@simbaja
Copy link
Owner Author

simbaja commented Aug 4, 2021

Looks like I had a couple issues, can you pull down one more time and post the output?

@RobertusIT
Copy link

Looks like I had a couple issues, can you pull down one more time and post the output?

Done.
Log is here.

I needed to edit websocket_example.py and add this, before comment:

import os, sys

#Following lines are for assigning parent directory dynamically.
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

And in the websocket_example.py file, I changed the line to examples.secret import USERNAME, PASSWORD

And I used secret.py into examples folder.

I wrote it, if maybe you wish to make this changed, inside the project.

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example                                                                                                                                                                                                                                                                                                              .py
2021-08-05 10:58:25,711 DEBUG    Using selector: EpollSelector
websocket_example.py:82: DeprecationWarning: The object should be created within an async function
  session = aiohttp.ClientSession()
2021-08-05 10:58:25,714 DEBUG    Getting OAuth2 token
2021-08-05 10:58:25,725 DEBUG    Client changed state: GeClientState.INITIALIZING to GeClientState.AUTHORIZING_OAUTH
2021-08-05 10:58:28,010 DEBUG    Getting WS credentials
2021-08-05 10:58:28,014 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-05 10:58:28,282 INFO     Starting GE Appliances client
2021-08-05 10:58:28,389 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-05 10:58:28,550 DEBUG    client - state = CONNECTING
2021-08-05 10:58:28,713 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x7321b0e8>)
2021-08-05 10:58:28,715 DEBUG    client > GET /?access_token=ew1cpianx61fzwj06bkn4wyrmo1cca0r HTTP/1.1
2021-08-05 10:58:28,716 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', 'WaFEFuiVRmEKMAkWdichLA=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-05 10:58:28,956 DEBUG    client - event = data_received(<212 bytes>)
2021-08-05 10:58:28,957 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-05 10:58:28,957 DEBUG    client < Headers([('Date', 'Thu, 05 Aug 2021 08:58:28 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', 'NyGaP+6f7XH+mCbwNrWmNAnIl1E='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-05 10:58:28,959 DEBUG    client - state = OPEN
2021-08-05 10:58:28,959 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:28,961 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:28,963 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-05 10:58:29,092 DEBUG    client - event = data_received(<49 bytes>)
2021-08-05 10:58:29,093 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,191 DEBUG    client - event = data_received(<256 bytes>)
2021-08-05 10:58:29,192 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,196 DEBUG    D828C9404C09 marked available
2021-08-05 10:58:29,196 DEBUG    Adding appliance D828C9404C09
2021-08-05 10:58:29,197 DEBUG    Requesting update for client D828C9404C09
2021-08-05 10:58:29,198 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,200 DEBUG    Requesting features for client D828C9404C09
2021-08-05 10:58:29,201 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/feature", "id": "Request-features"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,203 DEBUG    Registering update callback for GeAppliance(D828C9404C09) (Unknown Type)
2021-08-05 10:58:29,304 DEBUG    client - event = data_received(<16 bytes>)
2021-08-05 10:58:29,306 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,418 DEBUG    client - event = data_received(<218 bytes>)
2021-08-05 10:58:29,420 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004B","time":"2021-08-04T21:33:00.987Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-05T08:06:13.180Z"},{"erd":"0x7A0F","value":"00","time":"2021-08-05T07:53:57.456Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,422 DEBUG    Setting ErdCode.MODEL_NUMBER to
2021-08-05 10:58:29,423 DEBUG    Setting ErdCode.SERIAL_NUMBER to
2021-08-05 10:58:29,424 DEBUG    Setting ErdCode.TEMPERATURE_UNIT to ErdMeasurementUnits.METRIC
2021-08-05 10:58:29,425 DEBUG    Setting ErdCode.APPLIANCE_TYPE to ErdApplianceType.SPLIT_AIR_CONDITIONER
2021-08-05 10:58:29,426 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION to 0.0.6.32
2021-08-05 10:58:29,427 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION_AVAILABLE to 0.0.0.0
2021-08-05 10:58:29,428 DEBUG    Setting ErdCode.ACM_UPDATING to False
2021-08-05 10:58:29,429 DEBUG    Setting ErdCode.AC_TARGET_TEMPERATURE to 75
2021-08-05 10:58:29,430 DEBUG    Setting ErdCode.AC_FAN_SETTING to ErdAcFanSetting.HIGH
2021-08-05 10:58:29,431 DEBUG    Setting ErdCode.AC_OPERATION_MODE to ErdAcOperationMode.COOL
2021-08-05 10:58:29,431 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 90
2021-08-05 10:58:29,432 DEBUG    Setting ErdCode.AC_POWER_STATUS to ErdOnOff.OFF
2021-08-05 10:58:29,433 DEBUG    Setting ErdCode.SAC_AVAILABLE_MODES to ErdSacAvailableModes(has_heat=True, has_dry=True, has_auto=False, raw_value='03')
2021-08-05 10:58:29,434 DEBUG    Setting ErdCode.SAC_SLEEP_MODE to ErdOnOff.NA
2021-08-05 10:58:29,435 DEBUG    Setting ErdCode.SAC_TARGET_TEMPERATURE_RANGE to ErdSacTargetTemperatureRange(min=60, max=86, raw_value='FFFF')
2021-08-05 10:58:29,435 DEBUG    Setting ErdCode.SAC_AUTO_SWING_MODE to ErdOnOff.OFF
2021-08-05 10:58:29,437 DEBUG    Got initial appliance type for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 10:58:29,438 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.MODEL_NUMBER, ErdCode.SERIAL_NUMBER, ErdCode.TEMPERATURE_UNIT, ErdCode.APPLIANCE_TYPE, ErdCode.WIFI_MODULE_SW_VERSION, ErdCode.WIFI_MODULE_SW_VERSION_AVAILABLE, ErdCode.ACM_UPDATING, ErdCode.AC_TARGET_TEMPERATURE, ErdCode.AC_FAN_SETTING, ErdCode.AC_OPERATION_MODE, ErdCode.AC_AMBIENT_TEMPERATURE, ErdCode.AC_POWER_STATUS, ErdCode.SAC_AVAILABLE_MODES, ErdCode.SAC_SLEEP_MODE, ErdCode.SAC_TARGET_TEMPERATURE_RANGE, ErdCode.SAC_AUTO_SWING_MODE
2021-08-05 10:58:29,439 DEBUG    client - event = data_received(<41 bytes>)
2021-08-05 10:58:29,440 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 10:58:29,441 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"Request-features","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/feature"},"success":true,"code":200,"body":{"kind":"appliance#applianceFeature","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","features":[]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:29,443 DEBUG    Received features [] for D828C9404C09
2021-08-05 10:58:29,514 DEBUG    client - event = data_received(<49 bytes>)
2021-08-05 10:58:29,515 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","success":true,"change":"ADDED"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:48,971 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'>K\x7f\x88', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:49,041 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 10:58:49,042 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'>K\x7f\x88', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:49,042 DEBUG    client - received solicited pong: 3e4b7f88
2021-08-05 10:58:58,964 DEBUG    Sending keepalive ping
2021-08-05 10:58:58,965 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:58:59,053 DEBUG    client - event = data_received(<28 bytes>)
2021-08-05 10:58:59,054 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:09,054 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'dzmz', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:09,132 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 10:59:09,133 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'dzmz', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:09,134 DEBUG    client - received solicited pong: 647a6d7a
2021-08-05 10:59:28,989 DEBUG    Sending keepalive ping
2021-08-05 10:59:28,990 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:29,082 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 10:59:29,083 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:29,136 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x98\xb1\x0f=', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:29,206 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 10:59:29,207 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x98\xb1\x0f=', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:29,208 DEBUG    client - received solicited pong: 98b10f3d
2021-08-05 10:59:29,209 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 10:59:29,209 DEBUG    Requesting update for client D828C9404C09
2021-08-05 10:59:29,210 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:29,474 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 10:59:29,475 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004B","time":"2021-08-04T21:33:00.987Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-05T08:06:13.180Z"},{"erd":"0x7A0F","value":"00","time":"2021-08-05T07:53:57.456Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:49,233 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x16M\xbe~', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:49,303 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 10:59:49,304 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x16M\xbe~', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:49,305 DEBUG    client - received solicited pong: 164dbe7e
2021-08-05 10:59:59,001 DEBUG    Sending keepalive ping
2021-08-05 10:59:59,002 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 10:59:59,087 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 10:59:59,088 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:09,318 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'S{\xf4\xa0', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:09,387 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:00:09,389 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'S{\xf4\xa0', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:09,389 DEBUG    client - received solicited pong: 537bf4a0
2021-08-05 11:00:29,023 DEBUG    Sending keepalive ping
2021-08-05 11:00:29,024 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:29,132 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:00:29,133 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:29,213 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 11:00:29,213 DEBUG    Requesting update for client D828C9404C09
2021-08-05 11:00:29,214 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:29,392 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xa9\xd3Q,', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:29,432 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 11:00:29,432 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004B","time":"2021-08-04T21:33:00.987Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-05T08:06:13.180Z"},{"erd":"0x7A0F","value":"00","time":"2021-08-05T07:53:57.456Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:29,461 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:00:29,462 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xa9\xd3Q,', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:29,462 DEBUG    client - received solicited pong: a9d3512c
2021-08-05 11:00:49,483 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xcd\x1f\x82$', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:49,553 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:00:49,554 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xcd\x1f\x82$', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:49,554 DEBUG    client - received solicited pong: cd1f8224
2021-08-05 11:00:59,036 DEBUG    Sending keepalive ping
2021-08-05 11:00:59,037 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:00:59,122 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 11:00:59,124 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:09,566 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b"\x00t' ", rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:09,636 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:01:09,637 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b"\x00t' ", rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:09,638 DEBUG    client - received solicited pong: 00742720
2021-08-05 11:01:29,060 DEBUG    Sending keepalive ping
2021-08-05 11:01:29,061 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:29,158 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:01:29,159 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:29,216 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 11:01:29,217 DEBUG    Requesting update for client D828C9404C09
2021-08-05 11:01:29,217 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:29,499 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 11:01:29,500 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004B","time":"2021-08-04T21:33:00.987Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-05T08:06:13.180Z"},{"erd":"0x7A0F","value":"00","time":"2021-08-05T07:53:57.456Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:29,640 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'&\x1eb\xcc', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:29,709 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:01:29,710 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'&\x1eb\xcc', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:29,711 DEBUG    client - received solicited pong: 261e62cc
2021-08-05 11:01:49,732 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x98aj\xeb', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:49,803 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:01:49,804 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x98aj\xeb', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:49,805 DEBUG    client - received solicited pong: 98616aeb
2021-08-05 11:01:59,072 DEBUG    Sending keepalive ping
2021-08-05 11:01:59,073 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:01:59,170 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 11:01:59,171 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:09,817 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b':\xe5\x07k', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:09,887 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:02:09,888 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b':\xe5\x07k', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:09,889 DEBUG    client - received solicited pong: 3ae5076b
2021-08-05 11:02:29,094 DEBUG    Sending keepalive ping
2021-08-05 11:02:29,095 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:29,187 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:02:29,188 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:29,219 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 11:02:29,219 DEBUG    Requesting update for client D828C9404C09
2021-08-05 11:02:29,220 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:29,628 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 11:02:29,629 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004B","time":"2021-08-04T21:33:00.987Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-05T08:06:13.180Z"},{"erd":"0x7A0F","value":"00","time":"2021-08-05T07:53:57.456Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:29,891 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b' iAC', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:29,961 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:02:29,961 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b' iAC', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:29,962 DEBUG    client - received solicited pong: 20694143
2021-08-05 11:02:49,983 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x02\x9e\x19t', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:50,053 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:02:50,054 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x02\x9e\x19t', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:50,055 DEBUG    client - received solicited pong: 029e1974
2021-08-05 11:02:59,106 DEBUG    Sending keepalive ping
2021-08-05 11:02:59,107 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:02:59,191 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 11:02:59,191 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:10,067 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'8\x99YL', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:10,137 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:03:10,138 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'8\x99YL', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:10,138 DEBUG    client - received solicited pong: 3899594c
2021-08-05 11:03:29,127 DEBUG    Sending keepalive ping
2021-08-05 11:03:29,128 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:29,219 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:03:29,220 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:29,223 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 11:03:29,223 DEBUG    Requesting update for client D828C9404C09
2021-08-05 11:03:29,224 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:29,438 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 11:03:29,439 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004B","time":"2021-08-04T21:33:00.987Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"5A","time":"2021-08-05T08:06:13.180Z"},{"erd":"0x7A0F","value":"00","time":"2021-08-05T07:53:57.456Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:30,142 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b"'\xd8\xf8\xf3", rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:30,212 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:03:30,213 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b"'\xd8\xf8\xf3", rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:30,213 DEBUG    client - received solicited pong: 27d8f8f3
2021-08-05 11:03:50,235 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x03!+\x8d', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:50,319 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 11:03:50,320 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x03!+\x8d', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:50,320 DEBUG    client - received solicited pong: 03212b8d
2021-08-05 11:03:59,141 DEBUG    Sending keepalive ping
2021-08-05 11:03:59,141 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 11:03:59,226 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 11:03:59,227 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
^CTraceback (most recent call last):
  File "websocket_example.py", line 84, in <module>
    loop.run_until_complete(asyncio.sleep(7400))
  File "/usr/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
    self._run_once()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1823, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.8/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt

@simbaja
Copy link
Owner Author

simbaja commented Aug 5, 2021

Log looks good. A couple questions/comments though:

  1. Based on the log, it looks like the power was off when you ran this, is that correct?
  2. All the temperatures appear to be imperial (i.e. F) instead of metric (i.e. C) even though the unit itself seems to be set to metric. I'll have to look at the app and confirm this behavior and make sure I convert correctly in HA later
  3. "anyway remote control is better because you can change also 3d airflow" - can you describe what this is? I'm not seeing data that looks like it may control this, so it may not be possible. Looks like only temperature, mode, and fan speed are available.

@RobertusIT
Copy link

Log looks good. A couple questions/comments though:

  1. Based on the log, it looks like the power was off when you ran this, is that correct?
  2. All the temperatures appear to be imperial (i.e. F) instead of metric (i.e. C) even though the unit itself seems to be set to metric. I'll have to look at the app and confirm this behavior and make sure I convert correctly in HA later
  3. "anyway remote control is better because you can change also 3d airflow" - can you describe what this is? I'm not seeing data that looks like it may control this, so it may not be possible. Looks like only temperature, mode, and fan speed are available.
  1. I didn't remember but i guess yes, was turn off

  2. I setup into the app, all temperature in Celsius, as you can see from this screenshots:
    Screenshot_20210805-142145
    Screenshot_20210805-142203
    Screenshot_20210805-142215
    Screenshot_20210805-142209

  3. On these AC app, seems that always,you can set up only some value, so isn't the same experience like IR Remote.
    But i hope that can be possible do that. I mean, you can with IR Remote:

  • Change Temperature for every Mode
  • Set up Mode - Dry - Cool - Quiet - Heat - Only Fan Mode - Smart ( automatic mode )
  • Very important, but of course, if is possible, you can setup the flow direction.
    "Swing" is in the IR Remote. So you can get an horizontal air flow and/or vertical air flow.
    In this way you have a perfect direction of air flow, and if you are on the right of AC, you put for example:
  • the air flow on top
  • and also the air flow on left
    In this way, you can't hit the cool air flow, that is better than receive this cool air on head or directly in your body, that is bad for the health.
    PXL_20210805_142536171

Log with AC on.

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py                                                                                                                                                                                                                                                                                                           2021-08-05 14:20:31,883 DEBUG    Using selector: EpollSelector
websocket_example.py:82: DeprecationWarning: The object should be created within an async function
  session = aiohttp.ClientSession()
2021-08-05 14:20:31,886 DEBUG    Getting OAuth2 token
2021-08-05 14:20:31,897 DEBUG    Client changed state: GeClientState.INITIALIZING to GeClientState.AUTHORIZING_OAUTH
2021-08-05 14:20:34,497 DEBUG    Getting WS credentials
2021-08-05 14:20:34,500 DEBUG    Client changed state: GeClientState.AUTHORIZING_OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-05 14:20:34,752 INFO     Starting GE Appliances client
2021-08-05 14:20:34,839 DEBUG    Client changed state: GeClientState.AUTHORIZING_CLIENT to GeClientState.CONNECTING
2021-08-05 14:20:34,976 DEBUG    client - state = CONNECTING
2021-08-05 14:20:35,123 DEBUG    client - event = connection_made(<asyncio.sslproto._SSLProtocolTransport object at 0x727fa1a8>)
2021-08-05 14:20:35,125 DEBUG    client > GET /?access_token=ew1cpqdjd0k3yizwhkigcybgvt6muqab HTTP/1.1
2021-08-05 14:20:35,125 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brillion.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Sec-WebSocket-Key', 'upfv17fBKPmMpoyZGAIovA=='), ('Sec-WebSocket-Version', '13'), ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('User-Agent', 'Python/3.8 websockets/9.1')])
2021-08-05 14:20:35,337 DEBUG    client - event = data_received(<212 bytes>)
2021-08-05 14:20:35,338 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-05 14:20:35,338 DEBUG    client < Headers([('Date', 'Thu, 05 Aug 2021 12:20:35 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websocket-accept', '/ZAhxdCBaqL3WX5YbjznngmCpHk='), ('sec-websocket-extensions', 'permessage-deflate')])
2021-08-05 14:20:35,339 DEBUG    client - state = OPEN
2021-08-05 14:20:35,340 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["/appliance/*/erd/*"]}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,342 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,344 DEBUG    Client changed state: GeClientState.CONNECTING to GeClientState.CONNECTED
2021-08-05 14:20:35,485 DEBUG    client - event = data_received(<49 bytes>)
2021-08-05 14:20:35,486 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,585 DEBUG    client - event = data_received(<256 bytes>)
2021-08-05 14:20:35,587 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,591 DEBUG    D828C9404C09 marked available
2021-08-05 14:20:35,593 DEBUG    Adding appliance D828C9404C09
2021-08-05 14:20:35,594 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:20:35,595 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,597 DEBUG    Requesting features for client D828C9404C09
2021-08-05 14:20:35,598 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/feature", "id": "Request-features"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,600 DEBUG    Registering update callback for GeAppliance(D828C9404C09) (Unknown Type)
2021-08-05 14:20:35,630 DEBUG    client - event = data_received(<16 bytes>)
2021-08-05 14:20:35,632 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,797 DEBUG    client - event = data_received(<220 bytes>)
2021-08-05 14:20:35,799 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"52","time":"2021-08-05T12:15:52.000Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,801 DEBUG    client - event = data_received(<50 bytes>)
2021-08-05 14:20:35,803 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","success":true,"change":"ADDED"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,806 DEBUG    Setting ErdCode.MODEL_NUMBER to
2021-08-05 14:20:35,807 DEBUG    Setting ErdCode.SERIAL_NUMBER to
2021-08-05 14:20:35,809 DEBUG    Setting ErdCode.TEMPERATURE_UNIT to ErdMeasurementUnits.METRIC
2021-08-05 14:20:35,810 DEBUG    Setting ErdCode.APPLIANCE_TYPE to ErdApplianceType.SPLIT_AIR_CONDITIONER
2021-08-05 14:20:35,812 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION to 0.0.6.32
2021-08-05 14:20:35,814 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION_AVAILABLE to 0.0.0.0
2021-08-05 14:20:35,815 DEBUG    Setting ErdCode.ACM_UPDATING to False
2021-08-05 14:20:35,817 DEBUG    Setting ErdCode.AC_TARGET_TEMPERATURE to 79
2021-08-05 14:20:35,818 DEBUG    Setting ErdCode.AC_FAN_SETTING to ErdAcFanSetting.HIGH
2021-08-05 14:20:35,820 DEBUG    Setting ErdCode.AC_OPERATION_MODE to ErdAcOperationMode.COOL
2021-08-05 14:20:35,822 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 82
2021-08-05 14:20:35,823 DEBUG    Setting ErdCode.AC_POWER_STATUS to ErdOnOff.ON
2021-08-05 14:20:35,824 DEBUG    Setting ErdCode.SAC_AVAILABLE_MODES to ErdSacAvailableModes(has_heat=True, has_dry=True, has_auto=False, raw_value='03')
2021-08-05 14:20:35,826 DEBUG    Setting ErdCode.SAC_SLEEP_MODE to ErdOnOff.NA
2021-08-05 14:20:35,827 DEBUG    Setting ErdCode.SAC_TARGET_TEMPERATURE_RANGE to ErdSacTargetTemperatureRange(min=60, max=86, raw_value='FFFF')
2021-08-05 14:20:35,829 DEBUG    Setting ErdCode.SAC_AUTO_SWING_MODE to ErdOnOff.OFF
2021-08-05 14:20:35,831 DEBUG    Got initial appliance type for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:20:35,833 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.MODEL_NUMBER, ErdCode.SERIAL_NUMBER, ErdCode.TEMPERATURE_UNIT, ErdCode.APPLIANCE_TYPE, ErdCode.WIFI_MODULE_SW_VERSION, ErdCode.WIFI_MODULE_SW_VERSION_AVAILABLE, ErdCode.ACM_UPDATING, ErdCode.AC_TARGET_TEMPERATURE, ErdCode.AC_FAN_SETTING, ErdCode.AC_OPERATION_MODE, ErdCode.AC_AMBIENT_TEMPERATURE, ErdCode.AC_POWER_STATUS, ErdCode.SAC_AVAILABLE_MODES, ErdCode.SAC_SLEEP_MODE, ErdCode.SAC_TARGET_TEMPERATURE_RANGE, ErdCode.SAC_AUTO_SWING_MODE
2021-08-05 14:20:35,834 DEBUG    client - event = data_received(<41 bytes>)
2021-08-05 14:20:35,836 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:20:35,837 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"Request-features","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/feature"},"success":true,"code":200,"body":{"kind":"appliance#applianceFeature","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","features":[]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:35,840 DEBUG    Received features [] for D828C9404C09
2021-08-05 14:20:55,351 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xcd\x95\xa1\xaa', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:55,421 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:20:55,423 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xcd\x95\xa1\xaa', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:20:55,424 DEBUG    client - received solicited pong: cd95a1aa
2021-08-05 14:21:05,346 DEBUG    Sending keepalive ping
2021-08-05 14:21:05,347 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:05,444 DEBUG    client - event = data_received(<28 bytes>)
2021-08-05 14:21:05,445 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:15,436 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xf4\xbf\xd6\xd7', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:15,505 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:21:15,506 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xf4\xbf\xd6\xd7', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:15,507 DEBUG    client - received solicited pong: f4bfd6d7
2021-08-05 14:21:35,369 DEBUG    Sending keepalive ping
2021-08-05 14:21:35,370 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:35,455 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:21:35,456 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:35,509 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x0ev\xe3*', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:35,578 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:21:35,579 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x0ev\xe3*', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:35,580 DEBUG    client - received solicited pong: 0e76e32a
2021-08-05 14:21:35,602 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:21:35,603 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:21:35,604 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:35,849 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:21:35,851 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"52","time":"2021-08-05T12:15:52.000Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:55,598 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x95\x12_\x9d', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:55,668 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:21:55,668 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x95\x12_\x9d', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:21:55,669 DEBUG    client - received solicited pong: 95125f9d
2021-08-05 14:22:05,381 DEBUG    Sending keepalive ping
2021-08-05 14:22:05,382 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:05,466 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:22:05,467 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:15,681 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x9d\xb3\xe7\xb9', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:15,750 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:22:15,752 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x9d\xb3\xe7\xb9', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:15,752 DEBUG    client - received solicited pong: 9db3e7b9
2021-08-05 14:22:35,401 DEBUG    Sending keepalive ping
2021-08-05 14:22:35,402 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:35,488 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:22:35,489 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:35,606 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:22:35,606 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:22:35,607 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:35,755 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xff\x90DB', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:35,824 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:22:35,825 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xff\x90DB', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:35,826 DEBUG    client - received solicited pong: ff904442
2021-08-05 14:22:35,847 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:22:35,849 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"52","time":"2021-08-05T12:15:52.000Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:55,849 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b';\xe0\x8e\x99', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:55,918 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:22:55,919 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b';\xe0\x8e\x99', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:22:55,919 DEBUG    client - received solicited pong: 3be08e99
2021-08-05 14:23:05,405 DEBUG    Sending keepalive ping
2021-08-05 14:23:05,406 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:05,491 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:23:05,492 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:15,931 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xf7\xb0\xde\xb4', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:16,000 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:23:16,001 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xf7\xb0\xde\xb4', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:16,001 DEBUG    client - received solicited pong: f7b0deb4
2021-08-05 14:23:25,219 DEBUG    client - event = data_received(<58 bytes>)
2021-08-05 14:23:25,221 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"item":{"applianceId":"D828C9404C09","erd":"0x7A02","time":"2021-08-05T12:23:23.546Z","value":"51"},"resource":"/appliance/D828C9404C09/erd/0x7A02","kind":"publish#erd","userId":"8iphzd059z7spke"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:25,223 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 81
2021-08-05 14:23:25,225 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.AC_AMBIENT_TEMPERATURE
2021-08-05 14:23:35,419 DEBUG    Sending keepalive ping
2021-08-05 14:23:35,420 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:35,523 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:23:35,524 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:35,610 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:23:35,611 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:23:35,612 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:35,838 DEBUG    client - event = data_received(<30 bytes>)
2021-08-05 14:23:35,839 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"51","time":"2021-08-05T12:23:23.546Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:36,003 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'~\xbeC{', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:36,071 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:23:36,072 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'~\xbeC{', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:36,072 DEBUG    client - received solicited pong: 7ebe437b
2021-08-05 14:23:56,094 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'#\xdb\xc0\x1c', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:56,164 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:23:56,165 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'#\xdb\xc0\x1c', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:23:56,166 DEBUG    client - received solicited pong: 23dbc01c
2021-08-05 14:24:05,432 DEBUG    Sending keepalive ping
2021-08-05 14:24:05,433 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:05,520 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:24:05,521 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:16,179 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'H1\xeeL', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:16,248 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:24:16,249 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'H1\xeeL', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:16,250 DEBUG    client - received solicited pong: 4831ee4c
2021-08-05 14:24:35,440 DEBUG    Sending keepalive ping
2021-08-05 14:24:35,440 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:35,531 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:24:35,532 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:35,615 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:24:35,615 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:24:35,616 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:35,843 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:24:35,844 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"51","time":"2021-08-05T12:23:23.546Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:36,253 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x8ei\xc5?', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:36,322 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:24:36,323 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x8ei\xc5?', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:36,324 DEBUG    client - received solicited pong: 8e69c53f
2021-08-05 14:24:56,346 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xebX\x0e\x80', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:56,416 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:24:56,417 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xebX\x0e\x80', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:24:56,418 DEBUG    client - received solicited pong: eb580e80
2021-08-05 14:25:05,451 DEBUG    Sending keepalive ping
2021-08-05 14:25:05,452 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:05,539 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:25:05,540 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:16,421 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'R\xab\xe9\xe4', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:16,491 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:25:16,492 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'R\xab\xe9\xe4', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:16,493 DEBUG    client - received solicited pong: 52abe9e4
2021-08-05 14:25:35,474 DEBUG    Sending keepalive ping
2021-08-05 14:25:35,475 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:35,569 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:25:35,571 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:35,619 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:25:35,620 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:25:35,622 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:35,822 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:25:35,824 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"51","time":"2021-08-05T12:23:23.546Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:36,496 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'^\x1dvV', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:36,565 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:25:36,567 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'^\x1dvV', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:36,569 DEBUG    client - received solicited pong: 5e1d7656
2021-08-05 14:25:56,572 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b't\x86\xf9\xc4', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:56,641 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:25:56,642 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b't\x86\xf9\xc4', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:25:56,642 DEBUG    client - received solicited pong: 7486f9c4
2021-08-05 14:26:05,486 DEBUG    Sending keepalive ping
2021-08-05 14:26:05,487 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:05,571 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:26:05,572 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:16,656 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xceC_\x7f', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:16,726 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:26:16,728 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xceC_\x7f', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:16,728 DEBUG    client - received solicited pong: ce435f7f
2021-08-05 14:26:35,501 DEBUG    Sending keepalive ping
2021-08-05 14:26:35,502 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:35,593 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:26:35,595 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:35,625 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:26:35,625 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:26:35,626 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:35,820 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:26:35,820 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"51","time":"2021-08-05T12:23:23.546Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:36,731 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x84)\x08\xe0', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:36,801 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:26:36,802 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x84)\x08\xe0', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:36,802 DEBUG    client - received solicited pong: 842908e0
2021-08-05 14:26:56,825 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xe9\xc6C\xea', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:56,895 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:26:56,896 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xe9\xc6C\xea', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:26:56,897 DEBUG    client - received solicited pong: e9c643ea
2021-08-05 14:27:05,514 DEBUG    Sending keepalive ping
2021-08-05 14:27:05,515 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:05,599 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:27:05,600 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:16,911 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x1a\x8a\x08\xc0', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:16,981 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:27:16,982 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x1a\x8a\x08\xc0', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:16,983 DEBUG    client - received solicited pong: 1a8a08c0
2021-08-05 14:27:23,161 DEBUG    client - event = data_received(<24 bytes>)
2021-08-05 14:27:23,162 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"item":{"applianceId":"D828C9404C09","erd":"0x7A02","time":"2021-08-05T12:27:21.672Z","value":"4F"},"resource":"/appliance/D828C9404C09/erd/0x7A02","kind":"publish#erd","userId":"8iphzd059z7spke"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:23,164 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 79
2021-08-05 14:27:23,165 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.AC_AMBIENT_TEMPERATURE
2021-08-05 14:27:35,529 DEBUG    Sending keepalive ping
2021-08-05 14:27:35,530 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:35,620 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:27:35,621 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:35,629 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:27:35,629 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:27:35,631 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:35,878 DEBUG    client - event = data_received(<29 bytes>)
2021-08-05 14:27:35,880 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4F","time":"2021-08-05T12:27:21.672Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:36,987 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xa8}a\xfc', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:37,056 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:27:37,056 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xa8}a\xfc', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:37,057 DEBUG    client - received solicited pong: a87d61fc
2021-08-05 14:27:57,078 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b':\xb4\x90\xae', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:57,147 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:27:57,148 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b':\xb4\x90\xae', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:27:57,148 DEBUG    client - received solicited pong: 3ab490ae
2021-08-05 14:28:05,541 DEBUG    Sending keepalive ping
2021-08-05 14:28:05,542 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:05,628 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:28:05,629 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:17,152 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xe4 \xff\x7f', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:17,221 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:28:17,222 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xe4 \xff\x7f', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:17,222 DEBUG    client - received solicited pong: e420ff7f
2021-08-05 14:28:35,563 DEBUG    Sending keepalive ping
2021-08-05 14:28:35,564 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:35,634 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:28:35,634 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:28:35,635 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:35,659 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:28:35,660 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:35,865 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:28:35,866 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4F","time":"2021-08-05T12:27:21.672Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:37,228 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xbd\x9a\xf6\x10', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:37,297 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:28:37,298 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xbd\x9a\xf6\x10', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:37,299 DEBUG    client - received solicited pong: bd9af610
2021-08-05 14:28:57,321 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xc0`\x7fl', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:57,391 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:28:57,392 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xc0`\x7fl', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:28:57,392 DEBUG    client - received solicited pong: c0607f6c
2021-08-05 14:29:05,575 DEBUG    Sending keepalive ping
2021-08-05 14:29:05,576 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:05,663 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:29:05,664 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:17,407 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xabR\x1d\xa5', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:17,477 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:29:17,478 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xabR\x1d\xa5', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:17,479 DEBUG    client - received solicited pong: ab521da5
2021-08-05 14:29:35,597 DEBUG    Sending keepalive ping
2021-08-05 14:29:35,598 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:35,638 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:29:35,639 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:29:35,640 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:35,689 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:29:35,690 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:35,889 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:29:35,890 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4F","time":"2021-08-05T12:27:21.672Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:37,483 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'9\x81\xfb\xbd', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:37,552 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:29:37,554 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'9\x81\xfb\xbd', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:37,554 DEBUG    client - received solicited pong: 3981fbbd
2021-08-05 14:29:57,577 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x84\x91\x06,', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:57,646 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:29:57,647 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x84\x91\x06,', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:29:57,647 DEBUG    client - received solicited pong: 8491062c
2021-08-05 14:30:05,601 DEBUG    Sending keepalive ping
2021-08-05 14:30:05,602 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:05,694 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:30:05,695 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:17,661 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xc6\x9a\x18c', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:17,730 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:30:17,731 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xc6\x9a\x18c', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:17,731 DEBUG    client - received solicited pong: c69a1863
2021-08-05 14:30:35,363 DEBUG    Refreshing appliance list/state
2021-08-05 14:30:35,364 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:35,573 DEBUG    client - event = data_received(<11 bytes>)
2021-08-05 14:30:35,574 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke","items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"Unknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:35,604 DEBUG    Sending keepalive ping
2021-08-05 14:30:35,605 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:35,643 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:30:35,644 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:30:35,645 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:35,718 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:30:35,719 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:36,064 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:30:36,066 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4F","time":"2021-08-05T12:27:21.672Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:37,735 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'O\xcc\x81\x12', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:37,804 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:30:37,805 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'O\xcc\x81\x12', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:37,806 DEBUG    client - received solicited pong: 4fcc8112
2021-08-05 14:30:57,819 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'f\xef\xc3p', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:57,888 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:30:57,889 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'f\xef\xc3p', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:30:57,889 DEBUG    client - received solicited pong: 66efc370
2021-08-05 14:31:05,611 DEBUG    Sending keepalive ping
2021-08-05 14:31:05,611 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:05,695 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:31:05,696 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:17,901 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'oM\x02\xd5', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:17,971 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:31:17,972 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'oM\x02\xd5', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:17,973 DEBUG    client - received solicited pong: 6f4d02d5
2021-08-05 14:31:35,621 DEBUG    Sending keepalive ping
2021-08-05 14:31:35,622 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:35,648 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:31:35,649 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:31:35,650 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:35,715 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:31:35,716 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:35,884 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:31:35,885 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4F","time":"2021-08-05T12:27:21.672Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:37,977 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xedZr\x99', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:38,047 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:31:38,048 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xedZr\x99', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:38,049 DEBUG    client - received solicited pong: ed5a7299
2021-08-05 14:31:58,052 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'l\xa0\xb9F', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:58,123 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:31:58,124 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'l\xa0\xb9F', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:31:58,125 DEBUG    client - received solicited pong: 6ca0b946
2021-08-05 14:32:05,631 DEBUG    Sending keepalive ping
2021-08-05 14:32:05,632 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:05,726 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:32:05,728 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:18,131 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xe7\xc9u\x99', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:18,201 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:32:18,201 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xe7\xc9u\x99', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:18,202 DEBUG    client - received solicited pong: e7c97599
2021-08-05 14:32:35,427 DEBUG    client - event = data_received(<24 bytes>)
2021-08-05 14:32:35,429 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"item":{"applianceId":"D828C9404C09","erd":"0x7A02","time":"2021-08-05T12:32:33.884Z","value":"4D"},"resource":"/appliance/D828C9404C09/erd/0x7A02","kind":"publish#erd","userId":"8iphzd059z7spke"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:35,431 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 77
2021-08-05 14:32:35,433 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.AC_AMBIENT_TEMPERATURE
2021-08-05 14:32:35,634 DEBUG    Sending keepalive ping
2021-08-05 14:32:35,635 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:35,652 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:32:35,653 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:32:35,653 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:35,729 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:32:35,729 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:35,849 DEBUG    client - event = data_received(<28 bytes>)
2021-08-05 14:32:35,849 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T12:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:38,205 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'C\x10\x04\xcc', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:38,275 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:32:38,276 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'C\x10\x04\xcc', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:38,277 DEBUG    client - received solicited pong: 431004cc
2021-08-05 14:32:58,286 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x13R\xf6\xb1', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:58,356 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:32:58,357 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x13R\xf6\xb1', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:32:58,357 DEBUG    client - received solicited pong: 1352f6b1
2021-08-05 14:33:05,641 DEBUG    Sending keepalive ping
2021-08-05 14:33:05,642 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:05,727 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:33:05,728 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:18,372 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'#S\xc4\x87', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:18,442 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:33:18,443 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'#S\xc4\x87', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:18,444 DEBUG    client - received solicited pong: 2353c487
2021-08-05 14:33:35,662 DEBUG    Sending keepalive ping
2021-08-05 14:33:35,663 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:35,664 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 14:33:35,665 DEBUG    Requesting update for client D828C9404C09
2021-08-05 14:33:35,666 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:35,752 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:33:35,754 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:35,885 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 14:33:35,886 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T12:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:38,450 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'`S\x88x', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:38,520 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:33:38,521 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'`S\x88x', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:38,522 DEBUG    client - received solicited pong: 60538878
2021-08-05 14:33:58,544 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'z\x966\xd9', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:58,615 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:33:58,616 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'z\x966\xd9', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:33:58,616 DEBUG    client - received solicited pong: 7a9636d9
2021-08-05 14:34:05,672 DEBUG    Sending keepalive ping
2021-08-05 14:34:05,673 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:34:05,773 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 14:34:05,775 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:34:18,631 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xd0\x9bBZ', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:34:18,700 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 14:34:18,701 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xd0\x9bBZ', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 14:34:18,701 DEBUG    client - received solicited pong: d09b425a
^CTraceback (most recent call last):
  File "websocket_example.py", line 84, in <module>
    loop.run_until_complete(asyncio.sleep(7400))
  File "/usr/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
    self._run_once()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1823, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.8/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt

@simbaja
Copy link
Owner Author

simbaja commented Aug 5, 2021

Yeah, I noticed that the app displayed in metric from your screenshots earlier - it's just a bit odd that internally it's using imperial units for everything. When I programmed ovens for example, if the appliance was set to metric, all the values it would report would also be in metric.

Looking at the new log, I think we're good on the power setting. Just wanted to confirm that I didn't mess it up somewhere.

In regards to the swing functionality. Can you run the example and then change the swing values while it's running from the remote? If there's something changing, it should show up in the logs. If nothing shows up, it may not be possible to control via this mechanism.

@RobertusIT
Copy link

RobertusIT commented Aug 5, 2021

Yeah, I noticed that the app displayed in metric from your screenshots earlier - it's just a bit odd that internally it's using imperial units for everything. When I programmed ovens for example, if the appliance was set to metric, all the values it would report would also be in metric.

Looking at the new log, I think we're good on the power setting. Just wanted to confirm that I didn't mess it up somewhere.

In regards to the swing functionality. Can you run the example and then change the swing values while it's running from the remote? If there's something changing, it should show up in the logs. If nothing shows up, it may not be possible to control via this mechanism.

This log if with:

Cool - 26°C Temperature
Horizontal Flow - Down
Vertical Flow - Swing ( left right )

And i change to:

Horizontal Vertical and Horizontal

I played with these and seems from log, that recognize them!
I hope that can help.
Anyway we can catch log, for every situation, flow direction with every temperature and mode, if needed. Can be a lot of combination, but if is possible, the integration is totally.
.SAC_AUTO_SWING_MODE

root@RASPBERRYPi3FLIRC:/home/gehome-master/examples# python3.8 websocket_example.py
2021-08-05 15:23:38,366 DEBUG    Using selector: EpollSelector
websocket_example.py:82: DeprecationWarning: The object should be created within                                                     an async function
  session = aiohttp.ClientSession()
2021-08-05 15:23:38,369 DEBUG    Getting OAuth2 token
2021-08-05 15:23:38,380 DEBUG    Client changed state: GeClientState.INITIALIZIN                                                    G to GeClientState.AUTHORIZING_OAUTH
2021-08-05 15:23:40,408 DEBUG    Getting WS credentials
2021-08-05 15:23:40,410 DEBUG    Client changed state: GeClientState.AUTHORIZING                                                    _OAUTH to GeClientState.AUTHORIZING_CLIENT
2021-08-05 15:23:40,688 INFO     Starting GE Appliances client
2021-08-05 15:23:40,752 DEBUG    Client changed state: GeClientState.AUTHORIZING                                                    _CLIENT to GeClientState.CONNECTING
2021-08-05 15:23:40,948 DEBUG    client - state = CONNECTING
2021-08-05 15:23:41,095 DEBUG    client - event = connection_made(<asyncio.sslpr                                                    oto._SSLProtocolTransport object at 0x729911a8>)
2021-08-05 15:23:41,097 DEBUG    client > GET /?access_token=ew1cpq7c4xzd349diw9                                                    ugb7qecqhsjma HTTP/1.1
2021-08-05 15:23:41,098 DEBUG    client > Headers([('Host', 'ws-eu-west-1.brilli                                                    on.geappliances.com'), ('Upgrade', 'websocket'), ('Connection', 'Upgrade'), ('Se                                                    c-WebSocket-Key', '320XJ68Uk3i8Fkj3uvH/aA=='), ('Sec-WebSocket-Version', '13'),                                                     ('Sec-WebSocket-Extensions', 'permessage-deflate; client_max_window_bits'), ('Us                                                    er-Agent', 'Python/3.8 websockets/9.1')])
2021-08-05 15:23:41,372 DEBUG    client - event = data_received(<212 bytes>)
2021-08-05 15:23:41,374 DEBUG    client < HTTP/1.1 101 Switching Protocols
2021-08-05 15:23:41,374 DEBUG    client < Headers([('Date', 'Thu, 05 Aug 2021 13                                                    :23:41 GMT'), ('Connection', 'upgrade'), ('upgrade', 'websocket'), ('sec-websock                                                    et-accept', 'e8CWGRN0bbuE/UpUar8ZWoTegHk='), ('sec-websocket-extensions', 'perme                                                    ssage-deflate')])
2021-08-05 15:23:41,375 DEBUG    client - state = OPEN
2021-08-05 15:23:41,377 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#subscribe", "action": "subscribe", "resources": ["                                                    /appliance/*/erd/*"]}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,378 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance", "id": "List-appliances"}                                                    ', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,382 DEBUG    Client changed state: GeClientState.CONNECTING                                                     to GeClientState.CONNECTED
2021-08-05 15:23:41,530 DEBUG    client - event = data_received(<49 bytes>)
2021-08-05 15:23:41,531 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#subscribe","success":true}', rsv1=False, rsv2=False                                                    , rsv3=False)
2021-08-05 15:23:41,601 DEBUG    client - event = data_received(<256 bytes>)
2021-08-05 15:23:41,602 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"List-appliances","request":{"host":"api.                                                    brillion.geappliances.com","method":"GET","path":"/v1/appliance"},"success":true                                                    ,"code":200,"body":{"kind":"appliance#applianceList","userId":"8iphzd059z7spke",                                                    "items":[{"applianceId":"D828C9404C09","type":"Split Air Conditioner","brand":"U                                                    nknown","jid":"d828c9404c09_8iphzd059z7spke","nickname":"CondizionatoreStudio","                                                    online":"ONLINE"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,606 DEBUG    D828C9404C09 marked available
2021-08-05 15:23:41,606 DEBUG    Adding appliance D828C9404C09
2021-08-05 15:23:41,607 DEBUG    Requesting update for client D828C9404C09
2021-08-05 15:23:41,608 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "                                                    D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,609 DEBUG    Requesting features for client D828C9404C09
2021-08-05 15:23:41,610 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/feature", "id                                                    ": "Request-features"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,612 DEBUG    Registering update callback for GeAppliance(D82                                                    8C9404C09) (Unknown Type)
2021-08-05 15:23:41,646 DEBUG    client - event = data_received(<16 bytes>)
2021-08-05 15:23:41,647 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#connect","success":true}', rsv1=False, rsv2=False,                                                     rsv3=False)
2021-08-05 15:23:41,781 DEBUG    client - event = data_received(<220 bytes>)
2021-08-05 15:23:41,782 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"                                                    api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09                                                    /erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8i                                                    phzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"00                                                    00000000000000000000000000000000000000000000000000000000000000","time":"2021-08-                                                    04T16:11:28.841Z"},{"erd":"0x0002","value":"000000000000000000000000000000000000                                                    0000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007"                                                    ,"value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021                                                    -08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:                                                    11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"e                                                    rd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","                                                    value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","tim                                                    e":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T1                                                    2:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{                                                    "erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","                                                    value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04                                                    T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,784 DEBUG    Setting ErdCode.MODEL_NUMBER to
2021-08-05 15:23:41,785 DEBUG    Setting ErdCode.SERIAL_NUMBER to
2021-08-05 15:23:41,786 DEBUG    Setting ErdCode.TEMPERATURE_UNIT to ErdMeasurem                                                    entUnits.METRIC
2021-08-05 15:23:41,786 DEBUG    Setting ErdCode.APPLIANCE_TYPE to ErdApplianceT                                                    ype.SPLIT_AIR_CONDITIONER
2021-08-05 15:23:41,788 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION to 0.0.6                                                    .32
2021-08-05 15:23:41,789 DEBUG    Setting ErdCode.WIFI_MODULE_SW_VERSION_AVAILABL                                                    E to 0.0.0.0
2021-08-05 15:23:41,790 DEBUG    Setting ErdCode.ACM_UPDATING to False
2021-08-05 15:23:41,790 DEBUG    Setting ErdCode.AC_TARGET_TEMPERATURE to 79
2021-08-05 15:23:41,792 DEBUG    Setting ErdCode.AC_FAN_SETTING to ErdAcFanSetti                                                    ng.HIGH
2021-08-05 15:23:41,793 DEBUG    Setting ErdCode.AC_OPERATION_MODE to ErdAcOpera                                                    tionMode.COOL
2021-08-05 15:23:41,794 DEBUG    Setting ErdCode.AC_AMBIENT_TEMPERATURE to 77
2021-08-05 15:23:41,794 DEBUG    Setting ErdCode.AC_POWER_STATUS to ErdOnOff.ON
2021-08-05 15:23:41,795 DEBUG    Setting ErdCode.SAC_AVAILABLE_MODES to ErdSacAv                                                    ailableModes(has_heat=True, has_dry=True, has_auto=False, raw_value='03')
2021-08-05 15:23:41,796 DEBUG    Setting ErdCode.SAC_SLEEP_MODE to ErdOnOff.NA
2021-08-05 15:23:41,797 DEBUG    Setting ErdCode.SAC_TARGET_TEMPERATURE_RANGE to                                                     ErdSacTargetTemperatureRange(min=60, max=86, raw_value='FFFF')
2021-08-05 15:23:41,797 DEBUG    Setting ErdCode.SAC_AUTO_SWING_MODE to ErdOnOff                                                    .OFF
2021-08-05 15:23:41,799 DEBUG    Got initial appliance type for GeAppliance(D828                                                    C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:23:41,800 DEBUG    Appliance state change detected in GeAppliance(                                                    D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.MO                                                    DEL_NUMBER, ErdCode.SERIAL_NUMBER, ErdCode.TEMPERATURE_UNIT, ErdCode.APPLIANCE_T                                                    YPE, ErdCode.WIFI_MODULE_SW_VERSION, ErdCode.WIFI_MODULE_SW_VERSION_AVAILABLE, E                                                    rdCode.ACM_UPDATING, ErdCode.AC_TARGET_TEMPERATURE, ErdCode.AC_FAN_SETTING, ErdC                                                    ode.AC_OPERATION_MODE, ErdCode.AC_AMBIENT_TEMPERATURE, ErdCode.AC_POWER_STATUS,                                                     ErdCode.SAC_AVAILABLE_MODES, ErdCode.SAC_SLEEP_MODE, ErdCode.SAC_TARGET_TEMPERAT                                                    URE_RANGE, ErdCode.SAC_AUTO_SWING_MODE
2021-08-05 15:23:41,801 DEBUG    Appliance state change detected in GeAppliance(                                                    D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:23:41,810 DEBUG    client - event = data_received(<50 bytes>)
2021-08-05 15:23:41,811 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"resource":"/appliance/*/erd/*","kind":"websocket#subscription","succ                                                    ess":true,"change":"ADDED"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:23:41,818 DEBUG    client - event = data_received(<41 bytes>)
2021-08-05 15:23:41,819 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"Request-features","request":{"host":"api                                                    .brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/fe                                                    ature"},"success":true,"code":200,"body":{"kind":"appliance#applianceFeature","u                                                    serId":"8iphzd059z7spke","applianceId":"D828C9404C09","features":[]}}', rsv1=Fal                                                    se, rsv2=False, rsv3=False)
2021-08-05 15:23:41,821 DEBUG    Received features [] for D828C9404C09
2021-08-05 15:24:01,390 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'Ac\xc7\xea', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:01,468 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:24:01,469 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'Ac\xc7\xea', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:01,469 DEBUG    client - received solicited pong: 4163c7ea
2021-08-05 15:24:11,383 DEBUG    Sending keepalive ping
2021-08-05 15:24:11,384 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:11,468 DEBUG    client - event = data_received(<28 bytes>)
2021-08-05 15:24:11,469 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:24:21,482 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\xf3 \x82\x86', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:21,548 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:24:21,550 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\xf3 \x82\x86', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:21,550 DEBUG    client - received solicited pong: f3208286
2021-08-05 15:24:41,401 DEBUG    Sending keepalive ping
2021-08-05 15:24:41,402 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:41,490 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:24:41,491 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:24:41,554 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'n\x9c\x9b\xcd', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:41,614 DEBUG    Requesting update for GeAppliance(D828C9404C09)                                                     (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:24:41,615 DEBUG    Requesting update for client D828C9404C09
2021-08-05 15:24:41,616 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "                                                    D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:41,621 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:24:41,622 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'n\x9c\x9b\xcd', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:24:41,623 DEBUG    client - received solicited pong: 6e9c9bcd
2021-08-05 15:24:41,851 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 15:24:41,853 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"                                                    api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09                                                    /erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8i                                                    phzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"00                                                    00000000000000000000000000000000000000000000000000000000000000","time":"2021-08-                                                    04T16:11:28.841Z"},{"erd":"0x0002","value":"000000000000000000000000000000000000                                                    0000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007"                                                    ,"value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021                                                    -08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:                                                    11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"e                                                    rd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","                                                    value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","tim                                                    e":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T1                                                    2:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{                                                    "erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","                                                    value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04                                                    T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:01,631 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\x16\x82\x8bF', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:01,698 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:25:01,699 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\x16\x82\x8bF', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:01,699 DEBUG    client - received solicited pong: 16828b46
2021-08-05 15:25:11,414 DEBUG    Sending keepalive ping
2021-08-05 15:25:11,414 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:11,497 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:25:11,498 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:25:21,711 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\xe0\xed}Q', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:21,778 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:25:21,779 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\xe0\xed}Q', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:21,780 DEBUG    client - received solicited pong: e0ed7d51
2021-08-05 15:25:41,431 DEBUG    Sending keepalive ping
2021-08-05 15:25:41,432 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:41,519 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:25:41,520 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:25:41,618 DEBUG    Requesting update for GeAppliance(D828C9404C09)                                                     (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:25:41,619 DEBUG    Requesting update for client D828C9404C09
2021-08-05 15:25:41,620 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "                                                    D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:41,782 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b"\x9ak'M", rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:41,811 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 15:25:41,812 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"                                                    api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09                                                    /erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8i                                                    phzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"00                                                    00000000000000000000000000000000000000000000000000000000000000","time":"2021-08-                                                    04T16:11:28.841Z"},{"erd":"0x0002","value":"000000000000000000000000000000000000                                                    0000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007"                                                    ,"value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021                                                    -08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:                                                    11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"e                                                    rd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","                                                    value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","tim                                                    e":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T1                                                    2:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{                                                    "erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","                                                    value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04                                                    T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:41,848 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:25:41,849 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b"\x9ak'M", rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:25:41,850 DEBUG    client - received solicited pong: 9a6b274d
2021-08-05 15:26:01,872 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\xf6\x06\n_', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:01,938 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:26:01,939 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\xf6\x06\n_', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:01,939 DEBUG    client - received solicited pong: f6060a5f
2021-08-05 15:26:11,443 DEBUG    Sending keepalive ping
2021-08-05 15:26:11,444 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:11,525 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:26:11,527 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:26:21,952 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\xa3\xa9\xacO', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:22,019 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:26:22,020 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\xa3\xa9\xacO', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:22,020 DEBUG    client - received solicited pong: a3a9ac4f
2021-08-05 15:26:41,466 DEBUG    Sending keepalive ping
2021-08-05 15:26:41,466 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:41,553 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:26:41,554 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:26:41,622 DEBUG    Requesting update for GeAppliance(D828C9404C09)                                                     (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:26:41,622 DEBUG    Requesting update for client D828C9404C09
2021-08-05 15:26:41,623 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "                                                    D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:41,835 DEBUG    client - event = data_received(<21 bytes>)
2021-08-05 15:26:41,836 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"                                                    api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09                                                    /erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8i                                                    phzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"00                                                    00000000000000000000000000000000000000000000000000000000000000","time":"2021-08-                                                    04T16:11:28.841Z"},{"erd":"0x0002","value":"000000000000000000000000000000000000                                                    0000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007"                                                    ,"value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021                                                    -08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:                                                    11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"e                                                    rd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","                                                    value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","tim                                                    e":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T1                                                    2:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{                                                    "erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","                                                    value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"00","time":"2021-08-04                                                    T16:11:28.841Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:42,023 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\x90\xdb\xb6;', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:42,108 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:26:42,109 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\x90\xdb\xb6;', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:26:42,110 DEBUG    client - received solicited pong: 90dbb63b
2021-08-05 15:27:02,131 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'F\xe3\xd1M', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:02,199 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:27:02,200 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'F\xe3\xd1M', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:02,201 DEBUG    client - received solicited pong: 46e3d14d
2021-08-05 15:27:11,468 DEBUG    Sending keepalive ping
2021-08-05 15:27:11,468 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:11,550 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:27:11,551 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:27:22,213 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\xde\x0eA\x01', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:22,280 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:27:22,281 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\xde\x0eA\x01', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:22,281 DEBUG    client - received solicited pong: de0e4101
2021-08-05 15:27:38,210 DEBUG    client - event = data_received(<59 bytes>)
2021-08-05 15:27:38,211 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"item":{"applianceId":"D828C9404C09","erd":"0x7B07","time":"2021-08-0                                                    5T13:27:36.795Z","value":"01"},"resource":"/appliance/D828C9404C09/erd/0x7B07","                                                    kind":"publish#erd","userId":"8iphzd059z7spke"}', rsv1=False, rsv2=False, rsv3=F                                                    alse)
2021-08-05 15:27:38,213 DEBUG    Setting ErdCode.SAC_AUTO_SWING_MODE to ErdOnOff                                                    .ON
2021-08-05 15:27:38,214 DEBUG    Appliance state change detected in GeAppliance(                                                    D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.SA                                                    C_AUTO_SWING_MODE
2021-08-05 15:27:41,473 DEBUG    Sending keepalive ping
2021-08-05 15:27:41,474 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}',                                                     rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:41,563 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:27:41,564 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=Fal                                                    se, rsv3=False)
2021-08-05 15:27:41,625 DEBUG    Requesting update for GeAppliance(D828C9404C09)                                                     (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:27:41,626 DEBUG    Requesting update for client D828C9404C09
2021-08-05 15:27:41,626 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geapp                                                    liances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "                                                    D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:41,867 DEBUG    client - event = data_received(<29 bytes>)
2021-08-05 15:27:41,868 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1                                                    >, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"                                                    api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09                                                    /erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8i                                                    phzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"00                                                    00000000000000000000000000000000000000000000000000000000000000","time":"2021-08-                                                    04T16:11:28.841Z"},{"erd":"0x0002","value":"000000000000000000000000000000000000                                                    0000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007"                                                    ,"value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021                                                    -08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:                                                    11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"e                                                    rd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","                                                    value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","tim                                                    e":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T1                                                    2:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{                                                    "erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","                                                    value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","t                                                    ime":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"01","time":"2021-08-05                                                    T13:27:36.795Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:42,285 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9                                                    >, data=b'\x03 \xfd\x15', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:42,351 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:27:42,351 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 1                                                    0>, data=b'\x03 \xfd\x15', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:42,352 DEBUG    client - received solicited pong: 0320fd15
2021-08-05 15:27:55,271 DEBUG    client - event = data_received(<19 bytes>)
2021-08-05 15:27:55,273 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"item":{"applianceId":"D828C9404C09","erd":"0x7B07","time":"2021-08-05T13:27:54.886Z","value":"00"},"resource":"/appliance/D828C9404C09/erd/0x7B07","kind":"publish#erd","userId":"8iphzd059z7spke"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:27:55,274 DEBUG    Setting ErdCode.SAC_AUTO_SWING_MODE to ErdOnOff.OFF
2021-08-05 15:27:55,276 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.SAC_AUTO_SWING_MODE
2021-08-05 15:28:02,361 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'h8\xa8\x93', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:02,427 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:28:02,428 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'h8\xa8\x93', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:02,428 DEBUG    client - received solicited pong: 6838a893
2021-08-05 15:28:11,486 DEBUG    Sending keepalive ping
2021-08-05 15:28:11,487 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:11,577 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:28:11,578 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:22,441 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xa6Y\xe1d', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:22,509 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:28:22,510 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xa6Y\xe1d', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:22,510 DEBUG    client - received solicited pong: a659e164
2021-08-05 15:28:27,372 DEBUG    client - event = data_received(<16 bytes>)
2021-08-05 15:28:27,374 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"item":{"applianceId":"D828C9404C09","erd":"0x7B07","time":"2021-08-05T13:28:26.695Z","value":"01"},"resource":"/appliance/D828C9404C09/erd/0x7B07","kind":"publish#erd","userId":"8iphzd059z7spke"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:27,376 DEBUG    Setting ErdCode.SAC_AUTO_SWING_MODE to ErdOnOff.ON
2021-08-05 15:28:27,377 DEBUG    Appliance state change detected in GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER). Updated keys: ErdCode.SAC_AUTO_SWING_MODE
2021-08-05 15:28:41,518 DEBUG    Sending keepalive ping
2021-08-05 15:28:41,519 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:41,608 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:28:41,609 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:41,629 DEBUG    Requesting update for GeAppliance(D828C9404C09) (ErdApplianceType.SPLIT_AIR_CONDITIONER)
2021-08-05 15:28:41,629 DEBUG    Requesting update for client D828C9404C09
2021-08-05 15:28:41,630 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#api", "action": "api", "host": "api.brillion.geappliances.com", "method": "GET", "path": "/v1/appliance/D828C9404C09/erd", "id": "D828C9404C09-allErd"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:41,848 DEBUG    client - event = data_received(<26 bytes>)
2021-08-05 15:28:41,850 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#api","id":"D828C9404C09-allErd","request":{"host":"api.brillion.geappliances.com","method":"GET","path":"/v1/appliance/D828C9404C09/erd"},"success":true,"code":200,"body":{"kind":"appliance#erdList","userId":"8iphzd059z7spke","applianceId":"D828C9404C09","items":[{"erd":"0x0001","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0002","value":"0000000000000000000000000000000000000000000000000000000000000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0007","value":"01","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0008","value":"0E","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0100","value":"00000620","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0101","value":"00000000","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x0102","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7003","value":"004F","time":"2021-08-05T09:32:56.503Z"},{"erd":"0x7A00","value":"08","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A01","value":"00","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7A02","value":"4D","time":"2021-08-05T12:32:33.884Z"},{"erd":"0x7A0F","value":"01","time":"2021-08-05T12:12:15.368Z"},{"erd":"0x7B00","value":"03","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B05","value":"FF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B06","value":"FFFF","time":"2021-08-04T16:11:28.841Z"},{"erd":"0x7B07","value":"01","time":"2021-08-05T13:28:26.695Z"}]}}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:42,513 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\\\xb0H-', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:42,580 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:28:42,581 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\\\xb0H-', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:28:42,582 DEBUG    client - received solicited pong: 5cb0482d
2021-08-05 15:29:02,604 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\xd0\x879\x85', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:29:02,672 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:29:02,673 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\xd0\x879\x85', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:29:02,674 DEBUG    client - received solicited pong: d0873985
2021-08-05 15:29:11,531 DEBUG    Sending keepalive ping
2021-08-05 15:29:11,532 DEBUG    client > Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind": "websocket#ping", "id": "keepalive-ping", "action": "ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:29:11,614 DEBUG    client - event = data_received(<7 bytes>)
2021-08-05 15:29:11,615 DEBUG    client < Frame(fin=True, opcode=<Opcode.TEXT: 1>, data=b'{"kind":"websocket#pong","id":"keepalive-ping"}', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:29:22,689 DEBUG    client > Frame(fin=True, opcode=<Opcode.PING: 9>, data=b'\x03X\x91\x92', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:29:22,756 DEBUG    client - event = data_received(<6 bytes>)
2021-08-05 15:29:22,758 DEBUG    client < Frame(fin=True, opcode=<Opcode.PONG: 10>, data=b'\x03X\x91\x92', rsv1=False, rsv2=False, rsv3=False)
2021-08-05 15:29:22,758 DEBUG    client - received solicited pong: 03589192
^CTraceback (most recent call last):
  File "websocket_example.py", line 84, in <module>
    loop.run_until_complete(asyncio.sleep(7400))
  File "/usr/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
    self._run_once()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1823, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.8/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt

@simbaja
Copy link
Owner Author

simbaja commented Aug 5, 2021

Hmm... it only looks like it's an Off/On is available, so looks like the direction isn't possible from the integration. That's unfortunate. Please feel free to play around, but I'm guessing we're at a dead end there, it'll only be able to do something like your screenshot:

image

@RobertusIT
Copy link

Hmm... it only looks like it's an Off/On is available, so looks like the direction isn't possible from the integration. That's unfortunate. Please feel free to play around, but I'm guessing we're at a dead end there, it'll only be able to do something like your screenshot:

image

Yes, i see that now.
Maybe is for that, and in log we can see .SAC_AUTO_SWING_MODE when i change every state or air flow.

In log you can see the same value about this ?

Because in the previous log, i change a lot of air flow status, right, left, up down etc, but if you see only a value, on off in log, better than nothing.

@simbaja
Copy link
Owner Author

simbaja commented Aug 5, 2021

Yeah, it always seems to have a value of either On (01) or Off (00). What does the little (i) description show when you click on it in the app?

@RobertusIT
Copy link

Yeah, it always seems to have a value of either On (01) or Off (00). What does the little (i) description show when you click on it in the app?

Screenshot_20210805-225755

@simbaja
Copy link
Owner Author

simbaja commented Aug 8, 2021

OK, I think we can probably switch discussion over to the simbaja\ha_gehome repository since I think we're as good as we're going to get with the low-level functionality. I'll start a new issue log over there where we can work through HA issues. See simbaja/ha_gehome#31

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants