This is not really a project but I just want to share some fall-pits i needed to tackle in creating a template sensor (which increases itself).
Ok, I needed to completely revise this topic because I slowly realised that you cannot use a template sensor which is increasing itself. So if you try to do it (like me) stop reading and struggle further .
Situation: With an Arduino UNO + Proximity sensor: LJ12A3-4-Z/BY-5V and a simple home brewed sketch the number of water usage in liters is counted and after a certain time of inactivity a MQTT topic is published. A typical sequence of values is:
3, 7, 1, 3, 3, 3, 1. All the values should be included in the totals.
My tips to avoid fall-pits are:
-
Do not try to do this directly with a template sensor but use first a input helper (later you can copy the result of this field to a template sensor if required)
-
Include in your MQTT sensor settings “force_update: true”.
Because HA will “see” successive identical values. -
Do not include in your trigger TO, FROM because with this HA will only look to state.state and the desired effect of “force_update: true” is gone.
-
More a generic tip add always “unique_id” to any manual sensor to avoid the creation of a second sensors (_2).
For the most of you this already sounds obvious but for those NOOBS (like me) just starting this is hopefully helpful.
I found an alternative way for “force_update: true” for MQTT sensors this is a bit of a overkill here but perhaps useful in other situations:
json_attributes_topic: "mqtt/sensor"
json_attributes_template: >
{
"random": "{{ range(1, 99999) | random }}"
}
Below the complete yamls if you want to test things:
# get inspired by thanks to:
# https://community.home-assistant.io/t/mqtt-sensor-how-to-load-attributes/212523/6
# https://community.home-assistant.io/t/how-best-to-generate-a-consistently-random-number/350657
#
# Easiest test for Windows is to use MQTT explorer.
# publish in topic "mqtt/sensor": {"interval":9,"liters":1,"timer":99,"treshold":600}
# Objective: a sequence of in example 3, 7, 1, 3, 3, 3, 1 should ALL be processed
# So not only 3, 7, 1, 3, 1
# for this you need in your mqtt sensor definition: force_update: true
mqtt:
sensor:
- unique_id: test_mqtt
name: "Test MQTT"
icon: mdi:water
state_topic: "mqtt/sensor"
value_template: "{{ value_json.liters }}"
force_update: true # required to force update of identical values in a row
device_class: water
unit_of_measurement: L
#availability:
# - topic: "mqtt/LWT"
# payload_available: "Online" # watch out might be case sensitive
# payload_not_available: "Offline"
#-------------------------------------------------------
# input_number for the initial input
# this field can also be use to set the (re)set value of the meter.
# https://community.home-assistant.io/t/template-for-per-instance-water-used-instead-of-daily-total/545224/2
#-------------------------------------------------------
input_number:
test_mqtt_helper:
name: "test mqtt helper"
min: 0
max: 999999
icon: mdi:water
mode: box
unit_of_measurement: L
#-------------------------------------------------------
# automation of all actions
#-------------------------------------------------------
automation:
- alias: mqtt test
description: mqtt test
trigger:
- platform: state
entity_id:
- sensor.test_mqtt
# to: null # do not use this
condition: []
action:
- service: input_number.set_value
data:
value: >-
{{ states('input_number.dwl_helper_test')|int +
states('sensor.test_mqtt')|int }}
target:
entity_id: input_number.dwl_helper_test
mode: single