-
-
Notifications
You must be signed in to change notification settings - Fork 358
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Smart Charging OCPP1.6 #92
Comments
@JavaIsJavaScript is working on the smart charging part of OCPP. But keep in mind that the interface itself is not smart, adding something smart requires a lot of buisness logic for the specific use case. That is beyond the scope of the SteVe project. |
hello, thanks for your interest. the reason why smart charging profile was not implemented can be found in the discussion of #44. but the building blocks are already there. a short summary:
i want to illustrate the basic flow of one exemplary operation Trigger Message in codebase, such that you can implement these missing 3 operations in a similar way.
|
@KDesai13 I also have a Delta charging station (AC Mini) and have tried some Smart Charging tests with @JavaIsJavaScript 's fork. I believe the messages are correct but my GetCompositeSchedule query always gets a "rejected" response from the charging station. I would be happy to cooperate with you on making Delta smart charging work with Steve framework. |
Thank you so much for your details explanation and interest to support. I have been going through the OCPP1.6 protocol for all the operations and trying to understand GetCompositeSchedule operation initiated by Central System. One of the statement says, "IEC 15118 limits might be taken into account." Have you considered the standard IEC 15118 in account while implementing Smart Charging (GetCompositeSchedule)? Also need to understand,
Please clarify and explain your point of view. Sorry by mistake, I closed the issue. Consider it's Open. Thank you. |
My suggestion is to ignore IEC 15118 unless supporting it is specifically defined as part of your use case. OCPP1.6 smart charging does not rely on the existence of 15118 communications. A charging station like mine (Delta AC Mini) does not include 15118 power line communication hardware, so it would not even be aware when a 15118-capable vehicle plugs in. Regarding your point 3., you are mistaken. All three profile purposes may be set in a charge point simultaneously, and section 3.13.3 of the OCPP spec (occp-1.6_edition_2.pdf, 2017-09-28) describes how they interact. There is no role for 15118 required. My own use case is for "Local Smart Charging" with about 15 stations (in the future). TxDefaultProfile and TxProfile messages will be used before and during charging (sec 5.16.3) in order to ensure that the total load being drawn by the stations is within the available electrical service capacity. By using OCPP1.6 standard we are hoping to be compatible with a variety of vendors but so far we have only the one Delta AC Mini for testing, and we have not succeeded with the smart charging function yet. |
I have forked the current Steve and merged in the initial smart charge effort from @JavaIsJavaScript ; repo is at https://github.com/chuck-h/steve. I would be happy to add collaborators or merge pull requests to help this along. I propose that the Central System (CS), i.e. Steve, will maintain a model of the Charge Point (CP)'s charge profiles/schedules as a transient data structure. This model can be rebuilt from a history of SetChargingProfile and ClearChargingProfile messages. A journal of set/clear profile message data will be retained in the database (somewhat like we retain meter values). It seems to me that a robust smart charging management program will need to routinely clear the CP schedule and rebuild it, as it is impossible for the CS to read back the full CP profile configuration -- the only readback tool is GetCompositeSchedule. |
Sounds good. |
this is what i was talking about in the other issue. does anyone have a requirement or use case to integrate the ocpp smart charging with other energy/building/smarthome management systems? or do you simply want to define some profiles and communicate these with stations? if it is the former, i cannot help you. such a tight integration would be domain or use-case specific. if it is the latter, i can look into implementing it. but as i said, it would not be that smart. |
I just learned about another OCPP smart charging code base, we might find some useful ideas there: |
Comparing Steve's database with BCIT OpenOCPP, I think BCIT's style prefers tables & stored processes to conventional procedural coding. Also they have more detailed business logic.
|
Tossing out an idea for an energy management system (EMS) app to work thru Steve to perform load management ...
|
Directly interacting with a database of a different piece of software is a super bad idea. Every communication would have to go through specified API, e.g. as REST interface as i suggested. |
@csamsel Let's say the EMS communicates with Steve over http in some RESTful fashion. Regarding setChargingProfile, the most minimal implementation would have Steve simply acting as a proxy which relays OCPP charging profile messages from the EMS to the charging stations; Steve would need almost no smartcharging intelligence or database support. Regarding the database handling, am I right there there are two architectural alternatives --
|
Not sure why you focus on the database aspect. Steve would continue to keep all relevant data locally. How an external software system like the EMS handles its persistence doesnt really matter for steve. |
My fork's wiki here: All are welcome to comment, especially for issues that stray outside the scope of Steve itself, here: |
smart charging is not outside the scope of steve. since the use cases were not known to me, i did not implement it until now. and still, no one answered my question above. nevertheless, i will start implementing this feature as follows:
|
@goekay , I am glad to hear that you are intending to implement some smart charging support features in Steve. I understand your frustration at finding clear definitions of OCPP smart charging use cases. I would speculate that, as a consensus industry standard, OCPP tries to implement a general capability to satisfy a disparate group of commercial needs; meanwhile the commercial service providers are not completely forthcoming about their specific business plans so the actual use cases they anticipate are not public. Your best bet at getting a broad view of OCPP smart charging use cases might be to contact the Technical Working Group chair at OCPP; I believe that is currently Robert De Leeuw of iHomer. Meanwhile I am happy to share my very specific local smart charging use case, which is a load manager, and I am developing documentation for that at https://github.com/chuck-h/steve/wiki . Any way we can productively work together on the two software components (Steve and Load Manager) would be great! I cannot speak for the use cases of @KDesai13 or @V2G-UK, but perhaps they will chime in. |
Thanks for your input @chuck-h I would think that SteVe is more prevalent in smaller (in number of charging stations) enviroments. Or even in a DIY/home scenario. Therefore i think it would be a good idea to start thinking about smaller use cases like your load manager and less about needs of big companies. |
an initial implementation can be found in ocpp-1.6-smart-charging branch. it is not refined at the moment and might be rough around the edges. in this regard, any feedback is welcome. p.s.: current implementation of GetCompositeSchedule prints only the response status and not the schedule. this is a TODO for the next days. |
A useful option in the Clear Charging Profile UI would be to send the unfiltered (clear everything) message, which has all fields empty. |
ok. implemented in commit d288621. |
I think the logic enforcing start of validity and start of schedule to be in the future may be undesirable. Did you see this requirement in the OCPP spec? (If so, I missed it.) |
no, but i thought that it was implied and made sense. why would it be undesirable? why would you need schedules starting in the past? |
For starters, it surprised me when I specified start "now" (from date/time interface) and it was rejected because by the time the validation was done that time had passed. |
It looks like you may be overloading the chargingProfileId with the autoincrementing primary key. Not sure this is a great idea as it precludes the end user from assigning profile id's based on some meaningful pattern. |
regarding the schedule times: ok. i can remove the 'future' checks of regarding the |
Agreed that schedules entirely in the past are almost certainly user errors and should be flagged. No strong feelings here about the id/pk overloading, it doesn't matter in my own use case. I'll point out that there is no global uniqueness requirement on |
hmm... if i allow the user to define the |
this is done. after commit 8608888 the schedule in the response can be accessed as well. |
BTW a key element of the load management use case I am working on involves regular updates on current consumption from each charge point. What do you recommend for the mechanism? Should the load manager poll SteVe or can SteVe be configured to post the measured values to the load manager as they arrive from charge points? |
well... the solution where steve pushes the information is better. for this, you should extend the methods where we process 1) start transaction, 2) meter values and 3) stop transaction messages. in these messages, we get absolute meter read values with their timestamps. you can calculate meter value deltas between the timestamps for the actual consumption within a time interval. |
has anyone found any problems or issues with the basic smart charging implementation? if there is none, i want to merge it with master. i would admit that it's not the optimal way to implement smart charging without any integration with 3rd party systems (grid operator, energy management system, etc. to react to forecasts, etc.), but it should function as a baseline to implement your specific logic on top. |
Hello. Thanks for your contribution on this topic. I am studying your code and trying to run it. But when I use the command "mvn package" there are some errors and I cant get the jar file. Have you met a similar problem? |
@zachwang1992 This is not a support thread. Create an issue with a meaningful error description instead. |
@zachwang1992 , you are probably talking about my fork, which is more error prone than the main i5 project here as I am an amateur at this. If this project (here at https://github.com/RWTH-i5-IDSG/steve) builds for you, but not the fork, you should start an issue on the fork site (which I am migrating to https://github.com/chuck-h/SteVe-SC as a multi-module maven project). @goekay and @csamsel won't be able to help you with fork support, and won't want to hear about it either. |
i merged the branch ocpp-1.6-smart-charging into master and therefore consider this issue resolved. |
Actually, I had some doubts regarding OCPP 1.6. |
Hello everyone, thank you for this great work ,
|
Hello,
We have to implement smart charging using OCPP1.6 for the Delta charger we are going to use. Charger and OCPP1.6 both support smart charging profile. Also have gone through OCPP1.6 manual.
Can anyone guide me whether it is possible to implement and the right direction to go forward?
Does it anything to do with grid connection?
Appreciating your support in this regard.
Thank you.
K Desai
The text was updated successfully, but these errors were encountered: