karloygard / xcomfortd-go

Eaton xComfort CKOZ-00/14 and CCIA-0x/01 to MQTT gateway
BSD 3-Clause "New" or "Revised" License
45 stars 4 forks source link

CHAP-01/F5-12E pluggable heating actuator not switching #25

Closed oyvindth closed 3 years ago

oyvindth commented 3 years ago

I have just bought a CHAP-01/F5-12E puggable heating actuator. When added to HA, it shows up as a heating actuator, and if controlled by MRF, the status updates in HA, but no ems shows. If trying to controll from HA, nothing happens with the actuator have tried bout lovelace and MQTT.publish. Is this because it is not Supported? or is it another snag. All other connected devises works fine.

karloygard commented 3 years ago

That device is barely supported by the code. I don't have a heating actuator myself, so it's not completely trivial to fix that.

oyvindth commented 3 years ago

By your name, I guess you are located in Norway, if it would help, I am more than willing to lend you the devise if it would help with integrating heating actuators. As I understand the unit, it requires actual temp, and desired temp to work. If you find a way to send those messages to the unit, maby an automation could handle the cyclic sending of the data?

karloygard commented 3 years ago

That would likely speed up development substantially. I live in Oslo, but as most Norwegians, I'm on vacation at the moment. We can touch base in the beginning of August and take it from there?

oyvindth commented 3 years ago

Sounds like a great plan. I drive through Oslo on a regular basis, or i could send it to you by Mail. Enjoy the rest of fellesferien.

oyvindth commented 3 years ago

Hi again. I am back from vacation. Easiest for me would be to send you the device pr mail, but I understand if you are not to keen on posting personal data here. Any chance I could PM you on Facebook Messenger.

karloygard commented 3 years ago

👍🏻 Find me there, full name Karl Anders Øygard.

karloygard commented 3 years ago

0.40 has temporary and broken support for heating actuators. The main issue is that MQTT Discovery climate devices don't natively support setting current temperature. Only getting current temperature, which doesn't fit the xComfort heating devices.

As a workaround, number.current_temperature is exposed as a separate entity on the actuator. See if this can be used for anything, or suggest alternative approaches.

Note that current support is only partial, so the device will go into error mode after one hour.

oyvindth commented 3 years ago

To clarify. Is it possible to send current temp to The aktuator by setting number.current_temperature and have an automation update this on a regular basis? Will mqtt send this update to the actuator?

karloygard commented 3 years ago

Yes, any change will be sent to the actuator, that's been verified to work.

oyvindth commented 3 years ago

Have been playing around a little with this tonigh, and have a few issues. Some of them are probably due to my incomtetance.

Issue 1: First of all, I am not able to change/send the number.current_temperature to the actuator. Do I need to send it to a spesific MQTT topic? (xcomfort/8/set/?????) input numbers I can do, but are unfamiliar with the use of two-way MQTT numbers. My initial plan was to use an automation to set the current temp every time the RCT sent an update, this way the Heating actuator would not go into error mode. However I am not able to set the number using automations. Most likely due to my lack of skill.

Issue 2. If adding the climate.varmeaktuator_varmeinngang to a climate card, I am able to change the temperature, and values are sent to the actuators, but according to Traffic monitor in MRF, the values are way off. When setting the temp to 20Deg in Homeassistant MRF shows a temperatire of -1433,6C beeing sent to the actuator.

karloygard commented 3 years ago

Issue 1, I haven't had time to fiddle with it, but I would expect you to be able to directly modify number.current_temperature, according to https://www.home-assistant.io/integrations/number.mqtt/. You should not have to deal with MQTT.

Regarding issue 2, this is probably an endianness issue. Fixing ASAP.

karloygard commented 3 years ago

Issue 2 resolved in 0.40.1

oyvindth commented 3 years ago

The MRF log now shows the correct temperature beeing sent to the actuator :-) Great

I am stil not able to sent the current_temperature to the actuator however. The number.current_temperature entity is not showing anymore after the last update, might be a problem on my end thoug. I havent tried to rebuild the xcomfort addon yet. and I am not able to figure out what MQTT topic to send the current temperature to. My plan was to create an automation that simply forwards the RCT temp with a MQTT publich command to the actuator, but I am not sure to what topic to send the temperature to.

Also.

When sending a desired temperature to the actuator, I can see the MQTT transmission, but the confirmation from the actuator is only showed in MRF. Not showing up in MQTT for some reason. Don't know if it is relevant.

karloygard commented 3 years ago

I am stil not able to sent the current_temperature to the actuator however.

I'll fiddle with it a little myself and see if I get any further.

The number.current_temperature entity is not showing anymore after the last update, might be a problem on my end thoug. I havent tried to rebuild the xcomfort addon yet. and I am not able to figure out what MQTT topic to send the current temperature to. My plan was to create an automation that simply forwards the RCT temp with a MQTT publich command to the actuator, but I am not sure to what topic to send the temperature to.

The MQTT topic for current temperature is xcomfort/{dp}/set/current, for example xcomfort/50/set/current.

When sending a desired temperature to the actuator, I can see the MQTT transmission, but the confirmation from the actuator is only showed in MRF. Not showing up in MQTT for some reason. Don't know if it is relevant.

Currently, no confirmation is sent via MQTT, so this is correct.

karloygard commented 3 years ago

The following automation does the trick:

- alias: Copy temperature every minute                                                                                                                                                                
  trigger:                                                                                                                                                                                            
  - platform: time_pattern                                                                                                                                                                            
    minutes: "/1"                                                                                                                                                                                     
  action:                                                                                                                                                                                             
  - service: number.set_value                                                                                                                                                                         
    target:                                                                                                                                                                                           
      entity_id: number.current_temperature                                                                                                                                                           
    data_template:                                                                                                                                                                                    
      value: "{{ states('sensor.romkontroller') }}"                                                                                                                                                   

Runs every minute, which is maybe a little aggressive.

Jan-Arild-Blekken commented 3 years ago

I have watched the latest updates and read the code updates. It seems like it should also work with the Multi Channel Heating Actuator (CHAZ-01/12). Is this correct?

@oyvindth do you mind sharing your automation code and the thermostat setup in lovelace? It seems that we share the same problem.

oyvindth commented 3 years ago

This is working great. Actuator switching as expected. And indications in Lovelace shows that the heating is on. This is looking Great

@Jan-Arild-Blekken I am still during the tryout phase. Karloygard have only been working on this for 2 days, and I am currently just sending messages to the actuator using direct MQTT commands. Setting the temperature with the basic temperature/Climate card works good though.

oyvindth commented 3 years ago

Have uppdatet the automation to be somewhat less agressive. Now it only fires when the temperature changes, or every 30 min to avoid actuator going into safety mode.

