Add water-bottle

This commit is contained in:
Jakob Lechner 2025-03-02 03:21:03 +01:00
parent af4e6ef214
commit d1f2b397ba
2 changed files with 242 additions and 4 deletions

View file

@ -9,7 +9,7 @@ dkim-keys:
jalr.de.default: ENC[AES256_GCM,data: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,iv:2NBiTTW9slOH9BvM+kVbMB/+8EiS/Dc/eaqrtiwn4HY=,tag:0rc2+ZWy9XZYE7RK/oSo3g==,type:str]
synapse-turn-shared-secret: ENC[AES256_GCM,data:Q1XRds3Zud1kYkvD6s9WUzP+kNDNsxB5SHd6oCAaLCHhHhYENSAYTZOF+rGjCPNyKFL0e/A=,iv:zScRQrz+pXHNUh/BGOaV+TVnDR3wu1Z/UO1zXarKwtA=,tag:ckpVziE+yb0FjctcT7tAkg==,type:str]
rmfakecloud: ENC[AES256_GCM,data:ktKBKb6cRv1VF8tRvXIpxIy9hPinVPKK05mgvYzz18PEdcrCLpldm5xf7ffHtY5XzDOAMXDCiz6x4xyv7071frrF0spOEPnIzVhxwG8H2Ck=,iv:qJdHjv0RziAs4G9UGeRwGQ4GE5kaObJWpIYWpRKhr9c=,tag:PXgvU1hZK/gvWGyFJaHekg==,type:str]
esphome: ENC[AES256_GCM,data:/qvYCozy6r5p3mx5QJUTcPF3NOnO0eowN4xAxt7eKbDIFgZ4E6lHOiEbZE+EluRsIiex3G7JvXeuGOG01U95caUjZ18lFQze+VxM31DACzbMB2u5QxKsWnNRABD6JdFM90HCymajEQTrZJWZJ0V6VyeJf6mj7ZYXJGjVyDxzVIRWF+2B4g1zY6211JFhwl2eo6//EamCqTuLYt6XagyiJfJJ3gp4yHF4ehxlU01IwO5OcBUhgWYGMf6y0JqLIkxqryQsl9L+VrWgjgx2fcjMhGA5C4yZ8dLOstSlOAsKYbxqDyKF0PoBf07WTiCcNx9ReW5wdfg/vb2tVXS0i58SrD81/G0p6gExKvnXmgdSU74hvzOaRNIMbRXUq+6ZXxZMJm/HahHpZ9klMWptmyQ/Y9eBiWEW0EflFZkGuIVI3ycn2admcRdF9SGi+dONeshbjdutFUrGfm+WRBD0FU103KwGjtxFFy5dC89PhMkOXFSR903d7Fy0DZ+qEo1LxzYS7prpTZz7LIYEC1H30du9PTWJhFMRSP7PFjmbPKxcG46dNYLh/I6quzHHmsinTO1zkE3/KgjchQcATuHV6t32admJccjsR8R69bcEEyWwixofhauQ35zlMC9jF2Q1GhWosisIQFLalHH1zitdH5K9qE+jh1MvEPh1tHJy/7RL2CMduBNQcGC/Af5T//4S868XknCxrjL1m8f/7As1+Iinu7Pee28vmtDeKPzQmJogqntMOoz9w6R5hERz5N8ch9RWqKU0z6hV5ciUG18PlyU/WWZ4rDaZJeUHM7vae+Y+or1O1PuemjMLHQhClYEGwbS+J93UrXKFsEytEz1s1BiJLpgJxYKzhb4zNFIha9SINtUq6ahHmzkjwtc/h1LDn9kQ/40nAIzUEt+UvUkeKpst+BbUEbAQi4WMU5BARl/Ogvpx2BocfE0GgsPksUbcwjv8y4AOXuHf89nTqVNOj8vyBr0oyQdsDayBQ9qLsp2xun7q9BLYw0BHLjWNwY7zp9vUXX476zcIWxhd1nOcl4Hma8z/GiceLBuMNnWNiou7G7sAWWKQIWSw5Kf6ebaP6uAY7wS0W0MdN90ascHcgZd1EHqluKSqxSPKVgQ1vfQtBh6uIPec12oJzcBxPj0yB4MnH5dsdaMjVUElRdzs8F+0T0SCYZSY+OK2OL8xN1WGW96bH3/+UEQDYHLmXOcsDcNGHHWkPAllArRLS65pDoI2IOFYdJzhdDWI+qVZZsxQf0NeW91ATN7qE/B+MlCIWugBUFOo9mIBrR/+FqUB66FnFvuO7J3Yaz/tHe5UDKJFqxgBVt4JwFHgxnwIjFHiNPbmeXhLJNy0yOhj4CF/Ah9sw1gDtULHMD5TiL/+0TFXaUZV7RqYK6dZtKW85LO3P62SM33Y6/HFlU+aEowfY2ZJKeAuOifbl8FQKFdMr/DY3pz+rJLY6SolMwn2tVq/u1OVfRCVLGTMU9V7nyyN5NfNSaucncqdb1HoybqbXvfE+iFjOkndwkU9aPhvw7ivK8EAeEpaKF3JXdlb01zl9ra8izjLVALCBIpmAJj8a4nP6z+zybxbfGiV20kFTGljvAGQ+G0fRtiH03jR8zdhuVHGkVDbKz8M9X80LM8eDFpaObA76SxtHTlQ7mlnreUQyQF4dEtL8dTDUcf8U1Sm8MkB1FW7vKVaXrSe/4FR9kayVo2GbjZUqzs1tEh2yBIOI4AnPz4ZxlapAiz9+/Msb46XwvXxO76Ax/lbzD9MnNgL3W0CUuCTtp2FG9AOBa60A22Tmk4DTNh6,iv:n/n2dgY5SQb8Z6fo+PROESZY4J4HpCOV/Gau4GcWiFQ=,tag:4vz12dpzqQQeY8GAHLXS9w==,type:str]
esphome: ENC[AES256_GCM,data:tuv07FGh4ubI40nOISNoW86J1dWg+wgvf7+/pYVBx2qUcquGALTPIoXMz+42PSrXliUvb2ZKnPbeU00cMWZ7kffOznjcQxhCRCnVfpgkIdSDurCWgGzblGzbjVjJ2Ph1mnn8QZ33sztarIFiG25eB7tF5iEL2jajxf/90BMcrF1Vb9NwadGS9Wv8ApfkMgnpSLEJwpyTas5womeA5gJV6dP8UH7BbKRmowu9yKMTtlIONuuquzGlhTsNsQMlO9a8V7HO/L6Km93uSnWE+oudID1gzMXmGKE5tuNuo40xtAS1+v73k6fR6/tA9MCHXiyLwsd34iD5FPPbeS0uBk+JQqlIWqF6PZER22OlqEd6aGCn9jHBjENTsyf9N78sbMYKCWxbrWtV1Zk1JBMHyl1R2dApyFWxy4NLq4O2swqyRPe59AMOPXhQbuNrGd0CKx6vvvVkxB66y5VR289PHyUL8SHUMBPvnVb8katVPNK4qBmucmD1LDVx+HipjRFuZtmTrzprtwQ+wrJTUznP4uyW7Qn1vYy6P6UWfp8U70sqRQnvUJCeMHtIEj9lJGaQYiitEtIcdJJOYYXL1tn7YVyRpHWZMqaeAuMNQcI6qpCJKOyl64wXaljNwb30NU3lpBCsgl3EF+hFkRUKrgPsOOtGxlMHVroptWahs9UlxbgjhpcAh+hiw+GHFPGuSZ5VfQO8MhOZlRTBhwdMT5N0JQO66L2bBF3XO5G1WVOG78Y0/dkv8xKZkfwTmmD8+InLcuPVBRukfm7S1HiwVJ5yN0huMcEfo1dfGbvlzI9uTZuoJtxp/PgZVPxyZDnsn7jZLIY3Ln+eUZDZyk5jdLqPsP9+4TY6F5QN7Tw6xTeIp+GaY0ZdY/KQVVNPBN2TvPBylLlisceyD6xfn5m3hkG1CXRIXKfFvsJfUN0LTd1vJiLTLVXqXu5LUo3BpAcE6U4fbliBX3mPoxk1+7edtLVzD99ho1y58To3kQbwuOkyYgse6DTVhjF0p+cxp+aDB5h/jT2/tmMc7YZAeY52cO7cIbkcOOvQzDyAOj028xPTmteOSnYe3MFq1e5HRTbdRUh0BzHzSN0IH+5HXWhKW6k9PG6l4yaMj3qqSw3IyL97KL9+jLeyUer0CoGyGpd6JYq9nS6WlKYu+GN3HbdMF6TBOyRC3oFQG+jIZGlXNeclDjJ5hJTzYAT7ioYU5EQQw9rl2J2TherLcS+61ZXnn3QXxDThgFhnn0Q+ozb/i31DMhQXCNjsN1SUVOyLpmWkr8CZnpiKaF58Kuz8Pvyk7Ih30GlZKZL74XSV8fz222qXMn4IP7Sb+PU4X/LJyz+/Ml+ktzB+Yt9UB9uwzNdwY1b4w1gUJI40ju6bKIlEEqhiATbMuX1Bio6Dt9NZ5v6Z7eD4VlgvSqJng7kO4YPoYdFykDhugpZ4BKyJRLE/MqT6ZI2WApgIhy6U4fPZTQNWtxHsobSUMvFLSdUprh4VQ9Auqjz1nqNAcVIjA5fPK1C1tEOx1KPEJXaqC6et17wpjt5ajLhB5td12XGIsUClKg4G2hYiyisFM0Z2fDbK4tlhFb/BJ7ZLY4zQudXu4FaeIxoD82zmqiyo78dn3KQK7+rhWsoR+wR6i7Tn9HjXevlcqvuU4D8raSgl3RcUeKnvJK5y6olcpJvbsfd0Lr1AH8MqwFuRDqufAZx0xoRZ1FhkK6ik+lc7XQkUsknIyvnn4rxYHP2GP+A1LaE4lyBqiC7xsj6ar1zjr/W0mB4vhpF5dRMHNsK6JXzHmoYYJxfY+lwlsYSbmwRBOyPO71TCPE6us/CuSJrkqiiRjWltuy/+uvzffLvh3Y+6wRC05aSbui0I4WaUGcRsM7nzH3/kO5bek3Nw7mLeTbqLkk+slKcCUfqdftibHiOxb5xxHWlbI33IG6dgLc/vBpyhvePB73fAAw==,iv:At2BvPMxMrsLEBFdTHacejtCwcCSNccHE4TXLyGKK2I=,tag:r7G2LvBJdbqPvgOxx87ofw==,type:str]
home-assistant: ENC[AES256_GCM,data:wcFMxDdRCHf/shO9v2WaGgrsa9J2WP62xFs=,iv:9ckeIO62cFZUo8fPyQj445CrJVTooNlwLapM/oTsrkk=,tag:mlfxtXDPsB3T79P9BX9oJQ==,type:str]
mqtt-users:
home-assistant: ENC[AES256_GCM,data:oIjCw7ZnA5iOBmQdW1jcy3QQnpjT32pY,iv:5HFRkXJBdMXQbjk2ubQs3sEy5qEteiqSe2hrNc8+H40=,tag:7B6yI4oCHanE0JE/gHaKnQ==,type:str]
@ -29,8 +29,8 @@ sops:
SU1USkxFUUY2NVhmUHBhZkdrNDR1Q0kKiXIicInELRjDR3tuyA+lnXeCcd9lYvbV
GnBRGPM7BNO/6AA7HhAei48Kt+XE6+jQX66yTXyviKhK7Lpjrlb2YQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-01-07T22:04:49Z"
mac: ENC[AES256_GCM,data:Hii5uCxSS1GStQO7af++sSbGaRK+WPZjQYNSd0EpB5p5+qbWvvBgmOnAFLqMDkhq0aSHYnrFnGkTGuxNciRYIIvOXTE109YxeloT8PQNSKlMMduyb7iUfeAQVQFTTx3Vs6YVe3Jd7oVztqK+zztgkIOX8uoTzE5CHSmhJkLYLTA=,iv:2W7Al1OgcvA98FqkmlXtdpQiAXybBgxsS5h7VA9JcKs=,tag:ZmrkPN+OtLDm2oeSoWsxqA==,type:str]
lastmodified: "2025-03-01T23:14:53Z"
mac: ENC[AES256_GCM,data:1m+Ml5Vhm87U4xz1kKNZ/4E+RqweUt2ypYh1JTYVHHV3dgySJytkwn0pFZj3RfR+z4r03hrvSuBt0ldWSn8UvGLHsJj8L9AqfDXyPg3SI6uRS6UeAbqZFs5HhNQzkNKwPnZ9KPbXJ8ab8Ck+jSfEcrtPShDOgDp9jTJZ91hTB1c=,iv:6tVJI31180asGh+MMguAeKtD4SY6W/2Pizqjt0SV4v8=,tag:0ghRP8locNjtvpIYL8tDlg==,type:str]
pgp:
- created_at: "2024-01-31T01:20:30Z"
enc: |-
@ -44,4 +44,4 @@ sops:
-----END PGP MESSAGE-----
fp: 3044E71E3DEFF49B586CF5809BF4FCCB90854DA9
unencrypted_suffix: _unencrypted
version: 3.9.2
version: 3.9.4

View file

@ -0,0 +1,238 @@
substitutions:
tolerance: "10"
minimum_sip: "20"
default_bottle_tare: "198"
esphome:
name: "water-bottle"
friendly_name: "Water bottle"
esp32:
board: lolin_s2_mini
variant: ESP32S2
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_CONSOLE_USB_CDC: y
logger:
hardware_uart: USB_CDC
api:
encryption:
key: !secret apikey_water_bottle
on_client_connected:
- light.turn_on:
id: pixels
effect: "scan"
red: 0%
green: 25%
blue: 0%
- delay: 2s
- light.turn_off:
id: pixels
ota:
- platform: esphome
password: !secret otapass_water_bottle
wifi:
ssid: !secret wifi_ssid_bw
password: !secret wifi_password_bw
domain: .iot.bw.jalr.de
enable_on_boot: True
fast_connect: True
power_save_mode: none
output_power: 10
globals:
- id: volume_when_removed
type: int
restore_value: no
initial_value: "NAN"
- id: bottle_returned
type: bool
restore_value: no
initial_value: "false"
sensor:
- platform: wifi_signal
name: "WiFi Signal Sensor"
update_interval: 60s
- platform: hx711
internal: true
id: scale
dout_pin: GPIO16
clk_pin: GPIO17
gain: 128
update_interval: 0.1s
unit_of_measurement: g
filters:
- quantile:
window_size: 10
send_every: 5
send_first_at: 5
quantile: .9
- calibrate_linear:
- 197155 -> 0
- 246676 -> 50
- platform: copy
name: "absolute volume"
id: volume_absolute
icon: "mdi:water"
source_id: scale
filters:
- lambda: "return x - id(bottle_tare).state;"
- clamp:
min_value: 0
ignore_out_of_range: true
- quantile:
window_size: 5
send_every: 5
send_first_at: 5
quantile: .9
on_value:
then:
- if:
condition:
lambda: |-
if (id(bottle_returned)) {
id(bottle_returned) = false;
return true;
}
return false;
then:
- lambda: |-
ESP_LOGI("main", "Bottle returned, waiting to settle");
ESP_LOGI("main", "Volume absolute: %f", id(volume_absolute).state);
- delay: 3s
- lambda: |-
ESP_LOGI("main", "Bottle settled");
ESP_LOGI("main", "Volume when removed: %d", id(volume_when_removed));
ESP_LOGI("main", "Volume absolute: %f", id(volume_absolute).state);
if (id(volume_when_removed) > id(volume_absolute).state + ${minimum_sip}) {
ESP_LOGI("main", "Volume total before: %f", id(volume_total).state);
auto call = id(volume_total).make_call();
call.set_value(id(volume_when_removed) - id(volume_absolute).state + id(volume_total).state);
call.perform();
ESP_LOGI("main", "Volume total now: %f", id(volume_total).state);
}
- platform: template
name: "Water consumption rate"
id: "volume_total_derivative"
unit_of_measurement: "ml/h"
icon: "mdi:water-check"
lambda: |-
static float last_value = 0;
static float last_time = 0;
float time = (float) millis();
if (last_time == 0){
last_value = id(volume_total).state;
last_time = time;
return {};
}
float change = ( ( id(volume_total).state - last_value ) / ( time - last_time ) ) *1000*60*60;
last_value = id(volume_total).state;
last_time = time;
return change;
filters:
- sliding_window_moving_average:
window_size: 3
send_every: 2
- or:
- delta: 0.01
- heartbeat: 120minutes
- throttle: 30s
number:
- platform: template
name: "Bottle tare"
id: bottle_tare
icon: mdi:weight-gram
optimistic: true
initial_value: "${default_bottle_tare}"
unit_of_measurement: "g"
step: 1
min_value: 0
max_value: 1000
- platform: template
name: "total volume"
id: volume_total
optimistic: true
icon: "mdi:water"
unit_of_measurement: "ml"
step: 1
min_value: 0
max_value: 10000
binary_sensor:
- platform: template
name: "Bottle present"
id: bottle_present
lambda: |-
if (id(scale).state > id(bottle_tare).state - ${tolerance}) {
return true;
} else {
return false;
}
on_release:
then:
- lambda: |-
id(volume_when_removed) = id(volume_absolute).state;
ESP_LOGI("main", "Volume absolute: %f ml", id(volume_absolute).state);
ESP_LOGI("main", "Bottle removed with %d ml", id(volume_when_removed));
- light.turn_on:
id: pixels
effect: "normal_pulse"
red: 75%
green: 0%
blue: 0%
on_press:
then:
- globals.set:
id: bottle_returned
value: "true"
- if:
condition:
lambda: "return id(volume_absolute).state > 250;"
then:
- light.turn_on:
id: pixels
effect: "normal_pulse"
red: 0%
green: 50%
blue: 50%
else:
- light.turn_on:
id: pixels
effect: "normal_pulse"
red: 50%
green: 25%
blue: 0%
- delay: 2s
- light.turn_off:
id: pixels
e131:
method: multicast
light:
- platform: esp32_rmt_led_strip
id: pixels
rgb_order: GRB
pin: GPIO12
num_leds: 8
rmt_channel: 0
chipset: ws2812
effects:
- addressable_scan:
name: scan
move_interval: 20ms
scan_width: 1
- pulse:
name: slow_pulse
transition_length: 500ms
update_interval: 10s
- pulse:
name: normal_pulse
min_brightness: 20%