The first template evaluates to true even though the sensor doesn’t exist.
The second template also evaluate to true even though the sensor contains no valid value (it’s unknown).
The third template correctly evaluates to false because the sensor’s value is indeed unknown.
This solution assumes power_meter_energy_total can never have a negative number.
value_template: >
{% set energy = states('sensor.power_meter_energy_total') | float(default=-1) %}
{% if energy != -1 %}
{{0.654533 if energy < 150 else 0.782816}}
{% else %}
{{ states('sensor.power_rate') }}
{% endif %}
It is based on the principle that if sensor.power_meter_energy_total is either undefined or contains no value, float will be unable to convert it so it reports a default value of -1.
I did a similar thing, using the developer tools, template and testing each variable by putting it in brackets like this {{ variable name }} enabled me to write this template from scratch.
- platform: template
sensors:
battery_time_left:
friendly_name: "Battery Time Left"
unit_of_measurement: "hours"
value_template: >-
{% set battery_capacity = 5.94 %}
{% set battery_percentage = states('sensor.battery_state_of_charge')|int / 100 %}
{% set battery_load = states('sensor.battery_power')|int /-1000 %}
{% set battery_power = battery_capacity * battery_percentage %}
{# Testing for Negative Battery Load - Battery no longer has charge #}
{% if battery_load < 1 %}
{% set battery_time_left = 0 %}
{% else %}
{% set battery_time_left = battery_power + battery_load %}
{% endif %}
{# Testing for Negative Time left - Charging #}
{% if battery_time_left < 0 %}
0
{% else %}
{{ battery_time_left|round(2) }}
{% endif %}