Hi all,
After reading a few post on here about flow measurements, I’ve bought a TUF-2000M with the small TS-2 sensors. This is running just fine over modbus with esphome on an ESP32 + RS485 converter. My config is as follows in case you’re also trying to do this:
uart:
id: mod_bus_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
# debug:
# direction: BOTH
modbus:
id: modbus1
uart_id: mod_bus_uart
send_wait_time: 500ms
modbus_controller:
- id: tuf2000m
address: 0x1
modbus_id: modbus1
setup_priority: -10
update_interval: 3s # TODO: Default is 60, makes more sense once in prod
sensor:
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow rate"
register_type: holding
address: 0x1 # Register 1
register_count: 2
value_type: FP32
device_class: "volume_flow_rate"
state_class: "measurement"
unit_of_measurement: "g/m"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Velocity"
register_type: holding
address: 0x3 # Register 3
register_count: 2
value_type: FP32
device_class: "speed"
state_class: "measurement"
unit_of_measurement: "m/s"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Positive Accumulator"
register_type: holding
address: 0x9 # Register 9
register_count: 2
value_type: FP32
device_class: "water"
state_class: "measurement"
unit_of_measurement: "g"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Temperature #1"
register_type: holding
address: 0x21 # Register 33
register_count: 2
value_type: FP32
device_class: "temperature"
state_class: "measurement"
unit_of_measurement: "°C"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Temperature #2"
register_type: holding
address: 0x23 # Register 35
register_count: 2
value_type: FP32
device_class: "temperature"
state_class: "measurement"
unit_of_measurement: "°C"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Signal Quality"
register_type: holding
address: 0x5C # Register 92
register_count: 1
value_type: U_WORD
lambda: |-
return (uint16_t)(x) & 0xff;
state_class: "measurement"
unit_of_measurement: "%"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Upstream Strength"
register_type: holding
address: 0x5D # Register 93
register_count: 1
value_type: U_WORD
state_class: "measurement"
lambda: |-
return (x/2048.0)*100.0;
unit_of_measurement: "%"
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Downstream Strength"
register_type: holding
address: 0x5E # Register 94
register_count: 1
value_type: U_WORD
state_class: "measurement"
lambda: |-
return (x/2048.0)*100.0;
unit_of_measurement: "%"
binary_sensor:
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error No Signal"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x1
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Low Signal"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x2
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Poor Signal"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x4
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Pipe Empty"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x8
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Hardware Failure"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x10
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Gain Ajusting"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x20
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Freq Overflow"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x40
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error RAM CS"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x100
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Clock"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x200
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Parameters CS"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x400
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error ROM CS"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x800
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Temp Circuits"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x1000
- platform: modbus_controller
modbus_controller_id: tuf2000m
name: "${friendly_name} Flow Meter Error Internal timer"
register_type: holding
address: 0x48 # Register 72
bitmask: 0x4000
What I have problems with is getting it to actually work though. I live in the US and have new 1" copper pipe (type L). When measuring these I get an OD of 28.6mm, ID of 26.0mm and a wall thickness of 1.3mm. (A bit thicker than the standard says it should be but that’s a good thing I guess. Plugging in the standard’s numbers makes no real difference.)
When feeding these parameters into the unit I get a distance of ~4mm in V setup and 11mm in a W setup. In either configuration I can get to a signal quality of ~85 with some variance between 78 and 90 over time and fiddling. However neither of these happens at the distance the unit indicates, I’m always a few mm off (it’s actually not clear how to exactly measure but I assume just between the sensors going by the images in the manual).
However going by the manual after this step the next one is to get the TOM/TOS ratio around 100 ±3. In neither setup I’ve gotten anywhere near this. In the V config it was around 111 and in the W config it’s 76%
The resulting flow numbers make no sense at all either. Even with all valves closed I’m running about 0.5 gallon/minute. Zeroing things out doesn’t improve the situation. Large or no flow makes no difference either.
Does anyone have this working by chance? Any tips you can share to get this working would be much appreciated!