Systemair SAVECare Ventilation unit

I use Elfin-EW11A with 5~36VDC, Elfin-EW1X_User Manual (marcomweb.it).

And then I have connect it to my SystemAir SAVE VSR 300 Connection Board.
SAVE_VSR_300_500_INSTALLATION_SE_V1.PDF (systemair.com)

(I didnt have a yellow cable at hand, so I used a green)

Thank you😀 i have ordered one now, will try this😀
Best regards Lars

1 Like

Just be sure that it is 11A with 5~36VDC.
Those without A is only 5-18VDC, and that will not work :slight_smile:

Thats IAM 1.0 :slight_smile:

Due to newuser limit i can only have 2 links in a post.
Therefore this is post 1/2

I have found that the IAM 2, can be used through http requests to read/write modbusregisters quite easily. And I will look into doing something with this.
But for now, here is some info for anyone who wants to try this:
sending a http requests formated like this returns what looks like a json with the value(s) of the requested register(s).

http://192.168.10.65/mread?{“12102”:1}

this returns:
{“12102”: 237}

I also found its possible to change the :1 to for example :100 like this:

http://192.168.10.65/mread?{“12102”:100}

And it will return the value of all registers betwseen 12102-12202 in this manner:

{“12102”:240,“12103”:0,“12104”:0,“12105”:0,“12106”:0,…}

i put the … instead of all of the returned data, only to show the format of the return
data.

From initial testing I found the maximum registeres that can be read like this is seems to around 420. It will respond with any number between 1 and 669, however the output get trunkated so that only the first 420 values or so is shown, and there wont be a ending } in the output. I dont know, but I belive there might be a maximum length of the output string that causes this, which also means depending on the size of the values in the response, the exact maximum registers that can be read this way can vary.

There’s also a similar way to write to the registers, altho I have not yet explored into it much.

post 2/2:

Anyway, this means that by issuing a linux command like:
wget -O modbus.tmp http://192.168.10.65/mread?{"1001":400}
we get a file called modbus.tmp that contains the value of all registers between 1001 and 1400.
It only takes a second as well.

This is all I have for now, but it means it should be very doable to create a small script that either collects the value of exact registrers one by one, or all possible registers. So this leads to different choices in howto proceed.
I see from previous posts that the exact register # used varies from one model of the vtr to another? So if anyone wants to create something that works for multiple different models that will take a lot more effort.
For my use, i will probably look into just reading/writing the values that are of interest to me on my vtr save 250.

I found a PDF on systemair’s website with a list and description of all registers on SAVE units, however it does not specify wich models, so maybe all SAVE model’s use the same standarized registers. That would make any effort to create something for HA and/or other apps that works on multiple unis a lot easier atleast.
However the pdf seems to be quite old: Release date: 20190116, Revision: 29
So if anyone has a newer revision then this, please share.
The PDF can be found here: SAVE_MODBUS_VARIABLE_LIST_20190116__REV__29_.PDF (systemair.com)

  • technot
1 Like

As far as I know, 20210301, Revision: 36 is the latest.
SAVE_MODBUS_VARIABLE_LIST_20210301_REV36.PDF (systemair.com)

Maybe @DariusSystemair have a newer version?

Hi all,
I stumbled upon this thread just now and have fast-forwarded through it from sept. 2020 til today! I have zero knowledge of modbus… so it has quite been difficult to follow. The reason for my post is as follows:

  1. Initial reason: I want to turn on/off and be able to regulate my Systemair DC-fan-speed via Home Assistant. The goal is to have an automation for my greenhouse based on temperature, humidity… and maybe weather-forecast and time of day.

  2. A couple of months ago switched out the manual rpm-regulator to a Plejd ctr-01 with 0-10V regulation… I works great, via the plejd-app, but its Bluetooth so the reach is limited.

  3. Now I am trying to integrate my plejd-solution into my Home Assistant… it seems the integration doesn’t exist any more. On the Plejd.se homepage they claim that their gateway GWY-01 works with Apple Homekit, Google Home and Homey.

  4. To reach my goal (point 1 above)… Do I really need to be able to read the tachosignal/isink?? (which is currently not used as the CTR-01 doesn’t take more than 2 wires from the fan)

I did find a zigbee 0-10V device that I ordered yesterday to get around the hassle of integrating Plejd into Home Assistant. If that works I would be forever thankful for tips on the automation-part of my plan. I’m really struggling with Home Assistant Automation’s as I find the logic of them confusing to say the least… I haven’t tried node red yet… but just the look of it feels scary too :blush:

ps. Having a detailed conversation with Chat-GPT was what led me here! ds.

As a dumb idea for all those IAM2 owners. @technot @lars.svartdal have you tried contacting SA support line for enabling modbus? ) They are quite promptive and gave me the modbus registers for controlling the heater as it’s not even in the latest manual

Hi. I did. contact systemair about a. week ago, and the guy i was talking to told me there would be an update to iam 2 with modbus out i a couple of days. Called support again on thursday, but the guy i then talkedvto did not know anything about modbus beein in the update. Still no uptade so time wil show.:grinning:i am waiting for modbus adaper from aliexpress in the meantime​:sweat_smile:

1 Like

This worked perfectly for me. I am also using IAM2 and couldnt get modbus to work. I took your idea and added this code to the configuration.yaml.

sensor:
  - platform: rest
    name: rest_OutTemp
    resource: http://MY.IP.ADDRESS/mread?{"12102":1}
    value_template: "{{ value_json['12102'] }}"
    unique_id: SystemAir_OutTemp
    force_update: true
    device_class: temperature

IT worked a treat. thanks for the tip!!

2 Likes

here is a version with all of the sensors I use.

#rest:
    resource: http://192.168.1.223/mread?{"1011":1,"12102":1,"12101":1,"12106":1,"12543":1,"12135":1,"2210":2,"14000":2,"1038":1,"12020":1,"14102":1,"1160":1,"12400":2,"4110":1}
    scan_interval: 20
    sensor:
      - name: rest_RH
        value_template: "{{ value_json['1011'] }}"
        unique_id: SystemAir_RH
        force_update: true
        device_class: humidity
        unit_of_measurement: RH%
      - name: rest_SupplyTemp
        value_template: "{{ (float(value_json['12102']) * 0.1) | round(1, default=0)  }}"
        unique_id: SystemAir_SupplyTemp
        device_class: temperature
        unit_of_measurement: °C
      - name: rest_OutDoorTemp
        value_template: "{{ (float(value_json['12101']) * 0.1) | round(1, default=0)  }}"
        unique_id: SystemAir_OutDoorTemp
        device_class: temperature
        unit_of_measurement: °C
      - name: rest_ExtractTemp
        value_template: "{{ (float(value_json['12543']) * 0.1) | round(1, default=0)  }}"
        unique_id: SystemAir_ExtractTemp
        device_class: temperature
        unit_of_measurement: °C
      - name: rest_rel_humidity_sensor
        value_template: "{{ float(value_json['12135']) }}"
        unique_id: SystemAir_rel_humidity_sensor
        device_class: humidity
        unit_of_measurement: RH%
      - name: rest_kalkulert_fukt_avtrekk
        value_template: "{{ float(value_json['2210']) }}"
        unique_id: SystemAir_kalkulert_fukt_avtrekk
        device_class: humidity
        unit_of_measurement: RH%
      - name: rest_humidity_roof
        value_template: "{{ float(value_json['2211'])}}"
        unique_id: SystemAir_humidity_roof
        device_class: humidity
        unit_of_measurement: RH%
      - name: rest_SAF_fan_speed
        value_template: "{{ float(value_json['14000'])}}"
        unique_id: SystemAir_SAF_fan_speed
        #device_class: power_factor
        unit_of_measurement: RPM
      - name: rest_EAF_fan_speed
        value_template: "{{ float(value_json['14001'])}}"
        unique_id: SystemAir_EAF_fan_speed
        #device_class: power_factor
        unit_of_measurement: RPM
      - name: rest_sommerdrift_vinterdrift
        value_template: "{{ float(value_json['1038'])}}"
        unique_id: SystemAir_sommerdrift_vinterdrift
        #device_class: humidity
        #unit_of_measurement: °C
      - name: rest_komfyravtrekk_trykkvakt_av_pa
        value_template: "{{ float(value_json['12020'])}}"
        unique_id: SystemAir_komfyravtrekk_trykkvakt_av_pa
        #device_class: humidity
        #unit_of_measurement: °C
      - name: rest_varmegjenvinner
        value_template: "{{ float(value_json['14102'])}}"
        unique_id: SystemAir_varmegjenvinner
        #device_class: humidity
        #unit_of_measurement: °C
      - name: rest_mode
        value_template: "{{ float(value_json['1160'])}}"
        unique_id: SystemAir_mode
        #device_class: humidity
        #unit_of_measurement: °C
      - name: rest_SENSOR_RPM_SAF
        value_template: "{{ float(value_json['12400'])}}"
        unique_id: SystemAir_SENSOR_RPM_SAF
        #device_class: power_factor
        unit_of_measurement: RPM
      - name: rest_SENSOR_RPM_EAF
        value_template: "{{ float(value_json['12401'])}}"
        unique_id: SystemAir_SENSOR_RPM_EAF
        #device_class: power_factor
        unit_of_measurement: RPM
      - name: rest_FREE_COOLING_ACTIVE
        value_template: "{{ float(value_json['4110'])}}"
        unique_id: SystemAir_FREE_COOLING_ACTIVE
        #device_class: humidity
        #unit_of_measurement: °C

