As an Open Charge Alliance (OCA) member, we were happy to join Plugfest on February 28th and 29th, 2024.
We were the youngest team to test on the event, but the ability to join gave us a lot of insights!
Another OCA member – PIONIX hosted the event. Their push for open source also set a theme of open source and collaboration!
Open Source in Charging?
One can use several open-source libraries or tools when building a system for chargers. And that is true for both chargers and the software that controls them.
The projects differ in the complexity, language and the level of abstraction they choose.
The more complex systems all have a queuing system with a microservice architecture in mind. This is great for the scalability of teams and the separation of concerns.
The downside is that there is inherent complexity in synchronising state and caching. At this stage, we are focusing on quick prototyping, which is why this higher level of abstraction is not the right fit for us.
ocpp-rpc
- https://github.com/mikuso/ocpp-rpc
- Node.js
- This low-level library handles the OCPP implementation, including the WebSocket establishment.
- It leaves the implementation of the specific handlers and senders of messages fully to the implementation
- This is the library we have built Blive system on.
MaEVe
- https://github.com/thoughtworks/maeve-csms
- GoLang
- This is a CSMS system, including a persistence layer. The focus is on the certificate handling for security profiles and the Plug and Charge feature.
- An MQTT queue is at the heart of the system, which makes it possible to subscribe a custom logic to specific events.
- MaEVe is using Firestore DB as a persistence layer.
EVerest
- https://github.com/Everest
- C++, but it supports modules in C++, Javascript, Python, or Rust.
- EVerest is also using a MQTT queue
CitrineOS
- https://citrineos.github.io/
- TypeScript
- Focuses on CSMS
- Citrine has RabbitMQ for its queuing needs.
- It is using https://directus.io/ for the UI
Testing
During the Plugfest, we got to test our code with several chargers. I am going to sum up some of the learnings. Overall, everyone we interacted with was very kind and patient with us.
Switch EV
Testing started by meeting André Duarte. We have set up the connection pretty quickly. Then we talked a bit more about Switch setup and moved on to testing our “OCPP router” – the ability to support multiple backends for a single charger.
Switch EV also has their backend, making it the perfect candidate for this test, and after some tweaking, we connected both systems!
Wallbox
Next up, I had a blast meeting Martí and Robert from the Wallbox team. I have one of their boxes home, so it was a bit of a star-struct moment 🙂
We soon hit the first spec difference regarding the Authorization call for the charger. We were expecting AuthorizeRequest, but the charger was sending Authorize.
These kinds of findings are precisely what Plugfest is for! The specs say AuthorizeRequest, but then we found that it also says that in Json, the “Request” should be omitted for all requests.
We build a basic auth flow during this session.
Compleo
Compleo guys were on the top of the OCPP spec. They knew it by heart! It was a great chat overall.
During this session, we added the identifier management, so from then on, we only allowed approved folks to charge! We also tested multiple types of authentication – RFID token, car MAC address and so on.
We have also tried stress testing with a sea of fast updates. It applies to all sessions, but storing these messages in our DB now is gold for our future development!
EVBox
With Ramazan and the rest of the EVBox, we continue testing our system with their box. We discussed config one can do on the box and implemented basic support for turning off authorisation as an example for variable settings.
We also worked on getting the transaction events handled and recorded. That way, we can show continuous consumption information per transaction – charging session.
OCTT
Testing against OCTT was an excellent experience as it shows detailed differences between the actual and spec.
We have tested the auth flow (that we have just built :)).
Next, we got Dale from MaEVe to join us and further test the OCPP router with us. This time, we were able to test more complex scenarios when one, the other or both systems could authorise a session.
Alfen
Testing with Thomas was cool. We focused on getting remote commands working. I tweaked our UI so it can send the correct events for reset and remote start.
We also tested controlling their system display. This is useful for showing the price or ad-hoc payment QR code.
aixACCT Systems
Lukas and the gang were very knowledgeable regarding the low-level systems. We chatted about security profiles, Plug and Charge flow, and the certificates involved there. Super insightful!
Pionix
The final session was with no one other than the Pionix team hosting the event. We talked about their open-source work as well as about V2G opportunities.
With Kai, we also chatted about our shared fondness for Hyundai EVs.
Conclusion
With our team only a few months old in the space, we expected a humbling experience to test with market leaders.
In the end, though, we have gained crucial insights into open-source collaboration in charging systems, real-life experience connecting to different charger brands, insights into existing systems and many new friends.
The event was a testament to interoperability and the drive to share knowledge to move the needle on the overarching goal of sustainability!