Skip to content

feat: add holiday support for Velis Slp (Nuos) devices#182

Open
dpmworld wants to merge 1 commit into
fustom:mainfrom
dpmworld:feat/slp-holiday-support
Open

feat: add holiday support for Velis Slp (Nuos) devices#182
dpmworld wants to merge 1 commit into
fustom:mainfrom
dpmworld:feat/slp-holiday-support

Conversation

@dpmworld
Copy link
Copy Markdown

@dpmworld dpmworld commented May 8, 2026

The official Ariston NET app exposes a dedicated holiday endpoint for Slp devices at POST /api/v2/velis/slpPlantData/{gw}/holiday, but the library only exposes a holiday setter on AristonGalevoDevice that targets the Galevo path /remote/plantData/{gw}/holiday. There was no way to schedule or clear a holiday on a Nuos heat pump from Python.

This change adds:

  • AristonAPI.set_velis_slp_holiday (sync + async) that POSTs to the Slp-specific endpoint with {"new": holiday_end_date} (or {"new": null} to clear).
  • AristonNuosSplitDevice.set_holiday(holiday_end) (sync + async) that accepts a datetime.date (or None) and forwards it to the API after formatting the ISO string the cloud expects, mirroring the existing Galevo set_holiday shape.

The endpoint and its presence in the app were verified by inspecting the strings table in the official APK's classes.dex files.

The official Ariston NET app exposes a dedicated holiday endpoint for
Slp devices at `POST /api/v2/velis/slpPlantData/{gw}/holiday`, but the
library only exposes a holiday setter on `AristonGalevoDevice` that
targets the Galevo path `/remote/plantData/{gw}/holiday`. There was
no way to schedule, clear, or read the holiday state on a Nuos heat
pump from Python.

This change adds:

* `AristonAPI.set_velis_slp_holiday` (sync + async) that POSTs to the
  Slp-specific endpoint with `{"new": holiday_end_date}` (or
  `{"new": null}` to clear).
* `AristonNuosSplitDevice.set_holiday(holiday_end)` (sync + async)
  that accepts a `datetime.date` (or `None`) and forwards it to the
  API after formatting the ISO string the cloud expects, mirroring
  the existing Galevo `set_holiday` shape.
* `NuosSplitProperties.HOLIDAY_UNTIL = "holidayUntil"` and two new
  read-only properties on `AristonNuosSplitDevice`:
    - `holiday_end_date` -> the ISO date string the cloud has on file
      (or `None` when no holiday is scheduled)
    - `holiday_active` -> `True` when `holidayUntil` is non-null
  The Slp payload does not expose a dedicated boolean: an active
  holiday is signalled by `holidayUntil` being a non-null string.
* The setters now optimistically write `holidayUntil` back into
  `device.data`, so the new properties reflect the requested change
  immediately without waiting for an `update_state()` round-trip
  (mirrors the cache-update pattern used by the temperature and
  operation-mode setters).

The endpoint, the field name `holidayUntil`, and the fact that no
dedicated boolean exists were verified against the official APK
(`com.remotethermo.aristonnet` v6.0.7773.40338): the endpoint string
is present in `classes*.dex`, and the `SlpPlantDataDto` Kotlin model
declares `holidayUntil: String?` with the matching `@SerialName`.
@dpmworld dpmworld force-pushed the feat/slp-holiday-support branch from d9f30fa to cda2c1c Compare May 8, 2026 11:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant