iMicknl / ha-tahoma

Custom component for Home Assistant to interact with smart devices via Somfy TaHoma or other OverKiz based API's.
MIT License
151 stars 30 forks source link

Add support for DomesticHotWaterProduction (io:AtlanticDomesticHotWaterProductionV2_CETHI_V4_IOComponent) #341

Closed Pol2Tls closed 3 years ago

Pol2Tls commented 3 years ago

Hi, thanks for your work !

Device information "Calypso Connectée" is an Atlantic Water Heater compatible with IO homecontrol. Full description is here : https://www.atlantic-electrique.fr/chauffe-eau-enr/les-chauffe-eau-thermodynamiques/calypso-connecte

With the cozytouch app we can choose the number of showers , Boost, Eco mode and set it to manual or auto: atlanticwaterheater

Device details Unsupported TaHoma device detected (io:AtlanticDomesticHotWaterProductionV2_CETHI_V4_IOComponent - WaterHeatingSystem - DomesticHotWaterProduction - io://XXXX-XXXX-XXXX/XXXXXXX#1)

{
    "commands": [{
        "commandName": "delayedStopIdentify",
        "nparams": 1
    }, {
        "commandName": "getName",
        "nparams": 0
    }, {
        "commandName": "identify",
        "nparams": 0
    }, {
        "commandName": "refreshManufacturerName",
        "nparams": 0
    }, {
        "commandName": "refreshTargetTemperature",
        "nparams": 0
    }, {
        "commandName": "refreshWaterConsumption",
        "nparams": 0
    }, {
        "commandName": "setComfortTargetTemperature",
        "nparams": 1
    }, {
        "commandName": "setDateTime",
        "nparams": 1
    }, {
        "commandName": "setEcoTargetTemperature",
        "nparams": 1
    }, {
        "commandName": "setFrostProtectionTargetTemperature",
        "nparams": 1
    }, {
        "commandName": "setName",
        "nparams": 1
    }, {
        "commandName": "setTargetTemperature",
        "nparams": 1
    }, {
        "commandName": "startIdentify",
        "nparams": 0
    }, {
        "commandName": "stopIdentify",
        "nparams": 0
    }, {
        "commandName": "wink",
        "nparams": 1
    }, {
        "commandName": "pairOneWayController",
        "nparams": 2
    }, {
        "commandName": "refreshAntiLegionellosis",
        "nparams": 0
    }, {
        "commandName": "refreshAwayModeDuration",
        "nparams": 0
    }, {
        "commandName": "refreshBoilerInstallationOption",
        "nparams": 0
    }, {
        "commandName": "refreshBoostModeDuration",
        "nparams": 0
    }, {
        "commandName": "refreshCurrentOperatingMode",
        "nparams": 0
    }, {
        "commandName": "refreshDHWCapacity",
        "nparams": 0
    }, {
        "commandName": "refreshDHWError",
        "nparams": 0
    }, {
        "commandName": "refreshDHWMode",
        "nparams": 0
    }, {
        "commandName": "refreshElectricalExtraManagement",
        "nparams": 0
    }, {
        "commandName": "refreshExtractionOption",
        "nparams": 0
    }, {
        "commandName": "refreshInstallation",
        "nparams": 0
    }, {
        "commandName": "refreshMiddleWaterTemperature",
        "nparams": 0
    }, {
        "commandName": "refreshOperatingModeCapabilities",
        "nparams": 0
    }, {
        "commandName": "refreshOperatingRange",
        "nparams": 0
    }, {
        "commandName": "refreshOperatingTime",
        "nparams": 0
    }, {
        "commandName": "refreshProgrammingSlots",
        "nparams": 0
    }, {
        "commandName": "refreshRateManagement",
        "nparams": 0
    }, {
        "commandName": "refreshSmartGridOption",
        "nparams": 0
    }, {
        "commandName": "setAntiLegionellosis",
        "nparams": 1
    }, {
        "commandName": "setAwayModeDuration",
        "nparams": 1
    }, {
        "commandName": "setBoilerInstallationOption",
        "nparams": 1
    }, {
        "commandName": "setBoostModeDuration",
        "nparams": 1
    }, {
        "commandName": "setCurrentOperatingMode",
        "nparams": 1
    }, {
        "commandName": "setDHWMode",
        "nparams": 1
    }, {
        "commandName": "setElectricalExtraManagement",
        "nparams": 1
    }, {
        "commandName": "setExtractionOption",
        "nparams": 1
    }, {
        "commandName": "setHaltedTargetTemperature",
        "nparams": 1
    }, {
        "commandName": "setInstallation",
        "nparams": 1
    }, {
        "commandName": "setOperatingRange",
        "nparams": 1
    }, {
        "commandName": "setProgrammingSlots",
        "nparams": 1
    }, {
        "commandName": "setRateManagement",
        "nparams": 1
    }, {
        "commandName": "setSmartGridOption",
        "nparams": 1
    }, {
        "commandName": "unpairAllOneWayControllers",
        "nparams": 0
    }, {
        "commandName": "unpairOneWayController",
        "nparams": 2
    }],
    "states": [{
        "type": "ContinuousState",
        "qualifiedName": "core:BoostModeDurationState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:ComfortTargetTemperatureState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:DHWPSoftwareVersionState"
    }, {
        "type": "DataState",
        "qualifiedName": "core:DateTimeState"
    }, {
        "values": ["good", "low", "normal", "verylow"],
        "type": "DiscreteState",
        "qualifiedName": "core:DiscreteRSSILevelState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:EcoTargetTemperatureState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:FrostProtectionTargetTemperatureState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:HaltedTargetTemperatureState"
    }, {
        "type": "DataState",
        "qualifiedName": "core:ManufacturerNameState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:MaximalShowerManualModeState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:MaximalTemperatureManualModeState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:MinimalShowerManualModeState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:MinimalTemperatureManualModeState"
    }, {
        "type": "DataState",
        "qualifiedName": "core:NameState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:NumberOfTankState"
    }, {
        "values": ["antifreeze", "auto", "away", "boost", "eco", "frostprotection", "manual", "max", "normal", "off", "on", "prog", "program"],
        "type": "DiscreteState",
        "qualifiedName": "core:OperatingModeState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:PriorityLockTimerState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:RSSILevelState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:SecuredPositionTemperatureState"
    }, {
        "values": ["available", "unavailable"],
        "type": "DiscreteState",
        "qualifiedName": "core:StatusState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:TargetTemperatureState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:TemperatureState"
    }, {
        "type": "DataState",
        "qualifiedName": "core:V40WaterVolumeEstimationState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:VersionState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "core:WaterConsumptionState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "io:AntiLegionellosisState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "io:AwayModeDurationState"
    }, {
        "values": ["boilerOptimising", "boilerPriority", "heatPumpOptimising", "heatPumpPriority"],
        "type": "DiscreteState",
        "qualifiedName": "io:BoilerInstallationOptionState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "io:DHWCapacityState"
    }, {
        "type": "DataState",
        "qualifiedName": "io:DHWErrorState"
    }, {
        "values": ["autoMode", "manualEcoActive", "manualEcoInactive"],
        "type": "DiscreteState",
        "qualifiedName": "io:DHWModeState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "io:ElectricBoosterOperatingTimeState"
    }, {
        "values": ["auto", "deactive"],
        "type": "DiscreteState",
        "qualifiedName": "io:ElectricalExtraManagementState"
    }, {
        "values": ["fastExtractionSpeed", "lowExtractionSpeed", "noExtraction"],
        "type": "DiscreteState",
        "qualifiedName": "io:ExtractionOptionState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "io:HeatPumpOperatingTimeState"
    }, {
        "values": ["extraBoiler", "extraSolar", "onlyThermodynamic"],
        "type": "DiscreteState",
        "qualifiedName": "io:InstallationState"
    }, {
        "type": "ContinuousState",
        "qualifiedName": "io:MiddleWaterTemperatureState"
    }, {
        "type": "DataState",
        "qualifiedName": "io:OperatingModeCapabilitiesState"
    }, {
        "values": ["pac24h_elec24h", "pacProg_elecProg"],
        "type": "DiscreteState",
        "qualifiedName": "io:OperatingRangeState"
    }, {
        "type": "DataState",
        "qualifiedName": "io:PowerConsumptionFanState"
    }, {
        "type": "DataState",
        "qualifiedName": "io:PowerHeatElectricalState"
    }, {
        "type": "DataState",
        "qualifiedName": "io:PowerHeatPumpState"
    }, {
        "values": ["comfortLevel1", "comfortLevel2", "comfortLevel3", "comfortLevel4", "environmentProtection", "humanProtection", "userLevel1", "userLevel2"],
        "type": "DiscreteState",
        "qualifiedName": "io:PriorityLockLevelState"
    }, {
        "values": ["LSC", "SAAC", "SFC", "UPS", "externalGateway", "localUser", "myself", "rain", "security", "temperature", "timer", "user", "wind"],
        "type": "DiscreteState",
        "qualifiedName": "io:PriorityLockOriginatorState"
    }, {
        "type": "DataState",
        "qualifiedName": "io:ProgrammingSlotsState"
    }, {
        "values": ["forbidden", "no", "recommended", "unsuitable", "wanted"],
        "type": "DiscreteState",
        "qualifiedName": "io:RateManagementState"
    }, {
        "values": ["active", "deactive"],
        "type": "DiscreteState",
        "qualifiedName": "io:SmartGridOptionState"
    }],
    "dataProperties": [{
        "value": "500",
        "qualifiedName": "core:identifyInterval"
    }],
    "widgetName": "DomesticHotWaterProduction",
    "uiClass": "WaterHeatingSystem",
    "uiClassifiers": ["generator"],
    "qualifiedName": "io:AtlanticDomesticHotWaterProductionV2_CETHI_V4_IOComponent",
    "type": "ACTUATOR"
}
iMicknl commented 3 years ago

Thanks for reporting @Pol2Tls! What are the possibilities for the 'number of showers' option?

I am thinking about the best way to map this to the Home Assistant platform. @tetienne / @vlebourl any idea's? The only way to map this to water_heater (or climate) currently would be to abuse the temperature, set to steps of 1 and limited to the possibilities of this integration. However this won't be nice in the front-end.

Update Perhaps we can use the number entity (https://github.com/home-assistant/core/pull/42735) in the future, when we allow multiple entities per device.

Pol2Tls commented 3 years ago

Thanks for taking the point @iMicknl I can only choose 5 or 6 showers, but I think it has something to do with the capacity of the water heater as it could be 100, 150, 200 or 250 liters.

iMicknl commented 3 years ago

Could you give https://github.com/iMicknl/ha-tahoma/archive/feature/add_water_heater.zip a try? Unzip the package first and place the custom_components/tahoma folder in your custom_components folder.

I am not able to test this myself unfortunately. Please keep debug logging enabled and let me know the results. Feel free to join our Discord channel -> https://discord.gg/RRXuSVDAzG.

Pol2Tls commented 3 years ago

I tried to replace the whole tahoma but by doing this i'm not able to select the platform Somfy, Rexel or Cozytouch (the dropdown box is not here when you configure the integration) so my credentials are not recognized. No success with just replacing the files with yours, just after the "official" installation. I still have :

2021-01-14 21:33:34 DEBUG (MainThread) [custom_components.tahoma] Unsupported TaHoma device detected     
(io:AtlanticDomesticHotWaterProductionV2_CETHI_V4_IOComponent - WaterHeatingSystem - DomesticHotWaterProduction - io://XXXXXXX#1)
iMicknl commented 3 years ago

@Pol2Tls oops, I forgot to add the latest changes to this version. Could you download the water heater version again? https://github.com/iMicknl/ha-tahoma/archive/feature/add_water_heater.zip

Pol2Tls commented 3 years ago

@iMicknl I think the issue can be closed. I confirm that it's working. For those who wants to change the number of shower, you have to make a script, automation, ... and set the temperature to 50°C for 5 showers or to 53.5°C for 6 showers. Thank you again for your work !

iMicknl commented 3 years ago

@Pol2Tls great to hear! I will close this issue when support for Water Heaters has been merged into this integration.

Are the presets working and is away mode working? Any features you miss in the device implementation?

Pol2Tls commented 3 years ago

Ok i understand. Presets and away mode works and no missing functionalities, at least not those present in the cozytouch application !