Modbus write register

Hi, I’m trying to use this code copied from the net and adapted to my case to change the state of a Modbus register but I can’t get the desired result. Some idea?

external_components:
  - source:
      type: git
      url: https://github.com/martgras/esphome
      #ref: modbus-fix
      #ref: modbus-duplicate
      #ref: modbus_controller
      ref: modbus_number_write
    components: [modbus_controller]

number:
   - platform: modbus_controller
     modbus_controller_id: zcs
     id: modbus_eps_state
     name: "Modbus EPS State"
     address: 0x1029
     value_type: U_WORD
     lambda: "return x * 1.0; "
     write_lambda: |-
      ESP_LOGD("main", "Modbus Number incoming value = %f", x);
      uint16_t eps_state = x;
      payload.push_back(eps_state);
      return x * 1.0;
      options:
       "Option 0";
       "Option 1";


switch:
  - platform: template
    name: "EPS State Switch"
    id: eps_state_switch
    turn_on_action:
      - number.set:
          id: modbus_eps_state
          value: !lambda |-
            return id(eps_state).state + 1;
    turn_off_action:
      - number.set:
          id: modbus_eps_state
          value: !lambda |-
            return id(eps_state).state - 1;

Log

[10:31:24][D][modbus.number:055]: Updating register: connected Sensor=Modbus EPS State start address=0x1029 register count=1 new value=2.00 (val=2.00)
[10:31:25][D][modbus_controller:032]: Modbus command to device=1 register=0x1029 countdown=0 no response received - removed from send queue
2 Likes