When i was looking at water level reporting the more i read indicated that using any form of ultrasonic sensor would be problematic due to a a number of factors including, high moisture environments, signal bounce due to water surface, signal bounce due to internal tank designs etc
This led me down the path of a throw in type sensor.
I have installed about 3 weeks ago a throw in sensor linked to a Shelly uni. The only issue i am now dealing with is scaling my battery/solar power supply to ensure that winter months do not result in the shelly switching off.
The value received goes through a median filter and then a calculation shows volume.
If you are interested look at a video from Lars Klint on youtube.
Pat
https://www.youtube.com/watch?v=N90C9Xge8Z4 I think this is the video that you are referring to…
My objections are 1) supply voltage 24Vmake it difficult 2)Shelly Uni is something new for me (thinking the time spending to understand esp/esp32 3) pricing
My thoughts about the ultrasonic sensors? very sensitive to the voltage supplying these boards, moisture and the surface reflections.
really I’m confused, I think I should try few things before condemning ultrasonic sensors.
I’m thinking
a) a pipe (holed pipe) with the sensor on top of this
b) a floating surface underneath the sensor eg a plastic plate.
These are something theoretical, on the application may have different results.
Thanks for the feedback
Foufoutos,
I supply only 12v power with a battery/solar setup. I have a dc step up to power the sensor. On the test bench it was using about 30mA when running. Shelly uni - connect power, connect wire from sensor. HA picked up immediately (using Shelly add-on native).
I was just making suggestions as I went down this rabbit hole over the past 4 years.
I know some people made 3d printed cones for their ultrasonic sensors - can’t use a tube as that then deflects and distorts signals. I don’t own a 3d printer.
Anyway give it a go and best of luck
Pat
yeah, I have that feeling!
These days we have a temp of near 40C outside and I’m doing an experiment related to the ventilation of the tank. I believe that there is a concentration of moisture in the empty space which is affecting the measurements
I recommend using sliding average median, this removes the erroneous readings.
sensor:
- platform: ultrasonic
trigger_pin: D1
echo_pin: D2
name: "Tank Level Sensor"
unit_of_measurement: "L"
device_class: volume_storage
icon: "mdi:water"
accuracy_decimals: 0
update_interval: 1s
filters:
- median:
window_size: 59
send_every: 60
send_first_at: 3
- lambda: return (1-x) * 1000.0 - 55;
- filter_out: nan
Good morning,
I have indicated your information correctly but it does not work?
I saw that some talk about mqqt?
THANKS
Thank you for this information. After reading about the HopperHawk monitor for pellet grills, I started looking at using an ESP32 device in the same fashion. This is looking at water levels, but I see no reason to think that it won’t work for wood pellets. This looks just like what I need to setup a device to monitor my pellet grill bin.
Wow, this is awesome! Definitely going to use the info in this thread.
I have a water purifier (Berkey). And I want HA to refill the tank when empty. ESPhome will measure the amount of water left and HA will refill. I already have a Zigbee water valve that works. And as a bonus I will be able to monitor when the filters need replacement (they last about 22.000 liters I believe).
Only challange now is ti actually get a waterpipe to the Berkey. But with a little luck, I am able to fix that.
Can you please share your complete setup, which hardware you use, how you connect it and the code?
I’m struggling with getting this working.
I’ve tried a ESP8266 and also a D1 mini, both don’t give any information through.
I don’t know if i have to get a LED signal on the AJ-SR04M board, but I didn’t see that.
Thanks in advance!
Thanks for sharing, but this is a different configuration then I have. So I can’t compare it.
I bought a new D1 mini (with 5V) and a new AJ-SR04M sensor (I thought maybe it was broken). But also now after different tries it doesn’t work.
can i do this with esp32 ?
@jonasmoreira could you share your code please. This seems to be the perfect setup. Really close to what I had but I’ve lost my configuration in some tests I was doing.
Long story. I would gladly use your code if it’s working as you seem to say.
hmm, seems this hits me again this year.
I used a tf 131 pressure sensor last year, worked perfect. Now wanted to install it for this season - dead. Reading some amazon reviews this is a common problem after 6 month of use - moist is getting in the sensor.
Now may switch back to a ultrasonic sensor.
This drives me nuts.
Hello everyone,
I set up a configuration using an ESP32-CAM AI THINKER along with a security camera near my cistern.
I had an issue with sensor reading errors, generating logs of inexplicable timeouts, so I added a relay that interrupts the GND connection cable to the sensor board for 4 seconds, resetting the sensor every time it obtains a NAN value. It worked! Below is the code:
esphome:
name: cisterna-espcam
friendly_name: EspCam Cisterna
platform: esp32
board: esp32dev
wifi:
networks:
- ssid: xxxxxx
password: xxxxxx
- ssid: xxxxxxxx
password: xxxxxxx
- ssid: xxxxxx
password: xxxxxxxx
ap:
ssid: "Cisterna-Espcam Hotspot"
password: "xxxxxxx"
logger:
api:
ota:
esp32_camera:
external_clock:
pin: GPIO0
frequency: 20MHz
i2c_pins:
sda: GPIO26
scl: GPIO27
data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
vsync_pin: GPIO25
href_pin: GPIO23
pixel_clock_pin: GPIO22
power_down_pin: GPIO32
# Image settings
name: esp32-cam-cisterna
# resolution: 1024x768
resolution: FHD
brightness: 2
contrast: 2
jpeg_quality: 18
vertical_flip: false
horizontal_mirror: false
max_framerate: 15 fps
sensor:
- platform: ultrasonic
trigger_pin: GPIO12
echo_pin: GPIO13
update_interval: 30s # 5 minutos. Você pode mudar este valor
timeout: 3.5m
name: "Agua na Cisterna"
unit_of_measurement: "L"
accuracy_decimals: 0
filters:
- lambda: |-
if (std::isnan(x)) {
id(relay_switch).turn_on();
delay(4000);
id(relay_switch).turn_off();
}
return (1-((x-.30)/2.86))*10000;
- median:
window_size: 5
send_every: 3
send_first_at: 2
output:
#flashlight
- platform: gpio
pin: GPIO4
id: gpio_4
#relay para resetar sensor
- platform: gpio
pin: GPIO2
id: relay_output
light:
#flashlight
- platform: binary
output: gpio_4
name: Cam Cisterna flash
text_sensor:
- platform: wifi_info
ssid:
name: Cam WiFi
switch:
- platform: restart
name: Cam Cisterna restart
#relay para resetar sensor
- platform: output
id: relay_switch
output: relay_output
Initially, the sensor was presenting reading errors probably due to secondary echoes, always giving the minimum distance as a result. I fixed this by covering the sensor with foam. But now I have a huge fluctuation in readings, generating a variation of up to 800 liters during the day.
Has anyone achieved stable readings by modifying any code in the sensor, such as the pulse time?
If you are having issues, might want to consider using a float sensor - simple and super reliable even in pretty hostile environments. Mine has been working now for over two years without a hiccup. Basically it’s a stainless steel rod with a float outside that changes the resistance as it moves up and down the rod. As much as I wanted to use something like a sonar or pressure sensor, I went for a float sensor as I suspected that otherwise I would be continually replacing sensors…
+1
similarly
Hi,
I find many examples in this topic of yaml configurations where absolute volume and relative volume are calculated in on single instnace. e.g.:
- platform: ultrasonic
trigger_pin: GPIO1
echo_pin: GPIO3
name: "Water Tank Level"
unit_of_measurement: "%"
accuracy_decimals: 0
update_interval: 5s
filters:
- lambda: return ((((x*100)-20)-(123-20))/(123-20))*-100;
- filter_out: nan
- platform: ultrasonic
trigger_pin: GPIO1
echo_pin: GPIO3
update_interval: 5s
name: "Water Tank Volume"
unit_of_measurement: "l"
accuracy_decimals: 0
filters:
- lambda: return ((((x*100)-20)-(123-20))/(123-20))*-1000;
- filter_out: nan
When I do so, I get an error that I just cannot fix?
As if it is not allowed to use the same pins twice to calculate absolute and relative volume?
Can anyone point me in the right direction?
My complete yaml:
esphome:
name: ibcsensor002
friendly_name: IBC
area: Tuin
platform: ESP8266
board: d1_mini
# Encryptie sleutel: "QEDjdbLjPr7ZosmBBCvYWA="
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.31.132
gateway: 192.168.31.99
subnet: 255.255.255.0
ap:
ssid: "Ibcsensor002 Fallback Hotspot"
password: "be"
logger:
api:
encryption:
key: "QEDjdbLjPr7ZnKfP9tBBCvYWA="
ota:
- platform: esphome
password: "1aa73b1d97c3d8eee005c11992ce8573"
web_server:
port: 80
time:
- platform: homeassistant
id: homeassistant_time
text_sensor:
- platform: version
name: ibcsensor002 ESPHome Versie
- platform: wifi_info
ip_address:
name: ibcsensor002 IP
ssid:
name: ibcsensor002 Wifi
bssid:
name: ibcsensor002 MAC
switch:
- platform: restart
name: "IBC Aan/Uit"
sensor:
- platform: uptime
name: IBC Uptime
filters:
- sliding_window_moving_average:
window_size: 15
send_every: 15
- platform: wifi_signal
name: IBC WiFi
unit_of_measurement: '%'
filters:
- filter_out: nan
- sliding_window_moving_average:
window_size: 10
send_every: 4
send_first_at: 3
- delta : 5
- lambda: |-
if (x <= -100) {
return 0;
} else {
if (x >= -50) {
return 100;
} else {
return 2 * (x + 100);
}
}
- platform: ultrasonic
trigger_pin: D1
echo_pin: D2
name: "Inhoud [l]"
update_interval: 600s
unit_of_measurement: "l"
icon: 'mdi:water'
accuracy_decimals: 0
filters:
# delta : 1
- lambda: return ((((x*100)-4)-(98-4))/(98-4))*-900;
- offset: -17.0
- filter_out: nan
- median:
window_size: 15
send_every: 4
send_first_at: 1
- platform: ultrasonic
trigger_pin: D1
echo_pin: D2
name: "Inhoud [%]"
update_interval: 600s
unit_of_measurement: "%"
icon: 'mdi:water'
accuracy_decimals: 0
After some update, using the same pin is no longer possible. Use the copy component.