Frizzlife smart water monitor

I haven’t fully tested this but I think this should work for you.

You can create a helper using the “Utility Meter” integration. It creates a helper, and you can set it to:
Name: Liters Since Reset (or Gals Since Reset)
Input Sensor: Volume Today
Meter reset cycle: No cycle
Meter reset offset: 0
Net consumption: false
Delta values: false
Periodically resetting: true
Sensor always available: whatever you want (true or false)

Then when you want to reset the helper count, use an automation with an action of:
Add action → Helpers → Utility Meter → Reset
And then choose entity: sensor.liters_since_reset

You can name the automation “Reset Filter Count” and manually run the action.

You can also add an automation “Replace Filter Notification” that triggers on a certain number of Liters (or Gals) accumulated on sensor.liters_since_reset, and set an action to send you a notification to “Replace the Filter”. And then manually reset filter count when you replaced the filter.

Or, you can combine both: set a trigger based on the number of liters (or gallons) you want. When it triggers, it will can do action1 and reset the value to 0 and then do action2 and send you a notification. This assumes you can replace the filter right away.

Edit: Just occurred to me that you may not be able to use an exact value as the increments to liters_since_reset is not guaranteed to be increments of 1, it may jump over your selected value without triggering. You will likely have to use an Above value selection - which may cause multiple notifications. You’ll have to play with this a bit so you don’t create a nuisance set of notifications.

1 Like

This is the reason why I added this to the energy monitoring section. Homeassistant does all the hard work, once tag the “Volume Today” entity with the class: water attribute, and configure the Water Consumption section of the Energy Configuration


You can then view the water consumption per hour / day / month / year.

1 Like

Hi forum,
I know this is a bit off topic however I am after some advice about the Frizzlife water monitor and valve which I purchased for repeated scheme water leaks often for several days at our acreage in Australia from irrigation failures as we are only there on weekends.
I need to connect this to Australian standard 240v DC power rather than the US 110v. I see it comes with a USB connection to a wall plug/transformer. Most USB plugs run at 5v so I am hoping it simply means attaching this to an Australian standard USB plug transformer such as from an old phone or tablet? Hopefully it is that simple or am I missing something?

Yes - it’s 5v USB power

Many thanks. I will try to hook it up over the Christmas break. This should be more widely publicized as the Flo seems to have the local market as it comes with a local plug

Just noticed that the latest version (2025.12.3) of Tuya_Local provided a file named: frizzlife_lp365p_watermonitorandshutdoff.yaml.

A couple of notes:

  1. It provides a device id of 89tojzdfimssmkuk which appears to some sort of generic 15 char device ID rather than a 22 char virtual ID.

  2. I tried using it but it wouldn’t find my lp365p - I’ll try some variations on configuration to see if I can get it to work.

  3. It does not provide a dps id of 15 - which is for the pressure sensor.

  4. It does have some interesting configurations which looks like a potential fix to get rid of my ugly select lists of time and volume flows for Mode 4,5 and 6.

Unfortunately, I don’t have any answers on how to use it yet. Hopefully I’ll have some time in the next little while to see if I can integrate it - or integrate to it. I’d love to have a working version of this included in Tuya Local.

Hi, Were you able to figure out how to make that yaml work ?

In case anybody lost their fixed frizzlife_lp365p_watermonitorandshutoff.yaml file with a Tuya Local update, here’s mine. Sensors work, but I haven’t done any tweaks to the various modes.

name: Water meter
products:
  - id: 89tojzdfimssmkuk
    manufacturer: Frizzlife
    model: LP365P
