- tsp
Last update 21 May 2025
5 mins
In this article, we explore the iSentrol Mod X0, a versatile and compact flow sensor module designed to read and interpret pulses from standard flow transducers. Acting as a digital water flow meter, the Mod X0 supports ModBus communication, allowing for seamless integration into a variety of data logging and automation setups.
Iβve tested the module in two real-world scenarios:
This post includes:
Β | Β |
---|---|
Baud rate | 9600 |
ModBus address | 1 |
Flowmeter constant | 500 |
Supported commands are:
Unfortunately the documentation supplied by many merchants is not correct. Iβve found one in a YouTube video by the manufacturer though that seems to fit when applied to my sensor:
Address | Name | Description | Unit | Scaling / Notes |
---|---|---|---|---|
0x0000 |
Baud Rate | Communication baud rate setting | - | Value is 0: 2400, 1: 4800, 2: 9600, 3: 19200. Reverts to 9600 on invalid values. |
0x0001 |
Device Address | ModBus device ID | - | Range: 1β247 (0x0001 β0x00F7 ). |
0x0002 |
Decimal places | Number of decimal places, defaults to 2 | - | Not sure of effect, default 2 |
0x0003 |
Sensor Pulse K Factor | Number of pulses per liter | pulses/L | Stored as 100x the actual value (50000 is 500.00 pulses/L) |
0x0004 |
Permanent Cumulative Flow β High Register | High 16 bits of permanently stored accumulated volume | Liters | Combine with 0x0004 : Total_Liters = High * 65536 + Low . |
0x0005 |
Permanent Cumulative Flow β Low Register | Low 16 bits of permanently stored accumulated volume | Liters | See above. Rolls into 0x0003 when reaching 65535. |
0x0006 |
Permanent Cumulative Flow β Decimal | Decimal portion of cumulative volume | Liters | Stored as 100Γ actual decimal value. E.g., 25 β 0.25 L . |
0x0007 |
Permanent Accumulated Pulse Counter | Pulse counter until 1L is reached | pulses | Resets to 0 after 1L worth of pulses is accumulated (based on K factor). |
0x0008 |
? | ? | - | Reserved |
0x0009 |
? | ? | L/min | Reserved (default 100) |
0x000A |
? | ? | L/min | Reserved (default 1500) |
0x000B |
? | ? | - | Reserved (default 4000) |
0x000C |
? | ? | - | Reserved (default 50) |
0x000D |
Temporary Cumulative Flow β High Register | High 16 bits of temporarily stored accumulated volume (cleared on power loss) | Liters | Same format as 0x0003/0x0004 , resets on power loss. |
0x000E |
Temporary Cumulative Flow β Low Register | Low 16 bits of temporarily stored accumulated volume | Liters | See above. |
0x000F |
Temporary Cumulative Flow β Decimal | Decimal portion of temporary cumulative volume | Liters | Stored as 100Γ actual decimal value. Resets on power loss. |
0x0010 |
Temporary Accumulated Pulse Counter | Pulse counter toward 1L for temporary total | pulses | Same as 0x0006 , but for temporary flow. |
0x0011 |
Real-Time Flow Rate | Instantaneous flow rate | L/min | Stored as 100Γ actual value. E.g., 315 β 3.15 L/min . |
0x0012 |
Real-Time Pulse Rate | Current sensor pulse frequency | Hz | Useful for debugging and calibration. |
0x0013 |
? | ? | - | Reserved |
0x0014 |
? | ? | - | Reserved |
The K factor represents the number of pulses generated per liter of flow. Since the Mod X0
stores only integer values, the K factor is scaled by a factor of 100 to retain two decimal places of precision, enabling a resolution down to 0.01 pulses per liter. The stored value in the register can thus be calculated as:
$
\begin{aligned}
K_{reg} &= 100 * \frac{f}{Q}
&= 100 * \frac{\frac{pulses}{s}}{\frac{l}{s}} = 100 * \frac{pulses}{liters}
\end{aligned}
$
The total accumulated flow volume (in liters) is stored across three 16-bit registers:
0x0004
: high word of the integer part ($F_{high}$)0x0005
: low word of the integer part ($F_{low}$)0x0006
: fractional part scaled by 100 ($F_{frac}$)The total value can be reconstructed as:
$ \begin{aligned} F_{total} = F_{high} * 65536 + F_{low} + \frac{F_{frac}}{100} \end{aligned} $
This register group behaves identically to the permanent cumulative flow, representing a resettable volume counter (in liters). It is stored in:
0x000D
: high word of integer part ($F_{high}$)0x000E
: low word of integer part ($F_{low}$)0x000F
: fractional component again scaled by 100 ($F_{frac}$)The value is calculated using the same formula:
$ \begin{aligned} F_{total} = F_{high} * 65536 + F_{low} + \frac{F_{frac}}{100} \end{aligned} $
Registers 0x0007
and 0x0010
store the raw pulse counts for the permanent and temporary flow measurements, respectively. These counters increment with each detected pulse and can be used for low-level diagnostics or debugging. Once the count reaches the stored $K$ value, it indicates that one liter of fluid has passed and they wrap to zero again.
The real-time flow rate is stored in register 0x0011
, expressed in liters per minute, scaled by a factor of 100 for precision. The actual flow rate is obtained as:
$ \begin{aligned} Q &= \frac{F_{flow}}{100} \end{aligned} $
Dipl.-Ing. Thomas Spielauer, Wien (webcomplains389t48957@tspi.at)
This webpage is also available via TOR at http://rh6v563nt2dnxd5h2vhhqkudmyvjaevgiv77c62xflas52d5omtkxuid.onion/