From e2a7879c13027a49c2bbcfd0dcea1732bead12e0 Mon Sep 17 00:00:00 2001 From: Juan Altmayer Pizzorno Date: Thu, 1 Oct 2026 10:11:31 -0400 Subject: [PATCH 1/2] Add TemperatureRiseInformation field constants The controller pushes a TemperatureRiseInformation document under each body of water while it heats or cools toward its set point. Its TargetEndDateTime is the predicted completion time the Poolside app shows as "ready in ...". Add the field and key names so consumers can import them like the other status fields. Co-Authored-By: Claude Opus 5.5 --- src/aiopoolside/const.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/aiopoolside/const.py b/src/aiopoolside/const.py index 9aa4415..0cc3aad 100644 --- a/src/aiopoolside/const.py +++ b/src/aiopoolside/const.py @@ -151,6 +151,15 @@ class CoolingMode(StrEnum): CURRENT_TEMPERATURE_FIELD = "Temperature" CURRENT_STATE_FIELD = "CurrentState" +# TemperatureRiseInformation is a JSON document pushed while a body of water +# heats (or cools) toward its set point; None when no heat-up is in progress. +# TargetEndDateTime is the controller's predicted completion time (what the +# app shows as "ready in"). Unset timestamps arrive as 0001-01-01 +# placeholders, e.g. TargetEndDateTime while TemperatureState is SAMPLING. +TEMPERATURE_RISE_INFORMATION_FIELD = "TemperatureRiseInformation" +TEMPERATURE_RISE_TARGET_END_KEY = "TargetEndDateTime" +TEMPERATURE_RISE_ACTUAL_END_KEY = "ActualEndDateTime" + # Site-level status items (Device.setStatus, keyed by the site UUID from # Site.getControlLayout). LastTimeSiteWasLoaded changes whenever the # attendant's site configuration is edited - a signal to re-fetch the From a16ee54441e9a5109444e79528e726092cfcdabc Mon Sep 17 00:00:00 2001 From: Juan Altmayer Pizzorno Date: Fri, 2 Oct 2026 10:46:16 -0400 Subject: [PATCH 2/2] Constants for the TemperatureRiseInformation state and event type Following review of the integration that uses them: drop the unused ActualEndDateTime key (the controller clears the document when a heat-up ends), and add TemperatureState and HeatingEventType with the values the Poolside app requires to show a ready time (SAMPLED, NORMAL). Co-Authored-By: Claude Opus 5.5 --- src/aiopoolside/const.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/aiopoolside/const.py b/src/aiopoolside/const.py index 0cc3aad..ac2aaf3 100644 --- a/src/aiopoolside/const.py +++ b/src/aiopoolside/const.py @@ -153,12 +153,18 @@ class CoolingMode(StrEnum): # TemperatureRiseInformation is a JSON document pushed while a body of water # heats (or cools) toward its set point; None when no heat-up is in progress. -# TargetEndDateTime is the controller's predicted completion time (what the -# app shows as "ready in"). Unset timestamps arrive as 0001-01-01 -# placeholders, e.g. TargetEndDateTime while TemperatureState is SAMPLING. +# TargetEndDateTime is the controller's predicted completion time. The vendor +# app shows it as "ready in" only for a sampled, normal heat-up +# (TemperatureState SAMPLED, HeatingEventType NORMAL): while SAMPLING the +# controller already fills in a preliminary estimate, and MAINTAIN_TEMPERATURE +# and LEARNING aren't heat-ups. Unset timestamps arrive as 0001-01-01 +# placeholders. TEMPERATURE_RISE_INFORMATION_FIELD = "TemperatureRiseInformation" TEMPERATURE_RISE_TARGET_END_KEY = "TargetEndDateTime" -TEMPERATURE_RISE_ACTUAL_END_KEY = "ActualEndDateTime" +TEMPERATURE_RISE_STATE_KEY = "TemperatureState" +TEMPERATURE_RISE_EVENT_TYPE_KEY = "HeatingEventType" +TEMPERATURE_RISE_SAMPLED = "SAMPLED" +TEMPERATURE_RISE_NORMAL = "NORMAL" # Site-level status items (Device.setStatus, keyed by the site UUID from # Site.getControlLayout). LastTimeSiteWasLoaded changes whenever the