How to parse bitfield from Modbus register

Dunno. The Enervent modbus integration has been working most reliably for me, so I don’t feel like I need to take any extra measures to ensure a stable connection. I only used the Developer Tools reload functionality to apply changes I had made to the configuration files.

My connection goes down daily :confused: I added automation to just restart modbus @6am. Some sort of solution …

@stniemin Do you have these in your setup :

2023-02-08 17:08:46.932 WARNING (MainThread) [homeassistant.components.sensor] Sensor sensor.enervent_supply_air_fan_speed has device class None, state class None and unit % thus indicating it has a numeric value; however, it has the non-numeric value: unavailable (<class 'str'>); Please update your configuration if your entity is manually configured, otherwise create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+modbus%22
2023-02-08 17:08:46.941 WARNING (MainThread) [homeassistant.components.sensor] Sensor sensor.enervent_extract_air_fan_speed has device class None, state class None and unit % thus indicating it has a numeric value; however, it has the non-numeric value: unavailable (<class 'str'>); Please update your configuration if your entity is manually configured, otherwise create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+modbus%22
2023-02-08 17:08:46.945 WARNING (MainThread) [homeassistant.components.sensor] Sensor sensor.enervent_outside_air_temperature has device class temperature, state class None and unit °C thus indicating it has a numeric value; however, it has the non-numeric value: unavailable (<class 'str'>); Please update your configuration if your entity is manually configured, otherwise create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+modbus%22

No, I don’t. But then, my Enervent ventilator’s availability seems to be 100%.
Are your Enervent ventilator and HA server both plugged in on ethernet? Could network issues explain the occasional connection failures?

I haven’t defined those device_class state_class attributes to fan sensors either. Perhaps it would be a good practice to add them. :thinking:

Apparently the time had come to service the ventilator’s filters for the first time. I hadn’t noticed this before as the control panel is not in a place where it could be seen. The modbus fields had the alert info, but I hadn’t used them for anything yet.
So, it was time to create this markdown card - to keep myself informed of such alerts in the future:

type: markdown
content: |
  {% if is_state('sensor.enervent_alarm_1_state', '1') %}
    <ha-alert alert-type="info">
      There is an alert that is acknowledged, but hasn't been cleared.
      [{{states('sensor.enervent_alarm_1_year') }}.{{states('sensor.enervent_alarm_1_month') }}.{{states('sensor.enervent_alarm_1_year') | int + 2000 }} {{states('sensor.enervent_alarm_1_hour') }}.{{states('sensor.enervent_alarm_1_minute') }}]
    </ha-alert>
  {% endif %}
  {% if is_state('sensor.enervent_alarm_1_state', '2') %}
    <ha-alert alert-type="warning">
      There is a new alert, waiting to be acknowledged<br/>
      date: {{states('sensor.enervent_alarm_1_year') }}.{{states('sensor.enervent_alarm_1_month') }}.{{states('sensor.enervent_alarm_1_year') | int + 2000 }} {{states('sensor.enervent_alarm_1_hour') }}.{{states('sensor.enervent_alarm_1_minute') }}
      
      {% if is_state('sensor.enervent_alarm_1_type', '1') %}Alert type: TE05_L{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '2') %}Alert type: TE10_L{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '3') %}Alert type: TE10_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '4') %}Alert type: TE20_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '5') %}Alert type: TE30_L{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '6') %}Alert type: TE30_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '7') %}Alert type: HP/MDX{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '8') %}Alert type: SLP{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '9') %}Alert type: TE45_L{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '10') %}Alert type: LTO{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '11') %}Alert type: COOL{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '12') %}Alert type: EMERGENCY_STOP{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '14') %}Alert type: SERVICE{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '15') %}Alert type: PDS10{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '16') %}Alert type: SPLY_FILT_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '17') %}Alert type: EXT_FILT_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '20') %}Alert type: TF_PRES{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '21') %}Alert type: PF_PRES{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '22') %}Alert type: TE50_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '24') %}Alert type: TE52_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '25') %}Alert type: TF_ROTATION{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '26') %}Alert type: PF_ROTATION{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '27') %}Alert type: TE02_H{% endif %}
      {% if is_state('sensor.enervent_alarm_1_type', '28') %}Alert type: SERVICE_CONSTANT_DUCT_PRES{% endif %}
    </ha-alert>
  {% endif %}

It took a while to write the ifs and alarm specific notes. Hope this will save the time for someone else!

3 Likes

Come to think of it, I might as well create an automation to send a mobile notification when the alarm_1 state changes.

Hm, they changed something in modbus integration, mine does not work at all anymore :confused:

There’s one breaking change announced for Modbus with the latest release, but that shouldn’t affect things yet.

Mine is still working.
Are you getting some modbus specific errors?

No errors at all. If i try to change temp or such, there is no error, and it just reverts back after a while …

Anyone know if this works with ewind controller too? do i need to buy a modbus rs485 to wifi converter first or could i use the ip adress from ewind?

Ok, now im confused, there was an update to the core, now everything works again and even better, it seems to stay online :slight_smile:

@tornil, check if ewind controller has same modbus registers. It might work.

https://doc.enervent.com/out/out.ViewFolder.php?folderid=16&showtree=1

Im in same situation with my new district heating system. I need also some sort of converter in between…

If i figured it correctly, i could just make a cable from rs485 to rj45, and leave converting to computer. Not sure if homeassistant can do that tho …

According to this Enervent page, the eWind doesn’t have support for Modbus over TCP/IP. If you have the eWind WiFi adapter, it probably still doesn’t expose a modbus interface over TCP/IP.

But it doesn’t cost anything to try that, so if you have the time, you could give it a go and see if anything interesting appears in the logs.

@stniemin Since you have figured out the Enervent functions to HA and put together a nice UI card for it, would it be possible to get a link to the sources of the both?

It’s really the OP who did the biggest effort here: finding the modbus registers and set-up. I just copy-pasted his approach (and YAML) and modified it to match my setup.

The UI cards are just standard HA cards arranged with grid and vertical stack. Nothing special there.

I would start by copy-pasting kbvamme’s configuration and modifying it to match your environment (host IP, sensor names).
If you get stuck somewhere, share your issue here and I can try to help.

Ok, so i have the option to go for an Enervent LTR-5z or an Östberg Heru 160S.

Reading this thread it seems that the Enervent is lacking a supported integration, but based on the comments here, it seems to be working well withs ops parsing code.

On the other hand the Heru from Östberg has a supported integration.

I get them both at a really good price, but the Heru is just below a 1000$ extra.

What would you go for in my position? Is there anything i would be lacking when going for the Enervent?

The seller (a friend) is talking up the Enervent machine, says it is the better choice, and at a lower price. He is not a home assistant nerd tough, so he does not understand my sofies choice moment :rofl:

Any input would be really great :slight_smile: