lavermanjj / home-assistant-solarfocus Goto Github PK
View Code? Open in Web Editor NEW🏡 Solarfocus eco manager touch integration for Home Assistant
License: Apache License 2.0
🏡 Solarfocus eco manager touch integration for Home Assistant
License: Apache License 2.0
Would be great to see the API Version (version of the "eco manager touch", in Home Assistant.
I have seen the "api_version": "Solarfocus API Version" in your code but don't know how to modify it so that it shows up in Home Assistant similar to a sensor.
The integration of my NUKI doorlock for instance solved this as a "sensor.nuki_bridge_firmware_version" with the "type: Diagnostic", in case that helps.
In the screenshot of the integration i see the current FW version, but I would like to display it in the GUI (lovelace) in Home Assistant.
Describe the bug
Missing enumeration of States "Solarfocus Boiler boiler status" - shows "0" instead of "Bereitschaft"
Expected behavior
Numbers shall be enumerated
Desktop (please complete the following information):
Additional context
Root cause is that for EcoTop Light at least for this verison the enum starts at 0
adding this to strings.json (de.json, en.json) fixes this
"bb_status" : {
"state" : {
"0": "Bereitschaft",
"1": "Zündphase",
...
the entities "biomass boiler boiler operating mode" and "biomass boiler log wood" should be renamed to indicate they work only with "thermonator biomass boiler" (similar to the octoplus entities) - otherwise users wonder why they don't work out of the box.
Suggestion 1: Rename to "biomass boiler therminator boiler operating mode" and "biomass boiler therminator log wood".
Suggestion 2: Let user choose the type of biomass-boiler at the installation of the integration and show only items suitable for his biomass boiler...
The door contact binary_sensor is inverted for the eco top light.
SolarfocusBinarySensorEntityDescription(
key="door_contact",
device_class=BinarySensorDeviceClass.DOOR,
on_state="0", # might be one for terminator, but is 0 for eco top light
Are there further differences?
Hi there,
i just found your great repo!
Is it possible to get this module working for my therminator II combi boiler?
Can I use the module already now?
Based on the operation instructions there is a offset to use for the heating-circute readings of 200:
https://www.solarfocus.com/produkte/Waermepumpe/EcoManager-t_Modbus-TCP-Registerdaten_Anleitung.pdf
:)
Will look forward for this feature! i can test with my thermi II
Ecotop Light, received a new FW Update recently. FW 23.091
In the Home Assistant integration i choose 23.020. HA is running latest version.
In HA the "door contact" shows always "OPEN".
The boiler is running and i guess the door should show "closed" because i close every door ... makes me think... what exactly does "door contact" mean? What door exactly? Am I missing something?
Maybe someone can help clarifying this...
Hi
I now own a PV with Solaredge WR. And I can set the heat pump so that from a PV surplus feed-in of 2000W, the flow temperatures of the heating circuits and the buffer tank are raised by an adjustable value. This works via Modbus. Is it possible to create an entity to simulate a PV surplus with an automation? Then you could get the WP at the 3 cheapest hours of electricity cheaper energy in the WP to optimize the electricity costs a bit.
[vampair_PV-Eigenverbrauchsoptimierung_Anleitung.pdf](https://github.com/LavermanJJ/home-assistant-solarfocus/files/12837373/vampair_PV-Eigenverbrauchsoptimierung_Anleitung.pdf)Issue: currently sensor shows after Installation "0 C" however when moving the slider to 10C and afterwards to the very left it says 7C. The sensor Shows 7C and cant be moved back to 0C.
This seems odd...
however i dont even unverstand yet why it starts with 7, i guess it's what Modbus says but i dont understand the idea behind it.
I see that there is no more development in this project. Has it been easily ended?
The boiler target temperature is wrong by factor 1000.
This needs to be fixed in the pysolarfocus lib.
Translate the following states:
As of Home Assistant Core 2022.11, options is available as a standard property of SelectEntityDescription.
This may cause issues in custom components if a custom options property was previously implemented.
Please adjust the custom component by either dropping or renaming the custom options property.
Up to now, this integration only supports 1 heating circuit, however, Solarfocus supports up to 8 circuits. The pysolarfocus library and this integration should be extended to support multiple heating circuits.
Currently:
we have a sensor "biomass boiler message number" that displays a plain number.
New Feature Proposal:
Would be great to have an additional sensor that displays the corresponding error message. Modbus doesn't provide this by default but it references the user manual of the biomass boiler.
Here is a list of the error message to each number for the ecotop light and ecotop zero.
1 Interner Speicher ist ungültig
3 Behältersensor möglicherweise verstaubt
5 Abgastemperatur zu gering
6 Abgasfühler unterbrochen
7 Abgasfühler falscher Messwert
9 Abgasfühler Kurzschluss
10 Werkseinstellungen wurden geladen
11 Fehler Drehzahlrückführung
12 Drehzahlrückführungs-Test
13 Drehzahlrückführung nicht OK
14 Maximale Saug-Laufzeit erreicht
16 Fehler Lambdasondenmessung
17 Fehler Kesselfühler
18 Kesseltemperatur ist zu hoch
19 Austragungsschnecke ist blockiert
20 Erster Zündversuch war erfolglos
23 Kommunikation zu Modul unterbrochen
24 Sicherheitskette hat ausgelöst
25 Stromausfall ist aufgetreten
26 Netzsicherung F3 defekt
27 Triacsicherung F6 defekt
30 Blockade Einschub
31 Wärmetauscher ist blockiert
32 Wärmetauscher ist blockiert
33 Kein Stromfluss Einschubmotor
35 CAN-Bus Unterbrechung
36 Sicherung am Frischwassermodul defekt
37 Sicherung am Elektronikmodul (Solarmodul) defekt
38 Inbetriebnahme-Einstellungen wurdengeladen
40 Zündstörung Pellets/ Pelletsmangel?
41 Sicherung F1 oder F8 defekt
42 Pelletsmangel im Lagerraum
43 Fehler Saugsonden-Umschalteinheit
44 Kommunikationsfehler Kaskade
46 Die Aschebox ist voll und muss entleert werden
47 Wartung des Heizkessels empfohlen!
50 Kesseltüre ist offen!
51 Batterie im Bedienteil (Display) ist leer
52 Begrenzungsthermostat ist offen
67 Raumluftklappe öffnet nicht
68 Raumluftklappe schließt nicht
69 Fehler bei der Kommunikation mit dem Raumluftmodul
71 Kein Stromfluss Wärmetauscher
72 Hinweis: Kein Stromfluss Wärmetauscher
73 Fehler Referenzschalter Umschalteinheit
75 Raumfühler Zuweisung
76 Sicherheitstemperaturbegrenzer ausgelöst
77 Sicherung F12 defekt
78 Blockade Ascheaustragung
79 Kein Stromfluss Ascheaustragung
80 Differenzdruck - Kesselstopp
81 Elektrostatischer Staubabscheider offline
82 Differenzdruck - Saugturbine
83 Differenzdruck - Einschub
84 Warnung elektrostatischer Staubabscheider
85 Hochspannungskabel Staubabscheider
86 Notbetrieb Differenzdrucksensor
87 Differenzdruck - Kessel Sofortstopp
By default it shows number 0, we could translate this as "Keine Nachrichten derzeit".
Hi,
I would like to create an automation that send a notification when the biomass bolier state changes.
Unfortunately, when I configure the notification message, I can have only the numeric status information, not the translation.
In the message I've used:
{{ states('sensor.solarfocus_biomass_boiler_status') }} but I can get only a number.
Could you help me to find a solution?
Thanks
Describe the bug
hassfest github workflow has some checks on dictionary keys
To Reproduce
see https://github.com/LavermanJJ/home-assistant-solarfocus/actions/runs/7600697204/job/20699227965?pr=92
Integration solarfocus - /github/workspace/custom_components/solarfocus:
Error: R] [TRANSLATIONS] Invalid strings.json: Invalid translation key '-1', need to be [a-z0-9-_]+ and cannot start or end with a hyphen or underscore. for dictionary value @ data['entity']['sensor']['bo_circulation']['state']. Got {'-1': 'Locked', '0': 'Off', '1': 'On'}
Invalid translation key '-1', need to be [a-z0-9-_]+ and cannot start or end with a hyphen or underscore. for dictionary value @ data['entity']['sensor']['bo_single_charge']['state']. Got {'-1': 'Locked', '0': 'Off', '1': 'On'}
Error: R] [TRANSLATIONS] Invalid translations/en.json: Invalid translation key '-1', need to be [a-z0-9-_]+ and cannot start or end with a hyphen or underscore. for dictionary value @ data['entity']['sensor']['bo_circulation']['state']. Got {'-1': 'Locked', '0': 'Off', '1': 'On'}
Invalid translation key '-1', need to be [a-z0-9-_]+ and cannot start or end with a hyphen or underscore. for dictionary value @ data['entity']['sensor']['bo_single_charge']['state']. Got {'-1': 'Locked', '0': 'Off', '1': 'On'}
Error: Process completed with exit code 1.
Expected behavior
CI should give green ligth to merge.
Any way to exclude this files from the checks?
Hello,
I'm using your great HA integration with a PelletTop 15kW biomass boiler and it is working!
I can see all expected sensor values:
To Reproduce
But I have an issue in the log file.
The home assistant log file (/config/home-assistant.log) is showing the following error every 30 seconds:
2024-01-02 16:03:32.383 ERROR (SyncWorker_5) [root] Modbus read error at address=33412: Exception Response(131, 3, IllegalAddress)
2024-01-02 16:03:32.383 ERROR (SyncWorker_5) [root] Failed to read holding registers of BiomassBoiler
I assume that the address 33412 is not implemented for this PelletTop or maybe only for my configuration.
Can you provide a patch that will skip the reading of this address. I have tried to find it myself but failed -:(
Desktop (please complete the following information):
Additional context
This is how my configuration looks like
Thank you for your support!
Describe the bug
after selecting EcoTop boiler an unknown error occurs and config flow stops.
Logs show
TypeError: 'NoneType' object is not subscriptable
To Reproduce
Select EcoTop
Expected behavior
Error should be handled
Desktop (please complete the following information):
Log errors:
2023-09-17 08:01:41.330 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 31, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 148, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 63, in with_admin
return await func(self, request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 177, in post
return await super().post(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
result = await self._flow_mgr.async_configure(flow_id, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 298, in async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 394, in _async_handle_step
result: FlowResult = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarfocus/config_flow.py", line 216, in async_step_user
return await self.async_step_component()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarfocus/config_flow.py", line 255, in async_step_component
CONF_BOILER: user_input[CONF_BOILER],
TypeError: 'NoneType' object is not subscriptable
Hallo,
kannst du bitte noch die Solarsensoren rein machen?
Adresse 2100-2113 in der Modbus TCP - Registerdaten pdf.
Grüße Sascha
As a first iteration, the holding registers shall be provided as Sensors, in addition to Services to manipulate the values.
I upgraded to V2.2.2 yesterday. But in this version, the measured values are no longer updated. If I switch back to V2.2.0 they will be updated again. Do I have to slightly delete and reinstall the integration to get it working. Do I lose the recordings in Grafana.
Solar State is just n Number.
For Example State 209. Should be "Kollektortemperatur zu gering"
(Therminator)
Seit 2 Jahren eier ich mit einer riesen YAML Config rum um mir über Modbus alle Werte zu ziehen und die dann furchtbar umständlich in verständliche Meldungen zu transformieren. Und nachdem ich nun wieder etliche Stunden damit verbracht habe zu versuchen über Modbus hinzubekommen die Heizkreise anzusteuern finde ich das hier.
--Weltklasse. Ich nutze übrigens eine Octoplus und das funktioniert hiermit auch :-)
Vielen Vielen Dank!
Hi,
i've watch the new version and it seems to be stable. all readings (i need so far) are ok.
But:
during setup i set an interval of 60 seconds (1minute-interval), to reduce the pull-requests.
On the kessel, i see multiple requets in 30secs with 8-readings each time (at least 2 requests with 30sec gap). So within a hour i got mor than 2000 readings counted.
Today my integration / modbus tcp on therminator stopped working again with a count of over 8mio reads since last restart.
is there an issue with the timeout from settings being ignored?
can we reduce the readings-count by calling the values in one block or something like this?
Greetings!
Possible to integrate support of Solarfocus Software V22.100?
And define heating circuit supply temp. in relation to outside temperature, i.e. heating curve?
Had a previous installation but the upgrade to v3.0.0-beta2 failed.
So I tried a fresh installation of v3.0.0-beta2 but that is only working if I choose "heatpump vampair".
If I try to use the option "Biomass boiler therminator II touch" I get the error: "Unexpected error"
(yes, I tried the correct IP and not just the hostname)
Sensor "Biomass boiler cleaning" incorrectly shows value of "-1%"
It should show something in between 0% – 100% (bei spätestens 100% ist Kesselreinigung empfohlen) according to the Modbus Manual.
Similar to the "biomas boiler ash container".
Describe the bug
I've got a New eco Manager Software Update during last checkup. 23.050
So i checked my hacs and Updated the integration, too.
I select API Version 23.030
I had to change some entities in my homeassistant cuz of New naming...
And during check i See the Biomass boiler status is now numeric again. IT was text last time i checked (i think)
Expected behavior
Show Text instead of numeric values for this entity
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Thx for help and keeping this nice Integration alive.
I noticed that the home assistant integration is missing the x35 temperature in buffers.
It is provided by pysolarfocus so adding it seems easy (and works like a charm).
So I am wondering whether this is just an oversight or by design?
Maybe because it might not be that easy to determine whether x35 is available when initializing the sensor entries?
I noticed that all other biomass-boilers (Kessel) except therminator need different enumeration to how the status line.
Modbus TCP Address 2401 numbers 0-59.
Currently this value for "biomass boiler status line" is only working if you have a "therminator".
Possible solution:
Is it enough to add the numbers 0-59 to the existing numbers (200-344), because then i can add this and create a pull request...
or...an idea is when you choose at the setup between "therminator" and "all other biomass boilers" you could distinguish between the two different enumerations? but that's maybe not necessary...
Describe the bug
Integration fails to load after upgrading to 2024.01
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Additional context
TODO Investigate ...
Is there a way to adjust the temperatures of the buffer tank.
Just like the temperature of the boiler with a slider. So that I can increase the temperature below when the electricity price is cheapest for 3 hours, or PV overproduction, in order to get the excess energy into the heating system.
I have a setting under PV.
It would be great if I could set the value with a automation.
Translate the following states:
home-assistant-solarfocus/custom_components/solarfocus/translations/en.json
Lines 105 to 193 in f9d9869
CONF_FRESH_WATER_MODULE
not imported in __init__.py
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 629, in async_migrate
result = await component.async_migrate_entry(hass, self)
File "/config/custom_components/solarfocus/__init__.py", line 145, in async_migrate_entry
new_options[CONF_FRESH_WATER_MODULE] = 0
NameError: name 'CONF_FRESH_WATER_MODULE' is not defined
As long as I don't have a good idea who to bring the inverted door contact into the main branch - a pull request does not make sense
Usually, HA integrates domestic hot water systems (such as boilers) as WaterHeater entities.
As a new contributor is not easy to develop and test changed to the source. Hence some best practices would be great to support new developers. (I'll just sort my thoughts and I'm open for further recommendations)
e.g.
my recommendation is not to used the main branch of the forked repositore for pull requests. This main branch can be used to register the hacs integration in the own home assistant and use the update mechanism of hacs
maybe a dev container for the HA would also be maybe an option
Where could such documentation go?
docs/CONTRIBUTE.md?
if api_version.greater_or_equal(ApiVersions.V_22_090.value):
self.external_top_temperature_x44 = DataValue(address=0,multiplier=10,register_type=RegisterTypes.Holding)
self.external_middle_temperature_x36 = DataValue(address=1,multiplier=10,register_type=RegisterTypes.Holding)
self.external_bottom_temperature_x35 = DataValue(address=2,multiplier=10,register_type=RegisterTypes.Holding)
Sensor "biomass boiler outdoor temperature" shows wrong value. Constant same temperature during the whole day, 10,3 C not changing.
On the ecotouch display it shows e.g. 8 C changing during the day.
Note: I do not have a room thermostat, just a Solarfocus outdoor temperature sensor that feeds data back to the biomass boiler for the heating curve. (Heizkurve).
Hello, have a pellet Top 25. can you integrate this boiler type? A few points I can use right now. For example, the buffer temps. As for the boiler directly, does not work as expected.
Greetings from the Black Forest
Unfortunately, I still get an error when I want to query the COP value.
Here is the entry in Yaml
But the code works under template
What am I doing wrong
Originally posted by @Vaszago in #15 (comment)
To avoid removing and re-adding the component for changing parameters (e.g. SCAN_INTERVAL
), the option flow should be supported.
Add sensors and a button for the following entities:
https://github.com/LavermanJJ/pysolarfocus/blob/7f40d0df8b71c5666b8526cbbb9c239a045ad06b/pysolarfocus/components/pellets_boiler.py#L25-L34
if api_version.greater_or_equal(ApiVersions.V_22_090.value):
self.sweep_function_start_stop = DataValue(address=10,register_type=RegisterTypes.Holding)
self.sweep_function_extend = DataValue(address=11,register_type=RegisterTypes.Holding)
if api_version.greater_or_equal(ApiVersions.V_23_010.value):
self.pellet_usage_last_fill = DataValue(address=14,count=2,multiplier=0.1)
self.pellet_usage_total = DataValue(address=16,count=2,multiplier=0.1)
self.heat_energy_total = DataValue(address=18,count=2,multiplier=0.1)
self.pellet_usage_reset = DataValue(address=12,register_type=RegisterTypes.Holding)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.