Weight Sensor HX711 ESPHome code

esphome:

name: gewicht-sensor2


esp8266:

board: d1_mini


globals:

- id: initial_zero

type: float

restore_value: yes

# NOTE: make sure to align this value to the one used in "calibrate_linear" below!

initial_value: '-167963'

- id: auto_tare_enabled

type: bool

restore_value: yes

initial_value: 'true'


- id: auto_tare_difference

type: float

restore_value: yes

initial_value: '0'


# Enable logging

logger:


# Enable Web server.

web_server:

port: 80


# Enable Home Assistant API

api:

encryption:

key: "TF8XhBQyGQchHOaL8HSZSp1SXFeS38wwO7r3w9t4AqM="


ota:

password: "263582af572ea3564059022dad6b3e27"


wifi:

ssid: wifi-name

password: whatsthepassword


# Enable fallback hotspot (captive portal) in case wifi connection fails

ap:

ssid: "Gewicht-Sensor2 Fallback Hotspot"

password: "whatsthepassword"


captive_portal:


#sensor:

# - platform: hx711

# name: "HX711 Value"

# dout_pin: D1

# clk_pin: D2

# gain: 128

# update_interval: 1s



button:


## Button used to initiate a manual tare

- platform: template

id: smart_scale_manual_tare_action_switch

name: "Smart Scale Manual Tare Action"

icon: mdi:scale-balance

on_press:

- lambda: |-

id(auto_tare_difference) = id(initial_zero) - id(smart_scale_hx711_value_raw).state;


switch:

## Switch to enable/disable the auto tare feature

- platform: template

id: smart_scale_continuous_tare_enabled

name: "Smart Scale Continuous Tare Enabled"

lambda: |-

return id(auto_tare_enabled);

turn_on_action:

- lambda: |-

id(auto_tare_enabled) = true;

turn_off_action:

- lambda: |-

id(auto_tare_enabled) = false;


## Sensor Configuration ##

sensor:

# template sensors from global variables

- platform: template

id: smart_scale_initial_zero

name: "Smart Scale Initial Zero"

lambda: |-

return id(initial_zero);

update_interval: 1s

- platform: template

id: smart_scale_auto_tare_difference

name: "Smart Scale Auto Tare Difference"

lambda: |-

return id(auto_tare_difference);

update_interval: 1s

# sensors imported from home assistant

- platform: homeassistant

id: homeassistant_initial_zero

entity_id: input_number.smart_scale_initial_zero

on_value:

then:

- lambda: |-

id(initial_zero) = x;

# RAW Scale input

- platform: hx711

id: smart_scale_hx711_value_raw

internal: True

dout_pin: D1

clk_pin: D2

gain: 128

unit_of_measurement: kg

accuracy_decimals: 3

update_interval: 15s

filters:

- sliding_window_moving_average:

window_size: 3

send_every: 1

on_value:

then:

- sensor.template.publish:

id: smart_scale_hx711_value

state: !lambda 'return id(smart_scale_hx711_value_raw).state;'

- if:

condition:

and:

- lambda: 'return id(auto_tare_enabled);'

# current smart scale value is below approx. 10KG (raw value -275743) aka nobody is standing on the scale

- lambda: 'return id(smart_scale_hx711_value).state < 10.0;'

then:

- if:

condition:

# current raw scale value is below expected zero value

- lambda: 'return id(smart_scale_hx711_value_raw).state < (id(initial_zero) - id(auto_tare_difference));'

then:

# INcrease Auto-Tare offset to slowly align real zero value with expected zero value

- lambda: |-

id(auto_tare_difference) += 10;

else:

# DEcrease Auto-Tare offset to slowly align real zero value with expected zero value

- lambda: |-

id(auto_tare_difference) -= 10;


# Mapped value to KG

- platform: template

id: smart_scale_hx711_value

name: "Smart Scale HX711 Value"

internal: False

filters:

# apply auto_tare difference

- lambda: 'return x + id(auto_tare_difference);'

# apply rough calibration

- calibrate_linear:

# retrieve these values by evaluating the raw values with loads of known mass.

# note that a bigger difference between measurements usually results in higher resolution,

# so measure 0 Kg and the highest known mass you have (like f.ex. your own weight, measured by a normal scale with good accuracy)

- -167963 -> 0

- 46143 -> 77.6

# map values below 0.1 to 0 (to decrease value changes due to random fluctuation)

- lambda: |-

if (x <= 0.1) {

return 0.0;

} else {

return x;

}

unit_of_measurement: kg

accuracy_decimals: 2

update_interval: 2s



ESPHome location to sensor information: https://esphome.io/components/sensor/hx711.html