ocpp
ocpp copied to clipboard
Why am I catching a validation error?
Why do I get a validation error if the protocol allows me to accept data of type Float? Why is 21.4 a valid value but 0.0 is invalid value.
log ` INFO : _1: receive messageINFO : _1: receive message [ 2, "41810", "MeterValues", { "connectorId": 1, "meterValue": [ { "sampledValue": [ { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Current.Import", "phase": "L1", "unit": "A", "value": 0.0 }, { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Current.Import", "phase": "L2", "unit": "A", "value": 0.0 }, { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Current.Import", "phase": "L3", "unit": "A", "value": 0.0 }, { "context": "Sample.Clock", "format": "Raw", "location": "EV", "measurand": "Current.Offered", "unit": "A", "value": 0.0 }, { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Energy.Active.Import.Register", "unit": "kWh", "value": "0.04" }, { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Energy.Reactive.Import.Register", "unit": "kvarh", "value": "0" }, { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Energy.Active.Import.Interval", "unit": "kWh", "value": 0.04 }, { "context": "Sample.Clock", "format": "Raw", "location": "Cable", "measurand": "Power.Active.Import", "unit": "kW", "value": "40.08" }, { "context": "Sample.Clock", "format": "Raw", "location": "Cable", "measurand": "Power.Reactive.Import", "unit": "kvar", "value": "-320" }, { "context": "Sample.Clock", "format": "Raw", "location": "Body", "measurand": "Power.Factor", "value": "-1" }, { "context": "Sample.Clock", "format": "Raw", "location": "EV", "measurand": "SoC", "unit": "Percent", "value": "2" }, { "context": "Sample.Clock", "format": "Raw", "location": "Outlet", "measurand": "Temperature", "unit": "Celsius", "value": "0" } ], "timestamp": "2022-05-05T06:06:11Z" } ] } ] 05.05.22 11:06:11 - ERROR : Error while handling request '<Call - unique_id=41810, action=MeterValues, payload={'connectorId': 1, 'meterValue': [{'sampledValue': [{'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Current.Import', 'phase': 'L1', 'unit': 'A', 'value': 0.0}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Current.Import', 'phase': 'L2', 'unit': 'A', 'value': 0.0}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Current.Import', 'phase': 'L3', 'unit': 'A', 'value': 0.0}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'EV', 'measurand': 'Current.Offered', 'unit': 'A', 'value': 0.0}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Energy.Active.Import.Register', 'unit': 'kWh', 'value': '0.04'}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Energy.Reactive.Import.Register', 'unit': 'kvarh', 'value': '0'}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Energy.Active.Import.Interval', 'unit': 'kWh', 'value': 0.04}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Cable', 'measurand': 'Power.Active.Import', 'unit': 'kW', 'value': '40.08'}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Cable', 'measurand': 'Power.Reactive.Import', 'unit': 'kvar', 'value': '-320'}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Body', 'measurand': 'Power.Factor', 'value': '-1'}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'EV', 'measurand': 'SoC', 'unit': 'Percent', 'value': '2'}, {'context': 'Sample.Clock', 'format': 'Raw', 'location': 'Outlet', 'measurand': 'Temperature', 'unit': 'Celsius', 'value': '0'}], 'timestamp': '2022-05-05T06:06:11Z'}]}>' Traceback (most recent call last): File "C:\Users\Администратор\AppData\Local\Programs\Python\Python39\lib\site-packages\ocpp\messages.py", line 192, in validate_payload validator.validate(message.payload) File "C:\Users\Администратор\AppData\Local\Programs\Python\Python39\lib\site-packages\jsonschema\validators.py", line 353, in validate raise error jsonschema.exceptions.ValidationError: 0.0 is not of type 'string'
Failed validating 'type' in schema['properties']['meterValue']['items']['properties']['sampledValue']['items']['properties']['value']: {'type': 'string'}
On instance['meterValue'][0]['sampledValue'][0]['value']: 0.0
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "C:\Users\Администратор\AppData\Local\Programs\Python\Python39\lib\site-packages\ocpp\charge_point.py", line 150, in route_message await self._handle_call(msg) File "C:\Users\Администратор\AppData\Local\Programs\Python\Python39\lib\site-packages\ocpp\charge_point.py", line 178, in _handle_call validate_payload(msg, self._ocpp_version) File "C:\Users\Администратор\AppData\Local\Programs\Python\Python39\lib\site-packages\ocpp\messages.py", line 195, in validate_payload raise TypeConstraintViolationError(details={"cause": e.message}) ocpp.exceptions.TypeConstraintViolationError: TypeConstraintViolationError: Payload for Action is syntactically correct but at least one of the fields violates data type constraints (e.g. “somestring”: 12), {'cause': "0.0 is not of type 'string'"} 05.05.22 11:06:11 - INFO : _1: send [4,"41810","TypeConstraintViolation","Payload for Action is syntactically correct but at least one of the fields violates data type constraints (e.g. \u201csomestring\u201d: 12)",{"cause":"0.0 is not of type 'string'"}]`
ocpp.messages.py

DOC OCPP 1.6
