tadasdanielius / daikin_altherma

Daikin Altherma custom component for home assistant
MIT License
71 stars 5 forks source link

Hot Water Tank only binary state sensor is created #42

Open thecobra666 opened 1 year ago

thecobra666 commented 1 year ago

Unless I'm missing something (for which I apologies in advance) for the "hot water tank" only the binary state sensor is created. Nothing more.

In space heating I do see all the sensors but one is wrong: "Temperature Control" is at -2°C. From what I can remember, that is an offset that was set on the flow circuit (or something like that, not in front of the thermostat at the moment eg first option is room temp, second tank temp, 3rd is this fine tuning option.

Indoor unit is: EHVX08S26CB9W connected to the Daikin Lan Adapter BRP069A61.

thecobra666 commented 1 year ago

Okay, the hot water sensor now showed up fine after a HA restart. I do still see the wrong temperature control (which I figure should be the set requested temp for the room?

tadasdanielius commented 1 year ago

I don't know much about thermostats as I do not have one, but I will try to explain what is happening here to my understanding.

Long story short, Daikin has two modes of operation "fixed temperature" and "reference temperature". If you configure your device to use fixed then you can set to some fixed value and the device will heat the underfloor water to the temperature you want. If you configure you device to use "reference temperature" then your device will calculate leaving water temperature based on the weather outside and adjustments you set with "temperature control". So, what you see here is the reference temperature. The actual temperature of the leaving water is calculated based on the weather outside taking into account the "temperature control" value. Basically if the weather outside is getting very cold it will set leaving water temperature to higher value + "Temperature Control" value. If you want few degrees up you can set to something like +1, +2, etc., or if you want a bit cooler, then you can set to negative values.

Like I said, I do not own thermostat thus, I don't know much about it how it works with that additional measurements of room temperature.

In my case I control "leaving water temperature" which is what goes out of the unit to the underfloor pipes. With home assistant and DIY actuator head controller I can easily make "virtual thermostats" for every room.

thecobra666 commented 1 year ago

I don't know much about thermostats as I do not have one, but I will try to explain what is happening here to my understanding.

Long story short, Daikin has two modes of operation "fixed temperature" and "reference temperature". If you configure your device to use fixed then you can set to some fixed value and the device will heat the underfloor water to the temperature you want. If you configure you device to use "reference temperature" then your device will calculate leaving water temperature based on the weather outside and adjustments you set with "temperature control". So, what you see here is the reference temperature. The actual temperature of the leaving water is calculated based on the weather outside taking into account the "temperature control" value. Basically if the weather outside is getting very cold it will set leaving water temperature to higher value + "Temperature Control" value. If you want few degrees up you can set to something like +1, +2, etc., or if you want a bit cooler, then you can set to negative values.

Like I said, I do not own thermostat thus, I don't know much about it how it works with that additional measurements of room temperature.

In my case I control "leaving water temperature" which is what goes out of the unit to the underfloor pipes. With home assistant and DIY actuator head controller I can easily make "virtual thermostats" for every room.

You are correct that I am using the weather to control the flow temp. Temp control is my AWT primary offset. I can however still read out the set temp of 21 degrees C in the daikin app. So it must be available somewhere to the lan adapter.

Is there something I can provide you with to get it to show the set temp?

tadasdanielius commented 1 year ago

Technically (even without having thermostat) I can see "Indoor Temperature" but it is always set to 20C. Can you change indoor temperature in Daikin's ONECTA App

tadasdanielius commented 1 year ago

If you up for some experimentation we can try to find out if it is possible to set room temperature. So, what we need todo is to get your device profile information. First, you need to update to beta release and after HA restart you should see extra few files which starts with daikin_altherma in your /config folder: daikin_altherma_0.json, daikin_altherma_1.json, etc.

In HACS you should tick "show beta versions" like this

image

Then, share the content of all those daikin_altherma_*.json files.

thecobra666 commented 1 year ago

If you up for some experimentation we can try to find out if it is possible to set room temperature. So, what we need todo is to get your device profile information. First, you need to update to beta release and after HA restart you should see extra few files which starts with daikin_altherma in your /config folder: daikin_altherma_0.json, daikin_altherma_1.json, etc.

In HACS you should tick "show beta versions" like this image

Then, share the content of all those daikin_altherma_*.json files.

hi, I don't use hacs. Where can I download the beta file directly?

tadasdanielius commented 1 year ago

It is now merged to the main branch so just copy files from the main branch

thecobra666 commented 1 year ago

Hi, I do not see these files. I downloaded the latest version 1.3.6. It does show one error in the logs but the integration is working.

__Logger: pyhap.characteristic Source: components/homekit/type_thermostats.py:722 First occurred: 08:57:31 (1 occurrences) Last logged: 08:57:31

TargetHeatingCoolingState: value=0 is an invalid value. (nvm error message, is not related I see now. It's homekit.

In my /config directory no extra files have been created.

tadasdanielius commented 1 year ago

You need to uncomment lines in the integration source code as described here

thecobra666 commented 1 year ago

{"SyncStatus": "update", "UnitStatus": ["ErrorState"], "DateTime": {"DateTimeAdjustable": false}}

{"SyncStatus": "update", "Sensor": ["IndoorTemperature", "OutdoorTemperature", "LeavingWaterTemperatureCurrent"], "UnitStatus": ["ErrorState", "InstallerState", "WarningState", "EmergencyState", "TargetTemperatureOverruledState"], "Operation": {"Power": ["on", "standby"], "OperationMode": ["heating"], "TargetTemperature": {"heating": {"maxValue": 30.0, "minValue": 12.0, "stepValue": 0.5}}, "RoomTemperatureHeating": {"maxValue": 30.0, "minValue": 12.0, "stepValue": 0.5, "settable": true}, "LeavingWaterTemperatureOffsetHeating": {"maxValue": 10, "minValue": -10, "stepValue": 1, "settable": true}}, "Schedule": {"Base": "action", "defaultScheduleAvailable": "true", "NameAdjustable": "false", "List": {"heating": [{"StartTime": {"stepValue": 10.0, "unit": "minutes"}, "TargetTemperature": {"heating": {"maxValue": 30.0, "minValue": 12.0, "stepValue": 1}}, "Actions": ["StartTime", "TargetTemperature"], "maxActionsAllowed": 6}, ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], []]}}}

{"SyncStatus": "update", "Sensor": ["TankTemperature"], "UnitStatus": ["ErrorState", "InstallerState", "WeatherDependentState", "WarningState", "EmergencyState"], "Operation": {"Power": ["on", "standby"], "OperationMode": ["heating"], "TargetTemperature": {"heating": {"maxValue": 60.0, "minValue": 30.0, "stepValue": 0.5}}, "DomesticHotWaterTemperatureHeating": {"maxValue": 60.0, "minValue": 30.0, "stepValue": 1.0, "settable": true}, "powerful": ["0", "1"]}, "Schedule": {}}

tadasdanielius commented 1 year ago

Looks like it should be possible. I will look at that at some point.

okortepu commented 1 year ago

I'm also interested in the option to change the target temperature (or set point) of room temperature.

I have Altherma 3 GEO (EGSAX10D9W) and I also bought the room thermostat Madoka. In the Onecta app I can change the target temperature setting for the room.

This integration seems to work generally just fine but there is no option for the set point for room temperature.

The way Daikin Madoka room thermostat is supposed to work is following: In the background, there is still 2 point outside temperature dependent line that calculates the leaving water temperature. For me the points are -37 C outside temperature equals +60 C leaving water temperature and +17 C outside temperature equals +25 C leaving water temperature, these can be changed in the Daikin unit based on need. The room thermostat is allowed to modulate the leaving water temperature between 0 and a set point that can be chosen between 1 and 10 with increments of 1. I use the maximum value 10 so it can change the leaving water temperature between -10 to 10 from the outside weather calculated value. I would love to know what kind of PID controller or calculations Daikin is using for this modulation because it is not working too well but that is another issue... Daikin installer reference manual describes it like this: image To my understanding, the unit lowers or highers the whole outside temperature dependent line based on the Madoka measured inside temperature and set point for inside temperature.

Eventually, what I would like to do with the room temperature set point, is to change it based on Nord Pool spot price. I already have the Nord Pool spot prices in Home Assistant. I would like to divide the hours to three different categories (low, mid, high) based on price. Then I would like to have different temperature set point for low, mid and high hours. So for every starting hour, I would like to check if this hour belongs to low, mid or high priced hour and then give Daikin new temperature setting based on the hour price. Like +20 C for high priced hour, +21 C for mid priced hour and +22 C for low priced hour or what ever set points are good/feels comfortable. The idea is to heat the house as much as possible when electricity is low priced and avoid heating when electricity is high priced.

tadasdanielius commented 1 year ago

Let's move our discussion to #47 issue

tadasdanielius commented 1 year ago

I made some changes, would be great if you could test it. See #47

thecobra666 commented 1 year ago

Works great! I wonder if you can also get the status of the planning the tank is in (comfort or eco mode). I have it set in Reheat and scheduled. It was not before, so I will drop the info again below for you. The daikin app is able to read this out, so it's probably there.

{"SyncStatus": "update", "UnitStatus": ["ErrorState"], "DateTime": {"DateTimeAdjustable": false}} {"SyncStatus": "reboot", "Sensor": ["IndoorTemperature", "OutdoorTemperature", "LeavingWaterTemperatureCurrent"], "UnitStatus": ["ErrorState", "InstallerState", "WarningState", "EmergencyState", "TargetTemperatureOverruledState"], "Operation": {"Power": ["on", "standby"], "OperationMode": ["heating"], "TargetTemperature": {"heating": {"maxValue": 30.0, "minValue": 12.0, "stepValue": 0.5}}, "RoomTemperatureHeating": {"maxValue": 30.0, "minValue": 12.0, "stepValue": 0.5, "settable": true}, "LeavingWaterTemperatureOffsetHeating": {"maxValue": 10, "minValue": -10, "stepValue": 1, "settable": true}}, "Schedule": {"Base": "action", "defaultScheduleAvailable": "true", "NameAdjustable": "false", "List": {"heating": [{"StartTime": {"stepValue": 10.0, "unit": "minutes"}, "TargetTemperature": {"heating": {"maxValue": 30.0, "minValue": 12.0, "stepValue": 1}}, "Actions": ["StartTime", "TargetTemperature"], "maxActionsAllowed": 6}, ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], []]}}}

{"SyncStatus": "reboot", "Sensor": ["TankTemperature"], "UnitStatus": ["ErrorState", "InstallerState", "WeatherDependentState", "WarningState", "EmergencyState", "TargetTemperatureOverruledState"], "Operation": {"Power": ["on", "standby"], "OperationMode": ["heating"], "TargetTemperature": {"heating": {}}, "DomesticHotWaterTemperatureHeating": {"maxValue": 60.0, "minValue": 30.0, "stepValue": 1.0, "settable": false}, "powerful": ["0", "1"]}, "Schedule": {"Base": "action", "defaultScheduleAvailable": "false", "NameAdjustable": "false", "List": {"heating": [{"StartTime": {"stepValue": 10.0, "unit": "minute"}, "TargetTemperature": {"heating": {"maxValue": 60.0, "minValue": 30.0, "stepValue": 1.0}}, "Actions": ["StartTime", "TargetTemperature"], "maxActionsAllowed": 4}, ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"], []]}}}