- id: '1630180139158'
  alias: Test Current Temp
  description: Oppdaterer current Temp ved oppdatering fra rtc eller hver 30 min
  trigger:
  - platform: state
    entity_id: sensor.test_home_temperatur
  - platform: time_pattern
    minutes: '30'
  condition: []
  action:
  - service: number.set_value
    target:
      entity_id: number.varmeaktuator_varmeinngang_current
    data_template:
      value: '{{ states(''sensor.test_home_temperatur'') }}'
  mode: single`

@karloygard Seems like the energy channel is a cumulativ usage number for the actuator. Would be fantastic to be able to access the average effect portion of the status message as this gives current load on the actuator.

Jan-Arild-Blekken commented 3 years ago

I agree that every 30 min is better. I have waterborne heating at it takes some time before the temperature changes in the room.

When everything is working as it should perhaps a blueprint would makes things easier?

oyvindth commented 3 years ago

Any idea on how to set the current_temp in the climate entity? it only showes as null, I found a PY script that might do the job, and update the atribute, but it would be fantastic to just have it read the figure that is sent to the actuator. Do you think that is a possibility?

karloygard commented 3 years ago

I have watched the latest updates and read the code updates. It seems like it should also work with the Multi Channel Heating Actuator (CHAZ-01/12). Is this correct?

Yes, this is close to something that should work for CHAZ-01/12. It has some extra features that isn't supported by this code, but that shouldn't be critical. Feel free to test it and report back!

karloygard commented 3 years ago

Any idea on how to set the current_temp in the climate entity? it only showes as null, I found a PY script that might do the job, and update the atribute, but it would be fantastic to just have it read the figure that is sent to the actuator. Do you think that is a possibility?

Might be possible. Out of curiosity, can you link the script that you found?

oyvindth commented 3 years ago

Here is the script. Haven’t tried it, so don’t know if it works, but according to description it should https://github.com/xannor/hass_py_set_state

here is the raw code.

https://github.com/rodpayne/home-assistant/blob/main/.homeassistant/python_scripts/set_state.py

karloygard commented 3 years ago

0.40.4 now updates the current temperature in the climate entity. This is mostly for show, the value will always be whatever number.varmeaktuator_varmeinngang_current (in this particular case) is set to.

oyvindth commented 3 years ago

I have the actuator running for a few days now and it is working nicely. I still have a few features that would be fantastic if could be implemented though.

Energy/Power: The energy datapoint is a cumulative figure, adding up the amount of KWH the connected heat-source have consumed since the actuator was first initiated. In the extended status message recieved from the actuator however there is a power (sometimes reported as average power if the actuator is modulating (duty cycle less than 100%)) figure in W. This is the current Electrical usage in W. Would be great if this figure could be displayed as a separate entity.

karloygard commented 3 years ago

I added power as a separate entity of the "new generation" actuators in 0.41.4. At startup time I don't know whether the actuator actually reports power, so all NG actuators will get a power entity, but for devices that don't ever report power, the value will always remain unknown.

Jan-Arild-Blekken commented 3 years ago

I have tested the Multi Channel Heating Actuator (CHAZ-01/12) now. Just tried channel 5 and it is working.

oyvindth commented 3 years ago

This is getting better and better.

Would it be possible to add: state_class: "meassurement" to the power entity state_class: "total_increasing" to the energy entity

I think this would allow us to use it with the buildt inn energy integration.

https://developers.home-assistant.io/docs/core/entity/sensor#long-term-statistics

karloygard commented 3 years ago

Added the above in 0.42. No idea if it works, though, I don't have the energy integration set up yet.

oyvindth commented 3 years ago

image Working great.

Following automations at work: 1: Makes sure the heating actuator do not go into safemode (No Floorsensor)

- id: '1630180139158'
  alias: Temperaturkontroll Gjesterom
  description: Oppdaterer number.varmeaktuator_gjesterom_current hver gang RTC sender,
    eller hvert 30Min
  trigger:
  - platform: state
    entity_id: sensor.gjesterom_temperatur
  - platform: time_pattern
    minutes: /30
  condition: []
  action:
  - service: number.set_value
    target:
      entity_id: number.varmeaktuator_gjesterom_current
    data_template:
      value: '{{ states(''sensor.gjesterom_temperatur'') }}'
  - service: mqtt.publish
    data:
      topic: xcomfort/8/set/temperature
      payload: '{{ state_attr(''climate.varmeaktuator_gjesterom'', ''temperature'')
        }}'
  mode: single

Automation 2 Makes sure the actuator do not go into safemode, and turns off heat if floorsensor senses to high temperature.

- id: '16309140548041'
  alias: Temperaturkontroll Vindfang
  description: Oppdaterer number.varme_vindfang_varmeinngang_current hver gang RTC
    sender, eller hvert 30Min
  trigger:
  - platform: state
    entity_id:
    - sensor.termostat_vinnfang_temperatur
    - sensor.termostat_vinnfang_ekstern_sensor_pt1000
    - input_number.max_gulv_vindfang
  - platform: time_pattern
    minutes: /30
  condition: []
  action:
  - service_template: "{% if states('sensor.termostat_vinnfang_ekstern_sensor_pt1000')\
      \ > states('input_number.max_gulv_vindfang') %}\n  script.vindfang_floor_high\n\
      {% else %}\n  script.vindfang_floor_normal\n{% endif %}\n"
  mode: single
  1. Scripst
    vindfang_floor_high:
    sequence:
    - service: mqtt.publish
    data:
      topic: xcomfort/21/set/temperature
      payload: '5'
    - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.gulvvarme_vindfang
    mode: single
    alias: Vindfang Floor High
    vindfang_floor_normal:
    sequence:
    - service: number.set_value
    target:
      entity_id: number.varme_vindfang_varmeinngang_current
    data_template:
      value: '{{ states(''sensor.termostat_vinnfang_temperatur'') }}'
    - service: mqtt.publish
    data:
      topic: xcomfort/21/set/temperature
      payload: "{{ state_attr('climate.varme_vindfang_varmeinngang', 'temperature') }}"
    - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.gulvvarme_vindfang
    mode: single
    alias: Vindfang Floor Normal

    `