How to configure a Sensor so that is useable in in the energy Dashboard

Cool, so I then need to wait. As kWh for electricity are the same DPT as kWh for gas… the DPT defines only the unit of measurement, not any type of usage. Hence I guess kWh are currently recognized as electricity.

In the meantime I am going to give that “customize:” tag a try

Thanks !
Cu
Frank

Ok, got it working. In case somebody else uses KNX sensors and can’t figure this out:

knx:    
  sensor:
    - name: "Haus Zählerstand Bezug"
      state_address: "13/4/31"
      type: active_energy_kwh
      state_class: total_increasing
      
    - name: "Haus Zählerstand Einspeisung"
      state_address: "13/4/32"
      type: active_energy_kwh
      state_class: total_increasing
      
    - name: "Gas Zählerstand m3"
      state_address: "13/5/0"
      type: volume
      state_class: total_increasing


homeassistant:
  customize:
    sensor.gas_zahlerstand_m3:
      device_class: gas
      unit_of_measurement: "m³"


Now you can use the Entities in the configuration for the energy dashboard. After some minutes you’ll see the dashboard populate.

Have a great weekend
Cu
Frank

ps: unfortunately, for GAS you can only use “m³” (be sure to not use “m3” instead) but not kWh, as we pay for gas in €/kWh and the calculation factor between m³ and kWh is slightly different in every area.

Thank you for the information because KNX associated with Home assistant is not usual and it is difficult to find information.
The gas consumption display works and I tried to reproduce the same for the water consumption but I encounter a problem.

knx_sensor.yaml

#Compteur gaz 
  - name: compteur_gaz
    state_address: "9/7/1"
    type: "volume"
    sync_state: every 30
    state_class: total_increasing

#Compteur eau (litres)
  - name: compteur_eau
    state_address: "9/7/12"
    type: "volume_liquid_litre"
    sync_state: every 30
    state_class: total_increasing

customize.yaml

sensor.compteur_gaz:
  device_class: gas
  unit_of_measurement: "m³"

sensor.compteur_eau:
  device_class: water
  unit_of_measurement: "L"

the device class “water” is not accepted and I have this error message

Value is not accepted. Valid values: “apparent_power”, “aqi”, “awning”, “battery”, “battery_charging”, “blind”, “carbon_dioxide”, “carbon_monoxide”, “cold”, “connectivity”, “current”, “curtain”, “damper”, “date”, “door”, “duration”, “energy”, “frequency”, “garage”, “garage_door”, “gas”, “gate”, “heat”, “humidity”, “illuminance”, “light”, “lock”, “moisture”, “monetary”, “motion”, “moving”, “nitrogen_dioxide”, “nitrogen_monoxide”, “nitrous_oxide”, “occupancy”, “opening”, “outlet”, “ozone”, “plug”, “pm1”, “pm10”, “pm25”, “power”, “power_factor”, “presence”, “pressure”, “problem”, “receiver”, “running”, “safety”, “shade”, “shutter”, “signal_strength”, “smoke”, “sound”, “speaker”, “sulphur_dioxide”, “switch”, “tamper”, “temperature”, “timestamp”, “tv”, “update”, “vibration”, “volatile_organic_compounds”, “voltage”, “window”.

The device class “water” is well mentioned in the documentation sensor (devices)
The problem is the same with the device class “volume”

I have similar issue. I have sonoff device that gives output as power W, i tried reimann through UI but … couldnt get it working, not shown anywhere in energy dashboard :frowning:

It’s not surprising for the sonos which exposes a power (in W) while the energy dashboard expects an energy (in Wh).

i know, this is why i tried riemann sum integral. I just dont know how to set it up, do i need to make it via configuration.yaml ?

And, im a complete noob on these things :slight_smile:

There’s no need to do anything in yaml anymore. You can do everything from the UI…

Create a new helper using the Riemann (make sure to give it a new name and select your sensor) than wait a bit and you should have the sensor available in the energy dashboard.

The new energy sensor can also be visible in the Developer tools > States… Take a screenshot from there with the attributes and share it here if you still having issues.

1 Like

Yes, thank you. I was just too hesitant, needed to wait for it to get something to show :slight_smile:

In my case with a value already in m3, so the Riemann conversion does not seem to be the solution?

Dear,
I created a Sensor (Arduino) which give a value in M3.
I need to convert to energy (Wh) by simply make a conversion (multiplication by +/- 10).
It is something similar to Riemann but no “integration” but easier a multiplication.
Is it possible to create a HELPER which do a multiplication and change the unit to Wh ?
If not, I need to do it in my Arduino and expose energy directly. But I suppose other device on the market expose volume and need to be converted to energy.
Thank a lot

You can create a simple template sensor.

Something like this:

template:
  - sensor:
    - name: Your new sensor name
      unique_id: your_new_sensor_unique_id
      unit_of_measurement: "Wh"
      device_class: energy
      state_class: measurement
      state: >-
        {% if is_number(states('sensor.your_existing_entity_id')) %}
          {{ states('sensor.your_existing_entity_id') * 10 }}
        {% else %}
          {{ states('sensor.your_existing_entity_id') }} # this will catch any 'unknown' states from the source sensor and replicate that to the new sensor
        {% endif %}
1 Like

Would the input sensor need to be in W or KW?

Hi,

I also have an issue like this. I use Tasmota and get entities for Power and “smartmeterreader_energy_total_in” and “smartmeterreader_energy_total_in_out” from my power meter in the Tasmota entities. All so fine, but I can not select the energies in the Energy Dashboard without the “trick” by creating a template sensor (see solution here: Energy consumption with Tasmota power monitoring plug).

But this does not satisfy me :wink:

I also tried to change the device_class, unit_of_measurement and state_class with the customize.yaml, which brings the needed effect of the entity to show up in the Energy Dashboard, but it doesn’t. So to vizualize it for this post here I have the following configuration:

customize.yaml:

#sensor.bitshake_smartmeterreader_energy_total_in:
#  device_class: energy
#  unit_of_measurement: 'kWh'
#  state_class: total_increasing
sensor.bitshake_smartmeterreader_energy_total_out:
  device_class: energy
  unit_of_measurement: 'kWh'
  state_class: total_increasing

And the entities look as follows (after complete restart of Home Assistant):

Although the “…_energy_total_out” has the correct attributes, it does not show up in the Energy Dashboard. I also tried it with state_class: total, but it was the same.

Can someone help here out please?

Thank you!

Ok, it even doen’t work with the solution I linked, so I have no solution yet.

Following problem with the solution which I linked. I added the following sensor templates in the configuration.yaml:

template:
  - sensor:
      - name: "Stromzaehler_Energie_Total_Bezug"
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        state: "{{ states('sensor.bitshake_smartmeterreader_energy_total_in')|float}}"
  - sensor:
      - name: "Stromzaehler_Energie_Total_Einspeisung"
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        state: "{{ states('sensor.bitshake_smartmeterreader_energy_total_out')|float}}"

And then I really can choose “Stromzaehler_Energie_Total_Bezug” and “Stromzaehler_Energie_Total_Einspeisung” in the Energy Dashboard, but get the following error:

Does anybody knows how to fix this?

Not it works, also without the template Sensor. Problem was, that I set in the customize.yaml

unit_of_measurement: 'kWh'

and it must be

unit_of_measurement: kWh

without the ticks. Furthermore I needed to remove the old statistics via Development Panel->Statistics. There it was shown that the entities have a problem, which can be fixed.

Now I have not template sensors in the configuration.yaml anymore and the following entity changes in the customize.yaml:

#Tasmota
sensor.bitshake_smartmeterreader_power_power_curr:
  device_class: power
  unit_of_measurement: W
  state_class: measurement
sensor.bitshake_smartmeterreader_energy_total_in:
  device_class: energy
  unit_of_measurement: kWh
  state_class: total
sensor.bitshake_smartmeterreader_energy_total_out:
  device_class: energy
  unit_of_measurement: kWh
  state_class: total

Now the energy entities can be selected in the energy dashboard!

1 Like

I was also having trouble with a template sensor through a riemann helper and adding the helper to the dashboard. As posted above it seems important that the template sensor has state_class: measurement.

Example:

- sensor:
    - name: "Current Power"
      unit_of_measurement: 'W'
      device_class: "power"
      state_class: measurement
      state: >
        {% if is_state('switch.some', 'on') %}
          400
        {% else %}
          0
        {% endif %}

After this I created a new Riemann integration using the Helper UI and was able to add the helper to the Energy Dashboard as an Individual device. Hope this helps.

I’m some how not able to figure out on why I can’t select this sensor in the HA dashboard:

    - name: "Growatt Solar PV Energy Today"
      state_topic: "energy/solar"
      value_template: '{{ ((value_json["PV1EnergyToday"] + value_json["PV2EnergyToday"]) | round(2)) }}'
      device_class: energy
      state_class: total_increasing
      unit_of_measurement: "kWh"

The individual ones from the strings can be selected without issues:

    - name: "Growatt Solar PV1 Energy Today"
      state_topic: "energy/solar"
      value_template: '{{ value_json["PV1EnergyToday"] }}'
      device_class: energy
      state_class: total_increasing
      unit_of_measurement: "kWh"

    - name: "Growatt Solar PV2 Energy Today"
      state_topic: "energy/solar"
      value_template: '{{ value_json["PV2EnergyToday"] }}'
      device_class: energy
      state_class: total_increasing
      unit_of_measurement: "kWh"

As far as I see there’s no difference really between them, all have the energy device_class, a correct unit and state_class

Thank you - that solved it for me. I had old statistics data in the sensor which needed to be cleaned first. After that, it showed up fine :slight_smile:

1 Like

Glad it helped. If I remember correctly I actually found the answer in someones YouTube video. I wish I remember where so I could credit them.

Thanks as well, this helped me to get going. This is the full configuration for our eBZ DD3 2R06 ETA - ODZ1 smart meter :

# Energy meter: eBZ DD3 2R06 ETA - ODZ1
sensor:
  - platform: serial
    serial_port: /dev/ttyUSB0
    baudrate: 9600
    bytesize: 7
    parity: E
    stopbits: 1
    name: smartmeter_data
recorder:
  exclude:
    entities:
      - sensor.smartmeter_data
template:
  - sensor:
      - name: smartmeter_import_total
        unit_of_measurement: "kWh"
        state_class: "total_increasing"
        device_class: "energy"
        state: >
          {% if states('sensor.smartmeter_data')|regex_search("1-0:1\.8\.0\*255") %}
            {{ states('sensor.smartmeter_data')|regex_findall_index("\((\d*\.\d*)\*kWh\)") | float | round(1) }}
          {% else %}
            {{ states('sensor.smartmeter_import_total') | float }}
          {% endif %}
      - name: smartmeter_export_total
        unit_of_measurement: "kWh"
        state_class: "total_increasing"
        device_class: "energy"
        state: >
          {% if states('sensor.smartmeter_data')|regex_search("1-0:2\.8\.0\*255") %}
            {{ states('sensor.smartmeter_data')|regex_findall_index("\((\d*\.\d*)\*kWh\)") | float | round(1) }}
          {% else %}
            {{ states('sensor.smartmeter_export_total') | float }}
          {% endif %}
      - name: smartmeter_consumption_total
        unit_of_measurement: "W"
        state_class: "measurement"
        device_class: "power"
        state: >
          {% if states('sensor.smartmeter_data')|regex_search("1-0:16\.7\.0\*255") %}
            {{ states('sensor.smartmeter_data')|regex_findall_index("\((\d*\.\d*)\*W\)") | float }}
          {% endif %}
      - name: smartmeter_consumption_phase1
        unit_of_measurement: "W"
        state_class: "measurement"
        device_class: "power"
        state: >
          {% if states('sensor.smartmeter_data')|regex_search("1-0:36\.7\.0\*255") %}
            {{ states('sensor.smartmeter_data')|regex_findall_index("\((\d*\.\d*)\*W\)") | float }}
          {% endif %}
      - name: smartmeter_consumption_phase2
        unit_of_measurement: "W"
        state_class: "measurement"
        device_class: "power"
        state: >
          {% if states('sensor.smartmeter_data')|regex_search("1-0:56\.7\.0\*255") %}
            {{ states('sensor.smartmeter_data')|regex_findall_index("\((\d*\.\d*)\*W\)") | float }}
          {% endif %}
      - name: smartmeter_consumption_phase3
        unit_of_measurement: "W"
        state_class: "measurement"
        device_class: "power"
        state: >
          {% if states('sensor.smartmeter_data')|regex_search("1-0:76\.7\.0\*255") %}
            {{ states('sensor.smartmeter_data')|regex_findall_index("\((\d*\.\d*)\*W\)") | float }}
          {% endif %}

When added to a dashboard it looks like this: