Creating a card for active power consumers

Creating a card for active power consumers

A few months ago I heard about the auto-entities plugin and I decided to try it out. The result? A card that shows me the active power consumers in the house so I can turn any of them off easily. Here's how it looks like:

autoentities.gif

In this blog post I'm going to show you how I made it with a few lines of YAML, but first I'm going to describe how the card works.

My card is actually a vertical stack divided in two cards:

1. Devices with full access

These are devices that I can control from Home Assistant so I can turn them on/off (TVs, lights, smart plugs, etc.) or decrease their consumption (dimming a light). In the recording above you can see that it updates and removes a light once I turn it off, and I can also control media players easily.

2. Read-only devices

These are devices that have read-only integrations with Home Assistant. For example, my LG drier has a HACS component that allows me to see the current schedule, the time left, state(on/off), but I can't stop it from Home Assistant. I either do this manually using the buttons from the drier, or from the official LG app if I activated its WiFi module before. Same thing applies to my Samsung washer which has a SmartThings integration for Home Assistant that is read-only as well.

I'll start by showing you the entire YAML code, and then I'll go over it piece by piece:

The first few lines are self-explanatory, you can set the title of the card, decide if you show a toggle button for all the entities, etc.

Things get interesting from the line 15 where the filter starts. For this card, I preferred to filter the entities manually using jinja template, but you can do it easier if you look at their documentation. The reason I went with a template filter is because I have to also display some custom data, like the remaining time for the washer for example.

Auto-entities can also show certain entities without filtering them, so in this case you'll see the first two lines with the current consumed power.

filter:
  template: |
     sensor.apartment_power_adjusted
     sensor.plugs_consumption_summed

The first sensor is my Shelly EM which reports the entire power consumed in my apartment. The second one is the summed power of all my smart plugs.

Then I show all the lights that are turned on. This can be done with in the template like this:

{% for light in states.light %}
    {% if light.state == "on" %}
        {{ light.entity_id}}
    {% endif %}
{% endfor %}

However, if you want an easier way, you could also show them like this:

filter:
  include:
    - domain: light
      state: "on"
      options:
        tap_action:
          action: toggle

Just go over their examples, you'll find many ways of filtering entities and you can pick whatever is best for you.

After the lights, I show my media players. This includes a Chromecast, a smart TV, and a bunch of Echo dots, but I show all of them in a single loop because they are all media players.

{% for media_player in states.media_player %}
  {% if media_player.state != "standby" and media_player.state != 'off' and media_player.state !='unavailable' %}
    {{ media_player.entity_id}},
  {% endif %}
{% endfor %}

The last type of device that I show are the air conditioners:

{% for climate in states.climate %}
  {% if climate.state != 'off' and climate.state !='unavailable' %}
    {{ climate.entity_id}},
  {% endif %}
{% endfor %}

These are all my entities which I can control from Home Assistant. Next, we'll go over "read-only" entities.

Read-only entities

This is actually a separate card, which is shown only if my dryer or my washer are on. This can be done with this condition:

- type: entity-filter
  entities:
    - sensor.dryer
    - switch.washer
  state_filter:
  - "on"
  show_empty: false

So, when any of them is on, the card below will be displayed in the Lovelace UI:

card:
            type: markdown
            title: Read-only
            theme: 'transparent'
            content: |              
              {% if is_state("sensor.dryer", "on") %}
                Drier is on
                - Current state: {{states.sensor.dryer.attributes.current_course}}
                - Remaining time: {{states.sensor.dryer.attributes.remain_time}} minutes
              {% endif %}
              {% if is_state("switch.washer", "on") %}
                Washer
                - Status: {{ states.sensor.washer_job_state.state }}
                - Power usage: {{ state_attr('switch.power_2', 'current_power_w') }} W
                - Finishing at: {{ strptime(states('sensor.washer_completion_time'), '%Y-%m-%dT%H:%M:%S.%fZ').hour + 2 }}:{{ strptime(states('sensor.washer_completion_time'), '%Y-%m-%dT%H:%M:%S.%fZ').minute }}
              {% endif %}

Things are a bit complicated here, so let me explain what all of this does line by line. First, I check if the dryer is on, and if it is, then I show this part:

 Drier is on
- Current state: {{states.sensor.dryer.attributes.current_course}}
- Remaining time: {{states.sensor.dryer.attributes.remain_time}} minutes

I do the same thing for the washer, only here I also show the power usage because my washer is connected to a smart plug which is integrated in Home Assistant. Unfortunately, the washer completion time is not formatted, so I convert it like this:

- Finishing at: {{ strptime(states('sensor.washer_completion_time'), '%Y-%m-%dT%H:%M:%S.%fZ').hour + 2 }}:{{ strptime(states('sensor.washer_completion_time'), '%Y-%m-%dT%H:%M:%S.%fZ').minute }}
              {% endif %}

I know, it's not pretty, and I have to find a better way of converting the date from UTC to my time zone, but for the moment it works just fine.

The auto-entities plugin is really powerful, this is just the tip of the iceberg in my opinion, but I hope you'll find it useful!

Did you find this article valuable?

Support Bogdan Bujdea by becoming a sponsor. Any amount is appreciated!