Code Monkey home page Code Monkey logo

haomnilogic's People

Contributors

djtimca avatar lurgh avatar n3rdp1um23 avatar twillux avatar wrt54g avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

haomnilogic's Issues

Can't see my valves in HA

Just installed this integration.
I see all of the devices/entities that I expect, but not the two motorized valves in my system. Without the valves, I can't create the automations I want (switch from Pool Mode to Spa Mode, etc).

From various other notes and tickets, it appears that "some" users can see and control their valves. How do I troubleshoot this?

Thanks

Multiple instances of the same Body of Water's equipment in the other BOWs

Thanks for fixing Issue #1!

When I view my switches, I get a redundant representation of equipment:
Redundant Equipment

There is no cleaner for the spa, nor is there a waterfall. I assume this is coming from the data from the Hayward API, and I can of course not show it in a dashboard or expose it to Google Home, but is this something that needs a fix to the integration?

API documentation

Sorry to raise an issue when there’s not really anything to report, but I’d like to find out the best way to get hold of the documentation for the Hayward API, both cloud and local. I understand they only supply it under NDA. What’s the best way to approach them to get hold of it?

Assume Switch / Light State When Changed

The Hayward API is slow in updating the telemetry. Currently some switches and lights in this integration use a sleep to 'pause' HA until the state will be updated in the telemetry.

To handle the delay better the switches and lights should 'assume' the new state for a time (45 seconds for example) to allow the telemetry to catch up.

Enhancement Request: Opt-in to Long-Term Statistics on all Sensors

Wanted to submit a feature request to add long-term statistics to key sensors exposed to HA for numerical items such as temperatures, pump speeds, chlorinator salt cell level and setpoint, heater setpoints, etc. Below is the reference article outlining the properties to add to the sensor entities to opt-in to statistics:

https://developers.home-assistant.io/docs/core/entity/sensor#long-term-statistics

Thanks for the amazing work on this integration!!!

Implement Local API

Two days in a row the Hayward API has been offline, affecting both this integration and the Hayward app.

IIRC there was mention of a local API, opening this as a request to implement it.

It could also help with all the API latency issues Hayward has.

HA 2023.3 throwing errors with Omnilogic integration

Error fetching Omnilogic data: Error updating from OmniLogic: Error converting Hayward data to JSON.
5:40:18 AM – (ERROR) Omnilogic (custom integration)
Detected integration that called async_setup_platforms instead of awaiting async_forward_entry_setups; this will fail in version 2023.3. Please report issue to the custom integration author for omnilogic using this method at custom_components/omnilogic/init.py, line 62: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
February 11, 2023 at 11:36:34 AM – (WARNING) helpers/frame.py

Need sample of how to handle changing light mode.

My pool lights, which are not Hayward, have the following state attributes:

`effect_list:

  • VOODOO_LOUNGE
  • DEEP_BLUE_SEA
  • ROYAL_BLUE
  • AFTERNOON_SKY
  • AQUA_GREEN
  • EMERALD
  • CLOUD_WHITE
  • WARM_RED
  • FLAMINGO
  • VIVID_VIOLET
  • SANGRIA
  • TWILIGHT
  • TRANQUILITY
  • GEMSTONE
  • USA
  • MARDI_GRAS
  • COOL_CABARET
    supported_color_modes:
  • onoff
    friendly_name: Pool Lights
    supported_features: 4`

Is there a way to change the light mode on these lights?

Error durring initial startup having to do with Backyard

Just installed Home Assistant Core yesterday, running version 2022.6.7.

Added the Omnilogic device, not sure how to tell the version on it, but it installed yesterday.

Here's the error I'm getting:

Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/config_entries.py", line 339, in async_setup result = await component.async_setup_entry(hass, self) File "/usr/src/homeassistant/homeassistant/components/omnilogic/__init__.py", line 41, in async_setup_entry await api.get_telemetry_data() File "/usr/local/lib/python3.9/site-packages/omnilogic/__init__.py", line 1023, in get_telemetry_data if type(config_item["Backyard"]["Sensor"]) == dict: KeyError: 'Sensor'

Here's the output I got using your debugging tool

Saved file: output_116_9ac0875443_mspconfig.xml Saved file: output_116_9c26ae8f1d_telemetry.xml An error occurred: list indices must be integers or slices, not str Press enter to clear.

Some additional info: the pool has a spa and LED color lights. It also has a breaker that controls an outlet which powers backyard lights. That’s the “backyard” switch.

Are Hayward themes supported in the API?

Hayward has a “themes” feature, whereby you can group devices etc. and control them as a single entity. Is there any support for these in the API? I realise I could duplicate this functionality in HA itself, but just wondering….

Cannot toggle a Switch which isn't associated with a BoW

I can't control lights/switches that are not associated with a Body of Water in Omnilogic. I have a patch for this which I have been using for months with old switch.py code to work around the issue and it continues to work for me in this release.

I opened a PR to share the patch that works for me, for your reference, but it may not be optimal.

My telemetry file is attached.

telemetry.json.txt

Switches should assume the new state until next refresh

Currently, when I toggle a switch for a water feature (Jets/Waterfalls/etc) the switch stays at the previous state until the next time the integration polls the omnilogic API. Could these switches assume the new state until the next poll?

This appears to be related to #18 , which was closed saying that the feature was already there, but it does not appear to be working for me. Is there something I need to do in order to have the integration opportunistically assume the new switch position until the next poll?

Variable Speed Pumps only have On/Off

My pumps are variable speed, but in HASS they present as on/off devices. Generally this is fine, I can always go to the Hayward app to change speeds, but it would be ideal if they could be adjusted from within HASS.

And thank you for all the work so far!

Pool Fountain Not present in HAAS

In my Omni App I have a Pool Fountain feature, should be showing in my uploaded telemetry, it is not showing in HAAS. It controls the bubblers.

Color Logic V2 brightness control

Hello,

I recently upgraded to the HACS integration to gain all of the extra functionality, and I noticed a few issues related to brightness control.

The light reports a supported_color_modes of "onoff", this prevents normal dimming controls from working. It looks like the light should return a supported_color_mode and a color_mode of ColorMode.BRIGHTNESS according to the developer docs at https://developers.home-assistant.io/docs/core/entity/light/.

The integration exposes the brightness as a value between 0-4, which maps to 20%,40%,60%,80%,100% on the light itself. It seems like everything in Home Assistant expects light brightness values to be a value between 0-255 with 0 being "off" and 255 bring "full brightness". This causes things like brightness control sliders to not work well because they expect to call a turn_on service and pass in a brightness parameter within the range of 0-255. Passing a brightness parameter does not currently seem to work at all (likely because of the previous issue related to color_mode settings), but even if that was fixed, brightness sliders in the dashboard likely would not work properly unless you only used the first few positions of the slider. Ideally, the integration would map 0-255 values, perhaps along the following mapping:

0: off
51: 20%
102: 40%
153: 60%
204: 80%
255: 100%

If the turn_on service receives a value other than those in the mapping, then it should either select the closest valid step, or perhaps move to the next highest step. I am not sure if there is already guidance over which of these options should be selected, but my fans appear to always move to the next highest step (so requesting a value of 52 would go to 40% rather than to 20%).

I have not yet looked into the speed control, but dashboard sliders in the custom:light-entity-card don't currently seem to work for that either, but I'll work on figuring out what is going on there after the brightness controls are working properly.

I read that one of your issues is that you do not have a ColorLogic V2 light with brightness/speed control to test with. I do, and I am more than happy to assist with testing/integration of these features as needed.

Omnilogic integration failing to load since HA update to 2023.5

This integration is failing to load.
Started a few days ago after HA update to 2023.5 (I think).

From logs:

Logger: homeassistant.config_entries
Source: custom_components/omnilogic/init.py:62
Integration: Omnilogic (documentation, issues)
First occurred: May 10, 2023 at 7:57:48 PM (2 occurrences)
Last logged: 2:26:52 PM

Error setting up entry Pool_Controller for omnilogic
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 387, in async_setup
result = await component.async_setup_entry(hass, self)
File "/config/custom_components/omnilogic/init.py", line 62, in async_setup_entry
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
AttributeError: 'ConfigEntries' object has no attribute 'async_setup_platforms'

Setting Pump Speed Errors out in HA, though Changes Speed

Hey! I was playing around with the pump side of things and was able to follow #9 to add a slider, have it update when the pump updates (through the Omnilogic app or manually using the Pool controller), and have added some automation as well!

However, I've now simulated your "set speed buttons" and when it calls the service, I receive the following error "Cannot set speed on a non-variable speed pump" even though a few seconds later I can see that the gauge has changed successfully.

Before
image

After
image

As mentioned earlier, the gauge updates (as it's using the value directly from the filter speed sensor and not the number entity) and I've also confirmed in the OmniLogic app that the speed has in fact changed.

Here's the error that I can see in HAs logs

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/omnilogic/switch.py:235
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 10:49:04 AM (4 occurrences)
Last logged: 10:58:31 AM

[140039323217200] Cannot set speed on a non-variable speed pump.
[140039998787696] Cannot set speed on a non-variable speed pump.
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 193, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1704, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1741, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 697, in handle_service
    await service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 680, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 964, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 717, in _handle_entity_call
    await result
  File "/config/custom_components/omnilogic/switch.py", line 235, in async_set_speed
    raise OmniLogicException("Cannot set speed on a non-variable speed pump.")
omnilogic.OmniLogicException: Cannot set speed on a non-variable speed pump.

I'm not sure if it's caused by the pump type being not SINGLE as mentioned in the switch code (seen below), or something going out of sync along the way. For reference, here's the pump in use - TriStar VS 950 Omni

async def async_set_speed(self, speed):
"""Set the switch speed."""
if self._pump_type != "SINGLE":
if self._min_speed <= speed <= self._max_speed:
success = await self.coordinator.api.set_relay_valve(
int(self._item_id[1]),
int(self._item_id[3]),
int(self._item_id[-1]),
speed,
)
if success:
self.async_write_ha_state()
else:
raise OmniLogicException(
"Cannot set speed. Speed is outside pump range."
)
else:
raise OmniLogicException("Cannot set speed on a non-variable speed pump.")

If there's anything else I can include to help or troubleshoot, just let me know!

Possible to get the power usage of pump?

Appears to be publishing it to the app experience but wasn't sure if it was coming back from their API or not...?
Would be interesting to be able to track power usage of the pump in my HA
IMG_1586
.

No Entity to report Average Salt level

Hey there, looking through my app and I'm seeing that there's a diagnostic for instant salt, that is showing in the integration as pool_chlorinator_salt_level, but there's no corresponding entity for Average Salt. I'd rather alert off of average salt because the value is continuously available, while Instant Salt is only available while the system is actively chlorinating.

PS: Any updates on local connectivity?

Unexpected error fetching Omnilogic data: syntax error: line 1, column 0

With 1.0.6:

This error originated from a custom integration.

Logger: custom_components.omnilogic.common
Source: custom_components/omnilogic/common.py:47 
Integration: Omnilogic 
First occurred: June 8, 2022, 11:01:00 PM (1 occurrences) 
Last logged: June 8, 2022, 11:01:00 PM

Unexpected error fetching Omnilogic data: syntax error: line 1, column 0
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 191, in _async_refresh
    self.data = await self._async_update_data()
  File "/config/custom_components/omnilogic/common.py", line 47, in _async_update_data
    data = await self.api.get_telemetry_data()
  File "/usr/local/lib/python3.9/site-packages/omnilogic/__init__.py", line 1006, in get_telemetry_data
    site_alarms = self.alarms_to_json(this_alarm)
  File "/usr/local/lib/python3.9/site-packages/omnilogic/__init__.py", line 694, in alarms_to_json
    alarmsXML = ElementTree.fromstring(alarms)
  File "/usr/local/lib/python3.9/xml/etree/ElementTree.py", line 1347, in XML
    parser.feed(text)
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0

Missing Air Temp Sensor Entity

Issue to troubleshoot missing Air Temp sensor entity in HA.

I have a pool/spa combo with shared equipment, and both the pool and spa temp sensors come in with no issue. For some reason however, the air temperature sensor entity itself is missing. Telemetry and MSP configs below; note that the Replit repository also errored out on me, so I cloned the main.py and ran locally with a few modifications using the base omnilogic-api and the deprecated 'get_msp_config_file' function; hope this is still of value for troubleshooting purposes?

One additional note: I have a Glacier Chiller, configured within the new Heater/Chiller capability of the Omnilogic using priorities to control heat vs cool to setpoint. I also have a temperature sensor on the chilled water return line, wired to the Solar input on the OmniPL (input 3). Understand based on a previous issue that this isn't coming in with the telemetry from the Hayward API (yet I hope!), but wanted to mention.

Telemetry JSON
[{'systemId': 'REDACTED', 'statusVersion': '9', 'status': '1', 'state': '1', 'configUpdatedTime': '2022-07-24T16:11:08.965Z', 'datetime': '2022-07-31T08:16:20.8187551', 'Relays': [], 'BOWS': [{'systemId': '2', 'flow': '1', 'waterTemp': '84', 'Name': 'Pool', 'Supports-Spillover': 'yes', 'Filter': {'systemId': '3', 'valvePosition': '1', 'filterSpeed': '35', 'filterState': '1', 'lastSpeed': '65', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Alarms': []}, 'VirtualHeater': {'systemId': '16', 'Current-Set-Point': '85', 'enable': 'yes'}, 'Heater': {'systemId': '66', 'heaterState': '0', 'enable': 'yes', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': {'VirtualHeater': {'System-Id': '66', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '67', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'enable': 'yes', 'systemId': '16'}}, 'Name': 'Chiller', 'Alarms': []}, 'Chlorinator': {'systemId': '22', 'operatingMode': '1', 'Timed-Percent': '25', 'scMode': '0', 'chlrError': '0', 'chlrAlert': '0', 'avgSaltLevel': '3507', 'instantSaltLevel': '3207', 'status': '132', 'Name': 'Chlorinator', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': [{'System-Id': '24', 'Name': 'Chlorinator1', 'Type': 'PET_CHLORINATOR', 'Chlorinator-Type': 'CHLOR_TYPE_MAIN_PANEL', 'Enabled': 'yes'}], 'Alarms': []}, 'CSAD': {'systemId': '0', 'ph': '', 'orp': '', 'status': '0', 'mode': '0', 'Alarms': []}, 'Lights': [{'systemId': '5', 'lightState': '0', 'currentShow': '3', 'Name': 'Lights', 'Type': 'COLOR_LOGIC_UCL', 'V2': 'no', 'Alarms': []}], 'Relays': [], 'Pumps': [{'systemId': '4', 'pumpState': '0', 'pumpSpeed': '0', 'lastSpeed': '100', 'Name': 'Waterfall', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_WATERFALL', 'Min-Pump-Speed': '18', 'Max-Pump_Speed': '100', 'Alarms': []}, {'systemId': '19', 'pumpState': '0', 'pumpSpeed': '0', 'lastSpeed': '100', 'Name': 'Cleaner', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_CLEANER', 'Min-Pump-Speed': '18', 'Max-Pump_Speed': '100', 'Alarms': []}], 'Heaters': [{'systemId': '18', 'heaterState': '0', 'enable': 'no', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': {'VirtualHeater': {'System-Id': '18', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '17', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'enable': 'no', 'systemId': '16'}}, 'Name': 'Gas Heater', 'Alarms': []}, {'systemId': '66', 'heaterState': '0', 'enable': 'yes', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': {'VirtualHeater': {'System-Id': '66', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '67', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'enable': 'yes', 'systemId': '16'}}, 'Name': 'Chiller', 'Alarms': []}]}, {'systemId': '8', 'flow': '1', 'waterTemp': '-1', 'Name': 'Spa', 'Supports-Spillover': 'yes', 'Filter': {'systemId': '10', 'valvePosition': '1', 'filterSpeed': '0', 'filterState': '0', 'lastSpeed': '50', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Alarms': []}, 'VirtualHeater': {'systemId': '15', 'Current-Set-Point': '98', 'enable': 'no'}, 'Heater': {'systemId': '67', 'heaterState': '0', 'enable': 'no', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': {'VirtualHeater': {'System-Id': '67', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '66', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'enable': 'no', 'systemId': '15'}}, 'Name': 'Chiller', 'Alarms': []}, 'Chlorinator': {'systemId': '23', 'operatingMode': '1', 'Timed-Percent': '0', 'scMode': '0', 'chlrError': '0', 'chlrAlert': '0', 'avgSaltLevel': '0', 'instantSaltLevel': '0', 'status': '0', 'Name': 'Chlorinator', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': [{'System-Id': '25', 'Name': 'Chlorinator1', 'Type': 'PET_CHLORINATOR', 'Chlorinator-Type': 'CHLOR_TYPE_MAIN_PANEL', 'Enabled': 'yes'}], 'Alarms': []}, 'CSAD': {'systemId': '0', 'ph': '', 'orp': '', 'status': '0', 'mode': '0', 'Alarms': []}, 'Lights': [], 'Relays': [], 'Pumps': [{'systemId': '14', 'pumpState': '0', 'pumpSpeed': '0', 'lastSpeed': '100', 'Name': 'Jets', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_JETS', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Alarms': []}], 'Heaters': [{'systemId': '17', 'heaterState': '0', 'enable': 'yes', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': {'VirtualHeater': {'System-Id': '17', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '18', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'enable': 'yes', 'systemId': '15'}}, 'Name': 'Gas Heater', 'Alarms': []}, {'systemId': '67', 'heaterState': '0', 'enable': 'no', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Operation': {'VirtualHeater': {'System-Id': '67', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '66', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'enable': 'no', 'systemId': '15'}}, 'Name': 'Chiller', 'Alarms': []}]}], 'BackyardName': 'REDACTED', 'Msp-Vsp-Speed-Format': 'RPM', 'Msp-Time-Format': '12 Hour Format', 'Units': 'Standard', 'Msp-Chlor-Display': 'Salt', 'Msp-Language': 'English', 'Unit-of-Measurement': 'Standard', 'Alarms': []}]

MSP Config XML
[{'System': {'Msp-Vsp-Speed-Format': 'RPM', 'Msp-Time-Format': '12 Hour Format', 'Units': 'Standard', 'Msp-Chlor-Display': 'Salt', 'Msp-Language': 'English', 'UI-Display-Mode': 'standard', 'UI-MoodColor-Enabled': 'Yes', 'UI-Heater-SimpleMode': 'Yes', 'UI-Filter-SimpleMode': 'Yes', 'UI-Lights-SimpleMode': 'Yes'}, 'Backyard': {'System-Id': '0', 'Name': 'Backyard', 'Service-Mode-Timeout': '0', 'Sensor': [{'System-Id': '6', 'Name': 'Air Temp', 'Type': 'SENSOR_AIR_TEMP', 'Units': 'UNITS_FAHRENHEIT'}, {'System-Id': '38', 'Name': 'Generator', 'Type': 'SENSOR_EXT_INPUT', 'Units': 'UNITS_FAHRENHEIT'}, {'System-Id': '59', 'Name': 'Chiller Temp', 'Type': 'SENSOR_WATER_TEMP', 'Units': 'UNITS_FAHRENHEIT'}], 'Body-of-water': [{'System-Id': '2', 'Name': 'Pool', 'Type': 'BOW_POOL', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Shared-Priority': 'SHARED_EQUIPMENT_LOW_PRIORITY', 'Shared-Equipment-System-ID': '8', 'Supports-Spillover': 'yes', 'Size-In-Gallons': '11500', 'Filter': {'System-Id': '3', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Vsp-Low-Pump-Speed': '35', 'Vsp-Medium-Pump-Speed': '65', 'Vsp-High-Pump-Speed': '90', 'Vsp-Custom-Pump-Speed': '65', 'Freeze-Protect-Override-Interval': '7200'}, 'Pump': [{'System-Id': '4', 'Name': 'Waterfall', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_WATERFALL', 'Priming-Enabled': 'no', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Vsp-Medium-Pump-Speed': '100', 'Vsp-Custom-Pump-Speed': '100', 'Vsp-High-Pump-Speed': '100', 'Vsp-Low-Pump-Speed': '100'}, {'System-Id': '19', 'Name': 'Cleaner', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_CLEANER', 'Priming-Enabled': 'no', 'External-Interlock': [{'External-Interlock-Enable': 'yes', 'External-Interlock-Source': 'ILK_SOURCE_FILTER', 'External-Interlock-Source-System-Id': '3', 'External-Interlock-Compare-Type': 'ILK_COMPARE_EQUAL_TO', 'External-Interlock-ActiveLevel': '0', 'External-Interlock-ActionState': '0', '#text': '1'}, {'External-Interlock-Enable': 'yes', 'External-Interlock-Source': 'ILK_SOURCE_VALVES_SPA', 'External-Interlock-Source-System-Id': '3', 'External-Interlock-Compare-Type': 'ILK_COMPARE_EQUAL_TO', 'External-Interlock-ActiveLevel': '1', 'External-Interlock-ActionState': '0', '#text': '2'}], 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Vsp-Medium-Pump-Speed': '100', 'Vsp-Custom-Pump-Speed': '100', 'Vsp-High-Pump-Speed': '100', 'Vsp-Low-Pump-Speed': '100'}], 'ColorLogic-Light': {'System-Id': '5', 'Name': 'Lights', 'Type': 'COLOR_LOGIC_UCL', 'V2-Active': 'no'}, 'Sensor': [{'System-Id': '7', 'Name': 'Water Temp', 'Type': 'SENSOR_WATER_TEMP', 'Units': 'UNITS_FAHRENHEIT'}, {'System-Id': '27', 'Name': 'Flow Switch', 'Type': 'SENSOR_FLOW', 'Units': 'UNITS_ACTIVE_INACTIVE'}], 'Heater': {'System-Id': '16', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Mode': 'HTR_MODE_COOLING', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'External-Interlock': {'External-Interlock-Enable': 'yes', 'External-Interlock-Source': 'ILK_SOURCE_PUMP', 'External-Interlock-Source-System-Id': '19', 'External-Interlock-Compare-Type': 'ILK_COMPARE_EQUAL_TO', 'External-Interlock-ActiveLevel': '1', 'External-Interlock-ActionState': '0', '#text': '1'}, 'Operation': [{'Heater-Equipment': {'System-Id': '18', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '17'}, '#text': 'PEO_HEATER_EQUIPMENT'}, {'Heater-Equipment': {'System-Id': '66', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '67'}, '#text': 'PEO_HEATER_EQUIPMENT'}]}, 'Chlorinator': {'System-Id': '22', 'Name': 'Chlorinator', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'yes', 'Mode': 'CHLOR_OP_MODE_TIMED', 'Timed-Percent': '25', 'SuperChlor-Timeout': '24', 'Cell-Type': 'CELL_TYPE_T15', 'Salt-Monitor': 'LOW_SALT', 'Dispenser-Type': 'SALT_DISPENSING', 'Operation': {'Chlorinator-Equipment': {'System-Id': '24', 'Name': 'Chlorinator1', 'Type': 'PET_CHLORINATOR', 'Chlorinator-Type': 'CHLOR_TYPE_MAIN_PANEL', 'Enabled': 'yes'}, '#text': 'PEO_CHLORINATOR_EQUIPMENT'}}, '#text': '01', 'Relays': [], 'Lights': [{'System-Id': '5', 'Name': 'Lights', 'Type': 'COLOR_LOGIC_UCL', 'V2-Active': 'no'}], 'Heaters': [{'Name': 'Gas Heater', 'System-Id': '16', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '18', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '17'}, '#text': 'PEO_HEATER_EQUIPMENT'}}, {'Name': 'Chiller', 'System-Id': '16', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '66', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '67'}, '#text': 'PEO_HEATER_EQUIPMENT'}}]}, {'System-Id': '8', 'Name': 'Spa', 'Type': 'BOW_SPA', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Shared-Priority': 'SHARED_EQUIPMENT_HIGH_PRIORITY', 'Shared-Equipment-System-ID': '2', 'Supports-Spillover': 'yes', 'Size-In-Gallons': '500', 'Filter': {'System-Id': '10', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Vsp-Low-Pump-Speed': '50', 'Vsp-Medium-Pump-Speed': '70', 'Vsp-High-Pump-Speed': '90', 'Vsp-Custom-Pump-Speed': '80', 'Freeze-Protect-Override-Interval': '7200'}, 'Sensor': [{'System-Id': '11', 'Name': 'Water Temp', 'Type': 'SENSOR_WATER_TEMP', 'Units': 'UNITS_FAHRENHEIT'}, {'System-Id': '28', 'Name': 'Flow Switch', 'Type': 'SENSOR_FLOW', 'Units': 'UNITS_ACTIVE_INACTIVE'}, {'System-Id': '65', 'Name': 'SolarSensor', 'Type': 'SENSOR_SOLAR_TEMP', 'Units': 'UNITS_FAHRENHEIT'}], 'Pump': {'System-Id': '14', 'Name': 'Jets', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_JETS', 'Priming-Enabled': 'no', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Vsp-Medium-Pump-Speed': '100', 'Vsp-Custom-Pump-Speed': '100', 'Vsp-High-Pump-Speed': '100', 'Vsp-Low-Pump-Speed': '100'}, 'Heater': {'System-Id': '15', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': [{'Heater-Equipment': {'System-Id': '17', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '18'}, '#text': 'PEO_HEATER_EQUIPMENT'}, {'Heater-Equipment': {'System-Id': '67', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '66'}, '#text': 'PEO_HEATER_EQUIPMENT'}]}, 'Chlorinator': {'System-Id': '23', 'Name': 'Chlorinator', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Mode': 'CHLOR_OP_MODE_TIMED', 'Timed-Percent': '5', 'SuperChlor-Timeout': '24', 'Cell-Type': 'CELL_TYPE_T15', 'Salt-Monitor': 'LOW_SALT', 'Dispenser-Type': 'SALT_DISPENSING', 'Operation': {'Chlorinator-Equipment': {'System-Id': '25', 'Name': 'Chlorinator1', 'Type': 'PET_CHLORINATOR', 'Chlorinator-Type': 'CHLOR_TYPE_MAIN_PANEL', 'Enabled': 'yes'}, '#text': 'PEO_CHLORINATOR_EQUIPMENT'}}, '#text': '02', 'Relays': [], 'Lights': [], 'Heaters': [{'Name': 'Gas Heater', 'System-Id': '15', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '17', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '18'}, '#text': 'PEO_HEATER_EQUIPMENT'}}, {'Name': 'Chiller', 'System-Id': '15', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '67', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '66'}, '#text': 'PEO_HEATER_EQUIPMENT'}}]}], '#text': 'MSP Configuration', 'BOWS': [{'System-Id': '2', 'Name': 'Pool', 'Type': 'BOW_POOL', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Shared-Priority': 'SHARED_EQUIPMENT_LOW_PRIORITY', 'Shared-Equipment-System-ID': '8', 'Supports-Spillover': 'yes', 'Size-In-Gallons': '11500', 'Filter': {'System-Id': '3', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Vsp-Low-Pump-Speed': '35', 'Vsp-Medium-Pump-Speed': '65', 'Vsp-High-Pump-Speed': '90', 'Vsp-Custom-Pump-Speed': '65', 'Freeze-Protect-Override-Interval': '7200'}, 'Pump': [{'System-Id': '4', 'Name': 'Waterfall', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_WATERFALL', 'Priming-Enabled': 'no', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Vsp-Medium-Pump-Speed': '100', 'Vsp-Custom-Pump-Speed': '100', 'Vsp-High-Pump-Speed': '100', 'Vsp-Low-Pump-Speed': '100'}, {'System-Id': '19', 'Name': 'Cleaner', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_CLEANER', 'Priming-Enabled': 'no', 'External-Interlock': [{'External-Interlock-Enable': 'yes', 'External-Interlock-Source': 'ILK_SOURCE_FILTER', 'External-Interlock-Source-System-Id': '3', 'External-Interlock-Compare-Type': 'ILK_COMPARE_EQUAL_TO', 'External-Interlock-ActiveLevel': '0', 'External-Interlock-ActionState': '0', '#text': '1'}, {'External-Interlock-Enable': 'yes', 'External-Interlock-Source': 'ILK_SOURCE_VALVES_SPA', 'External-Interlock-Source-System-Id': '3', 'External-Interlock-Compare-Type': 'ILK_COMPARE_EQUAL_TO', 'External-Interlock-ActiveLevel': '1', 'External-Interlock-ActionState': '0', '#text': '2'}], 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Vsp-Medium-Pump-Speed': '100', 'Vsp-Custom-Pump-Speed': '100', 'Vsp-High-Pump-Speed': '100', 'Vsp-Low-Pump-Speed': '100'}], 'ColorLogic-Light': {'System-Id': '5', 'Name': 'Lights', 'Type': 'COLOR_LOGIC_UCL', 'V2-Active': 'no'}, 'Sensor': [{'System-Id': '7', 'Name': 'Water Temp', 'Type': 'SENSOR_WATER_TEMP', 'Units': 'UNITS_FAHRENHEIT'}, {'System-Id': '27', 'Name': 'Flow Switch', 'Type': 'SENSOR_FLOW', 'Units': 'UNITS_ACTIVE_INACTIVE'}], 'Heater': {'System-Id': '16', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Mode': 'HTR_MODE_COOLING', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'External-Interlock': {'External-Interlock-Enable': 'yes', 'External-Interlock-Source': 'ILK_SOURCE_PUMP', 'External-Interlock-Source-System-Id': '19', 'External-Interlock-Compare-Type': 'ILK_COMPARE_EQUAL_TO', 'External-Interlock-ActiveLevel': '1', 'External-Interlock-ActionState': '0', '#text': '1'}, 'Operation': [{'Heater-Equipment': {'System-Id': '18', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '17'}, '#text': 'PEO_HEATER_EQUIPMENT'}, {'Heater-Equipment': {'System-Id': '66', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '67'}, '#text': 'PEO_HEATER_EQUIPMENT'}]}, 'Chlorinator': {'System-Id': '22', 'Name': 'Chlorinator', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'yes', 'Mode': 'CHLOR_OP_MODE_TIMED', 'Timed-Percent': '25', 'SuperChlor-Timeout': '24', 'Cell-Type': 'CELL_TYPE_T15', 'Salt-Monitor': 'LOW_SALT', 'Dispenser-Type': 'SALT_DISPENSING', 'Operation': {'Chlorinator-Equipment': {'System-Id': '24', 'Name': 'Chlorinator1', 'Type': 'PET_CHLORINATOR', 'Chlorinator-Type': 'CHLOR_TYPE_MAIN_PANEL', 'Enabled': 'yes'}, '#text': 'PEO_CHLORINATOR_EQUIPMENT'}}, '#text': '01', 'Relays': [], 'Lights': [{'System-Id': '5', 'Name': 'Lights', 'Type': 'COLOR_LOGIC_UCL', 'V2-Active': 'no'}], 'Heaters': [{'Name': 'Gas Heater', 'System-Id': '16', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '18', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '17'}, '#text': 'PEO_HEATER_EQUIPMENT'}}, {'Name': 'Chiller', 'System-Id': '16', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '66', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '67'}, '#text': 'PEO_HEATER_EQUIPMENT'}}]}, {'System-Id': '8', 'Name': 'Spa', 'Type': 'BOW_SPA', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Shared-Priority': 'SHARED_EQUIPMENT_HIGH_PRIORITY', 'Shared-Equipment-System-ID': '2', 'Supports-Spillover': 'yes', 'Size-In-Gallons': '500', 'Filter': {'System-Id': '10', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Vsp-Low-Pump-Speed': '50', 'Vsp-Medium-Pump-Speed': '70', 'Vsp-High-Pump-Speed': '90', 'Vsp-Custom-Pump-Speed': '80', 'Freeze-Protect-Override-Interval': '7200'}, 'Sensor': [{'System-Id': '11', 'Name': 'Water Temp', 'Type': 'SENSOR_WATER_TEMP', 'Units': 'UNITS_FAHRENHEIT'}, {'System-Id': '28', 'Name': 'Flow Switch', 'Type': 'SENSOR_FLOW', 'Units': 'UNITS_ACTIVE_INACTIVE'}, {'System-Id': '65', 'Name': 'SolarSensor', 'Type': 'SENSOR_SOLAR_TEMP', 'Units': 'UNITS_FAHRENHEIT'}], 'Pump': {'System-Id': '14', 'Name': 'Jets', 'Type': 'PMP_SINGLE_SPEED', 'Function': 'PMP_JETS', 'Priming-Enabled': 'no', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Min-Pump-Speed': '18', 'Max-Pump-Speed': '100', 'Vsp-Medium-Pump-Speed': '100', 'Vsp-Custom-Pump-Speed': '100', 'Vsp-High-Pump-Speed': '100', 'Vsp-Low-Pump-Speed': '100'}, 'Heater': {'System-Id': '15', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': [{'Heater-Equipment': {'System-Id': '17', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '18'}, '#text': 'PEO_HEATER_EQUIPMENT'}, {'Heater-Equipment': {'System-Id': '67', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '66'}, '#text': 'PEO_HEATER_EQUIPMENT'}]}, 'Chlorinator': {'System-Id': '23', 'Name': 'Chlorinator', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Mode': 'CHLOR_OP_MODE_TIMED', 'Timed-Percent': '5', 'SuperChlor-Timeout': '24', 'Cell-Type': 'CELL_TYPE_T15', 'Salt-Monitor': 'LOW_SALT', 'Dispenser-Type': 'SALT_DISPENSING', 'Operation': {'Chlorinator-Equipment': {'System-Id': '25', 'Name': 'Chlorinator1', 'Type': 'PET_CHLORINATOR', 'Chlorinator-Type': 'CHLOR_TYPE_MAIN_PANEL', 'Enabled': 'yes'}, '#text': 'PEO_CHLORINATOR_EQUIPMENT'}}, '#text': '02', 'Relays': [], 'Lights': [], 'Heaters': [{'Name': 'Gas Heater', 'System-Id': '15', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '17', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '18'}, '#text': 'PEO_HEATER_EQUIPMENT'}}, {'Name': 'Chiller', 'System-Id': '15', 'Shared-Type': 'BOW_SHARED_EQUIPMENT', 'Enabled': 'no', 'Current-Set-Point': '98', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '104', 'Operation': {'Heater-Equipment': {'System-Id': '67', 'Name': 'Chiller', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_CHILLER', 'Enabled': 'no', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'SupportsCooling': 'yes', 'SupportsHeating': 'no', 'Shared-Equipment-System-ID': '66'}, '#text': 'PEO_HEATER_EQUIPMENT'}}]}]}, 'Schedules': {'sche': [{'bow-system-id': '2', 'equipment-id': '19', 'schedule-system-id': '29', 'event': '164', 'data': '100', 'enabled': '0', 'start-minute': '30', 'start-hour': '8', 'end-minute': '25', 'end-hour': '10', 'days-active': '53', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '22', 'schedule-system-id': '30', 'event': '164', 'data': '26', 'enabled': '1', 'start-minute': '0', 'start-hour': '7', 'end-minute': '0', 'end-hour': '19', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '3', 'schedule-system-id': '33', 'event': '164', 'data': '90', 'enabled': '1', 'start-minute': '0', 'start-hour': '7', 'end-minute': '0', 'end-hour': '8', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '3', 'schedule-system-id': '34', 'event': '164', 'data': '35', 'enabled': '1', 'start-minute': '0', 'start-hour': '8', 'end-minute': '0', 'end-hour': '11', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '3', 'schedule-system-id': '35', 'event': '164', 'data': '35', 'enabled': '1', 'start-minute': '0', 'start-hour': '11', 'end-minute': '0', 'end-hour': '15', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '3', 'schedule-system-id': '36', 'event': '164', 'data': '35', 'enabled': '1', 'start-minute': '0', 'start-hour': '15', 'end-minute': '0', 'end-hour': '18', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '5', 'schedule-system-id': '39', 'event': '164', 'data': '263171', 'enabled': '0', 'start-minute': '20', 'start-hour': '20', 'end-minute': '30', 'end-hour': '21', 'days-active': '79', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '4', 'schedule-system-id': '40', 'event': '164', 'data': '100', 'enabled': '0', 'start-minute': '0', 'start-hour': '21', 'end-minute': '10', 'end-hour': '21', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '4', 'schedule-system-id': '41', 'event': '164', 'data': '100', 'enabled': '0', 'start-minute': '0', 'start-hour': '0', 'end-minute': '10', 'end-hour': '0', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '4', 'schedule-system-id': '42', 'event': '164', 'data': '100', 'enabled': '0', 'start-minute': '0', 'start-hour': '3', 'end-minute': '10', 'end-hour': '3', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '4', 'schedule-system-id': '43', 'event': '164', 'data': '100', 'enabled': '0', 'start-minute': '30', 'start-hour': '5', 'end-minute': '40', 'end-hour': '5', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '5', 'schedule-system-id': '46', 'event': '164', 'data': '263171', 'enabled': '0', 'start-minute': '20', 'start-hour': '20', 'end-minute': '45', 'end-hour': '21', 'days-active': '48', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '3', 'schedule-system-id': '50', 'event': '164', 'data': '35', 'enabled': '1', 'start-minute': '0', 'start-hour': '18', 'end-minute': '0', 'end-hour': '19', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '3', 'schedule-system-id': '51', 'event': '164', 'data': '65', 'enabled': '0', 'start-minute': '0', 'start-hour': '19', 'end-minute': '0', 'end-hour': '7', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '5', 'schedule-system-id': '52', 'event': '164', 'data': '3', 'enabled': '0', 'start-minute': '0', 'start-hour': '6', 'end-minute': '30', 'end-hour': '6', 'days-active': '31', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '5', 'schedule-system-id': '53', 'event': '164', 'data': '3', 'enabled': '0', 'start-minute': '0', 'start-hour': '6', 'end-minute': '30', 'end-hour': '6', 'days-active': '96', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '22', 'schedule-system-id': '58', 'event': '164', 'data': '1', 'enabled': '1', 'start-minute': '0', 'start-hour': '19', 'end-minute': '0', 'end-hour': '7', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '16', 'schedule-system-id': '70', 'event': '164', 'data': '79701', 'enabled': '1', 'start-minute': '0', 'start-hour': '8', 'end-minute': '0', 'end-hour': '11', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '16', 'schedule-system-id': '71', 'event': '164', 'data': '79702', 'enabled': '1', 'start-minute': '0', 'start-hour': '11', 'end-minute': '0', 'end-hour': '15', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '16', 'schedule-system-id': '73', 'event': '164', 'data': '79702', 'enabled': '1', 'start-minute': '0', 'start-hour': '15', 'end-minute': '0', 'end-hour': '19', 'days-active': '127', 'recurring': '1'}, {'bow-system-id': '2', 'equipment-id': '16', 'schedule-system-id': '74', 'event': '164', 'data': '79700', 'enabled': '0', 'start-minute': '0', 'start-hour': '19', 'end-minute': '0', 'end-hour': '7', 'days-active': '127', 'recurring': '1'}]}, 'Favorites': {'Favorite': [{'System-Id': '20', 'Index-Id': '1', 'EquipmentID-Or-ThemeID': '5', 'Sequence': '0', 'Data': '3', 'SimpleModeEnabled': '1'}, {'System-Id': '47', 'Index-Id': '2', 'EquipmentID-Or-ThemeID': '4', 'Sequence': '1', 'Data': '0', 'SimpleModeEnabled': '1'}, {'System-Id': '48', 'Index-Id': '3', 'EquipmentID-Or-ThemeID': '19', 'Sequence': '2', 'Data': '0', 'SimpleModeEnabled': '1'}, {'System-Id': '49', 'Index-Id': '4', 'EquipmentID-Or-ThemeID': '14', 'Sequence': '3', 'Data': '0', 'SimpleModeEnabled': '1'}, {'System-Id': '68', 'Index-Id': '5', 'EquipmentID-Or-ThemeID': '16', 'Sequence': '4', 'Data': '0', 'SimpleModeEnabled': '1'}, {'System-Id': '72', 'Index-Id': '6', 'EquipmentID-Or-ThemeID': '5', 'Sequence': '5', 'Data': '14', 'SimpleModeEnabled': '1'}]}, 'MspSystemID': REDACTED, 'BackyardName': 'REDACTED', 'Relays': []}]

OmniLogic log error Invalid Config

Upgraded to HA 2024.2.0 and on reboot the Omnilogic gave a notification that it failed to load.

Logger: homeassistant.setup
Source: setup.py:251
First occurred: 6:16:03 PM (1 occurrences)
Last logged: 6:16:03 PM

Setup failed for custom integration 'omnilogic': Unable to import component: No module named 'importlib_metadata'
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/setup.py", line 251, in _async_setup_component
component = integration.get_component()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/loader.py", line 827, in get_component
ComponentProtocol, importlib.import_module(self.pkg_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/importlib/init.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1387, in _gcd_import
File "", line 1360, in _find_and_load
File "", line 1331, in _find_and_load_unlocked
File "", line 935, in _load_unlocked
File "", line 994, in exec_module
File "", line 488, in _call_with_frames_removed
File "/config/custom_components/omnilogic/init.py", line 12, in
from .common import OmniLogicUpdateCoordinator
File "/config/custom_components/omnilogic/common.py", line 6, in
from importlib_metadata import NullFinder
ModuleNotFoundError: No module named 'importlib_metadata'

Invalid temperature readings making it through to HA

In some circumstances, we are observing invalid values for sensor temperatures. For example, in this case my panel had been placed into Service Mode to override the pump schedule for 3 hours. This caused two spikes in air temp readings to 255F, one at the beginning and one at the end of the 3-hour run:

image

I have seen this before, maybe around updates or reboots, as well as readings dropping to zero. Got me to thinking that it might make sense to suppress improbable/impossible readings somewhere in the stack since missing points would be better at the app layer than wildly wrong values.

I can collect more data points if that would help, or maybe this is enough to go on.

Variable speed pumps and spillover valve

Hello,

I am not able to see the spa spillover function in the OmniLogic integration. I'm happy to provide whatever information/api spec is needed to get this added. If someone is able to add please let me know what information would help this?

@djtimca

Thank you

M

error doing job

Not sure if this is impacting why it doesn't update the pump switch sometimes. I've had an issue where the integration doesn't get or realize that the pump is off after the scheduled turn off in the OmniLogic scheduler.

Logger: homeassistant
Source: custom_components/omnilogic/sensor.py:171
Integration: Omnilogic (documentation, issues)
First occurred: 10:10:36 AM (3 occurrences)
Last logged: 10:11:06 AM

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1163, in _async_registry_updated
self.async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 745, in async_write_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 845, in _async_write_ha_state
state, attr = self._async_generate_attributes()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 786, in _async_generate_attributes
state = self._stringify_state(available)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 751, in _stringify_state
if (state := self.state) is None:
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/sensor/init.py", line 501, in state
value = self.native_value
^^^^^^^^^^^^^^^^^
File "/config/custom_components/omnilogic/sensor.py", line 171, in native_value
return state
^^^^^
UnboundLocalError: cannot access local variable 'state' where it is not associated with a value

Unexpected error fetching Omnilogic data: syntax error: line 1, column 0

Hi there,
As at Release 6 (June 4th), I am seeing the following error in the Home Assistant logs,
Info is still loaded correctly however as far as I can tell.

I am running Home Assistant in an Unraid Docker.

�[31m2022-06-04 16:33:08 ERROR (MainThread) [custom_components.omnilogic.common] Unexpected error fetching Omnilogic data: syntax error: line 1, column 0
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 191, in _async_refresh
self.data = await self._async_update_data()
File "/config/custom_components/omnilogic/common.py", line 47, in _async_update_data
data = await self.api.get_telemetry_data()
File "/usr/local/lib/python3.9/site-packages/omnilogic/init.py", line 1008, in get_telemetry_data
site_telem = self.telemetry_to_json(telem, config_item, self.alarms_to_json(this_alarm))
File "/usr/local/lib/python3.9/site-packages/omnilogic/init.py", line 719, in telemetry_to_json
telemetryXML = ElementTree.fromstring(telemetry)
File "/usr/local/lib/python3.9/xml/etree/ElementTree.py", line 1349, in XML
parser.feed(text)
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0�[0m
�[31m2022-06-04 16:33:25 ERROR (MainThread) [custom_components.omnilogic.common] Unexpected error fetching Omnilogic data: syntax error: line 1, column 0
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 191, in _async_refresh
self.data = await self._async_update_data()
File "/config/custom_components/omnilogic/common.py", line 47, in _async_update_data
data = await self.api.get_telemetry_data()
File "/usr/local/lib/python3.9/site-packages/omnilogic/init.py", line 974, in get_telemetry_data
config_data = await self.get_msp_config_file()
File "/usr/local/lib/python3.9/site-packages/omnilogic/init.py", line 228, in get_msp_config_file
configitem = self.convert_to_json(mspconfig)
File "/usr/local/lib/python3.9/site-packages/omnilogic/init.py", line 1048, in convert_to_json
my_dict = xmltodict.parse(xmlString)
File "/usr/local/lib/python3.9/site-packages/xmltodict.py", line 327, in parse
parser.Parse(xml_input, True)
xml.parsers.expat.ExpatError: syntax error: line 1, column 0�[0m

Lost controls for Waterfall and Spa Jets, pumps.

Hi There,

Thanks for moving this to HACS, glad to finally see controls for the lights and heater!

Unlike the previous install in core I am noticing a lack of controls for the pumps as well as waterfall in HomeAssistant. Not sure what you need to help troubleshoot it but happy to provide whatever is needed.

custom component suddenly stopped working

Firstly, thank you for this awesome custom component!

The custom component had been installed and worked great for a month or so.

As of 2 days ago it no longer works.
image

Still able to log in on https://www.haywardomnilogic.com without issue (this was done from an alternate location; not home at the moment).

Was able to run telemetry gathering steps without issue (this was done from an alternate location; not home at the moment).

Please let me know if you need any extra info or anything done on my side for testing.

Copied from Home Assistant 'About' page:

Home Assistant 2023.5.4
Supervisor 2023.04.1
Operating System 10.1
Frontend 20230503.3 - latest

Copied from Home Assistant logs:

2023-05-24 06:41:51.613 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration omnilogic which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2023-05-24 06:42:08.820 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Omnilogic for omnilogic
File "/config/custom_components/omnilogic/__init__.py", line 44, in async_setup_entry
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 166, in connect
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 148, in authenticate
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 143, in _get_new_token
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 129, in _get_token
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 100, in call_api

Copied from Home Assistant logs with debugging enabled on the custom component from the Integrations page:

2023-05-24 07:39:24.045 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration omnilogic which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2023-05-24 07:39:35.228 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Omnilogic for omnilogic
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 387, in async_setup
result = await component.async_setup_entry(hass, self)
File "/config/custom_components/omnilogic/__init__.py", line 44, in async_setup_entry
await api.connect()
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 166, in connect
await self.authenticate()
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 148, in authenticate
response = await self._get_new_token()
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 143, in _get_new_token
return await self._get_token()
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 129, in _get_token
response = await self.call_api("Login", params)
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 100, in call_api
responseXML = ElementTree.fromstring(response)
File "/usr/local/lib/python3.10/xml/etree/ElementTree.py", line 1343, in XML
return parser.close()
xml.etree.ElementTree.ParseError: no element found: line 1, column 0

output_116_3b978abdd8_telemetry.json

[{'systemId': 'REDACTED', 'statusVersion': '5', 'airTemp': '67', 'status': '1', 'state': '1', 'configUpdatedTime': '2023-05-23T12:57:25.365Z', 'datetime': '2023-05-24T07:09:31.7144957', 'Relays': [], 'BOWS': [{'systemId': '1', 'flow': '255', 'waterTemp': '84', 'Name': 'Pool', 'Supports-Spillover': 'no', 'Filter': {'systemId': '2', 'valvePosition': '1', 'filterSpeed': '50', 'filterState': '1', 'lastSpeed': '50', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Alarms': []}, 'VirtualHeater': {'systemId': '5', 'Current-Set-Point': '87', 'enable': 'yes'}, 'Heater': {'systemId': '6', 'heaterState': '1', 'enable': 'yes', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Operation': {'VirtualHeater': {'System-Id': '6', 'Name': 'Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_8HRS', 'Shared-Equipment-System-ID': '-1', 'Current-Set-Point': '87', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '65', 'Max-Settable-Water-Temp': '104', 'enable': 'yes', 'systemId': '5'}}, 'Name': 'Heater', 'Alarms': []}, 'CSAD': {'systemId': '0', 'ph': '', 'orp': '', 'status': '0', 'mode': '0', 'Alarms': []}, 'Group': {'systemId': '15', 'groupState': '0'}, 'Lights': [{'systemId': '10', 'lightState': '0', 'currentShow': '0', 'speed': '4', 'brightness': '4', 'Name': 'UCL', 'Type': 'COLOR_LOGIC_UCL', 'V2': 'yes', 'Alarms': []}], 'Relays': [{'systemId': '21', 'relayState': '0', 'Name': 'Jet-Slide', 'Type': 'RLY_VALVE_ACTUATOR', 'Function': 'RLY_LAMINARS', 'Alarms': []}, {'systemId': '23', 'relayState': '0', 'Name': 'WaterSlide', 'Type': 'RLY_VALVE_ACTUATOR', 'Function': 'RLY_WATER_SLIDE', 'Alarms': []}], 'Pumps': [], 'Heaters': [{'systemId': '6', 'heaterState': '1', 'enable': 'yes', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Operation': {'VirtualHeater': {'System-Id': '6', 'Name': 'Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_8HRS', 'Shared-Equipment-System-ID': '-1', 'Current-Set-Point': '87', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '65', 'Max-Settable-Water-Temp': '104', 'enable': 'yes', 'systemId': '5'}}, 'Name': 'Heater', 'Alarms': []}]}], 'BackyardName': 'REDACTED', 'Msp-Vsp-Speed-Format': 'Percent', 'Msp-Time-Format': '12 Hour Format', 'Units': 'Standard', 'Msp-Chlor-Display': 'Salt', 'Msp-Language': 'English', 'Unit-of-Measurement': 'Standard', 'Alarms': [], 'Unit-of-Temperature': 'UNITS_FAHRENHEIT'}]

output_116_6f71ff94d0_mspconfig.xml

<Response><MSPConfig><System><Msp-Vsp-Speed-Format>Percent</Msp-Vsp-Speed-Format><Msp-Time-Format>12 Hour Format</Msp-Time-Format><Units>Standard</Units><Msp-Chlor-Display>Salt</Msp-Chlor-Display><Msp-Language>English</Msp-Language><UI-Display-Mode>standard</UI-Display-Mode><UI-MoodColor-Enabled>Yes</UI-MoodColor-Enabled><UI-Heater-SimpleMode>Yes</UI-Heater-SimpleMode><UI-Filter-SimpleMode>Yes</UI-Filter-SimpleMode><UI-Lights-SimpleMode>Yes</UI-Lights-SimpleMode></System><Backyard>
        MSP Configuration
        <System-Id>0</System-Id><Name>Backyard</Name><Service-Mode-Timeout>0</Service-Mode-Timeout><Sensor><System-Id>4</System-Id><Name>AirSensor</Name><Type>SENSOR_AIR_TEMP</Type><Units>UNITS_FAHRENHEIT</Units></Sensor><Body-of-water>
            01
            <System-Id>1</System-Id><Name>Pool</Name><Type>BOW_POOL</Type><Shared-Type>BOW_NO_EQUIPMENT_SHARED</Shared-Type><Shared-Priority>SHARED_EQUIPMENT_LOW_PRIORITY</Shared-Priority><Shared-Equipment-System-ID>0</Shared-Equipment-System-ID><Supports-Spillover>no</Supports-Spillover><Size-In-Gallons>27000</Size-In-Gallons><Filter><System-Id>2</System-Id><Name>Filter Pump</Name><Shared-Type>BOW_NO_EQUIPMENT_SHARED</Shared-Type><Filter-Type>FMT_VARIABLE_SPEED_PUMP</Filter-Type><Max-Pump-Speed>100</Max-Pump-Speed><Min-Pump-Speed>18</Min-Pump-Speed><Max-Pump-RPM>3450</Max-Pump-RPM><Min-Pump-RPM>600</Min-Pump-RPM><Priming-Enabled>yes</Priming-Enabled><Vsp-Low-Pump-Speed>18</Vsp-Low-Pump-Speed><Vsp-Medium-Pump-Speed>50</Vsp-Medium-Pump-Speed><Vsp-High-Pump-Speed>100</Vsp-High-Pump-Speed><Vsp-Custom-Pump-Speed>100</Vsp-Custom-Pump-Speed><Freeze-Protect-Override-Interval>7200</Freeze-Protect-Override-Interval></Filter><Sensor><System-Id>3</System-Id><Name>WaterSensor</Name><Type>SENSOR_WATER_TEMP</Type><Units>UNITS_FAHRENHEIT</Units></Sensor><Heater><System-Id>5</System-Id><Shared-Type>BOW_NO_EQUIPMENT_SHARED</Shared-Type><Enabled>yes</Enabled><Current-Set-Point>87</Current-Set-Point><Max-Water-Temp>104</Max-Water-Temp><Min-Settable-Water-Temp>65</Min-Settable-Water-Temp><Max-Settable-Water-Temp>104</Max-Settable-Water-Temp><Operation>
                    PEO_HEATER_EQUIPMENT
                    <Heater-Equipment><System-Id>6</System-Id><Name>Heater</Name><Type>PET_HEATER</Type><Heater-Type>HTR_GAS</Heater-Type><Enabled>yes</Enabled><Priority>HTR_PRIORITY_1</Priority><Run-For-Priority>HTR_MAINTAINS_PRIORITY_FOR_8HRS</Run-For-Priority><Shared-Equipment-System-ID>-1</Shared-Equipment-System-ID></Heater-Equipment></Operation></Heater><ColorLogic-Light><System-Id>10</System-Id><Name>UCL</Name><Type>COLOR_LOGIC_UCL</Type><V2-Active>yes</V2-Active></ColorLogic-Light><Relay><System-Id>21</System-Id><Name>Jet-Slide</Name><Type>RLY_VALVE_ACTUATOR</Type><Function>RLY_LAMINARS</Function><Valve-Default-Speed>78</Valve-Default-Speed></Relay><Relay><System-Id>23</System-Id><Name>WaterSlide</Name><Type>RLY_VALVE_ACTUATOR</Type><Function>RLY_WATER_SLIDE</Function><Valve-Default-Speed>78</Valve-Default-Speed></Relay></Body-of-water></Backyard><Schedules><sche><bow-system-id>1</bow-system-id><equipment-id>2</equipment-id><schedule-system-id>8</schedule-system-id><event>164</event><data>36</data><enabled>0</enabled><start-minute>59</start-minute><start-hour>11</start-hour><end-minute>0</end-minute><end-hour>19</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>1</bow-system-id><equipment-id>2</equipment-id><schedule-system-id>11</schedule-system-id><event>164</event><data>65</data><enabled>0</enabled><start-minute>0</start-minute><start-hour>8</start-hour><end-minute>59</end-minute><end-hour>11</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>1</bow-system-id><equipment-id>2</equipment-id><schedule-system-id>12</schedule-system-id><event>164</event><data>18</data><enabled>0</enabled><start-minute>0</start-minute><start-hour>19</start-hour><end-minute>59</end-minute><end-hour>7</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>1</bow-system-id><equipment-id>5</equipment-id><schedule-system-id>13</schedule-system-id><event>164</event><data>82</data><enabled>0</enabled><start-minute>0</start-minute><start-hour>8</start-hour><end-minute>59</end-minute><end-hour>19</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>1</bow-system-id><equipment-id>5</equipment-id><schedule-system-id>14</schedule-system-id><event>164</event><data>74</data><enabled>0</enabled><start-minute>0</start-minute><start-hour>20</start-hour><end-minute>59</end-minute><end-hour>6</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>1</bow-system-id><equipment-id>21</equipment-id><schedule-system-id>22</schedule-system-id><event>164</event><data>1</data><enabled>0</enabled><start-minute>0</start-minute><start-hour>0</start-hour><end-minute>1</end-minute><end-hour>0</end-hour><days-active>64</days-active><recurring>1</recurring></sche></Schedules><Favorites><Favorite><System-Id>16</System-Id><Index-Id>1</Index-Id><EquipmentID-Or-ThemeID>15</EquipmentID-Or-ThemeID><Sequence>0</Sequence><Data>268435455</Data><SimpleModeEnabled>1</SimpleModeEnabled></Favorite></Favorites><Groups><Group><System-Id>15</System-Id><Name>CFC</Name><Icon-Id>0</Icon-Id><Request><Name>TurnOnOffForGroup</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="EquipmentID" dataType="int">2</Parameter><Parameter name="Data" dataType="int">100</Parameter><Parameter name="LightState" dataType="int">0</Parameter></Parameters></Request><Request><Name>SetHeaterScheduleCmd</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="HeaterID" dataType="int">5</Parameter><Parameter name="Temp" dataType="int">92</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>SetUITemporaryHeaterPriorityCmd</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="HeaterID1" dataType="int">6</Parameter><Parameter name="HeaterID2" dataType="int">-1</Parameter><Parameter name="HeaterID3" dataType="int">-1</Parameter><Parameter name="HeaterID4" dataType="int">-1</Parameter><Parameter name="HeaterID5" dataType="int">-1</Parameter></Parameters></Request><Request><Name>SetUITemporaryHeaterMaintainPriorityCmd</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="HeaterID" dataType="int">5</Parameter><Parameter name="Priority1MaintainFor" dataType="byte">8</Parameter><Parameter name="Priority2MaintainFor" dataType="byte">255</Parameter><Parameter name="Priority3MaintainFor" dataType="byte">255</Parameter><Parameter name="Priority4MaintainFor" dataType="byte">255</Parameter><Parameter name="Priority5MaintainFor" dataType="byte">255</Parameter></Parameters></Request><Request><Name>SetUITemporaryHeaterEnable</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="HeaterID" dataType="int">5</Parameter><Parameter name="Enabled" dataType="int">1</Parameter></Parameters></Request><Request><Name>SetUITemporaryHeaterEnable</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="HeaterID" dataType="int">6</Parameter><Parameter name="Enabled" dataType="int">1</Parameter></Parameters></Request><Request><Name>TurnOnOffForGroup</Name><Parameters><Parameter name="PoolID" dataType="int">1</Parameter><Parameter name="EquipmentID" dataType="int">10</Parameter><Parameter name="Data" dataType="int">263436</Parameter><Parameter name="LightState" dataType="int">1</Parameter></Parameters></Request></Group></Groups></MSPConfig><MSPAPI version="0.4" latestversion="0.4"><Device-APIs><API System-Id="15" OpType="ON_OFF" ref="RunGroupCmd" ThemeID="15" IsOn="API::STATUS::Group::groupState" /><API System-Id="2" OpType="ON_OFF" ref="SetUIEquipmentCmd" EquipmentID="2" IsOn="API::STATUS::Filter::filterSpeed" /><API System-Id="5" OpType="ON_OFF" ref="SetHeaterEnable" HeaterID="5" /><API System-Id="5" OpType="SETPOINT" ref="SetUIHeaterCmd" HeaterID="5" Temp="API::STATUS::VirtualHeater::Current-Set-Point" /><API System-Id="21" OpType="ON_OFF" ref="SetUIEquipmentCmd" EquipmentID="21" IsOn="API::STATUS::Relay::relayState" /><API System-Id="23" OpType="ON_OFF" ref="SetUIEquipmentCmd" EquipmentID="23" IsOn="API::STATUS::Relay::relayState" /><API System-Id="10" OpType="ON_OFF" ref="SetUIEquipmentCmd" EquipmentID="10" IsOn="API::STATUS::ColorLogic-Light::lightState" /><API System-Id="10" OpType="ON_SETPOINT" ref="SetStandAloneLightShowV2" LightID="10" Show="API::STATUS::ColorLogic-Light::currentShow" Speed="API::STATUS::ColorLogic-Light::speed" Brightness="API::STATUS::ColorLogic-Light::brightness" /><API System-Id="0" OpType="CSAD_MODE" ref="UISetCSADMode" CSADID="0" Mode="API::STATUS::CSAD::mode" /><API System-Id="0" OpType="CSAD_CALIBRATION" ref="UISetCSADTargetValue" CSADID="0" Mode="API::STATUS::CSAD::ph" /></Device-APIs><Favorite-APIs><API Favorite-Id="15" ref="RunGroupCmd" OpType="ON_OFF" ThemeID="15" IsOn="API::STATUS::Group::groupState" /><API Favorite-Id="2" ref="SetUIEquipmentCmd" OpType="ON_OFF" EquipmentID="2" IsOn="API::STATUS::Filter::filterState" /><API Favorite-Id="5" ref="API::GOTOFEATURE" /><API Favorite-Id="1" ref="SetHeaterEnable" HeaterID="5" /><API Favorite-Id="21" ref="SetUIEquipmentCmd" OpType="ON_OFF" EquipmentID="21" /><API Favorite-Id="23" ref="SetUIEquipmentCmd" OpType="ON_OFF" EquipmentID="23" /><API Favorite-Id="10" ref="SetStandAloneLightShowV2" OpType="ON_SETPOINT" LightID="10" Show="API::CONFIG::Favorite::Data" Speed="API::CONFIG::Favorite::Data2" Brightness="API::CONFIG::Favorite::Data3" /><API Favorite-Id="0" ref="API::GOTOFEATURE" /></Favorite-APIs><Schedule-APIs><API System-Id="15" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="15" Data="1" ActionID="317" /><API System-Id="15" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="1" ActionID="317" /><API System-Id="15" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id" /><API System-Id="2" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="2" Data="API::STATUS::Filter::filterSpeed" ActionID="164" /><API System-Id="2" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="API::STATUS::Filter::filterSpeed" ActionID="164" /><API System-Id="2" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id" /><API System-Id="5" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="5" Data="API::STATUS::VirtualHeater::Current-Set-Point" ActionID="315" /><API System-Id="5" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="API::STATUS::VirtualHeater::Current-Set-Point" ActionID="315" /><API System-Id="5" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id" /><API System-Id="21" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="21" Data="1" ActionID="164" /><API System-Id="21" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="1" ActionID="164" /><API System-Id="21" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id" /><API System-Id="23" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="23" Data="1" ActionID="164" /><API System-Id="23" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="1" ActionID="164" /><API System-Id="23" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id" /><API System-Id="10" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleAltCmd" EquipmentID="10" Show="API::STATUS::ColorLogic-Light::currentShow" Speed="API::STATUS::ColorLogic-Light::speed" Brightness="API::STATUS::ColorLogic-Light::brightness" Data4="0" ActionID="308" /><API System-Id="10" OpType="EDIT_SCHEDULE" ref="EditUIScheduleAltCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Show="API::STATUS::ColorLogic-Light::currentShow" Speed="API::STATUS::ColorLogic-Light::speed" Brightness="API::STATUS::ColorLogic-Light::brightness" Data4="0" ActionID="308" /><API System-Id="10" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id" /></Schedule-APIs></MSPAPI></Response>

output_116_97c83ba006_telemetry.xml

<STATUS version="1.0"><Backyard systemId="109660" statusVersion="5" airTemp="67" status="1" state="1" configUpdatedTime="2023-05-23T12:57:25.365Z" datetime="2023-05-24T07:09:31.7144957" /><BodyOfWater systemId="1" flow="255" waterTemp="84" /><Filter systemId="2" valvePosition="1" filterSpeed="50" filterState="1" lastSpeed="50" /><VirtualHeater systemId="5" Current-Set-Point="87" enable="yes" /><Heater systemId="6" heaterState="1" enable="yes" /><Relay systemId="21" relayState="0" /><Relay systemId="23" relayState="0" /><ColorLogic-Light systemId="10" lightState="0" currentShow="0" speed="4" brightness="4" /><CSAD systemId="0" ph="" orp="" status="0" mode="0" /><Group systemId="15" groupState="0" /></STATUS>

OmniLogic Custom Int - stopped working this morning

No changes made on HomeAssistant side, tried to disable/re-enable same issue; Confirmed credential still work on website & mobile app.

2023-05-23 10:36:35.387 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Omnilogic for omnilogic
File "/config/custom_components/omnilogic/__init__.py", line 44, in async_setup_entry
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 166, in connect
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 148, in authenticate
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 143, in _get_new_token
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 129, in _get_token
File "/usr/local/lib/python3.10/site-packages/omnilogic/__init__.py", line 100, in call_api

HomeKit integration for heater

Regarding the heater settings. When using HomeKit attached to home assistant. The heater is only showing the current temp and temp setting. There is no option to turn on or off heater like in home assistant.

Frequent timeouts cause Entities to go unavailable for a short time.

The Hayward API is timing out frequently causing entities to go unavailable for a short time and potentially affecting automations that rely on sensor (or other entity) data.

Need to find a way to keep the last values in the case of a timeout rather than going unavailable.

Missing entity for "Too Low Salt Chlorinator1" alarm

Hi!
My Omnilogic is currently throwing an alert for "CHLOR Too Low Salt Chlorinator1"
But there is no matching entity for this alert in the integration. Does it need to be added please?

(I see several other entities tied to the other Alert types in Omnilogic, but not this one.)
(I do see the entity called pool_chlorinator_alarm, and it is "off"; and I see the entity called salt_level, and it is reporting a numeric value.)

Thank you!
Very much appreciate your work to provide this integration, and looking forward to contributing myself when I can.

Issue on initial load

Running Home Assistant 2022.6.7
Running HAOMNILOGIC via HACS 1.0.1.4

When attempting to start up for the first time on a new install of Home Assistant (running the Home Assistant OS) I get the following error message:

2022-07-05 20:28:08 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Omnilogic for omnilogic File "/config/custom_components/omnilogic/__init__.py", line 39, in async_setup_entry File "/usr/local/lib/python3.9/site-packages/omnilogic/__init__.py", line 1035, in get_telemetry_data

Also, when I run the debug tool, I get the following message:

Saved file: output_116_7b292edaa1_mspconfig.xml Saved file: output_116_78785fb8a9_telemetry.xml An error occurred:list indices must be integers or slices, not str

Here is the output file:output_116_7b292edaa1_mspconfig.xml

<Response><MSPConfig><System><Msp-Vsp-Speed-Format>Percent</Msp-Vsp-Speed-Format><Msp-Time-Format>12 Hour Format</Msp-Time-Format><Units>Standard</Units><Msp-Chlor-Display>Salt</Msp-Chlor-Display><Msp-Language>English</Msp-Language><UI-Display-Mode>standard</UI-Display-Mode><UI-MoodColor-Enabled>Yes</UI-MoodColor-Enabled><UI-Heater-SimpleMode>No</UI-Heater-SimpleMode><UI-Filter-SimpleMode>No</UI-Filter-SimpleMode><UI-Lights-SimpleMode>Yes</UI-Lights-SimpleMode></System><Backyard> MSP Configuration <System-Id>0</System-Id><Name>Backyard</Name><Service-Mode-Timeout>0</Service-Mode-Timeout><Relay><System-Id>37</System-Id><Name>YARD LIGHTS</Name><Type>RLY_HIGH_VOLTAGE_RELAY</Type><Function>RLY_LIGHT</Function></Relay><Body-of-water> 01 <System-Id>2</System-Id><Name>Pool</Name><Type>BOW_POOL</Type><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Shared-Priority>SHARED_EQUIPMENT_LOW_PRIORITY</Shared-Priority><Shared-Equipment-System-ID>12</Shared-Equipment-System-ID><Supports-Spillover>no</Supports-Spillover><Size-In-Gallons>0</Size-In-Gallons><Filter><System-Id>3</System-Id><Name>Filter Pump</Name><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Filter-Type>FMT_VARIABLE_SPEED_PUMP</Filter-Type><Max-Pump-Speed>100</Max-Pump-Speed><Min-Pump-Speed>51</Min-Pump-Speed><Max-Pump-RPM>3450</Max-Pump-RPM><Min-Pump-RPM>1750</Min-Pump-RPM><Priming-Enabled>yes</Priming-Enabled><Vsp-Low-Pump-Speed>51</Vsp-Low-Pump-Speed><Vsp-Medium-Pump-Speed>80</Vsp-Medium-Pump-Speed><Vsp-High-Pump-Speed>100</Vsp-High-Pump-Speed><Vsp-Custom-Pump-Speed>80</Vsp-Custom-Pump-Speed><Freeze-Protect-Override-Interval>7200</Freeze-Protect-Override-Interval></Filter><Heater><System-Id>4</System-Id><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Enabled>no</Enabled><Current-Set-Point>80</Current-Set-Point><Max-Water-Temp>104</Max-Water-Temp><Min-Settable-Water-Temp>55</Min-Settable-Water-Temp><Max-Settable-Water-Temp>104</Max-Settable-Water-Temp><Operation> PEO_HEATER_EQUIPMENT <Heater-Equipment><System-Id>5</System-Id><Name>Gas</Name><Type>PET_HEATER</Type><Heater-Type>HTR_GAS</Heater-Type><Enabled>yes</Enabled><Priority>HTR_PRIORITY_2</Priority><Run-For-Priority>HTR_MAINTAINS_PRIORITY_FOR_AS_LONG_AS_VALID</Run-For-Priority><Shared-Equipment-System-ID>16</Shared-Equipment-System-ID></Heater-Equipment></Operation></Heater><Sensor><System-Id>7</System-Id><Name>WaterSensor</Name><Type>SENSOR_WATER_TEMP</Type><Units>UNITS_FAHRENHEIT</Units></Sensor><Chlorinator><System-Id>9</System-Id><Name>Chlorinator</Name><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Enabled>yes</Enabled><Mode>CHLOR_OP_MODE_TIMED</Mode><Timed-Percent>75</Timed-Percent><SuperChlor-Timeout>24</SuperChlor-Timeout><Cell-Type>CELL_TYPE_T15</Cell-Type><Dispenser-Type>SALT_DISPENSING</Dispenser-Type><Operation> PEO_CHLORINATOR_EQUIPMENT <Chlorinator-Equipment><System-Id>10</System-Id><Name>Chlorinator1</Name><Type>PET_CHLORINATOR</Type><Chlorinator-Type>CHLOR_TYPE_MAIN_PANEL</Chlorinator-Type><Enabled>yes</Enabled></Chlorinator-Equipment></Operation></Chlorinator><Sensor><System-Id>21</System-Id><Name>FlowSensor</Name><Type>SENSOR_FLOW</Type><Units>UNITS_ACTIVE_INACTIVE</Units></Sensor><ColorLogic-Light><System-Id>33</System-Id><Name>UCL</Name><Type>COLOR_LOGIC_UCL</Type></ColorLogic-Light></Body-of-water><Body-of-water> 02 <System-Id>12</System-Id><Name>Spa</Name><Type>BOW_SPA</Type><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Shared-Priority>SHARED_EQUIPMENT_HIGH_PRIORITY</Shared-Priority><Shared-Equipment-System-ID>2</Shared-Equipment-System-ID><Supports-Spillover>no</Supports-Spillover><Size-In-Gallons>1500</Size-In-Gallons><Filter><System-Id>14</System-Id><Name>Filter Pump</Name><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Filter-Type>FMT_VARIABLE_SPEED_PUMP</Filter-Type><Max-Pump-Speed>100</Max-Pump-Speed><Min-Pump-Speed>80</Min-Pump-Speed><Max-Pump-RPM>3450</Max-Pump-RPM><Min-Pump-RPM>1750</Min-Pump-RPM><Priming-Enabled>yes</Priming-Enabled><Vsp-Low-Pump-Speed>80</Vsp-Low-Pump-Speed><Vsp-Medium-Pump-Speed>80</Vsp-Medium-Pump-Speed><Vsp-High-Pump-Speed>100</Vsp-High-Pump-Speed><Vsp-Custom-Pump-Speed>0</Vsp-Custom-Pump-Speed><Freeze-Protect-Override-Interval>7200</Freeze-Protect-Override-Interval></Filter><Heater><System-Id>15</System-Id><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Enabled>no</Enabled><Current-Set-Point>100</Current-Set-Point><Max-Water-Temp>104</Max-Water-Temp><Min-Settable-Water-Temp>55</Min-Settable-Water-Temp><Max-Settable-Water-Temp>104</Max-Settable-Water-Temp><Operation> PEO_HEATER_EQUIPMENT <Heater-Equipment><System-Id>16</System-Id><Name>Gas</Name><Type>PET_HEATER</Type><Heater-Type>HTR_GAS</Heater-Type><Enabled>yes</Enabled><Priority>HTR_PRIORITY_2</Priority><Run-For-Priority>HTR_MAINTAINS_PRIORITY_FOR_AS_LONG_AS_VALID</Run-For-Priority><Shared-Equipment-System-ID>5</Shared-Equipment-System-ID></Heater-Equipment></Operation></Heater><Chlorinator><System-Id>17</System-Id><Name>Chlorinator</Name><Shared-Type>BOW_SHARED_EQUIPMENT</Shared-Type><Enabled>no</Enabled><Mode>CHLOR_OP_MODE_TIMED</Mode><Timed-Percent>90</Timed-Percent><SuperChlor-Timeout>24</SuperChlor-Timeout><Cell-Type>CELL_TYPE_T15</Cell-Type><Dispenser-Type>SALT_DISPENSING</Dispenser-Type><Operation> PEO_CHLORINATOR_EQUIPMENT <Chlorinator-Equipment><System-Id>18</System-Id><Name>Chlorinator1</Name><Type>PET_CHLORINATOR</Type><Chlorinator-Type>CHLOR_TYPE_MAIN_PANEL</Chlorinator-Type><Enabled>yes</Enabled></Chlorinator-Equipment></Operation></Chlorinator><Sensor><System-Id>20</System-Id><Name>WaterSensor</Name><Type>SENSOR_WATER_TEMP</Type><Units>UNITS_FAHRENHEIT</Units></Sensor><Sensor><System-Id>22</System-Id><Name>FlowSensor</Name><Type>SENSOR_FLOW</Type><Units>UNITS_ACTIVE_INACTIVE</Units></Sensor></Body-of-water></Backyard><Schedules><sche><bow-system-id>2</bow-system-id><equipment-id>3</equipment-id><schedule-system-id>25</schedule-system-id><event>164</event><data>95</data><enabled>1</enabled><start-minute>0</start-minute><start-hour>9</start-hour><end-minute>59</end-minute><end-hour>16</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>2</bow-system-id><equipment-id>9</equipment-id><schedule-system-id>31</schedule-system-id><event>164</event><data>50</data><enabled>1</enabled><start-minute>0</start-minute><start-hour>9</start-hour><end-minute>59</end-minute><end-hour>16</end-hour><days-active>127</days-active><recurring>1</recurring></sche><sche><bow-system-id>12</bow-system-id><equipment-id>14</equipment-id><schedule-system-id>34</schedule-system-id><event>164</event><data>100</data><enabled>0</enabled><start-minute>0</start-minute><start-hour>17</start-hour><end-minute>59</end-minute><end-hour>23</end-hour><days-active>127</days-active><recurring>1</recurring></sche></Schedules><Favorites><Favorite><System-Id>38</System-Id><Index-Id>1</Index-Id><EquipmentID-Or-ThemeID>35</EquipmentID-Or-ThemeID><Sequence>0</Sequence><Data>268435455</Data><SimpleModeEnabled>1</SimpleModeEnabled></Favorite><Favorite><System-Id>40</System-Id><Index-Id>2</Index-Id><EquipmentID-Or-ThemeID>39</EquipmentID-Or-ThemeID><Sequence>1</Sequence><Data>268435455</Data><SimpleModeEnabled>1</SimpleModeEnabled></Favorite><Favorite><System-Id>42</System-Id><Index-Id>3</Index-Id><EquipmentID-Or-ThemeID>41</EquipmentID-Or-ThemeID><Sequence>2</Sequence><Data>268435455</Data><SimpleModeEnabled>1</SimpleModeEnabled></Favorite><Favorite><System-Id>46</System-Id><Index-Id>5</Index-Id><EquipmentID-Or-ThemeID>45</EquipmentID-

here is the output file : output_116_78785fb8a9_telemetry.xml

<STATUS version="1.0"><Backyard systemId="122996" statusVersion="9" airTemp="255" status="4" state="1" configUpdatedTime="2022-07-05T21:33:41.072Z" datetime="2022-07-06T16:34:40.6609999" /><Relay systemId="37" relayState="0" /><BodyOfWater systemId="2" flow="1" waterTemp="79" /><Filter systemId="3" valvePosition="1" filterSpeed="95" filterState="1" lastSpeed="51" /><VirtualHeater systemId="4" Current-Set-Point="80" enable="no" /><Heater systemId="5" heaterState="0" enable="yes" /><Chlorinator systemId="9" operatingMode="1" Timed-Percent="50" scMode="0" chlrError="0" chlrAlert="0" avgSaltLevel="3873" instantSaltLevel="3605" status="132" /><ColorLogic-Light systemId="33" lightState="0" currentShow="16" /><CSAD systemId="0" ph="" orp="" status="0" mode="0" /><BodyOfWater systemId="12" flow="1" waterTemp="-1" /><Filter systemId="14" valvePosition="1" filterSpeed="0" filterState="0" lastSpeed="80" /><VirtualHeater systemId="15" Current-Set-Point="100" enable="no" /><Heater systemId="16" heaterState="0" enable="yes" /><Chlorinator systemId="17" operatingMode="1" Timed-Percent="0" scMode="0" chlrError="0" chlrAlert="0" avgSaltLevel="0" instantSaltLevel="0" status="0" /><CSAD systemId="0" ph="" orp="" status="0" mode="0" /><Group systemId="35" groupState="0" /><Group systemId="39" groupState="0" /><Group systemId="41" groupState="0" /><Group systemId="45" groupState="0" /><Group systemId="47" groupState="0" /></STATUS>

ColorLogic Lights Not Showing as Devices

I don't know if I should put this here first, or try to post in the community, so let me know if I should start there because I don't know if this is an issue for anyone else, but my Pool Lights do not show up at all. I guess I need to know if the lights will show up automatically after installation or if there is some additional step I am missing. I have also done the required reboot multiple times as I troubleshoot (getting my instance of HA up to the current release and such). I was previously utilizing the Hayward OmniLogic integration, but from what I have read in in the community discussions that shouldn't be a problem as this just overides the built in integration.

I am running:
Home Assistant Core 2022.6.5
Home Assistant Supervisor 2022.05.3
Home Assistant OS 8.2

And I just installed the updated custom integration from HACS to 1.0.13 but it doesn't seem to fix my issue. I have tried deleting the reinstalling the built in integration but everything I have tried only gets me the entities for the Air Temp, Water Temp, and Filter Pump, the Filter Pump Alarm and the Filter Pump Speed. I have attached my telemetry data and response data from the Replit testing harness. I am hoping I am just missing some step and I can beg your forgiveness for wasting your time. Any help is appreciated.

Telemetry:
[{ 'systemId': 'REDACTED', 'statusVersion': '5', 'airTemp': '81', 'status': '1', 'state': '1', 'configUpdatedTime': '0001-01-01T00:00:00', 'datetime': '2022-06-14T16:34:07.2894091', 'Relays': [], 'BOWS': [{ 'systemId': '1', 'flow': '255', 'waterTemp': '87', 'Name': 'Pool', 'Supports-Spillover': 'no', 'Filter': { 'systemId': '2', 'valvePosition': '1', 'filterSpeed': '60', 'filterState': '1', 'lastSpeed': '18', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '18', 'Max-Pump-RPM': '3450', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Alarms': [] }, 'VirtualHeater': { 'systemId': '0', 'Current-Set-Point': '0', 'enable': 'no' }, 'CSAD': { 'systemId': '0', 'ph': '', 'orp': '', 'status': '0', 'mode': '0', 'Alarms': [] }, 'Group': { 'systemId': '17', 'groupState': '0' }, 'Lights': [{ 'systemId': '5', 'lightState': '0', 'currentShow': '12', 'speed': '3', 'brightness': '4' } ], 'Relays': [], 'Pumps': [], 'Heaters': [] } ], 'BackyardName': 'REDACTED', 'Msp-Vsp-Speed-Format': 'RPM', 'Msp-Time-Format': '12 Hour Format', 'Units': 'Standard', 'Msp-Chlor-Display': 'Salt', 'Msp-Language': 'English', 'Unit-of-Measurement': 'Standard', 'Alarms': [], 'Unit-of-Temperature': 'UNITS_FAHRENHEIT' } ]

Response Data:
<Response> <MSPConfig> <System> <Msp-Vsp-Speed-Format>RPM</Msp-Vsp-Speed-Format> <Msp-Time-Format>12 Hour Format</Msp-Time-Format> <Units>Standard</Units> <Msp-Chlor-Display>Salt</Msp-Chlor-Display> <Msp-Language>English</Msp-Language> <UI-Display-Mode>standard</UI-Display-Mode> <UI-MoodColor-Enabled>Yes</UI-MoodColor-Enabled> <UI-Heater-SimpleMode>Yes</UI-Heater-SimpleMode> <UI-Filter-SimpleMode>Yes</UI-Filter-SimpleMode> <UI-Lights-SimpleMode>Yes</UI-Lights-SimpleMode> </System> <Backyard> MSP Configuration <System-Id>0</System-Id> <Name>Backyard</Name> <Service-Mode-Timeout>0</Service-Mode-Timeout> <Sensor> <System-Id>3</System-Id> <Name>AirSensor</Name> <Type>SENSOR_AIR_TEMP</Type> <Units>UNITS_FAHRENHEIT</Units> </Sensor> <ColorLogic-Light> <System-Id>5</System-Id> <Name>Pool Lights</Name> <Type>COLOR_LOGIC_UCL</Type> <V2-Active>yes</V2-Active> </ColorLogic-Light> <Body-of-water> 01 <System-Id>1</System-Id> <Name>Pool</Name> <Type>BOW_POOL</Type> <Shared-Type>BOW_NO_EQUIPMENT_SHARED</Shared-Type> <Shared-Priority>SHARED_EQUIPMENT_LOW_PRIORITY</Shared-Priority> <Shared-Equipment-System-ID>0</Shared-Equipment-System-ID> <Supports-Spillover>no</Supports-Spillover> <Size-In-Gallons>7500</Size-In-Gallons> <Filter> <System-Id>2</System-Id> <Name>Filter Pump</Name> <Shared-Type>BOW_NO_EQUIPMENT_SHARED</Shared-Type> <Filter-Type>FMT_VARIABLE_SPEED_PUMP</Filter-Type> <Max-Pump-Speed>100</Max-Pump-Speed> <Min-Pump-Speed>18</Min-Pump-Speed> <Max-Pump-RPM>3450</Max-Pump-RPM> <Min-Pump-RPM>600</Min-Pump-RPM> <Priming-Enabled>yes</Priming-Enabled> <Vsp-Low-Pump-Speed>18</Vsp-Low-Pump-Speed> <Vsp-Medium-Pump-Speed>50</Vsp-Medium-Pump-Speed> <Vsp-High-Pump-Speed>100</Vsp-High-Pump-Speed> <Vsp-Custom-Pump-Speed>100</Vsp-Custom-Pump-Speed> <Freeze-Protect-Override-Interval>7200</Freeze-Protect-Override-Interval> </Filter> <Sensor> <System-Id>4</System-Id> <Name>WaterSensor</Name> <Type>SENSOR_WATER_TEMP</Type> <Units>UNITS_FAHRENHEIT</Units> </Sensor> </Body-of-water> </Backyard> <Schedules> <sche> <bow-system-id>1</bow-system-id> <equipment-id>2</equipment-id> <schedule-system-id>7</schedule-system-id> <event>164</event> <data>60</data> <enabled>1</enabled> <start-minute>0</start-minute> <start-hour>7</start-hour> <end-minute>0</end-minute> <end-hour>19</end-hour> <days-active>127</days-active> <recurring>1</recurring> </sche> <sche> <bow-system-id>1</bow-system-id> <equipment-id>2</equipment-id> <schedule-system-id>8</schedule-system-id> <event>164</event> <data>47</data> <enabled>1</enabled> <start-minute>0</start-minute> <start-hour>19</start-hour> <end-minute>0</end-minute> <end-hour>7</end-hour> <days-active>127</days-active> <recurring>1</recurring> </sche> <sche> <bow-system-id>0</bow-system-id> <equipment-id>5</equipment-id> <schedule-system-id>9</schedule-system-id> <event>164</event> <data>262924</data> <enabled>1</enabled> <start-minute>14</start-minute> <start-hour>18</start-hour> <end-minute>0</end-minute> <end-hour>0</end-hour> <days-active>127</days-active> <recurring>1</recurring> </sche> <sche> <bow-system-id>0</bow-system-id> <equipment-id>17</equipment-id> <schedule-system-id>19</schedule-system-id> <event>317</event> <data>1</data> <enabled>1</enabled> <start-minute>8</start-minute> <start-hour>18</start-hour> <end-minute>0</end-minute> <end-hour>0</end-hour> <days-active>127</days-active> <recurring>1</recurring> </sche> <sche> <bow-system-id>0</bow-system-id> <equipment-id>17</equipment-id> <schedule-system-id>20</schedule-system-id> <event>317</event> <data>1</data> <enabled>1</enabled> <start-minute>52</start-minute> <start-hour>16</start-hour> <end-minute>0</end-minute> <end-hour>0</end-hour> <days-active>127</days-active> <recurring>1</recurring> </sche> </Schedules> <Favorites> <Favorite> <System-Id>10</System-Id> <Index-Id>1</Index-Id> <EquipmentID-Or-ThemeID>5</EquipmentID-Or-ThemeID> <Sequence>0</Sequence> <Data>0</Data> <Data2>4</Data2> <Data3>4</Data3> <SimpleModeEnabled>1</SimpleModeEnabled> </Favorite> <Favorite> <System-Id>15</System-Id> <Index-Id>3</Index-Id> <EquipmentID-Or-ThemeID>14</EquipmentID-Or-ThemeID> <Sequence>2</Sequence> <Data>268435455</Data> <SimpleModeEnabled>1</SimpleModeEnabled> </Favorite> <Favorite> <System-Id>16</System-Id> <Index-Id>4</Index-Id> <EquipmentID-Or-ThemeID>5</EquipmentID-Or-ThemeID> <Sequence>3</Sequence> <Data>12</Data> <Data2>3</Data2> <Data3>4</Data3> <SimpleModeEnabled>1</SimpleModeEnabled> </Favorite> <Favorite> <System-Id>18</System-Id> <Index-Id>5</Index-Id> <EquipmentID-Or-ThemeID>17</EquipmentID-Or-ThemeID> <Sequence>4</Sequence> <Data>268435455</Data> <SimpleModeEnabled>1</SimpleModeEnabled> </Favorite> </Favorites> <Groups> <Group> <System-Id>14</System-Id> <Name>VoodooLounge</Name> <Icon-Id>14</Icon-Id> <Request> <Name>TurnOnOffForGroup</Name> <Parameters> <Parameter name="PoolID" dataType="int">0</Parameter> <Parameter name="EquipmentID" dataType="int">5</Parameter> <Parameter name="Data" dataType="int">263168</Parameter> <Parameter name="LightState" dataType="int">1</Parameter> </Parameters> </Request> <Request> <Name>TurnOnOffForGroup</Name> <Parameters> <Parameter name="PoolID" dataType="int">1</Parameter> <Parameter name="EquipmentID" dataType="int">2</Parameter> <Parameter name="Data" dataType="int">76</Parameter> <Parameter name="LightState" dataType="int">0</Parameter> </Parameters> </Request> </Group> <Group> <System-Id>17</System-Id> <Name>Evening</Name> <Icon-Id>17</Icon-Id> <Request> <Name>TurnOnOffForGroup</Name> <Parameters> <Parameter name="PoolID" dataType="int">0</Parameter> <Parameter name="EquipmentID" dataType="int">5</Parameter> <Parameter name="Data" dataType="int">262924</Parameter> <Parameter name="LightState" dataType="int">1</Parameter> </Parameters> </Request> <Request> <Name>TurnOnOffForGroup</Name> <Parameters> <Parameter name="PoolID" dataType="int">1</Parameter> <Parameter name="EquipmentID" dataType="int">2</Parameter> <Parameter name="Data" dataType="int">57</Parameter> <Parameter name="LightState" dataType="int">0</Parameter> </Parameters> </Request> </Group> </Groups> </MSPConfig> <MSPAPI version="0.4" latestversion="0.4"> <Device-APIs> <API System-Id="5" OpType="ON_OFF" ref="SetUIEquipmentCmd" EquipmentID="5" IsOn="API::STATUS::ColorLogic-Light::lightState"/> <API System-Id="5" OpType="ON_SETPOINT" ref="SetStandAloneLightShowV2" LightID="5" Show="API::STATUS::ColorLogic-Light::currentShow" Speed="API::STATUS::ColorLogic-Light::speed" Brightness="API::STATUS::ColorLogic-Light::brightness"/> <API System-Id="14" OpType="ON_OFF" ref="RunGroupCmd" ThemeID="14" IsOn="API::STATUS::Group::groupState"/> <API System-Id="17" OpType="ON_OFF" ref="RunGroupCmd" ThemeID="17" IsOn="API::STATUS::Group::groupState"/> <API System-Id="2" OpType="ON_OFF" ref="SetUIEquipmentCmd" EquipmentID="2" IsOn="API::STATUS::Filter::filterSpeed"/> <API System-Id="0" OpType="ON_OFF" ref="SetHeaterEnable" HeaterID="0"/> <API System-Id="0" OpType="SETPOINT" ref="SetUIHeaterCmd" HeaterID="0" Temp="API::STATUS::VirtualHeater::Current-Set-Point"/> <API System-Id="0" OpType="CSAD_MODE" ref="UISetCSADMode" CSADID="0" Mode="API::STATUS::CSAD::mode"/> <API System-Id="0" OpType="CSAD_CALIBRATION" ref="UISetCSADTargetValue" CSADID="0" Mode="API::STATUS::CSAD::ph"/> </Device-APIs> <Favorite-APIs> <API Favorite-Id="5" ref="SetStandAloneLightShowV2" OpType="ON_SETPOINT" LightID="5" Show="API::CONFIG::Favorite::Data" Speed="API::CONFIG::Favorite::Data2" Brightness="API::CONFIG::Favorite::Data3"/> <API Favorite-Id="14" ref="RunGroupCmd" OpType="ON_OFF" ThemeID="14" IsOn="API::STATUS::Group::groupState"/> <API Favorite-Id="17" ref="RunGroupCmd" OpType="ON_OFF" ThemeID="17" IsOn="API::STATUS::Group::groupState"/> <API Favorite-Id="2" ref="SetUIEquipmentCmd" OpType="ON_OFF" EquipmentID="2" IsOn="API::STATUS::Filter::filterState"/> <API Favorite-Id="0" ref="API::GOTOFEATURE"/> <API Favorite-Id="1" ref="SetHeaterEnable" HeaterID="0"/> <API Favorite-Id="0" ref="API::GOTOFEATURE"/> </Favorite-APIs> <Schedule-APIs> <API System-Id="5" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleAltCmd" EquipmentID="5" Show="API::STATUS::ColorLogic-Light::currentShow" Speed="API::STATUS::ColorLogic-Light::speed" Brightness="API::STATUS::ColorLogic-Light::brightness" Data4="0" ActionID="308"/> <API System-Id="5" OpType="EDIT_SCHEDULE" ref="EditUIScheduleAltCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Show="API::STATUS::ColorLogic-Light::currentShow" Speed="API::STATUS::ColorLogic-Light::speed" Brightness="API::STATUS::ColorLogic-Light::brightness" Data4="0" ActionID="308"/> <API System-Id="5" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id"/> <API System-Id="14" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="14" Data="1" ActionID="317"/> <API System-Id="14" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="1" ActionID="317"/> <API System-Id="14" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id"/> <API System-Id="17" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="17" Data="1" ActionID="317"/> <API System-Id="17" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="1" ActionID="317"/> <API System-Id="17" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id"/> <API System-Id="2" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="2" Data="API::STATUS::Filter::filterSpeed" ActionID="164"/> <API System-Id="2" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="API::STATUS::Filter::filterSpeed" ActionID="164"/> <API System-Id="2" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id"/> <API System-Id="0" OpType="CREATE_SCHEDULE" ref="CreateUIScheduleCmd" EquipmentID="0" Data="API::STATUS::VirtualHeater::Current-Set-Point" ActionID="315"/> <API System-Id="0" OpType="EDIT_SCHEDULE" ref="EditUIScheduleCmd" EquipmentID="API::CONFIG::sche::schedule-system-id" Data="API::STATUS::VirtualHeater::Current-Set-Point" ActionID="315"/> <API System-Id="0" OpType="REMOVE_SCHEDULE" ref="DeleteUIScheduleCmd" ScheduleSystemID="API::CONFIG::sche::schedule-system-id"/> </Schedule-APIs> </MSPAPI> </Response>

Heater issues when exposed to Homekit through Home Assistant

When exposing the pool water heater to homekit, I found that the heater began acting very strange and would not stay on (it would become disabled in the Omnilogic App).

Checking the Home Assistant logs I see the below error message:

[31m2022-07-03 22:30:38 ERROR (MainThread) [pyhap.characteristic] TargetHeatingCoolingState: value=0 is an invalid value.

This old homebridge ticket seems to concur that the value 0 means "Off" which would line up with the behavior that I saw.

Also found this HA "fix/workaround" that I wanted to flag...

Sharing this in case there is a property that isn't being set correctly in haomnilogic.

Wanted to share some ColorLogic light tips to the Wiki but don't know how

Hi @djtimca , I had some tips to add to the wiki for the new v2 lights, and used some of the stuff you have in the documentation and wiki as a starting point.

This is the result of what I put together for my pool dashboard using the OmniLogic HACS integration:

image

Step 1) Input Select Custom Order and Text

For one thing, I wanted to beautify and re-order how my light shows/solid light colors were displayed. What I wanted was to have clean names without the all capital letters and underscores, and also wanted to move the shows (non-solid colors) to the top of the list because I use those most frequently.

To do this I created a new input select in Settings > Devices & Services > Helpers.
The raw file from my home assistant storage is this:

{
  "version": 1,
  "minor_version": 2,
  "key": "input_select",
  "data": {
    "items": [
      {
        "id": "colorlogic_show",
        "name": "ColorLogic Show",
        "icon": "mdi:alarm-light",
        "options": [
          "Cool Cabaret",
          "Gemstone",
          "Mardi Gras",
          "Tranquility",
          "Twilight",
          "USA",
          "Voodoo Lounge",
          "Afternoon Sky",
          "Aqua Green",
          "Bright Yellow",
          "Burnt Orange",
          "Cloud White",
          "Crisp White",
          "Deep Blue Sea",
          "Emerald",
          "Flamingo",
          "Gold",
          "Mint",
          "Orange",
          "Pure White",
          "Royal Blue",
          "Sangria",
          "Teal",
          "Vivid Violet",
          "Warm Red",
          "Warm White",
          "Yellow"
        ]
      }
    ]
  }
}

Step 2 & 3) Input Sliders

I needed to have sliders to set my brightness and speed, aka input_number. I created 2 helpers in Settings > Devices & Services > Helpers to achieve this. Here is the raw code from .storage in home assistant config:

{
  "version": 1,
  "minor_version": 1,
  "key": "input_number",
  "data": {
    "items": [
      {
        "id": "colorlogic_speed",
        "min": 0.0,
        "max": 8.0,
        "name": "ColorLogic Speed",
        "icon": "mdi:speedometer",
        "step": 1.0,
        "mode": "slider"
      },
      {
        "id": "colorlogic_brightness",
        "min": 0.0,
        "max": 4.0,
        "name": "ColorLogic Brightness",
        "icon": "mdi:brightness-7",
        "step": 1.0,
        "mode": "slider"
      }
    ]
  }
}

Step 4) Toggle

Since I need something specific to happen to use the v2 light API I cannot use the normal light object's on/off toggle. I created a input_boolean (toggle) in Settings > Devices & Services > Helpers. Here is the raw configuration from .storage:

{
  "version": 1,
  "minor_version": 1,
  "key": "input_boolean",
  "data": {
    "items": [
      {
        "id": "colorlogic_light",
        "name": "ColorLogic Light",
        "icon": "mdi:lightbulb"
      }
    ]
  }
}

Now that we have helpers, we can assemble automation. In my case I was able to initially get things working with a single automation, however I found that if I power my lights on with the Hayward OmniLogic phone app, my helper toggle would be out of sync, and therefore landed on 2 automations. Here is the raw code to save time:

Step 5) Setup automations

Automation 1) Main custom light control for v2 lights

alias: Pool - Control Lights with Settings
description: Uses helpers to properly control Hayward OmniLogic v2 lights.
trigger:
  - platform: state
    entity_id:
      - input_boolean.colorlogic_light
  - platform: state
    entity_id:
      - input_number.colorlogic_brightness
  - platform: state
    entity_id:
      - input_number.colorlogic_speed
  - platform: state
    entity_id:
      - input_select.colorlogic_show
condition: []
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: light.home_huff_pool_color_lights_2
            state: "off"
          - condition: state
            entity_id: input_boolean.colorlogic_light
            state: "on"
        sequence:
          - service: omnilogic.set_v2_lights
            data:
              entity_id: light.home_huff_pool_color_lights_2
              speed: "{{ states('input_number.colorlogic_speed') }}"
              brightness: "{{ states('input_number.colorlogic_brightness') }}"
          - service: light.turn_on
            data:
              effect: >-
                {{ states('input_select.colorlogic_show') | upper | replace(' ',
                '_') }}
            target:
              entity_id: light.home_huff_pool_color_lights_2
      - conditions:
          - condition: state
            entity_id: light.home_huff_pool_color_lights_2
            state: "on"
          - condition: state
            entity_id: input_boolean.colorlogic_light
            state: "on"
        sequence:
          - service: omnilogic.set_v2_lights
            data:
              entity_id: light.home_huff_pool_color_lights_2
              speed: "{{ states('input_number.colorlogic_speed') }}"
              brightness: "{{ states('input_number.colorlogic_brightness') }}"
          - service: light.turn_on
            data:
              effect: >-
                {{ states('input_select.colorlogic_show') | upper | replace(' ',
                '_') }}
            target:
              entity_id: light.home_huff_pool_color_lights_2
      - conditions:
          - condition: state
            entity_id: light.home_huff_pool_color_lights_2
            state: "on"
          - condition: state
            entity_id: input_boolean.colorlogic_light
            state: "off"
        sequence:
          - service: light.turn_off
            data: {}
            target:
              entity_id: light.home_huff_pool_color_lights_2
mode: single

Automation 2) Keep state of light and toggle in sync

alias: Pool - Ensure Pool Lights helper toggle button matches light state
description: >-
  Ensures if the light is turned off with the Hayward app that the boolean
  toggle reflects the state of the actual light and stays in sync.
trigger:
  - platform: state
    entity_id:
      - light.home_huff_pool_color_lights_2
condition: []
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: light.home_huff_pool_color_lights_2
            state: "off"
        sequence:
          - service: input_boolean.turn_off
            data: {}
            target:
              entity_id: input_boolean.colorlogic_light
      - conditions:
          - condition: state
            entity_id: light.home_huff_pool_color_lights_2
            state: "on"
        sequence:
          - service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.colorlogic_light
mode: single

Step 6) Create a nice all in one dashboard experience

Here's the code to my card setup for all of the above configurations, and it works really nice.

      - square: false
        type: grid
        cards:
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: toggle
            entity: input_boolean.colorlogic_light
            name: Pool Lights
            show_state: true
          - type: entities
            entities:
              - entity: input_number.colorlogic_brightness
                name: Brightness
              - entity: input_number.colorlogic_speed
                name: Speed
              - entity: input_select.colorlogic_show
                name: Light Show
            state_color: true
            show_header_toggle: true
        columns: 2

Again, this is what you will end up with:
image

Chlorinator Control?

Is it possible to add control for the chlorinator?

There's automated chlorine level sensors out there, being able to control the chlorinator could make it possible to automate the settings using HA.

2 sensors no longer showing, lights and heater control not available

Two of the sensors randomly stopped showing / being available recently, the spa chlorinator salt level and spa chlorinator setting. Additionally, reviewing the GitHub it seems I should be able to control the lights and the heater. I can access these via the Hayward app, but they do not show up in HA. Attached are the telemetry files. I would appreciate any help.

Thanks.
output_116_c3e941f61b_telemetry-xml.txt
output_116_67debe00e2_mspconfig-xml.txt
output_116_3ae060e6a6_telemetry-json.txt

Freeze Protect status

I just managed to get this added to my Raspberry Pi 4 running HA. Thanks so much.

Some things I don't yet see
Heater status -> on/off
Chlorinator status -> on/off
Freeze Protect mode status (main pump) -> on/off
Freeze Protect mode status (water features) -> on/off
Freeze protect settings (what temp does it kick on)?

Glad to help test or even play with coding.. noob in the space though

Individual Heater support

Hi, firstly thank you for the great integration. It is much better here where updates can be posted on a timely basis.

I am wondering if you can update it to deal with individual heaters. My remote vacation home installation has two heaters... a heat pump and a gas heater. On the Hayward Omnilogic app, under heaters, I simply see All Heaters with an on/off switch and below a setpoint for the water temperature. If I click on the priority change button, then I see my two individual heaters where I can change priority but more importantly, turn on or off the individual heaters. Based on the conditions I may only want one heater active or both. After installing the integration, I see two water heaters representing each of my heaters. The setpoint for either water heater changes the overall setpoint of the pool ... which is fine because Omnilogic only allows a single setpoint. However, if I change either water heater to on, it turns on the switch for all heaters, not the individual heater. Therefore although I have control over the overall 'virtual' heater turning on/off and its setpoint, I do not have control over each individual heater. I have added my telemetry files per your instructions, but I am unsure if I did it right.

Thanks in advance.
Glenn

Telemetry xml
</STATUS

Telemetry Json
[{'systemId': 'REDACTED', 'statusVersion': '9', 'airTemp': '39', 'status': '1', 'state': '1', 'configUpdatedTime': '2022-11-27T14:52:19.875Z', 'datetime': '2022-11-27T08:06:37.6989489', 'Relays': [{'systemId': '11', 'relayState': '0', 'Name': 'Mister', 'Type': 'RLY_HIGH_VOLTAGE_RELAY', 'Function': 'RLY_ACCESSORY', 'Alarms': []}], 'BOWS': [{'systemId': '1', 'flow': '255', 'waterTemp': '58', 'Name': 'Pool', 'Supports-Spillover': 'no', 'Filter': {'systemId': '2', 'valvePosition': '1', 'filterSpeed': '77', 'filterState': '1', 'lastSpeed': '19', 'Name': 'Filter Pump', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Filter-Type': 'FMT_VARIABLE_SPEED_PUMP', 'Max-Pump-Speed': '100', 'Min-Pump-Speed': '19', 'Max-Pump-RPM': '3250', 'Min-Pump-RPM': '600', 'Priming-Enabled': 'yes', 'Alarms': []}, 'VirtualHeater': {'systemId': '3', 'Current-Set-Point': '85', 'enable': 'yes'}, 'Heater': {'systemId': '5', 'heaterState': '1', 'enable': 'yes', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Operation': {'VirtualHeater': {'System-Id': '5', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '-1', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '98', 'enable': 'yes', 'systemId': '3'}}, 'Name': 'Gas Heater', 'Alarms': []}, 'CSAD': {'systemId': '0', 'ph': '', 'orp': '', 'status': '0', 'mode': '0', 'Alarms': []}, 'Group': {'systemId': '18', 'groupState': '0'}, 'Lights': [{'systemId': '7', 'lightState': '0', 'currentShow': '10', 'Name': 'Light', 'Type': 'CL_P_COLOR', 'V2': 'no', 'Alarms': []}], 'Relays': [{'systemId': '6', 'relayState': '0', 'Name': 'Water Ft', 'Type': 'RLY_VALVE_ACTUATOR', 'Function': 'RLY_WATER_FEATURE', 'Alarms': []}], 'Pumps': [], 'Heaters': [{'systemId': '4', 'heaterState': '0', 'enable': 'yes', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Operation': {'VirtualHeater': {'System-Id': '4', 'Name': 'Heat Pump', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_HEAT_PUMP', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_1', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '-1', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '98', 'enable': 'yes', 'systemId': '3'}}, 'Name': 'Heat Pump', 'Alarms': []}, {'systemId': '5', 'heaterState': '1', 'enable': 'yes', 'Shared-Type': 'BOW_NO_EQUIPMENT_SHARED', 'Operation': {'VirtualHeater': {'System-Id': '5', 'Name': 'Gas Heater', 'Type': 'PET_HEATER', 'Heater-Type': 'HTR_GAS', 'Enabled': 'yes', 'Priority': 'HTR_PRIORITY_2', 'Run-For-Priority': 'HTR_MAINTAINS_PRIORITY_FOR_NEVER', 'Shared-Equipment-System-ID': '-1', 'Current-Set-Point': '85', 'Max-Water-Temp': '104', 'Min-Settable-Water-Temp': '55', 'Max-Settable-Water-Temp': '98', 'enable': 'yes', 'systemId': '3'}}, 'Name': 'Gas Heater', 'Alarms': []}]}], 'BackyardName': 'REDACTED', 'Msp-Vsp-Speed-Format': 'RPM', 'Msp-Time-Format': '12 Hour Format', 'Units': 'Standard', 'Msp-Chlor-Display': 'Salt', 'Msp-Language': 'English', 'Unit-of-Measurement': 'Standard', 'Alarms': [], 'Unit-of-Temperature': 'UNITS_FAHRENHEIT'}]

Msp config
RPM12 Hour FormatStandardSaltEnglishstandardYesYesYesYes
MSP Configuration
0Backyard09AirSensorSENSOR_AIR_TEMPUNITS_FAHRENHEIT11MisterRLY_HIGH_VOLTAGE_RELAYRLY_ACCESSORY
01
1PoolBOW_POOLBOW_NO_EQUIPMENT_SHAREDSHARED_EQUIPMENT_LOW_PRIORITY0no120002Filter PumpBOW_NO_EQUIPMENT_SHAREDFMT_VARIABLE_SPEED_PUMP100193250600yes1950100072003BOW_NO_EQUIPMENT_SHAREDyes85881045598
PEO_HEATER_EQUIPMENT
4Heat PumpPET_HEATERHTR_HEAT_PUMPyesHTR_PRIORITY_1HTR_MAINTAINS_PRIORITY_FOR_NEVER-1
PEO_HEATER_EQUIPMENT
5Gas HeaterPET_HEATERHTR_GASyesHTR_PRIORITY_2HTR_MAINTAINS_PRIORITY_FOR_NEVER-16Water FtRLY_VALVE_ACTUATORRLY_WATER_FEATURE757LightCL_P_COLOR10WaterSensorSENSOR_WATER_TEMPUNITS_FAHRENHEIT121316477106015127116141641011601912711715164263171001902212711319164881001032113201648810010321171160268435455116Mist114TurnOnOffForGroup01110TurnOnOffForGroup1200SetHeaterScheduleCmd13550000000SetUITemporaryHeaterPriorityCmd145-1-1-1SetUITemporaryHeaterMaintainPriorityCmd1300255255255SetUITemporaryHeaterEnable130SetUITemporaryHeaterEnable140SetUITemporaryHeaterEnable150SetSolarScheduleCmd13550000000TurnOnOffForGroup1600TurnOnOffForGroup17263178018Swim Lights167200TurnOnOffForGroup01100TurnOnOffForGroup12190SetHeaterScheduleCmd13860000000SetUITemporaryHeaterPriorityCmd145-1-1-1SetUITemporaryHeaterMaintainPriorityCmd1300255255255SetUITemporaryHeaterEnable130SetUITemporaryHeaterEnable140SetUITemporaryHeaterEnable150SetSolarScheduleCmd13870000000TurnOnOffForGroup1600TurnOnOffForGroup172631711

Globrite color changing

Hi, Thank you for this integration !

Anyone explored the idea of automating color change on a regular GLOBRITE light ?
You have to cycle power on the light to obtain various modes.

They do sell a module for this specifically but quite expensive !
https://www.pentair.com/en-us/products/residential/pool-spa-equipment/pool-lighting/intellibrite_controller.html

Any way to automate this in HA ?

**Number of times to cycle power (1-14)**
`1 SAm Mode: Cycles through white, magenta, blue and green colors
(emulates the Pentair SAm® color changing light).

2 Party Mode: Rapid color changing building energy and excitement.

3 Romance Mode: Slow color transitions creating a mesmerizing and
calming effect.

4 Caribbean Mode: Transitions between a variety of blues and greens.

5 American Mode: Patriotic red, white and blue transition.

6 California Sunset Mode: Dramatic transitions of orange, red and
magenta tones.

7 Royal Mode: Richer, deeper color tones.

8 Blue: Fixed color.

9 Green: Fixed color.

10 Red: Fixed color.

11 White: Fixed color.

12 Magenta: Fixed color.

13 Hold: Save the current color effect during a color light show.

14 Recall: Activate the last saved color effect.`

HAAOS?

Is this available if I'm running HAAOS (pre-baked image on a Rapsberry Pi4?
New to all this, so be gentle please.

Username and Password Input Field Labels Malformed

After coming across the information for the HACS integration (YAY!! Just in time for the new season!), I've gone ahead and set it up and all worked okay!

I didn't initially see a way to change the pump speed so I figured a clean install would help (I just came across #9 which I'll look into now haha). That being said, as I was setting up the new integration, I noticed that, when asked to enter the credentials, the input labels aren't properly formatted. Just though I'd raise an issue in case it's something that can be adjusted (unless it's out of your hands). I see the following for the username and password fields. A hard refresh of the page to clear the browser cache doesn't correct the issue

image

Once again, thank you so much for the work on this integration!! The transition and new abilities are amazing, and I can't wait to dig into it!! 😃

Error doing job: Task exception was never retrieved

Getting a lot (thousands) of these (with 1.0.13)

This error originated from a custom integration.

Logger: homeassistant
Source: custom_components/omnilogic/sensor.py:105 
Integration: Hayward Omnilogic 
First occurred: June 15, 2022, 2:28:36 PM (2492 occurrences) 
Last logged: 12:55:42 PM

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 137, in _handle_refresh_interval
    await self._async_refresh(log_failures=True, scheduled=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 270, in _async_refresh
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 330, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 533, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 571, in _async_write_ha_state
    state = self._stringify_state(available)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 539, in _stringify_state
    if (state := self.state) is None:
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 388, in state
    value = self.native_value
  File "/config/custom_components/omnilogic/sensor.py", line 105, in native_value
    sensor_data = self.coordinator.data[self._item_id][self._state_key]
KeyError: ('Backyard', '157107', 'BOWS', '1')

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.