Skip to content

Calypso connecté (modelId 1658) missing from model.py — falls back to "Unknown product (1658)" #149

Description

@picosam

Summary

get_model_infos() in model.py has no branch for modelId 1658, so an Atlantic Calypso connecté water heater falls through to the else at model.py:424 and is reported as Unknown product (1658) with type = CozytouchDeviceType.UNKNOWN. 1657 is already mapped as Calypso 200L with exactly the shape this device seems to need, so it looks like a natural template.

Thanks for the integration — it is the only thing that reaches this appliance at all, since the first-party Overkiz integration only sees the bridge Pod.

Environment

  • Integration version: 1.4.0
  • Home Assistant: 2026.7
  • Protocol: Magellan (apis.groupe-atlantic.com/magellan). This appliance joins the house Wi-Fi directly and acts as its own gateway (gateway type: 1000), so it is invisible on the Overkiz surface — that account's enduserAPI/setup/devices returns only the CozyTouch bridge Pod.
  • Device: reported name Calypso connecté, modelId 1658, firmware 2.7.3 (capability 121), 84 capabilities.

What happens today

Falling into the fallback sets only name, type = UNKNOWN, and HVACModes = {0: OFF, 4: HEAT}. Beyond the display name, two concrete effects traceable in the code:

  1. HeatingModes is never set. Capability 87 is declared as a select bound to modelList = "HeatingModes" (capability.py:183-188), but select.py:77-81 falls back to self._list = {-1: "Undefined"} when that key is absent from modelInfos. The heating-mode select therefore offers a single Undefined option, so MANUEL / ECO+ / PROG cannot be chosen from HA even though the device reports and accepts the mode.
    Confirmed live (2026-07-24) after installing v1.4 against this device: the resulting
    heating-mode select entity reads exactly Undefined, while capability 87 simultaneously
    reports 3 (ECO+). So the device's mode is known but unselectable from HA — this is
    observed behaviour, not just inferred from the code.

  2. Capability 99 is mislabelled. capability.py:202-208 branches on type == WATER_HEATER; with UNKNOWN this device exposes it as dhw_pump (mdi:faucet) rather than resistance (mdi:radiator).

Evidence from this unit

All read-only cloud reads; no writes exercised.

ID Upstream name Observed Corroboration
87 heating_mode 3 The CozyTouch app showed ECO+ selected at the same moment, and the app's mode tabs match the {0: MANUEL, 3: ECO+, 4: PROG} enum. Only 3 = ECO+ is independently confirmed; 0 and 4 are taken from your mapping, not verified here.
121 firmware_version 2.7.3 Well-formed, matches the app.
179 wifi_rssi -46 Matches -47 dBm measured independently by the Wi-Fi controller the device is associated with.
219 wifi_ssid (redacted) Matches the SSID the device actually joined.
22 target_temperature_dhw 54.5 Matches the setpoint shown in the app. Note this model exposes neither 160 nor 161, which capability.py uses for the bounds of the temperature_adjustment_number.
265 / 267 tank middle / bottom temperature 54.83 / 57.75 Plausible and consistent with the setpoint.

Two smaller observations that may be useful:

  • Capability 312 (the # For test entry, Temp_312) reads 54.5 on this unit — identical to capability 22's setpoint.
  • Capabilities 88 and 98 carry product/serial-style identifiers. Values omitted here; happy to share privately if they help identify the exact commercial variant.

Of the 84 capability IDs this device reports, 36 are mapped by v1.4's capability.py and 48 are not:

15, 23, 58, 150, 164, 168, 182, 188, 218, 223, 224, 228, 230, 234, 244, 252,
253, 278, 280, 281, 284, 285, 286, 288, 290, 304, 307, 308, 309, 310, 311,
329, 330, 331, 332, 333, 336, 337, 338, 339, 340, 351, 381,
105011, 105012, 105122, 105300, 105301

That list is orthogonal to the model mapping (those are covered by the "create entities for unknown capabilities" option) — included only in case an unmapped-ID inventory for a Calypso variant is of any use.

Suggested change

If 1658 is simply an adjacent Calypso variant, extending the existing branch would cover it:

elif modelId in (1657, 1658):
    modelInfos["name"] = "Calypso 200L"
    modelInfos["type"] = CozytouchDeviceType.WATER_HEATER
    modelInfos["HVACModes"] = {
        0: HVACMode.OFF,
        4: HVACMode.HEAT,
    }

    modelInfos["HeatingModes"] = {
        0: HEATING_MODE_MANUAL,
        3: HEATING_MODE_ECO_PLUS,
        4: HEATING_MODE_PROG,
    }

A separate branch may be preferable if 1658 deserves its own display name — I cannot determine the exact commercial designation or tank capacity from the API; the device reports its own name as Calypso connecté. I'd defer to you on naming.

Caveat stated plainly: since I have only read this device, I can confirm the fallback behaviour and the reported values, but not that mode-setting works once HeatingModes is populated.

Offer

A full 84-capability dump for this device is attached (dump_json output, scrubbed of
address/household/serial/account identifiers; capabilities 88, 98 and 219 redacted), and I'm happy to test a patch against the live unit and report back.

Full 84-capability dump for this unit (scrubbed)

Account/address/household identifiers removed; capabilities 88, 98 and 219 redacted.

capabilityId value modificationDate
15 2 1784704657
22 54.5000000000000000000 1784704656
23 50.0000000000000000000 1784704656
57 0 1784704656
58 0 1784704656
59 5597 1784873793
86 1 1784704656
87 3 1784753243
88 «redacted — product/serial-style id» 1784704656
98 «redacted — product/serial-style id» 1784704656
99 0 1784857148
121 2.7.3 1784704656
150 [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] 1784704657
152 0 1784704656
164 10 1784704654
165 0 1784704656
168 16133 1784704657
179 -52 1784872988
182 0 1784704657
188 2 1784704656
218 0 1784797977
219 «redacted — wifi SSID» 1784704656
222 [0,0] 1784704657
223 3 1784704657
224 113 1784704657
226 [0,0] 1784704657
227 0 1784704656
228 20.0000000000000000000 1784704656
230 0 1784704656
231 55.0000000000000000000 1784704656
232 0 1784704656
234 62.0000000000000000000 1784704656
244 3 1784704655
245 [[540,1140],[0,0],[0,0]] 1784704657
246 [[540,1140],[0,0],[0,0]] 1784704657
247 [[540,1140],[0,0],[0,0]] 1784704657
248 [[540,1140],[0,0],[0,0]] 1784704657
249 [[540,1140],[0,0],[0,0]] 1784704657
250 [[540,1140],[0,0],[0,0]] 1784704657
251 [[540,1140],[0,0],[0,0]] 1784704657
252 62.0000000000000000000 1784704656
253 50.0000000000000000000 1784704656
258 240 1784704656
265 54.21000000000000000000 1784856934
267 57.7500000000000000000 1784704656
268 377 1784856973
270 451 1784704656
271 78 1784797988
278 0 1784857428
280 15.0000000000000000000 1784704656
281 0 1784857148
283 0 1784704656
284 0 1784704656
285 0 1784704656
286 0 1784704656
288 2 1784704656
290 [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] 1784704657
304 1 1784704656
307 480 1784704656
308 0 1784704657
309 0 1784704657
310 3 1784704657
311 33 1784704657
312 54.5000000000000000000 1784704656
315 7200 1784704655
329 1 1784704655
330 15 1784704656
331 1440 1784704656
332 15 1784704656
333 1440 1784704655
336 3 1784704657
337 0 1784753249
338 1 1784753249
339 0 1784857148
340 1 1784704655
351 0 1784704655
381 1 1784704656
105011 16133 1784704656
105012 15 1784704656
105122 0 1784704656
105300 62.0000000000000000000 1784704656
105301 50 1784704655
105906 84 1784753248
105907 84 1784753248

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions