A project that implements a Modbus server for Flexit ventilation systems using ESPHome. You do not need a Flexit CI66 for this to work. This is still a WIP, and does not yet include all sensors exposed by the Flexit CS60.
- This does not require a Flexit CI66 Modbus adapter to work!
- A Flexit ventilation system with a CS60 or similar controller. This has only been tested on a CS60, but should work with any controller that works with a CI600 panel
- ESP8266 or ESP32
- MAX485 or equivalent UART -> RS485 transciever
- Basic knowledge of ESPHome YAML configuration
- Implement methods for ventilation mode changes and the like from esphome
- Reverse/Implement more sensors
This project is licensed under the MIT License.
logger:
baud_rate: 0
external_components:
- source: github://MSkjel/esphome-flexit-modbus-server@main
refresh: 60s
components:
- flexit_modbus_server
uart:
id: modbus_uart
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 115200
flexit_modbus_server:
- id: server
uart_id: modbus_uart
address: 2
sensor:
- platform: template
name: Setpoint Air Temperature
id: setpoint_air_temperature
update_interval: 10s
device_class: temperature
lambda: "return id(server)->read_holding_register_temperature(flexit_modbus_server::REG_SETPOINT_TEMP);"
- platform: template
name: Supply Air Temperature
id: supply_air_temperature
update_interval: 10s
device_class: temperature
lambda: "return id(server)->read_holding_register_temperature(flexit_modbus_server::REG_SUPPLY_TEMPERATURE);"
filters:
- platform: template
name: Outdoor Air Temperature
id: outdoor_air_temperature
update_interval: 10s
device_class: temperature
lambda: "return id(server)->read_holding_register_temperature(flexit_modbus_server::REG_OUTDOOR_TEMPERATURE);"
- platform: template
name: Heater Percentage
id: heater_percentage
update_interval: 10s
unit_of_measurement: "%"
lambda: "return id(server)->read_holding_register(flexit_modbus_server::REG_HEATER_PERCENTAGE);"
- platform: template
name: Heat Exchanger Percentage
id: heat_exchanger_percentage
update_interval: 10s
unit_of_measurement: "%"
lambda: "return id(server)->read_holding_register(flexit_modbus_server::REG_HEAT_EXCHANGER_PERCENTAGE);"
- platform: template
name: Supply Air Fan Speed Percentage
id: supply_air_fan_speed_percentage
update_interval: 10s
unit_of_measurement: "%"
lambda: "return id(server)->read_holding_register(flexit_modbus_server::REG_SUPPLY_AIR_FAN_SPEED_PERCENTAGE);"
text_sensor:
- platform: template
name: Mode
id: mode
update_interval: 10s
lambda: "return flexit_modbus_server::mode_to_string(id(server)->read_holding_register(flexit_modbus_server::REG_REGULATION_MODE));"