entities:
  # Valve
  - entity: valve
    class: water
    dps:
      - id: 1
        type: boolean
        name: valve

  # Temperature sensor - This doesn't actually work with the LP365P Pressure variant
  - entity: sensor
    class: temperature
    dps:
      - id: 12
        type: integer
        name: sensor
        unit: °F
        class: measurement
        mapping:
          - scale: 10.0
            invert: false
            transform: value * 9/5 + 32
        range:
          min: 32   # 0C
          max: 428  # 212C

  # Pressure Sensor
  - entity: sensor
    class: pressure
    dps:
      - id: 15
        type: integer
        name: sensor
        unit: psi
        class: measurement
        mapping:
          - scale: 10.0
        range:
          min: 0
          max: 99999

  # Protection Enabled Switch
  - entity: switch
    name: Protection Enabled
    dps:
      - id: 101
        type: boolean
        name: switch

  # Volume Today
  - entity: sensor
    class: water
    name: Volume Today
    dps:
      - id: 103
        type: integer
        optional: true
        name: sensor
        class: total_increasing
        unit: gal
        mapping:
          - scale: 10

  # Flow rate
  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate per Hour
    dps:
      - id: 104
        type: integer
        optional: true
        name: sensor
        class: measurement
        unit: gal/h
        mapping:
          - scale: 1

  # Current flow rate
  - entity: sensor
    class: volume_flow_rate
    name: Current Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: gal/min
        mapping:
          - scale: 1000.0
          
  # Leak Warning
  - entity: binary_sensor
    class: moisture
    name: Leak Warning
    dps:
      - id: 106
        type: boolean
        name: sensor

  # Leak Alarm
  - entity: binary_sensor
    name: Leak Alarm
    class: problem
    dps:
      - id: 107
        type: boolean
        name: sensor

  # Alarm Clear Button
  - entity: button
    name: Alarm Clear
    dps:
      - id: 108
        type: boolean
        name: button

  # Protection Mode Select
  - entity: select
    name: Protection Mode
    category: config
    dps:
      - id: 109
        type: string
        name: option
        mapping:
          - dps_val: "AUTO"
            value: "Auto"
          - dps_val: "ADVANCED_SETTING"
            value: "Advanced"

  # AUTO Mode #
  - entity: select
    name: "Auto mode"
    category: config
    dps:
      - id: 110
        type: string
        name: option
        mapping:
          - dps_val: "mode1"
            value: "Mode 1"
          - dps_val: "mode2"
            value: "Mode 2"
          - dps_val: "mode3"
            value: "Mode 3"
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: AUTO
            value: true
          - value: false

  # ADVANCED Mode #
  - entity: select
    name: "Advanced mode"
    category: config
    dps:
      - id: 111
        type: string
        name: option
        mapping:
          - dps_val: "mode4"
            value: "Mode 4"
          - dps_val: "mode5"
            value: "Mode 5"
          - dps_val: "mode6"
            value: "Mode 6"
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: ADVANCED_SETTING
            value: true
          - value: false

  # Mode4 allowed flow time
  - entity: number
    name: Allowed flow time
    class: duration
    category: config
    dps:
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: ADVANCED_SETTING
            value: true
          - value: false
      - id: 111
        type: string
        name: value
        unit: min
        range:
          min: 18
          max: 180
        mapping:
          - dps_val: mode4
            step: 6
            value_redirect: mode4_val
          - dps_val: mode5
            step: 6
            value_redirect: mode5_val
          - dps_val: mode6
            step: 6
            value_redirect: mode6_val
      - id: 112
        type: integer
        name: mode4_val
        precision: 0
        range:
          min: 3
          max: 30
        mapping:
          - scale: 0.1666666667
      - id: 113
        type: integer
        name: mode5_val
        precision: 0
        range:
          min: 3
          max: 30
        mapping:
          - scale: 0.1666666667
      - id: 114
        type: integer
        name: mode6_val
        precision: 0
        range:
          min: 3
          max: 30
        mapping:
          - scale: 0.1666666667

  # Mode4 allowed flow volume
  - entity: number
    name: Allowed flow volume
    category: config
    dps:
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: ADVANCED_SETTING
            value: true
          - value: false
      - id: 111
        type: string
        name: value
        unit: L
        range:
          min: 0
          max: 5000
        mapping:
          - dps_val: mode4
            step: 100
            value_redirect: mode4_val
          - dps_val: mode5
            step: 100
            value_redirect: mode5_val
          - dps_val: mode6
            step: 100
            value_redirect: mode6_val
      - id: 115
        type: integer
        name: mode4_val
        range:
          min: 0
          max: 50
        mapping:
          - dps_val: 0
            value: 50
          - scale: 0.01
      - id: 116
        type: integer
        name: mode5_val
        range:
          min: 0
          max: 50
        mapping:
          - dps_val: 0
            value: 50
          - scale: 0.01
      - id: 117
        type: integer
        name: mode6_val
        range:
          min: 0
          max: 50
        mapping:
          - dps_val: 0
            value: 50
          - scale: 0.01

I haven’t been able to spend any time on this lately as I’ve been busy with other commitments.

I hope to have some time in the next month.

It’s a bit of a pain to keep having to copy my personal copy back to the devices folder after an update, but at least it’s only a copy and no edits are required.

1 Like

I got Tuya Local to pick up my Frizzlife LP365-P with the built-in definition. First, I updated the firmware on the device. Then in integration creation I set the API version to 3.5, otherwise it gives you bad matches. All looks good.

i haven’t installed my unit yet, but I made a merged file to support both LP365 and LP365-P with detection for metric vs imperial units. Can I get some people to test this? If it looks good, I’ll submit it to tuya-local.

name: Smart Water Monitor
products:
  - id: eb0a8e6c88ec94012fduxa
    name: Frizzlife LP365P
  - id: eb1a9dccd17a663803qmrt
    name: Frizzlife LP365
entities:
  - entity: valve
    name: Valve
    class: water
    dps:
      - id: 1
        type: boolean
        name: valve

  # --- CONFIGURATION ---
  - entity: select
    name: Units
    category: config
    icon: "mdi:ruler-square"
    dps:
      - id: 102
        type: string
        name: option
        mapping:
          - dps_val: "us_units"
            value: "Imperial"
          - dps_val: "metric_unit"
            value: "Metric"

  # --- STATUS / DIAGNOSTICS ---
  - entity: sensor
    name: System Status
    class: enum
    category: diagnostic
    icon: "mdi:information-outline"
    dps:
      - id: 24
        type: integer
        name: sensor
        mapping:
          - dps_val: 0
            value: "Normal"
          - dps_val: 1
            value: "Warning"
          - dps_val: 2
            value: "Empty Pipe"
          - dps_val: 3
            value: "Fault"

  - entity: binary_sensor
    class: problem
    name: Leak Alarm
    dps:
      - id: 106
        type: boolean
        name: sensor

  - entity: binary_sensor
    class: moisture
    name: Moisture Detected
    dps:
      - id: 107
        type: boolean
        name: sensor

  - entity: binary_sensor
    class: problem
    name: Low Temperature Alarm
    dps:
      - id: 108
        type: boolean
        name: sensor

  - entity: button
    name: Alarm Clear
    category: config
    icon: "mdi:alarm-off"
    dps:
      - id: 125
        type: string
        name: button
        optional: true

  # --- TEMPERATURE ---
  - entity: sensor
    name: Water Temperature
    class: temperature
    dps:
      - id: 12
        type: integer
        name: sensor
        unit: F
        class: measurement
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    name: Water Temperature
    class: temperature
    dps:
      - id: 12
        type: integer
        name: sensor
        unit: C
        class: measurement
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  # --- PRESSURE (Optional) ---
  - entity: sensor
    class: pressure
    dps:
      - id: 15
        type: integer
        optional: true
        name: sensor
        unit: psi
        class: measurement
        mapping:
          - scale: 10.0
            range:
              min: 0
              max: 1450
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: pressure
    dps:
      - id: 15
        type: integer
        optional: true
        name: sensor
        unit: bar
        class: measurement
        mapping:
          - scale: 100.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  # --- VOLUME & FLOW ---
  - entity: sensor
    class: water
    name: Volume Today
    dps:
      - id: 103
        type: integer
        optional: true
        name: sensor
        class: total_increasing
        unit: gal
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: water
    name: Volume Today
    dps:
      - id: 103
        type: integer
        optional: true
        name: sensor
        class: total_increasing
        unit: L
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate per Hour
    dps:
      - id: 104
        type: integer
        optional: true
        name: sensor
        class: measurement
        unit: gal/h
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate per Hour
    dps:
      - id: 104
        type: integer
        optional: true
        name: sensor
        class: measurement
        unit: L/h
        mapping:
          - scale: 1.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  - entity: sensor
    class: volume_flow_rate
    name: Current Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: gal/h
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: volume_flow_rate
    name: Current Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: L/h
        mapping:
          - scale: 1000.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  # --- MODES & LIMITS ---
  - entity: switch
    name: Protection Enabled
    dps:
      - id: 101
        type: boolean
        name: switch

  - entity: select
    name: Protection Mode
    category: config
    dps:
      - id: 109
        type: string
        name: option
        mapping:
          - dps_val: "AUTO"
            value: "Auto"
          - dps_val: "ADVANCED_SETTING"
            value: "Advanced"

  - entity: select
    name: AUTO Mode
    category: config
    dps:
      - id: 110
        type: string
        name: option
        mapping:
          - dps_val: "mode1"
            value: "Mode 1"
          - dps_val: "mode2"
            value: "Mode 2"
          - dps_val: "mode3"
            value: "Mode 3"

  - entity: select
    name: ADVANCED Mode
    category: config
    dps:
      - id: 111
        type: string
        name: option
        mapping:
          - dps_val: "mode4"
            value: "Mode 4"
          - dps_val: "mode5"
            value: "Mode 5"
          - dps_val: "mode6"
            value: "Mode 6"

  - entity: number
    name: Mode4 Allowed Flow Time
    category: config
    dps:
      - id: 112
        type: integer
        optional: true
        name: value
        unit: min
        range:
          min: 1
          max: 1000
        mapping:
          - scale: 1.0

  - entity: number
    name: Mode4 Allowed Flow Volume
    category: config
    dps:
      - id: 115
        type: integer
        name: value
        unit: gal
        range:
          min: 0
          max: 5000
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: number
    name: Mode4 Allowed Flow Volume
    category: config
    dps:
      - id: 115
        type: integer
        name: value
        unit: L
        range:
          min: 0
          max: 20000
        mapping:
          - scale: 100.0
            constraint:
              id: 102
              dps_val: "metric_unit"```

Interesting updates!

I’ll see if I can find time to integrate into my version and test. Thanks everyone, glad to see folks with more knowledge than me getting involved. :slight_smile:

NOTE:
Frizzlife has removed the temperature sensor in the latest shipments of the LP365-P. I have a neighbour that purchased the LP365-P and we were trying to figure out why his app doesn’t show the temp - I confirmed with Frizzlife support that they intentionally removed the sensor.

The LP365 still has the temperature sensor.

I can certainly test out your YAML. I just updated my tuya_local and forgot to save a copy of my earlier yaml. Do I need to add the device all over again ? Or is there anyway to update existing device with correct YAML ?

Nevermind, I was able to find the custom yaml name in the logs and had a backup somewhere else. Once I added the file it works again.

Now when I used your file, Temperature was showing unavailable and my values were showing abnormally high, first 3 highlighted rows are with your yaml and rest of them are with @ wundrellama yaml

I have US Version with no pressure sensor.

Here is a fixed Yaml that makes the temperature optional as well (my LP365-P has one) and fixes the scale for the US units which I had an extra zero on.

name: Smart Water Monitor
products:
  - id: eb0a8e6c88ec94012fduxa
    name: Frizzlife LP365P
  - id: eb1a9dccd17a663803qmrt
    name: Frizzlife LP365
entities:
  - entity: valve
    name: Valve
    class: water
    dps:
      - id: 1
        type: boolean
        name: valve

  # --- CONFIGURATION ---
  - entity: select
    name: Units
    category: config
    icon: "mdi:ruler-square"
    dps:
      - id: 102
        type: string
        name: option
        mapping:
          - dps_val: "us_units"
            value: "Imperial"
          - dps_val: "metric_unit"
            value: "Metric"

  # --- STATUS / DIAGNOSTICS ---
  - entity: sensor
    name: System Status
    class: enum
    category: diagnostic
    icon: "mdi:information-outline"
    dps:
      - id: 24
        type: integer
        name: sensor
        mapping:
          - dps_val: 0
            value: "Normal"
          - dps_val: 1
            value: "Warning"
          - dps_val: 2
            value: "Empty Pipe"
          - dps_val: 3
            value: "Fault"

  - entity: binary_sensor
    class: problem
    name: Leak Alarm
    dps:
      - id: 106
        type: boolean
        name: sensor

  - entity: binary_sensor
    class: moisture
    name: Moisture Detected
    dps:
      - id: 107
        type: boolean
        name: sensor

  - entity: binary_sensor
    class: problem
    name: Low Temperature Alarm
    dps:
      - id: 108
        type: boolean
        name: sensor

  - entity: button
    name: Alarm Clear
    category: config
    icon: "mdi:alarm-off"
    dps:
      - id: 125
        type: string
        name: button
        optional: true

  # --- TEMPERATURE (Optional & Dynamic) ---
  - entity: sensor
    name: Water Temperature
    class: temperature
    dps:
      - id: 12
        type: integer
        optional: true
        name: sensor
        unit: F
        class: measurement
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"
        range:
          min: 32
          max: 428

  - entity: sensor
    name: Water Temperature
    class: temperature
    dps:
      - id: 12
        type: integer
        optional: true
        name: sensor
        unit: C
        class: measurement
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "metric_unit"
        range:
          min: 0
          max: 212

  # --- PRESSURE (Optional) ---
  - entity: sensor
    class: pressure
    dps:
      - id: 15
        type: integer
        optional: true
        name: sensor
        unit: psi
        class: measurement
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"
        range:
          min: 0
          max: 99999

  - entity: sensor
    class: pressure
    dps:
      - id: 15
        type: integer
        optional: true
        name: sensor
        unit: bar
        class: measurement
        mapping:
          - scale: 100.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  # --- VOLUME & FLOW ---
  - entity: sensor
    class: water
    name: Volume Today
    dps:
      - id: 103
        type: integer
        optional: true
        name: sensor
        class: total_increasing
        unit: gal
        mapping:
          - scale: 10 
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: water
    name: Volume Today
    dps:
      - id: 103
        type: integer
        optional: true
        name: sensor
        class: total_increasing
        unit: L
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate per Hour
    dps:
      - id: 104
        type: integer
        optional: true
        name: sensor
        class: measurement
        unit: gal/h
        mapping:
          - scale: 1 
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate per Hour
    dps:
      - id: 104
        type: integer
        optional: true
        name: sensor
        class: measurement
        unit: L/h
        mapping:
          - scale: 1.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  - entity: sensor
    class: volume_flow_rate
    name: Current Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: gal/min 
        mapping:
          - scale: 1000.0 
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: sensor
    class: volume_flow_rate
    name: Current Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: L/h
        mapping:
          - scale: 1000.0
            constraint:
              id: 102
              dps_val: "metric_unit"

  # --- MODES & LIMITS ---
  - entity: switch
    name: Protection Enabled
    dps:
      - id: 101
        type: boolean
        name: switch

  - entity: select
    name: Protection Mode
    category: config
    dps:
      - id: 109
        type: string
        name: option
        mapping:
          - dps_val: "AUTO"
            value: "Auto"
          - dps_val: "ADVANCED_SETTING"
            value: "Advanced"

  - entity: select
    name: AUTO Mode
    category: config
    dps:
      - id: 110
        type: string
        name: option
        mapping:
          - dps_val: "mode1"
            value: "Mode 1"
          - dps_val: "mode2"
            value: "Mode 2"
          - dps_val: "mode3"
            value: "Mode 3"

  - entity: select
    name: ADVANCED Mode
    category: config
    dps:
      - id: 111
        type: string
        name: option
        mapping:
          - dps_val: "mode4"
            value: "Mode 4"
          - dps_val: "mode5"
            value: "Mode 5"
          - dps_val: "mode6"
            value: "Mode 6"

  - entity: number
    name: Mode4 Allowed Flow Time
    category: config
    dps:
      - id: 112
        type: integer
        optional: true
        name: value
        unit: min
        range:
          min: 1
          max: 1000
        mapping:
          - scale: 1.0

  - entity: number
    name: Mode4 Allowed Flow Volume
    category: config
    dps:
      - id: 115
        type: integer
        name: value
        unit: gal
        range:
          min: 0
          max: 5000
        mapping:
          - scale: 10.0
            constraint:
              id: 102
              dps_val: "us_units"

  - entity: number
    name: Mode4 Allowed Flow Volume
    category: config
    dps:
      - id: 115
        type: integer
        name: value
        unit: L
        range:
          min: 0
          max: 20000
        mapping:
          - scale: 100.0
            constraint:
              id: 102
              dps_val: "metric_unit"

I noticed that ids 106-108 in your YAML ae different than previous YAML. Which ones are correct ?

I got those from the Tuya spec, if they are wrong or translated wrong, let me know.

Hi Roy, finally got around to testing your YAML. Everything looks good for me except water temperature. its showing up as -7.5C when it should be about 18.5C. I’m guessing the cause is using DPS 102 as the selector for temperature. Since my device is configured for us-units for volume, but metric units for water temperature, it might be using a different DPS for water temp units?

Other than that, everything seems to be working very well. thanks for the update - looking forward to this being merged.