and here is how you send a “post” from a service to write values back to IAM2:

rest_command:
  refresh_request:
    url: 'http://192.168.1.223/mwrite?{"1161":4}'
1 Like

@technot - you are correct. All SAVE devices have standardized modbus address list, so if you do integration for one model - you have done it for all.
Regarding the modbus parameter list - REV 29 is still OK, even though the newest is REV 39, but it has very limited differences, basically just some registers added for functions that are less important for end users such as yourself.
Please note there are huge amount of modbus registers that are not publicly available (we try to keep the public document shorter) but if you would let me know which functions you are interested in particular - I could provide you all the neccessary information

@rickard1 the REV_36 is the latest public one, even though there is now a version 39 available, but the changes in the 37, 38 and 39 versions are irrelevant for end customers.
Please have in mind there are thousands of undisclosed addresses so if you would let me know what functions you are interested in particular - I could hand pick it from the “untidy” modbus list and provide here.

@Ziiiz hey!
Why not control the fans directly?
The picture below gives you a procedure how to set up an external fan control via modbus.
Link to picture: modbus-list hosted at ImgBB — ImgBB

SAVE device has a function called “DCV - Directly Controlled air Volume”, which you can utilise directly - by providing you own 0-10V control signals to the universal Inputs on the SAVE unit, OR via modbus (registers and procedure in picture). Each fan can be controlled separately.
So if you have any other IOT device that could provide 0-10V output for fan control - you can connect it to the Universal Inputs configured as Analog Inputs and assigned SAFC and EAFC (Supply and Extract Air Fan Control) functions. Please note the fan control mode has to be set to “External” (Service → Control Regulation → Fan Control → Airflow Type). The unit has to be also set to AUTO mode.
Link to picture: home-screen hosted at ImgBB — ImgBB

Also, for fans to be allowed to be turned off completely - Manual Fan Stop setting has to be enabled (Service → Control Regulation → Fan Control → Manual fan stop allowed (set toggle to green).

Could you upload, or maybe send the “untidy” list? :slight_smile:

@DariusSystemair Is it possible to send CO2 readings to the device through Modbus? I have multiple sensors around the house, and I would prefer not to add another Systemair CO2 sensor when I really want to use the “average CO2 level in the house” for control. Currently, I manually control the fan speeds via automations to compensate for the CO2 levels.

@PatrickJanson Yes, there is such a register, actualy for both CO2 and RH sensors.

REG_SENSOR_MODBUS_CO2 12113 Holding public 0 2000 ppm ModbusCo2Sensor
REG_SENSOR_MODBUS_RHS 12114 Holding public 0 100 % ModbusRhSensor

PPM value is expected here for CO2 sensor (range 0 - 2000 ppm)

Which registers do you use to override fan controls right now?
Be careful though, all settings goes into NVM, which has a lifetime of around 300,000 writes, so if you use it too often - you will kill the EEPROM. So if you do the fan regulation using fan level settings - it will use the EEPROM. Best way to do it is through external fan control function, I replied about it to @Ziiiz in a post above

I hope this helps!

@PatrickJanson , I will really have to clean it up from confidential and sensitive registers, so it will take some time. I will be leaving for holidays starting Monday though, so not before the end of July. Apologies for that!

1 Like

I will have to look in to this! Thank you for this information :slight_smile:
I use 1412 and 1413 for this. And I am sending it way to often if there is a max limit.