esphome / issues

Issue Tracker for ESPHome
https://esphome.io/
290 stars 35 forks source link

No initial state for modbus_controller number if a sensor with the same address ist configured #2845

Closed Bascht74 closed 8 months ago

Bascht74 commented 2 years ago

The problem

Hi, I used a number entity and a sensor entity that both have the same (holding) address. After starting esphome modbus controller modbus_controller reads the address and populates the state to the sensor entity, but not to the number entity...

Here you can see Hot water bottom and Hot ware top temperature empty after restart: image

Another number entity (temperature set = 24°C) is OK, as there is not sensor entity with the same address

The sensors entities are OK: image

Which version of ESPHome has the issue?

2021.12.1

What type of installation are you using?

Home Assistant Add-on

Which version of Home Assistant has the issue?

./.

What platform are you using?

ESP32

Board

m5stack-atom

Component causing the issue

modbus_controller

Example YAML snippet

number:
  - platform: modbus_controller
    modbus_controller_id: nilan_modbus_controller
    name: "${upper_devicename} Hot water top temperature set point"
    id: nilan_hot_water_top_temp_set_point
    mode: box
    unit_of_measurement: '°C'
    min_value: 30
    max_value: 65
    step: 1.0
    address: 1700
    force_new_range: true
    use_write_multiple: true
    entity_category: config
    skip_updates: 0
    multiply: 100
  - platform: modbus_controller
    modbus_controller_id: nilan_modbus_controller
    name: "${upper_devicename} Hot water bottom temperature set point"
    id: nilan_hot_water_bottom_temp_set_point 
    mode: box
    unit_of_measurement: '°C'
    min_value: 30
    max_value: 65
    step: 1.0
    address: 1701
    force_new_range: true
    use_write_multiple: true
    entity_category: config
    skip_updates: 0
    multiply: 100 #
  - platform: modbus_controller
    modbus_controller_id: nilan_modbus_controller
    name: "${upper_devicename} Temperature set"
    id: nilan_target_temperature_set
    mode: box
    unit_of_measurement: '°C'
    min_value: 15
    max_value: 30
    step: 1.0
    address: 1004
    force_new_range: true
    use_write_multiple: true
    entity_category: config
    skip_updates: 0
    multiply: 100

sensor:
  - platform: modbus_controller
    name: "${upper_devicename} Hot water top temperature set" # Top temperature setpoint T11
    id: nilan_hot_water_top_temp_set
    unit_of_measurement: °C
    accuracy_decimals: 1
    device_class: temperature
    register_type: holding
    address: 1700
    filters:
      - multiply: 0.01
    entity_category: diagnostic
  - platform: modbus_controller
    name: "${upper_devicename} Hot water bottom temperature set" # Top temperature setpoint T12
    id: nilan_hot_water_bottom_temp_set
    unit_of_measurement: °C
    accuracy_decimals: 1
    device_class: temperature
    register_type: holding
    address: 1701
    filters:
      - multiply: 0.01 
    entity_category: diagnostic

Anything in the logs that might be useful for us?

[22:21:08][C][modbus.number:074]: modbus.numberModbus Number 'Nilan Hot water top temperature set point'
[22:21:08][C][modbus.number:074]: modbus.number  Unit of Measurement: '°C'
[22:21:08][C][modbus.number:074]: modbus.numberModbus Number 'Nilan Hot water bottom temperature set point'
[22:21:08][C][modbus.number:074]: modbus.number  Unit of Measurement: '°C'
[22:21:08][C][modbus.number:074]: modbus.numberModbus Number 'Nilan Temperature set'
[22:21:08][C][modbus.number:074]: modbus.number  Unit of Measurement: '°C'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Nilan Hot water top temperature set'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'temperature'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  State Class: ''
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  Unit of Measurement: '°C'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  Accuracy Decimals: 1
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Nilan Hot water bottom temperature set'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'temperature'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  State Class: ''
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  Unit of Measurement: '°C'
[22:21:18][C][modbus_controller.sensor:010]: modbus_controller.sensor  Accuracy Decimals: 1
[22:21:33][D][modbus.number:023]: Number new state : 24.00
[22:21:33][D][number:036]: 'Nilan Temperature set': Sending state 24.000000
[22:21:34][D][modbus_controller.sensor:025]: Sensor new state: 5500.00
[22:21:34][D][sensor:113]: 'Nilan Hot water top temperature set': Sending state 55.00000 °C with 1 decimals of accuracy
[22:21:34][D][modbus_controller.sensor:025]: Sensor new state: 5500.00
[22:21:34][D][sensor:113]: 'Nilan Hot water bottom temperature set': Sending state 55.00000 °C with 1 decimals of accuracy

Additional information

As you can see there is no log for the number entity with address 1700

If you delete the sensors, it is OK:

[22:35:08][C][modbus.number:074]: modbus.numberModbus Number 'Nilan Hot water top temperature set point'
[22:35:08][C][modbus.number:074]: modbus.number  Unit of Measurement: '°C'
[22:35:08][C][modbus.number:074]: modbus.numberModbus Number 'Nilan Hot water bottom temperature set point'
[22:35:08][C][modbus.number:074]: modbus.number  Unit of Measurement: '°C'
[22:35:08][D][modbus.number:023]: Number new state : 55.00
[22:35:08][D][number:036]: 'Nilan Hot water top temperature set point': Sending state 55.000000
[22:35:09][D][modbus.number:023]: Number new state : 55.00
[22:35:09][D][number:036]: 'Nilan Hot water bottom temperature set point': Sending state 55.000000
[22:35:31][D][modbus.number:023]: Number new state : 55.00
[22:35:31][D][number:036]: 'Nilan Hot water top temperature set point': Sending state 55.000000
[22:35:31][D][modbus.number:023]: Number new state : 55.00
[22:35:31][D][number:036]: 'Nilan Hot water bottom temperature set point': Sending state 55.000000
[22:36:01][D][modbus.number:023]: Number new state : 55.00
[22:36:01][D][number:036]: 'Nilan Hot water top temperature set point': Sending state 55.000000
[22:36:01][D][modbus.number:023]: Number new state : 55.00
[22:36:01][D][number:036]: 'Nilan Hot water bottom temperature set point': Sending state 55.000000

Btw. It would be nice if you could see the address in the log, e.g. [22:21:33][D][modbus.number:023]: Address: 1004 (holding), entity type: Number, new state: 24.00

martgras commented 2 years ago

The items must have a unique combination of adress, register_type and bitmask. A possible workaround is setting bitmask 0x7fffffff for the sensor.

Bascht74 commented 1 year ago

@martgras Hi, should I close this issue, as there is a workaround or are you planning to fix it (e.g. add the entity type to the unique combination)?