Saveeye+ Echelon energy meter module MQTT sensors for HA Energy dashboard

Hey All.

I have recently invested in an module for getting local data from my installed energy meter i Denmark from an Echelon energy meter common in some parts of DK.

The device is an plug in modul for the energy meter that uploads to the manufacture app but also have local MQTT support.

The energy meter have encryption but this module can decode and publish the data local when it have the encryption key, which is available upon request from the energy company.

i have the device set up and it is providing data to my local MQTT server but, the MQTT data is unfortunately not provided as “auto discovery”

And i am having trouble getting my MQTT sensors defined so i can extract the data to be usable.
i have tried different forum post but not found the working solution yet.

my configuration.yaml is split in sub files for MQTT/Template etc.

when i look at the raw MQTT data with MQTT Explorer i get this

{"saveeyeDeviceSerialNumber":"REDACTED","meterType":"MEP meter","meterSerialNumber":"111111","timestamp":"2024-12-25T13:11:06","wifiRssi":-63,"activeActualConsumption":{"total":426},"activeActualProduction":{"total":0},"activeTotalConsumption":{"total":52077943},"activeTotalProduction":{"total":357},"reactiveActualConsumption":{"total":0},"reactiveActualProduction":{"total":175},"rmsVoltage":{"L1":234,"L2":237,"L3":234},"rmsCurrent":{"L1":1892,"L2":146,"L3":208},"powerFactor":{"total":100,"L1":877,"L2":422,"L3":479}}

The “activeTotalConsumption” is my energy meter value in Wh and not in KWh as displayed on the meter it self

and “activeActualConsumption” is my live power usage.

these is the primary 2 entities that i would like the get working sensors for but, if possible all sensors provided by the device.

i have tried these sensor configuration i my MQTT.yaml sourced from reddit and other places and modified to my config “i think”

sensor:
  - state_topic: "saveeye/telemetry"
    name: Saveeye total watt-hours
    unique_id: "saveeye_totalConsumptionWh"
    device_class: "energy"
    state_class: "total_increasing"
    unit_of_measurement: "Wh"
    value_template: '{{ value_json["activeTotalConsumption"] }}'
  - state_topic: "saveeye/telemetry"
    name: Saveeye total kilowatt-hours
    unique_id: "saveeye_totalConsumptionkWh"
    device_class: "energy"
    state_class: "total_increasing"
    unit_of_measurement: "kWh"
    value_template: '{{ (value_json["activeTotalConsumption"] / 1000) }}'

but so far no dice.

Any help greatly appreciated

/Martin

value_json["activeTotalConsumption"]["total"]

@koying Thank you very much.

That worked.

With you help and a lot of other forum posts and searching i have now managed to “make” an manual MQTT device that have most of the entities from the Saveeye+ device that i needed.

If others are interrested my MQTT.yaml file is now looking like this

sensor:
  - state_topic: "saveeye/telemetry"
    name: Total Energy Wh
    unique_id: "saveeye_totalConsumptionWh"
    device_class: "energy"
    state_class: "total_increasing"
    unit_of_measurement: "Wh"
    value_template: '{{ value_json["activeTotalConsumption"]["total"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
  - state_topic: "saveeye/telemetry"
    name: Total Energy kWh
    unique_id: "saveeye_totalConsumptionkWh"
    device_class: "energy"
    state_class: "total_increasing"
    unit_of_measurement: "kWh"
    value_template: '{{ (value_json["activeTotalConsumption"]["total"] / 1000) }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
  - state_topic: "saveeye/telemetry"
    name: Total Power
    unique_id: "saveeye_totalpower"
    device_class: "power"
    state_class: "measurement"
    unit_of_measurement: "W"
    value_template: '{{ value_json["activeActualConsumption"]["total"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
  - state_topic: "saveeye/telemetry"
    name: Serial nr
    unique_id: "saveeye_DeviceSerialNumber"
    device_class: "enum"
    icon: mdi:identifier
    value_template: '{{ value_json["saveeyeDeviceSerialNumber"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
  - state_topic: "saveeye/telemetry"
    name: Meter nr
    unique_id: "saveeye_meterSerialNumber"
    device_class: "enum"
    icon: mdi:identifier
    value_template: '{{ value_json["meterSerialNumber"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""
  - state_topic: "saveeye/telemetry"
    name: L1 Voltage
    unique_id: "saveeye_rmsVoltageL1"
    device_class: "voltage"
    state_class: measurement
    unit_of_measurement: V
    icon: mdi:sine-wave
    value_template: '{{ value_json["rmsVoltage"]["L1"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""
  - state_topic: "saveeye/telemetry"
    name: L2 Voltage
    unique_id: "saveeye_rmsVoltageL2"
    device_class: "voltage"
    state_class: measurement
    unit_of_measurement: V
    icon: mdi:sine-wave
    value_template: '{{ value_json["rmsVoltage"]["L2"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""
  - state_topic: "saveeye/telemetry"
    name: L3 Voltage
    unique_id: "saveeye_rmsVoltageL3"
    device_class: "voltage"
    state_class: measurement
    unit_of_measurement: V
    icon: mdi:sine-wave
    value_template: '{{ value_json["rmsVoltage"]["L3"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""
  - state_topic: "saveeye/telemetry"
    name: L1 Current
    unique_id: "saveeye_rmsCurrentL1"
    device_class: "current"
    state_class: measurement
    unit_of_measurement: mA
    icon: mdi:current-ac
    value_template: '{{ value_json["rmsCurrent"]["L1"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""
  - state_topic: "saveeye/telemetry"
    name: L2 Current
    unique_id: "saveeye_rmsCurrentL2"
    device_class: "current"
    state_class: measurement
    unit_of_measurement: mA
    icon: mdi:current-ac
    value_template: '{{ value_json["rmsCurrent"]["L2"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""
  - state_topic: "saveeye/telemetry"
    name: L3 Current
    unique_id: "saveeye_rmsCurrentL3"
    device_class: "current"
    state_class: measurement
    unit_of_measurement: mA
    icon: mdi:current-ac
    value_template: '{{ value_json["rmsCurrent"]["L3"] }}'
    device:
      identifiers: "Echelon+"
      manufacturer: "SaveEye.eu"
      name: "Saveeye+ for Echelon"
      model: "V1"
      serial_number: ""

This is a possible solution for others to start from, not necessary the most correct way to do it but it seems to work

1 Like

I am going bald from tearing my hair out, trying to get the saveeye+ kamstrup to publish anything or even connect to a. mosquitto broker. @martinelv, did you have issues or was it just straightforward?

I have not tried the Kamstrup type only the Echelon type, but have 2 of them running stabil since new years.
@martinp.b.ring

Before i asked for help here, i did aske SaveEye support and they were kind to send a guide with info on how to make connection to a local MQTT server.

And also info regarding some template from an other HA/customer from one of there other products,

unfortunately i could not get that info to work, there for the ask for help here that worked out.

I do not know if it is allowed to paste the infor here… so just the general info
But i did have problems getting the second modul to work,

also the guide from SaveEye mentions that the password for the MQTT user is saved on there servers in Unencrypted form…and therefor i chose to generate a very long/complex password for my new MQTT user and only allow it to work locally, but i did have hard time at first and had to make it shorter bacuse when trying to safe it, it rebooted the module at came back up without the working MQTT info and also even though that the port “1883” is pre-populated you need to type it or it will fail.

But depending on how and if you have remote access to your HA your PW needs to bee very secure and because HA do not have very good RBAC it is to my knowledge very hard to block the specific user from accessing other unwanted parts of your system.

please see this WTH

I have an idea to try to block the module from internet access, but have not tested that yet, so do nok know if it will still work locally… i hope so…
and SaveEye Support mentioned that they are working on making it easier to get working in HA

/Martin