Frizzlife smart water monitor

That seems to work. Thanks Roy

One final version as I had removed support for the original LP365-P and didn’t have advanced mode 5 and 6 in there.

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

  # --- CONFIGURATION ---
  - entity: select
    name: Temperature Unit
    category: config
    icon: "mdi:thermometer"
    dps:
      - id: 20
        type: string
        name: option
        optional: true
        mapping:
          - dps_val: "f"
            value: "Fahrenheit"
          - dps_val: "c"
            value: "Celsius"

  - entity: select
    name: Volume Units
    category: config
    icon: "mdi:ruler-square"
    dps:
      - id: 102
        type: string
        name: option
        mapping:
          - dps_val: "us_units"
            value: "Gallon"
          - dps_val: "metric_unit"
            value: "Liter"

  # --- 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"

  # Leak Warning
  - entity: binary_sensor
    class: moisture
    name: Leak Warning
    dps:
      - id: 106
        type: boolean
        name: sensor

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

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

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

  # --- TEMPERATURE (Optional & Dynamic based on DPS 20) ---
  # Temperature sensor - This doesn't actually work with the LP365P Pressure variant
  - 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: 20
              dps_val: "f"
        range:
          min: -40
          max: 212

  - 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: 20
              dps_val: "c"
        range:
          min: -40
          max: 100

  # --- PRESSURE (Optional) ---
  # Pressure Sensor
  - 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 ---
  # 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 
            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"

  # 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 
            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"

  # 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 
            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 ---
  # Protection Enabled Switch
  - entity: switch
    name: Protection Enabled
    dps:
      - id: 101
        type: boolean
        name: switch

  # 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

  # Allowed flow time (Dynamic Redirect)
  - entity: number
    name: Advanced Allowed Flow Time
    category: config
    dps:
      - id: 111
        type: string
        name: value
        unit: min
        range:
          min: 1
          max: 1000
        mapping:
          - dps_val: "mode4"
            value_redirect: mode4_time
          - dps_val: "mode5"
            value_redirect: mode5_time
          - dps_val: "mode6"
            value_redirect: mode6_time
      - id: 112
        type: integer
        name: mode4_time
        mapping:
          - scale: 1.0
      - id: 113
        type: integer
        name: mode5_time
        mapping:
          - scale: 1.0
      - id: 114
        type: integer
        name: mode6_time
        mapping:
          - scale: 1.0
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            value: true
          - value: false

  # Allowed flow volume (Imperial - Dynamic Redirect)
  - entity: number
    name: Advanced Allowed Flow Volume
    category: config
    dps:
      - id: 111
        type: string
        name: value
        unit: gal
        range:
          min: 0
          max: 5000
        mapping:
          - dps_val: "mode4"
            value_redirect: mode4_vol
            constraint:
              id: 102
              dps_val: "us_units"
          - dps_val: "mode5"
            value_redirect: mode5_vol
            constraint:
              id: 102
              dps_val: "us_units"
          - dps_val: "mode6"
            value_redirect: mode6_vol
            constraint:
              id: 102
              dps_val: "us_units"
      - id: 115
        type: integer
        name: mode4_vol
        mapping:
          - scale: 10.0
      - id: 116
        type: integer
        name: mode5_vol
        mapping:
          - scale: 10.0
      - id: 117
        type: integer
        name: mode6_vol
        mapping:
          - scale: 10.0
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            value: true
          - value: false

  # Allowed flow volume (Metric - Dynamic Redirect)
  - entity: number
    name: Advanced Allowed Flow Volume
    category: config
    dps:
      - id: 111
        type: string
        name: value
        unit: L
        range:
          min: 0
          max: 20000
        mapping:
          - dps_val: "mode4"
            value_redirect: mode4_vol
            constraint:
              id: 102
              dps_val: "metric_unit"
          - dps_val: "mode5"
            value_redirect: mode5_vol
            constraint:
              id: 102
              dps_val: "metric_unit"
          - dps_val: "mode6"
            value_redirect: mode6_vol
            constraint:
              id: 102
              dps_val: "metric_unit"
      - id: 115
        type: integer
        name: mode4_vol
        mapping:
          - scale: 100.0
      - id: 116
        type: integer
        name: mode5_vol
        mapping:
          - scale: 100.0
      - id: 117
        type: integer
        name: mode6_vol
        mapping:
          - scale: 100.0
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            value: true
          - value: false

  # Advanced: Allowed Flow Rate
  - entity: switch
    name: Ignore Minimal Flow
    category: config
    dps:
      - id: 118
        type: boolean
        name: switch
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            value: true
          - value: false

  - entity: select
    name: Allowed Minimal Flow Rate
    category: config
    dps:
      - id: 119
        type: integer
        name: option
        mapping:
          - dps_val: 0
            value: "0.01 Gal / 2.5 L"
          - dps_val: 1
            value: "0.02 Gal / 5.0 L"
          - dps_val: 2
            value: "0.03 Gal / 7.5 L"
          - dps_val: 3
            value: "0.04 Gal / 10.0 L"
          - dps_val: 4
            value: "0.05 Gal / 12.5 L"
          - dps_val: 5
            value: "0.06 Gal / 15.0 L"
          - dps_val: 6
            value: "0.07 Gal / 17.5 L"
          - dps_val: 7
            value: "0.08 Gal / 20.0 L"
          - dps_val: 8
            value: "0.09 Gal / 22.5 L"
          - dps_val: 9
            value: "0.10 Gal / 25.0 L"
      - id: 118
        type: boolean
        name: available
        mapping:
          - dps_val: true
            value: true
          - value: false

Anyone tested the new minimal flow rate under advanced? Does that only work if it’s set to one of the advanced modes (4,5 or 6)?

I’m considering getting one of these and wanted to see if anyone can give me their current experiences with this? Anyone install this at the water heater? Is this thing waterproof if installed outside?

Latest version with added error codes. Sadly the maintainer of Tuya-Local will not take this as it violates how he wants things done. You will need to tweak for your variant, this is for the LP365-P with no temp sensor.

name: Smart Water Monitor
products:
  - #id: eb7fbefe12b454b8922xvz # No temperature sensor
    id: ""
    manufacturer: Frizzlife
    model: LP365P
    name: Frizzlife LP365P
entities:
  # Valve
  - entity: valve
    name: Valve
    class: water
    dps:
      - id: 1
        type: boolean
        name: valve

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

  # --- 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"
          - dps_val: 4
            value: "Connection Error"
          - dps_val: 5
            value: "Status 5 - Unknown"

  # Leak Warning
  - entity: binary_sensor
    class: moisture
    name: Leak Warning
    dps:
      - id: 106
        type: boolean
        name: sensor

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

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

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

  - entity: sensor
    name: Water Pressure
    class: pressure
    dps:
      - id: 15
        type: integer
        optional: true
        name: sensor
        unit: bar
        class: measurement
        mapping:
          - scale: 100.0
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "metric_unit"
            value: true
          - value: false

  # --- 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
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "us_units"
            value: true
          - value: false

  - 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
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "metric_unit"
            value: true
          - value: false

  - 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.0
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "us_units"
            value: true
          - value: false

  - 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
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "metric_unit"
            value: true
          - value: false

  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: gal/min
        mapping:
          - scale: 1000.0
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "us_units"
            value: true
          - value: false

  - entity: sensor
    class: volume_flow_rate
    name: Flow Rate
    dps:
      - id: 105
        type: integer
        name: sensor
        class: measurement
        unit: L/h
        mapping:
          - scale: 1000.0
      - id: 102
        type: string
        name: available
        mapping:
          - dps_val: "metric_unit"
            value: true
          - value: false

  # --- 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"

  # 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

  # Allowed flow time (Dynamic Redirect)
  - entity: number
    name: Advanced Allowed Flow Time
    category: config
    dps:
      - id: 111
        type: string
        name: value
        unit: min
        range:
          min: 1
          max: 1000
        mapping:
          - dps_val: "mode4"
            value_redirect: mode4_time
          - dps_val: "mode5"
            value_redirect: mode5_time
          - dps_val: "mode6"
            value_redirect: mode6_time
      - id: 112
        type: integer
        name: mode4_time
        mapping:
          - scale: 1.0
      - id: 113
        type: integer
        name: mode5_time
        mapping:
          - scale: 1.0
      - id: 114
        type: integer
        name: mode6_time
        mapping:
          - scale: 1.0
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            value: true
          - value: false

  # Allowed flow volume (Imperial - Dynamic Redirect)
  - entity: number
    name: Advanced Allowed Flow Volume
    category: config
    dps:
      - id: 111
        type: string
        name: value
        unit: gal
        range:
          min: 0
          max: 5000
        mapping:
          - dps_val: "mode4"
            value_redirect: mode4_vol
          - dps_val: "mode5"
            value_redirect: mode5_vol
          - dps_val: "mode6"
            value_redirect: mode6_vol
      - id: 115
        type: integer
        name: mode4_vol
        mapping:
          - scale: 10.0
      - id: 116
        type: integer
        name: mode5_vol
        mapping:
          - scale: 10.0
      - id: 117
        type: integer
        name: mode6_vol
        mapping:
          - scale: 10.0
      - id: 102
        type: string
        name: unit_system
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            constraint: unit_system
            conditions:
              - dps_val: "us_units"
                value: true
          - value: false

  # Allowed flow volume (Metric - Dynamic Redirect)
  - entity: number
    name: Advanced Allowed Flow Volume
    category: config
    dps:
      - id: 111
        type: string
        name: value
        unit: L
        range:
          min: 0
          max: 20000
        mapping:
          - dps_val: "mode4"
            value_redirect: mode4_vol
          - dps_val: "mode5"
            value_redirect: mode5_vol
          - dps_val: "mode6"
            value_redirect: mode6_vol
      - id: 115
        type: integer
        name: mode4_vol
        mapping:
          - scale: 100.0
      - id: 116
        type: integer
        name: mode5_vol
        mapping:
          - scale: 100.0
      - id: 117
        type: integer
        name: mode6_vol
        mapping:
          - scale: 100.0
      - id: 102
        type: string
        name: unit_system
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            constraint: unit_system
            conditions:
              - dps_val: "metric_unit"
                value: true
          - value: false

  # Advanced: Allowed Flow Rate
  - entity: switch
    name: Allow Minimal Flow
    category: config
    dps:
      - id: 118
        type: boolean
        name: switch
      - id: 109
        type: string
        name: available
        mapping:
          - dps_val: "ADVANCED_SETTING"
            value: true
          - value: false

  - entity: select
    name: Allowed Minimal Flow Rate
    category: config
    dps:
      - id: 119
        type: integer
        name: option
        mapping:
          - dps_val: 0
            value: "0.01 Gal / 2.5 L"
          - dps_val: 1
            value: "0.02 Gal / 5.0 L"
          - dps_val: 2
            value: "0.03 Gal / 7.5 L"
          - dps_val: 3
            value: "0.04 Gal / 10.0 L"
          - dps_val: 4
            value: "0.05 Gal / 12.5 L"
          - dps_val: 5
            value: "0.06 Gal / 15.0 L"
          - dps_val: 6
            value: "0.07 Gal / 17.5 L"
          - dps_val: 7
            value: "0.08 Gal / 20.0 L"
          - dps_val: 8
            value: "0.09 Gal / 22.5 L"
          - dps_val: 9
            value: "0.10 Gal / 25.0 L"
      - id: 109
        type: string
        name: mode_system
      - id: 118
        type: boolean
        name: available
        mapping:
          - dps_val: true
            constraint: mode_system
            conditions:
              - dps_val: "ADVANCED_SETTING"
                value: true
          - value: false

Hi all,
I got an LP365-P from Amazon and I wanted to test integration first so I don’t mess up my HA. I spun off a Hyper-V and installed HAOS, HACS and localtuya. Configured it with my tuya account and I tried to add the Frizzlife. I have a lot of devices, but not all show up when I choose GEAR>Add new device. If I select the dots and try to do manually it comes back with an error.

I also couldn’t figure out how what to do with the YAML file - should I install localTuya version prior than 4.0.0?

Thanks

Give the link of this forum to ChatGPT and ask to walk you through the process. It would be much easier to get detailed answers from ChatGPT than asking here.

@Kal2 I am new to HA and set this up yesterday. I initially had the same error as you. It turns out that I was confused between LocalTuya and, what is needed, Tuya Local.

I worked through this with ChatGPT and asked it for a summary so you can follow my steps. You can always cut & paste this into ChatGPT (or your preferred LLM) along with the URL link to this discussion, if you need more guidance.

Final Working Setup: FrizzLife LP365-P in Home Assistant (Local)

1. Prerequisites (what must be true first)

You need:

  • Device added in Smart Life
  • Tuya Cloud account set up in Tuya IoT Platform
  • From Tuya Cloud:
    • Device ID
    • Local Key
  • From your network:
    • Device IP address

2. Install the correct integration

Do not use LocalTuya for this device.

Instead install:

  • Tuya Local

How to install

In HACS:

  1. Go to HACS → Integrations
  2. Click ⋮ → Custom repositories
  3. Add:
https://github.com/make-all/tuya-local
  1. Category: Integration
  2. Install Tuya Local
  3. Restart Home Assistant

3. Create the device definition (this is the key step)

On your host:

Create:

/homeassistant/config/custom_components/tuya_local/devices/frizzlife_lp365p.yaml

Paste your YAML (the forum version), or a simplified version like:

  • Protection switch (DPID 101)
  • Valve (DPID 1)
  • Leak sensors (106, 107)
  • Flow + usage (103, 105)

Important adjustment:

  • Remove or comment out:
id: ""

4. Restart Home Assistant

From terminal:

docker restart homeassistant

5. Add the device via Tuya Local

In Home Assistant:

  • Settings → Devices & Services → Add Integration
  • Select Tuya Local

Enter:

  • Host: your device IP (e.g. 192.168.x.xx)
  • Device ID
  • Local Key
  • Protocol:
    • try 3.5 if available
    • otherwise 3.4

6. What should happen

Instead of discovery failing, Tuya Local will:

  • Load your YAML
  • Create entities directly

You should now see:

  • switch.protection_enabled
  • valve.water_valve
  • binary_sensor.leak_alarm
  • sensor.flow_rate
  • etc.

7. Verify functionality

Test:

  • Toggle protection switch
  • Open/close valve
  • Check values update

Also confirm behavior matches in Smart Life.


8. Clean up (recommended)

You now have two integrations:

  • Tuya (cloud)
  • Tuya Local (local)

For clarity:

  • Disable or ignore the cloud version of this device

9. Why this works (and earlier attempts failed)

  • LocalTuya → requires DPID auto-discovery → failed
  • Tuya Local → uses predefined DPIDs from YAML → works

10. What you now have

You now have:

  • Full local control
  • No cloud dependency for automations
  • Access to all device capabilities

Bottom line

The working pattern is:

Tuya device → Tuya Cloud (for keys) → Tuya Local + YAML → Home Assistant entities

Not:

Tuya device → LocalTuya auto-discovery (fails for this device)

Yup, not LocalTuya, but Tuya Local…

Thanks

Have you figured out a way to preserve/automate custom device configuration for the Frizzle when updating Tuya_local?

