Blueprint - ultrasonic sensor water level

esphome:
  name: xx-30bf5b
  friendly_name: xx_30bf5b

esp8266:
  board: d1_mini

# Enable logging
logger:
  level: info

# Enable Home Assistant API
api:
  encryption:
    key: "hash"
  
  reboot_timeout: 0s

ota:
  password: "hash"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "xx-30Bf5B Fallback Hotspot"
    password: "hash"
    
  reboot_timeout: 0s
  use_address: static

captive_portal:
    
switch:
  - platform: restart
    name: "restart"

dallas:
  - pin: D7

sensor:
  - platform: uptime
    name: "uptime"

  - platform: dallas
    address: 0x17020b9177583c28
    name: "inside_temperature"
    resolution: 12
    id: temp_sensor

  - platform: ultrasonic
    trigger_pin: D5
    echo_pin: D6
    update_interval: 100ms
    accuracy_decimals: 3
    timeout: 1.5m
    pulse_time: 20us
    id: ping_sensor
    filters:
      - lambda: |-
          return x / 343.0 * (331.3 + 0.606 * id(temp_sensor).state);

  - platform: copy
    source_id: ping_sensor
    name: "water_level"
    unit_of_measurement: '%'
    state_class: measurement
    icon: mdi:water
    accuracy_decimals: 0
    id: water_level
    filters:
      - clamp:
          min_value: 0.215
          max_value: 1.32
          ignore_out_of_range: true
      - lambda: |-
          return (1.32 - x) / 1.21 * 100.0;
      - delta: 1.0
      - debounce: 1s
      - heartbeat: 1s

  - platform: copy
    source_id: water_level
    name: "water_stream"
    unit_of_measurement: '%/min'
    state_class: measurement
    icon: mdi:chart-timeline-variant
    accuracy_decimals: 1
    filters:
      - throttle_average: 1min
      - lambda: |-
          static float tmp_p, tmp_c, delta;
          tmp_c = x;
          delta = tmp_c - tmp_p;
          tmp_p = tmp_c;
          return delta;
      - lambda: |-
          return (x > -2 && x < 6) ? x : 0;

binary_sensor:
  - platform: analog_threshold
    name: "measurement_status"
    device_class: problem
    icon: mdi:waves-arrow-up
    sensor_id: ping_sensor
    threshold: 0.215
    filters:
      - invert:
      - delayed_on_off: 1s

commit
an advanced ultrasonic sensor water level monitor
feature
1.temperature compensation
2.humadity resistance (sensor value fluctuate when water warm inside tank)
3.error notify (something infront of sensor)
4.psedo distance filter (don’t respond to false distance)
5.optional water usage l/m info
stable
i was using this firmware from last 3 year never get false value (instead of false value it return last value), even temperature fluctuate inside tank +/-30 C (in cold it reach -2 C in hot it reach 60 C)
module
1.d1 mini
2.jsn-sr04t (at remote distance connected via 8m long wire)
adaptive code

 filters:
      - clamp:
          min_value: 0.215
          max_value: 1.32
          ignore_out_of_range: true
      - lambda: |-
          return (1.32 - x) / 1.21 * 100.0;

modify this values -
1.32 Metre - water tank depth (top sensor placement)
1.21 Metre - water tank height
100.0 - tank max storage (ex. 1000L β†’ 100, 7200L β†’ 720)

1 Like