WEBVTT

00:00.000 --> 00:13.120
All right. Hello everyone. I'm Christian Wiseman. I work on a project called Citrinos.

00:13.120 --> 00:18.200
We are an open source charge station management system. And last year I was here to give

00:18.200 --> 00:23.760
a talk, kind of introducing it. We were very fresh. And this year I can give you one year

00:23.760 --> 00:28.760
of progress and what we kind of did over the last year and how much fun we have had.

00:28.760 --> 00:35.600
All right. Just for the formalities, I'm a contributor to Citrinos. I'm also one of the

00:35.600 --> 00:41.400
original people who were like, we should do something about this. I'm a senior software

00:41.400 --> 00:46.680
engineer at a company called S44 Energy. So we do EV charging things and other energy

00:46.680 --> 00:54.200
things. And I've been working on EV charging for roughly combined seven years. So I've

00:54.200 --> 01:03.000
seen some things. All right. So maybe, or probably, lots of you know about this, the EV charging

01:03.000 --> 01:08.800
landscape, but just to run you through kind of our problem statement, I'm a driver. I just

01:08.800 --> 01:15.680
got this new car. And I'm doing a road trip to Brussels. So on the way, I probably need to

01:15.680 --> 01:22.160
charge. And for that, I'm going to sign a contract with the EMSP, the E mobility service

01:22.160 --> 01:27.720
provider that tells me where I can charge and that builds me. And so they might give me an

01:27.720 --> 01:32.800
RFID card or just an app and say, all right, you're good to charge. So then I drive

01:32.800 --> 01:39.680
direction Brussels and I get to a charging station. All right. So now I have my RFID card

01:39.720 --> 01:46.400
and first I plug in or after, but important part is I plug in for completeness. And maybe

01:46.400 --> 01:54.720
in the other talks you've heard, the car talks a protocol either IEC 61851 or ISO 15118

01:54.720 --> 02:02.160
with a charger. And then I hold up my RFID card to say, all right, it's me. You can please

02:02.160 --> 02:07.960
charge my car. I will pay for it. And then there's the charger that talks a protocol called

02:08.000 --> 02:13.760
OCPP, the open charge point protocol to a charge point operator. It was managing all the

02:13.760 --> 02:19.840
charge points. Then the charge point operator reaches out to the EMSP and asks, hey, is this

02:19.840 --> 02:25.640
person good for their money or will you at least guarantee giving me money for this electricity

02:25.640 --> 02:35.480
and the EMSP is, yeah sure. All good. All right. So you see, there's lots of protocols.

02:35.480 --> 02:42.600
And yet they're not that fun to implement. I mean, it's fun the first time, but after that it's

02:42.600 --> 02:48.600
kind of repeating the same thing. And the actual bigger problem is everyone looks at these protocols

02:48.600 --> 02:52.840
and think they're art and so they interpret them a little bit differently. And then you have to

02:52.840 --> 02:57.960
build an ifs that if the charger starts with this serial number, then it's probably that

02:57.960 --> 03:03.000
manufacturer. And yeah, then they will send this message first and that's kind of not great.

03:03.800 --> 03:11.480
And so we thought someone should do something about this. And our part is basically the cloud

03:11.480 --> 03:18.440
CPO part. So our main idea was OCPP is complicated and complex and there's a new version

03:19.240 --> 03:25.880
new as in 2018, 2020, but it hasn't really been adopted by the industry. So someone should do

03:25.880 --> 03:31.480
something about it to make it easier to adopt this. And that's where we came in. We saw there's

03:31.560 --> 03:35.960
another project called Everest that's doing something similar but on the charger side.

03:36.760 --> 03:43.640
And so basically we were inspired like, hey, that's a good idea. We should also do something like that,

03:43.640 --> 03:54.760
but for up here. All right. So we're the charge station management system. We are basically in

03:54.760 --> 04:04.040
the cloud. And so we use some cloud technologies. So the charger itself talks to the OCPP router,

04:04.040 --> 04:12.600
OCPP. OCPP is on web sockets. And our main thought was OCPP 201. That's the thing we want to do.

04:12.600 --> 04:18.680
And so that's what we've implemented. Because for 1.6, there's some other soaps stuff, but

04:19.640 --> 04:23.320
yeah, we don't want to do that. I hope no one does that really anymore.

04:24.840 --> 04:34.680
All right. So then OCPP arrives at our OCP router and then we basically pop it on a message bus

04:34.680 --> 04:40.200
and our modules then can take it from the message bus do things and then respond.

04:40.680 --> 04:49.000
The idea is that the modules are then exposing a rest API and that way you can extend it or

04:49.000 --> 05:00.200
interact with it without being tied into our setup. So our core idea is the implementation part

05:00.200 --> 05:05.320
of running at the implementation of a protocol shouldn't be the hard part of running a

05:05.320 --> 05:11.560
charge station management. It should be basically easy part. If you're running a charging network,

05:11.560 --> 05:16.120
you should make your network good because you did something special, not because you implemented

