djtimca / haomnilogic

Hayward Omnilogic integration for Home Assistant available through HACS
Apache License 2.0
18 stars 6 forks source link

Support "version 1 lights" #59

Closed hildebrau closed 1 month ago

hildebrau commented 1 month ago

Greetings.

A quick background: I have an Omnilogic controller for my pool. I have two colorlogic v2 light arrays (pool & spa).. and then I have some color led bubblers that I was told are Brilliant Wonders® 4" LED Bubbler. The pool builder initially linked them on the same light controller as my pool & spa; but they wouldn't match the colors. The bubblers were always "doing their own thing". They then installed some other "controller" module to separate it out.

I have been able to get my pool & spa lights working w/ the service call omnilogic.set_v2_lights. However, that same call on my bubbler lights results in errors. The short version of the error is omnilogic.OmniLogicException: Cannot set effect speed or brightness on version 1 lights.. The long version is below in the code box below. I'm not sure where the "version 1" is coming from or if they are even version one; but I'm willing to believe it. For it to cycle the colors, it has to power cycle them, essentially, in a rotation.

2024-06-02 16:52:39.003 ERROR (MainThread) [homeassistant.helpers.script.websocket_api_script] websocket_api script: Error executing script. Unexpected error for call_service at pos 1: Cannot set effect speed or brightness on version 1 lights.
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 501, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 736, in _async_call_service_step
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 699, in _async_run_long_action
    return await long_task
           ^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2738, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2779, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 975, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 1047, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/omnilogic/light.py", line 211, in async_set_v2effect
    raise OmniLogicException(
omnilogic.OmniLogicException: Cannot set effect speed or brightness on version 1 lights.
2024-06-02 16:52:39.005 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140314270020416] Error handling message: Unknown error (unknown_error) <my name>f from 172.18.0.1 (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 27, in _handle_async_response
    await func(hass, connection, msg)
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 793, in handle_execute_script
    script_result = await script_obj.async_run(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1731, in async_run
    return await asyncio.shield(create_eager_task(run.async_run()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 451, in async_run
    await self._async_step(log_exceptions=False)
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 503, in _async_step
    self._handle_exception(
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 533, in _handle_exception
    raise exception
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 501, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 736, in _async_call_service_step
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 699, in _async_run_long_action
    return await long_task
           ^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2738, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2779, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 975, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 1047, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/omnilogic/light.py", line 211, in async_set_v2effect
    raise OmniLogicException(
omnilogic.OmniLogicException: Cannot set effect speed or brightness on version 1 lights.

I did some Wireshark captures on my edge firewall while I used the Omnilogic App to turn on those bubbler lights and change colors on them and then turn them off. I tried to clean up the UDP stream with relevant information below. LMK if you need something more from that file.

<Request><Name>SetStandAloneLightShow</Name><Parameters>
<Parameter name="PoolID" dataType="int">1</Parameter>
<Parameter name="LightID" dataType="int" alias="EquipmentID">34</Parameter>
<Parameter name="Show" dataType="byte">15</Parameter>
<Parameter name="Speed" dataType="byte">4</Parameter>
<Parameter name="Brightness" dataType="byte">4</Parameter>
<Parameter name="Reserved" dataType="byte">0</Parameter>
<Parameter name="IsCountDownTimer" dataType="bool">0</Parameter>
<Parameter name="StartTimeHours" dataType="int">0</Parameter>
<Parameter name="StartTimeMinutes" dataType="int">0</Parameter>
<Parameter name="EndTimeHours" dataType="int">0</Parameter>
<Parameter name="EndTimeMinutes" dataType="int">0</Parameter>
<Parameter name="DaysActive" dataType="int">0</Parameter>
<Parameter name="Recurring" dataType="bool">0</Parameter></Parameters></Request>

<Request><Name>Ack</Name><Parameters /></Request>

<Request><Name>SetStandAloneLightShow</Name><Parameters>
<Parameter name="PoolID" dataType="int">1</Parameter>
<Parameter name="LightID" dataType="int" alias="EquipmentID">34</Parameter>
<Parameter name="Show" dataType="byte">1</Parameter>
<Parameter name="Speed" dataType="byte">4</Parameter>
<Parameter name="Brightness" dataType="byte">4</Parameter>
<Parameter name="Reserved" dataType="byte">0</Parameter>
<Parameter name="IsCountDownTimer" dataType="bool">0</Parameter>
<Parameter name="StartTimeHours" dataType="int">0</Parameter>
<Parameter name="StartTimeMinutes" dataType="int">0</Parameter>
<Parameter name="EndTimeHours" dataType="int">0</Parameter>
<Parameter name="EndTimeMinutes" dataType="int">0</Parameter>
<Parameter name="DaysActive" dataType="int">0</Parameter>
<Parameter name="Recurring" dataType="bool">0</Parameter></Parameters></Request>

<Request><Name>SetStandAloneLightShow</Name><Parameters>
<Parameter name="PoolID" dataType="int">1</Parameter>
<Parameter name="LightID" dataType="int" alias="EquipmentID">34</Parameter>
<Parameter name="Show" dataType="byte">16</Parameter>
<Parameter name="Speed" dataType="byte">4</Parameter>
<Parameter name="Brightness" dataType="byte">4</Parameter>
<Parameter name="Reserved" dataType="byte">0</Parameter>
<Parameter name="IsCountDownTimer" dataType="bool">0</Parameter>
<Parameter name="StartTimeHours" dataType="int">0</Parameter>
<Parameter name="StartTimeMinutes" dataType="int">0</Parameter>
<Parameter name="EndTimeHours" dataType="int">0</Parameter>
<Parameter name="EndTimeMinutes" dataType="int">0</Parameter>
<Parameter name="DaysActive" dataType="int">0</Parameter>
<Parameter name="Recurring" dataType="bool">0</Parameter></Parameters></Request>

<Request><Name>Ack</Name><Parameters /></Request>

<Request><Name>Ack</Name><Parameters /></Request>

<Request><Name>Ack</Name><Parameters /></Request>

<Request><Name>Ack</Name><Parameters /></Request>
djtimca commented 1 month ago

For a version one lights you do not need to use the customer service.

Simply use the light.turn_on service like any other light. Once the light is turned on, you will have the option to select the supported light effects.