Add Solyx Energy integration#176572
Conversation
There was a problem hiding this comment.
Hi @MartinaeyNL
It seems you haven't yet signed a CLA. Please do so here.
Once you do that we will be able to review and accept this pull request.
Thanks!
There was a problem hiding this comment.
When adding new integrations, limit included platforms to a single platform. While we appreciate the effort, reviewing larger than necessary PRs slows down the review process. Please reduce this PR to a single platform. See the review process for more details.
|
The PR is currently a draft, as the documentation and brands PR is still pending. |
There was a problem hiding this comment.
Hi @MartinaeyNL
It seems you haven't yet signed a CLA. Please do so here.
Once you do that we will be able to review and accept this pull request.
Thanks!
There was a problem hiding this comment.
Pull request overview
Adds cloud polling support for Solyx Energy Nymo water boilers.
Changes:
- Adds credential setup, reauthentication, polling, and cloud control.
- Exposes sensor, number, and select entities.
- Adds metadata, translations, typing configuration, and tests.
Reviewed changes
Copilot reviewed 27 out of 29 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
.strict-typing |
Enables strict typing. |
CODEOWNERS |
Adds integration owners. |
mypy.ini |
Adds strict mypy settings. |
homeassistant/generated/config_flows.py |
Registers the config flow. |
homeassistant/generated/integrations.json |
Registers integration metadata. |
homeassistant/components/solyx_energy/__init__.py |
Implements setup and unloading. |
homeassistant/components/solyx_energy/api.py |
Implements cloud API access. |
homeassistant/components/solyx_energy/config_flow.py |
Adds setup and reauthentication flows. |
homeassistant/components/solyx_energy/const.py |
Defines integration constants. |
homeassistant/components/solyx_energy/coordinator.py |
Coordinates polling and writes. |
homeassistant/components/solyx_energy/entity.py |
Defines the entity base class. |
homeassistant/components/solyx_energy/entity_descriptions.py |
Describes exposed entities. |
homeassistant/components/solyx_energy/manifest.json |
Declares integration metadata. |
homeassistant/components/solyx_energy/number.py |
Adds boiler control entity. |
homeassistant/components/solyx_energy/quality_scale.yaml |
Declares quality-scale status. |
homeassistant/components/solyx_energy/select.py |
Adds operating-mode control. |
homeassistant/components/solyx_energy/sensor.py |
Adds energy and power sensors. |
homeassistant/components/solyx_energy/strings.json |
Adds user-facing translations. |
homeassistant/components/solyx_energy/util.py |
Adds API value parsing helpers. |
tests/components/solyx_energy/__init__.py |
Initializes the test package. |
tests/components/solyx_energy/conftest.py |
Provides shared fixtures. |
tests/components/solyx_energy/const.py |
Defines test constants. |
tests/components/solyx_energy/fixtures/asset_data.json |
Provides sample API data. |
tests/components/solyx_energy/test_api.py |
Tests cloud API behavior. |
tests/components/solyx_energy/test_config_flow.py |
Tests setup and reauthentication. |
tests/components/solyx_energy/test_init.py |
Tests lifecycle and device registration. |
tests/components/solyx_energy/test_number.py |
Tests number controls. |
tests/components/solyx_energy/test_select.py |
Tests operating-mode controls. |
tests/components/solyx_energy/test_sensor.py |
Tests sensor states. |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Hi @MartinaeyNL
It seems you haven't yet signed a CLA. Please do so here.
Once you do that we will be able to review and accept this pull request.
Thanks!
There was a problem hiding this comment.
Hi @MartinaeyNL
It seems you haven't yet signed a CLA. Please do so here.
Once you do that we will be able to review and accept this pull request.
Thanks!
There was a problem hiding this comment.
Hi @MartinaeyNL
It seems you haven't yet signed a CLA. Please do so here.
Once you do that we will be able to review and accept this pull request.
Thanks!
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
| @property | ||
| @override | ||
| def native_value(self) -> StateType | None: | ||
| """Retrieve the parsed (native) value of the sensor.""" | ||
| return getattr(self.coordinator.data, self.entity_description.key, None) |
| @property | ||
| @override | ||
| def native_value(self) -> float | None: | ||
| """Return the current value of the number from the coordinator data.""" | ||
| return getattr(self.coordinator.data, self.entity_description.key, None) |
| def parse_attr_value(raw: dict[str, Any], attr_name: str) -> Any: | ||
| """Extract value from an Solyx device attribute.""" | ||
| attributes = raw.get("attributes") or {} | ||
| val = attributes.get(attr_name, {}).get("value") | ||
| _LOGGER.debug("Extracting %s. New value: %s", attr_name, val) | ||
| return val | ||
|
|
||
|
|
||
| def parse_float(raw: dict[str, Any], attr_name: str) -> float | None: | ||
| """Parse a float value from an Solyx device attribute.""" | ||
| val = parse_attr_value(raw, attr_name) |
Proposed change
This PR adds a new integration for the Solyx Energy water boiler named Nymo.
Their product is marketed as an alternative for home batteries, instead storing energy in the form of hot water.
It consists of a P1 dongle for measuring grid power, in combination with a standard electric boiler that is remotely controllable.
They offer an hosted HTTP API to control and read data from their Nymo devices.
In the future I might implement a protocol to communicate with their ESP32 firmware locally.
Through the Solyx Energy mobile app, users can obtain a
client_id,client_secretand device ID.This is used for obtaining an access token and communicating with the cloud HTTP API.
The integration has been configured to use
cloud_pollingwith an interval of 1 minute.This initial PR targets a
bronzequality scale, although most of the code is ofsilverquality.Type of change
Additional information
Checklist
ruff format homeassistant tests)If user exposed functionality or configuration variables are added/changed:
If the code communicates with devices, web services, or third-party tools:
Updated and included derived files by running:
python3 -m script.hassfest.requirements_all.txt.Updated by running
python3 -m script.gen_requirements_all.To help with the load of incoming pull requests: