{"id":18900040,"url":"https://github.com/p0l0/hagruenbeck_cloud","last_synced_at":"2025-08-02T00:38:47.293Z","repository":{"id":217919192,"uuid":"741626825","full_name":"p0l0/hagruenbeck_cloud","owner":"p0l0","description":"Home Assistant integration for Grünbeck Cloud based Water softeners","archived":false,"fork":false,"pushed_at":"2025-03-12T09:54:15.000Z","size":289,"stargazers_count":53,"open_issues_count":22,"forks_count":2,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-28T14:21:41.600Z","etag":null,"topics":["custom-component","gruenbeck","hacs-integration","home-assistant","homeassistant","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/p0l0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-10T19:28:31.000Z","updated_at":"2025-03-06T10:02:21.000Z","dependencies_parsed_at":"2024-12-24T19:46:59.857Z","dependency_job_id":null,"html_url":"https://github.com/p0l0/hagruenbeck_cloud","commit_stats":null,"previous_names":["p0l0/hagruenbeck_cloud"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p0l0%2Fhagruenbeck_cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p0l0%2Fhagruenbeck_cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p0l0%2Fhagruenbeck_cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p0l0%2Fhagruenbeck_cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/p0l0","download_url":"https://codeload.github.com/p0l0/hagruenbeck_cloud/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248994888,"owners_count":21195465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["custom-component","gruenbeck","hacs-integration","home-assistant","homeassistant","python"],"created_at":"2024-11-08T08:49:54.815Z","updated_at":"2025-08-02T00:38:47.274Z","avatar_url":"https://github.com/p0l0.png","language":"Python","funding_links":["https://www.buymeacoffee.com/p0l0"],"categories":["Python"],"sub_categories":[],"readme":"# Grünbeck Cloud Homeassistant Component\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.gruenbeck.com/\" target=\"_blank\"\u003e\u003cimg src=\"https://www.gruenbeck.com/typo3conf/ext/sitepackage_gruenbeck/Resources/Public/Images/gruenbeck-logo.svg\" alt=\"Gruenbeck\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration)\n[![GitHub release](https://img.shields.io/github/release/p0l0/hagruenbeck_cloud)](https://github.com/p0l0/hagruenbeck_cloud/releases)\n![Build Pipeline](https://img.shields.io/github/actions/workflow/status/p0l0/hagruenbeck_cloud/validate.yaml)\n![License](https://img.shields.io/github/license/p0l0/hagruenbeck_cloud)\n\n![Project maintenance](https://img.shields.io/badge/maintainer-%40p0l0-blue.svg)\n[![BuyMeCoffee](https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg)](https://www.buymeacoffee.com/p0l0)\n\nCustom Component to integrate Grünbeck Cloud based Water softeners into [Home Assistant](https://www.home-assistant.io/).\n\n**This integration will set up the following entities.**\n\n| Platform                                                    | Description                                                                                                                                                  | Enabled by default |\n|-------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|\n| __Binary sensor__                                           |                                                                                                                                                              ||\n| `binary_sensor.\u003cdevice_name\u003e_has_error`                     | Binary sensor showing if we have an error or not\u003cbr /\u003e\u003cbr /\u003eThe `errors` attribute contains error history                                                    | :white_check_mark: |\n| __Sensor__                                                  |                                                                                                                                                              ||\n| `sensor.\u003cdevice_name\u003e_next_regeneration`                    | Sensor showing when next regeneration will be                                                                                                                | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_next_service`                         | Sensor showing how many days left until next service                                                                                                         | :no_entry_sign: |\n| `sensor.\u003cdevice_name\u003e_raw_water`                            | Sensor showing configured raw water value                                                                                                                    | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_regeneration_counter`                 | Sensor showing current regeneration counter                                                                                                                  | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_current_flow_rate`                    | Sensor showing current flow rate in m³/h                                                                                                                     | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_current_flow_rate_2`                  | Sensor showing current flow rate for Exchanger 2 in m³/h                                                                                                     | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_last_service`                         | Sensor showing when last service was                                                                                                                         | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_regeneration_remaining_time`          | Sensor showing the remaining amount / time of current regeneration step”                                                                                     | :no_entry_sign: |\n| `sensor.\u003cdevice_name\u003e_regeneration_step`                    | Sensor showing the current regeneration step                                                                                                                 | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_remaining_capacity_percentage`        | Sensor showing remaining salt capacity in %                                                                                                                  | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_remaining_capacity_percentage_2`      | Sensor showing remaining salt capacity for Exchanger 2 in %                                                                                                  | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_remaining_capacity_volume`            | Sensor showing remaining salt capacity in m³                                                                                                                 | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_remaining_capacity_volume_2`          | Sensor showing remaining salt capacity for Exchanger 2 in m³                                                                                                 | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_salt_consumption`                     | Sensor showing current salt consumption in kg\u003cbr /\u003e\u003cbr /\u003eThe `daily_usage` attribute contains the salt usage of the last 3 days                              | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_salt_range`                           | Sensor showing how many days left until salt is empty (SD18 does not support it, and returns 999)                                                            | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_soft_water`                           | Sensor showing the configured soft water value                                                                                                               | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_soft_water_quantity`                  | Sensor showing current soft water quantity in liters\u003cbr /\u003e\u003cbr /\u003eThe `daily_usage` attribute contains the soft water usage of the last 3 days                 | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_soft_water_quantity_2`                | Sensor showing current soft water quantity for Exchanger 2 in liters\u003cbr /\u003e\u003cbr /\u003eThe `daily_usage` attribute contains the soft water usage of the last 3 days | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_startup`                              | Sensor showing start-up date                                                                                                                                 | :white_check_mark: |\n| `sensor.\u003cdevice_name\u003e_actual_value_soft_water_hardness`     | Sensor showing the actual value for soft water hardness                                                                                                      | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_blending_flow_rate`                   | Sensor showing the blending flow rate                                                                                                                        | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_capacity_figure`                      | Sensor showing the capacity figure                                                                                                                           | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_current_chlorine`                     | Sensor showing the current chlorine                                                                                                                          | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_exchanger_peak_value`                 | Sensor showing the Exchanger peak value                                                                                                                      | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_exchanger_peak_value_2`               | Sensor showing the peak value for Exchanger 2                                                                                                                | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_exhausted_percentage`                 | Sensor showing the adsorber exhaustion in %                                                                                                                  | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_flow_rate_peak_value`                 | Sensor showing the flow rate peak value                                                                                                                      | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_last_regeneration_exchanger`          | Sensor showing the time of last regeneration for the Exchanger                                                                                               | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_last_regeneration_exchanger_2`        | Sensor showing the time of last regeneration for the Exchanger 2                                                                                             | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_make_up_water_volume`                 | Sensor showing the make-up water volume                                                                                                                      | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_regeneration_flow_rate_exchanger`     | Sensor showing the regeneration flow rate for Exchanger                                                                                                      | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_regeneration_flow_rate_exchanger_2`   | Sensor showing the regeneration flow rate for Exchanger 2                                                                                                    | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_remaining_amount_of_water`            | Sensor showing the adsorber remaining amount of water                                                                                                        | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_step_indication_regeneration_valve`   | Sensor showing the step indication regeneration for valve 1                                                                                                  | :no_entry_sign:    |\n| `sensor.\u003cdevice_name\u003e_step_indication_regeneration_valve_2` | Sensor showing the step indication regeneration for valve 2                                                                                                  | :no_entry_sign:    |\n| __Switch__                                                  |                                                                                                                                                              ||\n| `switch.\u003cdevice_name\u003e_buzzer`                               | Activate/Deactivate audio signal on error                                                                                                                    | :white_check_mark: |\n| `switch.\u003cdevice_name\u003e_dlst`                                 | Activate/Deactivate daylight saving time                                                                                                                     | :white_check_mark: |\n| `switch.\u003cdevice_name\u003e_email_notification`                   | Activate/Deactivate Email Notifications                                                                                                                      | :white_check_mark: |\n| `switch.\u003cdevice_name\u003e_push_notification`                    | Activate/Deactivate Push Notifications                                                                                                                       | :white_check_mark: |\n| `switch.\u003cdevice_name\u003e_disinfection_monitoring`              | Activate/Deactivate disinfection monitoring\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                    | :no_entry_sign:    |\n| `switch.\u003cdevice_name\u003e_fault_signal_contact`                 | Activate/Deactivate function fault signal contact\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                              | :no_entry_sign:    |\n| `switch.\u003cdevice_name\u003e_knx`                                  | Activate/Deactivate KNX connection\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                             | :no_entry_sign:    |\n| `switch.\u003cdevice_name\u003e_led_ring_flash_on_signal`             | Activate/Deactivate illuminated LED ring flashes for pre-alarm salt supply                                                                                   | :no_entry_sign:    |\n| `switch.\u003cdevice_name\u003e_nominal_flow_monitoring`              | Activate/Deactivate monitoring of nominal flow\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                 | :no_entry_sign:    |\n| `switch.\u003cdevice_name\u003e_ntp_sync`                             | Activate/Deactivate getting date/time automatically (NTP)\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                      | :no_entry_sign:    |\n| __Text__                                                    |                                                                                                                                                              ||\n| `text.\u003cdevice_name\u003e_installer_email`                        | Set the Installer Email\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                                        | :no_entry_sign:    |\n| `text.\u003cdevice_name\u003e_installer_name`                         | Set the Installer Name\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                                         | :no_entry_sign:    |\n| `text.\u003cdevice_name\u003e_installer_phone`                        | Set the Installer Phone\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                                        | :no_entry_sign:    |\n| __Time__                                                    |                                                                                                                                                              ||\n| `time.\u003cdevice_name\u003e_regeneration_time_monday_1`             | Set Regeneration Time Monday slot #1                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_monday_2`             | Set Regeneration Time Monday slot #2                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_monday_3`             | Set Regeneration Time Monday slot #3                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_tuesday_1`            | Set Regeneration Time Tuesday slot #1                                                                                                                        | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_tuesday_2`            | Set Regeneration Time Tuesday slot #2                                                                                                                        | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_tuesday_3`            | Set Regeneration Time Tuesday slot #3                                                                                                                        | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_wednesday_1`          | Set Regeneration Time Wednesday slot #1                                                                                                                      | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_wednesday_2`          | Set Regeneration Time Wednesday slot #2                                                                                                                      | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_wednesday_3`          | Set Regeneration Time Wednesday slot #3                                                                                                                      | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_thursday_1`           | Set Regeneration Time Thursday slot #1                                                                                                                       | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_thursday_2`           | Set Regeneration Time Thursday slot #2                                                                                                                       | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_thursday_3`           | Set Regeneration Time Thursday slot #3                                                                                                                       | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_friday_1`             | Set regeneration Time Friday slot #1                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_friday_2`             | Set Regeneration Time Friday slot #2                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_friday_3`             | Set Regeneration Time Friday slot #3                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_saturday_1`           | Set Regeneration Time Saturday slot #1                                                                                                                       | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_saturday_2`           | Set Regeneration Time Saturday slot #2                                                                                                                       | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_saturday_3`           | Set Regeneration Time Saturday slot #3                                                                                                                       | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_sunday_1`             | Set Regeneration Time Sunday slot #1                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_sunday_2`             | Set Regeneration Time Sunday slot #2                                                                                                                         | :white_check_mark: |\n| `time.\u003cdevice_name\u003e_regeneration_time_sunday_3`             | Set Regeneration Time Sunday slot #3                                                                                                                         | :white_check_mark: |\n| __Number__                                                  |                                                                                                                                                              ||\n| `number.\u003cdevice_name\u003e_raw_water_hardness`                   | Set the raw water hardness in °dH                                                                                                                            | :white_check_mark: |\n| `number.\u003cdevice_name\u003e_soft_water_hardness`                  | Set the soft water hardness in °dH                                                                                                                           | :white_check_mark: |\n| `number.\u003cdevice_name\u003e_backwash`                             | Set the backwash value in liter\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                                | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_blending_water_meter_pulse_rate`      | Set the blending water meter pulse rate in l/Imp\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                               | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_monday`               | Set the capacity figure value for Monday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                             | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_tuesday`              | Set the capacity figure value for Tuesday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                            | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_wednesday`            | Set the capacity figure value for Wednesday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                          | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_thursday`             | Set the capacity figure value for Thursday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                           | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_friday`               | Set the capacity figure value for Friday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                             | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_saturday`             | Set the capacity figure value for Saturday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                           | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_capacity_figure_sunday`               | Set the capacity figure value for Sunday in m³x°dH\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                             | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_charge`                               | Set the charge value in mAmin\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                                  | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_current_setpoint`                     | Set the current setpoint value in mA\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                           | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_end_frequency_blending_valve`         | Set the end frequency blending valve value in Hz\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                               | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_end_frequency_regeneration_valve`     | Set the end frequency regeneration valve value in Hz\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                           | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_end_frequency_regeneration_valve_2`   | Set the end frequency regeneration value for valve 2 in Hz\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                     | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_interval_forced_regeneration`         | Set the interval of forced regeneration in days\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_led_ring_brightness`                  | Set the LED ring Brightness in %                                                                                                                             | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_longest_switch_on_time_chlorine_cell` | Set the longest switch-on time chlorine cell value in minutes\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                  | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_maintenance_interval`                 | Set the maintenance interval in days\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                           | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_minimum_filling_volume_largest_cap`   | Set the minimum filling volume for largest cap in liter\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                        | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_maximum_filling_volume_largest_cap`   | Set the maximum filling volume for largest cap in liter\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                        | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_minimum_filling_volume_smallest_cap`  | Set the minimum filling volume for smallest cap in liter\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                       | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_maximum_filling_volume_smallest_cap`  | Set the maximum filling volume for smallest cap in liter\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                       | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_maximum_remaining_time_regeneration`  | Set the maximum remaining time regeneration in minutes\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                         | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_nominal_flow_rate`                    | Set the nominal flow rate value in m³/h\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                        | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_regeneration_monitoring_time`         | Set the regeneration monitoring time in minutes\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_regeneration_water_meter_pulse_rate`  | Set the regeneration water meter pulse rate in l/Imp\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                           | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_residual_capacity_limit`              | Set the residual capacity limit value in %\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                     | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_salting_monitoring_time`              | Set the salting monitoring time in minutes\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                     | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_slow_rinse`                           | Set the slow rinse value in minutes\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                            | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_soft_water_meter_pulse_rate`          | Set the soft water meter pulse rate in l/Imp\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                   | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_treatment_volume`                     | Set the treatment volume in m³\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                                 | :no_entry_sign:    |\n| `number.\u003cdevice_name\u003e_washing_out`                          | Set the washing out value in liter\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                             | :no_entry_sign:    |\n| __Select__                                                  |                                                                                                                                                              ||\n| `select.\u003cdevice_name\u003e_mode`                                 | Select sensor to change the operation mode                                                                                                                   | :white_check_mark: |\n| `select.\u003cdevice_name\u003e_regeneration_mode`                    | Select sensor to change the regeneration mode                                                                                                                | :white_check_mark: |\n| `select.\u003cdevice_name\u003e_water_hardness_unit`                  | Select sensor to change the water hardness unit                                                                                                              | :white_check_mark: |\n| `select.\u003cdevice_name\u003e_language`                             | Select sensor to change the interface language\u003cbr /\u003e\u003cbr /\u003e__API returns an 500 error when trying to change__                                                 | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_led_ring_mode`                        | Select sensor to change the LED Ring Mode                                                                                                                    | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_monday`               | Select sensor to change the individual operation mode for Monday                                                                                             | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_tuesday`              | Select sensor to change the individual operation mode for Tuesday                                                                                            | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_wednesday`            | Select sensor to change the individual operation mode for Wednesday                                                                                          | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_thursday`             | Select sensor to change the individual operation mode for Thursday                                                                                           | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_friday`               | Select sensor to change the individual operation mode for Friday                                                                                             | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_saturday`             | Select sensor to change the individual operation mode for Saturday                                                                                           | :no_entry_sign:    |\n| `select.\u003cdevice_name\u003e_mode_individual_sunday`               | Select sensor to change the individual operation mode for Sunday                                                                                             | :no_entry_sign:    |\n\n \u003e [!NOTE]\n \u003e Entity names are using translation, that means they will have a different name if you are not using english.\n \n \u003e [!CAUTION]\n \u003e Unfortunately some parameters can not be changed via API, it always returns an HTTP Error 500 with the error of type ‘unexpectedException’\n\n**This integration provides following services.**\n\n| Service                       | Description                                                           | Fields                                                                                                                                                                                                                      |\n|-------------------------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| change_settings               | Changes the setting for the water softener.                           | `parameter`: The name of the parameter, check [pygruenbeck_cloud](https://github.com/p0l0/pygruenbeck_cloud?tab=readme-ov-file#available-configuration-parameter) for available parameter.\u003cbr/\u003e`value`: New value to be set |\n| get_device_salt_measurements  | Returns a list with the salt measurement for each day, since startup  | None                                                                                                                                                                                                                        |\n| get_device_water_measurements | Returns a list with the water measurement for each day, since startup | None                                                                                                                                                                                                                        |\n| regenerate                    | Starts a manual regeneration                                          | None                                                                                                                                                                                                                        |\n\n\n# Installation\n## HACS (Recommended)\nThis is currently not an official HACS integration and repository needs to be added to HACS.\n\nAssuming you have already installed and configured HACS, follow these steps:\n\n1. Navigate to the HACS integrations page\n2. Choose Integrations under HACS\n3. Click on the three small dots in the upper right corner and select `Custom repositories` and add this URL:\n```bash\nhttps://github.com/p0l0/hagruenbeck_cloud/\n```\n4. Click the '+' button on the bottom of the page\n5. Search for \"Grünbeck Cloud\", choose it, and click install in HACS\n6. Ready! Now continue with the configuration.\n\n# Configuration\n\n## Through the interface\n1. Navigate to `Settings \u003e Devices \u0026 Services` and then click `Add Integration`\n2. Search for `Grünbeck Cloud`\n4. Enter your credentials for the Grünbeck Cloud\n\n## Energy/Water Dashboard\n\nTo get the real water consumption (at least for most people in Germany), you need to create a template sensor with following calculation (you need to change the sensors with your entity names):\n\n```yaml\ntemplate:\n  - sensor:\n      - name: \"Total Water Usage\"\n        unit_of_measurement: L\n        icon: mdi:water-pump\n        state_class: total_increasing\n        device_class: water\n        state: \u003e\n          {%- set soft_water = states('sensor.\u003cdevice_name\u003e_soft_water') | float(0) -%}\n          {%- set raw_water = states('sensor.\u003cdevice_name\u003e_raw_water') | float(0) -%}\n          {%- set soft_water_quantity = states('sensor.\u003cdevice_name\u003e_soft_water_quantity') | float(0) -%}\n          {%- if (is_number(soft_water_quantity) and (soft_water_quantity \u003e 1)) and (is_number(raw_water) and (raw_water \u003e 1)) and (is_number(soft_water) and (soft_water \u003e 1)) -%}\n            {%- set water_usage = ((soft_water*soft_water_quantity)/(raw_water-soft_water)+soft_water_quantity) | round(4) | float(unavailable) -%}\n            {%- if is_number(water_usage) -%}\n              {{water_usage}}\n            {%- endif -%}\n          {%- endif -%}\n```\n\nThe sensor `sensor.\u003cdevice_name\u003e_soft_water_quantity` is not being pushed regularly via WebSocket, and to avoid overloading the Grünbeck Cloud API, this sensor will only be updated every 360 seconds.\n\nIf you get an error about missing statistics, it's because the entity needs to collect some data, it will be gone after a while.\n\n__REMEMBER__: _Entity names are using translation, that means they will have a different name if you are not using english._\n\n# LED Ring\n\nIf you have a Grünbeck model with LED Ring, the communication between integration and Grünbeck cloud is considered as \"operation by user\". You should change the configuration of the ring, to only be active _in case of failure_, to avoid permanent light on.\n\n# Known Issues\n\nIf you change the operation mode and nothing changes, check if the App shows the message _\"The mode of operation will be changed after next regeneration\"_ when you try to change the operation mode there. I currently was not able to find out how to identify this state.\n\nWater hardness unit is currently hardcoded to be shown in HA as °dH, but it's only a suffix nothing is being recalculated if you have a different unit in your installation. \n\n# Legal notice\nThis is a personal project and isn't in any way affiliated with, sponsored or endorsed by [Grünbeck](https://www.gruenbeck.com/).\n\nAll product names, trademarks and registered trademarks in (the images in) this repository, are property of their respective owners. All images in this repository are used by the project for identification purposes only.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp0l0%2Fhagruenbeck_cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fp0l0%2Fhagruenbeck_cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp0l0%2Fhagruenbeck_cloud/lists"}