05:16.120 --> 05:23.240
a protocol because that should be the baseline. All right. So for that, we basically split up our

05:23.240 --> 05:30.120
code base into different layers. So you can pick any layer of them and extend or build on top.

05:30.120 --> 05:36.040
And so we have kind of just the base of where we have the data structures, then some persistence

05:36.040 --> 05:43.400
on integrating with the database. Right now we're kind of going or leaning heavily on Postgres

05:43.400 --> 05:54.040
because there's some post-just things that we like around geospatial. And then we have some

05:54.040 --> 05:59.160
mutals just to provide functionalities like for certificate things. And then we have the actual

05:59.160 --> 06:07.640
module that is the top layer that's exposing the rest API. And because we have the different modules,

06:07.640 --> 06:13.640
they're basically split similar along the lines of the protocol. You can scale them individually.

06:13.640 --> 06:18.520
So you can build a server with each module if you want. And then you have the transaction module

06:18.600 --> 06:26.360
that gets hammered for a lot of times. Scale really high while the configuration module just hangs

06:26.360 --> 06:34.520
out. All right. I need to speed up a bit. So and the other cool thing is since everything's on the

06:34.520 --> 06:40.120
message broker, you can add your own modules. Like we had someone add a payment module that hooks

06:40.120 --> 06:46.520
into the message broker and then does the stripe integration but just interacts on the message broker

06:46.600 --> 06:53.480
and you don't have to hack anything in. You just attach. All right. So what happened over the last year?

06:53.480 --> 06:58.280
So we're now part of the Linux Foundation Energy. So we now have technical steering committees.

06:59.320 --> 07:05.560
We also release the one dot over version and now we're on one dot five dot one I believe.

07:06.920 --> 07:16.200
Yeah, we also traveled quite a bit to basically try our stuff. So we've been testing at places like the

07:16.280 --> 07:24.760
Open EV charging summit in Texas. We went to a plug fest in Bodshurnborn in Germany where

07:24.760 --> 07:32.520
that Everest was hosting. We went to a plug fest in the US and plug fest are where basically

07:32.520 --> 07:39.480
charger manufacturers and CSMS or people, they test their stuff. So you sit around a table for

07:39.480 --> 07:44.840
two hours and then you say, all right, now give me electricity click and then you hope that the message

07:44.920 --> 07:53.320
exchange correctly and the light bulb goes on. So that was really fun. And then we were at a conference

07:53.320 --> 08:02.680
in Berlin promoting USB-P201 and also at the LFE summit in Brussels. Also we've done some webinars

08:02.680 --> 08:07.960
on the protocols just because we like the protocols and we want to push people forward to

08:07.960 --> 08:16.600
the good versions of the protocols. All right, and so we in the meantime have also implemented

08:16.600 --> 08:23.560
the full protocol also things like advanced user interface where you can show QR codes on the user

08:23.560 --> 08:33.640
interface of the charger. We've implemented OCPI so that out part of the CPO and because for

08:33.720 --> 08:40.280
getting certified you have to have a UI and not just a directness on top of a database,

08:40.280 --> 08:47.960
we also had to build our own UI but now we're certified. So the OCA that maintains that protocols

08:47.960 --> 08:54.680
said cool, your implementation rocks and we're also starting to get contributions from the outside

08:54.680 --> 09:02.840
world. So if you're seeing this, thanks a lot and you're awesome. All right, in the lessons learned

09:04.200 --> 09:10.120
well not everyone wants to be on the forefront of implementing a protocol. It's hard to move

09:10.120 --> 09:17.480
people forward even if the protocol is just a lot better. And so yeah that's definitely one thing

09:17.480 --> 09:24.120
we've learned. We've also been explaining what open sources a lot and UIs are quite important.

09:24.120 --> 09:29.080
A lot of people see something shiny and then they're happy but the underlying technology is not

09:29.080 --> 09:33.320
so important and we went with the technology first. So now we're building the shiny part on top.

09:35.800 --> 09:42.440
And yeah we try to be very open in all directions which like for postgres we're kind of narrowing

09:42.440 --> 09:49.560
down in one direction. So what's next? All right, release 1.6 is next and with that because not

09:49.640 --> 09:57.880
everyone is on the forefront of to a one. We're also implementing OCP 1.6 and you can see a screenshot

09:59.480 --> 10:06.840
I connected my home charger the other day to Citrine. All right and yeah then we're implementing

10:06.840 --> 10:13.720
some other protocols and especially adding to the new UI. If you want to get involved join the

10:13.720 --> 10:19.400
Discord server there's a QR code and make a pull request and especially attend our technical

10:19.400 --> 10:26.440
steering committees. They're first Thursday every month 6 p.m. UTC so you're a time it's good

10:26.440 --> 10:33.560
U.S. it's a bit gotta get up early. All right I'm out of time I'll be hanging out outside

10:33.560 --> 10:38.520
if you want to talk about CSMS or anything else. Thanks.

