modbus: - name: victron_gx type: tcp host: 192.168.103.30 port: 502 timeout: 3 delay: 2 lazy_error_count: 10 sensors: # ---- SOLAR CHARGER (Unit ID 226) ---- - name: Solar Voltage slave: 226 address: 776 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "V" device_class: voltage state_class: measurement - name: Solar Amperage slave: 226 address: 777 input_type: holding data_type: int16 scale: 0.1 precision: 1 unit_of_measurement: "A" device_class: current state_class: measurement - name: Solar Wattage slave: 226 address: 789 input_type: holding data_type: uint16 scale: 0.1 unit_of_measurement: "W" device_class: power state_class: measurement - name: Solar Yield Today slave: 226 address: 784 input_type: holding data_type: uint16 scale: 0.1 precision: 3 unit_of_measurement: "kWh" device_class: energy state_class: total # DC system - name: DC Voltage slave: 100 address: 840 input_type: holding data_type: uint16 scale: 0.1 precision: 2 unit_of_measurement: "V" device_class: voltage state_class: measurement unique_id: dc_voltage - name: DC Wattage slave: 100 address: 860 input_type: holding data_type: int16 scale: 1 precision: 0 unit_of_measurement: "W" device_class: power state_class: measurement unique_id: dc_wattage # GPS (Slave ID 100) - name: GPS Latitude ID 100 slave: 100 address: 2800 input_type: holding data_type: int32 scale: 0.0000001 precision: 7 state_class: measurement unique_id: gps_latitude_id_100 - name: GPS Longitude ID 100 slave: 100 address: 2802 input_type: holding data_type: int32 scale: 0.0000001 precision: 7 state_class: measurement unique_id: gps_longitude_id_100 - name: GPS Course ID 100 slave: 100 address: 2804 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "°" state_class: measurement unique_id: gps_course_id_100 - name: GPS Speed ID 100 slave: 100 address: 2805 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "m/s" state_class: measurement unique_id: gps_speed_id_100 - name: GPS Fix ID 100 slave: 100 address: 2806 input_type: holding data_type: uint16 scale: 1 state_class: measurement unique_id: gps_fix_id_100 - name: GPS Satellites ID 100 slave: 100 address: 2807 input_type: holding data_type: uint16 scale: 1 state_class: measurement unique_id: gps_satellites_id_100 - name: GPS Altitude ID 100 slave: 100 address: 2808 input_type: holding data_type: int32 scale: 0.16 precision: 1 unit_of_measurement: "m" state_class: measurement unique_id: gps_altitude_id_100 # GPS (Unit ID 1) - name: GPS Latitude ID 1 slave: 1 address: 2800 input_type: holding data_type: int32 scale: 0.0000001 precision: 7 state_class: measurement unique_id: gps_latitude_id_1 - name: GPS Longitude ID 1 slave: 1 address: 2802 input_type: holding data_type: int32 scale: 0.0000001 precision: 7 state_class: measurement unique_id: gps_longitude_id_1 - name: GPS Course ID 1 slave: 1 address: 2804 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "°" state_class: measurement unique_id: gps_course_id_1 - name: GPS Speed ID 1 slave: 1 address: 2805 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "m/s" state_class: measurement unique_id: gps_speed_id_1 - name: GPS Fix ID 1 slave: 1 address: 2806 input_type: holding data_type: uint16 scale: 1 state_class: measurement unique_id: gps_fix_id_1 - name: GPS Satellites ID 1 slave: 1 address: 2807 input_type: holding data_type: uint16 scale: 1 state_class: measurement unique_id: gps_satellites_id_1 - name: GPS Altitude ID 1 slave: 1 address: 2808 input_type: holding data_type: int32 scale: 0.16 precision: 1 unit_of_measurement: "m" state_class: measurement unique_id: gps_altitude_id_1 # ---- MULTIPLUS-II (VE.Bus, Cerbo GX unit ID 227) ---- # Confirmed on this GX: one AC phase, AC input 1, 30 A shore-power plug. # Register map: https://www.victronenergy.com/upload/documents/CCGX-Modbus-TCP-register-list-3.81.xlsx # Victron's scale column is a divisor: AC power registers use 0.1, # so Home Assistant must multiply their signed raw values by 10. # Change the unit ID anchor here if the GX service mapping changes. - name: MultiPlus AC Input Voltage unique_id: multiplus_ac_input_voltage slave: &multiplus_unit_id 227 address: 3 input_type: holding data_type: uint16 scale: 0.1 precision: 1 unit_of_measurement: "V" device_class: voltage state_class: measurement scan_interval: 10 - name: MultiPlus AC Input Current unique_id: multiplus_ac_input_current slave: *multiplus_unit_id address: 6 input_type: holding data_type: int16 scale: 0.1 precision: 1 unit_of_measurement: "A" device_class: current state_class: measurement scan_interval: 10 - name: MultiPlus AC Input Frequency unique_id: multiplus_ac_input_frequency slave: *multiplus_unit_id address: 9 input_type: holding data_type: int16 scale: 0.01 precision: 2 unit_of_measurement: "Hz" device_class: frequency state_class: measurement scan_interval: 10 - name: MultiPlus AC Input Power unique_id: multiplus_ac_input_power slave: *multiplus_unit_id address: 12 input_type: holding data_type: int16 scale: 10 precision: 0 unit_of_measurement: "W" device_class: power state_class: measurement scan_interval: 10 - name: MultiPlus AC Output Voltage unique_id: multiplus_ac_output_voltage slave: *multiplus_unit_id address: 15 input_type: holding data_type: uint16 scale: 0.1 precision: 1 unit_of_measurement: "V" device_class: voltage state_class: measurement scan_interval: 10 - name: MultiPlus AC Output Current unique_id: multiplus_ac_output_current slave: *multiplus_unit_id address: 18 input_type: holding data_type: int16 scale: 0.1 precision: 1 unit_of_measurement: "A" device_class: current state_class: measurement scan_interval: 10 - name: MultiPlus AC Output Frequency unique_id: multiplus_ac_output_frequency slave: *multiplus_unit_id address: 21 input_type: holding data_type: int16 scale: 0.01 precision: 2 unit_of_measurement: "Hz" device_class: frequency state_class: measurement scan_interval: 10 - name: MultiPlus AC Output Power unique_id: multiplus_ac_output_power slave: *multiplus_unit_id address: 23 input_type: holding data_type: int16 scale: 10 precision: 0 unit_of_measurement: "W" device_class: power state_class: measurement scan_interval: 10 - name: MultiPlus Battery Voltage unique_id: multiplus_battery_voltage slave: *multiplus_unit_id address: 26 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "V" device_class: voltage state_class: measurement scan_interval: 10 - name: MultiPlus Battery Current unique_id: multiplus_battery_current slave: *multiplus_unit_id address: 27 input_type: holding data_type: int16 scale: 0.1 precision: 1 unit_of_measurement: "A" device_class: current state_class: measurement scan_interval: 10 - name: MultiPlus Battery Temperature unique_id: multiplus_battery_temperature slave: *multiplus_unit_id address: 61 input_type: holding data_type: int16 scale: 0.1 precision: 1 unit_of_measurement: "°C" device_class: temperature state_class: measurement - name: MultiPlus State of Charge unique_id: multiplus_state_of_charge slave: *multiplus_unit_id address: 30 input_type: holding data_type: uint16 scale: 0.1 precision: 1 unit_of_measurement: "%" device_class: battery state_class: measurement - name: MultiPlus AC Input Current Limit Readback unique_id: multiplus_ac_input_current_limit_readback slave: *multiplus_unit_id address: 22 input_type: holding data_type: int16 scale: 0.1 precision: 1 unit_of_measurement: "A" device_class: current state_class: measurement scan_interval: 10 - name: MultiPlus Mode Raw unique_id: multiplus_mode_raw slave: *multiplus_unit_id address: 33 input_type: holding data_type: uint16 scan_interval: 10 - name: MultiPlus State Raw unique_id: multiplus_state_raw slave: *multiplus_unit_id address: 31 input_type: holding data_type: uint16 scan_interval: 10 - name: MultiPlus Charge State Raw unique_id: multiplus_charge_state_raw slave: *multiplus_unit_id address: 95 input_type: holding data_type: uint16 scan_interval: 10 - name: MultiPlus Active Input Raw unique_id: multiplus_active_input_raw slave: *multiplus_unit_id address: 29 input_type: holding data_type: uint16 scan_interval: 10 - name: MultiPlus Phase Count unique_id: multiplus_phase_count slave: *multiplus_unit_id address: 28 input_type: holding data_type: uint16 - name: MultiPlus VE Bus Error unique_id: multiplus_ve_bus_error slave: *multiplus_unit_id address: 32 input_type: holding data_type: uint16 - name: MultiPlus High Temperature Alarm Raw unique_id: multiplus_high_temperature_alarm_raw slave: *multiplus_unit_id address: 34 input_type: holding data_type: uint16 - name: MultiPlus Low Battery Alarm Raw unique_id: multiplus_low_battery_alarm_raw slave: *multiplus_unit_id address: 35 input_type: holding data_type: uint16 - name: MultiPlus Overload Alarm Raw unique_id: multiplus_overload_alarm_raw slave: *multiplus_unit_id address: 36 input_type: holding data_type: uint16 - name: MultiPlus Ripple Alarm Raw unique_id: multiplus_ripple_alarm_raw slave: *multiplus_unit_id address: 47 input_type: holding data_type: uint16 - name: MultiPlus Temperature Sensor Alarm Raw unique_id: multiplus_temperature_sensor_alarm_raw slave: *multiplus_unit_id address: 42 input_type: holding data_type: uint16 - name: MultiPlus Voltage Sensor Alarm Raw unique_id: multiplus_voltage_sensor_alarm_raw slave: *multiplus_unit_id address: 43 input_type: holding data_type: uint16 - name: MultiPlus Grid Lost Alarm Raw unique_id: multiplus_grid_lost_alarm_raw slave: *multiplus_unit_id address: 64 input_type: holding data_type: uint16 - name: MultiPlus BMS Pre Alarm Raw unique_id: multiplus_bms_pre_alarm_raw slave: *multiplus_unit_id address: 94 input_type: holding data_type: uint16 - name: MultiPlus BMS Allows Charging Raw unique_id: multiplus_bms_allows_charging_raw slave: *multiplus_unit_id address: 57 input_type: holding data_type: uint16 - name: MultiPlus BMS Allows Discharging Raw unique_id: multiplus_bms_allows_discharging_raw slave: *multiplus_unit_id address: 58 input_type: holding data_type: uint16 - name: MultiPlus BMS Expected Raw unique_id: multiplus_bms_expected_raw slave: *multiplus_unit_id address: 59 input_type: holding data_type: uint16 - name: MultiPlus BMS Error unique_id: multiplus_bms_error slave: *multiplus_unit_id address: 60 input_type: holding data_type: uint16 - name: MultiPlus AC Input Ignored Raw unique_id: multiplus_ac_input_ignored_raw slave: *multiplus_unit_id address: 69 input_type: holding data_type: uint16 - name: MultiPlus AC Input to Output Energy unique_id: multiplus_ac_input_to_output_energy slave: *multiplus_unit_id address: 74 input_type: holding data_type: uint32 scale: 0.01 precision: 2 unit_of_measurement: "kWh" device_class: energy state_class: total_increasing # Hardware counters reset on Multi/GX restart; total_increasing handles this. - name: MultiPlus AC Input to Battery Energy unique_id: multiplus_ac_input_to_battery_energy slave: *multiplus_unit_id address: 76 input_type: holding data_type: uint32 scale: 0.01 precision: 2 unit_of_measurement: "kWh" device_class: energy state_class: total_increasing - name: MultiPlus AC Output to Input Energy unique_id: multiplus_ac_output_to_input_energy slave: *multiplus_unit_id address: 82 input_type: holding data_type: uint32 scale: 0.01 precision: 2 unit_of_measurement: "kWh" device_class: energy state_class: total_increasing - name: MultiPlus Battery to AC Input Energy unique_id: multiplus_battery_to_ac_input_energy slave: *multiplus_unit_id address: 86 input_type: holding data_type: uint32 scale: 0.01 precision: 2 unit_of_measurement: "kWh" device_class: energy state_class: total_increasing - name: MultiPlus Battery to AC Output Energy unique_id: multiplus_battery_to_ac_output_energy slave: *multiplus_unit_id address: 90 input_type: holding data_type: uint32 scale: 0.01 precision: 2 unit_of_measurement: "kWh" device_class: energy state_class: total_increasing - name: MultiPlus AC Output to Battery Energy unique_id: multiplus_ac_output_to_battery_energy slave: *multiplus_unit_id address: 92 input_type: holding data_type: uint32 scale: 0.01 precision: 2 unit_of_measurement: "kWh" device_class: energy state_class: total_increasing - name: MultiPlus PowerAssist Boost Factor unique_id: multiplus_powerassist_boost_factor slave: *multiplus_unit_id address: 106 input_type: holding data_type: uint16 scale: 0.01 precision: 2 state_class: measurement - name: MultiPlus Configured Output Voltage unique_id: multiplus_configured_output_voltage slave: *multiplus_unit_id address: 107 input_type: holding data_type: uint16 scale: 0.01 precision: 2 unit_of_measurement: "V" device_class: voltage state_class: measurement - name: MultiPlus PowerAssist Enabled Raw unique_id: multiplus_powerassist_enabled_raw slave: *multiplus_unit_id address: 108 input_type: holding data_type: uint16 - name: MultiPlus UPS Function Raw unique_id: multiplus_ups_function_raw slave: *multiplus_unit_id address: 109 input_type: holding data_type: uint16 - name: MultiPlus Weak AC Input Raw unique_id: multiplus_weak_ac_input_raw slave: *multiplus_unit_id address: 129 input_type: holding data_type: uint16 - name: MultiPlus Nominal Inverter Power unique_id: multiplus_nominal_inverter_power slave: *multiplus_unit_id address: 130 input_type: holding data_type: uint32 scale: 1 precision: 0 unit_of_measurement: "W" device_class: power state_class: measurement template: - sensor: # GPS aggregation: prefer slave 100, fall back to slave 1 - name: GPS Latitude unique_id: gps_latitude state_class: measurement state: >- {% set v100 = states('sensor.gps_latitude_id_100') %} {% set v1 = states('sensor.gps_latitude_id_1') %} {% if v100 not in ['unavailable', 'unknown'] and v100 | float(0) != 0 %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] and v1 | float(0) != 0 %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: GPS Longitude unique_id: gps_longitude state_class: measurement state: >- {% set v100 = states('sensor.gps_longitude_id_100') %} {% set v1 = states('sensor.gps_longitude_id_1') %} {% if v100 not in ['unavailable', 'unknown'] and v100 | float(0) != 0 %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] and v1 | float(0) != 0 %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: GPS Course unique_id: gps_course unit_of_measurement: "°" state_class: measurement state: >- {% set v100 = states('sensor.gps_course_id_100') %} {% set v1 = states('sensor.gps_course_id_1') %} {% if v100 not in ['unavailable', 'unknown'] %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: GPS Speed unique_id: gps_speed unit_of_measurement: "m/s" state_class: measurement state: >- {% set v100 = states('sensor.gps_speed_id_100') %} {% set v1 = states('sensor.gps_speed_id_1') %} {% if v100 not in ['unavailable', 'unknown'] %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: GPS Fix unique_id: gps_fix state_class: measurement state: >- {% set v100 = states('sensor.gps_fix_id_100') %} {% set v1 = states('sensor.gps_fix_id_1') %} {% if v100 not in ['unavailable', 'unknown'] and v100 | int(0) > 0 %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] and v1 | int(0) > 0 %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: GPS Satellites unique_id: gps_satellites state_class: measurement state: >- {% set v100 = states('sensor.gps_satellites_id_100') %} {% set v1 = states('sensor.gps_satellites_id_1') %} {% if v100 not in ['unavailable', 'unknown'] and v100 | int(0) > 0 %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] and v1 | int(0) > 0 %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: GPS Altitude unique_id: gps_altitude unit_of_measurement: "m" state_class: measurement state: >- {% set v100 = states('sensor.gps_altitude_id_100') %} {% set v1 = states('sensor.gps_altitude_id_1') %} {% if v100 not in ['unavailable', 'unknown'] %} {{ v100 }} {% elif v1 not in ['unavailable', 'unknown'] %} {{ v1 }} {% else %} {{ v100 }} {% endif %} - name: MultiPlus State unique_id: multiplus_state availability: "{{ is_number(states('sensor.multiplus_state_raw')) }}" state: >- {% set v = states('sensor.multiplus_state_raw') | int(-1) %} {{ { 0:'Off',1:'Low power',2:'Fault',3:'Bulk',4:'Absorption',5:'Float', 6:'Storage',7:'Equalize',8:'Pass-through',9:'Inverting', 10:'PowerAssist',11:'Power supply',244:'Sustain',252:'External control' }.get(v, 'Unknown') }} # Keep the existing charger entities and energy history. - name: Charger Charge State availability: "{{ is_number(states('sensor.multiplus_charge_state_raw')) }}" state: >- {% set v = states('sensor.multiplus_charge_state_raw') | int(-1) %} {{ { 0:'Initialising',1:'Bulk',2:'Absorption',3:'Float',4:'Storage', 5:'Absorption repeat',6:'Forced absorption',7:'Equalize', 8:'Bulk stopped',9:'Unknown' }.get(v, 'Unknown') }} - name: MultiPlus Active Input unique_id: multiplus_active_input availability: "{{ is_number(states('sensor.multiplus_active_input_raw')) }}" state: >- {{ {0:'AC input 1',1:'AC input 2',240:'Disconnected'} .get(states('sensor.multiplus_active_input_raw') | int(-1), 'Unknown') }} # VE.Bus DC current is positive while charging and negative while inverting. - name: MultiPlus DC Power unique_id: multiplus_dc_power unit_of_measurement: "W" device_class: power state_class: measurement availability: >- {{ is_number(states('sensor.multiplus_battery_voltage')) and is_number(states('sensor.multiplus_battery_current')) }} state: >- {{ (states('sensor.multiplus_battery_voltage') | float(0) * states('sensor.multiplus_battery_current') | float(0)) | round(1) }} - name: "Charger DC Wattage" unique_id: charger_dc_wattage unit_of_measurement: "W" device_class: power state_class: measurement availability: "{{ is_number(states('sensor.multiplus_dc_power')) }}" state: >- {{ [states('sensor.multiplus_dc_power') | float(0), 0] | max }} - name: MultiPlus Inverter DC Power unique_id: multiplus_inverter_dc_power unit_of_measurement: "W" device_class: power state_class: measurement availability: "{{ is_number(states('sensor.multiplus_dc_power')) }}" state: >- {{ [0 - states('sensor.multiplus_dc_power') | float(0), 0] | max }} - binary_sensor: - name: MultiPlus AC Input Connected unique_id: multiplus_ac_input_connected device_class: power # Register 29 identifies the selected input; it alone does not establish # that the Multi is using AC. Keep the entity ID, but report active use. availability: >- {{ states('sensor.multiplus_active_input_raw') | int(-1) in [0, 1, 240] and states('sensor.multiplus_mode_raw') | int(-1) in [1, 2, 3, 4] and states('sensor.multiplus_state_raw') | int(-1) in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 244, 252] }} state: >- {{ states('sensor.multiplus_active_input_raw') | int(-1) in [0, 1] and states('sensor.multiplus_mode_raw') | int(-1) in [1, 2, 3] and states('sensor.multiplus_state_raw') | int(-1) in [3, 4, 5, 6, 7, 8, 10, 11, 244, 252] }} - name: MultiPlus High Temperature Alarm unique_id: multiplus_high_temperature_alarm device_class: problem availability: >- {{ states('sensor.multiplus_high_temperature_alarm_raw') | int(-1) in [0, 1, 2] }} state: "{{ states('sensor.multiplus_high_temperature_alarm_raw') | int(0) > 0 }}" - name: MultiPlus Low Battery Alarm unique_id: multiplus_low_battery_alarm device_class: problem availability: >- {{ states('sensor.multiplus_low_battery_alarm_raw') | int(-1) in [0, 1, 2] }} state: "{{ states('sensor.multiplus_low_battery_alarm_raw') | int(0) > 0 }}" - name: MultiPlus Overload Alarm unique_id: multiplus_overload_alarm device_class: problem availability: >- {{ states('sensor.multiplus_overload_alarm_raw') | int(-1) in [0, 1, 2] }} state: "{{ states('sensor.multiplus_overload_alarm_raw') | int(0) > 0 }}" - name: MultiPlus Ripple Alarm unique_id: multiplus_ripple_alarm device_class: problem availability: >- {{ states('sensor.multiplus_ripple_alarm_raw') | int(-1) in [0, 1, 2] }} state: "{{ states('sensor.multiplus_ripple_alarm_raw') | int(0) > 0 }}" - name: MultiPlus Temperature Sensor Alarm unique_id: multiplus_temperature_sensor_alarm device_class: problem availability: >- {{ states('sensor.multiplus_temperature_sensor_alarm_raw') | int(-1) in [0, 1, 2] }} state: "{{ states('sensor.multiplus_temperature_sensor_alarm_raw') | int(0) > 0 }}" - name: MultiPlus Voltage Sensor Alarm unique_id: multiplus_voltage_sensor_alarm device_class: problem availability: >- {{ states('sensor.multiplus_voltage_sensor_alarm_raw') | int(-1) in [0, 1, 2] }} state: "{{ states('sensor.multiplus_voltage_sensor_alarm_raw') | int(0) > 0 }}" - name: MultiPlus Grid Lost Alarm unique_id: multiplus_grid_lost_alarm device_class: problem availability: >- {{ states('sensor.multiplus_grid_lost_alarm_raw') | int(-1) in [0, 2] }} state: "{{ is_state('sensor.multiplus_grid_lost_alarm_raw', '2') }}" - name: MultiPlus PowerAssist Enabled unique_id: multiplus_powerassist_enabled availability: >- {{ states('sensor.multiplus_powerassist_enabled_raw') | int(-1) in [0, 1] }} state: "{{ is_state('sensor.multiplus_powerassist_enabled_raw', '1') }}" - name: MultiPlus UPS Enabled unique_id: multiplus_ups_enabled availability: >- {{ states('sensor.multiplus_ups_function_raw') | int(-1) in [0, 1] }} # Victron register 109 uses 0 for enabled and 1 for disabled. state: "{{ is_state('sensor.multiplus_ups_function_raw', '0') }}" # These controls read their state from the Multi; they never write on startup. # GX/Digital Multi Control/VE.Bus BMS settings can restrict remote control. - select: - name: MultiPlus Mode unique_id: multiplus_mode icon: mdi:power-settings availability: >- {{ states('sensor.multiplus_mode_raw') | int(-1) in [1, 2, 3, 4] }} state: >- {{ {1:'Charger only',2:'Inverter only',3:'On',4:'Off'} .get(states('sensor.multiplus_mode_raw') | int(-1), 'Unknown') }} options: "{{ ['On', 'Charger only', 'Inverter only', 'Off'] }}" select_option: - condition: template value_template: >- {{ states('sensor.multiplus_mode_raw') | int(-1) in [1, 2, 3, 4] and option in ['On', 'Charger only', 'Inverter only', 'Off'] }} - action: modbus.write_register data: hub: victron_gx slave: *multiplus_unit_id address: 33 value: "{{ {'Charger only':1,'Inverter only':2,'On':3,'Off':4}[option] }}" - delay: seconds: 2 - action: homeassistant.update_entity target: entity_id: - sensor.multiplus_mode_raw - sensor.multiplus_state_raw - sensor.multiplus_active_input_raw - number: - name: MultiPlus AC Input Current Limit unique_id: multiplus_ac_input_current_limit icon: mdi:current-ac device_class: current unit_of_measurement: "A" min: 0 # Van shore-power plug rating; this is a UI bound, not a startup setting. max: 30 step: 0.1 availability: >- {{ is_number(states('sensor.multiplus_ac_input_current_limit_readback')) and states('sensor.multiplus_ac_input_current_limit_readback') | float(-1) >= 0 }} state: "{{ states('sensor.multiplus_ac_input_current_limit_readback') | float(0) }}" set_value: - condition: template value_template: >- {{ is_number(states('sensor.multiplus_ac_input_current_limit_readback')) and is_number(value) and 0 <= value | float(-1) <= 30 }} - action: modbus.write_register data: hub: victron_gx slave: *multiplus_unit_id address: 22 # Register 22 is in tenths of an amp: 10.8 A -> 108. value: "{{ (value | float * 10) | round(0) | int }}" - delay: seconds: 2 - action: homeassistant.update_entity target: entity_id: sensor.multiplus_ac_input_current_limit_readback sensor: - platform: integration source: sensor.dc_wattage name: DC System Energy unit_prefix: k round: 2 method: trapezoidal max_sub_interval: minutes: 5 - platform: integration source: sensor.solar_wattage name: Solar Yield unit_prefix: k round: 2 method: trapezoidal max_sub_interval: minutes: 5 - platform: integration source: sensor.charger_dc_wattage name: DC Charger Energy unit_prefix: k round: 2 method: trapezoidal max_sub_interval: minutes: 5 - platform: integration source: sensor.multiplus_inverter_dc_power name: MultiPlus Inverter DC Energy unique_id: multiplus_inverter_dc_energy unit_prefix: k round: 2 method: trapezoidal max_sub_interval: minutes: 5 utility_meter: dc_load_energy_daily: source: sensor.dc_system_energy cycle: daily dc_load_energy_monthly: source: sensor.dc_system_energy cycle: monthly solar_yield_daily: source: sensor.solar_yield cycle: daily solar_yield_monthly: source: sensor.solar_yield cycle: monthly charger_dc_wattage_daily: source: sensor.dc_charger_energy cycle: daily charger_dc_wattage_monthly: source: sensor.dc_charger_energy cycle: monthly multiplus_inverter_dc_energy_daily: source: sensor.multiplus_inverter_dc_energy cycle: daily multiplus_inverter_dc_energy_monthly: source: sensor.multiplus_inverter_dc_energy cycle: monthly