GithubHelp home page GithubHelp logo

madpatrick / somfy Goto Github PK

View Code? Open in Web Editor NEW
14.0 6.0 3.0 395 KB

Tahoma/Conexoon plugin for IO blinds, this plugin require internet connexion and a Somfy account

License: GNU General Public License v3.0

Python 100.00%

somfy's Introduction

Somfy plugin for Domoticz

Original script was written by Nonolk : https://github.com/nonolk/domoticz_tahoma_blind.git

Special thanks to Jan-Jaap who did the rewritting of the plugin

Domoticz plugin writen in Python to first support Somfy IO roller shutters using Tahoma/Connexoon. Basic support of RTS (Open/Close) is also included without return state (limitation due to RTS), it means for RTS the state of the device won't be updated if the device state is modified outside of domoticz. The plugin currently support the following device types: roller shutters, screens (interior/exterior), awning, pergolas, garage door, windows, luminance sensor and blinds (postions and slats control).

Important note

Version 3.x

When upgrading to version 3.x, it is required to first remove all devices attached to the Somfy hardware. This has to do with the upgrade to the Domoticz Extended Framework, which enabled the slats/orientation control for the blinds. The plugin will not upgrade when there are still devices attached to the Somfy hardware.

version 4.x

As of version 4.x the plugin supports local access to the Somfy box for both Tahoma and Connexoon. Addtional installation steps mentioned below.


Somfy currently discourages the use of the Web function So the connection to Somfy Web may not work properly in the plugin It is therefore recommended to use local mode. Refer to Somfy instructions to put your box in development mode.


Somfy login

Before installation, you need to register you Somfy products and add them to your Tahoma or Connexoon box https://www.somfy.nl/nieuw-account-aanmaken https://www.tahomalink.com/enduser-mobile-web/steer-html5-client/tahoma/

Installation

Prerequisites

The following steps need to be taken before plugin installation (generic for any plugin)

  1. Python version 3.7 or higher required & Domoticz version 2022.1 (due to extended plugin framework) or greater.
  2. follow the Domoticz guide on Using Python Plugins.
  3. install the required libraries:
sudo apt-get update

Check you Python version

sudo python3 -V

for example Python 3.9.2 Then install the libpython3.9-dev according your version

sudo apt-get install python3 libpython3-dev libpython3.9-dev
sudo apt-get install python3-requests

Setup local API access

  1. First you need to enable developer mode on your box:
  • connect to the Somfy website and navigate to the My Account menu.
  • Find the different available options for your TaHoma box and activate Developer Mode.
  • Follow instructions as provided by Somfy

Activating this mode will enable a local API on your TaHoma and Connexoon box. Be aware that Somfy will not be able to provide support for usage of this API.

  1. Your Somfy box needs the traceable in your network. To do this, you need to link your Somfy Box PIN to the Somfy Box IP address. Add your Somfy Box PIN number to the IP in your local network in etc/hosts or in your DNS Server
192.168.1.1 1234-1234-1234.local

192.168.1.1 is the IP of your Somfy box
1234-1234-1234 is the PIN number of your Somfy box and don't forget to add .local to the PIN number

Install the plugin

  1. Go in your Domoticz directory using a command line and open the plugins directory: cd domoticz/plugins
  2. clone the plugin: git clone https://github.com/MadPatrick/somfy
  3. Restart Domoticz: sudo systemctl restart domoticz

BETA

You can use the latstest test version (on your own risk)

cd domoticz/plugins/somfy

git checkout beta

Configure the plugin

In the Domoticz UI, navigate to the Hardware page. In the hardware dropdown list there will be an entry called "Somfy Tahoma or Connexoon plugin". Add the hardware to your Domoticz system and fill in the required fields

Domoticz - Hardware

Field Input
Username Your login name for your Somfy account
Password Your password for your Somfy account
Refresh Interval Select the time of updating the devices.
For Web login don't refresh too frequently the avoid login errors from Somfy webserver, 5 minutes interval adviced
For local login lower interval can be used
Connection Select Local or Web
Local needs the developer mode on your Somfy box
Web is the API website of Somfy
Gateway PIN PIN code of your box (see the box)
Reset token Set as default to False If you have error with the token your request a new token
Portnumber The connection port of your Somby box.
By default this is set to 8443
Log file location You can set a custom log location if you like
Debug logging Default is False
If you need some extra information in the log you can set this to True

Domoticz - Hardware2

After completing the field the devices will be created in your Devices section.

Slider status in Domoticz

The slider status of the created devices can be changed if this does not meet your requirements Some people like to heve slider with status Open at 0% and Close at 100% You can change this per devies if you edit the device and click the box "Reverse Position" (To set the position correctly move your devices a few time)

Domoticz - Devices_613_LightEdit

Update the plugin:

When there an update of the plugin you can easlily do an update by:

cd domoticz/plugins/somfy
git pull

And then either restart Domoticz or update the plugin on the Hardware page.

used information:

somfy's People

Contributors

janjaapko avatar madpatrick avatar nonolk avatar chaussette23 avatar mtijn avatar doudou14 avatar

Stargazers

 avatar  avatar  avatar  avatar Tatroxitum avatar Dalonsic avatar  avatar  avatar  avatar  avatar  avatar Ian Nendels avatar  avatar

Watchers

Tatroxitum avatar  avatar  avatar  avatar  avatar Dalonsic avatar

somfy's Issues

Very long error log "urllib3.exceptions.ReadTimeoutError"

Hello,

I have one error with an very long log. I don't have instructions to reproduce this error (only 1 or 2 by day).
Currently I have an frequency of 1 minute for web refresh of an Connexoon box.

I see '10' for this timeout. It is hardcoded value, in second ?
For the Internet down we have now a small log. It is possible to have the same 'small' informations in Domoticz for this issue ?

Thank-you,

Jean-Charles

somfy.log

2023-01-17 01:19:04.217 Error: Connexoon Somfy Vélux: Call to function 'onHeartbeat' failed, exception details:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 382, in _make_request
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: self._validate_conn(conn)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1012, in validate_conn
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: conn.connect()
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 411, in connect
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: self.sock = ssl_wrap_socket(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 449, in ssl_wrap_socket
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: ssl_sock = ssl_wrap_socket_impl(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 493, in _ssl_wrap_socket_impl
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3.9/ssl.py", line 500, in wrap_socket
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: return self.sslsocket_class._create(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3.9/ssl.py", line 1040, in _create
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: self.do_handshake()
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3.9/ssl.py", line 1309, in do_handshake
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: self._sslobj.do_handshake()
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: socket.timeout: _ssl.c:1106: The handshake operation timed out
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: During handling of the above exception, another exception occurred:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: resp = conn.urlopen(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: retries = retries.increment(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 532, in increment
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: raise six.reraise(type(error), error, _stacktrace)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/six.py", line 719, in reraise
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: raise value
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: httplib_response = self._make_request(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 385, in _make_request
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 336, in _raise_timeout
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: raise ReadTimeoutError(
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='tahomalink.com', port=443): Read timed out. (read timeout=10)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: During handling of the above exception, another exception occurred:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux:
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/plugin.py", line 598, in onHeartbeat
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: _plugin.onHeartbeat()
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/plugin.py", line 300, in onHeartbeat
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: if self.local or (self.tahoma.logged_in and not self.tahoma.startup):
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/tahoma.py", line 48, in logged_in
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: self.__logged_in = self.get_login()
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/tahoma.py", line 56, in get_login
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: response = requests.get(url, headers=Headers, timeout=self.timeout)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/api.py", line 76, in get
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: return request('get', url, params=params, **kwargs)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/api.py", line 61, in request
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: return session.request(method=method, url=url, **kwargs)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 542, in request
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: resp = self.send(prep, **send_kwargs)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 655, in send
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: r = adapter.send(request, **kwargs)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 529, in send
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: raise ReadTimeout(e, request=request)
2023-01-17 01:19:04.290 Error: Connexoon Somfy Vélux: requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='tahomalink.com', port=443): Read timed out. (read timeout=10)

Some more issues in the log.

Hi!

Had some further authorisation errors. Thought i'd do a git pull first and see what happened.

The login issues are gone (for now), but i do see some errors occuring:

2022-12-06 13:33:09.763 Status: Somfy zonneschermen: Entering work loop.
2022-12-06 13:33:09.763 Status: Somfy zonneschermen: Started.
2022-12-06 13:33:12.194 Status: Somfy zonneschermen: Initialized version 4.1.20, author 'MadPatrick'
2022-12-06 13:33:12.211 Status: Somfy zonneschermen: Location does not exist, logging to default location
2022-12-06 13:33:12.211 Status: Somfy zonneschermen: Starting Tahoma blind plugin, logging to file somfy.log
2022-12-06 13:33:13.370 Error: Somfy zonneschermen: Call to function 'onStart' failed, exception details:
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 557, in onStart
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: _plugin.onStart()
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 169, in onStart
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: self.tahoma.register_listener()
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/tahoma_local.py", line 254, in register_listener
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: response = self.listener.register_listener(self.base_url_local + "/events/register", headers=self.headers_with_token, verify=False)
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/listener.py", line 51, in register_listener
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: utils.handle_response(response, "get listener ID")
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/utils.py", line 60, in handle_response
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: raise exceptions.TahomaException("failed request during "+ action + ", check credentials: " + str(response.status_code))
2022-12-06 13:33:13.374 Error: Somfy zonneschermen: exceptions.TahomaException: failed request during get listener ID, check credentials: 401
2022-12-06 13:34:42.109 Error: Somfy zonneschermen: Call to function 'onCommand' failed, exception details:
2022-12-06 13:34:42.110 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-12-06 13:34:42.110 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 585, in onCommand
2022-12-06 13:34:42.111 Error: Somfy zonneschermen: _plugin.onCommand(DeviceId, Unit, Command, Level, Color)
2022-12-06 13:34:42.111 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 276, in onCommand
2022-12-06 13:34:42.111 Error: Somfy zonneschermen: self.update_devices_status(event_list)
2022-12-06 13:34:42.111 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 358, in update_devices_status
2022-12-06 13:34:42.111 Error: Somfy zonneschermen: states = dataset["states"]
2022-12-06 13:34:42.111 Error: Somfy zonneschermen: KeyError: 'states'
2022-12-06 13:34:52.215 Error: Somfy zonneschermen: Call to function 'onHeartbeat' failed, exception details:
2022-12-06 13:34:52.215 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 593, in onHeartbeat
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: _plugin.onHeartbeat()
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 315, in onHeartbeat
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: self.update_devices_status(event_list)
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 358, in update_devices_status
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: states = dataset["states"]
2022-12-06 13:34:52.216 Error: Somfy zonneschermen: KeyError: 'states'
2022-12-06 13:35:12.202 Error: Somfy zonneschermen: Call to function 'onHeartbeat' failed, exception details:
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 593, in onHeartbeat
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: _plugin.onHeartbeat()
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 315, in onHeartbeat
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: self.update_devices_status(event_list)
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 358, in update_devices_status
2022-12-06 13:35:12.203 Error: Somfy zonneschermen: states = dataset["states"]
2022-12-06 13:35:12.204 Error: Somfy zonneschermen: KeyError: 'states'

And the logfile:
somfy.log

Hope it helps :)

New device pod0 not regonized

Not sure but looks like this typ of device is not supported (yet)

2022-10-25 12:03:06.456 Error: Somfy: device not found for URL: internal://xxxx-xxxx-xxxx/pod/0

2022-10-25 13:07:27,544 - DEBUG    - utils.py           - filter_devices: Device name: Aanraakgevoelige knop Device class: Pod
2022-10-25 13:07:27,545 - DEBUG    - utils.py           - unsupported device found: {'deviceURL': 'internal://xxxx-xxxx-xxxx/pod/0', 'available': True, 'synced': True, 'type': 1, 'states': [{'type': 3, 'name': 'core:NameState', 'value': 'Box'}, {'type': 3, 'name': 'core:CountryCodeState', 'value': 'NL'}, {'type': 1, 'name': 'internal:LightingLedPodModeState', 'value': 0}, {'type': 3, 'name': 'internal:BatteryStatusState', 'value': 'no'}, {'type': 3, 'name': 'core:LocalIPv4AddressState', 'value': 'N/A'}, {'type': 3, 'name': 'core:ConnectivityState', 'value': 'online'}, {'type': 3, 'name': 'core:CyclicButtonState', 'value': 'pressed'}], 'label': 'Aanraakgevoelige knop', 'subsystemId': 0, 'attributes': [], 'enabled': True, 'controllableName': 'internal:PodV2Component', 'definition': {'states': [{'name': 'core:ConnectivityState'}, {'name': 'core:LocalIPv4AddressState'}, {'name': 'core:CountryCodeState'}, {'name': 'internal:LightingLedPodModeState'}, {'name': 'core:CyclicButtonState'}, {'name': 'core:NameState'}, {'name': 'internal:BatteryStatusState'}], 'widgetName': 'Pod', 'attributes': [], 'uiClass': 'Pod', 'commands': [{'commandName': 'deactivateCalendar', 'nparams': 0}, {'commandName': 'refreshPodMode', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'setPodLedOff', 'nparams': 0}, {'nparams': 1, 'commandName': 'setCalendar', 'paramsSig': 'p1'}, {'commandName': 'update', 'nparams': 0}, {'commandName': 'setPodLedOn', 'nparams': 0}, {'commandName': 'refreshBatteryStatus', 'nparams': 0}, {'nparams': 1, 'commandName': 'setLightingLedPodMode', 'paramsSig': 'p1'}, {'commandName': 'activateCalendar', 'nparams': 0}, {'commandName': 'refreshUpdateStatus', 'nparams': 0}, {'nparams': 1, 'commandName': 'setCountryCode', 'paramsSig': 'p1'}], 'type': 'ACTUATOR'}}

After activating the "Aanraakgevoelige knop" in the Tahamo Box and triggered it this errror appreared in the log.
Restarting Domoticz and Plugin did not add a new devices in the hardware

Many sensor updates

As i mentioned earlier, there are many sensor updates. (equal with refresh setting.?)
2023-01-14 11:26:10.281 Status: tahoma-test: Updating device: Sunis1
2023-01-14 11:26:10.282 Status: tahoma-test: Updating device: Sunis2
2023-01-14 11:26:30.274 Status: tahoma-test: Updating device: Sunis1
2023-01-14 11:26:30.276 Status: tahoma-test: Updating device: Sunis2
2023-01-14 11:27:03.308 Status: Domoticz V2022.2 (build 14901) (c)2012-2022 GizMoCuz
2023-01-14 11:27:03.313 Status: Build Hash: 0a4e61d7e, Date: 2022-12-31 07:22:16
2023-01-14 11:27:03.313 Status: Startup Path: /home/pi/domoticz/
2023-01-14 11:27:03.438 Status: PluginSystem: Started, Python version '3.9.2', 2 plugin definitions loaded.
2023-01-14 11:27:03.440 Status: WebServer(HTTP) started on address: :: with port 8080
2023-01-14 11:27:03.444 Status: WebServer(SSL) started on address: :: with port 443
2023-01-14 11:27:03.445 Status: TCPServer: shared server started...
2023-01-14 11:27:03.445 Status: RxQueue: queue worker started...
2023-01-14 11:27:05.446 Status: tahoma-test: Entering work loop.
2023-01-14 11:27:05.446 Status: tahoma-test: Started.
2023-01-14 11:27:05.446 Status: NotificationSystem: thread started...
2023-01-14 11:27:05.447 Status: EventSystem: reset all events...
2023-01-14 11:27:05.448 Status: EventSystem: reset all device statuses...
2023-01-14 11:27:05.465 Status: Python EventSystem: Initializing event module.
2023-01-14 11:27:05.465 Status: EventSystem: Started
2023-01-14 11:27:05.465 Status: EventSystem: Queue thread started...
2023-01-14 11:27:05.843 Status: PluginSystem: 1 plugins started.
2023-01-14 11:27:05.964 Status: tahoma-test: Initialized version 4.2.11, author 'MadPatrick'
2023-01-14 11:27:05.966 Status: tahoma-test: Location does not exist, logging to default location
2023-01-14 11:27:05.966 Status: tahoma-test: Starting Tahoma blind plugin, logging to file somfy.log
2023-01-14 11:27:06.858 Status: tahoma-test: Updating device: Sunis1
2023-01-14 11:27:06.859 Status: tahoma-test: Updating device: Sunis2
2023-01-14 11:27:25.240 Status: tahoma-test: Updating device: Sunis1
2023-01-14 11:27:25.242 Status: tahoma-test: Updating device: Sunis2
2023-01-14 11:27:45.264 Status: tahoma-test: Updating device: Sunis1
2023-01-14 11:27:45.266 Status: tahoma-test: Updating device: Sunis2

somfy.log

Log error in localAPIaccess branch

Installed from the scratch..

2022-09-30 22:06:19,120 - DEBUG    - plugin.py          - onCommand: DeviceId: 'io://0000-0000-0000/14287010' Unit: '1', Command: 'Set Level', Level: '95', Hue: ''
2022-09-30 22:06:19,120 - DEBUG    - plugin.py          - preparing command: # commands: 2
2022-09-30 22:06:19,120 - DEBUG    - plugin.py          - preparing command: # actions_serialized: 1
2022-09-30 22:06:19,120 - DEBUG    - plugin.py          - preparing command: json data: {"actions": [{"commands": [{"name": "setClosure", "parameters": [95]}], "deviceURL": "io://0000-0000-0000/14287010"}], "label": "Domoticz - Shutter05 - setClosure"}
2022-09-30 22:06:19,120 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-09-30 22:06:19,120 - DEBUG    - tahoma.py          - start command
2022-09-30 22:06:19,120 - DEBUG    - tahoma.py          - onCommand: headers: '{'Host': 'tahomalink.com', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=080B6DAFF7E4EE10020F4771AE2EF955; Path=/enduser-mobile-web; Secure; HttpOnly; SameSite=None'}', data '{"actions": [{"commands": [{"name": "setClosure", "parameters": [95]}], "deviceURL": "io://0000-0000-0000/14287010"}], "label": "Domoticz - Shutter05 - setClosure"}'
2022-09-30 22:06:19,120 - INFO     - tahoma.py          - Sending command to tahoma api
2022-09-30 22:06:19,122 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-09-30 22:06:19,160 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/exec/apply HTTP/1.1" 401 66
2022-09-30 22:06:19,162 - DEBUG    - tahoma.py          - command response: status '401' response body: '{'errorCode': 'RESOURCE_ACCESS_DENIED', 'error': 'Not authenticated'}'
2022-09-30 22:06:19,162 - ERROR    - tahoma.py          - error during command, status: 401, possible cause:{'errorCode': 'RESOURCE_ACCESS_DENIED', 'error': 'Not authenticated'}

This is the log from the default plugin:

2022-09-30 22:17:16,062 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-09-30 22:17:16,099 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/8e7e78b1-ac10-3e01-6399-5f119141bba6/fetch HTTP/1.1" 200 None
2022-09-30 22:17:16,100 - DEBUG    - tahoma.py          - get events response: status '200' response body: '<Response [200]>'
2022-09-30 22:17:16,100 - DEBUG    - tahoma.py          - get_events: add event: URL: 'io://0000-0000-0000/14287010' num states: '2'
2022-09-30 22:17:16,100 - DEBUG    - tahoma.py          - get_events: add event: URL: 'io://0000-0000-0000/14287010' num states: '4'
2022-09-30 22:17:16,100 - DEBUG    - plugin.py          - updating device status self.tahoma.startup = False on num datasets: 2
2022-09-30 22:17:16,100 - DEBUG    - plugin.py          - updating device status on data: [{'timestamp': 1664569014769, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'deviceURL': 'io://0000-0000-0000/14287010', 'deviceStates': [{'name': 'core:TargetClosureState', 'type': 1, 'value': '98'}, {'name': 'core:MovingState', 'type': 6, 'value': 'true'}], 'name': 'DeviceStateChangedEvent'}, {'timestamp': 1664569015907, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'deviceURL': 'io://0000-0000-0000/14287010', 'deviceStates': [{'name': 'core:ManufacturerSettingsState', 'type': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': '98'}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': 'false'}], 'name': 'DeviceStateChangedEvent'}]

No working on local access Tahoma since Update

Hi

Since the Tahoma update, the script no longer works in local access (But is ok on web access)
I tried to reset the token but it didn't change anything

Domoticz info:

  • Device: rasberry pi
  • Domoticz Version 2022.2

Box info:

  • Box type: Tahoma

Somfy.log with Local connexion
2023-01-21 11:31:07,691 - INFO - plugin.py - starting plugin version 4.2.16
2023-01-21 11:31:07,712 - INFO - plugin.py - Starting version: 4.2.16
2023-01-21 11:31:09,612 - INFO - tahoma_local.py - Tahoma authentication succeeded, login valid until 2023-01-27 11:31:09
2023-01-21 11:31:11,751 - ERROR - tahoma_local.py - failed to activate token
2023-01-21 11:31:30,567 - ERROR - utils.py - status code 401 authorisation failed, check credentials
2023-01-21 11:31:50,357 - ERROR - utils.py - status code 401 authorisation failed, check credentials
2023-01-21 11:32:10,335 - ERROR - utils.py - status code 401 authorisation failed, check credentials
2023-01-21 11:32:30,344 - ERROR - utils.py - status code 401 authorisation failed, check credentials
2023-01-21 11:32:50,379 - ERROR - utils.py - status code 401 authorisation failed, check credentials
2023-01-21 11:32:56,545 - INFO - plugin.py - stopping plugin

Somfy.log with Web connexion
2023-01-20 20:46:06,498 - INFO - plugin.py - starting plugin version 4.2.16
2023-01-20 20:46:06,503 - INFO - plugin.py - Starting version: 4.2.16
2023-01-20 20:46:07,295 - INFO - tahoma.py - Tahoma authentication succeeded, login valid until 2023-01-20 20:47:37
2023-01-20 20:51:09,514 - INFO - tahoma.py - Tahoma authentication succeeded, login valid until 2023-01-20 20:52:39
2023-01-20 21:01:10,586 - INFO - tahoma.py - Tahoma authentication succeeded, login valid until 2023-01-20 21:02:40
2023-01-20 21:11:11,793 - INFO - tahoma.py - Tahoma authentication succeeded, login valid until 2023-01-20 21:12:41

Domoticz logging with Local connexion
2023-01-21 11:31:07.352 Status: Tahoma: Initialized version 4.2.16, author 'MadPatrick'
2023-01-21 11:31:07.609 Status: Tahoma: Location does not exist, logging to default location
2023-01-21 11:31:07.610 Status: Tahoma: Starting Tahoma blind plugin, logging to file somfy.log
2023-01-21 11:31:50.366 Error: Tahoma: _plugin.onHeartbeat()
2023-01-21 11:31:50.366 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/plugin.py", line 307, in onHeartbeat
2023-01-21 11:31:50.366 Error: Tahoma: filtered_devices = self.tahoma.get_devices()
2023-01-21 11:31:50.366 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/tahoma_local.py", line 188, in get_devices
2023-01-21 11:31:50.366 Error: Tahoma: utils.handle_response(response, "get devices")
2023-01-21 11:31:50.367 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/utils.py", line 84, in handle_response
2023-01-21 11:31:50.367 Error: Tahoma: raise exceptions.TahomaException("failed request during "+ action + ", check credentials: " + str(response.status_code))
2023-01-21 11:31:50.367 Error: Tahoma: exceptions.TahomaException: failed request during get devices, check credentials: 401

Domoticz logging with Web connexion
2023-01-21 11:33:43.232 Status: Tahoma: Initialized version 4.2.16, author 'MadPatrick'
2023-01-21 11:33:43.458 Status: Tahoma: Location does not exist, logging to default location
2023-01-21 11:33:43.459 Status: Tahoma: Starting Tahoma blind plugin, logging to file somfy.log

Somfy device has no status update in Domoticz

I am using 6 Somfy IO devices, 3 RollerShutter, 2 ExtoriorScreen and 1 Awning. These devices are controlled by a handheld remote, Tahoma box with app on mobile phone and Domoticz with Somfy plugin. The 3 Roller Shutter and 2 Extorior Screens are working fine, every command is executed and status is updated in Tahoma box and Domoticz. Only the Awning has a problem, the commands are executed but as the device has finished the status in Domoticz is not updated (it is in Tahoma box). I have deleted this device in Domoticz and Tahoma box and add it again, same problem. I am using a Raspberry 3B with Bullseye 32 bit and Domoticz 20232. I've had the same problem with Buster and earlier versions of Domoticz. I can't find a problem, are there more users with this problem and is there a solution? Attatched is a Somfy and Domoticz log.
Thanks.
Domoticz_log_Awning
somfy_Scherm_achter_klein.log

RTS devices not found

RTS devices are not found currently. Log looks as follows in 'Local' mode:

2022-11-09 13:51:07.793 Error: Somfy Tahoma: Call to function 'onStart' failed, exception details:
2022-11-09 13:51:07.831 Error: Somfy Tahoma: Traceback (most recent call last):
2022-11-09 13:51:07.831 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
2022-11-09 13:51:07.831 Error: Somfy Tahoma: (self._dns_host, self.port), self.timeout, **extra_kw)
2022-11-09 13:51:07.831 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 57, in create_connection
2022-11-09 13:51:07.831 Error: Somfy Tahoma: for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
2022-11-09 13:51:07.831 Error: Somfy Tahoma: File "/usr/lib/python3.7/socket.py", line 748, in getaddrinfo
2022-11-09 13:51:07.831 Error: Somfy Tahoma: for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
2022-11-09 13:51:07.831 Error: Somfy Tahoma: socket.gaierror: [Errno -2] Name or service not known
2022-11-09 13:51:07.831 Error: Somfy Tahoma:
2022-11-09 13:51:07.831 Error: Somfy Tahoma: During handling of the above exception, another exception occurred:
2022-11-09 13:51:07.831 Error: Somfy Tahoma:
2022-11-09 13:51:07.831 Error: Somfy Tahoma: Traceback (most recent call last):
2022-11-09 13:51:07.831 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
2022-11-09 13:51:07.831 Error: Somfy Tahoma: chunked=chunked)
2022-11-09 13:51:07.831 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 343, in _make_request
2022-11-09 13:51:07.832 Error: Somfy Tahoma: self._validate_conn(conn)
2022-11-09 13:51:07.832 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 841, in _validate_conn
2022-11-09 13:51:07.832 Error: Somfy Tahoma: conn.connect()
2022-11-09 13:51:07.832 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 301, in connect
2022-11-09 13:51:07.832 Error: Somfy Tahoma: conn = self._new_conn()
2022-11-09 13:51:07.832 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 168, in _new_conn
2022-11-09 13:51:07.832 Error: Somfy Tahoma: self, "Failed to establish a new connection: %s" % e)
2022-11-09 13:51:07.832 Error: Somfy Tahoma: urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x60adbbb0>: Failed to establish a new connection: [Errno -2] Name or service not known
2022-11-09 13:51:07.832 Error: Somfy Tahoma:
2022-11-09 13:51:07.832 Error: Somfy Tahoma: During handling of the above exception, another exception occurred:
2022-11-09 13:51:07.832 Error: Somfy Tahoma:
2022-11-09 13:51:07.832 Error: Somfy Tahoma: Traceback (most recent call last):
2022-11-09 13:51:07.832 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 449, in send
2022-11-09 13:51:07.832 Error: Somfy Tahoma: timeout=timeout
2022-11-09 13:51:07.832 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
2022-11-09 13:51:07.832 Error: Somfy Tahoma: _stacktrace=sys.exc_info()[2])
2022-11-09 13:51:07.832 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 398, in increment
2022-11-09 13:51:07.832 Error: Somfy Tahoma: raise MaxRetryError(_pool, url, error or ResponseError(cause))
2022-11-09 13:51:07.832 Error: Somfy Tahoma: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='2017-8871-5701.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/events/register (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x60adbbb0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
2022-11-09 13:51:07.833 Error: Somfy Tahoma:
2022-11-09 13:51:07.833 Error: Somfy Tahoma: During handling of the above exception, another exception occurred:
2022-11-09 13:51:07.833 Error: Somfy Tahoma:
2022-11-09 13:51:07.833 Error: Somfy Tahoma: Traceback (most recent call last):
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 528, in onStart
2022-11-09 13:51:07.833 Error: Somfy Tahoma: _plugin.onStart()
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 166, in onStart
2022-11-09 13:51:07.833 Error: Somfy Tahoma: self.tahoma.register_listener()
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/tahoma_local.py", line 254, in register_listener
2022-11-09 13:51:07.833 Error: Somfy Tahoma: response = self.listener.register_listener(self.base_url_local + "/events/register", headers=self.headers_with_token, verify=False)
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/listener.py", line 42, in register_listener
2022-11-09 13:51:07.833 Error: Somfy Tahoma: response = requests.post(url, headers=headers, verify=verify, timeout=timeout)
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/requests/api.py", line 116, in post
2022-11-09 13:51:07.833 Error: Somfy Tahoma: return request('post', url, data=data, json=json, **kwargs)
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
2022-11-09 13:51:07.833 Error: Somfy Tahoma: return session.request(method=method, url=url, **kwargs)
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
2022-11-09 13:51:07.833 Error: Somfy Tahoma: resp = self.send(prep, **send_kwargs)
2022-11-09 13:51:07.833 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
2022-11-09 13:51:07.834 Error: Somfy Tahoma: r = adapter.send(request, **kwargs)
2022-11-09 13:51:07.834 Error: Somfy Tahoma: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 516, in send
2022-11-09 13:51:07.834 Error: Somfy Tahoma: raise ConnectionError(e, request=request)
2022-11-09 13:51:07.834 Error: Somfy Tahoma: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='2017-8871-5701.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/events/register (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x60adbbb0>: Failed to establish a new connection: [Errno -2] Name or service not known'))

and on web mode:

2022-11-09 13:52:31.075 Error: Somfy Tahoma: Call to function 'onStart' failed, exception details:
2022-11-09 13:52:31.077 Error: Somfy Tahoma: Traceback (most recent call last):
2022-11-09 13:52:31.077 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 528, in onStart
2022-11-09 13:52:31.077 Error: Somfy Tahoma: _plugin.onStart()
2022-11-09 13:52:31.077 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 172, in onStart
2022-11-09 13:52:31.077 Error: Somfy Tahoma: self.create_devices(filtered_devices)
2022-11-09 13:52:31.077 Error: Somfy Tahoma: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 485, in create_devices
2022-11-09 13:52:31.077 Error: Somfy Tahoma: elif (device["definition"]["deviceURL"].startswith("rts://")):
2022-11-09 13:52:31.077 Error: Somfy Tahoma: KeyError: 'deviceURL'

Also saw this error:
2022-11-09 13:52:31.077 Error: Somfy Tahoma: elif (device["definition"]["deviceURL"].startswith("rts://")):

Let me know if you need anything!

Blinds do not update - Connexoon - Too many retries

Hello,

I made a git pull on the wrong folder and updated the Somfy plugin to 4.2.14
Since then, blinds do not udpdate any more and I get an error in domoticz.
Commands do work normally.

Everything worked perfectly untill yesterday morning (included).
However, Somfy's servers experienced some trouble these last hours and Somfy's boxes where updated.
It nevertheless seems back to normal now.

Plugin was stopped this morning during roughly 1 hour and restarted, with same error still there.
Plugin stopped again for 4 hours and restated. Problem still there...

Box
Connexoon
Web version
Refresh intervall 10 mn.

Domoticz
Version: 2022.2
Build Hash: eea9db734
RPI
Raspbian Buster

Domoticz error
2023-01-19 16:36:14.774 Error: Volets roulants: Call to function 'onStart' failed, exception details:
2023-01-19 16:36:14.782 Error: Volets roulants: Traceback (most recent call last):
2023-01-19 16:36:14.782 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 575, in onStart
2023-01-19 16:36:14.782 Error: Volets roulants: _plugin.onStart()
2023-01-19 16:36:14.782 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 176, in onStart
2023-01-19 16:36:14.782 Error: Volets roulants: filtered_devices = self.tahoma.get_devices()
2023-01-19 16:36:14.782 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/tahoma.py", line 138, in get_devices
2023-01-19 16:36:14.782 Error: Volets roulants: raise exceptions.TooManyRetries
2023-01-19 16:36:14.782 Error: Volets roulants: exceptions.TooManyRetries: Failed to call Tahoma/Somfy API (too many retries)

Plugin logs
somfy.log

Web version: It looks like Connexoon doesn't support serialized actions

It looks like the Connexoon box doesn't like serialized actions. I don't know about Tahoma box, maybe it's a limitation of the web version.

2022-11-30 13:12:07,064 - DEBUG    - plugin.py          - Polling unit in 45 heartbeats.
2022-11-30 13:12:08,066 - DEBUG    - plugin.py          - Polling unit in 44 heartbeats.
2022-11-30 13:12:08,267 - DEBUG    - plugin.py          - onCommand: DeviceId: 'io://PIN' Unit: '1', Command: 'Close', Level: '0', Hue: ''
2022-11-30 13:12:08,268 - DEBUG    - plugin.py          - preparing command: # commands: 1
2022-11-30 13:12:08,268 - DEBUG    - plugin.py          - preparing command: # actions_serialized: 1
2022-11-30 13:12:08,269 - DEBUG    - plugin.py          - preparing command: json data: {"actions": [{"commands": [{"name": "close"}], 
2022-11-30 13:12:08,270 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date (2022-12-06 12:43:30.097602) >= datetime.datetime.now() = True
2022-11-30 13:12:08,270 - DEBUG    - tahoma.py          - start command
2022-11-30 13:12:08,270 - INFO     - tahoma.py          - Sending command to tahoma api
2022-11-30 13:12:08,271 - DEBUG    - tahoma.py          - onCommand: headers: '{'Host': 'tahomalink.com', ...
2022-11-30 13:12:08,280 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-30 13:12:08,432 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/exec/apply HTTP/1.1" 200 None
2022-11-30 13:12:08,442 - DEBUG    - tahoma.py          - command response: status '200' response body: '{'execId': 'c8739361-ac10-3e01-11e7-b11aa018cbc4'}'
2022-11-30 13:12:08,442 - DEBUG    - tahoma.py          - succeeded to post command: {'execId': 'c8739361-ac10-3e01-11e7-b11aa018cbc4'}
2022-11-30 13:12:08,443 - DEBUG    - tahoma.py          - start get events
2022-11-30 13:12:08,444 - DEBUG    - listener.py        - listener vald: self.__listener_expiry = 2022-11-30 13:11:22 self.__valid = False
2022-11-30 13:12:09,058 - DEBUG    - plugin.py          - Polling unit in 43 heartbeats.
2022-11-30 13:12:10,066 - DEBUG    - plugin.py          - Polling unit in 42 heartbeats.
2022-11-30 13:12:10,269 - DEBUG    - plugin.py          - onCommand: DeviceId: 'io://PIN' Unit: '1', Command: 'Stop', Level: '100', Hue: ''
2022-11-30 13:12:10,270 - DEBUG    - plugin.py          - preparing command: # commands: 1
2022-11-30 13:12:10,270 - DEBUG    - plugin.py          - preparing command: # actions_serialized: 2
2022-11-30 13:12:10,271 - DEBUG    - plugin.py          - preparing command: json data: {"actions": [{"commands": [{"name": "close"}], {"commands": [{"name": "stop"}], ...
2022-11-30 13:12:10,271 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date (2022-12-06 12:43:30.097602) >= datetime.datetime.now() = True
2022-11-30 13:12:10,271 - DEBUG    - tahoma.py          - start command
2022-11-30 13:12:10,272 - INFO     - tahoma.py          - Sending command to tahoma api
2022-11-30 13:12:10,272 - DEBUG    - tahoma.py          - onCommand: headers: '{'Host': 'tahomalink.com', ...
2022-11-30 13:12:10,278 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-30 13:12:10,413 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/exec/apply HTTP/1.1" 400 None
2022-11-30 13:12:10,422 - DEBUG    - tahoma.py          - command response: status '400' response body: '{'errorCode': 'DUPLICATE_FIELD_OR_VALUE', 'error': 'Another action exists on the same device : io://PIN'}'
2022-11-30 13:12:10,423 - ERROR    - tahoma.py          - status code 400 this is a bug, bad request made, url or body needs to be checked
2022-11-30 13:12:11,077 - DEBUG    - plugin.py          - Polling unit in 41 heartbeats.
2022-11-30 13:12:12,082 - DEBUG    - plugin.py          - Polling unit in 40 heartbeats.
2022-11-30 13:12:13,085 - DEBUG    - plugin.py          - Polling unit in 39 heartbeats.
2022-11-30 13:12:14,088 - DEBUG    - plugin.py          - Polling unit in 38 heartbeats.
2022-11-30 13:12:14,892 - DEBUG    - plugin.py          - onCommand: DeviceId: 'io://PIN' Unit: '1', Command: 'Stop', Level: '100', Hue: ''
2022-11-30 13:12:14,893 - DEBUG    - plugin.py          - preparing command: # commands: 1
2022-11-30 13:12:14,894 - DEBUG    - plugin.py          - preparing command: # actions_serialized: 3
2022-11-30 13:12:14,894 - DEBUG    - plugin.py          - preparing command: json data: {"actions": [{"commands": [{"name": "close"}], "deviceURL": "io://PIN"}, {"commands": [{"name": "stop"}], "deviceURL": "io://PIN"}, {"commands": [{"name": "stop"}], "deviceURL": "io://PIN"}], "label": "Domoticz - Escalier - stop"}
2022-11-30 13:12:14,895 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = False and self.__expiry_date (2022-12-06 12:43:30.097602) >= datetime.datetime.now() = True
2022-11-30 13:12:14,897 - INFO     - plugin.py          - Not logged in, must connect
2022-11-30 13:12:14,909 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-30 13:12:15,662 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/login HTTP/1.1" 200 None
2022-11-30 13:12:15,676 - DEBUG    - tahoma.py          - Login respone: status_code: '200' reponse body: '{'success': True, 'roles': [{'name': 'ENDUSER'}]}'
2022-11-30 13:12:15,676 - INFO     - tahoma.py          - Tahoma authentication succeeded, login valid until 2022-12-06 13:12:15
2022-11-30 13:12:15,677 - DEBUG    - tahoma.py          - login: cookies: 'JSESSIONID=94B4640057131ED747A6ED35DC6C6A2E', headers: '{'Date': 'Wed, 30 Nov 2022 12:12:15 GMT', 'Server': 'overkiz',
2022-11-30 13:12:15,678 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date (2022-12-06 13:12:15.676609) >= datetime.datetime.now() = True
2022-11-30 13:12:15,678 - DEBUG    - tahoma.py          - start register
2022-11-30 13:12:15,678 - DEBUG    - listener.py        - start register listener
2022-11-30 13:12:15,679 - DEBUG    - listener.py        - register request: self.headers_with_token: '{"Host": "tahomalink.com", "Connection": "keep-alive", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Content-Type": "application/json", "Cookie": "JSESSIONID=94B4640057131ED747A6ED35DC6C6A2E"}'
2022-11-30 13:12:15,685 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-30 13:12:15,813 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/register HTTP/1.1" 200 None
2022-11-30 13:12:15,822 - DEBUG    - listener.py        - register response: status '200' response body: '<Response [200]>'
2022-11-30 13:12:15,824 - DEBUG    - listener.py        - succeeded to get listener ID: {'id': 'c873b03b-ac10-3e01-11e7-b11a822ae468'}
2022-11-30 13:12:15,825 - DEBUG    - tahoma.py          - start command
2022-11-30 13:12:15,825 - INFO     - tahoma.py          - Sending command to tahoma api
2022-11-30 13:12:15,826 - DEBUG    - tahoma.py          - onCommand: headers: '{'Host': 'tahomalink.com', ...
2022-11-30 13:12:15,832 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-30 13:12:15,961 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/exec/apply HTTP/1.1" 400 None
2022-11-30 13:12:15,970 - DEBUG    - tahoma.py          - command response: status '400' response body: '{'errorCode': 'DUPLICATE_FIELD_OR_VALUE', 'error': 'Another action exists on the same device : io://PIN'}'
2022-11-30 13:12:15,972 - ERROR    - tahoma.py          - status code 400 this is a bug, bad request made, url or body needs to be checked
2022-11-30 13:12:16,075 - DEBUG    - plugin.py          - Polling unit in 37 heartbeats.
2022-11-30 13:12:17,077 - DEBUG    - plugin.py          - Polling unit in 36 heartbeats.
2022-11-30 13:12:18,082 - DEBUG    - plugin.py          - Polling unit in 35 heartbeats.

This blocks the plugin because the variable self.actions_serialized is never cleaned in such case.

Web version: The plugin works only few seconds then it fails with "No ListenerId has been provided"

Hello,
I used to work with older Nonolk plugin, then it seem it failed very often, so I wanted to try yours which is the most up to date.
I have a Connexoon, a Somfy account, my shutters are detected and the plugin seems to works fine, but only for a very short time.
I enabled debug mode and I had a look.

Here is the cleaned "somfy" log :
https://pastebin.com/4hLhL1UY

Since the moment where a command fails, I get also errors in Domoticz log. I get one Python error per second (per "heartbeats" I think).

Here is one error in Domoticz log :
https://pastebin.com/bSnb1buL

Open/Close issue after Domoticz 14525

After Domoticz version 14525 there is an issue with open/close status again..
2022-10-08 12:33:40.301 Error: Tahoma: Call to function 'onCommand' failed, exception details:
2022-10-08 12:33:40.301 Error: Tahoma: Traceback (most recent call last):
2022-10-08 12:33:40.301 Error: Tahoma: File "/home/pi/domoticz/plugins/localapiaccess/plugin.py", line 462, in onCommand
2022-10-08 12:33:40.301 Error: Tahoma: _plugin.onCommand(DeviceId, Unit, Command, Level, Color)
2022-10-08 12:33:40.301 Error: Tahoma: File "/home/pi/domoticz/plugins/localapiaccess/plugin.py", line 179, in onCommand
2022-10-08 12:33:40.301 Error: Tahoma: data = {"label": "Domoticz - "+Devices[DeviceId].Units[Unit].Name+" - "+commands["name"], "actions": self.actions_serialized}
2022-10-08 12:33:40.301 Error: Tahoma: KeyError: 'name'

2022-10-08 12:37:08,899 - INFO     - plugin.py          - starting plugin version 4.0.0
2022-10-08 12:37:08,899 - INFO     - plugin.py          - Starting version: 4.0.0
2022-10-08 12:37:08,899 - DEBUG    - plugin.py          - checking versions: current '4.0.0', config '4.0.0'
2022-10-08 12:37:08,899 - DEBUG    - plugin.py          - starting to log in
2022-10-08 12:37:08,900 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:37:09,481 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/login HTTP/1.1" 200 None
2022-10-08 12:37:09,483 - DEBUG    - tahoma.py          - Login respone: status_code: '200' reponse body: '{'success': True, 'roles': [{'name': 'ENDUSER'}]}'
2022-10-08 12:37:09,483 - INFO     - tahoma.py          - Tahoma authentication succeeded, login valid until 2022-10-14 12:37:09
2022-10-08 12:37:09,483 - DEBUG    - tahoma.py          - login: cookies: '<RequestsCookieJar[<Cookie JSESSIONID=CD25F6B56EE9CC9D92A325D7F3AF680B for tahomalink.com/enduser-mobile-web>]>', headers: '{'Date': 'Sat, 08 Oct 2022 10:37:09 GMT', 'Server': 'overkiz', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains, max-age=31536000 ; includeSubDomains', 'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'X-XSS-Protection': '1; mode=block', 'X-Frame-Options': 'DENY', 'X-Content-Type-Options': 'nosniff', 'Content-Type': 'application/json;charset=UTF-8', 'Set-Cookie': 'JSESSIONID=CD25F6B56EE9CC9D92A325D7F3AF680B; Path=/enduser-mobile-web; Secure; HttpOnly; SameSite=None', 'Keep-Alive': 'timeout=5, max=50', 'Connection': 'Keep-Alive', 'Transfer-Encoding': 'chunked'}'
2022-10-08 12:37:09,483 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-10-08 12:37:09,483 - DEBUG    - tahoma.py          - start register
2022-10-08 12:37:09,484 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:37:09,528 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/register HTTP/1.1" 200 None
2022-10-08 12:37:09,529 - DEBUG    - tahoma.py          - register response: status '200' response body: '{'id': 'b72b9215-ac10-3e01-6399-5f11e73067c8'}'
2022-10-08 12:37:09,529 - INFO     - tahoma.py          - Tahoma listener registred
2022-10-08 12:37:09,529 - INFO     - tahoma.py          - Checking setup status at startup
2022-10-08 12:37:09,529 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-10-08 12:37:09,530 - DEBUG    - tahoma.py          - start get devices
2022-10-08 12:37:09,530 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:37:09,594 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "GET /enduser-mobile-web/enduserAPI/setup/devices HTTP/1.1" 200 None
2022-10-08 12:37:09,620 - DEBUG    - tahoma.py          - get device response: url 'https://tahomalink.com:443/enduser-mobile-web/enduserAPI/setup/devices' response headers: '{'Date': 'Sat, 08 Oct 2022 10:37:09 GMT', 'Server': 'overkiz', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains, max-age=31536000 ; includeSubDomains', 'Cache-Control': 'no-store, must-revalidate, no-cache, max-age=0', 'Expires': 'Mon, 01 Jan 1990 00:00:00 GMT', 'X-XSS-Protection': '1; mode=block', 'X-Frame-Options': 'DENY', 'X-Content-Type-Options': 'nosniff', 'Content-Type': 'application/json;charset=UTF-8', 'Keep-Alive': 'timeout=5, max=50', 'Connection': 'Keep-Alive', 'Transfer-Encoding': 'chunked'}'
2022-10-08 12:37:09,622 - DEBUG    - tahoma.py          - get device response: status '200' response body: '[{'creationTime': 1613477406000, 'lastUpdateTime': 1613477406000, 'label': 'HOMEKIT (stack)', 'deviceURL': 'homekit://0000-0000-0000/stack', 'shortcut': False, 'controllableName': 'homekit:StackComponent', 'definition': {'commands': [{'commandName': 'deleteControllers', 'nparams': 0}], 'states': [], 'dataProperties': [], 'widgetName': 'HomekitStack', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'homekit:StackComponent', 'type': 'PROTOCOL_GATEWAY'}, 'attributes': [{'name': 'homekit:SetupCode', 'type': 3, 'value': '763-24-591'}, {'name': 'homekit:SetupPayload', 'type': 3, 'value': 'X-HM://0024QDGJ3PCM9'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'HomekitStack', 'type': 5, 'oid': '9cf9ef5d-32eb-4424-aea1-3706f690b080', 'uiClass': 'ProtocolGateway'}, {'creationTime': 1552229933000, 'lastUpdateTime': 1552229933000, 'label': 'Alarm', 'deviceURL': 'internal://0000-0000-0000/alarm/0', 'shortcut': False, 'controllableName': 'internal:TSKAlarmComponent', 'definition': {'commands': [{'commandName': 'alarmOff', 'nparams': 0}, {'commandName': 'alarmOn', 'nparams': 0}, {'commandName': 'arm', 'nparams': 0}, {'commandName': 'disarm', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'off', 'nparams': 0}, {'commandName': 'on', 'nparams': 0}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'refreshAlarmDelay', 'nparams': 0}, {'commandName': 'refreshCurrentAlarmMode', 'nparams': 0}, {'commandName': 'refreshIntrusionDetected', 'nparams': 0}, {'commandName': 'setAlarmDelay', 'nparams': 1}, {'commandName': 'alarmPartial1', 'nparams': 0}, {'commandName': 'alarmPartial2', 'nparams': 0}, {'commandName': 'setIntrusionDetected', 'nparams': 1}, {'commandName': 'setTargetAlarmMode', 'nparams': 1}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'ContinuousState', 'qualifiedName': 'internal:AlarmDelayState'}, {'type': 'DiscreteState', 'values': ['off', 'partial1', 'partial2', 'total'], 'qualifiedName': 'internal:CurrentAlarmModeState'}, {'type': 'DiscreteState', 'values': ['detected', 'notDetected', 'pending', 'sos'], 'qualifiedName': 'internal:IntrusionDetectedState'}, {'type': 'DiscreteState', 'values': ['off', 'partial1', 'partial2', 'sos', 'total'], 'qualifiedName': 'internal:TargetAlarmModeState'}], 'dataProperties': [], 'widgetName': 'TSKAlarmController', 'uiProfiles': ['Alarm', 'Switchable'], 'uiClass': 'Alarm', 'qualifiedName': 'internal:TSKAlarmComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'internal:CurrentAlarmModeState', 'type': 3, 'value': 'off'}, {'name': 'internal:AlarmDelayState', 'type': 1, 'value': 30}, {'name': 'internal:TargetAlarmModeState', 'type': 3, 'value': 'off'}, {'name': 'internal:IntrusionDetectedState', 'type': 3, 'value': 'notDetected'}, {'name': 'core:NameState', 'type': 3, 'value': 'alarm name'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'TSKAlarmController', 'type': 1, 'oid': '11c4cc7c-5f36-4357-8eef-0cbd26cca2aa', 'uiClass': 'Alarm'}, {'creationTime': 1552229775000, 'lastUpdateTime': 1552229775000, 'label': 'Aanraakgevoelige knop', 'deviceURL': 'internal://0000-0000-0000/pod/0', 'shortcut': False, 'controllableName': 'internal:PodV2Component', 'metadata': '{"tahoma":{"touchButtonFlag":true}}', 'definition': {'commands': [{'commandName': 'getName', 'nparams': 0}, {'commandName': 'update', 'nparams': 0}, {'commandName': 'setCountryCode', 'nparams': 1}, {'commandName': 'activateCalendar', 'nparams': 0}, {'commandName': 'deactivateCalendar', 'nparams': 0}, {'commandName': 'refreshBatteryStatus', 'nparams': 0}, {'commandName': 'refreshPodMode', 'nparams': 0}, {'commandName': 'refreshUpdateStatus', 'nparams': 0}, {'commandName': 'setCalendar', 'nparams': 1}, {'commandName': 'setLightingLedPodMode', 'nparams': 1}, {'commandName': 'setPodLedOff', 'nparams': 0}, {'commandName': 'setPodLedOn', 'nparams': 0}], 'states': [{'type': 'DiscreteState', 'values': ['offline', 'online'], 'qualifiedName': 'core:ConnectivityState'}, {'type': 'DataState', 'qualifiedName': 'core:CountryCodeState'}, {'type': 'DiscreteState', 'values': ['pressed', 'stop'], 'qualifiedName': 'core:CyclicButtonState'}, {'type': 'DataState', 'qualifiedName': 'core:LocalIPv4AddressState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'ContinuousState', 'qualifiedName': 'internal:BatteryStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'internal:LightingLedPodModeState'}], 'dataProperties': [], 'widgetName': 'Pod', 'uiProfiles': ['UpdatableComponent'], 'uiClass': 'Pod', 'qualifiedName': 'internal:PodV2Component', 'type': 'ACTUATOR'}, 'states': [{'name': 'internal:BatteryStatusState', 'type': 3, 'value': 'no'}, {'name': 'core:CyclicButtonState', 'type': 3, 'value': 'stop'}, {'name': 'internal:LightingLedPodModeState', 'type': 2, 'value': 0.05}, {'name': 'core:CountryCodeState', 'type': 3, 'value': 'NL'}, {'name': 'core:LocalIPv4AddressState', 'type': 3, 'value': '192.168.60.216'}, {'name': 'core:NameState', 'type': 3, 'value': 'Box'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'Pod', 'type': 1, 'oid': 'd8787f98-e571-48c5-b8a5-f1693c7a3500', 'uiClass': 'Pod'}, {'creationTime': 1617117266000, 'lastUpdateTime': 1617117266000, 'label': 'Shutter23', 'deviceURL': 'io://0000-0000-0000/10013480', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter23'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'low'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 38.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': '285239cf-489a-4800-b2cb-959489522f27', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': 'fbada92a-e516-406c-81c5-9c6605d2c594', 'uiClass': 'RollerShutter'}, {'creationTime': 1625056291000, 'lastUpdateTime': 1625056291000, 'label': 'Shutter06', 'deviceURL': 'io://0000-0000-0000/10769361', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter06'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 46.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': '62e661ca-b165-4610-9451-ac82ee200087', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '21312b80-2b53-4b32-972a-b358638428f5', 'uiClass': 'RollerShutter'}, {'creationTime': 1662471075000, 'lastUpdateTime': 1662471075000, 'label': 'Sunis2', 'deviceURL': 'io://0000-0000-0000/11521034', 'shortcut': False, 'controllableName': 'io:LightIOSystemSensor', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:LuminanceState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'DiscreteState', 'values': ['dead', 'lowBattery', 'maintenanceRequired', 'noDefect'], 'qualifiedName': 'core:SensorDefectState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}], 'dataProperties': [{'value': {'activationDelayMap': {'middle': 0, 'lower': 1200, 'upper': 300}, 'referenceStates': ['middle', 'lower', 'upper'], 'qualifiedName': 'io:SunSensorHysteresisBehavior'}, 'qualifiedName': 'core:timeBasedHysteresisBehavior'}], 'widgetName': 'LuminanceSensor', 'uiProfiles': ['Specific'], 'uiClass': 'LightSensor', 'qualifiedName': 'io:LightIOSystemSensor', 'type': 'SENSOR'}, 'states': [{'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 46.0}, {'name': 'core:LuminanceState', 'type': 2, 'value': 80870.0}], 'attributes': [{'name': 'core:MinSensedValue', 'type': 1, 'value': 50}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5126936A15'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:MaxSensedValue', 'type': 1, 'value': 100000}, {'name': 'core:MeasuredValueType', 'type': 3, 'value': 'core:LuminanceInLux'}, {'name': 'core:PowerSourceType', 'type': 3, 'value': 'battery'}], 'available': True, 'enabled': True, 'placeOID': '1f25e4fc-8c03-462e-9ef0-a2216b3cfd47', 'widget': 'LuminanceSensor', 'type': 2, 'oid': 'ff91dd0b-25e6-44bb-93ee-66190f36ad0e', 'uiClass': 'LightSensor'}, {'creationTime': 1617117816000, 'lastUpdateTime': 1617117816000, 'label': 'Shutter02', 'deviceURL': 'io://0000-0000-0000/11842901', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter02'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 62.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '8be3f59d-8cca-488b-b8d4-46b58bb13ef5', 'uiClass': 'RollerShutter'}, {'creationTime': 1625056107000, 'lastUpdateTime': 1625056107000, 'label': 'Shutter05', 'deviceURL': 'io://0000-0000-0000/14287010', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter05'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 60.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 2}, {'name': 'core:ClosureState', 'type': 1, 'value': 2}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}], 'available': True, 'enabled': True, 'placeOID': '62e661ca-b165-4610-9451-ac82ee200087', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '041dd39d-dfd6-47eb-b47b-4406626ed48b', 'uiClass': 'RollerShutter'}, {'creationTime': 1617117599000, 'lastUpdateTime': 1617117599000, 'label': 'Shutter03', 'deviceURL': 'io://0000-0000-0000/14430251', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter03'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 64.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '936dbc0b-e064-4964-babc-976a1040a699', 'uiClass': 'RollerShutter'}, {'creationTime': 1600767629000, 'lastUpdateTime': 1600767629000, 'label': 'IO (14725444)', 'deviceURL': 'io://0000-0000-0000/14725444', 'shortcut': False, 'controllableName': 'io:StackComponent', 'definition': {'commands': [{'commandName': 'advancedSomfyDiscover', 'nparams': 1}, {'commandName': 'discover1WayController', 'nparams': 2}, {'commandName': 'discoverActuators', 'nparams': 1}, {'commandName': 'discoverSensors', 'nparams': 1}, {'commandName': 'discoverSomfyUnsetActuators', 'nparams': 0}, {'commandName': 'joinNetwork', 'nparams': 0}, {'commandName': 'resetNetworkSecurity', 'nparams': 0}, {'commandName': 'shareNetwork', 'nparams': 0}], 'states': [], 'dataProperties': [], 'widgetName': 'IOStack', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'io:StackComponent', 'type': 'PROTOCOL_GATEWAY'}, 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'IOStack', 'type': 5, 'oid': '525d8667-4363-453c-b16f-e3a0b190bdee', 'uiClass': 'ProtocolGateway'}, {'creationTime': 1617116909000, 'lastUpdateTime': 1617116909000, 'label': 'Shutter22', 'deviceURL': 'io://0000-0000-0000/14989345', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter22'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'good'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 90.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': '4c6b2fa4-1bb3-4a25-8f97-e75b01623c95', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '60ef1012-5387-4e9b-8d3a-c05b278aebd6', 'uiClass': 'RollerShutter'}, {'creationTime': 1617116519000, 'lastUpdateTime': 1617116519000, 'label': 'Shutter01', 'deviceURL': 'io://0000-0000-0000/1541661', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter01'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'good'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 100.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '3ecb1325-5af4-48f3-a9ca-45a9060d4077', 'uiClass': 'RollerShutter'}, {'creationTime': 1625056462000, 'lastUpdateTime': 1625056462000, 'label': 'Shutter24', 'deviceURL': 'io://0000-0000-0000/16144514', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter24'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 66.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}], 'available': True, 'enabled': True, 'placeOID': '285239cf-489a-4800-b2cb-959489522f27', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': 'b96c5ff1-37f5-4892-b592-539cc182a963', 'uiClass': 'RollerShutter'}, {'creationTime': 1617118105000, 'lastUpdateTime': 1617118105000, 'label': 'Shutter04', 'deviceURL': 'io://0000-0000-0000/16608528', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter04'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 76.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 3}, {'name': 'core:ClosureState', 'type': 1, 'value': 3}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '8630bf34-65cd-4d95-b52e-21c8af7523e0', 'uiClass': 'RollerShutter'}, {'creationTime': 1569317150000, 'lastUpdateTime': 1569317150000, 'label': 'Sunis1', 'deviceURL': 'io://0000-0000-0000/2711689', 'shortcut': False, 'controllableName': 'io:LightIOSystemSensor', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:LuminanceState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'DiscreteState', 'values': ['dead', 'lowBattery', 'maintenanceRequired', 'noDefect'], 'qualifiedName': 'core:SensorDefectState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}], 'dataProperties': [{'value': {'activationDelayMap': {'middle': 0, 'lower': 1200, 'upper': 300}, 'referenceStates': ['middle', 'lower', 'upper'], 'qualifiedName': 'io:SunSensorHysteresisBehavior'}, 'qualifiedName': 'core:timeBasedHysteresisBehavior'}], 'widgetName': 'LuminanceSensor', 'uiProfiles': ['Specific'], 'uiClass': 'LightSensor', 'qualifiedName': 'io:LightIOSystemSensor', 'type': 'SENSOR'}, 'states': [{'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'low'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 36.0}, {'name': 'core:LuminanceState', 'type': 2, 'value': 9377.0}], 'attributes': [{'name': 'core:MeasuredValueType', 'type': 3, 'value': 'core:LuminanceInLux'}, {'name': 'core:MaxSensedValue', 'type': 1, 'value': 100000}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:MinSensedValue', 'type': 1, 'value': 50}, {'name': 'core:PowerSourceType', 'type': 3, 'value': 'battery'}], 'available': True, 'enabled': True, 'placeOID': '1f25e4fc-8c03-462e-9ef0-a2216b3cfd47', 'widget': 'LuminanceSensor', 'type': 2, 'oid': 'f94096dd-057e-4287-ac7d-cfebaddcae3f', 'uiClass': 'LightSensor'}, {'creationTime': 1617116704000, 'lastUpdateTime': 1617116704000, 'label': 'Shutter21', 'deviceURL': 'io://0000-0000-0000/6252441', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter21'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'good'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 82.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': '4c6b2fa4-1bb3-4a25-8f97-e75b01623c95', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '45ec1767-2218-4f93-b76b-b398c607d960', 'uiClass': 'RollerShutter'}, {'creationTime': 1625056580000, 'lastUpdateTime': 1625056580000, 'label': 'Shutter25', 'deviceURL': 'io://0000-0000-0000/7258281', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter25'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 60.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}], 'available': True, 'enabled': True, 'placeOID': 'e827f6f6-4463-4284-aa07-51f72978ebfd', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '6029396e-e26a-4b6b-a045-f6a956e36e0e', 'uiClass': 'RollerShutter'}, {'creationTime': 1596877910000, 'lastUpdateTime': 1596877910000, 'label': 'OGP (00000BE8)', 'deviceURL': 'ogp://0000-0000-0000/00000BE8', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'sendPrivate', 'nparams': 1}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:Private10State'}, {'type': 'DataState', 'qualifiedName': 'core:Private1State'}, {'type': 'DataState', 'qualifiedName': 'core:Private2State'}, {'type': 'DataState', 'qualifiedName': 'core:Private3State'}, {'type': 'DataState', 'qualifiedName': 'core:Private4State'}, {'type': 'DataState', 'qualifiedName': 'core:Private5State'}, {'type': 'DataState', 'qualifiedName': 'core:Private6State'}, {'type': 'DataState', 'qualifiedName': 'core:Private7State'}, {'type': 'DataState', 'qualifiedName': 'core:Private8State'}, {'type': 'DataState', 'qualifiedName': 'core:Private9State'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'attributes': [{'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'private'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': '7f1b7c75-c063-43a4-b982-f4372cd7b2da', 'uiClass': 'ProtocolGateway'}, {'creationTime': 1648202676000, 'lastUpdateTime': 1648202676000, 'label': 'OGP Sonos Bridge', 'deviceURL': 'ogp://0000-0000-0000/0003FEF3', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'discover', 'nparams': 0}, {'commandName': 'reset', 'nparams': 0}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP Sonos Bridge'}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}, {'name': 'core:Technology', 'type': 3, 'value': 'Sonos'}, {'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP Sonos Bridge'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'identification', 'commandLess': True}, {'name': 'discovery'}, {'name': 'reset'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': '89f569f6-3723-4884-a61f-2e015b6f553f', 'uiClass': 'ProtocolGateway'}, {'creationTime': 1648202675000, 'lastUpdateTime': 1648202675000, 'label': 'OGP IBPlus Bridge', 'deviceURL': 'ogp://0000-0000-0000/00920C53', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'identify', 'nparams': 0}, {'commandName': 'sendPrivate', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:Private10State'}, {'type': 'DataState', 'qualifiedName': 'core:Private1State'}, {'type': 'DataState', 'qualifiedName': 'core:Private2State'}, {'type': 'DataState', 'qualifiedName': 'core:Private3State'}, {'type': 'DataState', 'qualifiedName': 'core:Private4State'}, {'type': 'DataState', 'qualifiedName': 'core:Private5State'}, {'type': 'DataState', 'qualifiedName': 'core:Private6State'}, {'type': 'DataState', 'qualifiedName': 'core:Private7State'}, {'type': 'DataState', 'qualifiedName': 'core:Private8State'}, {'type': 'DataState', 'qualifiedName': 'core:Private9State'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP IBPlus Bridge'}], 'attributes': [{'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP IBPlus Bridge'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'identification'}, {'name': 'private'}]}, {'name': 'core:Technology', 'type': 3, 'value': 'IBPlus'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': 'ed675587-0fbe-45ac-9f71-e320d0cc27c1', 'uiClass': 'ProtocolGateway'}, {'creationTime': 1596877910000, 'lastUpdateTime': 1596877910000, 'label': 'OGP Siegenia Bridge', 'deviceURL': 'ogp://0000-0000-0000/039575E9', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'discover', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'setName', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP Siegenia Bridge'}], 'attributes': [{'name': 'core:Technology', 'type': 3, 'value': 'Siegenia'}, {'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP Siegenia Bridge'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'discovery'}, {'name': 'identification'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': '54b2c7c5-7d8a-4b9e-a199-b244975f02ad', 'uiClass': 'ProtocolGateway'}, {'creationTime': 1596877910000, 'lastUpdateTime': 1596877910000, 'label': 'OGP Intesis Bridge', 'deviceURL': 'ogp://0000-0000-0000/09E45393', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'discover', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'setName', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP Intesis Bridge'}], 'attributes': [{'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP Intesis Bridge'}, {'name': 'core:Technology', 'type': 3, 'value': 'Intesis'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'discovery'}, {'name': 'identification'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': 'ca77d2ea-f865-404a-bd92-aafc87427b33', 'uiClass': 'ProtocolGateway'}]'
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - get_devices: Device name: HOMEKIT (stack) Device class: ProtocolGateway
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1613477406000, 'lastUpdateTime': 1613477406000, 'label': 'HOMEKIT (stack)', 'deviceURL': 'homekit://0000-0000-0000/stack', 'shortcut': False, 'controllableName': 'homekit:StackComponent', 'definition': {'commands': [{'commandName': 'deleteControllers', 'nparams': 0}], 'states': [], 'dataProperties': [], 'widgetName': 'HomekitStack', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'homekit:StackComponent', 'type': 'PROTOCOL_GATEWAY'}, 'attributes': [{'name': 'homekit:SetupCode', 'type': 3, 'value': '763-24-591'}, {'name': 'homekit:SetupPayload', 'type': 3, 'value': 'X-HM://0024QDGJ3PCM9'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'HomekitStack', 'type': 5, 'oid': '9cf9ef5d-32eb-4424-aea1-3706f690b080', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - get_devices: Device name: Alarm Device class: Alarm
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1552229933000, 'lastUpdateTime': 1552229933000, 'label': 'Alarm', 'deviceURL': 'internal://0000-0000-0000/alarm/0', 'shortcut': False, 'controllableName': 'internal:TSKAlarmComponent', 'definition': {'commands': [{'commandName': 'alarmOff', 'nparams': 0}, {'commandName': 'alarmOn', 'nparams': 0}, {'commandName': 'arm', 'nparams': 0}, {'commandName': 'disarm', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'off', 'nparams': 0}, {'commandName': 'on', 'nparams': 0}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'refreshAlarmDelay', 'nparams': 0}, {'commandName': 'refreshCurrentAlarmMode', 'nparams': 0}, {'commandName': 'refreshIntrusionDetected', 'nparams': 0}, {'commandName': 'setAlarmDelay', 'nparams': 1}, {'commandName': 'alarmPartial1', 'nparams': 0}, {'commandName': 'alarmPartial2', 'nparams': 0}, {'commandName': 'setIntrusionDetected', 'nparams': 1}, {'commandName': 'setTargetAlarmMode', 'nparams': 1}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'ContinuousState', 'qualifiedName': 'internal:AlarmDelayState'}, {'type': 'DiscreteState', 'values': ['off', 'partial1', 'partial2', 'total'], 'qualifiedName': 'internal:CurrentAlarmModeState'}, {'type': 'DiscreteState', 'values': ['detected', 'notDetected', 'pending', 'sos'], 'qualifiedName': 'internal:IntrusionDetectedState'}, {'type': 'DiscreteState', 'values': ['off', 'partial1', 'partial2', 'sos', 'total'], 'qualifiedName': 'internal:TargetAlarmModeState'}], 'dataProperties': [], 'widgetName': 'TSKAlarmController', 'uiProfiles': ['Alarm', 'Switchable'], 'uiClass': 'Alarm', 'qualifiedName': 'internal:TSKAlarmComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'internal:CurrentAlarmModeState', 'type': 3, 'value': 'off'}, {'name': 'internal:AlarmDelayState', 'type': 1, 'value': 30}, {'name': 'internal:TargetAlarmModeState', 'type': 3, 'value': 'off'}, {'name': 'internal:IntrusionDetectedState', 'type': 3, 'value': 'notDetected'}, {'name': 'core:NameState', 'type': 3, 'value': 'alarm name'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'TSKAlarmController', 'type': 1, 'oid': '11c4cc7c-5f36-4357-8eef-0cbd26cca2aa', 'uiClass': 'Alarm'}
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - get_devices: Device name: Aanraakgevoelige knop Device class: Pod
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1552229775000, 'lastUpdateTime': 1552229775000, 'label': 'Aanraakgevoelige knop', 'deviceURL': 'internal://0000-0000-0000/pod/0', 'shortcut': False, 'controllableName': 'internal:PodV2Component', 'metadata': '{"tahoma":{"touchButtonFlag":true}}', 'definition': {'commands': [{'commandName': 'getName', 'nparams': 0}, {'commandName': 'update', 'nparams': 0}, {'commandName': 'setCountryCode', 'nparams': 1}, {'commandName': 'activateCalendar', 'nparams': 0}, {'commandName': 'deactivateCalendar', 'nparams': 0}, {'commandName': 'refreshBatteryStatus', 'nparams': 0}, {'commandName': 'refreshPodMode', 'nparams': 0}, {'commandName': 'refreshUpdateStatus', 'nparams': 0}, {'commandName': 'setCalendar', 'nparams': 1}, {'commandName': 'setLightingLedPodMode', 'nparams': 1}, {'commandName': 'setPodLedOff', 'nparams': 0}, {'commandName': 'setPodLedOn', 'nparams': 0}], 'states': [{'type': 'DiscreteState', 'values': ['offline', 'online'], 'qualifiedName': 'core:ConnectivityState'}, {'type': 'DataState', 'qualifiedName': 'core:CountryCodeState'}, {'type': 'DiscreteState', 'values': ['pressed', 'stop'], 'qualifiedName': 'core:CyclicButtonState'}, {'type': 'DataState', 'qualifiedName': 'core:LocalIPv4AddressState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'ContinuousState', 'qualifiedName': 'internal:BatteryStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'internal:LightingLedPodModeState'}], 'dataProperties': [], 'widgetName': 'Pod', 'uiProfiles': ['UpdatableComponent'], 'uiClass': 'Pod', 'qualifiedName': 'internal:PodV2Component', 'type': 'ACTUATOR'}, 'states': [{'name': 'internal:BatteryStatusState', 'type': 3, 'value': 'no'}, {'name': 'core:CyclicButtonState', 'type': 3, 'value': 'stop'}, {'name': 'internal:LightingLedPodModeState', 'type': 2, 'value': 0.05}, {'name': 'core:CountryCodeState', 'type': 3, 'value': 'NL'}, {'name': 'core:LocalIPv4AddressState', 'type': 3, 'value': '192.168.60.216'}, {'name': 'core:NameState', 'type': 3, 'value': 'Box'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'Pod', 'type': 1, 'oid': 'd8787f98-e571-48c5-b8a5-f1693c7a3500', 'uiClass': 'Pod'}
2022-10-08 12:37:09,623 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter23 Device class: RollerShutter
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617117266000, 'lastUpdateTime': 1617117266000, 'label': 'Shutter23', 'deviceURL': 'io://0000-0000-0000/10013480', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter23'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'low'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 38.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': '285239cf-489a-4800-b2cb-959489522f27', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': 'fbada92a-e516-406c-81c5-9c6605d2c594', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter06 Device class: RollerShutter
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1625056291000, 'lastUpdateTime': 1625056291000, 'label': 'Shutter06', 'deviceURL': 'io://0000-0000-0000/10769361', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter06'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 46.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': '62e661ca-b165-4610-9451-ac82ee200087', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '21312b80-2b53-4b32-972a-b358638428f5', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Sunis2 Device class: LightSensor
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1662471075000, 'lastUpdateTime': 1662471075000, 'label': 'Sunis2', 'deviceURL': 'io://0000-0000-0000/11521034', 'shortcut': False, 'controllableName': 'io:LightIOSystemSensor', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:LuminanceState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'DiscreteState', 'values': ['dead', 'lowBattery', 'maintenanceRequired', 'noDefect'], 'qualifiedName': 'core:SensorDefectState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}], 'dataProperties': [{'value': {'activationDelayMap': {'middle': 0, 'lower': 1200, 'upper': 300}, 'referenceStates': ['middle', 'lower', 'upper'], 'qualifiedName': 'io:SunSensorHysteresisBehavior'}, 'qualifiedName': 'core:timeBasedHysteresisBehavior'}], 'widgetName': 'LuminanceSensor', 'uiProfiles': ['Specific'], 'uiClass': 'LightSensor', 'qualifiedName': 'io:LightIOSystemSensor', 'type': 'SENSOR'}, 'states': [{'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 46.0}, {'name': 'core:LuminanceState', 'type': 2, 'value': 80870.0}], 'attributes': [{'name': 'core:MinSensedValue', 'type': 1, 'value': 50}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5126936A15'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:MaxSensedValue', 'type': 1, 'value': 100000}, {'name': 'core:MeasuredValueType', 'type': 3, 'value': 'core:LuminanceInLux'}, {'name': 'core:PowerSourceType', 'type': 3, 'value': 'battery'}], 'available': True, 'enabled': True, 'placeOID': '1f25e4fc-8c03-462e-9ef0-a2216b3cfd47', 'widget': 'LuminanceSensor', 'type': 2, 'oid': 'ff91dd0b-25e6-44bb-93ee-66190f36ad0e', 'uiClass': 'LightSensor'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter02 Device class: RollerShutter
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617117816000, 'lastUpdateTime': 1617117816000, 'label': 'Shutter02', 'deviceURL': 'io://0000-0000-0000/11842901', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter02'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 62.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '8be3f59d-8cca-488b-b8d4-46b58bb13ef5', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter05 Device class: RollerShutter
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1625056107000, 'lastUpdateTime': 1625056107000, 'label': 'Shutter05', 'deviceURL': 'io://0000-0000-0000/14287010', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter05'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 60.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 2}, {'name': 'core:ClosureState', 'type': 1, 'value': 2}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}], 'available': True, 'enabled': True, 'placeOID': '62e661ca-b165-4610-9451-ac82ee200087', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '041dd39d-dfd6-47eb-b47b-4406626ed48b', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter03 Device class: RollerShutter
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617117599000, 'lastUpdateTime': 1617117599000, 'label': 'Shutter03', 'deviceURL': 'io://0000-0000-0000/14430251', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter03'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 64.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '936dbc0b-e064-4964-babc-976a1040a699', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: IO (14725444) Device class: ProtocolGateway
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1600767629000, 'lastUpdateTime': 1600767629000, 'label': 'IO (14725444)', 'deviceURL': 'io://0000-0000-0000/14725444', 'shortcut': False, 'controllableName': 'io:StackComponent', 'definition': {'commands': [{'commandName': 'advancedSomfyDiscover', 'nparams': 1}, {'commandName': 'discover1WayController', 'nparams': 2}, {'commandName': 'discoverActuators', 'nparams': 1}, {'commandName': 'discoverSensors', 'nparams': 1}, {'commandName': 'discoverSomfyUnsetActuators', 'nparams': 0}, {'commandName': 'joinNetwork', 'nparams': 0}, {'commandName': 'resetNetworkSecurity', 'nparams': 0}, {'commandName': 'shareNetwork', 'nparams': 0}], 'states': [], 'dataProperties': [], 'widgetName': 'IOStack', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'io:StackComponent', 'type': 'PROTOCOL_GATEWAY'}, 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'IOStack', 'type': 5, 'oid': '525d8667-4363-453c-b16f-e3a0b190bdee', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter22 Device class: RollerShutter
2022-10-08 12:37:09,624 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617116909000, 'lastUpdateTime': 1617116909000, 'label': 'Shutter22', 'deviceURL': 'io://0000-0000-0000/14989345', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter22'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'good'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 90.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': '4c6b2fa4-1bb3-4a25-8f97-e75b01623c95', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '60ef1012-5387-4e9b-8d3a-c05b278aebd6', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,624 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter01 Device class: RollerShutter
2022-10-08 12:37:09,625 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617116519000, 'lastUpdateTime': 1617116519000, 'label': 'Shutter01', 'deviceURL': 'io://0000-0000-0000/1541661', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter01'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'good'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 100.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '3ecb1325-5af4-48f3-a9ca-45a9060d4077', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter24 Device class: RollerShutter
2022-10-08 12:37:09,625 - INFO     - tahoma.py          - supported device found: {'creationTime': 1625056462000, 'lastUpdateTime': 1625056462000, 'label': 'Shutter24', 'deviceURL': 'io://0000-0000-0000/16144514', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter24'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 66.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}], 'available': True, 'enabled': True, 'placeOID': '285239cf-489a-4800-b2cb-959489522f27', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': 'b96c5ff1-37f5-4892-b592-539cc182a963', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter04 Device class: RollerShutter
2022-10-08 12:37:09,625 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617118105000, 'lastUpdateTime': 1617118105000, 'label': 'Shutter04', 'deviceURL': 'io://0000-0000-0000/16608528', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter04'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 76.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 3}, {'name': 'core:ClosureState', 'type': 1, 'value': 3}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 85}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5117737A06'}], 'available': True, 'enabled': True, 'placeOID': 'ad4ec6b9-9b44-4f55-acc0-3bedcfe86cf3', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '8630bf34-65cd-4d95-b52e-21c8af7523e0', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: Sunis1 Device class: LightSensor
2022-10-08 12:37:09,625 - INFO     - tahoma.py          - supported device found: {'creationTime': 1569317150000, 'lastUpdateTime': 1569317150000, 'label': 'Sunis1', 'deviceURL': 'io://0000-0000-0000/2711689', 'shortcut': False, 'controllableName': 'io:LightIOSystemSensor', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:LuminanceState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'DiscreteState', 'values': ['dead', 'lowBattery', 'maintenanceRequired', 'noDefect'], 'qualifiedName': 'core:SensorDefectState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}], 'dataProperties': [{'value': {'activationDelayMap': {'middle': 0, 'lower': 1200, 'upper': 300}, 'referenceStates': ['middle', 'lower', 'upper'], 'qualifiedName': 'io:SunSensorHysteresisBehavior'}, 'qualifiedName': 'core:timeBasedHysteresisBehavior'}], 'widgetName': 'LuminanceSensor', 'uiProfiles': ['Specific'], 'uiClass': 'LightSensor', 'qualifiedName': 'io:LightIOSystemSensor', 'type': 'SENSOR'}, 'states': [{'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'low'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 36.0}, {'name': 'core:LuminanceState', 'type': 2, 'value': 9377.0}], 'attributes': [{'name': 'core:MeasuredValueType', 'type': 3, 'value': 'core:LuminanceInLux'}, {'name': 'core:MaxSensedValue', 'type': 1, 'value': 100000}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:MinSensedValue', 'type': 1, 'value': 50}, {'name': 'core:PowerSourceType', 'type': 3, 'value': 'battery'}], 'available': True, 'enabled': True, 'placeOID': '1f25e4fc-8c03-462e-9ef0-a2216b3cfd47', 'widget': 'LuminanceSensor', 'type': 2, 'oid': 'f94096dd-057e-4287-ac7d-cfebaddcae3f', 'uiClass': 'LightSensor'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter21 Device class: RollerShutter
2022-10-08 12:37:09,625 - INFO     - tahoma.py          - supported device found: {'creationTime': 1617116704000, 'lastUpdateTime': 1617116704000, 'label': 'Shutter21', 'deviceURL': 'io://0000-0000-0000/6252441', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter21'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'good'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 82.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}], 'available': True, 'enabled': True, 'placeOID': '4c6b2fa4-1bb3-4a25-8f97-e75b01623c95', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '45ec1767-2218-4f93-b76b-b398c607d960', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: Shutter25 Device class: RollerShutter
2022-10-08 12:37:09,625 - INFO     - tahoma.py          - supported device found: {'creationTime': 1625056580000, 'lastUpdateTime': 1625056580000, 'label': 'Shutter25', 'deviceURL': 'io://0000-0000-0000/7258281', 'shortcut': False, 'controllableName': 'io:RollerShutterGenericIOComponent', 'definition': {'commands': [{'commandName': 'advancedRefresh', 'nparams': 2}, {'commandName': 'close', 'nparams': 0}, {'commandName': 'delayedStopIdentify', 'nparams': 1}, {'commandName': 'down', 'nparams': 0}, {'commandName': 'getName', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'my', 'nparams': 0}, {'commandName': 'open', 'nparams': 0}, {'commandName': 'refreshMemorized1Position', 'nparams': 0}, {'commandName': 'setClosure', 'nparams': 1}, {'commandName': 'setDeployment', 'nparams': 1}, {'commandName': 'setMemorized1Position', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}, {'commandName': 'setPosition', 'nparams': 1}, {'commandName': 'setSecuredPosition', 'nparams': 1}, {'commandName': 'startIdentify', 'nparams': 0}, {'commandName': 'stop', 'nparams': 0}, {'commandName': 'stopIdentify', 'nparams': 0}, {'commandName': 'up', 'nparams': 0}, {'commandName': 'wink', 'nparams': 1}, {'commandName': 'runManufacturerSettingsCommand', 'nparams': 2}, {'commandName': 'keepOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'pairOneWayController', 'nparams': 2}, {'commandName': 'sendIOKey', 'nparams': 0}, {'commandName': 'setConfigState', 'nparams': 1}, {'commandName': 'unpairAllOneWayControllersAndDeleteNode', 'nparams': 0}, {'commandName': 'unpairAllOneWayControllers', 'nparams': 0}, {'commandName': 'unpairOneWayController', 'nparams': 2}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:AdditionalStatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:ClosureState'}, {'type': 'DiscreteState', 'values': ['good', 'low', 'normal', 'verylow'], 'qualifiedName': 'core:DiscreteRSSILevelState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerDiagnosticsState'}, {'type': 'DataState', 'qualifiedName': 'core:ManufacturerSettingsState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:Memorized1PositionState'}, {'type': 'DiscreteState', 'values': ['false', 'true'], 'qualifiedName': 'core:MovingState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DiscreteState', 'values': ['closed', 'open'], 'qualifiedName': 'core:OpenClosedState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:PriorityLockTimerState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:RSSILevelState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:SecuredPositionState'}, {'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:StatusState'}, {'type': 'ContinuousState', 'qualifiedName': 'core:TargetClosureState'}, {'type': 'DiscreteState', 'values': ['comfortLevel1', 'comfortLevel2', 'comfortLevel3', 'comfortLevel4', 'environmentProtection', 'humanProtection', 'userLevel1', 'userLevel2'], 'qualifiedName': 'io:PriorityLockLevelState'}, {'type': 'DiscreteState', 'values': ['LSC', 'SAAC', 'SFC', 'UPS', 'externalGateway', 'localUser', 'myself', 'rain', 'security', 'temperature', 'timer', 'user', 'wind'], 'qualifiedName': 'io:PriorityLockOriginatorState'}], 'dataProperties': [{'value': '500', 'qualifiedName': 'core:identifyInterval'}], 'widgetName': 'PositionableRollerShutter', 'uiProfiles': ['StatefulCloseableShutter', 'StatefulCloseable', 'Closeable', 'StatefulOpenClose', 'OpenClose'], 'uiClass': 'RollerShutter', 'qualifiedName': 'io:RollerShutterGenericIOComponent', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'Shutter25'}, {'name': 'core:PriorityLockTimerState', 'type': 1, 'value': 0}, {'name': 'core:StatusState', 'type': 3, 'value': 'available'}, {'name': 'core:DiscreteRSSILevelState', 'type': 3, 'value': 'normal'}, {'name': 'core:RSSILevelState', 'type': 2, 'value': 60.0}, {'name': 'core:TargetClosureState', 'type': 1, 'value': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': 0}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': False}, {'name': 'core:Memorized1PositionState', 'type': 1, 'value': 86}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Somfy'}, {'name': 'core:SupportedManufacturerSettingsCommands', 'type': 10, 'value': ['dead_man_up', 'dead_man_down', 'dead_man_stop', 'dead_man_impulse_up', 'dead_man_impulse_down', 'enter_settings_mode', 'save_upper_end_limit', 'save_lower_end_limit', 'stop_after_save_limit', 'save_settings', 'invert_rotation', 'save_my_position', 'delete_my_position', 'reset_actuator', 'double_power_cut', 'eject_from_setting_mode']}, {'name': 'core:FirmwareRevision', 'type': 3, 'value': '5100394X23'}], 'available': True, 'enabled': True, 'placeOID': 'e827f6f6-4463-4284-aa07-51f72978ebfd', 'widget': 'PositionableRollerShutter', 'type': 1, 'oid': '6029396e-e26a-4b6b-a045-f6a956e36e0e', 'uiClass': 'RollerShutter'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: OGP (00000BE8) Device class: ProtocolGateway
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1596877910000, 'lastUpdateTime': 1596877910000, 'label': 'OGP (00000BE8)', 'deviceURL': 'ogp://0000-0000-0000/00000BE8', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'sendPrivate', 'nparams': 1}], 'states': [{'type': 'DataState', 'qualifiedName': 'core:Private10State'}, {'type': 'DataState', 'qualifiedName': 'core:Private1State'}, {'type': 'DataState', 'qualifiedName': 'core:Private2State'}, {'type': 'DataState', 'qualifiedName': 'core:Private3State'}, {'type': 'DataState', 'qualifiedName': 'core:Private4State'}, {'type': 'DataState', 'qualifiedName': 'core:Private5State'}, {'type': 'DataState', 'qualifiedName': 'core:Private6State'}, {'type': 'DataState', 'qualifiedName': 'core:Private7State'}, {'type': 'DataState', 'qualifiedName': 'core:Private8State'}, {'type': 'DataState', 'qualifiedName': 'core:Private9State'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'attributes': [{'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'private'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': '7f1b7c75-c063-43a4-b982-f4372cd7b2da', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: OGP Sonos Bridge Device class: ProtocolGateway
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1648202676000, 'lastUpdateTime': 1648202676000, 'label': 'OGP Sonos Bridge', 'deviceURL': 'ogp://0000-0000-0000/0003FEF3', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'discover', 'nparams': 0}, {'commandName': 'reset', 'nparams': 0}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP Sonos Bridge'}], 'attributes': [{'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}, {'name': 'core:Technology', 'type': 3, 'value': 'Sonos'}, {'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP Sonos Bridge'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'identification', 'commandLess': True}, {'name': 'discovery'}, {'name': 'reset'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': '89f569f6-3723-4884-a61f-2e015b6f553f', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: OGP IBPlus Bridge Device class: ProtocolGateway
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1648202675000, 'lastUpdateTime': 1648202675000, 'label': 'OGP IBPlus Bridge', 'deviceURL': 'ogp://0000-0000-0000/00920C53', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'identify', 'nparams': 0}, {'commandName': 'sendPrivate', 'nparams': 1}, {'commandName': 'setName', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:Private10State'}, {'type': 'DataState', 'qualifiedName': 'core:Private1State'}, {'type': 'DataState', 'qualifiedName': 'core:Private2State'}, {'type': 'DataState', 'qualifiedName': 'core:Private3State'}, {'type': 'DataState', 'qualifiedName': 'core:Private4State'}, {'type': 'DataState', 'qualifiedName': 'core:Private5State'}, {'type': 'DataState', 'qualifiedName': 'core:Private6State'}, {'type': 'DataState', 'qualifiedName': 'core:Private7State'}, {'type': 'DataState', 'qualifiedName': 'core:Private8State'}, {'type': 'DataState', 'qualifiedName': 'core:Private9State'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP IBPlus Bridge'}], 'attributes': [{'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP IBPlus Bridge'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'identification'}, {'name': 'private'}]}, {'name': 'core:Technology', 'type': 3, 'value': 'IBPlus'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': 'ed675587-0fbe-45ac-9f71-e320d0cc27c1', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,625 - DEBUG    - tahoma.py          - get_devices: Device name: OGP Siegenia Bridge Device class: ProtocolGateway
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1596877910000, 'lastUpdateTime': 1596877910000, 'label': 'OGP Siegenia Bridge', 'deviceURL': 'ogp://0000-0000-0000/039575E9', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'discover', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'setName', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP Siegenia Bridge'}], 'attributes': [{'name': 'core:Technology', 'type': 3, 'value': 'Siegenia'}, {'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP Siegenia Bridge'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'discovery'}, {'name': 'identification'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': '54b2c7c5-7d8a-4b9e-a199-b244975f02ad', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: Device name: OGP Intesis Bridge Device class: ProtocolGateway
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - unsupported device found: {'creationTime': 1596877910000, 'lastUpdateTime': 1596877910000, 'label': 'OGP Intesis Bridge', 'deviceURL': 'ogp://0000-0000-0000/09E45393', 'shortcut': False, 'controllableName': 'ogp:Bridge', 'definition': {'commands': [{'commandName': 'discover', 'nparams': 0}, {'commandName': 'identify', 'nparams': 0}, {'commandName': 'setName', 'nparams': 1}], 'states': [{'type': 'DiscreteState', 'values': ['available', 'unavailable'], 'qualifiedName': 'core:AvailabilityState'}, {'type': 'DataState', 'qualifiedName': 'core:NameState'}, {'type': 'DataState', 'qualifiedName': 'core:RemovableState'}], 'dataProperties': [], 'widgetName': 'DynamicBridge', 'uiProfiles': ['Specific'], 'uiClass': 'ProtocolGateway', 'qualifiedName': 'ogp:Bridge', 'type': 'ACTUATOR'}, 'states': [{'name': 'core:NameState', 'type': 3, 'value': 'OGP Intesis Bridge'}], 'attributes': [{'name': 'core:ManufacturerReference', 'type': 3, 'value': 'OGP Intesis Bridge'}, {'name': 'core:Technology', 'type': 3, 'value': 'Intesis'}, {'name': 'core:Manufacturer', 'type': 3, 'value': 'Overkiz'}, {'name': 'ogp:Features', 'type': 10, 'value': [{'name': 'discovery'}, {'name': 'identification'}]}], 'available': True, 'enabled': True, 'placeOID': 'd33923b5-2ee0-4871-9207-594731f27983', 'widget': 'DynamicBridge', 'type': 1, 'oid': 'ca77d2ea-f865-404a-bd92-aafc87427b33', 'uiClass': 'ProtocolGateway'}
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: devices found, domoticz: 13 API: 13, self.startup: True
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - New device(s) detected
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter23
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter23, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter06
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter06, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Sunis2
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Sunis2, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter02
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter02, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter05
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter05, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter03
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter03, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter22
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter22, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter01
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter01, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter24
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter24, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter04
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter04, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Sunis1
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Sunis1, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter21
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter21, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - check if need to create device: Shutter25
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - get_devices: step 2, do not create new device: Shutter25, device already exists
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - finished get devices
2022-10-08 12:37:09,626 - DEBUG    - tahoma.py          - start get events
2022-10-08 12:37:09,627 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:37:09,664 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/b72b9215-ac10-3e01-6399-5f11e73067c8/fetch HTTP/1.1" 200 None
2022-10-08 12:37:09,665 - DEBUG    - tahoma.py          - get events response: status '200' response body: '<Response [200]>'
2022-10-08 12:37:09,665 - DEBUG    - tahoma.py          - get_events: no DeviceStateChangedEvent found in response: []
2022-10-08 12:37:18,079 - DEBUG    - plugin.py          - Polling unit in 5 heartbeats.
2022-10-08 12:37:28,096 - DEBUG    - plugin.py          - Polling unit in 4 heartbeats.
2022-10-08 12:37:36,512 - DEBUG    - plugin.py          - onCommand: DeviceId: 'io://0000-0000-0000/16608528' Unit: '1', Command: 'Set Level', Level: '5', Hue: ''
2022-10-08 12:37:36,512 - DEBUG    - plugin.py          - preparing command: # commands: 2
2022-10-08 12:37:36,512 - DEBUG    - plugin.py          - preparing command: # actions_serialized: 1
2022-10-08 12:37:36,513 - DEBUG    - plugin.py          - preparing command: json data: {"actions": [{"commands": [{"name": "setClosure", "parameters": [5]}], "deviceURL": "io://0000-0000-0000/16608528"}], "label": "Domoticz - Shutter04 - setClosure"}
2022-10-08 12:37:36,513 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-10-08 12:37:36,513 - DEBUG    - tahoma.py          - start command
2022-10-08 12:37:36,513 - DEBUG    - tahoma.py          - onCommand: headers: '{'Host': 'tahomalink.com', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=CD25F6B56EE9CC9D92A325D7F3AF680B; Path=/enduser-mobile-web; Secure; HttpOnly; SameSite=None'}', data '{"actions": [{"commands": [{"name": "setClosure", "parameters": [5]}], "deviceURL": "io://0000-0000-0000/16608528"}], "label": "Domoticz - Shutter04 - setClosure"}'
2022-10-08 12:37:36,513 - INFO     - tahoma.py          - Sending command to tahoma api
2022-10-08 12:37:36,514 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:37:36,555 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/exec/apply HTTP/1.1" 200 None
2022-10-08 12:37:36,557 - DEBUG    - tahoma.py          - command response: status '200' response body: '{'execId': 'b72bfba6-ac10-3e01-6399-5f11bac0bfc0'}'
2022-10-08 12:37:36,557 - DEBUG    - tahoma.py          - start get events
2022-10-08 12:37:36,558 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:37:36,607 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/b72b9215-ac10-3e01-6399-5f11e73067c8/fetch HTTP/1.1" 200 None
2022-10-08 12:37:36,608 - DEBUG    - tahoma.py          - get events response: status '200' response body: '<Response [200]>'
2022-10-08 12:37:36,608 - DEBUG    - tahoma.py          - get_events: no DeviceStateChangedEvent found in response: [{'timestamp': 1665225456554, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'execId': 'b72bfba6-ac10-3e01-6399-5f11bac0bfc0', 'label': 'Domoticz - Shutter04 - setClosure', 'metadata': '', 'type': 1, 'subType': 1, 'actions': [{'deviceURL': 'io://0000-0000-0000/16608528', 'commands': [{'name': 'setClosure', 'parameters': [{'type': 1, 'value': '5'}]}]}], 'source': 'mobile:tool', 'owner': '[email protected]', 'name': 'ExecutionRegisteredEvent'}, {'timestamp': 1665225456554, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'execId': 'b72bfba6-ac10-3e01-6399-5f11bac0bfc0', 'newState': 'NOT_TRANSMITTED', 'ownerKey': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'type': 1, 'subType': 1, 'oldState': 'INITIALIZED', 'timeToNextState': 0, 'name': 'ExecutionStateChangedEvent'}, {'timestamp': 1665225456554, 'gatewayId': '0000-0000-0000', 'name': 'GatewaySynchronizationStartedEvent'}, {'timestamp': 1665225456555, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'execId': 'b72bfba6-ac10-3e01-6399-5f11bac0bfc0', 'newState': 'TRANSMITTED', 'ownerKey': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'type': 1, 'subType': 1, 'oldState': 'NOT_TRANSMITTED', 'timeToNextState': 0, 'name': 'ExecutionStateChangedEvent'}, {'timestamp': 1665225456555, 'gatewayId': '0000-0000-0000', 'name': 'GatewaySynchronizationEndedEvent'}]
2022-10-08 12:37:38,061 - DEBUG    - plugin.py          - Polling unit in 3 heartbeats.
2022-10-08 12:37:40,164 - DEBUG    - plugin.py          - onCommand: DeviceId: 'io://0000-0000-0000/16608528' Unit: '1', Command: 'Close', Level: '100', Hue: ''
2022-10-08 12:37:40,164 - DEBUG    - plugin.py          - preparing command: # commands: 0
2022-10-08 12:37:40,164 - DEBUG    - plugin.py          - preparing command: # actions_serialized: 1
2022-10-08 12:37:48,078 - DEBUG    - plugin.py          - Polling unit in 2 heartbeats.
2022-10-08 12:37:58,094 - DEBUG    - plugin.py          - Polling unit in 1 heartbeats.
2022-10-08 12:38:08,061 - DEBUG    - plugin.py          - Poll unit
2022-10-08 12:38:08,061 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-10-08 12:38:08,061 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-10-08 12:38:08,061 - DEBUG    - tahoma.py          - start get events
2022-10-08 12:38:08,062 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-10-08 12:38:08,116 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/b72b9215-ac10-3e01-6399-5f11e73067c8/fetch HTTP/1.1" 200 None
2022-10-08 12:38:08,117 - DEBUG    - tahoma.py          - get events response: status '200' response body: '<Response [200]>'
2022-10-08 12:38:08,117 - DEBUG    - tahoma.py          - get_events: add event: URL: 'io://0000-0000-0000/11521034' num states: '1'
2022-10-08 12:38:08,117 - DEBUG    - tahoma.py          - get_events: add event: URL: 'io://0000-0000-0000/16608528' num states: '8'
2022-10-08 12:38:08,117 - DEBUG    - plugin.py          - updating device status self.tahoma.startup = False on num datasets: 2
2022-10-08 12:38:08,117 - DEBUG    - plugin.py          - updating device status on data: [{'timestamp': 1665225456743, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'deviceURL': 'io://0000-0000-0000/11521034', 'deviceStates': [{'name': 'core:LuminanceState', 'type': 2, 'value': '90450.0'}], 'name': 'DeviceStateChangedEvent'}, {'timestamp': 1665225457268, 'setupOID': '3cb5d24a-65df-4573-a86f-89ae87e5fc37', 'deviceURL': 'io://0000-0000-0000/16608528', 'deviceStates': [{'name': 'core:TargetClosureState', 'type': 1, 'value': '5'}, {'name': 'core:MovingState', 'type': 6, 'value': 'true'}, {'name': 'core:ManufacturerSettingsState', 'type': 0}, {'name': 'core:ClosureState', 'type': 1, 'value': '5'}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:ClosureState', 'type': 1, 'value': '5'}, {'name': 'core:OpenClosedState', 'type': 3, 'value': 'open'}, {'name': 'core:MovingState', 'type': 6, 'value': 'false'}], 'name': 'DeviceStateChangedEvent'}]
2022-10-08 12:38:08,117 - DEBUG    - plugin.py          - checking dataset for URL: io://0000-0000-0000/11521034
2022-10-08 12:38:08,118 - INFO     - plugin.py          - Updating device: Sunis2
2022-10-08 12:38:08,119 - DEBUG    - plugin.py          - checking dataset for URL: io://0000-0000-0000/16608528
2022-10-08 12:38:08,119 - INFO     - plugin.py          - Updating device:Shutter04
2022-10-08 12:38:18,086 - DEBUG    - plugin.py          - Polling unit in 5 heartbeats.

No internet acces : many error lines in log

Hello,

When the internet connection is down we have many line in error log.
I have every day one reset of my internet connexion (poor ADSL with ~4mb but linked with LTE) and 2 minutes of down.

It's possible to use one 'timemout' before to avoid theses errors ?
It is my last error with your plugin and Connexoon due to your beautifull recents corrections :)

Thanks,

Jean-Charles

Domoticz log :

2023-01-10 00:01:48.818 Error: Météo: Error connecting to Server...
2023-01-10 00:01:49.899 Error: Météo: Error connecting to Server...
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 169, in _new_conn
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: conn = connection.create_connection(
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 73, in create_connection
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: socket.gaierror: [Errno -3] Temporary failure in name resolution
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: During handling of the above exception, another exception occurred:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: httplib_response = self._make_request(
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 382, in _make_request
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: self._validate_conn(conn)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1012, in _validate_conn
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: conn.connect()
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 353, in connect
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: conn = self._new_conn()
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 181, in _new_conn
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: raise NewConnectionError(
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7f2b88578970>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: During handling of the above exception, another exception occurred:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: resp = conn.urlopen(
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: retries = retries.increment(
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 574, in increment
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: raise MaxRetryError(_pool, url, error or ResponseError(cause))
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='tahomalink.com', port=443): Max retries exceeded with url: /enduser-mobile-web/enduserAPI/authenticated (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f2b88578970>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: During handling of the above exception, another exception occurred:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux:
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: Traceback (most recent call last):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/plugin.py", line 597, in onHeartbeat
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: _plugin.onHeartbeat()
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/plugin.py", line 302, in onHeartbeat
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: if self.local or (self.tahoma.logged_in and not self.tahoma.startup):
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/tahoma.py", line 48, in logged_in
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: self.__logged_in = self.get_login()
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/home/jcb/domoticz/plugins/somfy/tahoma.py", line 55, in get_login
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: response = requests.get(url, headers=Headers, timeout=self.timeout)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/api.py", line 76, in get
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: return request('get', url, params=params, **kwargs)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/api.py", line 61, in request
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: return session.request(method=method, url=url, **kwargs)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 542, in request
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: resp = self.send(prep, **send_kwargs)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 655, in send
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: r = adapter.send(request, **kwargs)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 516, in send
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: raise ConnectionError(e, request=request)
2023-01-10 00:01:50.611 Error: Connexoon Somfy Vélux: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='tahomalink.com', port=443): Max retries exceeded with url: /enduser-mobile-web/enduserAPI/authenticated (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f2b88578970>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))```

Connexoon blinds do not update themselves

I've got several blinds connected to the connexoon (so web API) in version 4.1.8

(i've updated from version 2.0.8 to 4.1.8 today by removing all devices, deleting somfy device, git pull, restarted domoticz and creating new devices as written in README)

When controlled by Domoticz, all commands works (open, close, set percentage).
But there is no return of the states.

When waiting for the update i've got (for example) :
2022-11-20 10:38:14,090 - DEBUG - plugin.py - Polling unit in 3 heartbeats.
2022-11-20 10:38:15,093 - DEBUG - plugin.py - Polling unit in 2 heartbeats.
2022-11-20 10:38:16,096 - DEBUG - plugin.py - Polling unit in 1 heartbeats.
2022-11-20 10:38:17,051 - DEBUG - plugin.py - Poll unit
2022-11-20 10:38:17,052 - DEBUG - tahoma.py - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-11-20 10:38:17,053 - DEBUG - tahoma.py - checking logged in status: self.__logged_in = True and self.__expiry_date >= datetime.datetime.now() = True
2022-11-20 10:38:17,053 - DEBUG - tahoma.py - start get events
2022-11-20 10:38:17,054 - DEBUG - listener.py - listener vald: self.__listener_expiry = 2022-11-20 11:06:10 self.__valid = True
2022-11-20 10:38:17,065 - DEBUG - connectionpool.py - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-20 10:38:17,227 - DEBUG - connectionpool.py - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/94653029-ac10-3e01-11e7-b11abef1efdb/fetch HTTP/1.1" 401 66
2022-11-20 10:38:17,235 - DEBUG - tahoma.py - get events response: status '401' response body: '<Response [401]>'
2022-11-20 10:38:17,240 - ERROR - tahoma.py - error during get events, status: 401, {"errorCode":"RESOURCE_ACCESS_DENIED","error":"Not authenticated"}
2022-11-20 10:38:18,093 - DEBUG - plugin.py - Polling unit in 299 heartbeats.
And so on.
Polling is done by default every 5 minutes.

Domoticz Version: 2022.2
Build Hash: eea9db734
Compile Date: 2022-11-05 13:05:35
dzVents Version: 3.1.8
Python Version: 3.7.3 (default, Oct 31 2022, 14:04:00) [GCC 8.3.0]

No more MQTT output from domoticz

Hi!

It seems there is no more MQTT output with the latest version of the plugin.
Don't know if there's something i can check to help out?

open/close reversed.

Can you change back this?

        if Unit == 1:
            # unit 1 used for up/down movement
            if (str(Command) == "Off" or str(Command) == "Close"):
                commands["name"] = "open"
            elif (str(Command) == "On" or str(Command) == "Open"):
                commands["name"] = "close"

Domoticz is handing another behavior then Somfy.

I had everything finaly working perfect till this plugin update.

Adding new features for venetion blinds

Currently only 1 action per Somfy device is supported (typically up/down). For the Venitian Blinds I'd like to add the open/close (or tilt?) feature. For this I need to upgrade the plugin to the extended plugin to be able to connect multiple Domoticz widgets to 1 Somfy device.

hardware (38) thread seems to have ended unexpectedly

Sorry, me again doing some too thorough testing ;)
Domoticz log says:
somfy.log

2023-03-02 16:02:52.210 Error: Somfy zonneschermen hardware (38) thread seems to have ended unexpectedly

This seems to have been caused with an external trigger through MQTT.
Mqtt message was something like:
msg1.payload = { "command": "switchlight", "idx": 492, "switchcmd": "Off" };

however, the somfy log is rather clean

Nothing useful in the domoticz.log either:

2023-03-02 16:02:48.102  Slimme Meter: Usage (Usage L3)
2023-03-02 16:02:48.114  Slimme Meter: Usage (Delivery L1)
2023-03-02 16:02:48.124  Slimme Meter: Usage (Delivery L2)
2023-03-02 16:02:48.138  Slimme Meter: Usage (Delivery L3)
2023-03-02 16:02:48.145  Slimme Meter: Current (Current L1/L2/L3)
2023-03-02 16:02:48.153  Slimme Meter: Current (Delivery Current L1/L2/L3)
2023-03-02 16:02:49.061  Heishamon: Heartbeating...
2023-03-02 16:02:49.061  Heishamon: MqttClient::ping
2023-03-02 16:02:49.471  SolarEdge Inverter: Updated 14 values out of 22
2023-03-02 16:02:52.210  Error: Somfy zonneschermen hardware (38) thread seems to have ended unexpectedly
2023-03-02 16:02:54.415  SolarEdge Inverter: Updated 14 values out of 22
2023-03-02 16:02:54.985  InfluxLink: value Temperature,idx=295,name=Heishamon---Main_Inlet_Temp value=10.25
2023-03-02 16:02:59.105  Heishamon: Heartbeating...
2023-03-02 16:02:59.105  Heishamon: MqttClient::ping
2023-03-02 16:02:59.487  SolarEdge Inverter: Updated 13 values out of 22
2023-03-02 16:03:00.177  Airco: Update unit Airco 2e verdieping information.
2023-03-02 16:03:00.309  Airco: Update unit Airco Slaapkamer information.

Updated beta plugin 4.2.20 is not working

Describe the bug
To solve issue #56 the plugin has been updated, but the plugin is not starting. The master version is starting, the beta version not. There are some problems with the modified files utils.py and plugin.py. There are missing tab or spaces.

In Utils.py lines 61 to 77 has to be modified from:

def filter_states(Data):
"""filters relevant state data from a device setup API reply"""
logging.debug("start filter states")
filtered_states = list()
deviceURL = ""
deviceClass = ""

for device in Data:
stateList = list()
deviceURL = device["deviceURL"]
deviceClass = device["definition"]["uiClass"]
if not "states" in device:
continue
for state in device["states"]:
if state["name"] in stateSet:
stateList.append(state)
if len(stateList)>0:
stateToAdd = {"deviceURL":deviceURL,
"deviceStates":stateList,
"deviceClass":deviceClass,
"name":"DeviceState"}
filtered_states.append(stateToAdd)
logging.debug("Device state: "+str(filtered_states))
return filtered_states

Change the file into:

def filter_states(Data):
"""filters relevant state data from a device setup API reply"""
logging.debug("start filter states")
filtered_states = list()
deviceURL = ""
deviceClass = ""

for device in Data:
    stateList = list()
    deviceURL = device["deviceURL"]
    deviceClass = device["definition"]["uiClass"]
    if not "states" in device:
        continue
    for state in device["states"]:
        if state["name"] in stateSet:
            stateList.append(state)
    if len(stateList)>0:
        stateToAdd = {"deviceURL":deviceURL, 
            "deviceStates":stateList,
            "deviceClass":deviceClass,
            "name":"DeviceState"}
        filtered_states.append(stateToAdd)
    logging.debug("Device state: "+str(filtered_states))
return filtered_states

File plugin.py modify lines 363 and 381 to 386 (showing 361 to 387):

        if (dataset["deviceURL"].startswith("io://")):
            dev = dataset["deviceURL"]
	deviceClassTrig = dataset["deviceClass"] 
            level = 0
            status_num = 0
            status = None
            nValue = 0
            sValue = "0"

            states = dataset["deviceStates"]
            if not (dataset["name"] == "DeviceStateChangedEvent" or dataset["name"] == "DeviceState"):
                logging.debug("update_devices_status: dataset['name'] != DeviceStateChangedEvent: "+str(dataset["name"])+": breaking out")
                continue #dataset does not contain correct event, skip to next dataset

            for state in states:
                status_num = 0
                lumstatus_l = False

                if ((state["name"] == "core:ClosureState") or (state["name"] == "core:DeploymentState")):
                    if (deviceClassTrig == "Awning"):
                    level = int(state["value"]) #Don't invert open/close percentage for an Awning
                    status_num = 1
                else:
                    level = int(state["value"])
                    level = 100 - level #invert open/close percentage
                    status_num = 1

Modify the lines 361 and 381 to 386 (showing 361 to 387) in:

        if (dataset["deviceURL"].startswith("io://")):
            dev = dataset["deviceURL"]
            deviceClassTrig = dataset["deviceClass"] 
            level = 0
            status_num = 0
            status = None
            nValue = 0
            sValue = "0"

            states = dataset["deviceStates"]
            if not (dataset["name"] == "DeviceStateChangedEvent" or dataset["name"] == "DeviceState"):
                logging.debug("update_devices_status: dataset['name'] != DeviceStateChangedEvent: "+str(dataset["name"])+": breaking out")
                continue #dataset does not contain correct event, skip to next dataset

            for state in states:
                status_num = 0
                lumstatus_l = False

                if ((state["name"] == "core:ClosureState") or (state["name"] == "core:DeploymentState")):
                    if (deviceClassTrig == "Awning"):
                        level = int(state["value"]) #Don't invert open/close percentage for an Awning
                        status_num = 1
                    else:
                        level = int(state["value"])
                        level = 100 - level #invert open/close percentage
                        status_num = 1

Newroller branch

Tested:

2022-09-16 08:02:56.120 Error: Tahoma: Call to function 'onCommand' failed, exception details:
2022-09-16 08:02:56.121 Error: Tahoma: Traceback (most recent call last):
2022-09-16 08:02:56.121 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 458, in onCommand
2022-09-16 08:02:56.121 Error: Tahoma: _plugin.onCommand(DeviceId, Unit, Command, Level, Color)
2022-09-16 08:02:56.121 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 195, in onCommand
2022-09-16 08:02:56.121 Error: Tahoma: self.update_devices_status(event_list)
2022-09-16 08:02:56.121 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 351, in update_devices_status
2022-09-16 08:02:56.121 Error: Tahoma: Devices[dev].Units[Unit].LastLevel = int(level)
2022-09-16 08:02:56.121 Error: Tahoma: NameError: name 'Unit' is not defined
2022-09-16 08:03:19.107 Error: Tahoma: Call to function 'onHeartbeat' failed, exception details:
2022-09-16 08:03:19.107 Error: Tahoma: Traceback (most recent call last):
2022-09-16 08:03:19.107 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 466, in onHeartbeat
2022-09-16 08:03:19.107 Error: Tahoma: _plugin.onHeartbeat()
2022-09-16 08:03:19.107 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 271, in onHeartbeat
2022-09-16 08:03:19.107 Error: Tahoma: self.update_devices_status(event_list)
2022-09-16 08:03:19.107 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 341, in update_devices_status
2022-09-16 08:03:19.107 Error: Tahoma: Devices[dev].Units[Unit].LastLevel = 0
2022-09-16 08:03:19.107 Error: Tahoma: NameError: name 'Unit' is not defined
2022-09-16 08:04:19.126 Error: Tahoma: Call to function 'onHeartbeat' failed, exception details:
2022-09-16 08:04:19.126 Error: Tahoma: Traceback (most recent call last):
2022-09-16 08:04:19.126 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 466, in onHeartbeat
2022-09-16 08:04:19.126 Error: Tahoma: _plugin.onHeartbeat()
2022-09-16 08:04:19.126 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 271, in onHeartbeat
2022-09-16 08:04:19.126 Error: Tahoma: self.update_devices_status(event_list)
2022-09-16 08:04:19.126 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy-AddNewRollerShutter/plugin.py", line 363, in update_devices_status
2022-09-16 08:04:19.126 Error: Tahoma: Devices[dev].Units[1].nValue(3)
2022-09-16 08:04:19.126 Error: Tahoma: TypeError: 'int' object is not callable

Support of ELIXO 500 3S IO

It's more a question than an issue.

Hello,

I have a Connexoon in local mode and it works perfectly fine with all my roller shutters. I have all three "modules" with my connexoon.

I plan to buy a portal motor ELIXO 500 3S IO. The idea is to be able to drive it also with Domoticz and with this plugin.

Is it supported yet ? Do you know if it would be possible to get its state (open/closed, or even the opening percentage would be awsome).

Thanks !

error in somfy.log

At this moment i'v got this error:
2022-09-22 13:34:16.127 Error: Tahoma: device not found for URL: internal://0000-0000-0000/pod/0

Inverted issue in Domoticz

Regarding this issue domoticz/domoticz#5288
I'v done some mods:

#        if (str(Command) == "Off"):
#            commands["name"] = "close"
#        elif (str(Command) == "On"):
#            commands["name"] = "open"
        if (str(Command) == "Off"):
            commands["name"] = "open"
        elif (str(Command) == "On"):
            commands["name"] = "close"
        elif (str(Command) == "Stop"):
            commands["name"] = "stop"
        elif ("Set Level" in str(Command)):
            commands["name"] = "setClosure"
#            tmp = 100 - int(Level)
            tmp = int(Level)
            params.append(tmp)
            commands["parameters"] = params

                  if ((state["name"] == "core:ClosureState") or (state["name"] == "core:DeploymentState")):
                    level = int(state["value"])
                    # Delete# level = 100 - level
                    status_l = True

Error 404 in get ...refreshAllStates since Cozytouch app new version 3.6.3#411

Since 24th may It's not possible to run python Somfy Cozytouch.
I have this error:
Démarrage Cozytouch Aeromax5 2023-05-31 16:16
GET-> https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/refreshAllStates : 404
Erreur Cozytouch_GET http: 404 2023-05-31 16:16
!!!! Echec interrogation serveur Cozytouch sans login, connexion serveur Cozytouch ****
POST-> https://ha110-1.overkiz.com/enduser-mobile-web/enduserAPI/login | userId=&userPassword= : 200
Authentification serveur cozytouch OK
Connexion serveur Cozytouch reussie
GET-> https://ha110-1.overkiz.com/enduser-mobile-web/externalAPI/json/refreshAllStates : 404
Erreur Cozytouch_GET http: 404 2023-05-31 16:16
Echec requete refreshAllStates 2023-05-31 16:16

I have a connexoon box and the new android cozytouch 3.6.3 is OK. Everything was working well when the previous version of Cozytouch was in use

Not working since update

Hi,

There was an update yesterday on the Tahoma and since then the script not working
Has somfy changed something where or the problem comes from me?
I have these errors in the logs.
Thank

log
2023-01-19 16:09:43.368 Error: Tahoma: Call to function 'onHeartbeat' failed, exception details:
2023-01-19 16:09:43.373 Error: Tahoma: Traceback (most recent call last):
2023-01-19 16:09:43.374 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/plugin.py", line 611, in onHeartbeat
2023-01-19 16:09:43.374 Error: Tahoma: _plugin.onHeartbeat()
2023-01-19 16:09:43.374 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/plugin.py", line 307, in onHeartbeat
2023-01-19 16:09:43.374 Error: Tahoma: filtered_devices = self.tahoma.get_devices()
2023-01-19 16:09:43.374 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/tahoma_local.py", line 188, in get_devices
2023-01-19 16:09:43.374 Error: Tahoma: utils.handle_response(response, "get devices")
2023-01-19 16:09:43.375 Error: Tahoma: File "/home/Snake/domoticz/plugins/somfy/utils.py", line 84, in handle_response
2023-01-19 16:09:43.375 Error: Tahoma: raise exceptions.TahomaException("failed request during "+ action + ", check credentials: " + str(response.status_code))
2023-01-19 16:09:43.375 Error: Tahoma: exceptions.TahomaException: failed request during get devices, check credentials: 401

EDIT : The script is up to date

Some commands lead to 400 response

Describe the bug
During some commands the response is 400 with additional info:
'{'errorCode': 'DUPLICATE_FIELD_OR_VALUE', 'error': 'Another action exists on the same device : io://0808-8889-6991/6200134'}'

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
command executed and no error

Domoticz info:

  • Device: [e.g. rasberry pi]
  • OS: [e.g. bullseye]
  • Domoticz Version [e.g. 2022.2 or latest beta]
  • plugin version:

Box info:

  • Box type: Connexoon

Additional context
Add any other context about the problem here.

Somfy.log
make sure to paste here the logging from somfy.log file (or attach the file itself) while running the plugin in debug mode

Domoticz logging
somfy2.log

Domoticz logs :

2023-01-06 09:31:15.382 Error: Volets roulants: Call to function 'onCommand' failed, exception details:
2023-01-06 09:31:15.383 Error: Volets roulants: Traceback (most recent call last):
2023-01-06 09:31:15.383 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 582, in onCommand
2023-01-06 09:31:15.383 Error: Volets roulants: _plugin.onCommand(DeviceId, Unit, Command, Level, Color)
2023-01-06 09:31:15.383 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 267, in onCommand
2023-01-06 09:31:15.383 Error: Volets roulants: self.tahoma.send_command(self.command_data)
2023-01-06 09:31:15.383 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/tahoma.py", line 226, in send_command
2023-01-06 09:31:15.383 Error: Volets roulants: self.handle_response(response, "send command")
2023-01-06 09:31:15.383 Error: Volets roulants: File "/home/pi/domoticz/plugins/somfy/tahoma.py", line 239, in handle_response
2023-01-06 09:31:15.383 Error: Volets roulants: raise exceptions.TahomaException("failed request during "+ action + ", check url or body: " + str(response.status_code))
2023-01-06 09:31:15.383 Error: Volets roulants: exceptions.TahomaException: failed request during send command, check url or body: 400 

Somfy Exterior Screens are continious updating when using beta 4.2.20

I am using 6 Somfy IO devices, 3 RollerShutter, 2 ExtoriorScreen and 1 Awning. In master version the Awning was not updating, see issue #53 and #55. Those issues where solved in Beta 4.2.20. But the modified plugin.py created another issue, the continious updating of the exterior screens. The problem is that the awning has 2 trigger events (OpenCloseState and DeploymentState), the exterior screens 3 (OpenCloseState, DeploymentState and ClosureState). I tried to modify the plugin.py but i have too little Python program skills to fix this problem. The problem is that the status of the exterior screens is constantly changing by the triggers OpenCloseState and DeplomentState. A solution could by that the DeploymentState is only triggert by the Awning, an extra If statement between the lines 383-386. I don't know how to insert that's the Awning who is triggering.
I am running Domoticz 2023.2 32 bit, OS is Bullseye 32 bit on a PI3B

Slider is not updating after v4.1.7

In v4.1.7:

                    if ((state["name"] == "core:ClosureState") or (state["name"] == "core:DeploymentState")):
                        level = int(state["value"])
                        level = 100 - level #invert open/clsoe percentage
                        status_num = 1

In v4.2.3:

                    if ((state["name"] == "core:ClosureState") or (state["name"] == "core:DeploymentState")):
                        #level = int(state["value"])
                        level = 100 - level #invert open/clsoe percentage
                        status_num = 1

I'v removed the "#" and that resolved the issue😎

Web version: register return 401 error after 2 minutes of idle

Domoticz info:

  • Device: Pi 4
  • OS: Buster
  • Domoticz Version : 2022.2

Box info:

  • Box type: Connexoon

Everytime I start the plugin, it works as expected for a certain amount of time. I didn't managed to find if it's random or not.

I've set the refresh interval to 25 minutes to avoid any ban from tahomalink.com server. The curious thing is I don't think I get banned from the server, as as soon as I get a 401 error, if I stop and start the plugin, it can register its listener with a 200 OK return.

I saw in the log that the tahomalink listener receive a validity of approx. 6 days. So I'm wondering why the plugin refresh interval is 25 minutes maximum. What would be the consequences if we set a refresh interval of 5 days ?

Somfy.log

2022-11-30 10:54:38,064 - DEBUG    - plugin.py          - Polling unit in 2 heartbeats.
2022-11-30 10:54:39,066 - DEBUG    - plugin.py          - Polling unit in 1 heartbeats.
2022-11-30 10:54:40,071 - DEBUG    - plugin.py          - Poll unit
2022-11-30 10:54:40,072 - DEBUG    - tahoma.py          - checking logged in status: self.__logged_in = True and self.__expiry_date (2022-12-06 10:49:41.374610) >= datetime.datetime.now() = True
2022-11-30 10:54:40,073 - DEBUG    - listener.py        - listener vald: self.__listener_expiry = 2022-11-30 10:53:41 self.__valid = False
2022-11-30 10:54:40,074 - DEBUG    - tahoma.py          - start register
2022-11-30 10:54:40,075 - DEBUG    - listener.py        - start register listener
2022-11-30 10:54:40,076 - DEBUG    - listener.py        - register request: self.headers_with_token: '{"Host": "tahomalink.com", "Connection": "keep-alive", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Content-Type": "application/json", "Cookie": "JSESSIONID=5769631305EA37C8227812B7AFD57A3D; Path=/enduser-mobile-web; Secure; HttpOnly; SameSite=None"}'
2022-11-30 10:54:40,086 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): tahomalink.com:443
2022-11-30 10:54:40,230 - DEBUG    - connectionpool.py  - https://tahomalink.com:443 "POST /enduser-mobile-web/enduserAPI/events/register HTTP/1.1" 401 66
2022-11-30 10:54:40,238 - DEBUG    - listener.py        - register response: status '401' response body: '<Response [401]>'
2022-11-30 10:54:40,241 - ERROR    - utils.py           - status code 401 authorisation failed, check credentials
2022-11-30 10:54:41,050 - DEBUG    - plugin.py          - Polling unit in 299 heartbeats.
2022-11-30 10:54:42,053 - DEBUG    - plugin.py          - Polling unit in 298 heartbeats.

Domoticz log

2022-11-30 10:54:40.242  Error: Connexoon: Call to function 'onHeartbeat' failed, exception details:
2022-11-30 10:54:40.247  Error: Connexoon: Traceback (most recent call last):
2022-11-30 10:54:40.247  Error: Connexoon:   File "/home/domoticz/domoticz/plugins/somfy/plugin.py", line 590, in onHeartbeat
2022-11-30 10:54:40.248  Error: Connexoon:     _plugin.onHeartbeat()
2022-11-30 10:54:40.248  Error: Connexoon:   File "/home/domoticz/domoticz/plugins/somfy/plugin.py", line 293, in onHeartbeat
2022-11-30 10:54:40.248  Error: Connexoon:     self.tahoma.register_listener()
2022-11-30 10:54:40.248  Error: Connexoon:   File "/home/domoticz/domoticz/plugins/somfy/tahoma.py", line 167, in register_listener
2022-11-30 10:54:40.248  Error: Connexoon:     response = self.listener.register_listener(self.base_url + '/enduser-mobile-web/enduserAPI/events/register', headers=Headers, verify = True, timeout=self.timeout)
2022-11-30 10:54:40.248  Error: Connexoon:   File "/home/domoticz/domoticz/plugins/somfy/listener.py", line 51, in register_listener
2022-11-30 10:54:40.248  Error: Connexoon:     utils.handle_response(response, "get listener ID")
2022-11-30 10:54:40.248  Error: Connexoon:   File "/home/domoticz/domoticz/plugins/somfy/utils.py", line 60, in handle_response
2022-11-30 10:54:40.248  Error: Connexoon:     raise exceptions.TahomaException("failed request during "+ action + ", check credentials: " + str(response.status_code))
2022-11-30 10:54:40.248  Error: Connexoon: exceptions.TahomaException: failed request during get listener ID, check credentials: 401

suddenly Login failure

Not sure what happened, but i tried to test the web version which worked for 1 movement of the screen and then i could not operated the screens any more.
Login failure

Setting back to local and now i can use the screens anymore

2022-12-01 20:00:37.754 Somfy: Parameter: 'Key':'tahomaIO'
2022-12-01 20:00:37.754 Somfy: Parameter: 'Mode1':'False'
2022-12-01 20:00:37.754 Somfy: Parameter: 'Mode2':'20'
2022-12-01 20:00:37.754 Somfy: Parameter: 'Mode3':'xxxx-xxxx-xxxx'
2022-12-01 20:00:37.754 Somfy: Parameter: 'Mode4':'Local'
2022-12-01 20:00:37.754 Somfy: Parameter: 'Mode5':'/var/log/somfy/'
2022-12-01 20:00:37.754 Somfy: Parameter: 'Mode6':'Debug'
2022-12-01 20:00:37.754 Somfy: Parameter: 'DomoticzVersion':'2022.2'
2022-12-01 20:00:37.754 Somfy: Parameter: 'DomoticzHash':'0'
2022-12-01 20:00:37.754 Somfy: Parameter: 'DomoticzBuildTime':'1970-01-01 01:00:00'
2022-12-01 20:00:37.754 Somfy: Configuration count: 5
2022-12-01 20:00:37.754 Somfy: Configuration 'MajorVersion':'4'
2022-12-01 20:00:37.754 Somfy: Configuration 'MinorVersion':'1'
2022-12-01 20:00:37.754 Somfy: Configuration 'patchVersion':'7'
2022-12-01 20:00:37.754 Somfy: Configuration 'plugin version':'4.1.7'
2022-12-01 20:00:37.754 Somfy: Configuration 'token':'635407f4b6f0727cb13d'
2022-12-01 20:00:37.754 Somfy: Device count: 12
2022-12-01 20:00:37.754 Somfy: Device: internal://xxxx-xxxx-xxxx/pod/0 - DeviceID: 'internal://xxxx-xxxx-xxxx/pod/0', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/10464619 - DeviceID: 'io://xxxx-xxxx-xxxx/10464619', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/1118656 - DeviceID: 'io://xxxx-xxxx-xxxx/1118656', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/14852843 - DeviceID: 'io://xxxx-xxxx-xxxx/14852843', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/16752266 - DeviceID: 'io://xxxx-xxxx-xxxx/16752266', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/2192664 - DeviceID: 'io://xxxx-xxxx-xxxx/2192664', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/2331376 - DeviceID: 'io://xxxx-xxxx-xxxx/2331376', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/3280315 - DeviceID: 'io://xxxx-xxxx-xxxx/3280315', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/3424709 - DeviceID: 'io://xxxx-xxxx-xxxx/3424709', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/7005214 - DeviceID: 'io://xxxx-xxxx-xxxx/7005214', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/7959673 - DeviceID: 'io://xxxx-xxxx-xxxx/7959673', Units: 1
2022-12-01 20:00:37.754 Somfy: Device: io://xxxx-xxxx-xxxx/8024168 - DeviceID: 'io://xxxx-xxxx-xxxx/8024168', Units: 1
2022-12-01 20:00:37.754 Somfy: os.path.exists(Parameters['Mode5']) = True
2022-12-01 20:00:37.755 Somfy: Starting version: 4.1.7
2022-12-01 20:00:37.475 Status: Somfy: Started.
2022-12-01 20:00:37.475 Status: Somfy: Entering work loop.
2022-12-01 20:00:37.751 Status: Somfy: Initialized version 4.1.7, author 'MadPatrick'
2022-12-01 20:00:37.753 Status: Somfy: Starting Tahoma blind plugin, logging to file /var/log/somfy/somfy.log
2022-12-01 20:00:37.855 Error: Somfy: Failed to login: Bad credentials, please update credentials and restart plugin
2022-12-01 20:00:57.095 Error: Somfy: Call to function 'onHeartbeat' failed, exception details:
2022-12-01 20:00:57.096 Error: Somfy: Traceback (most recent call last):
2022-12-01 20:00:57.096 Error: Somfy: File "/var/domoticz/plugins/somfy/plugin.py", line 576, in onHeartbeat
2022-12-01 20:00:57.096 Error: Somfy: _plugin.onHeartbeat()
2022-12-01 20:00:57.096 Error: Somfy: File "/var/domoticz/plugins/somfy/plugin.py", line 295, in onHeartbeat
2022-12-01 20:00:57.096 Error: Somfy: event_list = self.tahoma.get_events()
2022-12-01 20:00:57.096 Error: Somfy: File "/var/domoticz/plugins/somfy/tahoma_local.py", line 212, in get_events
2022-12-01 20:00:57.096 Error: Somfy: raise exceptions.TahomaException("No token has been provided")
2022-12-01 20:00:57.096 Error: Somfy: exceptions.TahomaException: No token has been provided
2022-12-01 20:01:17.089 Error: Somfy: Call to function 'onHeartbeat' failed, exception details:
2022-12-01 20:01:17.089 Error: Somfy: Traceback (most recent call last):
2022-12-01 20:01:17.089 Error: Somfy: File "/var/domoticz/plugins/somfy/plugin.py", line 576, in onHeartbeat
2022-12-01 20:01:17.089 Error: Somfy: _plugin.onHeartbeat()
2022-12-01 20:01:17.089 Error: Somfy: File "/var/domoticz/plugins/somfy/plugin.py", line 295, in onHeartbeat
2022-12-01 20:01:17.089 Error: Somfy: event_list = self.tahoma.get_events()
2022-12-01 20:01:17.089 Error: Somfy: File "/var/domoticz/plugins/somfy/tahoma_local.py", line 212, in get_events
2022-12-01 20:01:17.089 Error: Somfy: raise exceptions.TahomaException("No token has been provided")
2022-12-01 20:01:17.089 Error: Somfy: exceptions.TahomaException: No token has been provided
2022-12-01 20:01:36.472 Status: Somfy: Stop directive received.
2022-12-01 19:50:28,662 - DEBUG    - plugin.py          - starting to log in with mode Local
2022-12-01 19:50:28,662 - DEBUG    - listener.py        - listener created
2022-12-01 19:50:28,662 - DEBUG    - tahoma_local.py    - SomfyBox initialised
2022-12-01 19:50:28,665 - DEBUG    - connectionpool.py  - Starting new HTTPS connection (1): ha101-1.overkiz.com:443
2022-12-01 19:50:28,756 - DEBUG    - connectionpool.py  - https://ha101-1.overkiz.com:443 "POST /enduser-mobile-web/enduserAPI/login HTTP/1.1" 401 None
2022-12-01 19:50:28,758 - DEBUG    - tahoma_local.py    - Login respone: status_code: '401' reponse body: '{'errorCode': 'AUTHENTICATION_ERROR', 'error': 'Bad credentials'}'
2022-12-01 19:50:28,758 - ERROR    - tahoma_local.py    - login failed: Bad credentials, please update credentials and restart plugin

Tried to reset the token, but no change

tried the test_tahoma.py script and with option 1
Failed to login: Bad credentials, please update credentials and restart plugin login status: False Press Enter to continue...

What can be the issue ?

Errors with local API

Thought it's best to open up a separate topic after the last one ;)

I'm getting some errors with the local API.:

2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: (self._dns_host, self.port), self.timeout, **extra_kw)
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 80, in create_connection
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: raise err
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 70, in create_connection
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: sock.connect(sa)
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: ConnectionRefusedError: [Errno 111] Connection refused
2022-11-24 16:56:01.923 Error: Somfy zonneschermen:
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:01.923 Error: Somfy zonneschermen:
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: chunked=chunked)
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 343, in _make_request
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: self._validate_conn(conn)
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 841, in _validate_conn
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: conn.connect()
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 301, in connect
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: conn = self._new_conn()
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 168, in _new_conn
2022-11-24 16:56:01.923 Error: Somfy zonneschermen: self, "Failed to establish a new connection: %s" % e)
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x637dfdd0>: Failed to establish a new connection: [Errno 111] Connection refused
2022-11-24 16:56:01.924 Error: Somfy zonneschermen:
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:01.924 Error: Somfy zonneschermen:
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 449, in send
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: timeout=timeout
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: _stacktrace=sys.exc_info()[2])
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 398, in increment
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: raise MaxRetryError(_pool, url, error or ResponseError(cause))
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='2017-8871-5701.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/events/register (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x637dfdd0>: Failed to establish a new connection: [Errno 111] Connection refused'))
2022-11-24 16:56:01.924 Error: Somfy zonneschermen:
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:01.924 Error: Somfy zonneschermen:
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 544, in onStart
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: _plugin.onStart()
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 169, in onStart
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: self.tahoma.register_listener()
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/tahoma_local.py", line 254, in register_listener
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: response = self.listener.register_listener(self.base_url_local + "/events/register", headers=self.headers_with_token, verify=False)
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/listener.py", line 42, in register_listener
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: response = requests.post(url, headers=headers, verify=verify, timeout=timeout)
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/api.py", line 116, in post
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: return request('post', url, data=data, json=json, **kwargs)
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
2022-11-24 16:56:01.924 Error: Somfy zonneschermen: return session.request(method=method, url=url, **kwargs)
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: resp = self.send(prep, **send_kwargs)
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: r = adapter.send(request, **kwargs)
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 516, in send
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: raise ConnectionError(e, request=request)
2022-11-24 16:56:01.925 Error: Somfy zonneschermen: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='2017-8871-5701.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/events/register (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x637dfdd0>: Failed to establish a new connection: [Errno 111] Connection refused'))
2022-11-24 16:56:02.205 InfluxLink: value Percentage,idx=303,name=Heishamon---Pump_Flow value=10.16
2022-11-24 16:56:03.053 SolarEdge Inverter: Retrying to communicate with inverter after: 2022-11-24 16:56:51.071006
2022-11-24 16:56:04.050 Heishamon: Heartbeating...
2022-11-24 16:56:04.051 Heishamon: MqttClient::ping
2022-11-24 16:56:07.301 InfluxLink: value Percentage,idx=303,name=Heishamon---Pump_Flow value=10.51
2022-11-24 16:56:08.062 SolarEdge Inverter: Retrying to communicate with inverter after: 2022-11-24 16:56:51.071006
2022-11-24 16:56:09.328 Slimme Meter: P1 Smart Meter (Stroom)
2022-11-24 16:56:09.355 Slimme Meter: General/Voltage (Voltage L1)
2022-11-24 16:56:09.373 Slimme Meter: General/Voltage (Voltage L2)
2022-11-24 16:56:09.390 Slimme Meter: General/Voltage (Voltage L3)
2022-11-24 16:56:09.408 Slimme Meter: Usage (Usage L1)
2022-11-24 16:56:09.438 Slimme Meter: Usage (Usage L2)
2022-11-24 16:56:09.452 Slimme Meter: Usage (Usage L3)
2022-11-24 16:56:09.473 Slimme Meter: Usage (Delivery L1)
2022-11-24 16:56:09.488 Slimme Meter: Usage (Delivery L2)
2022-11-24 16:56:09.499 Slimme Meter: Usage (Delivery L3)
2022-11-24 16:56:09.506 Slimme Meter: Current (Current L1/L2/L3)
2022-11-24 16:56:09.876 InfluxLink: value Instant,idx=386,name=Heishamon---Hoofdverbruik value=20.0
2022-11-24 16:56:12.451 InfluxLink: value Percentage,idx=303,name=Heishamon---Pump_Flow value=10.16
2022-11-24 16:56:13.077 SolarEdge Inverter: Retrying to communicate with inverter after: 2022-11-24 16:56:51.071006
2022-11-24 16:56:14.051 Heishamon: Heartbeating...
2022-11-24 16:56:14.051 Heishamon: MqttClient::ping
2022-11-24 16:56:18.088 SolarEdge Inverter: Retrying to communicate with inverter after: 2022-11-24 16:56:51.071006
2022-11-24 16:56:20.074 Error: Somfy zonneschermen: Call to function 'onHeartbeat' failed, exception details:
2022-11-24 16:56:20.079 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:20.079 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 295, in onHeartbeat
2022-11-24 16:56:20.079 Error: Somfy zonneschermen: event_list = self.tahoma.get_events()
2022-11-24 16:56:20.080 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/tahoma_local.py", line 215, in get_events
2022-11-24 16:56:20.084 Error: Somfy zonneschermen: raise exceptions.NoListenerFailure()
2022-11-24 16:56:20.084 Error: Somfy zonneschermen: exceptions.NoListenerFailure: Trying to fetch events without listener registered
2022-11-24 16:56:20.084 Error: Somfy zonneschermen:
2022-11-24 16:56:20.084 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:20.084 Error: Somfy zonneschermen:
2022-11-24 16:56:20.084 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: (self._dns_host, self.port), self.timeout, **extra_kw)
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 80, in create_connection
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: raise err
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 70, in create_connection
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: sock.connect(sa)
2022-11-24 16:56:20.085 Error: Somfy zonneschermen: ConnectionRefusedError: [Errno 111] Connection refused
2022-11-24 16:56:20.086 Error: Somfy zonneschermen:
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:20.086 Error: Somfy zonneschermen:
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: chunked=chunked)
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 343, in _make_request
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: self._validate_conn(conn)
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 841, in _validate_conn
2022-11-24 16:56:20.086 Error: Somfy zonneschermen: conn.connect()
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 301, in connect
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: conn = self._new_conn()
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 168, in _new_conn
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: self, "Failed to establish a new connection: %s" % e)
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x6375beb0>: Failed to establish a new connection: [Errno 111] Connection refused
2022-11-24 16:56:20.087 Error: Somfy zonneschermen:
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:20.087 Error: Somfy zonneschermen:
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 449, in send
2022-11-24 16:56:20.087 Error: Somfy zonneschermen: timeout=timeout
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: _stacktrace=sys.exc_info()[2])
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 398, in increment
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: raise MaxRetryError(_pool, url, error or ResponseError(cause))
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='2017-8871-5701.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/events/register (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x6375beb0>: Failed to establish a new connection: [Errno 111] Connection refused'))
2022-11-24 16:56:20.088 Error: Somfy zonneschermen:
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: During handling of the above exception, another exception occurred:
2022-11-24 16:56:20.088 Error: Somfy zonneschermen:
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: Traceback (most recent call last):
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 580, in onHeartbeat
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: _plugin.onHeartbeat()
2022-11-24 16:56:20.088 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 301, in onHeartbeat
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: self.tahoma.register_listener() #register a new listener
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/tahoma_local.py", line 254, in register_listener
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: response = self.listener.register_listener(self.base_url_local + "/events/register", headers=self.headers_with_token, verify=False)
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: File "/home/pi/domoticz/plugins/somfy/listener.py", line 42, in register_listener
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: response = requests.post(url, headers=headers, verify=verify, timeout=timeout)
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/api.py", line 116, in post
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: return request('post', url, data=data, json=json, **kwargs)
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: return session.request(method=method, url=url, **kwargs)
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: resp = self.send(prep, **send_kwargs)
2022-11-24 16:56:20.089 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
2022-11-24 16:56:20.090 Error: Somfy zonneschermen: r = adapter.send(request, **kwargs)
2022-11-24 16:56:20.090 Error: Somfy zonneschermen: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 516, in send
2022-11-24 16:56:20.090 Error: Somfy zonneschermen: raise ConnectionError(e, request=request)
2022-11-24 16:56:20.090 Error: Somfy zonneschermen: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='2017-8871-5701.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/events/register (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x6375beb0>: Failed to establish a new connection: [Errno 111] Connection refused'))

Logfile is going mad.
somfy.log

Seems to have something to do with connection limitations?

Somfy Tahoma/Connexoon plugin version: 4.2.16 error

Plugin not working using domoticz 2024.4:
This error in the log:
2024-06-19 03:17:31.201 Error: Somfy: Failed to request data: HTTPSConnectionPool(host='xxxxxxxxx.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/setup/devices (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x5dcf8058>: Failed to establish a new connection: [Errno 111] Connection refused')) 2024-06-19 03:17:51.039 Error: Somfy: Call to function 'onHeartbeat' failed, exception details: 2024-06-19 03:17:51.054 Error: Somfy: Traceback (most recent call last): 2024-06-19 03:17:51.054 Error: Somfy: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 612, in onHeartbeat 2024-06-19 03:17:51.054 Error: Somfy: _plugin.onHeartbeat() 2024-06-19 03:17:51.054 Error: Somfy: File "/home/pi/domoticz/plugins/somfy/plugin.py", line 308, in onHeartbeat 2024-06-19 03:17:51.054 Error: Somfy: filtered_devices = self.tahoma.get_devices() 2024-06-19 03:17:51.054 Error: Somfy: File "/home/pi/domoticz/plugins/somfy/tahoma_local.py", line 189, in get_devices 2024-06-19 03:17:51.054 Error: Somfy: filtered_list = utils.filter_devices(response.json()) 2024-06-19 03:17:51.054 Error: Somfy: File "/home/pi/domoticz/plugins/somfy/utils.py", line 17, in filter_devices 2024-06-19 03:17:51.054 Error: Somfy: logging.debug("filter_devices: Device name: "+device["label"]+" Device class: "+device["definition"]["uiClass"]) 2024-06-19 03:17:51.054 Error: Somfy: KeyError: 'definition'

External awning don't update in local mode.

Hi,
I have 5 roller shutters, 1 luminance sensor, 1 external awning (somfy io) and a connexoon bridge. I was using plugin from nonolk/domoticz v1.0.5 with some modification to use luminance sensor and awning. It works very well for many years . Some weeks ago the web plugin stop working so I switch to the new plugin V 4.2.16 with local requests. it work very well with luminance sensor and roller shutters but awning don't update level of deployement.
An update is only done when I use manually awning slider and just after one roller slider ??? Set level or remote somfy never update deployement level.
I use domoticz 2022.1-python version 3.7.3 but I made also a test with 2023.1 and it's the same problem . I try to debug the problem but today I have not any result.

error line 98 tahoma.py

2022-09-20 19:54:10.326 Error: Tahoma: File "/home/pi/domoticz/plugins/somfy/tahoma.py", line 98, in tahoma_command
2022-09-20 19:54:10.326 Error: Tahoma: logging.debug("command response: status '" + str(response.status_code) + "' response body: '"+str(response.json())+"'")
2022-09-20 19:54:10.326 Error: Tahoma: UnboundLocalError: local variable 'response' referenced before assignment

Undefined name in tahoma.py

First a big thanks for taking over development of the plugin, much appreciated.

I did notice an error creeping through, when running it for a while it started to complain about a undefined name.

2022-08-09 13:26:07.214 Error: Tahoma: Call to function 'onHeartbeat' failed, exception details:
2022-08-09 13:26:07.285 Error: Tahoma: Traceback (most recent call last):
2022-08-09 13:26:07.285 Error: Tahoma: File "/opt/domoticz/plugins/somfy/plugin.py", line 285, in onHeartbeat
2022-08-09 13:26:07.285 Error: Tahoma: _plugin.onHeartbeat()
2022-08-09 13:26:07.285 Error: Tahoma: File "/opt/domoticz/plugins/somfy/plugin.py", line 188, in onHeartbeat
2022-08-09 13:26:07.285 Error: Tahoma: event_list = self.tahoma.get_events()
2022-08-09 13:26:07.285 Error: Tahoma: File "/opt/domoticz/plugins/somfy/tahoma.py", line 249, in get_events
2022-08-09 13:26:07.285 Error: Tahoma: time.sleep(i ** 3)
2022-08-09 13:26:07.285 Error: Tahoma: NameError: name 'time' is not defined 

Looking at the tahoma.py file, it seems indeed that the time variable was not set, leading up to this error.

https://github.com/MadPatrick/somfy/blob/master/tahoma.py#L249 uses time, but can't find it set anywhere.

level issue

Hi,

I'v tested this plugin and having issue's with levels.
Open en closing is oke, sending a level (%) also.
But then.. imho the current position (in %) in not reading by the plugin..

And see this in the log;
Error: Switch command not send!, Hardware device disabled or not found!

grz

Error loading plugin.py

Helleo,

I updated today from version 2.0.9
I get the following error:
2022-09-13 17:35:36.354 Error: Volets roulants: (tahomaIO) failed to load 'plugin.py', Python Path used was '/home/pi/domoticz/plugins/somfy/:/usr/lib/python37.zip:/usr/lib/python3.7:/usr/lib/python3.7/lib-dynload:/usr/local/lib/python3.7/dist-packages:/usr/lib/python3/dist-packages:/usr/lib/python3.7/dist-packages'.
2022-09-13 17:35:36.354 Error: Volets roulants: Module Import failed, exception: 'IndentationError'
2022-09-13 17:35:36.354 Error: Volets roulants: Import detail: File: , Line: 196, offset: 19
2022-09-13 17:35:36.354 Error: Volets roulants: Error Line ' if (device["deviceURL"].startswith("io://")):
2022-09-13 17:35:36.354 '
2022-09-13 17:35:36.354 Error: Volets roulants: Exception traceback:
2022-09-13 17:35:36.354 Error: Volets roulants: ----> Line 50 in '/home/pi/domoticz/plugins/somfy/plugin.py', function

I did not changed anything else.
Any idea of what happened?

still too many connections

Refresh change doesn't help

2022-09-21 08:02:19.873 Error: Tahoma hardware (74) thread seems to have ended unexpectedly
2022-09-21 08:02:24.171 Error: Tahoma: Failed to request data: Failed to call Tahoma/Somfy API (too many retries)

Open / Close does not work. Percentage blinds does work

Domoticz 2022.2
Latest git pull on plugin and added again.
Conexoon box at home with IO blinds

Added the devices succesfully after adding the hardware
Had to change the switch type to Blinds + percentage manually.

Press "Close"button:

2022-11-09 11:19:07.160 Error: Somfy Connexoon: Traceback (most recent call last):
2022-11-09 11:19:07.160 Error: Somfy Connexoon: File "/home/pi/domoticz/plugins/domoticz_tahoma_blind/plugin.py", line 287, in onCommand
2022-11-09 11:19:07.160 Error: Somfy Connexoon: _plugin.onCommand(Unit, Command, Level, Hue)
2022-11-09 11:19:07.160 Error: Somfy Connexoon: File "/home/pi/domoticz/plugins/domoticz_tahoma_blind/plugin.py", line 231, in onCommand
2022-11-09 11:19:07.160 Error: Somfy Connexoon: data = {"label": "Domoticz - "+Devices[Unit].Name+" - "+commands["name"], "actions": self.actions_serialized}
2022-11-09 11:19:07.160 Error: Somfy Connexoon: KeyError: 'name'
2022-11-09 11:19:08.016 Somfy Connexoon: Pushing 'onHeartbeatCallback' on to queue
2022-11-09 11:19:08.066 Somfy Connexoon: Processing 'onHeartbeatCallback' message
2022-11-09 11:19:08.066 Somfy Connexoon: Acquiring GIL for 'onHeartbeatCallback'
2022-11-09 11:19:08.067 Somfy Connexoon: Calling message handler 'onHeartbeat' on 'module' type object.
2022-11-09 11:19:08.067 Somfy Connexoon: Pushing 'ConnectDirective' on to queue
2022-11-09 11:19:08.067 Somfy Connexoon: Acquiring GIL for 'onHeartbeatCallback'
2022-11-09 11:19:08.067 Somfy Connexoon: Processing 'ConnectDirective' message
2022-11-09 11:19:08.067 Somfy Connexoon: Acquiring GIL for 'ConnectDirective'
2022-11-09 11:19:08.067 Somfy Connexoon: Transport set to: 'TCP/IP', tahomalink.com:443.
2022-11-09 11:19:08.071 Somfy Connexoon: Connect directive received, action initiated successfully.
2022-11-09 11:19:08.072 Somfy Connexoon: Acquiring GIL for 'ConnectDirective'
2022-11-09 11:19:08.076 Somfy Connexoon: Acquiring GIL for 'CPluginTransportTCP::handleAsyncResolve'
2022-11-09 11:19:08.087 Somfy Connexoon: Acquiring GIL for 'CPluginTransportTCP::handleAsyncConnect'
2022-11-09 11:19:08.177 Somfy Connexoon: Pushing 'onConnectCallback' on to queue
2022-11-09 11:19:08.222 Somfy Connexoon: Processing 'onConnectCallback' message
2022-11-09 11:19:08.222 Somfy Connexoon: Acquiring GIL for 'onConnectCallback'
2022-11-09 11:19:08.222 Somfy Connexoon: Calling message handler 'onConnect' on 'module' type object.
2022-11-09 11:19:08.223 Somfy Connexoon: Pushing 'WriteDirective' on to queue
2022-11-09 11:19:08.223 Somfy Connexoon: Acquiring GIL for 'onConnectCallback'
2022-11-09 11:19:08.223 Somfy Connexoon: Processing 'WriteDirective' message
2022-11-09 11:19:08.223 Somfy Connexoon: Acquiring GIL for 'WriteDirective'
2022-11-09 11:19:08.223 Somfy Connexoon: Sending 441 bytes of data
2022-11-09 11:19:08.223 Somfy Connexoon: 50 4f 53 54 20 2f 65 6e 64 75 73 65 72 2d 6d 6f 62 69 6c 65 POST./enduser-mobile
2022-11-09 11:19:08.223 Somfy Connexoon: 2d 77 65 62 2f 65 6e 64 75 73 65 72 41 50 49 2f 65 76 65 6e -web/enduserAPI/even
2022-11-09 11:19:08.223 Somfy Connexoon: 74 73 2f 35 62 65 32 35 31 65 62 2d 61 63 31 30 2d 33 65 30 ts/5be251eb-ac10-3e0
2022-11-09 11:19:08.224 Somfy Connexoon: 31 2d 31 31 65 37 2d 62 31 31 61 39 33 33 62 33 34 39 34 2f 1-11e7-b11a933b3494/
2022-11-09 11:19:08.224 Somfy Connexoon: 66 65 74 63 68 20 48 54 54 50 2f 31 2e 31 0d 0a 41 75 74 68 fetch.HTTP/1.1..Auth
2022-11-09 11:19:08.224 Somfy Connexoon: 6f 72 69 7a 61 74 69 6f 6e 3a 20 42 61 73 69 63 20 59 6d 78 orization:.Basic.Ymx
2022-11-09 11:19:08.224 Somfy Connexoon: 68 62 6d 73 75 64 47 70 41 5a 32 31 68 61 57 77 75 59 32 39 hbmsudGpAZ21haWwuY29
2022-11-09 11:19:08.224 Somfy Connexoon: 74 4f 6c 6c 52 5a 6d 34 35 54 53 6f 35 63 56 67 3d 0d 0a 55 tOllRZm45TSo5cVg=..U
2022-11-09 11:19:08.224 Somfy Connexoon: 73 65 72 2d 41 67 65 6e 74 3a 20 44 6f 6d 6f 74 69 63 7a 2f ser-Agent:.Domoticz/
2022-11-09 11:19:08.224 Somfy Connexoon: 31 2e 30 0d 0a 48 6f 73 74 3a 20 74 61 68 6f 6d 61 6c 69 6e 1.0..Host:.tahomalin
2022-11-09 11:19:08.224 Somfy Connexoon: 6b 2e 63 6f 6d 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b k.com..Connection:.k
2022-11-09 11:19:08.224 Somfy Connexoon: 65 65 70 2d 61 6c 69 76 65 0d 0a 41 63 63 65 70 74 2d 45 6e eep-alive..Accept-En
2022-11-09 11:19:08.224 Somfy Connexoon: 63 6f 64 69 6e 67 3a 20 67 7a 69 70 2c 20 64 65 66 6c 61 74 coding:.gzip,.deflat
2022-11-09 11:19:08.224 Somfy Connexoon: 65 0d 0a 41 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 43 6f 6e 74 e..Accept:.*/*..Cont
2022-11-09 11:19:08.225 Somfy Connexoon: 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c 69 63 61 74 69 6f ent-Type:.applicatio
2022-11-09 11:19:08.225 Somfy Connexoon: 6e 2f 6a 73 6f 6e 0d 0a 43 6f 6f 6b 69 65 3a 20 4a 53 45 53 n/json..Cookie:.JSES
2022-11-09 11:19:08.225 Somfy Connexoon: 53 49 4f 4e 49 44 3d 36 37 34 38 34 45 39 30 36 37 44 34 42 SIONID=67484E9067D4B
2022-11-09 11:19:08.225 Somfy Connexoon: 42 44 42 30 37 33 43 36 35 39 33 30 43 30 45 44 44 37 43 3b BDB073C65930C0EDD7C;
2022-11-09 11:19:08.225 Somfy Connexoon: 20 50 61 74 68 3d 2f 65 6e 64 75 73 65 72 2d 6d 6f 62 69 6c .Path=/enduser-mobil
2022-11-09 11:19:08.225 Somfy Connexoon: 65 2d 77 65 62 3b 20 53 65 63 75 72 65 3b 20 48 74 74 70 4f e-web;.Secure;.HttpO
2022-11-09 11:19:08.225 Somfy Connexoon: 6e 6c 79 3b 20 53 61 6d 65 53 69 74 65 3d 4e 6f 6e 65 0d 0a nly;.SameSite=None..
2022-11-09 11:19:08.225 Somfy Connexoon: 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 30 0d 0a 0d Content-Length:.0...
2022-11-09 11:19:08.225 Somfy Connexoon: 0a .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .
2022-11-09 11:19:08.226 Somfy Connexoon: Acquiring GIL for 'WriteDirective'
2022-11-09 11:19:08.237 Somfy Connexoon: Acquiring GIL for 'CPluginTransportTCP::handleRead'
2022-11-09 11:19:08.237 Somfy Connexoon: Pushing 'ReadEvent' on to queue
2022-11-09 11:19:08.276 Somfy Connexoon: Processing 'ReadEvent' message
2022-11-09 11:19:08.276 Somfy Connexoon: Acquiring GIL for 'ReadEvent'
2022-11-09 11:19:08.276 Somfy Connexoon: Received 523 bytes of data
2022-11-09 11:19:08.276 Somfy Connexoon: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 0d 0a 44 61 74 65 3a HTTP/1.1.200...Date:
2022-11-09 11:19:08.276 Somfy Connexoon: 20 57 65 64 2c 20 30 39 20 4e 6f 76 20 32 30 32 32 20 31 30 .Wed,.09.Nov.2022.10
2022-11-09 11:19:08.276 Somfy Connexoon: 3a 31 39 3a 30 37 20 47 4d 54 0d 0a 53 65 72 76 65 72 3a 20 :19:07.GMT..Server:.
2022-11-09 11:19:08.277 Somfy Connexoon: 6f 76 65 72 6b 69 7a 0d 0a 53 74 72 69 63 74 2d 54 72 61 6e overkiz..Strict-Tran
2022-11-09 11:19:08.277 Somfy Connexoon: 73 70 6f 72 74 2d 53 65 63 75 72 69 74 79 3a 20 6d 61 78 2d sport-Security:.max-
2022-11-09 11:19:08.277 Somfy Connexoon: 61 67 65 3d 33 31 35 33 36 30 30 30 3b 20 69 6e 63 6c 75 64 age=31536000;.includ
2022-11-09 11:19:08.277 Somfy Connexoon: 65 53 75 62 44 6f 6d 61 69 6e 73 0d 0a 43 61 63 68 65 2d 43 eSubDomains..Cache-C
2022-11-09 11:19:08.277 Somfy Connexoon: 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 65 2c 20 6e 6f ontrol:.no-cache,.no
2022-11-09 11:19:08.277 Somfy Connexoon: 2d 73 74 6f 72 65 2c 20 6d 61 78 2d 61 67 65 3d 30 2c 20 6d -store,.max-age=0,.m
2022-11-09 11:19:08.277 Somfy Connexoon: 75 73 74 2d 72 65 76 61 6c 69 64 61 74 65 0d 0a 50 72 61 67 ust-revalidate..Prag
2022-11-09 11:19:08.277 Somfy Connexoon: 6d 61 3a 20 6e 6f 2d 63 61 63 68 65 0d 0a 45 78 70 69 72 65 ma:.no-cache..Expire
2022-11-09 11:19:08.277 Somfy Connexoon: 73 3a 20 30 0d 0a 53 74 72 69 63 74 2d 54 72 61 6e 73 70 6f s:.0..Strict-Transpo
2022-11-09 11:19:08.277 Somfy Connexoon: 72 74 2d 53 65 63 75 72 69 74 79 3a 20 6d 61 78 2d 61 67 65 rt-Security:.max-age
2022-11-09 11:19:08.277 Somfy Connexoon: 3d 33 31 35 33 36 30 30 30 20 3b 20 69 6e 63 6c 75 64 65 53 =31536000.;.includeS
2022-11-09 11:19:08.277 Somfy Connexoon: 75 62 44 6f 6d 61 69 6e 73 0d 0a 58 2d 58 53 53 2d 50 72 6f ubDomains..X-XSS-Pro
2022-11-09 11:19:08.277 Somfy Connexoon: 74 65 63 74 69 6f 6e 3a 20 31 3b 20 6d 6f 64 65 3d 62 6c 6f tection:.1;.mode=blo
2022-11-09 11:19:08.278 Somfy Connexoon: 63 6b 0d 0a 58 2d 46 72 61 6d 65 2d 4f 70 74 69 6f 6e 73 3a ck..X-Frame-Options:
2022-11-09 11:19:08.278 Somfy Connexoon: 20 44 45 4e 59 0d 0a 58 2d 43 6f 6e 74 65 6e 74 2d 54 79 70 .DENY..X-Content-Typ
2022-11-09 11:19:08.278 Somfy Connexoon: 65 2d 4f 70 74 69 6f 6e 73 3a 20 6e 6f 73 6e 69 66 66 0d 0a e-Options:.nosniff..
2022-11-09 11:19:08.278 Somfy Connexoon: 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c 69 63 Content-Type:.applic
2022-11-09 11:19:08.278 Somfy Connexoon: 61 74 69 6f 6e 2f 6a 73 6f 6e 3b 63 68 61 72 73 65 74 3d 55 ation/json;charset=U
2022-11-09 11:19:08.278 Somfy Connexoon: 54 46 2d 38 0d 0a 4b 65 65 70 2d 41 6c 69 76 65 3a 20 74 69 TF-8..Keep-Alive:.ti
2022-11-09 11:19:08.278 Somfy Connexoon: 6d 65 6f 75 74 3d 35 2c 20 6d 61 78 3d 35 30 0d 0a 43 6f 6e meout=5,.max=50..Con
2022-11-09 11:19:08.278 Somfy Connexoon: 6e 65 63 74 69 6f 6e 3a 20 4b 65 65 70 2d 41 6c 69 76 65 0d nection:.Keep-Alive.
2022-11-09 11:19:08.278 Somfy Connexoon: 0a 54 72 61 6e 73 66 65 72 2d 45 6e 63 6f 64 69 6e 67 3a 20 .Transfer-Encoding:.
2022-11-09 11:19:08.278 Somfy Connexoon: 63 68 75 6e 6b 65 64 0d 0a 0d 0a 32 0d 0a 5b 5d 0d 0a 30 0d chunked....2..[]..0.
2022-11-09 11:19:08.278 Somfy Connexoon: 0a 0d 0a .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ...
2022-11-09 11:19:08.279 Somfy Connexoon: Pushing 'onMessageCallback' on to queue
2022-11-09 11:19:08.279 Somfy Connexoon: Acquiring GIL for 'ReadEvent'
2022-11-09 11:19:08.279 Somfy Connexoon: Processing 'onMessageCallback' message
2022-11-09 11:19:08.279 Somfy Connexoon: Acquiring GIL for 'onMessageCallback'
2022-11-09 11:19:08.279 Somfy Connexoon: Calling message handler 'onMessage' on 'module' type object.
2022-11-09 11:19:08.279 Somfy Connexoon: []
2022-11-09 11:19:08.280 Somfy Connexoon: Acquiring GIL for 'onMessageCallback'```

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.