Pluggit ventilation unit ( modbus )

I have a working Setup to gather communication data from the official app. It also communicates throught modbus with the ventilation unit, obviously. I document all my findings in the Wiki posted above.

I’ll keep my setup working for couple of days or weeks. Let me know if you want to use any specific feature from the app that you don’t get to work using Home Assistant and I can go and analyze the traffic for you guys.

If you want to do it yourselves: I use a packet capture app for Android and record the traffic from the app to later analyze it in Wireshark. Wireshark understands the Modbus protocol very well. You can see all registers and values that are used.

1 Like

Hi Gersilex, thanks for the wiki - I updated a few entities. :slight_smile:
Nice that there is also a german video - therfore I don’t have to create one from myself. :wink:

1 Like

Yoooooo Party People,
I did not delete any comments so far :smiley:

Thanks Gersilex for moving it to the wiki.
Thanks Senbei for updating it.
Maybe my grandchilds will find me one day there.

And to the whole “Integration“: modbus is a bitch.
I think the whole topic deserves a second video with more possible options to trigger and control the pluggit via Home Assistent.

Man I almost cried when I got it working :partying_face:

service: modbus.write_register
  data:
    address: 212
    hub: Pluggit
    value:
      - 0 for close / 255 for open
      - 0

for controlling the bypass manually

2 Likes

Start Away Mode: Write 0x0010 (16) to 168
End Away Mode: Write 0x8010 (32784) to 168
Start Fireplace Mode: Write 0x0040 (64) to 168
End Fireplace Mode: Write 0x8040 (32832) to 168
Start Summer Mode: Write 0x0800 (2048) to 168
End Summer Mode: Write 0x8800 (34816) to 168

2 Likes

Hey Andre,
Thank you very much for sharing the information :slight_smile:

Has anyone succeeded to manage the fan speed via a slider card, such as this one?

Apparently you’d need to create a fan entity via modbus, but I am not sure how that would work…

Hey everyone!

I’m quite new to HA and I’m trying to set up my Pluggit AP310. It generally worked thanks to @Senbei 's video (Thank you!).

But I have a question of understanding:
I also took a look at the Pluggit Modbus documentation (the one pimpalavista linked and Senbei showed in his video).
Why do you use some of the addresses given in the documentation, just without the leading 40 (like OutdoorTemp at 133), but others are off by 1 (like BypassState 198 vs. 40199)? What does it depend on?

I really hope, you can explain this to me :slight_smile:

Thanks in advance
Christian

Hi Christian,

In the pdf:

changed to https!

In page 51

The conversion, example, 40011 → 10

After I try to search:

Modbus is a data communications protocol originally published by Modicon (now Schneider Electric) in 1979 for use with its programmable logic controllers

  • Since Modbus was designed in the late 1970s to communicate to programmable logic controllers, the number of data types is limited to those understood by PLCs at the time. Large binary objects are not supported.

Its a modbus addressing.

Holding register Read-write 16 bits 40001 – 49999

it’s a read/write register group range.

use google: “modbus register mapping 40001”

https://www.simplymodbus.ca/FAQ.htm

like:
40001 → 0
40002 → 1
.
.
40123 → 122
etc.

regards
Attila

2 Likes

Thanks for your suggestions, I have created a package[1] that breaks down all values. Unfortunately I need an additional variable (_raw values) for some values. I haven’t found a way to automatically hide these values. Suggestions and PRs are welcome.

[1] home_assistant/modbus.yaml at 50d42b57de07fb5adcae6de6dc87f6162a96a899 · luusl/home_assistant · GitHub

3 Likes

Awesome work, thank you so much! I struggled so much with the correct interpretation of the data returned by these modbus registers…

This is such amazing work. Thank you for that! That package feels almost like a full integration and it’s definitely worthy of one. It feels like there only those 10% left to do to make it a full integration now.

Is there anyone feeling able to give it a shot or lay down the ground work so all of us can jump in and integrate all the functionality?

Is it possible to change prmBypassTmax by modbus? I’d like to change temperature between summer and winter.
Or is it possible to disable bypass by modbus?
Then I could stop the bypass in winter, when heating is enabled.

Took the idea from an other topic:

fan:
  - platform: template
    fans:
      pluggit_fan:
        unique_id: "pluggit_fan_id"
        friendly_name: "Pluggit AP 310"
        value_template: "{{ int(states('sensor.pluggit_speed_level_of_fans_in_manual_mode_raw'), 3) > 0 }}"
        percentage_template: "{{ int(states('sensor.pluggit_speed_level_of_fans_in_manual_mode_raw'), 3) * 25 }}"
        preset_mode_template: "{{ states('select.pluggit_active_unit_mode') }}"

        turn_on:
          service: script.pluggit_set_speed_level_of_fans_in_manual_mode
          data:
            speed_level: "{{ 2 }}"
          target:
            entity_id: sensor.pluggit_speed_level_of_fans_in_manual_mode_raw
        turn_off:
          service: script.pluggit_set_speed_level_of_fans_in_manual_mode
          data:
            speed_level: "{{ 0 }}"
          target:
            entity_id: sensor.pluggit_speed_level_of_fans_in_manual_mode_raw
        set_percentage:
          service: script.pluggit_set_speed_level_of_fans_in_manual_mode
          data:
            speed_level: "{{ percentage / 25  }}"
          target:
            entity_id: sensor.pluggit_speed_level_of_fans_in_manual_mode_raw
        set_preset_mode:
          service: script.pluggit_set_active_unit_mode
          data:
            unit_mode: "{{ preset_mode }}"
        #set_oscillating:
        #  service: script.fan_oscillating
        #  data:
        #    oscillating: "{{ oscillating }}"
        #set_direction:
        #  service: script.fan_direction
        #  data:
        #    direction: "{{ direction }}"
        speed_count: 4
        preset_modes:
          - "Manual"
          - "WeekProgram"
1 Like

Pluggit has released a new firmware late september, version 3.14

To install it, the also new V3 of Pluggit iFlow must also be installed on your computer, and previous iFlow versions MUST be uninstalled prior to upgrading the firmware. :slight_smile:

A new Modbus documentation has also been released. Everything can be downloaded after registering an account on https://inside.pluggit.com

To find the updated Modbus documentation, go to Pluggit Inside and search for “Modbus”.

The changes since V2.68 are:

  1. the following parameters have now write access:
  • prmDHCPEN
  • prmCurrentIPAddress
  • prmCurrentIPMask
  • prmCurrentIPGateway
  • prmBypassTmin
  • prmBypassTmax
  • prmRamIdxBypassManualTimeout
  • prmRomIdxRhSetPoint
  1. In the filter surveillance section, Servoflow has been added.

  2. Alarm list updated.

  3. Following parameters added:

  • prmBypassTmaxSummer
  • prmBypassTminSummer
  • prmRHSetpointSummer

The most interesting changes for me are that we can now modify the manual timeout duration and the Tmin and Tmax values for piloting the summer bypass. Also, there are now different Tmin and Tmax values for Summer and Winter times. Sounds cool!

Hi I upgrade to version 3.14

After I like to to change this new writable float32 registers.
Try to set prmBypassTmaxSummer register, first try use a “call service” in developer tools

service: modbus.write_register
data:
  hub: pluggit
  address: 764 or 765
  value: [30,0] or [0,30] or [11110,0] or [0,11110]

any combination but only write a 0 to register

I found only this: Write a Modbus R32 (word-swapped float32) register and use binary value, but not helped.

After can connect to iFlow3 tool to reset to default.
It’s a Settings → Accessory → select bypass ->save.
0 (wrong) value change to deselect bypass any time.

How to write a float32 register in modbus service?

Regards
Pimpalavista

Hi, I think I could need some help.
I must have made a mistake with the registers and now my pluggit is confused with its bypass-state. Wenn bypass is open it thinks it’s closed and when it’s closed it thinks it is open. I can open and close bypass via Home Assistant or the phone-app, but it ist always the wrong way. I tried to get rid of this error by restarting the pluggit and even by physical deinstallation and reinstallation of the bypass, but the error still is there. Has anyone an idea of how to tell the pluggit, that the bypass is open when it really is open?

Regards

Titansalat

connect to iFlow[2|3] tool to reset to default.

Settings → Accessory → deselect bypass ->save.
and after
Settings → Accessory → select bypass ->save.

So far I have only managed to edit values for prmBypassTmax (Tmax winter) - trying to write to the other 3 registers Tmin (winter), TmaxSummer and TminSummer always fails and sets them to 0 or the lowest possible value.

The example below is an automation triggered by a slider (input_number) entity to change values of Tmax winter:

- id: "4cd0083a-53bc-4587-afff-315ffb016e86"
  alias: Pluggit - Set ByPass Tmax Winter via slider
  description: "Uses input_number entity to update Tmax Winter value"
  mode: single
  trigger:
    - platform: state
      entity_id: input_number.pluggit_bypass_tmax_winter
  action:
    - service: modbus.write_register
      data:
        address: 447
        unit: 255
        value: >
          [ {{ '0x%04x' % unpack(pack(states('input_number.pluggit_bypass_tmax_winter') |float(0), '>f'), '>h') |abs }}, 0 ]
        hub: pluggit

I haven’t been able to do the same for the 3 other registers mentioned above, and I don’t understand the reason why…

Here are the details of the input_number

Unfortunately the settings in accessories don‘t change anything. If you deselect Bypass you just can’t activate it via the App. You still can activate it via modbus, even if it is deactivated in the settings. But I found the solution. If you log into iFlow 3 as admin you find an endless register of values. One is called „prmNeedInverseBypassState“. This was set to 1. I changed it to 0 and now it works perfectly. :grinning: