Tijs Verkoyen made this excellent HACS intergration, if you want to link Home Assistant and EnergieID as from 2022 this would be my recommended way rather then the steps outlined below: https://github.com/tijsverkoyen/HomeAssistant-EnergyID
Last year my colleague (and friend) Elias made me discover EnergieID, an intuitive and promising Belgian platform to gain insight into your consumption usage. Their web application is pretty straight forward and easy to work with when you want to track water consumption, electricity and heating, and even offers automatic integrations with digital meters.
Consuming the EnergieID API
But I was more interested in how I could integrate EnergieID into my Home Assistant setup because HA is the brain of everything happening in my house and filling in the usage values from the meter in the EnergieID webapp seemed tedious and smelled like it could be automated.
I was set on writing a native Home Assistant integration and submitting a PR to the main repository, but at that time it seemed like talking to their REST API easily via their Python wrapper could only be done with an oauth flow. That oauth flow required emailing someone at the EnergieID team and getting credentials required to complete that oauth flow. I sent a mail, received a response, but not the one I was hoping for: I could not get oauth credentials at that time.
Lucikly, there are a bunch of integrations available on the EnergieID webapp, one of them being webhooks. Unfortunately I could not do as much with webhooks, but at least I could update the values for my meters by triggering the webhook.
Updating consumption via webhooks
Ok, so webhooks it is! Getting these in HA is fairly straight forward. We need to set up some REST commands in HA and then use frontend helpers to update our usage.
First off, create automatic meters via the webhook integration in EnergieID. This will give you a unique URL where you can send a JSON payload to per meter, which will then update the relevant meter.
With all required data for HA we can now create 3 rest_command integrations which can then be called from HA:
yamlenergie_id_set_heating_usage:url: !secret energie_id_usage_webhookmethod: 'post'content_type: 'application/json'payload: '{"remoteId": "ha-webhook-heating", "remoteName": "Aardgas (Home Assistant)", "metric": "naturalGasImport", "unit": "m³", "readingType": "counter", "data": [["{{ now().isoformat() }}", {{ usage }}]]}'energie_id_set_electricity_usage:url: !secret energie_id_usage_webhookmethod: 'post'content_type: 'application/json'payload: '{"remoteId": "ha-webhook-electricity", "remoteName": "Elektriciteit (Home Assistant)", "metric": "electricityImport", "unit": "kWh", "readingType": "counter", "data": [["{{ now().isoformat() }}", {{ usage }}]]}'energie_id_set_water_usage:url: !secret energie_id_usage_webhookmethod: 'post'content_type: 'application/json'payload: '{"remoteId": "ha-webhook-water", "remoteName": "Water (Home Assistant)", "metric": "drinkingWaterImport", "unit": "m³", "readingType": "counter", "data": [["{{ now().isoformat() }}", {{ usage }}]]}'
After a reload these become availble in your Developer tools:
At this point, you could already start writing scripts and automations to update the meter values in EnergieID, but lets go for something more user friendly.
Creating UI helpers to update our meters
Home Assistants relatively new helpers offer a great way to perform more difficult interactions in the frontend and help triggering scripts and automations. Create 1 new Input helper per meter in HA and make sure to set the correct values for step, min, max and unit.
Then with those helpers available, from the frontend (or via YAML if you prefer that) you can create a script to update all meters with the current values from the input helpers
All that we have left to do now is add it to a card in our Lovelace view so that we can very easily update our meters individual values and then send it to EnergieID.
Et voila, a somewhat more convoluted approach to integrating EnergieID and Home Assistant, but for now this will do. There is however good news that landed this month:
The new EnergieID API
EnergieID recently gave its webapp a complete visual overhaul and now allows to interact with the REST API by skipping the tedious oauth flow and just use a user-generated access token. This opens the prospect of me trying to get EnergieID in HA core up again!
In the coming months I will try to find some hours in my spare time to work on this integration which I have roughly outlined with the following goals:
Creates new sensor entities per meter and pulls their state from the meters in EnergieID
Create a HA service which allows to update a meter by just passing a valid entity_id and a value to update the meter with
See what I can do with data anlytics (Grafana / HA recorder etc.)
As always, let me know what you think on Twitter!