Skip to content

Commit 8f91098

Browse files
committed
feature/197, backported 2.0 schema files to 1.6 according to Improved security for OCPP 1.6-J specification
1 parent fdfb5b1 commit 8f91098

28 files changed

+986
-1
lines changed

.github/ISSUE_TEMPLATE/question.md

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
name: Question
3+
about: Describe this issue template's purpose here.
4+
title: ''
5+
labels: question
6+
assignees: ''
7+
8+
---
9+
10+
When your question is related to code that isn't working as expected, please
11+
enable debug logs:
12+
13+
``` python
14+
import logging
15+
logging.basicConfig(level=logging.DEBUG)
16+
```
17+
18+
More info can be found in the [Debugging
19+
section](https://github.com/mobilityhouse/ocpp#debugging) of the README.
20+
21+
If these actions didn't help to find the cause of your issue, please provide
22+
code samples and logs with your question.

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,6 @@ venv.bak/
105105
.mypy_cache/
106106

107107
.idea/*
108+
109+
### OSX ###
110+
*.DS_Store

README.rst

+23
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,29 @@ Charge point
163163
if __name__ == '__main__':
164164
asyncio.run(main())
165165
166+
Debugging
167+
---------
168+
169+
Python's default log level is `logging.WARNING`. As result most of the logs
170+
generated by this package are discarded. To see the log output of this package
171+
lower the log level to `logging.DEBUG`.
172+
173+
.. code-block:: python
174+
175+
import logging
176+
logging.basicConfig(level=logging.DEBUG)
177+
178+
However, this approach defines the log level for the complete logging system.
179+
In other words: the log level of all dependencies is set to `logging.DEBUG`.
180+
181+
To lower the logs for this package only use the following code:
182+
183+
.. code-block:: python
184+
185+
import logging
186+
logging.getLogger('ocpp').setLevel(level=logging.DEBUG)
187+
logging.getLogger('ocpp').addHandler(logging.StreamHandler())
188+
166189
License
167190
-------
168191

ocpp/v16/call.py

+72
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
Reason,
1414
ResetType,
1515
UpdateType,
16+
CertificateUse,
17+
SignedFirmwareStatus,
18+
Log,
19+
UploadLogStatus,
1620
)
1721

1822
# Most types of CALL messages can originate from only 1 source, either
@@ -38,6 +42,11 @@ class CancelReservationPayload:
3842
reservation_id: int
3943

4044

45+
@dataclass
46+
class CertificateSignedPayload:
47+
certificate_chain: str
48+
49+
4150
@dataclass
4251
class ChangeAvailabilityPayload:
4352
connector_id: int
@@ -63,6 +72,17 @@ class ClearChargingProfilePayload:
6372
stack_level: Optional[int] = None
6473

6574

75+
@dataclass
76+
class DeleteCertificatePayload:
77+
certificate_hash_data: Dict
78+
79+
80+
@dataclass
81+
class ExtendedTriggerMessagePayload:
82+
requested_message: MessageTrigger
83+
connector_id: Optional[int] = None
84+
85+
6686
@dataclass
6787
class GetCompositeSchedulePayload:
6888
connector_id: int
@@ -84,11 +104,31 @@ class GetDiagnosticsPayload:
84104
stop_time: Optional[str] = None
85105

86106

107+
@dataclass
108+
class GetInstalledCertificateIdsPayload:
109+
certificate_type: CertificateUse
110+
111+
87112
@dataclass
88113
class GetLocalListVersionPayload:
89114
pass
90115

91116

117+
@dataclass
118+
class GetLogPayload:
119+
log: Dict
120+
log_type: Log
121+
request_id: int
122+
retries: Optional[int] = None
123+
retry_interval: Optional[int] = None
124+
125+
126+
@dataclass
127+
class InstallCertificatePayload:
128+
certificate_type: CertificateUse
129+
certificate: str
130+
131+
92132
@dataclass
93133
class RemoteStartTransactionPayload:
94134
id_tag: str
@@ -128,6 +168,14 @@ class SetChargingProfilePayload:
128168
cs_charging_profiles: Dict
129169

130170

171+
@dataclass
172+
class SignedUpdateFirmwarePayload:
173+
request_id: int
174+
firmware: Dict
175+
retries: Optional[int] = None
176+
retry_interval: Optional[int] = None
177+
178+
131179
@dataclass
132180
class TriggerMessagePayload:
133181
requested_message: MessageTrigger
@@ -183,13 +231,37 @@ class HeartbeatPayload:
183231
pass
184232

185233

234+
@dataclass
235+
class LogStatusNotificationPayload:
236+
status: UploadLogStatus
237+
request_id: int
238+
239+
186240
@dataclass
187241
class MeterValuesPayload:
188242
connector_id: int
189243
meter_value: List = field(default_factory=list)
190244
transaction_id: Optional[int] = None
191245

192246

247+
@dataclass
248+
class SecurityEventNotificationPayload:
249+
type: str
250+
timestamp: str
251+
tech_info: Optional[str]
252+
253+
254+
@dataclass
255+
class SignCertificatePayload:
256+
csr: str
257+
258+
259+
@dataclass
260+
class SignedFirmwareStatusNotificationPayload:
261+
status: SignedFirmwareStatus
262+
request_id: int
263+
264+
193265
@dataclass
194266
class StartTransactionPayload:
195267
connector_id: int

ocpp/v16/call_result.py

+64
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@
1616
TriggerMessageStatus,
1717
UpdateStatus,
1818
UnlockStatus,
19+
CertificateSignedStatus,
20+
CertificateStatus,
21+
DeleteCertificateStatus,
22+
GenericStatus,
23+
GetInstalledCertificateStatus,
24+
LogStatus,
25+
UpdateFirmwareStatus
1926
)
2027

2128
# Most types of CALLRESULT messages can originate from only 1 source, either
@@ -63,6 +70,21 @@ class HeartbeatPayload:
6370
current_time: str
6471

6572

73+
@dataclass
74+
class LogStatusNotificationPayload:
75+
pass
76+
77+
78+
@dataclass
79+
class SecurityEventNotificationPayload:
80+
pass
81+
82+
83+
@dataclass
84+
class SignCertificatePayload:
85+
status: GenericStatus
86+
87+
6688
@dataclass
6789
class MeterValuesPayload:
6890
pass
@@ -93,6 +115,11 @@ class CancelReservationPayload:
93115
status: CancelReservationStatus
94116

95117

118+
@dataclass
119+
class CertificateSignedPayload:
120+
status: CertificateSignedStatus
121+
122+
96123
@dataclass
97124
class ChangeAvailabilityPayload:
98125
status: AvailabilityStatus
@@ -113,6 +140,22 @@ class ClearChargingProfilePayload:
113140
status: ClearChargingProfileStatus
114141

115142

143+
@dataclass
144+
class DeleteCertificatePayload:
145+
status: DeleteCertificateStatus
146+
147+
148+
@dataclass
149+
class ExtendedTriggerMessagePayload:
150+
status: TriggerMessageStatus
151+
152+
153+
@dataclass
154+
class GetInstalledCertificateIdsPayload:
155+
status: GetInstalledCertificateStatus
156+
certificate_hash_data: Optional[List] = None
157+
158+
116159
@dataclass
117160
class GetCompositeSchedulePayload:
118161
status: GetCompositeScheduleStatus
@@ -137,6 +180,17 @@ class GetLocalListVersionPayload:
137180
list_version: int
138181

139182

183+
@dataclass
184+
class GetLogPayload:
185+
status: LogStatus
186+
filename: Optional[str] = None
187+
188+
189+
@dataclass
190+
class InstallCertificatePayload:
191+
status: CertificateStatus
192+
193+
140194
@dataclass
141195
class RemoteStartTransactionPayload:
142196
status: RemoteStartStopStatus
@@ -167,6 +221,16 @@ class SetChargingProfilePayload:
167221
status: ChargingProfileStatus
168222

169223

224+
@dataclass
225+
class SignedFirmwareStatusNotificationPayload:
226+
pass
227+
228+
229+
@dataclass
230+
class SignedUpdateFirmwarePayload:
231+
status: UpdateFirmwareStatus
232+
233+
170234
@dataclass
171235
class TriggerMessagePayload:
172236
status: TriggerMessageStatus

0 commit comments

Comments
 (0)