Easee binding

I wanted to mention that I just started working on a binding. It is still in a very early state but basically it already works for a few channels.
Source can be found here: GitHub - alexf2015/openhab-addons at easee-dev

PR is not yet opened as there is still too much missing.

Maybe I will need some help later on as I do not have a car yet and thus there is a lot of stuff I cannot test. And also the API documentation is quite short there is no explanation of the meaning for all those “channels”. Also those status channels return integers and I could not find any mapping to text, yet.

Early access version can be downloaded here: http://www.friese-de.eu/openhab2/org.openhab.binding.easee-3.3.0-SNAPSHOT.jar

5 Likes

Hi Alex

I doubt about buying a Easee charger for my Mini Elecric (delivering soon). Is the Easee a good choiche when you use OpenHAB. Or do you regret your buy?

Kind regards

Willem

I just bought it a few weeks ago so Ido not have a lot of experience. Especially I could not really test it a my car is not yet delivered.
At the moment I can see one main drawback: this device relies on a Cloud API. Without Internet/Cloud it has very limited functionality.

just aaded some more functionality. More channels in general are supported and also write access for a few channels is available:

  • dynamicChargerCurrent can be set to dynamically adopt current to availability of solar power
  • phaseMode can bet used to control usage of phases. Not sure if this can be done while charging
  • limitToSinglePhaseCharging is also available but in my case it returns always NULL and cannot be set. Maybe this is only available during charging sessions?

Hi Alex,
I am using my own scripts to manage my Easee Wallbox.
One of the most important setting is:
dynamicCircuitCurrentP1
dynamicCircuitCurrentP2
dynamicCircuitCurrentP3

This is the preferred way to change between 1 Phase loading and 3 phase loading. You can set the power for each phase. If you load only one phase, you set the other phases to „0“.

Only the „dynamic“ settings should be used.
Reason: The other parameter could crash the flash memory, if you have lots of write actions.
See this thread (in German):

Good work!
Michael

EDIT: Ok I will integrate this. In the first place I did not find this because there are dedicated endpoints for the circuits at least for changing values. The “State” Endpoint allows reading the above mentioned values so reading should be easy. For write access I am not sure about a few more details:

  1. Is is necessary to set all 3 phases at once? (If yes this could be a problem as per design each channel is handled as a single request now)
  2. The circuit endpoint requires two parmeters: siteId and circuitId. How do I find out the valid ids for those parameters?

Hi Alex,
Site ID and Circuit ID can be determined by the API as well.
In my case I used this python script to read my Site ID and Circuit ID. Then I was able to hardcode it.

All 3 phase values can be set in one call.
In my rule, I made a call like this:

easeeRequestBody = '{ dynamicCircuitCurrentP1: ’ + newChargingCurrentP1.toString + ', dynamicCircuitCurrentP2: ’ + newChargingCurrent.toString + ‘, dynamicCircuitCurrentP3: ’ + newChargingCurrent.toString + ’ }’
json = sendHttpPostRequest(url, “application/json”, easeeRequestBody, headers, 5000)

Edit:
I checked the API:
Get Site ID:

Perhaps with this call, you can get the circuit ids:

Thanks for your efforts with this binding. I just downloaded and tried it. Runs perfectly.
At the moment I have a few DSL scripts that communicates via the API, but I’d love to replace them with this binding.
A question. How am I supposed to use the “Generic Charger Command”


I’ve tried to send strings to the Item, for example pause_charging,
image
But it does nothing. Any advise?

It should work the way you tried it but I could not test this. MAybe something is still missing in my implementation.

Currently I am working on a bigger change. Autodiscovery is now implemented and different things will be supported.
There will be the main item (bridge) which represents the site. Within a given site all circuits and chargers will be discovered automatically. I am working on that now as this modelling is closer to what Easee did in theri API.

Ok. I’ll assist in any way possible with testing. I’m unfortunately not a great coder. :sob: Current and power per phase would be a feature at least I would value.

I just finished with a rework of the binding. It now has a bridge and supports different things to reflect the model which is defined by Easee.
Bridge is now on site level which may contain multiple circuits which each may contain multiple chargers.
Circuit implementation is not yet done but site (without any channels) works by means that it establishes the cloud connection and charger implentation should also work as before.
@Daniel_Linder I checked the command implementation was not completed but should now work.

The updated version should be available in a few hours I do not know when my jenkins will manage to build it.

1 Like

If I understand this correctly. I shall add the Easee site (bridge) using the site ID.
(I am not sure if the Site ID can be found anywhere else that via a query to the API? It might not be obvious how to get this for people who havn’t used the API)
However, that works fine, it goes online.
But should the charger be found using a “search”?
That doesn’t work for me.
If I add the charger manually using the Charger ID, it stays in “unknown” state.

As the binding was redesigned you need to remove everything, also the charger because it has changed. Maybe this is the reason why it does not work anymore. The readme (see github) already contains information how to retrieve the site id without using the API which is quite complicated.

[…] The ID of your site can be found out via the sites overview (Easee.no). You just need to click on one of the sites listed there, the id will be part of the URL which is then opened. It will be a number with typically 6 digits.

I checked my code and I found some more issues which are now fixed.

I did remove the old things. I will try again when your new build is available. Will also try to clear the cache, if there is some old traces that’s causing the issue.

Downloaded the latest build an hour ago. Cleared the cache. Discovery worked this time. Items populated. Will test the commands on my next charge.

new version now supports setting dynamicCurrent channels of circuit.
phases can be set individually (which will reset the other phases to 0) or via a special String channel all 3 phases can be set at once.

1 Like

Nice work, thanks a lot!

Edit: just read the description looks like it doesn’t support command to unlock the cable.
I currently use the following command to lock/unlock cable:

var string easeeRequestBody = "{\"state\": "+ locked + " }"
json = sendHttpPostRequest("https://api.easee.cloud/api/chargers/xxxxxxxx/commands/lock_state", "application/json", easeeRequestBody, headers, 5000)

Hello, is the link from the first post still up to date or where can you download the latest version to test

The link above should always point to the latest version

It is not yet supported but I will put this on my list.

When i add a circuit thing i get this in log
2022-06-10 14:10:30.557 [WARN ] [internal.handler.EaseeCircuitHandler] - no bridge handler found

and the thing status is:

Status: UNKNOWN
waiting for bridge to go online

i need to use the dynamic_current#setDynamicCurrents channel its not in my charger thing

i tried to send “0,0,0” to the item and got this:

2022-06-10 14:29:57.820 [DEBUG] [e.internal.handler.EaseeThingHandler] - command for easee:circuit:4d8fe252c9:dynamic_current#setDynamicCurrents: 0,0,0
2022-06-10 14:29:57.828 [WARN ] [internal.handler.EaseeCircuitHandler] - no bridge handler found