Hi,
I have a SAVE VSR 300
To integrate it in HA i used an USB to RS485 stick (https://www.aliexpress.com/item/32428596578.html)
# configuration.yaml entry for a serial connection
modbus:
name: hub1
type: serial
method: rtu
port: /dev/ttyUSB0
baudrate: 9600
stopbits: 1
bytesize: 8
parity: E
timeout: 10
#sensors.yaml
#MODBUS
- platform: modbus
scan_interval: 100
registers:
- name: air_extract_air_temp
hub: hub1
slave: 1
register: 12543
register_type: holding
unit_of_measurement: °C
count: 1
scale: 0.1
# data_type: float
precision: 1
- platform: modbus
scan_interval: 120
registers:
- name: air_outdoor_air_temp
hub: hub1
slave: 1
register: 12101
register_type: holding
unit_of_measurement: °C
count: 1
scale: 0.1
# data_type: float
precision: 1
- platform: modbus
scan_interval: 40
registers:
- name: air_supply_air_temp
hub: hub1
slave: 1
register: 12102
register_type: holding
unit_of_measurement: °C
count: 1
scale: 0.1
# data_type: float
precision: 1
- platform: modbus
scan_interval: 35
registers:
- name: air_overheat_temp
hub: hub1
slave: 1
register: 12107
register_type: holding
unit_of_measurement: °C
count: 1
scale: 0.1
# data_type: float
precision: 1
- platform: modbus
scan_interval: 10
registers:
- name: air_supply_fan
hub: hub1
slave: 1
register: 12400
register_type: input
unit_of_measurement: rpm
count: 1
# scale: 0.1
# data_type: float
precision: 1
- platform: modbus
scan_interval: 10
registers:
- name: air_extract_fan
hub: hub1
slave: 1
register: 12401
register_type: input
unit_of_measurement: rpm
count: 1
# scale: 0.1
# data_type: float
precision: 1
- platform: modbus
scan_interval: 60
registers:
- name: air_rh_sensor
hub: hub1
slave: 1
register: 12135
register_type: holding
unit_of_measurement: 
count: 1
# data_type: float
precision: 0
- platform: modbus
scan_interval: 3
registers:
- name: hrv_active_user_mode
hub: hub1
slave: 1
register: 1160
register_type: input
count: 1
# scale: 0.1
# data_type: float
precision: 0
- platform: modbus
scan_interval: 5
registers:
- name: hrv_active_fan_mode
hub: hub1
slave: 1
register: 1130
register_type: input
count: 1
# scale: 0.1
# data_type: float
precision: 0
- platform: modbus
scan_interval: 5
registers:
- name: hrv_active_temperature
hub: hub1
slave: 1
register: 2053
register_type: input
count: 1
scale: 0.1
# data_type: float
precision: 0
- platform: modbus
scan_interval: 9
registers:
- name: triac_output
hub: hub1
slave: 1
register: 2148
register_type: input
unit_of_measurement: 
count: 1
# data_type: binary
precision: 0
- platform: modbus
scan_interval: 7
registers:
- name: heater_active
hub: hub1
slave: 1
register: 14380
register_type: input
# unit_of_measurement:
count: 1
# data_type: binary
precision: 0
- platform: modbus
scan_interval: 11
registers:
- name: exchanger_active
hub: hub1
slave: 1
register: 14103
register_type: input
# unit_of_measurement:
count: 1
# data_type: binary
precision: 0
- platform: modbus
scan_interval: 10
registers:
- name: humidity_transfer
hub: hub1
slave: 1
register: 2146
register_type: input
count: 1
precision: 0
NodeRed:
[{"id":"d420ee28.a1795","type":"tab","label":"HRV","disabled":false,"info":""},{"id":"95a074eb.9f83c8","type":"server-state-changed","z":"d420ee28.a1795","name":"desired_user_mode","server":"6cc1c546.4430dc","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_select.hrv_desired_user_mode","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":190,"y":80,"wires":[["13548516.dd7a7b"]]},{"id":"13548516.dd7a7b","type":"function","z":"d420ee28.a1795","name":"","func":"switch(msg.payload){\n case \"None\":\n msg.payload = 0;\n break;\n case \"Auto\":\n msg.payload = 1;\n break;\n case \"Manual\":\n msg.payload = 2;\n break;\n case \"Crowded\":\n msg.payload = 3;\n break;\n case \"Refresh\":\n msg.payload = 4;\n break;\n case \"Fireplace\":\n msg.payload = 5;\n break;\n case \"Away\":\n msg.payload = 6;\n break;\n case \"Holiday\":\n msg.payload = 7;\n break;\n default:\n msg.payload = 0;\n}\n\n//msg.payload = { value: msg.payload, 'fc': 6, 'unitid': 1, 'address': 1161 , 'quantity': 1 };\n\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":80,"wires":[["c4001308.2278c"]]},{"id":"c4001308.2278c","type":"api-call-service","z":"d420ee28.a1795","name":"Set desired_user_mode","server":"6cc1c546.4430dc","version":1,"debugenabled":false,"service_domain":"modbus","service":"write_register","entityId":"","data":"{\"address\":1161,\"unit\":1,\"value\":\"{{payload}}\",\"hub\":\"hub1\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":550,"y":80,"wires":[[]]},{"id":"e688476d.119478","type":"comment","z":"d420ee28.a1795","name":"Set desired_user_mode to HRV","info":"","x":230,"y":40,"wires":[]},{"id":"e5eb1534.546788","type":"server-state-changed","z":"d420ee28.a1795","name":"active_user_mode","server":"6cc1c546.4430dc","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.hrv_active_user_mode","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":790,"y":540,"wires":[["7f43431e.622dfc"]]},{"id":"7f43431e.622dfc","type":"function","z":"d420ee28.a1795","name":"","func":"switch(msg.payload){\n case \"0\":\n msg.payload = \"Auto\";\n break;\n case \"1\":\n msg.payload = \"Manual\";\n break;\n case \"2\":\n msg.payload = \"Crowded\";\n break;\n case \"3\":\n msg.payload = \"Refresh\";\n break;\n case \"4\":\n msg.payload = \"Fireplace\";\n break;\n case \"5\":\n msg.payload = \"Away\";\n break;\n case \"6\":\n msg.payload = \"Holiday\";\n break;\n case \"7\":\n msg.payload = \"Cooker Hood\";\n break;\n case \"8\":\n msg.payload = \"Vacuum Cleaner\";\n break;\n case \"9\":\n msg.payload = \"CDI1\";\n break;\n case \"10\":\n msg.payload = \"CDI2\";\n break;\n case \"11\":\n msg.payload = \"CDI3\";\n break;\n case \"12\":\n msg.payload = \"PressureGuard\";\n break;\n default:\n msg.payload = \"Error\";\n}\n\n//msg.payload = { value: msg.payload, 'fc': 6, 'unitid': 1, 'address': 1161 , 'quantity': 1 };\n\nreturn msg;","outputs":1,"noerr":0,"x":1020,"y":540,"wires":[["bd6163e7.6f971"]]},{"id":"c20c703e.58438","type":"comment","z":"d420ee28.a1795","name":"Update UI based on HRV info","info":"Some mode are active for a specific time. After this period USER_MODE return to previous value.","x":220,"y":480,"wires":[]},{"id":"bd6163e7.6f971","type":"api-call-service","z":"d420ee28.a1795","name":"Set desired_user_mode","server":"6cc1c546.4430dc","version":1,"debugenabled":false,"service_domain":"input_select","service":"select_option","entityId":"input_select.hrv_desired_user_mode","data":"{\"option\":\"{{payload}}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1230,"y":540,"wires":[[]]},{"id":"54e9ade.53c3854","type":"server-state-changed","z":"d420ee28.a1795","name":"fan_mode","server":"6cc1c546.4430dc","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_select.hrv_fan_mode","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":160,"y":200,"wires":[["635f286f.219e38"]]},{"id":"635f286f.219e38","type":"function","z":"d420ee28.a1795","name":"","func":"switch(msg.payload){\n case \"Off\":\n msg.payload = 0;\n break;\n case \"Low\":\n msg.payload = 2;\n break;\n case \"Normal\":\n msg.payload = 3;\n break;\n case \"High\":\n msg.payload = 4;\n break;\n default:\n msg.payload = 3;\n}\n\n//msg.payload = { value: msg.payload, 'fc': 6, 'unitid': 1, 'address': 1161 , 'quantity': 1 };\n\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":200,"wires":[["99d27bff.ee2238"]]},{"id":"99d27bff.ee2238","type":"api-call-service","z":"d420ee28.a1795","name":"Set fan_mode","server":"6cc1c546.4430dc","version":1,"debugenabled":false,"service_domain":"modbus","service":"write_register","entityId":"","data":"{\"address\":1130,\"unit\":1,\"value\":\"{{payload}}\",\"hub\":\"hub1\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":520,"y":200,"wires":[[]]},{"id":"74c6591d.222978","type":"comment","z":"d420ee28.a1795","name":"Set fan_mode to HRV","info":"","x":200,"y":160,"wires":[]},{"id":"431ab7dc.42d818","type":"server-state-changed","z":"d420ee28.a1795","name":"active_fan_mode","server":"6cc1c546.4430dc","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.hrv_active_fan_mode","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":780,"y":660,"wires":[["1c190b23.960205"]]},{"id":"1c190b23.960205","type":"function","z":"d420ee28.a1795","name":"","func":"switch(msg.payload){\n case \"0\":\n msg.payload = \"Off\";\n break;\n case \"2\":\n msg.payload = \"Low\";\n break;\n case \"3\":\n msg.payload = \"Normal\";\n break;\n case \"4\":\n msg.payload = \"High\";\n break;\n default:\n msg.payload = \"Error\";\n}\n\n//msg.payload = { value: msg.payload, 'fc': 6, 'unitid': 1, 'address': 1161 , 'quantity': 1 };\n\nreturn msg;","outputs":1,"noerr":0,"x":1020,"y":660,"wires":[["dc35d906.905f18"]]},{"id":"dc35d906.905f18","type":"api-call-service","z":"d420ee28.a1795","name":"Set desired_fan_mode","server":"6cc1c546.4430dc","version":1,"debugenabled":false,"service_domain":"input_select","service":"select_option","entityId":"input_select.hrv_fan_mode","data":"{\"option\":\"{{payload}}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1220,"y":660,"wires":[[]]},{"id":"bc2e9915.41f348","type":"server-state-changed","z":"d420ee28.a1795","name":"temperature","server":"6cc1c546.4430dc","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_number.hrv_temperature","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":170,"y":320,"wires":[["6656e916.035688"]]},{"id":"6656e916.035688","type":"function","z":"d420ee28.a1795","name":"","func":"msg.payload = msg.payload * 10;\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":320,"wires":[["7e0d4f49.6c978"]]},{"id":"7e0d4f49.6c978","type":"api-call-service","z":"d420ee28.a1795","name":"Set temperature","server":"6cc1c546.4430dc","version":1,"debugenabled":false,"service_domain":"modbus","service":"write_register","entityId":"","data":"{\"address\":2000,\"unit\":1,\"value\":\"{{payload}}\",\"hub\":\"hub1\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":520,"y":320,"wires":[[]]},{"id":"49be9ca4.80aef4","type":"comment","z":"d420ee28.a1795","name":"Set Temperature to HRV","info":"","x":210,"y":280,"wires":[]},{"id":"2a011ba.bae88e4","type":"server-state-changed","z":"d420ee28.a1795","name":"active_temperature","server":"6cc1c546.4430dc","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.hrv_active_temperature","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":790,"y":780,"wires":[["d9027d79.df8c7"]]},{"id":"d9027d79.df8c7","type":"function","z":"d420ee28.a1795","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"x":1020,"y":780,"wires":[["e1768475.c79418"]]},{"id":"e1768475.c79418","type":"api-call-service","z":"d420ee28.a1795","name":"Set desired_active_temperature","server":"6cc1c546.4430dc","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.hrv_temperature","data":"{\"value\":\"{{payload}}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1250,"y":780,"wires":[[]]},{"id":"8849a34f.df6b4","type":"api-current-state","z":"d420ee28.a1795","name":"hrv_active_temperature","server":"6cc1c546.4430dc","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.hrv_active_temperature","state_type":"num","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":810,"y":720,"wires":[["d9027d79.df8c7"]]},{"id":"ae5bc303.c2a4f","type":"api-current-state","z":"d420ee28.a1795","name":"active_user_mode","server":"6cc1c546.4430dc","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.hrv_active_user_mode","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":790,"y":480,"wires":[["7f43431e.622dfc"]]},{"id":"160ed3f2.3e675c","type":"api-current-state","z":"d420ee28.a1795","name":"active_fan_mode","server":"6cc1c546.4430dc","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.hrv_active_fan_mode","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":790,"y":600,"wires":[["1c190b23.960205"]]},{"id":"bde452f0.74f07","type":"server-events","z":"d420ee28.a1795","name":"","server":"6cc1c546.4430dc","event_type":"home_assistant_client","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"x":220,"y":600,"wires":[["57a15fbe.f93f6"]]},{"id":"57a15fbe.f93f6","type":"switch","z":"d420ee28.a1795","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"running","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":410,"y":600,"wires":[["f44558b1.ee8f48"]]},{"id":"f44558b1.ee8f48","type":"delay","z":"d420ee28.a1795","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":540,"y":600,"wires":[["ae5bc303.c2a4f","160ed3f2.3e675c","8849a34f.df6b4"]]},{"id":"6cc1c546.4430dc","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]
HA (basic info):
Maybe someone will help us with graphical interface