Overkiz integration - Local API [Development / Testers topic]

Thanks! Do your devices move to unavailable? And how do you run Home Assistant?

This will be a harder issue to tackle, since it is really a connection error and not just something in the code that I can easily fix.

no, the entities seem to be fine, I have not seen them unavialble anyway. I run HA in a ESXi VM, with my IoT all in a VLAN.

Ok great! The error you face is an error that the integration will recover from, so not an issue.

Just checked my 10 devices, not 1 was unavialeble during the last 23H.
Tahoma V2 (Firmware: 2023.3.4), Odroid n2+ (HA Blue) and Home Assistant 2023.8.1
Supervisor 2023.08.1
Operating System 10.4
Frontend-versie: 20230802.0

Okay when nobody has the problem of the unavailable entities I think it must be my network.

Also I was thinking wrong. My Hue Bridge was also on the same bridge so i thought this should also gives the errors. But that is wrong. The Hue bridge integration is local push and the overkiz test integration is local polling. (So every 30 seconds polling, there is a chance that the network is not functional at my side). So that must be the reason that I donā€™t see this issue on my Hue entities.

I was already planning to upgrade my complete network (very old Asus AC68Uā€™s) by the TP-LINK Omada. So maybe I will upgrade it sooner.

@imick is this what your after ?

2023-08-08 13:56:09.339 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.124 seconds (success: True)
2023-08-08 13:56:10.454 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_REGISTERED: 'ExecutionRegisteredEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='900b428a-90da-4dd8-8d70-784ece3a6da6', device_url=None, device_states=[], old_state=None, new_state=None)
2023-08-08 13:56:10.454 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_STATE_CHANGED: 'ExecutionStateChangedEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='900b428a-90da-4dd8-8d70-784ece3a6da6', device_url=None, device_states=[], old_state=<ExecutionState.INITIALIZED: 'INITIALIZED'>, new_state=<ExecutionState.COMPLETED: 'COMPLETED'>)
2023-08-08 13:56:10.454 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.048 seconds (success: True)
2023-08-08 13:56:11.100 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.021 seconds (success: True)
2023-08-08 13:56:12.100 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_REGISTERED: 'ExecutionRegisteredEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='432dd23b-81d7-41e7-9fe2-7fdda336e52e', device_url=None, device_states=[], old_state=None, new_state=None)
2023-08-08 13:56:12.101 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_STATE_CHANGED: 'ExecutionStateChangedEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='432dd23b-81d7-41e7-9fe2-7fdda336e52e', device_url=None, device_states=[], old_state=<ExecutionState.INITIALIZED: 'INITIALIZED'>, new_state=<ExecutionState.COMPLETED: 'COMPLETED'>)
2023-08-08 13:56:12.101 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.022 seconds (success: True)
2023-08-08 13:56:13.066 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.057 seconds (success: True)
2023-08-08 13:56:18.330 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_REGISTERED: 'ExecutionRegisteredEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='66a91497-7309-4f92-a698-134419ea5fc3', device_url=None, device_states=[], old_state=None, new_state=None)
2023-08-08 13:56:18.330 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_STATE_CHANGED: 'ExecutionStateChangedEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='66a91497-7309-4f92-a698-134419ea5fc3', device_url=None, device_states=[], old_state=<ExecutionState.INITIALIZED: 'INITIALIZED'>, new_state=<ExecutionState.COMPLETED: 'COMPLETED'>)
2023-08-08 13:56:18.330 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.119 seconds (success: True)
2023-08-08 13:56:19.098 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.018 seconds (success: True)
2023-08-08 13:56:20.101 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_REGISTERED: 'ExecutionRegisteredEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='508dae53-9394-46ea-8874-ee56da316187', device_url=None, device_states=[], old_state=None, new_state=None)
2023-08-08 13:56:20.101 DEBUG (MainThread) [custom_components.overkiz] Event(name=<EventName.EXECUTION_STATE_CHANGED: 'ExecutionStateChangedEvent'>, timestamp=None, setupoid=_CountingAttr(counter=452, _default=None, repr=<function obfuscate_id at 0x7f3f87def6a0>, eq=True, order=True, hash=None, init=True, on_setattr=None, alias=None, metadata={}), owner_key=None, type=None, sub_type=None, time_to_next_state=None, failed_commands=None, failure_type_code=None, failure_type=None, condition_groupoid=None, place_oid=None, label=None, metadata=None, camera_id=None, deleted_raw_devices_count=None, protocol_type=None, gateway_id=None, exec_id='508dae53-9394-46ea-8874-ee56da316187', device_url=None, device_states=[], old_state=<ExecutionState.INITIALIZED: 'INITIALIZED'>, new_state=<ExecutionState.COMPLETED: 'COMPLETED'>)
2023-08-08 13:56:20.101 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.020 seconds (success: True)

iā€™m trying to use the My position for the first time, I have it all setup and it works if I press the My button on the remote, but it does not work if i tap on the press button in the entity. What am I doing wrong ???

nothing in the logs either,

Have you programmed the My Position in your device ?
Set you device on the position where you would like your My position and puss and hold the stop/My button untill you see your device move short up and down :slight_smile:

Hi, Thanks for your reply, it seemed the issue was with the Tahma Switch I rebooted it, and all working.

Hello everyone,
Apologies for my silly questions, but Iā€™m new to custom components.
How do I update the custom component?
How should I proceed to switch back to Overkiz once the update has been done on the core?
Thanks a lot

If your use the PR integration, go to the integration panel, click on the 3 dots on the device, and reload, see screenshot, this should repull the pull request to latest version. then just restart HA.

Once it is in the core we should just be able to remove the Custom PR and install the core version.

Thanks for the very quick answer !
When I switch to overkiz, will i loose all the entity created in the PR ?

you would need to manually remove the integration first, before install the core version. It would be a clean install of overkiz, but aslong as you have not edited the entity_idā€™s everything should just install as it was.

1 Like

@imick just got this error/crash, can you stop the python crash and code it so it just slightly reports the connection error, or it a core issue ?

Logger: homeassistant.components.automation.suns_too_bright
Source: custom_components/overkiz/executor.py:91 
Integration: Automation (documentation, issues) 
First occurred: 16:33:57 (3 occurrences) 
Last logged: 16:33:57

Suns Too Bright: Choose at step 1: choice 1: Error executing script. Unexpected error for call_service at pos 1: Cannot connect to host gateway-2024-6137-2105.local:8443 ssl:default [Try again]
Suns Too Bright: Error executing script. Unexpected error for choose at pos 1: Cannot connect to host gateway-2024-6137-2105.local:8443 ssl:default [Try again]
While executing automation automation.suns_too_bright
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1155, in _create_direct_connection
    hosts = await asyncio.shield(host_resolved)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1155, in _create_direct_connection
    hosts = await asyncio.shield(host_resolved)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 874, in _resolve_host
    addrs = await self._resolver.resolve(host, port, family=self._family)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/resolver.py", line 33, in resolve
    infos = await self._loop.getaddrinfo(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 867, in getaddrinfo
    return await self.run_in_executor(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/socket.py", line 962, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
socket.gaierror: [Errno -3] Try again

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 468, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 703, in _async_call_service_step
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 665, in _async_run_long_action
    return long_task.result()
           ^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 1974, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2011, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 235, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 870, in entity_service_call
    response_data = await _handle_entity_call(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 942, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/button/__init__.py", line 124, in _async_press_action
    await self.async_press()
  File "/config/custom_components/overkiz/button.py", line 123, in async_press
    await self.executor.async_execute_command(self.entity_description.key)
  File "/config/custom_components/overkiz/executor.py", line 91, in async_execute_command
    exec_id = await self.coordinator.client.execute_command(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/backoff/_async.py", line 151, in retry
    ret = await target(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/backoff/_async.py", line 151, in retry
    ret = await target(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyoverkiz/client.py", line 628, in execute_command
    response: str = await self.execute_commands(device_url, [command], label)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/backoff/_async.py", line 151, in retry
    ret = await target(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyoverkiz/client.py", line 656, in execute_commands
    response: dict = await self.__post("exec/apply", payload)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyoverkiz/client.py", line 852, in __post
    async with self.session.post(
  File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 1141, in __aenter__
    self._resp = await self._coro
                 ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 536, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 540, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 901, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1169, in _create_direct_connection
    raise ClientConnectorError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host gateway-2024-6137-2105.local:8443 ssl:default [Try again]

plus it is strange as the shade did set the my position crorectly.

Thanks for reporting @andyblac. We donā€™t retry for this command, which we should do, will fix.

Regarding a better error reporting / trace, that is actually an open issue on core which is not only applicable for the local API. Will be fixed eventually as well.

yeah, these types of error are good for debugging, so. maybe the core need a debug toggle for system logging, like the integrations do. ?

This will already be handled by debug logging of an integration.

Quick question - will this support Tahoma Div Rail v2?

1 Like

Back in town

(mick, I do not know where i can post that on the GIT)

Just reconfigured back my installation with local API in debug mode and compared the two modes

Seems that they are not working the same way.

In Cloud mode there are much more attributes update commands that in local API one
I suppose this is a limitation of event handling in local API mode that is compensated by the Somfy cloud services in some ways.

This might be an issue for devices working in asynchronous IO mode (such as remote devices runing on batteries) that are reporting their updated attributes every 5 to 10 minutes to the box (the switch in my case) but that attributes updates do not seem to be sent back to HA when using local API. But if we reboot HA, we get the right attributes updated.

Regarding climates i have HeatingValveIOComponent in my system
They are prefectly recognised, configuredā€¦

BUT

They suffer the issue i just described above (requested temperature when updated on the device are only reported when i reboot HA, but they are reported)

AND

When the current temperature is received, there are some casting issues. I put additional debug message to better understand from where they are coming from in file valve_heating_temperature_interface i added two lines

    def current_temperature(self) -> float | None:
        LOGGER.debug('current temperature')
        LOGGER.debug(self.temperature_device.states[OverkizState.CORE_TEMPERATURE])
        """Return the current temperature."""
        if temperature := self.temperature_device.states[OverkizState.CORE_TEMPERATURE]:
            return temperature.value_as_float

        return None

Result was explaining the errorā€¦ Integer with value 23.1

2023-09-03 11:33:03.384 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.156 seconds (success: True)

2023-09-03 11:33:03.385 DEBUG (MainThread) [custom_components.overkiz] current temperature

2023-09-03 11:33:03.385 DEBUG (MainThread) [custom_components.overkiz] State(name='core:TemperatureState', type=<DataType.FLOAT: 2>, value=23.1)

2023-09-03 11:33:03.403 DEBUG (MainThread) [custom_components.overkiz] current temperature

2023-09-03 11:33:03.404 DEBUG (MainThread) [custom_components.overkiz] State(name='core:TemperatureState', type=<DataType.FLOAT: 2>, value=23.3)

2023-09-03 11:33:03.417 DEBUG (MainThread) [custom_components.overkiz] current temperature

2023-09-03 11:33:03.417 DEBUG (MainThread) [custom_components.overkiz] State(name='core:TemperatureState', type=<DataType.INTEGER: 1>, value=23.1)

2023-09-03 11:33:03.424 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved

Traceback (most recent call last):

  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 229, in _handle_refresh_interval

    await self._async_refresh(log_failures=True, scheduled=True)

  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 374, in _async_refresh

    self.async_update_listeners()

  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 164, in async_update_listeners

    update_callback()

  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 431, in _handle_coordinator_update

    self.async_write_ha_state()

  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 746, in async_write_ha_state

    self._async_write_ha_state()

  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 810, in _async_write_ha_state

    attr.update(self.state_attributes or {})

                ^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 301, in state_attributes

    hass, self.current_temperature, temperature_unit, precision

          ^^^^^^^^^^^^^^^^^^^^^^^^

  File "/config/custom_components/overkiz/climate_entities/valve_heating_temperature_interface.py", line 102, in current_temperature

    return temperature.value_as_float

           ^^^^^^^^^^^^^^^^^^^^^^^^^^

Same when updating requested temperature from HA

Is this because the cloud version has a layer cleaning casting issues ? Like it seems they are cleaning event handling and propagation of attribute updates ?

2023-09-03 12:05:30.147 DEBUG (MainThread) [custom_components.overkiz] Finished fetching device events data in 0.037 seconds (success: True)
2023-09-03 12:05:30.148 DEBUG (MainThread) [custom_components.overkiz] current temperature
2023-09-03 12:05:30.148 DEBUG (MainThread) [custom_components.overkiz] State(name='core:TemperatureState', type=<DataType.FLOAT: 2>, value=23.1)
2023-09-03 12:05:30.174 DEBUG (MainThread) [custom_components.overkiz] current temperature
2023-09-03 12:05:30.174 DEBUG (MainThread) [custom_components.overkiz] State(name='core:TemperatureState', type=<DataType.FLOAT: 2>, value=23.3)
2023-09-03 12:05:30.198 DEBUG (MainThread) [custom_components.overkiz] current temperature
2023-09-03 12:05:30.198 DEBUG (MainThread) [custom_components.overkiz] State(name='core:TemperatureState', type=<DataType.INTEGER: 1>, value=23.1)
2023-09-03 12:05:30.200 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140681185243712] core:TemperatureState is not a float
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 226, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1974, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2011, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 235, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 870, in entity_service_call
    response_data = await _handle_entity_call(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 942, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 617, in async_service_temperature_set
    await entity.async_set_temperature(**kwargs)
  File "/config/custom_components/overkiz/climate_entities/valve_heating_temperature_interface.py", line 110, in async_set_temperature
    await self.executor.async_execute_command(
  File "/config/custom_components/overkiz/executor.py", line 103, in async_execute_command
    await self.coordinator.async_refresh()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 262, in async_refresh
    await self._async_refresh(log_failures=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 374, in _async_refresh
    self.async_update_listeners()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 164, in async_update_listeners
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 431, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 746, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 810, in _async_write_ha_state
    attr.update(self.state_attributes or {})
                ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 301, in state_attributes
    hass, self.current_temperature, temperature_unit, precision
          ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/overkiz/climate_entities/valve_heating_temperature_interface.py", line 102, in current_temperature
    return temperature.value_as_float
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyoverkiz/models.py", line 334, in value_as_float
    raise TypeError(f"{self.name} is not a float")
TypeError: core:TemperatureState is not a float

Hi @imick , I would like to ask you about the idea of decreasing UPDATE_INTERVAL for local API to a lower value, something like 5s? Or to decrease the interval just in cases when some device is in some movement state, like blinds/covers.
I suppose the state is periodically fetched by the client and the box doesnā€™t push any events directly to the client.