I have the "stock" (Tuya_local) file modified at this location:
custom_components/tuya_local/devices/frizzlife_lp365p_watermonitorandshutdoff.yaml
Then I have it backed up here:
custom_components/frizzlife_lp365p_watermonitorandshutdoff.yaml

Every time I update tuya_local it looks like it wipes out the /devices folder and I have to remember to rewrite the "backed up" frizzlife to the /devices folder. If I forget all history is still saved, but under different entities. If I choose HISTORY and then DEVICE / SMART WATER MONITOR it will still show all values, but under different entities.

So I was wondering how you and @rwalker have this scenario covered and restore the frizzlife modifications.

All the current features are now in the 2026.6.1 release. Some of the names changed, but once you delete the old ones you are good. The only thing I couldn't get was the optional temperature (limitation in Tuya-local), so you just have to disable it if you have a version that sends 25.0c/77.0f all the time.

Not sure what happened there, but all my tuya local devices (some color bulbs, plugs and the frizz) showed as unable to connect to. I deleted them from HA and try to add them again. The Frizzlife doesn't show to choose the right device, but instead some other ones. I chose SIMPLE SWITCH and it controls the valve but I don't have any other entities with the device. What could be wrong and how can I choose the right device?

And then this:

Well, I knew it would be something utterly stupid. Even though the Frizz was able to be added to SmartLife multiple times (after removing it from SmartLife, every time I get a new local key), it was causing the error. I finally decided to reset it (holding PROTECT and VALVE for 10sec) and lose my precious total gallons and custom protect settings :smirking_face:
Now it was added to Tuya local immediately. Problem solved

Hi there,
I got my Frizzlife lp365p some days ago and mounted it successfully. Thanks to the great work in this thread, I managed somehow to connect my tuya local installation to the device. But I still have some problems/questions:

  • The update rate is very sparse. When I have the android app, it sometimes updates once a minute (same as andoid app). Is it possible to get faster updates? Especially the flow and pressure would be interesting to implement my own security rules.
  • When I disable internet access for the Frizzlife in my fritzbox router, there are of course no updates in the app anymore but there are also no updates anymore in homeassistant?!

    I switched off the app and internet at around 10:11… There are some hints that this might have to do with protocol 3.5 which is used for the lp365p?
  • I found hints (GitHub - myhomeiot/localtuya35: local handling for Tuya devices · GitHub), that blocking DNS requests for the Frizzlife might help? I checked network traffic for the Frizzlife with Wireshark and found that there is regularly DNS requests for m3-eu.lifeaiot.com. And despite internet blocking, the DNS request is answered by fritzbox router. One idea would be to use an ESP32 and this project (GitHub - martin-ger/esp32_nat_router: An AI-enabled NAT Router/Firewall for the ESP32 · GitHub) to block DNS requests from Frizzlife LP365P. But maybe that’s overkill?
  • Is it right, that the total amount of water is not shown in app and homeassistant? I also found no dps for the device, but I think total volume is shown in the display of the device? What the heck?!
  • The dps 104 is in the data model like the following, but the value is definitley not the volume from yesterday… Is it a known bug?
      {
        "code": "water_used_yesterday",
        "custom_name": "",
        "dp_id": 104,
        "time": 1785178502810,
        "type": "value",
        "value": 12
      },
  • I checked the wireshark log and when internet is blocked, I only see traffic from homeassistant to lp365 around every 5 seconds, but no answers from the device… Maybe there’s a problem with the encryption?

Sorry for all the questions. I hope someone can help me a little? Or at least report, if your lp365p homeassistant integration works good? It’s really terrible, that there is no good leakage sensor available, which has good interface options and all necessary features (time limit with times down to minute level, volume limit, maximum flow limit with shutoff without delay). I’m just about to build something like that myself using an ESP32… But hey, maybe I can fix my device and it turns out good :slight_smile:
Thanks, Christian