signalkraft / mypyllant-component

Home Assistant component for the myVAILLANT API, controls Vaillant devices such as aroTHERM heatpumps and ecoTEC boilers
https://signalkraft.com/mypyllant-component/
MIT License
128 stars 19 forks source link

Ambisense support #136

Open thomasgermain opened 6 months ago

thomasgermain commented 6 months ago

Before requesting a new feature / a new sensor

Describe the feature you want

Hello, I would like: Ambisense, "room" support:

The rooms are basically "overriding" a zone (the zone "ETAGE" in my case). Rooms are managing this zone behind the scene. So, IMO, the climate entity for this zone should not appear anymore in the integration.

Screenshot

Overview of the rooms + zone (coming from top right "four squares"): Screenshot_2024-03-16-07-51-12-85_ab6c4a494f5f354113de683b4ea3527b_

Overview of ambisense devices (coming from parameters -> "manage devices"): Screenshot_2024-03-16-07-51-30-86_ab6c4a494f5f354113de683b4ea3527b

Detail of an ambisense device: Screenshot_2024-03-16-07-51-43-42_ab6c4a494f5f354113de683b4ea3527b

Export data

I don't see anything related to ambisense, but maybe you will ? It sounds like another endpoint has to be called, if you have any idea, I can call it. I'm busy doing the https://signalkraft.com/mypyllant-component/3-reverse-engineering/ setup, I'll let you know what I found

aiohttp.client_exceptions.ClientResponseError: 404, message='Resource Not Found', url=URL('https://api.vaillant-group.com/service-connected-control/vrc700/v1/rts/.../devices')
aiohttp.client_exceptions.ClientResponseError: 404, message='Resource Not Found', url=URL('https://api.vaillant-group.com/service-connected-control/vrc700/v1/hem/.../mpc')
[
  {
    "extra_fields": {
      "continuous_heating_start_setpoint": -26.0,
      "alternative_point": -21.0,
      "heating_circuit_bivalence_point": 0.0,
      "dhw_bivalence_point": -7.0,
      "adaptive_heating_curve": true,
      "dhw_maximum_loading_time": 60,
      "dhw_hysteresis": 5.0,
      "dhw_flow_setpoint_offset": 25.0,
      "max_flow_setpoint_heatpump_error": 25.0,
      "dhw_maximum_temperature": 80.0,
      "hybrid_control_strategy": "BIVALENCE_POINT",
      "paralell_tank_loading_allowed": true,
      "outdoor_temperature": 8.0625,
      "outdoor_temperature_average24h": 10.734375,
      "system_water_pressure": 1.9,
      "legionella_protection_start_weekday": "THURSDAY",
      "energy_manager_state": "HEATING",
      "system_off": false,
      "controller_type": "VRC700",
      "controller_revision": "R5",
      "system_scheme": 1,
      "backup_heater_type": "CONDENSING",
      "backup_heater_allowed_for": "DOMESTIC_HOT_WATER_AND_HEATING",
      "module_configuration_v_r71": 3,
      "energy_provide_power_cut_behavior": "DISABLE_HEATPUMP",
      "smart_photovoltaic_buffer_offset": 10.0,
      "external_energy_management_activation": false
    },
    "id": "...",
    "state": {
      "system": {
        "outdoor_temperature": 8.0625,
        "outdoor_temperature_average24h": 10.734375,
        "system_water_pressure": 1.9,
        "legionella_protection_start_weekday": "THURSDAY",
        "energy_manager_state": "HEATING",
        "system_off": false
      },
      "zones": [
        {
          "index": 0,
          "desired_room_temperature_setpoint_heating": 21.0,
          "desired_room_temperature_setpoint": 21.0,
          "current_special_function": "NONE"
        },
        {
          "index": 1,
          "desired_room_temperature_setpoint_heating": 20.5,
          "desired_room_temperature_setpoint": 20.5,
          "current_room_temperature": 21.0,
          "current_room_humidity": 55.0,
          "current_special_function": "NONE"
        }
      ],
      "circuits": [
        {
          "index": 0,
          "circuit_state": "HEATING",
          "current_circuit_flow_temperature": 47.5,
          "heating_circuit_flow_setpoint": 55.0,
          "calculated_energy_manager_state": "HEATING_ACTIVE"
        },
        {
          "index": 1,
          "circuit_state": "STANDBY",
          "current_circuit_flow_temperature": 34.625,
          "heating_circuit_flow_setpoint": 0.0,
          "calculated_energy_manager_state": "HEATING_STANDBY"
        }
      ],
      "dhw": [
        {
          "index": 255,
          "current_special_function": "NONE",
          "current_dhw_temperature": 50.0
        }
      ]
    },
    "properties": {
      "system": {
        "controller_type": "VRC700",
        "controller_revision": "R5",
        "system_scheme": 1,
        "backup_heater_type": "CONDENSING",
        "backup_heater_allowed_for": "DOMESTIC_HOT_WATER_AND_HEATING",
        "module_configuration_v_r71": 3,
        "energy_provide_power_cut_behavior": "DISABLE_HEATPUMP",
        "smart_photovoltaic_buffer_offset": 10.0,
        "external_energy_management_activation": false
      },
      "zones": [
        {
          "index": 0,
          "is_active": true,
          "zone_binding": "NONE",
          "associated_circuit_index": 0
        },
        {
          "index": 1,
          "is_active": true,
          "zone_binding": "CENTRAL_CONTROL",
          "associated_circuit_index": 1
        }
      ],
      "circuits": [
        {
          "index": 0,
          "mixer_circuit_type_external": "HEATING",
          "heating_circuit_type": "DIRECT_HEATING_CIRCUIT",
          "is_cooling_allowed": false
        },
        {
          "index": 1,
          "mixer_circuit_type_external": "HEATING",
          "heating_circuit_type": "MIXER_CIRCUIT_EXTERNAL",
          "is_cooling_allowed": false
        }
      ],
      "dhw": [
        {
          "index": 255,
          "min_setpoint": 35.0,
          "max_setpoint": 70.0
        }
      ]
    },
    "configuration": {
      "system": {
        "continuous_heating_start_setpoint": -26.0,
        "alternative_point": -21.0,
        "heating_circuit_bivalence_point": 0.0,
        "dhw_bivalence_point": -7.0,
        "adaptive_heating_curve": true,
        "dhw_maximum_loading_time": 60,
        "dhw_hysteresis": 5.0,
        "dhw_flow_setpoint_offset": 25.0,
        "max_flow_setpoint_heatpump_error": 25.0,
        "dhw_maximum_temperature": 80.0,
        "hybrid_control_strategy": "BIVALENCE_POINT",
        "paralell_tank_loading_allowed": true
      },
      "zones": [
        {
          "index": 0,
          "general": {
            "name": "ETAGE     ",
            "holiday_start_date_time": "2015-01-01T00:00:00Z",
            "holiday_end_date_time": "2015-01-01T00:00:00Z",
            "holiday_setpoint": 5.0
          },
          "heating": {
            "operation_mode_heating": "DAY",
            "set_back_temperature": 11.0,
            "day_temperature_heating": 21.0,
            "time_program_heating": {
              "meta_info": {
                "min_slots_per_day": 0,
                "max_slots_per_day": 3,
                "setpoint_required_per_slot": false
              },
              "monday": [],
              "tuesday": [],
              "wednesday": [],
              "thursday": [],
              "friday": [],
              "saturday": [],
              "sunday": []
            }
          },
          "desired_room_temperature_setpoint_heating": 21.0,
          "desired_room_temperature_setpoint": 21.0,
          "current_special_function": "NONE",
          "is_active": true,
          "zone_binding": "NONE",
          "associated_circuit_index": 0
        },
        {
          "index": 1,
          "general": {
            "name": "SALON     ",
            "holiday_start_date_time": "2015-01-01T00:00:00Z",
            "holiday_end_date_time": "2015-01-01T00:00:00Z",
            "holiday_setpoint": 5.0
          },
          "heating": {
            "operation_mode_heating": "AUTO",
            "set_back_temperature": 18.5,
            "day_temperature_heating": 20.5,
            "time_program_heating": {
              "meta_info": {
                "min_slots_per_day": 0,
                "max_slots_per_day": 3,
                "setpoint_required_per_slot": false
              },
              "monday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ],
              "tuesday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ],
              "wednesday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ],
              "thursday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ],
              "friday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ],
              "saturday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ],
              "sunday": [
                {
                  "start_time": 320,
                  "end_time": 1080
                }
              ]
            }
          },
          "desired_room_temperature_setpoint_heating": 20.5,
          "desired_room_temperature_setpoint": 20.5,
          "current_room_temperature": 21.0,
          "current_room_humidity": 55.0,
          "current_special_function": "NONE",
          "is_active": true,
          "zone_binding": "CENTRAL_CONTROL",
          "associated_circuit_index": 1
        }
      ],
      "circuits": [
        {
          "index": 0,
          "heating_curve": 4.0,
          "heating_flow_temperature_minimum_setpoint": 40.0,
          "heating_flow_temperature_maximum_setpoint": 55.0,
          "heat_demand_limited_by_outside_temperature": 24.0,
          "heating_circuit_flow_setpoint_excess_offset": 0.0,
          "setback_mode_enabled": false,
          "room_temperature_control_mode": "THERMOSTAT_FUNCTION",
          "circuit_state": "HEATING",
          "current_circuit_flow_temperature": 47.5,
          "heating_circuit_flow_setpoint": 55.0,
          "calculated_energy_manager_state": "HEATING_ACTIVE",
          "mixer_circuit_type_external": "HEATING",
          "heating_circuit_type": "DIRECT_HEATING_CIRCUIT",
          "is_cooling_allowed": false
        },
        {
          "index": 1,
          "heating_curve": 0.30357337,
          "heating_flow_temperature_minimum_setpoint": 22.0,
          "heating_flow_temperature_maximum_setpoint": 38.0,
          "heat_demand_limited_by_outside_temperature": 21.0,
          "heating_circuit_flow_setpoint_excess_offset": 0.0,
          "setback_mode_enabled": false,
          "room_temperature_control_mode": "THERMOSTAT_FUNCTION",
          "circuit_state": "STANDBY",
          "current_circuit_flow_temperature": 34.625,
          "heating_circuit_flow_setpoint": 0.0,
          "calculated_energy_manager_state": "HEATING_STANDBY",
          "mixer_circuit_type_external": "HEATING",
          "heating_circuit_type": "MIXER_CIRCUIT_EXTERNAL",
          "is_cooling_allowed": false
        }
      ],
      "dhw": [
        {
          "index": 255,
          "operation_mode_dhw": "AUTO",
          "tapping_setpoint": 55.0,
          "holiday_start_date_time": "2015-01-01T00:00:00Z",
          "holiday_end_date_time": "2015-01-01T00:00:00Z",
          "time_program_dhw": {
            "meta_info": {
              "min_slots_per_day": 0,
              "max_slots_per_day": 3,
              "setpoint_required_per_slot": false
            },
            "monday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ],
            "tuesday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ],
            "wednesday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ],
            "thursday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ],
            "friday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ],
            "saturday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ],
            "sunday": [
              {
                "start_time": 330,
                "end_time": 360
              },
              {
                "start_time": 1050,
                "end_time": 1090
              }
            ]
          },
          "time_program_circulation_pump": {
            "meta_info": {
              "min_slots_per_day": 0,
              "max_slots_per_day": 3,
              "setpoint_required_per_slot": false
            },
            "monday": [],
            "tuesday": [],
            "wednesday": [],
            "thursday": [],
            "friday": [],
            "saturday": [],
            "sunday": []
          },
          "current_special_function": "NONE",
          "current_dhw_temperature": 50.0,
          "min_setpoint": 35.0,
          "max_setpoint": 70.0
        }
      ]
    },
    "home": {
      "extra_fields": {
        "migration_finished_at": "2024-03-15T09:40:07.807377922Z",
        "online_state": "ONLINE"
      },
      "country_code": "BE",
      "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
      "nomenclature": "VR 920",
      "serial_number": "...",
      "state": "CLAIMED",
      "system_id": "...",
      "home_name": "Maison",
      "address": {
        "street": "...",
        "extension": null,
        "city": "...",
        "postal_code": "...",
        "country_code": "BE"
      },
      "product_information": "VR920",
      "migration_state": "FINISHED",
      "cag": false,
      "firmware_version": "0357.40.34",
      "firmware": {
        "version": "0357.40.34",
        "update_enabled": false,
        "update_required": false
      },
      "product_metadata": {
        "product_type": "VR920",
        "production_year": "17",
        "production_week": "48",
        "article_number": "..."
      }
    },
    "brand": "vaillant",
    "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
    "control_identifier": "vrc700",
    "connected": true,
    "diagnostic_trouble_codes": [
      {
        "serial_number": "...",
        "article_number": "...",
        "codes": []
      },
      {
        "serial_number": "...",
        "article_number": "...",
        "codes": []
      },
      {
        "serial_number": "...",
        "article_number": "...",
        "codes": []
      },
      {
        "serial_number": "...",
        "article_number": "...",
        "codes": []
      }
    ],
    "current_system": {
      "system_type": "UNKNOWN",
      "has_emf_capable_devices": true,
      "primary_heat_generator": null,
      "secondary_heat_generators": [],
      "electric_backup_heater": null,
      "solar_station": null,
      "ventilation": null,
      "gateway": null
    },
    "zones": [
      {
        "extra_fields": {},
        "system_id": "..",
        "general": {
          "extra_fields": {
            "holiday_setpoint": 5.0
          },
          "name": "ETAGE     ",
          "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
          "holiday_start_date_time": "2015-01-01 00:00:00+00:00",
          "holiday_end_date_time": "2015-01-01 00:00:00+00:00"
        },
        "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
        "control_identifier": "vrc700",
        "index": 0,
        "zone_binding": "NONE",
        "heating": {
          "extra_fields": {},
          "control_identifier": "vrc700",
          "operation_mode_heating": "DAY",
          "time_program_heating": {
            "extra_fields": {},
            "monday": [],
            "tuesday": [],
            "wednesday": [],
            "thursday": [],
            "friday": [],
            "saturday": [],
            "sunday": [],
            "meta_info": {
              "min_slots_per_day": 0,
              "max_slots_per_day": 3,
              "setpoint_required_per_slot": false
            }
          },
          "set_back_temperature": 11.0,
          "manual_mode_setpoint_heating": null,
          "day_temperature_heating": 21.0
        },
        "current_special_function": "NONE",
        "is_active": true,
        "heating_state": null,
        "is_cooling_allowed": null,
        "cooling": null,
        "current_room_temperature": null,
        "desired_room_temperature_setpoint_heating": 21.0,
        "desired_room_temperature_setpoint_cooling": null,
        "desired_room_temperature_setpoint": 21.0,
        "current_room_humidity": null,
        "associated_circuit_index": 0,
        "quick_veto_start_date_time": null,
        "quick_veto_end_date_time": null
      },
      {
        "extra_fields": {},
        "system_id": "...",
        "general": {
          "extra_fields": {
            "holiday_setpoint": 5.0
          },
          "name": "SALON     ",
          "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
          "holiday_start_date_time": "2015-01-01 00:00:00+00:00",
          "holiday_end_date_time": "2015-01-01 00:00:00+00:00"
        },
        "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
        "control_identifier": "vrc700",
        "index": 1,
        "zone_binding": "CENTRAL_CONTROL",
        "heating": {
          "extra_fields": {},
          "control_identifier": "vrc700",
          "operation_mode_heating": "AUTO",
          "time_program_heating": {
            "extra_fields": {},
            "monday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "monday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "tuesday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "tuesday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "wednesday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "wednesday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "thursday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "thursday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "friday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "friday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "saturday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "saturday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "sunday": [
              {
                "extra_fields": {},
                "index": 0,
                "weekday_name": "sunday",
                "start_time": 320,
                "end_time": 1080,
                "setpoint": null
              }
            ],
            "meta_info": {
              "min_slots_per_day": 0,
              "max_slots_per_day": 3,
              "setpoint_required_per_slot": false
            }
          },
          "set_back_temperature": 18.5,
          "manual_mode_setpoint_heating": null,
          "day_temperature_heating": 20.5
        },
        "current_special_function": "NONE",
        "is_active": true,
        "heating_state": null,
        "is_cooling_allowed": null,
        "cooling": null,
        "current_room_temperature": 21.0,
        "desired_room_temperature_setpoint_heating": 20.5,
        "desired_room_temperature_setpoint_cooling": null,
        "desired_room_temperature_setpoint": 20.5,
        "current_room_humidity": 55.0,
        "associated_circuit_index": 1,
        "quick_veto_start_date_time": null,
        "quick_veto_end_date_time": null
      }
    ],
    "circuits": [
      {
        "extra_fields": {
          "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
          "heat_demand_limited_by_outside_temperature": 24.0,
          "room_temperature_control_mode": "THERMOSTAT_FUNCTION",
          "heating_circuit_type": "DIRECT_HEATING_CIRCUIT",
          "setback_mode_enabled": false,
          "heating_circuit_flow_setpoint": 55.0,
          "heating_circuit_flow_setpoint_excess_offset": 0.0
        },
        "system_id": "...",
        "index": 0,
        "circuit_state": "HEATING",
        "mixer_circuit_type_external": "HEATING",
        "set_back_mode_enabled": null,
        "zones": [],
        "is_cooling_allowed": false,
        "current_circuit_flow_temperature": 47.5,
        "heating_curve": 4.0,
        "heating_flow_temperature_minimum_setpoint": 40.0,
        "heating_flow_temperature_maximum_setpoint": 55.0,
        "min_flow_temperature_setpoint": null,
        "calculated_energy_manager_state": "HEATING_ACTIVE"
      },
      {
        "extra_fields": {
          "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
          "heat_demand_limited_by_outside_temperature": 21.0,
          "room_temperature_control_mode": "THERMOSTAT_FUNCTION",
          "heating_circuit_type": "MIXER_CIRCUIT_EXTERNAL",
          "setback_mode_enabled": false,
          "heating_circuit_flow_setpoint": 0.0,
          "heating_circuit_flow_setpoint_excess_offset": 0.0
        },
        "system_id": "...",
        "index": 1,
        "circuit_state": "STANDBY",
        "mixer_circuit_type_external": "HEATING",
        "set_back_mode_enabled": null,
        "zones": [],
        "is_cooling_allowed": false,
        "current_circuit_flow_temperature": 34.625,
        "heating_curve": 0.30357337,
        "heating_flow_temperature_minimum_setpoint": 22.0,
        "heating_flow_temperature_maximum_setpoint": 38.0,
        "min_flow_temperature_setpoint": null,
        "calculated_energy_manager_state": "HEATING_STANDBY"
      }
    ],
    "domestic_hot_water": [
      {
        "extra_fields": {
          "timezone": "tzfile('/usr/share/zoneinfo/Europe/Brussels')",
          "holiday_end_date_time": "2015-01-01T00:00:00Z",
          "holiday_start_date_time": "2015-01-01T00:00:00Z"
        },
        "system_id": "...",
        "index": 255,
        "control_identifier": "vrc700",
        "current_special_function": "NONE",
        "max_setpoint": 70.0,
        "min_setpoint": 35.0,
        "operation_mode_dhw": "AUTO",
        "time_program_dhw": {
          "extra_fields": {},
          "monday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "monday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "monday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "tuesday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "tuesday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "tuesday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "wednesday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "wednesday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "wednesday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "thursday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "thursday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "thursday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "friday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "friday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "friday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "saturday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "saturday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "saturday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "sunday": [
            {
              "extra_fields": {},
              "index": 0,
              "weekday_name": "sunday",
              "start_time": 330,
              "end_time": 360
            },
            {
              "extra_fields": {},
              "index": 1,
              "weekday_name": "sunday",
              "start_time": 1050,
              "end_time": 1090
            }
          ],
          "meta_info": {
            "min_slots_per_day": 0,
            "max_slots_per_day": 3,
            "setpoint_required_per_slot": false
          }
        },
        "time_program_circulation_pump": {
          "extra_fields": {},
          "monday": [],
          "tuesday": [],
          "wednesday": [],
          "thursday": [],
          "friday": [],
          "saturday": [],
          "sunday": [],
          "meta_info": {
            "min_slots_per_day": 0,
            "max_slots_per_day": 3,
            "setpoint_required_per_slot": false
          }
        },
        "current_dhw_temperature": 50.0,
        "tapping_setpoint": 55.0
      }
    ],
    "ventilation": [],
    "devices": [],
    "mpc": {
      "devices": []
    },
    "rts": {
      "statistics": []
    }
  }
]
thomasgermain commented 6 months ago

Here are some information I could get, let me know if you need more:

detect ambisense capability

GET https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/<facility-id>/capability

{
    "rbrCapable": true
}

rooms information

GET https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/<facility_id>/rooms

(bathroom (="salle de bain") should be the most interesting one, since it has some time program defined).

[
    {
        "roomConfiguration": {
            "buttonLock": null,
            "currentHumidity": null,
            "currentTemperature": 19.4,
            "devices": [
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Chambre Jules",
                    "rssi": -64,
                    "rssiPeer": -65,
                    "sgtin": "xxx",
                    "unreach": false
                }
            ],
            "iconId": "BEDROOM",
            "name": "Chambre Jules",
            "operationMode": "auto",
            "quickVetoEndTime": null,
            "temperatureSetpoint": 18.0,
            "windowState": false
        },
        "roomIndex": 3,
        "timeprogram": {
            "friday": [],
            "monday": [],
            "saturday": [],
            "sunday": [],
            "thursday": [],
            "tuesday": [],
            "wednesday": []
        }
    },
    {
        "roomConfiguration": {
            "buttonLock": null,
            "currentHumidity": null,
            "currentTemperature": 19.8,
            "devices": [
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Chambre parentale",
                    "rssi": -68,
                    "rssiPeer": -62,
                    "sgtin": "xxx",
                    "unreach": false
                }
            ],
            "iconId": "BEDROOM",
            "name": "Chambre parentale",
            "operationMode": "auto",
            "quickVetoEndTime": null,
            "temperatureSetpoint": 16.0,
            "windowState": false
        },
        "roomIndex": 0,
        "timeprogram": {
            "friday": [],
            "monday": [],
            "saturday": [],
            "sunday": [],
            "thursday": [],
            "tuesday": [],
            "wednesday": []
        }
    },
    {
        "roomConfiguration": {
            "buttonLock": null,
            "currentHumidity": null,
            "currentTemperature": 19.4,
            "devices": [
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Chambre Lucie",
                    "rssi": -68,
                    "rssiPeer": -68,
                    "sgtin": "xxx",
                    "unreach": false
                }
            ],
            "iconId": "BEDROOM",
            "name": "Chambre Lucie",
            "operationMode": "auto",
            "quickVetoEndTime": null,
            "temperatureSetpoint": 18.0,
            "windowState": false
        },
        "roomIndex": 2,
        "timeprogram": {
            "friday": [],
            "monday": [],
            "saturday": [],
            "sunday": [],
            "thursday": [],
            "tuesday": [],
            "wednesday": []
        }
    },
    {
        "roomConfiguration": {
            "buttonLock": false,
            "currentHumidity": null,
            "currentTemperature": 23.4,
            "devices": [
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Radiateur salle de bain",
                    "rssi": -79,
                    "rssiPeer": -75,
                    "sgtin": "xxx",
                    "unreach": false
                },
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Sèche serviette salle de bain",
                    "rssi": -55,
                    "rssiPeer": -56,
                    "sgtin": "xxx",
                    "unreach": false
                }
            ],
            "iconId": "BATHROOM",
            "name": "Salle de bain",
            "operationMode": "auto",
            "quickVetoEndTime": null,
            "temperatureSetpoint": 21.0,
            "windowState": false
        },
        "roomIndex": 1,
        "timeprogram": {
            "friday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ],
            "monday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ],
            "saturday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ],
            "sunday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ],
            "thursday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ],
            "tuesday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ],
            "wednesday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19.5
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 22.0
                },
                {
                    "startTime": 990,
                    "temperatureSetpoint": 25.0
                },
                {
                    "startTime": 1150,
                    "temperatureSetpoint": 19.5
                }
            ]
        }
    }
]

set quick veto

PUT https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/<facility-id>/rooms/1/configuration/quick-veto

payload:

{
    "duration": 180,
    "temperatureSetpoint": 20.5
}

reponse:

{
    "correlationId": "1e7721f9-c0ab-4e93-8ba3-a73129f5164f"
}

rooms looks like:

    {
        "roomConfiguration": {
            "buttonLock": false,
            "currentHumidity": null,
            "currentTemperature": 23.5,
            "devices": [
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Radiateur salle de bain",
                    "rssi": -79,
                    "rssiPeer": -75,
                    "sgtin": "xxx",
                    "unreach": false
                },
                {
                    "deviceType": "TRV",
                    "lowBat": false,
                    "name": "Sèche serviette salle de bain",
                    "rssi": -55,
                    "rssiPeer": -56,
                    "sgtin": "xxx",
                    "unreach": false
                }
            ],
            "iconId": "BATHROOM",
            "name": "Salle de bain",
            "operationMode": "auto",
            "quickVetoEndTime": "2024-03-16T16:41:28.646Z", #<-- timezone UTC
            "temperatureSetpoint": 20.5, #<--
            "windowState": false
        }

remove quick veto

DELETE https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/<facility-id>/rooms/1/configuration/quick-veto

change mode

PUT https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/<facility-id>/rooms/0/configuration/operation-mode

{
    "operationMode": "auto"
}

or

{
    "operationMode": "manual"
}

or

{
    "operationMode": "off"
}
signalkraft commented 6 months ago

That looks great, thanks for the thorough information! I'll have a look and see what I can come up with, based on your test data and the reverse engineered endpoints.

signalkraft commented 6 months ago

https://github.com/signalkraft/myPyllant/commit/df7115346a51c2103fe34b46081f1d84dde6fc59

Bit of progress here, but the HA component side of things is still missing and will take more time.

thomasgermain commented 6 months ago

I'll have a look and see if I can make a PR (I guess it will be easier for me to test things like mode, quick veto and so).

johanvh83 commented 6 months ago

@signalkraft and @thomasgermain also using Ambisense and looking forward for compatibilty in the new myVAILLANT environment! Many, many thanks for your effort to both of you!

ttuuxxeerr commented 6 months ago

It will indeed great for Ambisense users. I will keep an eye on this threat as I am very interested.

Pitsaer commented 6 months ago

Hi :-) I'm very interested because in addition to my underfloor heating, I use 5 VR50 Ambisense for my radiators. And with the multimatic application in H.A, everything worked. But I had to upgrade to MyVaillant. So good luck with the development and many thanks!

signalkraft commented 6 months ago

Please updated to the latest beta release of the component and let me know if Ambisense rooms work as expected: https://github.com/signalkraft/mypyllant-component/releases/tag/v0.8.0b0

Pitsaer commented 6 months ago

@signalkraft Wow good job! I've just updated the Beta and my VR50s are detected.

scoudibou commented 6 months ago

@signalkraft it seems working for me too ! Thanks

Edit: It's recognized but I'm unable to change t°, the message is : "Échec de l'appel du service climate/set_temperature. 500, message='Internal Server Error', url=URL('https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/XXXX/rooms/0/configuration/quick-veto')"

mikyD84 commented 6 months ago

@signalkraft just did the update to latest release, but no device was found

`Deze fout is ontstaan door een aangepaste integratie.

Logger: custom_components.mypyllant.coordinator Bron: helpers/update_coordinator.py:318 integratie: myVAILLANT (documentation, issues) First occurred: 22:44:43 (2 gebeurtenissen) Laatst gelogd: 22:44:43

Unexpected error fetching myVAILLANT data: System.init() missing 1 required positional argument: 'properties' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 318, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mypyllant/coordinator.py", line 165, in _async_update_data data = [ ^ File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 355, in get_systems system = System.from_api( ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 769, in from_api system: System = super().from_api(data) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 74, in from_api return cls(data) ^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/pydantic/dataclasses.py", line 322, in new_init handle_extra_init(self, *args, *kwargs) File "/usr/local/lib/python3.12/site-packages/pydantic/dataclasses.py", line 286, in handle_extra_init init(self, args, **{k: v for k, v in kwargs.items() if k in self.__dataclass_fields}) TypeError: System.init__() missing 1 required positional argument: 'properties' `

signalkraft commented 6 months ago

The Vaillant API has been a bit hit and miss today, 500 errors usually indicate something wrong on their side. Maybe try again tomorrow and let me know if the error persist!

thomasgermain commented 6 months ago

Same problem as @mikyD84, HTTP 500 while setting the quick veto, but the annoying this is that I can set it myPyllant lib directly :/.

I'll dig further tomorrow.

signalkraft commented 6 months ago

@mikyD84 let me know if https://github.com/signalkraft/mypyllant-component/releases/tag/v0.8.0b1 fixes that error

mikyD84 commented 6 months ago

@signalkraft no not yet, different error now

Deze fout is ontstaan door een aangepaste integratie.

Logger: custom_components.mypyllant.coordinator Bron: helpers/update_coordinator.py:318 integratie: myVAILLANT (documentation, issues) First occurred: 23:21:06 (4 gebeurtenissen) Laatst gelogd: 23:21:26

Unexpected error fetching myVAILLANT data: 'time_program_heating' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 318, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mypyllant/coordinator.py", line 165, in _async_update_data data = [ ^ File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 355, in get_systems system = System.from_api( ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 773, in from_api Zone.from_api( File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 383, in from_api data["heating"] = ZoneHeating.from_api( ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 287, in from_api **data["time_program_heating"]


KeyError: 'time_program_heating'
signalkraft commented 6 months ago

Try https://github.com/signalkraft/mypyllant-component/releases/tag/v0.8.0b2 for both the 500 and the KeyError, please.

Pitsaer commented 6 months ago

Try https://github.com/signalkraft/mypyllant-component/releases/tag/v0.8.0b2 for both the 500 and the KeyError, please.

In H.A, if I change the temperature, the set point changes and resets to the default after several seconds, and I've just noticed the same problem in the MyVaillant ios application. So I think there's a problem on their side for the moment. Have a nice evening ;-)

2 errors :

Enregistreur: myPyllant.api Source: /usr/local/lib/python3.12/site-packages/myPyllant/api.py:1126 S'est produit pour la première fois: 00:05:31 (3 occurrences) Dernier enregistrement: 00:06:59

Could not get RTS data Traceback (most recent call last): File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 1121, in get_rts response = await self.aiohttp_session.get( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 691, in _request await raise_for_status(resp) File "/usr/local/lib/python3.12/site-packages/myPyllant/http_client.py", line 50, in on_raise_for_status response.raise_for_status() File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 1060, in raise_for_status raise ClientResponseError( aiohttp.client_exceptions.ClientResponseError: 404, message='Resource Not Found', url=URL('https://api.vaillant-group.com/service-connected-control/vrc700/v1/rts/bb17a8f7-051e-4d39-b0f8-c855086f9e1f/devices')

AND

Enregistreur: myPyllant.api Source: /usr/local/lib/python3.12/site-packages/myPyllant/api.py:1145 S'est produit pour la première fois: 00:05:31 (3 occurrences) Dernier enregistrement: 00:06:59

Could not get MPC data Traceback (most recent call last): File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 1140, in get_mpc response = await self.aiohttp_session.get( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 691, in _request await raise_for_status(resp) File "/usr/local/lib/python3.12/site-packages/myPyllant/http_client.py", line 50, in on_raise_for_status response.raise_for_status() File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 1060, in raise_for_status raise ClientResponseError( aiohttp.client_exceptions.ClientResponseError: 404, message='Resource Not Found', url=URL('https://api.vaillant-group.com/service-connected-control/vrc700/v1/hem/bb17a8f7-051e-4d39-b0f8-c855086f9e1f/mpc')

ttuuxxeerr commented 6 months ago

Hi all,

Thanks for your effort. See my feedback using the version https://github.com/signalkraft/mypyllant-component/releases/tag/v0.8.0b2

I have 14 ambisenses splitter in 8 rooms, after updating to 0.8.0b2 I am able to see them as a device within myvaillant HA. Only odd functional issue is the following:

1) Open a device "office" 2) the card shows 18 degree Auto and in the ambisense I can read 18 degree. 3) If I update in the card to 5 degrees, the ambisense moves to 5 degrees however after a few seconds the HA card come back to 18 degree although the ambisense is still displaying 5 degrees. I checked the iOS APP of Myvaillant and it is also showing 18 degree.

In short, the command is send to ambisense and remains active in the ambisense, however the configuration is back to Auto for HA and myvaillant without changing it in the ambisese.

Let me know if you need any sort of log.

Thanks again for your effort.

dardennejf commented 6 months ago

great job, it works I just switched from Multimatic to myvaillant following the update. It might just be nice if we could choose the duration of modification of the VR50 valve when we change the temperature. Maybe for a next update

Grabax commented 6 months ago

Hello everyone!

i got the Upgrade from Multimatic to myvaillant.

@signalkraft i installed your last beta version on HA but i cant see my VR51 devices. Is this a bug or are the devices still missing?

thanks for your help and effort.

thomasgermain commented 6 months ago
  1. If I update in the card to 5 degrees, the ambisense moves to 5 degrees however after a few seconds the HA card come back to 18 degree although the ambisense is still displaying 5 degrees. I checked the iOS APP of Myvaillant and it is also showing 18 degree.

What do you mean by the ambisense ? The valve itself ? If myVaillant app is showing 18, the integration will show 18 as well, because the integration will rely on what is coming from vaillant server (as well as the mobile app).

Anyway, you could try to increase Delay before refreshing data after updates. I personally have set 15 seconds there, to let some time to vaillant server to update accordingly.

ttuuxxeerr commented 6 months ago
  1. If I update in the card to 5 degrees, the ambisense moves to 5 degrees however after a few seconds the HA card come back to 18 degree although the ambisense is still displaying 5 degrees. I checked the iOS APP of Myvaillant and it is also showing 18 degree.

What do you mean by the ambisense ? The valve itself ? If myVaillant app is showing 18, the integration will show 18 as well, because the integration will rely on what is coming from vaillant server (as well as the mobile app).

Anyway, you could try to increase Delay before refreshing data after updates. I personally have set 15 seconds there, to let some time to vaillant server to update accordingly.

Yes , ambisense I meant VR50 valve. I changed the configuration mentioned to 15 seconds and rebooted HA. I tried again with similar results, this time I activated the debug log to try to catch what happens.

logs:

024-03-20 09:10:18.460 ERROR (MainThread) [pyhap.characteristic] TargetHeatingCoolingState: value=0 is an invalid value. 2024-03-20 09:15:47.951 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting temperature on despacho with params {'entity_id': ['climate.casa_despacho'], 'temperature': 8.0} 2024-03-20 09:15:47.952 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting quick veto on despacho with params {'temperature': 8.0} 2024-03-20 09:15:53.445 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Manually updated myVAILLANT data 2024-03-20 09:15:53.490 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Waiting 15s before refreshing data 2024-03-20 09:16:08.490 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Starting async update data for SystemCoordinator 2024-03-20 09:16:08.491 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Refreshing token for mymail@maymail.com 2024-03-20 09:16:10.162 DEBUG (MainThread) [custom_components.mypyllant.climate] Removing quick veto on despacho 2024-03-20 09:16:10.374 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [547229160000] 409, message='Conflict', url=URL('https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/f7704a95-376b-4c6c-bd1e-06544768de72/rooms/7/configuration/quick-veto') Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 239, in handle_call_service response = await hass.services.async_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2319, in async_call response_data = await coro ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2356, in _execute_service return await target(service_call) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 905, in entity_service_call single_response = await _handle_entity_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 975, in _handle_entity_call result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 716, in async_handle_set_preset_mode_service await self.async_set_preset_mode(preset_mode) File "/config/custom_components/mypyllant/climate.py", line 827, in async_set_preset_mode await self.remove_quick_veto() File "/config/custom_components/mypyllant/climate.py", line 780, in remove_quick_veto await self.coordinator.api.cancel_quick_veto_ambisense_room(self.room) File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 1268, in cancel_quick_veto_ambisense_room await self.aiohttp_session.delete(url, headers=self.get_authorized_headers()) File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 691, in _request await raise_for_status(resp) File "/usr/local/lib/python3.12/site-packages/myPyllant/http_client.py", line 50, in on_raise_for_status response.raise_for_status() File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 1060, in raise_for_status raise ClientResponseError( aiohttp.client_exceptions.ClientResponseError: 409, message='Conflict', url=URL('https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/f7704a95-376b-4c6c-bd1e-06544768de72/rooms/7/configuration/quick-veto') 2024-03-20 09:16:13.565 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Finished fetching myVAILLANT data in 5.075 seconds (success: True) 2024-03-20 09:16:19.895 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting temperature on despacho with params {'entity_id': ['climate.casa_despacho'], 'temperature': 8.0} 2024-03-20 09:16:19.895 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting quick veto on despacho with params {'temperature': 8.0} 2024-03-20 09:16:19.986 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Manually updated myVAILLANT data 2024-03-20 09:16:20.029 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Waiting 15s before refreshing data 2024-03-20 09:16:27.031 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Manually updated myVAILLANT data 2024-03-20 09:16:27.073 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Waiting 15s before refreshing data 2024-03-20 09:16:31.177 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting temperature on despacho with params {'entity_id': ['climate.casa_despacho'], 'temperature': 10.0} 2024-03-20 09:16:31.177 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting quick veto on despacho with params {'temperature': 10.0} 2024-03-20 09:16:31.310 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Manually updated myVAILLANT data 2024-03-20 09:16:31.355 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Waiting 15s before refreshing data 2024-03-20 09:16:35.031 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Starting async update data for SystemCoordinator 2024-03-20 09:16:35.031 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Waiting 96s until token refresh for mymail@maymail.com 2024-03-20 09:16:37.683 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Finished fetching myVAILLANT data in 2.652 seconds (success: True) 2024-03-20 09:16:47.731 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Starting async update data for SystemCoordinator 2024-03-20 09:16:47.732 DEBUG (MainThread) [custom_components.mypyllant.coordinator] Waiting 83s until token refresh for mymail@maymail.com

Thanks in advance,

camhef commented 6 months ago

This beta release also worked for me. I must say that this integration provides much more information than multimatic. Thank you.

signalkraft commented 6 months ago

https://github.com/signalkraft/mypyllant-component/releases/tag/v0.8.0b3

Should have support for setting the target temperature in manual mode.

dcowell commented 6 months ago

Every since switching to the beta version (v0.8.0b4) to try my Ambisense system, I have no devices or entities showing - my account details are correct. Using V7.0.4 by main heating loops were shown - Home, Home Circuit 0, Home Circuit 1, Home Domestic Hot Water 0 and Home Zone ZONE 1 (Circuit 0).

My system logs, one error followed by multiple warning are given. The error and first warning are shown below.

Thank you to everyone for all the hard work on this software.

Logger: custom_components.mypyllant.coordinator Source: helpers/update_coordinator.py:318 integration: myVAILLANT (documentation, issues) First occurred: 09:09:18 (3 occurrences) Last logged: 15:47:58

Unexpected error fetching myVAILLANT data: 'NoneType' object has no attribute 'upper' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 318, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mypyllant/coordinator.py", line 169, in _async_update_data data = [ ^ File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 355, in get_systems system = System.from_api( ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 810, in from_api AmbisenseRoom.from_api(system_id=system.id, **r) for r in ambisense_rooms ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 736, in from_api data["room_configuration"] = AmbisenseRoomConfiguration.from_api( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/site-packages/myPyllant/models.py", line 717, in from_api data["operation_mode"].upper() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'upper'

And warnings of the form...

Logger: custom_components.mypyllant.binary_sensor Source: custom_components/mypyllant/binary_sensor.py:33 integration: myVAILLANT (documentation, issues) First occurred: 09:09:19 (3 occurrences) Last logged: 15:47:59

No system data, skipping binary sensors

camhef commented 6 months ago

These entities seem to have been lost between v0.7.4 and v0.8.0b:

The myVaillant app shows: Screenshot_2024-03-22-10-25-52-98_ab6c4a494f5f354113de683b4ea3527b With v0.7.4 installed I see: Screenshot_2024-03-22-10-26-13-56_c3a231c25ed346e59462e84656a70e50 With v0.8.0b4 installed I see: Screenshot_2024-03-22-10-31-20-30_c3a231c25ed346e59462e84656a70e50 Is that intentional, have they been missed or am I doing something wrong?

Weazle commented 6 months ago

Switched from Multimatic to MyVaillant this week and installed this integration today as the old one did not work anymore. Missed the Ambisense radiator knobs and found this thread. Great to see the dev @thomasgermain from the Multimatic integration partnering up with @signalkraft to add this to his integration. That is the true power of opensource.

After getting the beta release I can confirm the finding from @camhef that are some things removed: image

signalkraft commented 6 months ago

Please enable the RTS & MPC options in the configuration of the integration, they're off by default because a lot of users got 404 errors all the time. There will be a big warning about this in the release notes of the final release as well.

camhef commented 6 months ago

The fix above and everything else done to enable ambisense has been greatly appreciated. Thank you.

smmoroz commented 6 months ago

Great job! ambisense devices are finally available in HA as climate entities. But calendars are not available, although timeprogram is in the response (see below). Is this feature already implemented?

[
    {
        "roomIndex": 0,
        "roomConfiguration": {
            "name": "Entrance",
            "temperatureSetpoint": 22,
            "operationMode": "auto",
            "currentTemperature": 24.1,
            "currentHumidity": null,
            "buttonLock": null,
            "windowState": false,
            "devices": [
                {
                    "name": "Entrance",
                    "sgtin": "XXX1",
                    "deviceType": "TRV",
                    "lowBat": false,
                    "unreach": false,
                    "rssi": -72,
                    "rssiPeer": -69
                }
            ],
            "iconId": "HOBBY_ROOM",
            "quickVetoEndTime": null
        },
        "timeprogram": {
            "monday": [],
            "tuesday": [],
            "wednesday": [],
            "thursday": [],
            "friday": [],
            "saturday": [],
            "sunday": []
        }
    },
    {
        "roomIndex": 3,
        "roomConfiguration": {
            "name": "Bedroom",
            "temperatureSetpoint": 4.5,
            "operationMode": "off",
            "currentTemperature": 23.4,
            "currentHumidity": null,
            "buttonLock": null,
            "windowState": false,
            "devices": [
                {
                    "name": "Bedroom",
                    "sgtin": "XXX2",
                    "deviceType": "TRV",
                    "lowBat": false,
                    "unreach": false,
                    "rssi": -55,
                    "rssiPeer": -60
                }
            ],
            "iconId": "BEDROOM",
            "quickVetoEndTime": null
        },
        "timeprogram": {
            "monday": [],
            "tuesday": [],
            "wednesday": [],
            "thursday": [],
            "friday": [],
            "saturday": [],
            "sunday": []
        }
    },
    {
        "roomIndex": 1,
        "roomConfiguration": {
            "name": "Office",
            "temperatureSetpoint": 20,
            "operationMode": "auto",
            "currentTemperature": 21.7,
            "currentHumidity": null,
            "buttonLock": false,
            "windowState": false,
            "devices": [
                {
                    "name": "Office",
                    "sgtin": "XXX3",
                    "deviceType": "TRV",
                    "lowBat": false,
                    "unreach": false,
                    "rssi": -75,
                    "rssiPeer": -75
                }
            ],
            "iconId": "OFFICE",
            "quickVetoEndTime": null
        },
        "timeprogram": {
            "monday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ],
            "tuesday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ],
            "wednesday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ],
            "thursday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ],
            "friday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ],
            "saturday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ],
            "sunday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 360,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1260,
                    "temperatureSetpoint": 19
                }
            ]
        }
    },
    {
        "roomIndex": 4,
        "roomConfiguration": {
            "name": "Kids",
            "temperatureSetpoint": 4.5,
            "operationMode": "off",
            "currentTemperature": 20,
            "currentHumidity": null,
            "buttonLock": null,
            "windowState": false,
            "devices": [
                {
                    "name": "Kids",
                    "sgtin": "XXX4",
                    "deviceType": "TRV",
                    "lowBat": false,
                    "unreach": false,
                    "rssi": -75,
                    "rssiPeer": -71
                }
            ],
            "iconId": "CHILDREN_ROOM",
            "quickVetoEndTime": null
        },
        "timeprogram": {
            "monday": [],
            "tuesday": [],
            "wednesday": [],
            "thursday": [],
            "friday": [],
            "saturday": [],
            "sunday": []
        }
    },
    {
        "roomIndex": 2,
        "roomConfiguration": {
            "name": "Living room",
            "temperatureSetpoint": 20,
            "operationMode": "auto",
            "currentTemperature": 22.9,
            "currentHumidity": null,
            "buttonLock": false,
            "windowState": false,
            "devices": [
                {
                    "name": "Living room",
                    "sgtin": "XXX5",
                    "deviceType": "TRV",
                    "lowBat": false,
                    "unreach": false,
                    "rssi": -66,
                    "rssiPeer": -65
                }
            ],
            "iconId": "LIVING_ROOM",
            "quickVetoEndTime": null
        },
        "timeprogram": {
            "monday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1320,
                    "temperatureSetpoint": 19
                }
            ],
            "tuesday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1320,
                    "temperatureSetpoint": 19
                }
            ],
            "wednesday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1320,
                    "temperatureSetpoint": 19
                }
            ],
            "thursday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1320,
                    "temperatureSetpoint": 19
                }
            ],
            "friday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1320,
                    "temperatureSetpoint": 19
                }
            ],
            "saturday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1410,
                    "temperatureSetpoint": 19
                }
            ],
            "sunday": [
                {
                    "startTime": 0,
                    "temperatureSetpoint": 19
                },
                {
                    "startTime": 420,
                    "temperatureSetpoint": 20
                },
                {
                    "startTime": 1410,
                    "temperatureSetpoint": 19
                }
            ]
        }
    }
]
signalkraft commented 6 months ago

Is this feature already implemented?

No, someone would need to tell me the endpoints for timeprograms on Ambisense devices. @thomasgermain did you have time to check for the endpoint?

Grabax commented 6 months ago

Hi everyone!

Still cant see my VR 51 thermostats.

thomasgermain commented 6 months ago

Is this feature already implemented?

No, someone would need to tell me the endpoints for timeprograms on Ambisense devices. @thomasgermain did you have time to check for the endpoint?

GET/PUT to url = f"{await self.get_api_base()}/api/v1/ambisense/facilities/{room.system_id}/rooms/{room.room_index}/timeprogram". I'm busy creating a PR, only PUT is needed I guess ? Timeprogram is already available via get_ambisense_rooms

Hi everyone!

Still cant see my VR 51 thermostats.

@Grabax Do you have any errors in the log ?

My system logs, one error followed by multiple warning are given. The error and first warning are shown below.

@dcowell Could you generate test data (-> https://github.com/signalkraft/myPyllant?tab=readme-ov-file#contributing-test-data).

signalkraft commented 6 months ago

only PUT is needed I guess

I think so!

@dcowell Could you generate test data

You can also use the home assistant service.

dcowell commented 6 months ago

only PUT is needed I guess

I think so!

@dcowell Could you generate test data

You can also use the home assistant service.

Thank you @signalkraft for looking at this. I have removed some digits from the first three serial numbers and IDs. I hope this is ok - if not, please let me know and I'll sort it out. Happy to test anything if it would assist.

homes:
  - homeName: 99d73f365c9fa331f33b13c2ee5c3568699f
    serialNumber: 07d0a780d5fb5df9c65a1482dcd5d273bdac
    systemId: e89f1adbbd1d543633bc749643814ea0cc6f
    productMetadata:
      productType: VR920
      productionYear: "19"
      productionWeek: "21"
      articleNumber: "0020252923"
    state: CLAIMED
    migrationState: FINISHED
    migrationFinishedAt: "2024-03-20T09:54:29.371206854Z"
    onlineState: ONLINE
    firmware:
      version: 0357.40.34
      updateEnabled: true
      updateRequired: false
    nomenclature: VR 920
    cag: false
    countryCode: GB
    productInformation: VR920
    firmwareVersion: 0357.40.34
e89f1adbbd1d543633bc749643814ea0cc6f:
  control_identifier:
    controlIdentifier: vrc700
  time_zone:
    timeZone: Europe/London
  diagnostic_trouble_codes:
    - serialNumber: 9080034f05a2b6a352f916820632e6149fe04338
      articleNumber: "0020197207"
      codes:
        - code: "3"
          type: MAINTENANCE
          title: Issues with your heating system
          description: Your heating system reported errors. Please check it.
          occurrenceTimestamp: "2024-03-20T09:57:52Z"
    - serialNumber: daba3c52fc18b581738a132c0a02f0238b98bea8
      articleNumber: "0010021832"
      codes: []
    - serialNumber: 07d0a780d5fb5df9c65a1482dcd5d273bdacf210
      articleNumber: "0020252923"
      codes: []
    - serialNumber: 7859ddbacb164eb95510e1bc6241d74bd3f365b2
      articleNumber: "0000000000"
      codes: []
  connection_status:
    connected: true
  system:
    state:
      system:
        outdoorTemperature: 4.5664062
        outdoorTemperatureAverage24h: 7.2109375
        systemWaterPressure: 1.6
        legionellaProtectionStartWeekday: "OFF"
        energyManagerState: HEATING
        systemOff: false
      zones:
        - index: 0
          desiredRoomTemperatureSetpointHeating: 20
          desiredRoomTemperatureSetpoint: 20
          currentRoomTemperature: 14.125
          currentRoomHumidity: 57
          currentSpecialFunction: NONE
      circuits:
        - index: 0
          circuitState: HEATING
          currentCircuitFlowTemperature: 64.5
          heatingCircuitFlowSetpoint: 63.86703
          calculatedEnergyManagerState: HEATING_ACTIVE
        - index: 2
          circuitState: STANDBY
          heatingCircuitFlowSetpoint: 0
          calculatedEnergyManagerState: HEATING_STANDBY
      domesticHotWater:
        - index: 255
          currentSpecialFunction: NONE
          currentDomesticHotWaterTemperature: 65.125
    properties:
      system:
        controllerType: VRC700
        controllerRevision: R4
        systemScheme: 2
        backupHeaterType: CONDENSING
        backupHeaterAllowedFor: DOMESTIC_HOT_WATER_AND_HEATING
        moduleConfigurationVR71: 3
        energyProvidePowerCutBehavior: DISABLE_HEATPUMP
        smartPhotovoltaicBufferOffset: 10
        externalEnergyManagementActivation: false
      zones:
        - index: 0
          isActive: true
          zoneBinding: CENTRAL_CONTROL
          associatedCircuitIndex: 0
      circuits:
        - index: 0
          mixerCircuitTypeExternal: HEATING
          heatingCircuitType: DIRECT_HEATING_CIRCUIT
          isCoolingAllowed: false
        - index: 2
          mixerCircuitTypeExternal: HEATING
          heatingCircuitType: DIRECT_HEATING_CIRCUIT
          isCoolingAllowed: false
      domesticHotWater:
        - index: 255
          minSetpoint: 35
          maxSetpoint: 70
    configuration:
      system:
        continuousHeatingStartSetpoint: -26
        alternativePoint: -21
        heatingCircuitBivalencePoint: 0
        domesticHotWaterBivalencePoint: -7
        adaptiveHeatingCurve: false
        domesticHotWaterMaximumLoadingTime: 45
        domesticHotWaterHysteresis: 5
        domesticHotWaterFlowSetpointOffset: 25
        maxFlowSetpointHeatpumpError: 25
        domesticHotWaterMaximumTemperature: 80
        hybridControlStrategy: BIVALENCE_POINT
        paralellTankLoadingAllowed: false
      zones:
        - index: 0
          general:
            name: ZONE 1
            holidayStartDateTime: "2015-01-01T00:00:00Z"
            holidayEndDateTime: "2015-01-01T00:00:00Z"
            holidaySetpoint: 5
          heating:
            operationModeHeating: DAY
            setBackTemperature: 15
            dayTemperatureHeating: 20
            timeProgramHeating:
              metaInfo:
                minSlotsPerDay: 0
                maxSlotsPerDay: 3
                setpointRequiredPerSlot: false
              monday:
                - startTime: 300
                  endTime: 1440
              tuesday:
                - startTime: 300
                  endTime: 1440
              wednesday:
                - startTime: 300
                  endTime: 1440
              thursday:
                - startTime: 300
                  endTime: 1440
              friday:
                - startTime: 300
                  endTime: 1440
              saturday:
                - startTime: 450
                  endTime: 1410
              sunday:
                - startTime: 450
                  endTime: 1320
      circuits:
        - index: 0
          heatingCurve: 2.599999
          heatingFlowTemperatureMinimumSetpoint: 15
          heatingFlowTemperatureMaximumSetpoint: 90
          heatDemandLimitedByOutsideTemperature: 50
          heatingCircuitFlowSetpointExcessOffset: 0
          setbackModeEnabled: true
          roomTemperatureControlMode: NON
        - index: 2
          heatingCurve: 1.2
          heatingFlowTemperatureMinimumSetpoint: 15
          heatingFlowTemperatureMaximumSetpoint: 90
          heatDemandLimitedByOutsideTemperature: 21
          heatingCircuitFlowSetpointExcessOffset: 0
          setbackModeEnabled: false
          roomTemperatureControlMode: NON
      domesticHotWater:
        - index: 255
          operationModeDomesticHotWater: AUTO
          tappingSetpoint: 65
          holidayStartDateTime: "2015-01-01T00:00:00Z"
          holidayEndDateTime: "2015-01-01T00:00:00Z"
          timeProgramDomesticHotWater:
            metaInfo:
              minSlotsPerDay: 0
              maxSlotsPerDay: 3
              setpointRequiredPerSlot: false
            monday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
            tuesday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
            wednesday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
            thursday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
            friday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
            saturday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
            sunday:
              - startTime: 330
                endTime: 420
              - startTime: 1200
                endTime: 1230
          timeProgramCirculationPump:
            metaInfo:
              minSlotsPerDay: 0
              maxSlotsPerDay: 3
              setpointRequiredPerSlot: false
            monday:
              - startTime: 360
                endTime: 1320
            tuesday:
              - startTime: 360
                endTime: 1320
            wednesday:
              - startTime: 360
                endTime: 1320
            thursday:
              - startTime: 360
                endTime: 1320
            friday:
              - startTime: 360
                endTime: 1320
            saturday:
              - startTime: 450
                endTime: 1410
            sunday:
              - startTime: 450
                endTime: 1320
  current_system:
    system_type: UNKNOWN
    has_emf_capable_devices: false
    primary_heat_generator: null
    secondary_heat_generators: []
    electric_backup_heater: null
    solar_station: null
    ventilation: null
    gateway: null
  mpc:
    devices: []
  rts:
    statistics: []
  rbr:
    rbrCapable: true
  rooms:
    - roomIndex: 0
      roomConfiguration:
        name: Kitchen
        temperatureSetpoint: 17
        operationMode: auto
        currentTemperature: 16.9
        currentHumidity: null
        buttonLock: false
        windowState: false
        devices:
          - name: Kitchen Rad
            sgtin: 3014F59C280013D9B00044B0
            deviceType: TRV
            lowBat: false
            unreach: false
            rssi: -55
            rssiPeer: -55
        iconId: KITCHEN
        quickVetoEndTime: null
      timeprogram:
        monday:
          - startTime: 0
            temperatureSetpoint: 17
        tuesday:
          - startTime: 0
            temperatureSetpoint: 17
        wednesday:
          - startTime: 0
            temperatureSetpoint: 17
        thursday:
          - startTime: 0
            temperatureSetpoint: 17
        friday:
          - startTime: 0
            temperatureSetpoint: 17
        saturday:
          - startTime: 0
            temperatureSetpoint: 17
        sunday:
          - startTime: 0
            temperatureSetpoint: 17
    - roomIndex: 5
      roomConfiguration:
        name: Pippa Bedroom
        temperatureSetpoint: null
        operationMode: null
        currentTemperature: null
        currentHumidity: null
        buttonLock: null
        windowState: null
        devices:
          - name: Pippa Bedroom Rad
            sgtin: 3014F59C280013DCF0000A2B
            deviceType: TRV
            lowBat: null
            unreach: true
            rssi: null
            rssiPeer: null
        iconId: BEDROOM
        quickVetoEndTime: null
      timeprogram:
        monday: []
        tuesday: []
        wednesday: []
        thursday: []
        friday: []
        saturday: []
        sunday: []
    - roomIndex: 3
      roomConfiguration:
        name: Master Bedroom
        temperatureSetpoint: 19
        operationMode: auto
        currentTemperature: 20.2
        currentHumidity: null
        buttonLock: false
        windowState: false
        devices:
          - name: Master Bedroom Rad
            sgtin: 3014F59C280013DCF00009CC
            deviceType: TRV
            lowBat: false
            unreach: false
            rssi: -69
            rssiPeer: -68
        iconId: BEDROOM
        quickVetoEndTime: null
      timeprogram:
        monday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
        tuesday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
        wednesday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
        thursday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
        friday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
        saturday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
        sunday:
          - startTime: 0
            temperatureSetpoint: 20
          - startTime: 360
            temperatureSetpoint: 19
          - startTime: 1260
            temperatureSetpoint: 20
    - roomIndex: 1
      roomConfiguration:
        name: Dining Room
        temperatureSetpoint: 15
        operationMode: auto
        currentTemperature: 17
        currentHumidity: null
        buttonLock: false
        windowState: false
        devices:
          - name: Dining Room Rad
            sgtin: 3014F59C280013D9B000451C
            deviceType: TRV
            lowBat: false
            unreach: false
            rssi: -66
            rssiPeer: -66
        iconId: DINING_ROOM
        quickVetoEndTime: null
      timeprogram:
        monday:
          - startTime: 0
            temperatureSetpoint: 15
        tuesday:
          - startTime: 0
            temperatureSetpoint: 15
        wednesday:
          - startTime: 0
            temperatureSetpoint: 15
        thursday:
          - startTime: 0
            temperatureSetpoint: 15
        friday:
          - startTime: 0
            temperatureSetpoint: 15
        saturday:
          - startTime: 0
            temperatureSetpoint: 15
        sunday:
          - startTime: 0
            temperatureSetpoint: 15
    - roomIndex: 4
      roomConfiguration:
        name: Joseph Bedroom
        temperatureSetpoint: 18
        operationMode: auto
        currentTemperature: 20.1
        currentHumidity: null
        buttonLock: null
        windowState: false
        devices:
          - name: Joseph Bedroom Rad
            sgtin: 3014F59C280013DCF0000AAA
            deviceType: TRV
            lowBat: false
            unreach: false
            rssi: -76
            rssiPeer: -69
        iconId: BEDROOM
        quickVetoEndTime: null
      timeprogram:
        monday: []
        tuesday: []
        wednesday: []
        thursday: []
        friday: []
        saturday: []
        sunday: []
    - roomIndex: 2
      roomConfiguration:
        name: Living Room
        temperatureSetpoint: 18
        operationMode: auto
        currentTemperature: 19.7
        currentHumidity: null
        buttonLock: null
        windowState: false
        devices:
          - name: Living Room Rad
            sgtin: 3014F59C280013D9B0004A03
            deviceType: TRV
            lowBat: false
            unreach: false
            rssi: -70
            rssiPeer: -72
        iconId: LIVING_ROOM
        quickVetoEndTime: null
      timeprogram:
        monday: []
        tuesday: []
        wednesday: []
        thursday: []
        friday: []
        saturday: []
        sunday: []
Grabax commented 6 months ago

@thomasgermain i checked the Log and yes i get Errors! And Unfortunately is it not VR 51 Thermostats, it was VR50s so my mistake

i hope someone can help :)

Here is a preview from the Debug Log :

2024-03-25 05:52:30.690 DEBUG (MainThread) [custom_components.mypyllant.climate] Setting up zone climate entity services for <EntityPlatform domain=climate platform_name=mypyllant config_entry=<homeassistant.config_entries.ConfigEntry object at 0x7faa1032c130>> 2024-03-25 05:52:30.703 ERROR (MainThread) [homeassistant.components.climate] Error adding entities for domain climate with platform mypyllant Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 507, in async_add_entities await asyncio.gather(tasks) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 662, in _async_add_entity capabilities=entity.capability_attributes, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 276, in capability_attributes supported_features = self.supported_features ^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mypyllant/climate.py", line 515, in supported_features | ClimateEntityFeature.TURN_OFF ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/enum.py", line 784, in getattr raise AttributeError(name) from None AttributeError: TURN_OFF 2024-03-25 05:52:30.712 ERROR (MainThread) [homeassistant.components.climate] Error adding entities for domain climate with platform mypyllant Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 507, in async_add_entities await asyncio.gather(tasks) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 662, in _async_add_entity capabilities=entity.capability_attributes, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 276, in capability_attributes supported_features = self.supported_features ^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mypyllant/climate.py", line 828, in supported_features | ClimateEntityFeature.TURN_OFF ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/enum.py", line 784, in getattr raise AttributeError(name) from None AttributeError: TURN_OFF 2024-03-25 05:52:30.718 ERROR (MainThread) [homeassistant.components.climate] Error while setting up mypyllant platform for climate Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 367, in _async_setup_platform await asyncio.gather(pending) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 507, in async_add_entities await asyncio.gather(tasks) File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 662, in _async_add_entity capabilities=entity.capability_attributes, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 276, in capability_attributes supported_features = self.supported_features ^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mypyllant/climate.py", line 515, in supported_features | ClimateEntityFeature.TURN_OFF ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/enum.py", line 784, in getattr raise AttributeError(name) from None AttributeError: TURN_OFF

signalkraft commented 6 months ago

@Grabax you need to update to at least HA 2024.2.

@dcowell thanks for the test data, I integrated it and fixed a few things. Should work in the latest beta version.

For everyone else: There's experimental support for ambisense time programs in v0.8.3b0 with the set_time_program service and a calendar entity. Especially the latter is very experimental, because Ambisense room thermostats work differently than the other time schedules.

dcowell commented 6 months ago

@dcowell thanks for the test data, I integrated it and fixed a few things. Should work in the latest beta version.

Thankyou @signalkraft - I can now see my Ambisense system. That is fantastic!

Grabax commented 6 months ago

@signalkraft now it is working Thanks! :)

lecocqe commented 6 months ago

hello,

it should be also interesting to have the following data: VR50 ambisense battery level and link quality

thank you in advance

camhef commented 6 months ago

hello,

it should be also interesting to have the following data: VR50 ambisense battery level and link quality

thank you in advance

I can see battery and signal information available in the state attribute of my TRVs

devices:
  - extra_fields: {}
    device_type: TRV
    name: Cloakroom radiator
    sgtin: 3014F59***
    unreach: false
    low_bat: false
    rssi: -82
    rssi_peer: -69

but it might take a bit of effort to extract the data and make it useful.

lecocqe commented 6 months ago

Oh yes, I didn't pay attention to this info. I know how to retrieve that then. Thank you for pointing g me in this direction.

EL

smmoroz commented 2 months ago

After update from 0.8.3 to 0.8.11 I lost all my ambisense thermostats. I downgraded the component to 0.8.3, but ambisense thermostats were still missing.

I found that this because Vaillant API returns

Starting GET to https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/XXX/capability
Got response for GET to https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/XXX/capability: {"rbrCapable":false}

So, I just set ambisense_capability = True inmyPyllant/api.py to avoid rbrCapable check. And surprisingly it worked.

2024-07-07 20:29:54.065 DEBUG (MainThread) [myPyllant.http_client] Starting request TraceRequestStartParams(method='GET', url=URL('https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/api/v1/ambisense/facilities/XXX/rooms'), ...
2024-07-07 20:29:54.498 DEBUG (MainThread) [myPyllant.http_client] Got response [{"roomIndex":0,"roomConfiguration":{"name":"Прихожая","temperatureSetpoint":21.0,"operationMode":"auto","currentTemperature":28.0,"currentHumidity":null,"buttonLock":false,"windowState":false,"devices":[{"name":"Прихожая","sgtin":"3014F59C28000A19B0000419","deviceType":"TRV","lowBat":false,"unreach":false,"rssi":-71,"rssiPeer":-72}],"iconId":"HOBBY_ROOM","quickVetoEndTime":null},"timeprogram":{"monday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":360,"temperatureSetpoint":21.0},{"startTime":1200,"temperatureSetpoint":18.0}],"tuesday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":360,"temperatureSetpoint":21.0},{"startTime":1200,"temperatureSetpoint":18.0}],"wednesday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":360,"temperatureSetpoint":21.0},{"startTime":1200,"temperatureSetpoint":18.0}],"thursday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":360,"temperatureSetpoint":21.0},{"startTime":1200,"temperatureSetpoint":18.0}],"friday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":360,"temperatureSetpoint":21.0},{"startTime":1200,"temperatureSetpoint":18.0}],"saturday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":480,"temperatureSetpoint":21.0},{"startTime":1260,"temperatureSetpoint":18.0}],"sunday":[{"startTime":0,"temperatureSetpoint":18.0},{"startTime":480,"temperatureSetpoint":21.0},{"startTime":1260,"temperatureSetpoint":18.0}]}},{"roomIndex":3,"roomConfiguration":{"name":"Спальня","temperatureSetpoint":22.0,"operationMode":"auto","currentTemperature":30.1,"currentHumidity":null,"buttonLock":false,"windowState":false,"devices":[{"name":"Спальня","sgtin":"3014F59C28000A19B00035BE","deviceType":"TRV","lowBat":false,"unreach":false,"rssi":-58,"rssiPeer":-57}],"iconId":"BEDROOM","quickVetoEndTime":null},"timeprogram":{"monday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":570,"temperatureSetpoint":19.0},{"startTime":1020,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}],"tuesday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":570,"temperatureSetpoint":19.0},{"startTime":1020,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}],"wednesday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":570,"temperatureSetpoint":19.0},{"startTime":1020,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}],"thursday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":570,"temperatureSetpoint":19.0},{"startTime":1020,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}],"friday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":570,"temperatureSetpoint":19.0},{"startTime":1020,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}],"saturday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}],"sunday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":22.0},{"startTime":1320,"temperatureSetpoint":19.0}]}},{"roomIndex":1,"roomConfiguration":{"name":"Офис","temperatureSetpoint":20.0,"operationMode":"auto","currentTemperature":29.5,"currentHumidity":null,"buttonLock":false,"windowState":false,"devices":[{"name":"Офис","sgtin":"3014F59C28000A19B000415A","deviceType":"TRV","lowBat":false,"unreach":false,"rssi":-77,"rssiPeer":-80}],"iconId":"OFFICE","quickVetoEndTime":null},"timeprogram":{"monday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}],"tuesday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}],"wednesday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}],"thursday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}],"friday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}],"saturday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}],"sunday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":360,"temperatureSetpoint":20.0},{"startTime":1260,"temperatureSetpoint":19.0}]}},{"roomIndex":4,"roomConfiguration":{"name":"Детская","temperatureSetpoint":22.0,"operationMode":"auto","currentTemperature":28.0,"currentHumidity":null,"buttonLock":null,"windowState":false,"devices":[{"name":"Детская","sgtin":"3014F59C28000A19B0003601","deviceType":"TRV","lowBat":false,"unreach":false,"rssi":-76,"rssiPeer":-75}],"iconId":"CHILDREN_ROOM","quickVetoEndTime":null},"timeprogram":{"monday":[],"tuesday":[],"wednesday":[],"thursday":[],"friday":[],"saturday":[],"sunday":[]}},{"roomIndex":2,"roomConfiguration":{"name":"Гостиная","temperatureSetpoint":20.0,"operationMode":"auto","currentTemperature":29.4,"currentHumidity":null,"buttonLock":false,"windowState":false,"devices":[{"name":"Гостиная","sgtin":"3014F59C28000A19B00017E0","deviceType":"TRV","lowBat":false,"unreach":false,"rssi":-72,"rssiPeer":-70}],"iconId":"LIVING_ROOM","quickVetoEndTime":null},"timeprogram":{"monday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1320,"temperatureSetpoint":19.0}],"tuesday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1320,"temperatureSetpoint":19.0}],"wednesday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1320,"temperatureSetpoint":19.0}],"thursday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1320,"temperatureSetpoint":19.0}],"friday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1320,"temperatureSetpoint":19.0}],"saturday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1410,"temperatureSetpoint":19.0}],"sunday":[{"startTime":0,"temperatureSetpoint":19.0},{"startTime":420,"temperatureSetpoint":20.0},{"startTime":1410,"temperatureSetpoint":19.0}]}}]

As far as I can see, rbrCapable is not needed now. @signalkraft can you please review the situation? If needed, I'm ready to beta-test new releases.