Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter

- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
This commit is contained in:
Eric F
2026-06-08 00:38:27 -04:00
parent 468cfeaa50
commit d398a6ced2
7326 changed files with 1177561 additions and 7 deletions

View File

@@ -0,0 +1,416 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:auth_consumer_API'
info:
title: 'EVerest API definition for auth consumer'
version: 1.0.0
description: >-
API for EVerest API clients that consume authorization events from an
Auth module. Provides token validation status updates and the ability
to withdraw previously granted authorizations.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: Auth
servers:
default:
pathname: 'everest_api/1/auth_consumer/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
send_request_withdraw_authorization:
address: 'm2e/withdraw_authorization'
messages:
send_request_withdraw_authorization:
$ref: '#/components/messages/send_request_withdraw_authorization'
receive_reply_withdraw_authorization:
address: null
messages:
receive_reply_withdraw_authorization:
$ref: '#/components/messages/receive_reply_withdraw_authorization'
receive_token_validation_status:
address: 'e2m/token_validation_status'
messages:
receive_token_validation_status:
$ref: '#/components/messages/receive_token_validation_status'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_request_withdraw_authorization:
title: 'Withdraw granted authorization.'
action: send
channel:
$ref: '#/channels/send_request_withdraw_authorization'
description: >-
If only the evse_id is given, the granted authorization for this EVSE will be withdrawn.
If only the id_token is given, the granted authorization for every EVSE where this id_token
is placed will be withdrawn. If both parameters are given, the granted authorization for the
given EVSE will be withdrawn, if the placed id_token matches the given id_token
If no parameter is given, all granted authorizations for all EVSEs will be removed
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/receive_reply_withdraw_authorization'
receive_reply_withdraw_authorization:
title: 'Reply to withdraw authorization request'
action: receive
channel:
$ref: '#/channels/receive_reply_withdraw_authorization'
receive_token_validation_status:
title: 'Receive token validation status message'
action: receive
channel:
$ref: '#/channels/receive_token_validation_status'
description: >-
Published whenever the validation status of a token changes.
The message contains the token, its validation status, and an
optional array of tariff messages received at authorization time.
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_request_withdraw_authorization:
name: send_request_withdraw_authorization
title: 'Withdraw granted authorization'
summary: 'Withdraw granted authorization.'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo:
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/WithdrawAuthorizationRequest'
examples:
- summary: ""
payload:
headers:
replyTo: everest_api/1/{interface_type}/{module_id}/e2m/{operation_name}/{uuid}
payload: {
"id_token": {
"value": "string",
"type": "Central",
},
"evse_id": 1
}
receive_reply_withdraw_authorization:
name: receive_reply_withdraw_authorization
title: 'Reply to request to withdraw authorization'
summary: 'Reply to request to withdraw authorization.'
contentType: application/json
payload:
$ref: '#/components/schemas/WithdrawAuthorizationResult'
examples:
- summary: ""
payload: "Accepted"
receive_token_validation_status:
name: receive_token_validation_status
title: 'Receive token validation status message'
summary: 'Token validation status, optionally with tariff messages'
contentType: application/json
payload:
$ref: '#/components/schemas/TokenValidationStatusMessage'
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
AuthorizationType:
description: >-
Type of authorization of the provided token. The value
of AuthorizationType can influence the authorization process
type: string
enum:
- OCPP
- RFID
- Autocharge
- PlugAndCharge
- BankCard
CertificateHashDataInfo:
description: Contains the certificate information
type: object
additionalProperties: true
required:
- hashAlgorithm
- issuerNameHash
- issuerKeyHash
- serialNumber
- responderURL
properties:
hashAlgorithm:
description: Used algorithms for the hashes provided
type: string
enum:
- SHA256
- SHA384
- SHA512
issuerNameHash:
description: Hashed value of the Issuer Distinguished Name
type: string
maxLength: 128
issuerKeyHash:
description: Hashed value of the issuers public key
type: string
maxLength: 128
serialNumber:
description: The serial number of the certificate
type: string
maxLength: 40
responderURL:
description: This contains the responder URL
type: string
maxLength: 512
CustomIdToken:
description: 'Type for a custom id token with a free-form type'
type: object
additionalProperties: true
required:
- value
- type
properties:
value:
description: Arbitrary value of the IdToken
type: string
minLength: 0
maxLength: 36
type:
description: Custom type of the token
type: string
minLength: 0
maxLength: 50
IdToken:
description: Type for an id token
type: object
additionalProperties: true
required:
- value
- type
properties:
value:
description: >-
Arbitrary value of the IdToken: This has to be printable case insensitive ascii
type: string
minLength: 0
maxLength: 36
type:
description: Type of the token
type: string
$ref: '#/components/schemas/IdTokenType'
additional_info:
description: A list of additional custom id tokens than can be used for providing additional information for validation
type: array
items:
type: object
$ref: '#/components/schemas/CustomIdToken'
IdTokenType:
description: >-
IdTokenType of the provided token. Required by OCPP2.0.1 to distinguish between different types of tokens.
type: string
enum:
- Central
- eMAID
- MacAddress
- ISO14443
- ISO15693
- KeyCode
- Local
- NoAuthorization
ProvidedIdToken:
description: Type for IdToken provided by auth token providers. Contains additional information about the IdToken like the source and purpose
type: object
additionalProperties: true
required:
- id_token
- authorization_type
properties:
request_id:
description: >-
Id of the authorization request of this token. Could be used to put remoteStartId of OCPP2.0.1
type: integer
id_token:
description: IdToken of the provided token
type: object
$ref: '#/components/schemas/IdToken'
parent_id_token:
description: Parent IdToken of the provided token
type: object
$ref: '#/components/schemas/IdToken'
authorization_type:
description: Authorization type of the token.
type: string
$ref: '#/components/schemas/AuthorizationType'
minLength: 2
maxLength: 32
connectors:
description: A list of connector ids to which the authorization can be assigned
type: array
items:
minimum: 1
type: integer
prevalidated:
description: Indicates that the id token is already validated by the provider
type: boolean
certificate:
description: The X.509 certificated presented by EV and encoded in PEM format
type: string
maxLength: 5500
iso15118CertificateHashData:
description: >-
Contains the information needed to verify the EV Contract Certificate
via OCSP
type: array
items:
description: An array of contract certificate infos
type: object
$ref: '#/components/schemas/CertificateHashDataInfo'
minItems: 1
maxItems: 4
TokenValidationStatus:
description: |
Ongoing token validation status
- Processing: Validation is in progress
- Accepted: Token has been accepted
- Rejected: Token has been rejected
- TimedOut: Token was authorized but no connector was selected within connection_timeout seconds
- UsedToStart: Token was used to start a charging session
- UsedToStop: Token was used to stop a charging session
- Withdrawn: Authorization was withdrawn
type: string
enum:
- Processing
- Accepted
- Rejected
- TimedOut
- UsedToStart
- UsedToStop
- Withdrawn
TokenValidationStatusMessage:
description: The token validation status
type: object
additionalProperties: true
required:
- token
- status
properties:
token:
description: The id tag assigned to this transaction
type: object
$ref: '#/components/schemas/ProvidedIdToken'
status:
type: string
$ref: '#/components/schemas/TokenValidationStatus'
messages:
description: >-
Optional tariff or pricing messages received with the
authorization response.
type: array
items:
type: object
$ref: 'display_message_API.yaml#/components/schemas/MessageContent'
WithdrawAuthorizationRequest:
description: >-
Request to withdraw granted authorization.
If only the evse_id is given, the granted authorization for this EVSE will be withdrawn.
If only the id_token is given, the granted authorization for every EVSE where this
id_token is placed will be withdrawn If both parameters are given, the granted
authorization for the given EVSE will be withdrawn, if the placed id_token matches
the given id_token. If no parameter is given, all granted authorizations for all EVSEs
will be removed
type: object
additionalProperties: true
properties:
evse_id:
description: The evse id to withdraw authorization for.
type: integer
id_token:
description: The id token to withdraw authorization for.
type: object
$ref: '#/components/schemas/IdToken'
WithdrawAuthorizationResult:
description: >-
The result of a WithdrawAuthorizationRequest:
Accepted in case requested authorization was removed
AuthorizationNotFound in case no match for request was found
EvseNotFound in case no match for evse_id was found
Rejected in case module could not process the request for other reasons
type: string
enum:
- Accepted
- AuthorizationNotFound
- EvseNotFound
- Rejected
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,116 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:auth_token_provider_API'
info:
title: 'EVerest API definition for auth token provider'
version: 1.0.0
description: >-
API for EVerest API clients implementing auth token provider.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: Auth
servers:
default:
pathname: 'everest_api/1/auth_token_provider/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
send_provided_token:
address: 'm2e/provided_token'
messages:
provided_token:
$ref: '#/components/messages/send_provided_token'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_provided_token:
title: 'Send provided token'
action: send
channel:
$ref: '#/channels/send_provided_token'
description: 'Direction: Module to EVerest'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_provided_token:
name: send_provided_token
title: 'Send provided token'
summary: 'The provided token'
contentType: application/json
payload:
$ref: 'auth_consumer_API.yaml#/components/schemas/ProvidedIdToken'
examples:
- summary: "The Provided Token"
payload:
authorization_type: "OCPP"
id_token:
type: "Central"
value: "TOKEN"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,310 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:auth_token_validator_API'
info:
title: 'EVerest API definition for auth token validator - CLIENT side (MODULE)'
version: 1.0.0
description: >-
API for EVerest API clients implementing auth token validator.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: Auth
servers:
default:
pathname: 'everest_api/1/auth_token_validator/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_request_validate_token:
address: 'e2m/validate_token'
messages:
receive_request_validate_token:
$ref: '#/components/messages/receive_request_validate_token'
send_reply_validate_token:
address: null
messages:
send_reply_validate_token:
$ref: '#/components/messages/send_reply_validate_token'
send_validate_result_update:
address: 'm2e/validate_result_update'
messages:
send_validate_result_update:
$ref: '#/components/messages/send_validate_result_update'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_request_validate_token:
title: 'Request validate token'
action: receive
description: 'Direction: EVerest to Module'
channel:
$ref: '#/channels/receive_request_validate_token'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_validate_token'
send_reply_validate_token:
title: 'Send reply to validate token request'
action: send
description: 'Direction: Module to EVerest'
channel:
$ref: '#/channels/send_reply_validate_token'
send_validate_result_update:
title: 'Send validate result update'
action: send
channel:
$ref: '#/channels/send_validate_result_update'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_request_validate_token:
name: receive_request_validate_token
title: 'Request validate token'
summary: 'Request to validate token.'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to.
payload:
$ref: 'auth_consumer_API.yaml#/components/schemas/ProvidedIdToken'
send_reply_validate_token:
name: send_reply_validate_token
title: 'Reply validate token'
summary: 'Reply to validate token.'
contentType: application/json
payload:
$ref: '#/components/schemas/ValidationResult'
examples:
- summary: "Reply validate token."
payload:
authorization_status: Accepted
evse_ids:
- 1
send_validate_result_update:
name: send_validate_result_update
title: 'Send validate result update'
summary: >-
Updated validation result for a given token due to some changes.
These can be triggered by TransactionEvent messages or StartTransaction.
contentType: application/json
payload:
$ref: '#/components/schemas/ValidationResultUpdate'
examples:
- summary: "ValidationResultUpdate"
payload:
"connector_id": 1,
"validation_result": {
"authorization_status": "Accepted",
"certificate_status": "Accepted",
"expiry_time": "2019-08-24T14:15:22Z",
"parent_id_token": {
"value": "string",
"type": "Central"
}
}
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
AuthorizationStatus:
description: Authorization Status enum
type: string
enum:
- Accepted
- Blocked
- ConcurrentTx
- Expired
- Invalid
- NoCredit
- NotAllowedTypeEVSE
- NotAtThisLocation
- NotAtThisTime
- Unknown
- PinRequired
- Timeout
CertificateStatus:
description: Certificate status information
type: string
enum:
- Accepted
- SignatureError
- CertificateExpired
- CertificateRevoked
- NoCertificateAvailable
- CertChainError
- ContractCancelled
EnergyTransferMode:
description: >-
Possible energy transfer modes. The modes AC_single_phase_core to DC_unique apply to DIN70121 and ISO15118-2.
The other modes DC to MCS_BPT apply to ISO15118-20 (and amendment).
type: string
enum:
- AC_single_phase_core
- AC_two_phase
- AC_three_phase_core
- DC_core
- DC_extended
- DC_combo_core
- DC_unique
- DC
- AC_BPT
- AC_BPT_DER
- AC_DER
- DC_BPT
- DC_ACDP
- DC_ACDP_BPT
- WPT
- MCS
- MCS_BPT
ValidationResult:
description: >-
Result object containing authorization status enum value and an optional
parentIdTag
type: object
additionalProperties: true
required:
- authorization_status
- tariff_messages
properties:
authorization_status:
type: string
$ref: '#/components/schemas/AuthorizationStatus'
certificate_status:
type: string
$ref: '#/components/schemas/CertificateStatus'
tariff_messages:
description: >-
Messages that can contain session price information to show the user. The array can contain multiple messages in different languages. The first message in this array shall be used to start the transaction at the powermeter (for OCMF). Empty if no messages are available.
type: array
items:
description: Message with pricing information in a specific language
type: object
$ref: 'display_message_API.yaml#/components/schemas/MessageContent'
expiry_time:
description: Absolute UTC time point when reservation expires in RFC3339 format
type: string
format: date-time
parent_id_token:
description: Parent Id Tag of the validated token
type: object
$ref: 'auth_consumer_API.yaml#/components/schemas/IdToken'
evse_ids:
description: >-
Only used when the id token is valid for one or more specific evses,
not for the whole charging station. Indicates for which evse ids the
provided token is valid
type: array
items:
minimum: 1
type: integer
reservation_id:
description: The reservation id that is used with this validated token.
type: integer
allowed_energy_transfer_modes:
description: >-
This is only used when we want to specify which energy transfer modes are allowed for
the respective authorization request.
type: array
items:
type: string
$ref: '#/components/schemas/EnergyTransferMode'
minItems: 1
ValidationResultUpdate:
description: >-
Result object containing an updated validation result for a given token.
This is needed since certain information can be updated at a later time.
type: object
additionalProperties: true
required:
- validation_result
- connector_id
properties:
validation_result:
description: >-
Result object containing authorization status enum value and an optional
parentIdTag
type: object
$ref: '#/components/schemas/ValidationResult'
connector_id:
description: >-
Id of the connector on which the id token information has been updated.
type: integer
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,173 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:dc_external_derate_API'
info:
title: 'EVerest API definition for external derating of a DC powersupply'
version: 1.0.0
description: >-
Specification of a the EVerest API for implementing DC power supply derating
functionality. This allows integration of hardware-specific derating logic, for
example adjusting output current based on internal temperature measurements.
In the simplest case, derating is determined solely by the plug temperature,
as reported by the evse_board_support driver. This value is exposed here for
convenience.
More advanced implementations may incorporate additional temperature sensors,
such as relay temperature or other relevant measurements, to enable more precise control.
Note that this is for DC output in DC charging only.
To derate for AC chargers (or the AC side in DC chargers), use an EnergyNode and set external_limits instead.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: dc external derate
servers:
default:
pathname: 'everest_api/1/dc_external_derate_consumer/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module has to be defined by `cfg_target_module_id` in EVerest config file.
defaultContentType: application/json
channels:
send_set_external_derating:
address: 'm2e/set_external_derating'
messages:
send_set_external_derating:
$ref: '#/components/messages/send_set_external_derating'
receive_plug_temperature_C:
address: "e2m/plug_temperature_C"
messages:
receive_plug_temperature_C:
$ref: "#/components/messages/receive_plug_temperature_C"
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_set_external_derating:
title: Send set external derating
action: send
channel:
$ref: '#/channels/send_set_external_derating'
receive_plug_temperature_C:
title: Receive the plug temperature
action: receive
channel:
$ref: '#/channels/receive_plug_temperature_C'
receive_heartbeat:
title: Receive heartbeat
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: Send communication check
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_set_external_derating:
name: send_set_external_derating
title: Send set external derating
summary: >-
Set external derating values. The provided values
will be merged with the existing internal capabilities of the power supply:
The minimum of the internal and external values will be used.
All values are optional, unset means no limit.
contentType: application/json
payload:
$ref: '#/components/schemas/ExternalDerating'
examples:
- summary: "Limit to 15A charging"
payload:
max_export_current_A: 15
receive_plug_temperature_C:
name: receive_plug_temperature_C
title: Receive the plug temperature
summary: Current temperature of the plug in degree celsius
contentType: application/json
payload:
$ref: '#/components/schemas/PlugTemperature'
receive_heartbeat:
name: receive_heartbeat
title: Receive heartbeat
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: Send communication check
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: ""
payload:
true
schemas:
ExternalDerating:
description: Derate DC power supply Capabilities from an external source.
type: object
additionalProperties: true
properties:
max_export_current_A:
description: Maximum current that the power supply can output in Ampere
type: number
max_import_current_A:
description: Maximum current that the power supply can sink in Ampere
type: number
max_export_power_W:
description: Maximum export power that the power supply can output in Watt
type: number
max_import_power_W:
description: Maximum import power that the power supply can sink in Watt
type: number
PlugTemperature:
type: number
description: "Temperature in degree celsius"
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,481 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:display_message_API'
info:
title: 'EVerest API definition for display messages'
version: 1.0.0
description: >-
API for EVerest api clients implementing display message.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: display_message
servers:
default:
pathname: 'everest_api/1/display_message/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_request_set_display_message:
address: 'e2m/set_display_message'
messages:
receive_request_set_display_message:
$ref: '#/components/messages/receive_request_set_display_message'
send_reply_set_display_message:
address: null
messages:
send_reply_set_display_message:
$ref: '#/components/messages/send_reply_set_display_message'
receive_request_get_display_message:
address: 'e2m/get_display_message'
messages:
receive_request_get_display_message:
$ref: '#/components/messages/receive_request_get_display_message'
send_reply_get_display_message:
address: null
messages:
send_reply_get_display_message:
$ref: '#/components/messages/send_reply_get_display_message'
receive_request_clear_display_message:
address: 'e2m/clear_display_message'
messages:
receive_request_clear_display_message:
$ref: '#/components/messages/receive_request_clear_display_message'
send_reply_clear_display_message:
address: null
messages:
send_reply_clear_display_message:
$ref: '#/components/messages/send_reply_clear_display_message'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_request_set_display_message:
title: 'Receive request set display message'
action: receive
channel:
$ref: '#/channels/receive_request_set_display_message'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_set_display_message'
send_reply_set_display_message:
title: 'Send reply to request set display messages'
action: send
channel:
$ref: '#/channels/send_reply_set_display_message'
receive_request_get_display_message:
title: 'Receive request get display message'
action: receive
channel:
$ref: '#/channels/receive_request_get_display_message'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_get_display_message'
send_reply_get_display_message:
title: 'Send reply to request get display messages'
action: send
channel:
$ref: '#/channels/send_reply_get_display_message'
receive_request_clear_display_message:
title: 'Receive request clear display message'
action: receive
channel:
$ref: '#/channels/receive_request_clear_display_message'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_clear_display_message'
send_reply_clear_display_message:
title: 'Send reply to request clear display messages'
action: send
channel:
$ref: '#/channels/send_reply_clear_display_message'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_request_set_display_message:
name: receive_request_set_display_message
title: 'Request set display message'
summary: 'Request to set a display message'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/SetDisplayMessageRequest'
send_reply_set_display_message:
name: send_reply_set_display_message
title: 'Reply set display message'
summary: 'Reply to a request to set a display message'
contentType: application/json
payload:
type: object
$ref: '#/components/schemas/SetDisplayMessageResponse'
examples:
- summary: ""
payload:
status: "Accepted"
status_info: "string"
receive_request_get_display_message:
name: receive_request_get_display_message
title: 'Request get display message'
summary: 'Request to get a display message'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/GetDisplayMessageRequest'
send_reply_get_display_message:
name: send_reply_get_display_message
title: 'Reply get display message'
summary: 'Reply to a request to get a display message'
contentType: application/json
payload:
type: object
$ref: '#/components/schemas/GetDisplayMessageResponse'
examples:
- summary: ""
payload:
status_info: string
messages:
- id: 0
priority: AlwaysFront
state: Charging
timestamp_from: '2019-08-24T14:15:22Z'
timestamp_to: '2019-08-24T14:15:22Z'
session_id: string
message:
format: ASCII
language: string
content: string
qr_code: string
receive_request_clear_display_message:
name: receive_request_clear_display_message
title: 'Request clear display message'
summary: 'Request to clear a display message'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/ClearDisplayMessageRequest'
send_reply_clear_display_message:
name: send_reply_clear_display_message
title: 'Reply clear display message'
summary: 'Reply to a request to clear a display message'
contentType: application/json
payload:
type: object
$ref: '#/components/schemas/ClearDisplayMessageResponse'
examples:
- summary: ""
payload:
status: "Accepted"
status_info: "string"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
ClearDisplayMessageRequest:
description: Request to remove a specific display message.
type: object
additionalProperties: true
properties:
id:
description: Id of display message that should be removed from the charging station
type: integer
required:
- id
ClearDisplayMessageResponse:
description: Response on the clear display message request.
type: object
additionalProperties: true
properties:
status:
$ref: '#/components/schemas/ClearMessageResponseEnum'
status_info:
type: string
required:
- status
ClearMessageResponseEnum:
description: Response on a clear display message request
type: string
enum:
- Accepted
- Unknown
DisplayMessage:
description: Message to show on a display
type: object
additionalProperties: true
properties:
id:
description: The message id
type: integer
priority:
description: >-
Priority of the message. For OCPP 2.0.1, this is a required property. But as we also use this interface
outside of ocpp, for other messages it is not required and if priority is not given, we assume it is the
lowest priority, 'NormalCycle'. When priority is 'AlwaysFront' and there already is a message with priority
'AlwaysFront', the last received message shall replace the already existing message.
type: string
$ref: '#/components/schemas/MessagePriorityEnum'
state:
description: >-
During what state should this message be shown. When omitted, this message should be shown in any state of
the Charging Station
type: string
$ref: '#/components/schemas/MessageStateEnum'
timestamp_from:
description: >-
From what date-time should this message be shown. If omitted: directly.
type: string
format: date-time
timestamp_to:
description: >-
Until what date-time should this message be shown, after this date/time this message SHALL be removed. If
omitted, message can be shown 'forever' (until it is specifically removed).
type: string
format: date-time
identifier_id:
description: >-
To which user / during which session shall this message be shown. User can be identified by id token
(when the session did not start yet), session id or transaction id. identifier_type will hold the
type of identifier_id (default session id). Message SHALL be removed by the Charging Station
after session has ended. If omitted, message is not tight to a session.
type: string
minLength: 0
maxLength: 36
identifier_type:
description: >-
The type of 'identifier_id'. If omitted, type will be session id.
type: string
$ref: '#/components/schemas/IdentifierType'
message:
type: object
description: The message to show
$ref: '#/components/schemas/MessageContent'
qr_code:
description: >-
QR Code to scan for more information.
type: string
required:
- message
DisplayMessageStatusEnum:
description: Response on a display message request
type: string
enum:
- Accepted
- NotSupportedMessageFormat
- Rejected
- NotSupportedPriority
- NotSupportedState
- UnknownTransaction
IdentifierType:
description: The identifier type
type: string
enum:
- IdToken
- SessionId
- TransactionId
MessageContent:
description: Contains message details
required:
- content
type: object
additionalProperties: true
properties:
format:
type: string
$ref: '#/components/schemas/MessageFormat'
language:
type: string
content:
type: string
MessageFormat:
description: Format of the message to be displayed
type: string
enum:
- ASCII
- HTML
- URI
- UTF8
- QRCODE
MessagePriorityEnum:
description: >-
Priority of the message.
AlwaysFront is the highest priority: The Charging Station SHALL show this message at the configured moment,
regardless of other installed messages. Hence, it shall not cycle it with other messages and the Charging
Stations own message shall not override this message. When a newer message with this MessagePriority is received,
this message is replaced.
InFront: The Charging Station SHALL show this message at the configured moment, regardless of the normal cycle of
messages. If there are multiple InFront message that must be shown at the same time, they must be cycled.
NormalCycle: Show this message in the cycle of messages.
type: string
enum:
- AlwaysFront
- InFront
- NormalCycle
MessageStateEnum:
description: During what state the message should be shown
type: string
enum:
- Charging
- Faulted
- Idle
- Unavailable
- Suspending
- Discharging
GetDisplayMessageRequest:
description: >-
Request display messages. The properties are filtered. If the properties are omitted, there will be no filter
applied (if all properties are omitted, all stored display messages will be returned).
type: object
additionalProperties: true
properties:
id:
description: If provided the Charging Station shall return Display Messages of the given ids.
type: array
items:
type: integer
priority:
description: If provided the Charging Station shall return Display Messages with the given priority only.
$ref: '#/components/schemas/MessagePriorityEnum'
type: string
state:
description: If provided the Charging Station shall return Display Messages with the given state only.
$ref: '#/components/schemas/MessageStateEnum'
type: string
GetDisplayMessageResponse:
description: Response on the 'get display message' request. Will return the requested display messages.
type: object
additionalProperties: true
properties:
status_info:
description: Detailed status information
type: string
messages:
description: Requested messages, if any
type: array
items:
type: object
$ref: '#/components/schemas/DisplayMessage'
SetDisplayMessageRequest:
description: >-
Request to set a list of display messages.
type: array
items:
type: object
$ref: '#/components/schemas/DisplayMessage'
SetDisplayMessageResponse:
description: >-
Response to the set display message request.
type: object
additionalProperties: true
properties:
status:
description: Whether the charging station is able to display the message
$ref: '#/components/schemas/DisplayMessageStatusEnum'
status_info:
description: Detailed status information
type: string
required:
- status
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,234 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:entrypoint_API'
info:
title: 'EVerest API definition for the API entrypoint interface'
version: 1.0.0
description: >-
API for EVerest API clients discovering the EVerest API capabilities.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: Auth
servers:
default:
pathname: 'everest_api/'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
defaultContentType: application/json
channels:
send_request_discover:
address: 'discover'
messages:
send_request_discover:
$ref: '#/components/messages/send_request_discover'
receive_reply_discover:
address: null
messages:
receive_reply_discover:
$ref: '#/components/messages/receive_reply_discover'
send_request_query_module:
address: 'query-modules/{api_type}'
parameters:
api_type:
description: The type of API to query
messages:
send_request_query_module:
$ref: '#/components/messages/send_request_query_module'
receive_reply_query_module:
address: null
messages:
receive_reply_query_module:
$ref: '#/components/messages/receive_reply_query_module'
send_ready_beacon:
address: 'ready_beacon'
messages:
send_ready_beacon:
$ref: '#/components/messages/send_ready_beacon'
operations:
send_request_discover:
title: 'Request API capability discovery.'
action: send
channel:
$ref: '#/channels/send_request_discover'
description: >-
Allow API clients to discover the available capabilities of the API.
Reply will not be monolithic but come in as many messages as there are modules.
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/receive_reply_discover'
receive_reply_discover:
title: 'Reply to discover request'
action: receive
channel:
$ref: '#/channels/receive_reply_discover'
send_request_query_module:
title: 'Request all modules that implement {api_type} to reveal their API parameters.'
action: send
channel:
$ref: '#/channels/send_request_query_module'
description: >-
Allow API clients to discover specific types of APIs.
Reply will not be monolithic but come in as many messages as there a matching modules.
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/receive_reply_query_module'
receive_reply_query_module:
title: 'Reply to query modules request'
action: receive
channel:
$ref: '#/channels/receive_reply_query_module'
send_ready_beacon:
title: 'Send Ready Beacon'
action: send
channel:
$ref: '#/channels/send_ready_beacon'
components:
messages:
send_request_discover:
name: send_request_discover
title: 'Discover API'
contentType: application/json
payload:
type: object
properties:
headers:
type: object
properties:
replyTo:
type: string
description: Address to send the response to.
examples:
- summary: "requesting available APIs"
payload:
headers:
replyTo: your/arbitrary/reply/topic
receive_reply_discover:
name: receive_reply_discover
title: 'Reply to request to discover the API'
summary: 'Reply to request to discover the API.'
contentType: application/json
payload:
$ref: '#/components/schemas/ApiDiscoverResponse'
examples:
- summary: "Reply from each module is an array of (id, type, <version>) tuples"
payload:
apis:
- module_id: "module_1"
type: "display_message"
version: 1
- module_id: "module_1"
type: "session_cost_consumer"
version: 1
send_request_query_module:
name: send_request_query_module
title: 'Query API modules'
contentType: application/json
payload:
type: object
properties:
headers:
type: object
properties:
replyTo:
type: string
description: Address to send the response to.
examples:
- summary: "requesting available APIs of type {api_type}"
payload:
headers:
replyTo: your/arbitrary/reply/topic
receive_reply_query_module:
name: receive_reply_query_module
title: 'Reply to request to query module'
summary: 'Reply to request to query module.'
contentType: application/json
payload:
$ref: '#/components/schemas/ApiDiscoverResponse'
examples:
- summary: "Reply from each module is an array of (id, type, <version>) tuples"
payload:
apis:
- module_id: "dm_1"
type: "display_message"
version: 1
send_ready_beacon:
name: send_ready_beacon
title: 'Send ready beacon'
summary: A beacon to indicate the API is ready to be queried
contentType: application/json
payload:
$ref: '#/components/schemas/ReadyBeacon'
examples:
- summary: "Ready Beacon"
payload: {}
schemas:
ApiDiscoverResponse:
description: Type for API discovery results
type: object
additionalProperties: true
required:
- apis
properties:
apis:
description: Array of API parameters
type: array
items:
type: object
$ref: '#/components/schemas/ApiParameter'
ApiParameter:
description: Parameters for a single API
type: object
additionalProperties: true
required:
- type
- module_id
- version
properties:
type:
type: string
module_id:
type: string
version:
type: integer
communication_monitoring:
type: object
$ref: '#/components/schemas/CommunicationParameters'
CommunicationParameters:
description: Parameters of the communication monitoring between EVerest and client
type: object
additionalProperties: true
properties:
heartbeat_period_ms:
description: Period of heartbeat messages from EVerest to the client
type: integer
communication_check_period_s:
description: Maximum expected interval for alive messages from client to EVerest
type: integer
request_reply_timeout_s:
description: Timeout within which a client must reply to request from EVerest
type: integer
ReadyBeacon:
type: object
additionalProperties: true
description: a beacon to indicate the API is ready to be queried

View File

@@ -0,0 +1,348 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:error_history_consumer_API'
info:
title: 'EVerest API definition for error history (consumer)'
version: 1.0.0
description: >-
API for EVerest API clients for error status and history.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: ErrorHistory
servers:
default:
pathname: 'everest_api/1/error_history_consumer/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
send_request_get_errors:
address: 'm2e/get_errors'
messages:
send_request_get_errors:
$ref: '#/components/messages/send_request_get_errors'
receive_reply_get_errors:
address: null
messages:
receive_reply_get_errors:
$ref: '#/components/messages/receive_reply_get_errors'
send_request_active_errors:
address: 'm2e/active_errors'
messages:
send_request_active_errors:
$ref: '#/components/messages/send_request_active_errors'
receive_reply_active_errors:
address: null
messages:
receive_reply_active_errors:
$ref: '#/components/messages/receive_reply_active_errors'
receive_error_raised:
address: 'e2m/error_raised'
messages:
receive_error_raised:
$ref: '#/components/messages/receive_error_raised'
receive_error_cleared:
address: 'e2m/error_cleared'
messages:
receive_error_cleared:
$ref: '#/components/messages/receive_error_cleared'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_request_get_errors:
title: 'Send request with a list of filters to get a list of filtered errors'
action: send
channel:
$ref: '#/channels/send_request_get_errors'
description: 'Direction: Module to EVerest'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/receive_reply_get_errors'
receive_reply_get_errors:
title: 'Receive reply with a list of filtered errors'
action: receive
description: 'Direction: EVerest to Module'
channel:
$ref: '#/channels/receive_reply_get_errors'
send_request_active_errors:
title: 'Send request to transmit the list of currently active errors'
action: send
channel:
$ref: '#/channels/send_request_active_errors'
description: 'Direction: Module to EVerest'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/receive_reply_active_errors'
receive_reply_active_errors:
title: 'Receive reply to transmit the list of currently active errors'
action: receive
description: 'Direction: EVerest to Module'
channel:
$ref: '#/channels/receive_reply_active_errors'
receive_error_raised:
title: 'Receive newly raised error'
action: receive
channel:
$ref: '#/channels/receive_error_raised'
receive_error_cleared:
title: 'Receive newly cleared error'
action: receive
channel:
$ref: '#/channels/receive_error_cleared'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_request_get_errors:
name: send_request_get_errors
title: 'Request the list of filtered errors'
summary: 'Request the list of filtered errors.'
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to.
payload:
$ref: '#/components/schemas/FilterArguments'
receive_reply_get_errors:
name: receive_reply_get_errors
title: 'List of filtered errors'
summary: 'Reply to the request to send the list of filtered errors'
contentType: application/json
payload:
$ref: '#/components/schemas/ErrorList'
send_request_active_errors:
name: send_request_active_errors
title: 'Request the list of active errors'
summary: 'Request the list of active errors.'
payload:
type: object
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to.
examples:
- summary: "Request active errors"
payload:
headers:
replyTo: everest_api/1/{interface_type}/{module_id}/e2m/{operation_name}/{uuid}
receive_reply_active_errors:
name: receive_reply_active_errors
title: 'The list of active errors'
summary: 'Reply to the request to send the list of active errors'
contentType: application/json
payload:
$ref: '#/components/schemas/ErrorList'
receive_error_raised:
name: receive_error_raised
title: 'Receive newly raised error'
summary: 'Notifies on every raised error'
contentType: application/json
payload:
$ref: '#/components/schemas/ErrorObject'
receive_error_cleared:
name: receive_error_cleared
title: 'Receive cleared error'
summary: 'Notifies when an error is cleared'
contentType: application/json
payload:
$ref: '#/components/schemas/ErrorObject'
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
ErrorList:
description: A list of ErrorObjects
type: object
additionalProperties: true
required:
- errors
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ErrorObject'
ErrorObject:
description: Represents an error
type: object
additionalProperties: true
required:
- type
- description
- message
- origin
- timestamp
- uuid
- severity
- state
properties:
type:
type: string
minLength: 2
sub_type:
type: string
description:
type: string
minLength: 2
message:
type: string
minLength: 2
severity:
$ref: '#/components/schemas/Severity'
origin:
$ref: '#/components/schemas/ImplementationIdentifier'
timestamp:
type: string
format: date-time
uuid:
type: string
minLength: 2
state:
$ref: '#/components/schemas/State'
FilterArguments:
description: Arguments for the get_errors command
type: object
additionalProperties: true
required: []
properties:
state_filter:
$ref: '#/components/schemas/State'
origin_filter:
$ref: '#/components/schemas/ImplementationIdentifier'
type_filter:
type: string
severity_filter:
$ref: '#/components/schemas/SeverityFilter'
timeperiod_filter:
$ref: '#/components/schemas/TimeperiodFilter'
handle_filter:
type: string
description: Handle of an error
ImplementationIdentifier:
description: Identifier of an implementation
type: object
additionalProperties: true
required:
- module_id
- implementation_id
properties:
module_id:
type: string
minLength: 2
implementation_id:
type: string
minLength: 2
Severity:
description: Severity of an error
type: string
enum:
- High
- Medium
- Low
SeverityFilter:
description: Severity filter for errors
type: string
enum:
- HIGH_GE
- MEDIUM_GE
- LOW_GE
State:
description: State of an error
type: string
enum:
- Active
- ClearedByModule
- ClearedByReboot
TimeperiodFilter:
description: Timeperiod filter for errors
type: object
additionalProperties: true
required:
- timestamp_from
- timestamp_to
properties:
timestamp_from:
type: string
format: date-time
timestamp_to:
type: string
format: date-time
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,460 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:ev_board_support_API'
info:
title: 'EVerest API definition for EV board support'
version: 1.0.0
description: >-
API for EVerest API clients implementing ev board support.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: ev_board_support
servers:
default:
pathname: 'everest_api/1/ev_board_support/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
########## ev_board_support
receive_enable:
address: 'e2m/enable'
messages:
receive_enable:
$ref: '#/components/messages/receive_enable'
receive_set_cp_state:
address: 'e2m/set_cp_state'
messages:
receive_set_cp_state:
$ref: '#/components/messages/receive_set_cp_state'
receive_allow_power_on:
address: 'e2m/allow_power_on'
messages:
receive_allow_power_on:
$ref: '#/components/messages/receive_allow_power_on'
receive_diode_fail:
address: 'e2m/diode_fail'
messages:
receive_diode_fail:
$ref: '#/components/messages/receive_diode_fail'
receive_set_ac_max_current:
address: 'e2m/set_ac_max_current'
messages:
receive_set_ac_max_current:
$ref: '#/components/messages/receive_set_ac_max_current'
receive_set_three_phases:
address: 'e2m/set_three_phases'
messages:
receive_set_three_phases:
$ref: '#/components/messages/receive_set_three_phases'
receive_set_rcd_error:
address: 'e2m/set_rcd_error'
messages:
receive_set_rcd_error:
$ref: '#/components/messages/receive_set_rcd_error'
send_bsp_event:
address: 'm2e/bsp_event'
messages:
send_bsp_event:
$ref: '#/components/messages/send_bsp_event'
send_bsp_measurement:
address: 'm2e/bsp_measurement'
messages:
send_bsp_measurement:
$ref: '#/components/messages/send_bsp_measurement'
send_ev_info:
address: 'm2e/ev_info'
messages:
send_ev_info:
$ref: '#/components/messages/send_ev_info'
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
########## ev_board_support
receive_enable:
title: 'Receive Enable'
action: receive
channel:
$ref: '#/channels/receive_enable'
description: 'Direction: EVerest to Module'
receive_set_cp_state:
title: 'Receive Set CP State'
action: receive
channel:
$ref: '#/channels/receive_set_cp_state'
description: 'Direction: EVerest to Module'
receive_allow_power_on:
title: 'Receive Allow Power On'
action: receive
channel:
$ref: '#/channels/receive_allow_power_on'
description: 'Direction: EVerest to Module'
receive_diode_fail:
title: 'Receive Diode Fail'
action: receive
channel:
$ref: '#/channels/receive_diode_fail'
description: 'Direction: EVerest to Module'
receive_set_ac_max_current:
title: 'Receive Set AC max Current'
action: receive
channel:
$ref: '#/channels/receive_set_ac_max_current'
description: 'Direction: EVerest to Module'
receive_set_three_phases:
title: 'Receive Set Three Phases'
action: receive
channel:
$ref: '#/channels/receive_set_three_phases'
description: 'Direction: EVerest to Module'
receive_set_rcd_error:
title: 'Receive Set RCD error'
action: receive
channel:
$ref: '#/channels/receive_set_rcd_error'
description: 'Direction: EVerest to Module'
send_bsp_event:
title: 'Send BSP Event'
action: send
channel:
$ref: '#/channels/send_bsp_event'
description: 'Direction: Module to EVerest'
send_bsp_measurement:
title: 'Send BSP measurement'
action: send
channel:
$ref: '#/channels/send_bsp_measurement'
description: 'Direction: Module to EVerest'
send_ev_info:
title: 'Send EV Info'
action: send
channel:
$ref: '#/channels/send_ev_info'
description: 'Direction: Module to EVerest'
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
description: 'Direction: EVerest to Module'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
########## ev_board_support
receive_enable:
name: receive_enable
title: 'Receive enable or disable'
summary: Enables or disables the EV simulation.
contentType: application/json
payload:
$ref: '#/components/schemas/Enabled'
examples:
- summary: "Enable the EV."
payload:
true
receive_set_cp_state:
name: receive_set_cp_state
title: 'Receive CP State'
summary: Receive the CP State that should be set by the EV board support driver (controlled by S2)
contentType: application/json
payload:
$ref: '#/components/schemas/EvCpState'
examples:
- summary: "Set the CP state to A."
payload:
"A"
receive_allow_power_on:
name: receive_allow_power_on
title: 'Receive permission to switch relays on'
summary: If false, contactor must never be switched on.
contentType: application/json
payload:
$ref: '#/components/schemas/PowerOnOff'
examples:
- summary: "Allow the relays to be closed."
payload:
true
receive_diode_fail:
name: receive_diode_fail
title: 'Receive diode failure state'
summary: If true, simulator should set a diode failure.
contentType: application/json
payload:
$ref: '#/components/schemas/DiodeFailure'
examples:
- summary: "Diode failure signaled"
payload:
true
receive_set_ac_max_current:
name: receive_set_ac_max_current
title: 'Receive the max AC current'
summary: Maximum AC current to be requested from the EV.
contentType: application/json
payload:
$ref: '#/components/schemas/AcMaxCurrent'
examples:
- summary: "EV should request 16A maximum"
payload:
16.0
receive_set_three_phases:
name: receive_set_three_phases
title: 'Receive three or one phase support'
summary: Whether the EV should indicate single or three phase support.
contentType: application/json
payload:
$ref: '#/components/schemas/ThreePhaseSupport'
examples:
- summary: "EV should request single phase only."
payload:
false
receive_set_rcd_error:
name: receive_set_rcd_error
title: 'Setting set RCD error.'
summary: Setting a rcd error. Only for simulation purpose.
contentType: application/json
payload:
$ref: '#/components/schemas/RCDCurrent'
examples:
- summary: "EV should request single phase only."
payload:
30.0
send_bsp_event:
name: send_bsp_event
title: 'Send BSP event'
summary: 'Events from CP/Relais'
contentType: application/json
payload:
$ref: 'evse_board_support_API.yaml#/components/schemas/BspEvent'
examples:
- summary: "Signal state A (not connected)"
payload:
"event": "A"
send_bsp_measurement:
name: send_bsp_measurement
title: 'Send BSP Measurements'
summary: Instantaneous BSP measurements
contentType: application/json
payload:
$ref: '#/components/schemas/BspMeasurement'
examples:
- summary: "Report cable ampicity of 32A and some RCD current + PWM duty cycle"
payload:
proximity_pilot:
"ampacity": "A_32"
rcd_current_mA: 5
cp_pwm_duty_cycle: 53
send_ev_info:
name: send_ev_info
title: 'Send EV Info'
summary: Details about the EV if available
contentType: application/json
payload:
$ref: 'evse_manager_consumer_API.yaml#/components/schemas/EVInfo'
examples:
- summary: "Selection of EV information items."
payload:
soc: 67
present_voltage: 390
present_current: 80
target_voltage: 420
target_current: 80
maximum_current_limit: 120
minimum_current_limit: 10
maximum_voltage_limit: 500
evcc_id: "aa:bb:cc:dd:ee:ff"
battery_capacity: 77000
battery_full_soc: 95
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: ""
payload:
"type": "VendorError"
"sub_type": "string"
"message": "string"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that a previously raised error is no longer active.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: ""
payload:
"type": "VendorError"
"sub_type": "string"
"message": "string"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: ""
payload:
true
schemas:
Enabled:
description: 'True: enabled. False: disabled.'
type: boolean
EvCpState:
description: ControlPilot state
type: string
enum:
- A
- B
- C
- D
- 'E'
PowerOnOff:
description: 'True: allow power on, false: do not allow power on.'
type: boolean
DiodeFailure:
description: 'True: Diode failure, false: no failure.'
type: boolean
AcMaxCurrent:
description: 'Max current requested from the EV.'
type: number
ThreePhaseSupport:
description: 'True: Three phase support, False: One phase support.'
type: boolean
RCDCurrent:
description: 'RCD current in mA.'
type: number
BspMeasurement:
description: Bsp Measurement
type: object
additionalProperties: true
required:
- cp_pwm_duty_cycle
- proximity_pilot
properties:
proximity_pilot:
description: Current capability of the cable
type: object
$ref: 'evse_board_support_API.yaml#/components/schemas/ProximityPilot'
rcd_current_mA:
description: RCD current in mA
type: number
cp_pwm_duty_cycle:
description: CP PWM Duty Cycle in percent (0-100)
type: number
ErrorEnum:
description: |
Type of error
- CommunicationFault: The communication to the hardware or underlying driver is lost or has errors.
- VendorError: Vendor specific error code. Will stop charging session.
- VendorWarning: Vendor specific error code. Charging may continue.
type: string
enum:
- CommunicationFault
- VendorError
- VendorWarning
Error:
description: >-
Error object with type, subtype and message.
type: object
additionalProperties: true
required:
- type
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
description: The subtype of the error
type: string
message:
description: Addition information about the error
type: string
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,843 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:evse_board_support_API'
info:
title: 'EVerest API definition for EVSE board support'
version: 1.0.0
description: >-
API for EVerest API clients implementing evse board support, AC RCD and connector lock.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: evse_board_support
- name: ac_rcd
- name: connector_lock
servers:
default:
pathname: 'everest_api/1/evse_board_support/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
########## evse_board_support
receive_enable:
address: 'e2m/enable'
messages:
receive_enable:
$ref: '#/components/messages/receive_enable'
receive_pwm_on:
address: 'e2m/pwm_on'
messages:
receive_pwm_on:
$ref: '#/components/messages/receive_pwm_on'
receive_cp_state_X1:
address: 'e2m/cp_state_X1'
messages:
receive_cp_state_X1:
$ref: '#/components/messages/receive_cp_state_X1'
receive_cp_state_F:
address: 'e2m/cp_state_F'
messages:
receive_cp_state_F:
$ref: '#/components/messages/receive_cp_state_F'
receive_cp_state_E:
address: 'e2m/cp_state_E'
messages:
receive_cp_state_E:
$ref: '#/components/messages/receive_cp_state_E'
receive_allow_power_on:
address: 'e2m/allow_power_on'
messages:
receive_allow_power_on:
$ref: '#/components/messages/receive_allow_power_on'
receive_ac_switch_three_phases_while_charging:
address: 'e2m/ac_switch_three_phases_while_charging'
messages:
receive_ac_switch_three_phases_while_charging:
$ref: '#/components/messages/receive_ac_switch_three_phases_while_charging'
receive_ac_overcurrent_limit:
address: 'e2m/ac_overcurrent_limit'
messages:
receive_ac_overcurrent_limit:
$ref: '#/components/messages/receive_ac_overcurrent_limit'
send_event:
address: 'm2e/event'
messages:
send_event:
$ref: '#/components/messages/send_event'
send_ac_nr_of_phases:
address: 'm2e/ac_nr_of_phases'
messages:
send_ac_nr_of_phases:
$ref: '#/components/messages/send_ac_nr_of_phases'
send_capabilities:
address: 'm2e/capabilities'
messages:
send_capabilities:
$ref: '#/components/messages/send_capabilities'
send_ac_pp_ampacity:
address: 'm2e/ac_pp_ampacity'
messages:
send_ac_pp_ampacity:
$ref: '#/components/messages/send_ac_pp_ampacity'
send_request_stop_transaction:
address: 'm2e/request_stop_transaction'
messages:
send_request_stop_transaction:
$ref: '#/components/messages/send_request_stop_transaction'
########## ac_rcd
receive_self_test:
address: 'e2m/self_test'
messages:
receive_self_test:
$ref: '#/components/messages/receive_self_test'
receive_request_reset:
address: 'e2m/reset'
messages:
receive_request_reset:
$ref: '#/components/messages/receive_request_reset'
send_reply_reset:
address: null
messages:
send_reply_reset:
$ref: '#/components/messages/send_reply_reset'
send_rcd_current:
address: 'm2e/rcd_current'
messages:
send_rcd_current:
$ref: '#/components/messages/send_rcd_current'
########## connector_lock
receive_lock:
address: 'e2m/lock'
messages:
receive_lock:
$ref: '#/components/messages/receive_lock'
receive_unlock:
address: 'e2m/unlock'
messages:
receive_unlock:
$ref: '#/components/messages/receive_unlock'
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
########## evse_board_support
receive_enable:
title: 'Receive Enable'
action: receive
channel:
$ref: '#/channels/receive_enable'
description: 'Direction: EVerest to Module'
receive_pwm_on:
title: 'Receive PWM duty cycle'
action: receive
channel:
$ref: '#/channels/receive_pwm_on'
description: 'Direction: EVerest to Module'
receive_cp_state_X1:
title: 'Receive CP state X1'
action: receive
channel:
$ref: '#/channels/receive_cp_state_X1'
description: 'Direction: EVerest to Module'
receive_cp_state_F:
title: 'Receive CP state F'
action: receive
channel:
$ref: '#/channels/receive_cp_state_F'
description: 'Direction: EVerest to Module'
receive_cp_state_E:
title: 'Receive CP state E'
action: receive
channel:
$ref: '#/channels/receive_cp_state_E'
description: 'Direction: EVerest to Module'
receive_allow_power_on:
title: 'Receive permission to switch relays'
action: receive
channel:
$ref: '#/channels/receive_allow_power_on'
description: 'Direction: EVerest to Module'
receive_ac_switch_three_phases_while_charging:
title: 'Receive command to switch 3 phase and 1 phase mode while charging'
action: receive
channel:
$ref: '#/channels/receive_ac_switch_three_phases_while_charging'
description: 'Direction: EVerest to Module'
receive_ac_overcurrent_limit:
title: 'Receive over current limit'
action: receive
channel:
$ref: '#/channels/receive_ac_overcurrent_limit'
description: 'Direction: EVerest to Module'
send_event:
title: 'Send ControlPilot event'
action: send
channel:
$ref: '#/channels/send_event'
description: 'Direction: Module to EVerest'
send_ac_nr_of_phases:
title: 'Send phase count available to car'
action: send
channel:
$ref: '#/channels/send_ac_nr_of_phases'
description: 'Direction: Module to EVerest'
send_capabilities:
title: 'Send hardware capabilities'
action: send
channel:
$ref: '#/channels/send_capabilities'
description: 'Direction: Module to EVerest'
send_ac_pp_ampacity:
title: 'Send AC pp ampacity'
action: send
channel:
$ref: '#/channels/send_ac_pp_ampacity'
description: 'Direction: Module to EVerest'
send_request_stop_transaction:
title: 'Send request to stop charging'
action: send
channel:
$ref: '#/channels/send_request_stop_transaction'
description: 'Direction: Module to EVerest'
########## ac_rcd
receive_self_test:
title: 'Receive request for self test'
action: receive
channel:
$ref: '#/channels/receive_self_test'
receive_request_reset:
title: 'Request to reset RCD'
action: receive
channel:
$ref: '#/channels/receive_request_reset'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_reset'
send_reply_reset:
title: 'Send reply to reset RCD request'
description: 'Reply to request'
action: send
channel:
$ref: '#/channels/send_reply_reset'
send_rcd_current:
title: 'Send RCD current'
action: send
channel:
$ref: '#/channels/send_rcd_current'
description: 'Direction: Module to EVerest'
########## connector_lock
receive_lock:
title: 'Receive request to lock'
action: receive
channel:
$ref: '#/channels/receive_lock'
receive_unlock:
title: 'Receive request to unlock'
action: receive
channel:
$ref: '#/channels/receive_unlock'
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
description: 'Direction: EVerest to Module'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
########## evse_board_support
receive_enable:
name: receive_enable
title: 'Receive enable or disable for charging port'
summary: >-
Enables or disables the charging port. Typically disabled results in control
pilot state F. It must not accept cars for new charging sessions if disabled.
contentType: application/json
payload:
$ref: '#/components/schemas/Enabled'
examples:
- summary: ""
payload:
true
receive_pwm_on:
name: receive_pwm_on
title: 'Receive PWM duty cycle'
summary: Turns PWM on with duty cycle (in percent)
contentType: application/json
payload:
$ref: '#/components/schemas/PWMDutyCycle'
examples:
- summary: ""
payload:
100
receive_cp_state_X1:
name: receive_cp_state_X1
title: 'Receive CP state X1'
summary: Turn PWM off and set CP to constant high voltage (state X1)
receive_cp_state_F:
name: receive_cp_state_F
title: 'Receive CP state F'
summary: Turn PWM off with error F (constant negative voltage)
receive_cp_state_E:
name: receive_cp_state_E
title: 'Receive CP state E'
summary: Set CP to 0 V (state E)
receive_allow_power_on:
name: receive_allow_power_on
title: 'Receive permission to switch relays on'
summary: Sets allow_power_on flag. If false, relays must never be switched on.
contentType: application/json
payload:
$ref: '#/components/schemas/PowerOnOff'
examples:
- summary: ""
payload:
"allow_power_on": true
"reason": "DCCableCheck"
receive_ac_switch_three_phases_while_charging:
name: receive_ac_switch_three_phases_while_charging
title: 'Receive request switch between 3 phase and 1 phase mode'
summary: >-
Optional, in case of doubt do not implement. Report in hardware_capabilites if this command is supported.
This command switches between one and three phase operation during an active charging session.
Some cars can be permanently destroyed by that, so the bsp needs to implement a special sequence for the switching.
The exact sequence can be defined by the BSP, but one example would be a C2->C1->B1->F->B1->B2->C2 or similar.
Use with caution.
contentType: application/json
payload:
$ref: '#/components/schemas/ACPhaseMode'
examples:
- summary: ""
payload:
"ThreePhases"
receive_ac_overcurrent_limit:
name: receive_ac_overcurrent_limit
title: 'Receive over current limit'
summary: >-
Many chargers implement a fast over current shutdown directly in the hardware that triggers if the EV draws more current than
the PWM allows.
If the hardware does not have this functionality, just ignore this command. Do not use it to set the PWM duty cycle.
Otherwise this command reports a value that should be used for the overcurrent detection.
A margin needs to be added to avoid false triggers. Do not use the PWM duty cycle to infer the current limit in the BSP,
as this will not work with HLC.
contentType: application/json
payload:
$ref: '#/components/schemas/OverCurrent'
examples:
- summary: ""
payload:
15
send_event:
name: send_event
title: 'Send ControlPilot event'
summary: 'Event from ControlPilot signal/out relais'
contentType: application/json
payload:
$ref: '#/components/schemas/BspEvent'
examples:
- summary: ""
payload:
"event": "A"
send_ac_nr_of_phases:
name: send_ac_nr_of_phases
title: 'Send phase count'
summary: Instantaneous phase count available to car
contentType: application/json
payload:
$ref: '#/components/schemas/PhaseCount'
examples:
- summary: ""
payload:
3
send_capabilities:
name: send_capabilities
title: 'Send hardware capabilities'
summary: >-
Hardware capabilities/limits. Initially EvseManager will call get_hw_capabilities once to fetch the
limits and caches the limits internally. The BSP module does not have to publish this variable at all,
then the initially fetched capabilities will be used. The BSP may publish this variable to update
limits in case they change during runtime, e.g. if the maximum current changes because the hardware
gets too hot.
contentType: application/json
payload:
$ref: '#/components/schemas/HardwareCapabilities'
examples:
- summary: ""
payload:
"max_current_A_import": 5
"min_current_A_import": 1
"max_phase_count_import": 3
"min_phase_count_import": 1
"max_current_A_export": 10
"min_current_A_export": 1
"max_phase_count_export": 3
"min_phase_count_export": 1
"supports_changing_phases_during_charging": true
"max_plug_temperature_C": 80
"connector_type": "IEC62196Type2Cable"
send_ac_pp_ampacity:
name: send_ac_pp_ampacity
title: 'Send AC pp ampacity'
summary: >-
Current carrying capacity of the connected cable in ampere for AC charging
with a socket. Publish whenever it changes.
This has no meaning for DC or AC charging with a fixed attached cable, it does not
need to be implemented and the returned value is not used in those cases.
contentType: application/json
payload:
$ref: '#/components/schemas/ProximityPilot'
examples:
- summary: ""
payload:
"ampacity": "None"
send_request_stop_transaction:
name: send_request_stop_transaction
title: 'Request stop charging'
summary: 'Publish to stop the transaction gracefully (e.g. user pressed the stop button)'
contentType: application/json
payload:
$ref: 'evse_manager_consumer_API.yaml#/components/schemas/StopTransactionRequest'
examples:
- summary: ""
payload:
reason: "Local"
########## ac_rcd
receive_self_test:
name: receive_self_test
title: 'Receive signal for selftest'
summary: >-
Executes a self test of the RCD. If it fails, an error of type Selftest should be raised.
receive_request_reset:
name: receive_request_reset
title: 'Request to reset RCD'
summary: 'Reply to provided topic.'
contentType: application/json
payload:
type: object
properties:
headers:
type: object
properties:
replyTo:
type: string
description: 'The topic to which to send the reply'
examples:
- summary: ""
payload:
headers:
replyTo: everest_api/1/{interface_type}/{module_id}/e2m/{operation_name}/{uuid}
send_reply_reset:
name: send_reply_reset
title: 'Reply to request for RCD reset'
summary: >-
Resets the RCD after a trigger. May not be supported by actual hardware.
contentType: application/json
payload:
$ref: '#/components/schemas/Success'
send_rcd_current:
name: send_rcd_current
title: 'Send RCD current'
summary: Residual current in mA. Note that this does not trigger anything, it is merely for reporting.
contentType: application/json
payload:
$ref: '#/components/schemas/Current'
examples:
- summary: ""
payload:
1
########## connector_lock
receive_lock:
name: receive_lock
title: 'Receive signal to lock'
summary: >-
Lock connector lock
receive_unlock:
name: receive_unlock
title: 'Receive signal to unlock'
summary: >-
Unlock connector lock. (e.g. normal unlock or enforced by OCPP)
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: ""
payload:
"type": "DiodeFault"
"sub_type": "string"
"message": "string"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that a previously raised error is no longer active.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: ""
payload:
"type": "DiodeFault"
"sub_type": "string"
"message": "string"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: ""
payload:
true
schemas:
ACPhaseMode:
description: Number of active phases for AC charging
type: string
enum:
- ThreePhases
- SinglePhase
BspEvent:
description: "Event stream from ControlPilot signal/relais."
type: object
additionalProperties: true
required:
- event
properties:
event:
type: string
description: |
- A-F: CP states as defined in IEC61851-1
- PowerOn: Hardware confirms that contactors switched on correctly (typically mirror contacts indicated successful switch on)
- PowerOff: Hardware confirms that contactors switched off correctly and are not welded (typically mirror contacts indicated successful switch off)
- Disconnected: Only used on EV side: Not connected to a charging station. Do not use on EVSE side.
enum:
- 'A'
- 'B'
- 'C'
- 'D'
- 'E'
- 'F'
- 'PowerOn'
- 'PowerOff'
- 'Disconnected'
Current:
description: Electrical current in milliampere (mA)
type: number
Duration:
description: Duration in milliseconds (ms)
type: integer
minimum: 0
Enabled:
description: 'True: enabled. False: disabled.'
type: boolean
HardwareCapabilities:
description: Hardware capabilities / limits
type: object
additionalProperties: true
required:
- max_current_A_import
- min_current_A_import
- max_phase_count_import
- min_phase_count_import
- max_current_A_export
- min_current_A_export
- max_phase_count_export
- min_phase_count_export
- supports_changing_phases_during_charging
- connector_type
properties:
max_current_A_import:
description: Maximum current (ampere) the hardware can handle (import from grid)
type: number
min_current_A_import:
description: >-
Minimum current (ampere) the hardware can use to charge. Values
below may be set but may result in pause instead. (import from grid)
type: number
max_phase_count_import:
description: Max nr of phases the hardware can use (import from grid)
type: integer
minimum: 1
maximum: 3
min_phase_count_import:
description: Minimum nr of phases the hardware can use (import from grid)
type: integer
minimum: 1
maximum: 3
max_current_A_export:
description: Maximum current (ampere) the hardware can handle (export to grid)
type: number
min_current_A_export:
description: >-
Minimum current (ampere) the hardware can use to charge. Values
below may be set but may result in pause instead. (export to grid)
type: number
max_phase_count_export:
description: Max nr of phases the hardware can use (export to grid)
type: integer
minimum: 1
maximum: 3
min_phase_count_export:
description: Minimum nr of phases the hardware can use (export to grid)
type: integer
minimum: 1
maximum: 3
supports_changing_phases_during_charging:
description: >-
Indicates whether changing number of phases is supported during
charging (true) or not (false)
type: boolean
max_plug_temperature_C:
type: number
connector_type:
description: Type of charging connector available at this EVSE
type: string
enum:
- IEC62196Type2Cable
- IEC62196Type2Socket
OverCurrent:
description: Electrical current in ampere (A)
type: number
PhaseCount:
description: Number of phases
type: integer
minimum: 1
maximum: 3
PowerOnOff:
description: >-
Flag and context for switching power on/off. In some architectures e.g. DC power
train needs to know whether it should switch on with limited current or full current on the output contactors.
type: object
additionalProperties: true
required:
- allow_power_on
- reason
properties:
allow_power_on:
description: Allow switching on (true) or force switching off (false)
type: boolean
reason:
description: Reason for switching on/off
type: string
enum:
- DCCableCheck
- DCPreCharge
- FullPowerCharging
- PowerOff
ProximityPilot:
description: Current capability (ampacity) of the cable
type: object
additionalProperties: true
required:
- ampacity
properties:
ampacity:
description: Ampacity value of the cable assembly
type: string
enum:
- None
- A_13
- A_20
- A_32
- A_63_3ph_70_1ph
PWMDutyCycle:
description: PWM duty cycle
type: number
minimum: 0
maximum: 100
Success:
description: 'Success: true, failure: false'
type: boolean
ErrorEnum:
description: |
Type of error
- DiodeFault: 'The CP diode in the EV is shorted.'
- VentilationNotAvailable: 'EV requested state D but no ventilation is available.'
- BrownOut: 'The hardware/MCU detected a brown out.'
- EnergyManagement: 'Energy could not be delivered because an (external) energy management failed.'
- PermanentFault: 'The EVSE is permanently broken and requires repair.'
- MREC2GroundFailure: 'Ground fault circuit interrupter has been activated.'
- MREC3HighTemperature: 'High temperature inside the EVSE is derating power delivery.'
- MREC4OverCurrentFailure: 'Over current protection device has tripped.'
- MREC5OverVoltage: 'Input voltage to the vehicle has risen above an acceptable level.'
- MREC6UnderVoltage: 'Input voltage to the vehicle has dropped below an acceptable level.'
- MREC8EmergencyStop: 'Emergency stop is pressed by the user (required if equipped).'
- MREC10InvalidVehicleMode: 'The vehicle is in an invalid mode for charging (Reported by IEC stack)'
- MREC14PilotFault: 'The control pilot voltage is out of range.'
- MREC15PowerLoss: 'The EVSE is unable to supply any power due to mains failure'
- MREC17EVSEContactorFault: "Contactors fail to open or close on EVSE's side. May also include welding related errors."
- MREC18CableOverTempDerate: 'Temperature of charging cable or connector assembly is too high, resulting in reduced power operation.'
- MREC19CableOverTempStop: 'Temperature of charging cable or connector assembly is too high, resulting in a stopped charging session.'
- MREC20PartialInsertion: 'Cable latch is raised due to incomplete insertion into the vehicle charging port.'
- MREC23ProximityFault: 'The proximity voltage is out of range.'
- MREC24ConnectorVoltageHigh: 'The output voltage of EVSE is high before charging starts or after charging ends.'
- MREC25BrokenLatch: 'The latch on the connector is broken.'
- MREC26CutCable: 'The output cable has been severed from the EVSE.'
- ConnectorLockCapNotCharged: 'The capacitor for connector lock motor failed to charge within expected time'
- ConnectorLockUnexpectedOpen: 'The connector lock feedback returns open while it should be closed'
- ConnectorLockUnexpectedClose: 'The connector lock feedback returns closed while it should be open'
- ConnectorLockFailedLock: 'The connector lock failed to lock (feedback still returns open)'
- ConnectorLockFailedUnlock: 'The connector lock failed to unlock (feedback still returns closed)'
- MREC1ConnectorLockFailure: ' Failure to lock or unlock connector on the vehicle side as per MREC definition. How should that be implemented? We can only find out about locking on the EVSE side, so we will use this error to report EVSE side lock failures. It is probably a mistake in the MREC definition.'
- Selftest: 'The Selftest failed, device permanently broken'
- DC: 'RCD was triggered by a DC fault'
- AC: 'RCD was triggered by an AC fault'
- TiltDetected: 'The EVSE has been tilted beyond acceptable limits.'
- WaterIngressDetected: 'A substantial amount of water has been detected inside the EVSE.'
- EnclosureOpen: 'The EVSE enclosure is open, e.g. a door or panel is not properly closed.'
- VendorError: 'Vendor specific error code. Will stop charging session.'
- VendorWarning: 'Vendor specific error code. Charging may continue.'
type: string
enum:
- DiodeFault
- VentilationNotAvailable
- BrownOut
- EnergyManagement
- PermanentFault
- MREC2GroundFailure
- MREC3HighTemperature
- MREC4OverCurrentFailure
- MREC5OverVoltage
- MREC6UnderVoltage
- MREC8EmergencyStop
- MREC10InvalidVehicleMode
- MREC14PilotFault
- MREC15PowerLoss
- MREC17EVSEContactorFault
- MREC18CableOverTempDerate
- MREC19CableOverTempStop
- MREC20PartialInsertion
- MREC23ProximityFault
- MREC24ConnectorVoltageHigh
- MREC25BrokenLatch
- MREC26CutCable
- ConnectorLockCapNotCharged
- ConnectorLockUnexpectedOpen
- ConnectorLockUnexpectedClose
- ConnectorLockFailedLock
- ConnectorLockFailedUnlock
- MREC1ConnectorLockFailure
- Selftest
- DC
- AC
- TiltDetected
- WaterIngressDetected
- EnclosureOpen
- VendorError
- VendorWarning
Error:
description: >-
Errors for the evse_board_support interface.
All error codes that begin with MREC needs to be implemented to fulfill the Minimum
Required Error Codes defined by the ChargeX consortium:
https://inl.gov/content/uploads/2023/07/ChargeX_MREC_Rev5_09.12.23.pdf
type: object
additionalProperties: true
required:
- type
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
description: The subtype of the error
type: string
message:
description: Addition information about the error
type: string
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,442 @@
---
asyncapi: 3.0.0
id: pionix:de:everest:evse_security_consumer_API
info:
title: EVerest API definition for evse_security consumer
version: 1.0.0
description: API for EVerest API clients that use the EvseSecurity module.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: OCPP
servers:
default:
pathname: everest_api/1/evse_security_consumer/{module_id}
host: localhost:1883
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
########## evse_security
send_request_is_ca_certificate_installed:
address: m2e/is_ca_certificate_installed
messages:
send_request_is_ca_certificate_installed:
$ref: '#/components/messages/send_request_is_ca_certificate_installed'
receive_reply_is_ca_certificate_installed:
address:
messages:
receive_reply_is_ca_certificate_installed:
$ref: '#/components/messages/receive_reply_is_ca_certificate_installed'
send_request_get_leaf_certificate_info:
address: m2e/get_leaf_certificate_info
messages:
send_request_get_leaf_certificate_info:
$ref: '#/components/messages/send_request_get_leaf_certificate_info'
receive_reply_get_leaf_certificate_info:
address:
messages:
receive_reply_get_leaf_certificate_info:
$ref: '#/components/messages/receive_reply_get_leaf_certificate_info'
send_request_get_verify_location:
address: m2e/get_verify_location
messages:
send_request_get_verify_location:
$ref: '#/components/messages/send_request_get_verify_location'
receive_reply_get_verify_location:
address:
messages:
receive_reply_get_verify_location:
$ref: '#/components/messages/receive_reply_get_verify_location'
receive_heartbeat:
address: e2m/heartbeat
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: m2e/communication_check
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
########## evse_security
send_request_is_ca_certificate_installed:
title: Command that indicates if the given CA certificate type is installed
action: send
channel:
$ref: '#/channels/send_request_is_ca_certificate_installed'
description: Command that indicates if the given CA certificate type is installed
reply:
address:
location: $message.header#/replyTo
channel:
$ref: '#/channels/receive_reply_is_ca_certificate_installed'
receive_reply_is_ca_certificate_installed:
title: Reply to is ca certificate installed request
action: receive
channel:
$ref: '#/channels/receive_reply_is_ca_certificate_installed'
send_request_get_leaf_certificate_info:
title: Command to get the paths of the certificate and the respective key
action: send
channel:
$ref: '#/channels/send_request_get_leaf_certificate_info'
description: Command to get the paths of the certificate and the respective key
reply:
address:
location: $message.header#/replyTo
channel:
$ref: '#/channels/receive_reply_get_leaf_certificate_info'
receive_reply_get_leaf_certificate_info:
title: Reply to get leaf certificate info request
action: receive
channel:
$ref: '#/channels/receive_reply_get_leaf_certificate_info'
send_request_get_verify_location:
title: >-
Command to get the file path of the CA root directory that can be used for verification. Will also invoke c_rehash for
that directory
action: send
channel:
$ref: '#/channels/send_request_get_verify_location'
description: >-
Command to get the file path of the CA root directory that can be used for verification. Will also invoke c_rehash for
that directory
reply:
address:
location: $message.header#/replyTo
channel:
$ref: '#/channels/receive_reply_get_verify_location'
receive_reply_get_verify_location:
title: Reply to get verify location request
action: receive
channel:
$ref: '#/channels/receive_reply_get_verify_location'
receive_heartbeat:
title: Receive heartbeat
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: Send communication check
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_request_is_ca_certificate_installed:
name: send_request_is_ca_certificate_installed
title: Command that indicates if the given CA certificate type is installed
summary: Command that indicates if the given CA certificate type is installed
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo:
type: string
description: >-
Address to send the response to. If this information is missing, the command will still be accepted, but
no response will be sent.
payload:
$ref: '#/components/schemas/CaCertificateType'
examples:
- summary: 'Ask if certificated of type CSMS is installed'
payload:
headers:
replyTo: reply/to/address
payload: CSMS
receive_reply_is_ca_certificate_installed:
name: receive_reply_is_ca_certificate_installed
title: Reply to is ca certificate installed request
summary: Reply to is ca certificate installed
contentType: application/json
payload:
description: True if CA certificate is installed, else false
type: boolean
examples:
- summary: ''
payload: true
send_request_get_leaf_certificate_info:
name: send_request_get_leaf_certificate_info
title: Command to get the paths of the certificate and the respective key
summary: Command to get the paths of the certificate and the respective key
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo:
type: string
description: >-
Address to send the response to. If this information is missing, the command will still be accepted, but
no response will be sent.
payload:
$ref: '#/components/schemas/GetLeafCertificateInfoRequest'
examples:
- summary: 'Get information for CSMS type certificate'
payload:
headers:
replyTo: reply/to/address
payload:
certificate_type: CSMS
encoding: PEM
include_ocsp: false
receive_reply_get_leaf_certificate_info:
name: receive_reply_get_leaf_certificate_info
title: Reply to get leaf certificate info request
summary: Reply to get leaf certificate info
contentType: application/json
payload:
$ref: '#/components/schemas/GetCertificateInfoResult'
examples:
- summary: 'Reply to get information request'
payload:
status: Accepted
info:
key: /etc/everest/certs/client/csms.key
certificate_count: 1
send_request_get_verify_location:
name: send_request_get_verify_location
title: >-
Command to get the file path of the CA root directory that can be used for verification. Will also invoke c_rehash
for that directory
summary: >-
Command to get the file path of the CA root directory that can be used for verification. Will also invoke c_rehash
for that directory
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo:
type: string
description: >-
Address to send the response to. If this information is missing, the command will still be accepted, but
no response will be sent.
payload:
$ref: '#/components/schemas/CaCertificateType'
examples:
- summary: 'Get file path for V2G CA root directory'
payload:
headers:
replyTo: reply/to/address
payload: V2G
receive_reply_get_verify_location:
name: receive_reply_get_verify_location
title: Reply to get verify location request
summary: Reply to get verify location
contentType: application/json
payload:
description: The path of the CA certificates directory
type: string
examples:
- summary: 'Return the CA root directory'
payload: /path/to/ca/certificates
receive_heartbeat:
name: receive_heartbeat
title: Receive heartbeat
summary: >-
Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: Heartbeat
payload: 42
send_communication_check:
name: send_communication_check
title: Send communication check
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: CommunicationCheck
payload: true
schemas:
CaCertificateType:
description: Enum specifies the type of a CA certificate
type: string
enum:
- V2G
- MO
- CSMS
- MF
LeafCertificateType:
description: Enum specifies the type of a leaf certificate
type: string
enum:
- CSMS
- V2G
- MF
- MO
EncodingFormat:
description: Enum specifies the encoding of certificates or keys
type: string
enum:
- DER
- PEM
GetLeafCertificateInfoRequest:
type: object
additionalProperties: true
required:
- certificate_type
- encoding
- include_ocsp
properties:
certificate_type:
$ref: '#/components/schemas/LeafCertificateType'
encoding:
$ref: '#/components/schemas/EncodingFormat'
include_ocsp:
description: Specifies whether per-certificate OCSP data is also requested
type: boolean
GetCertificateInfoStatus:
description: Status indicates the result of the attempt to retrieve a certificate
type: string
enum:
- Accepted
- Rejected
- NotFound
- NotFoundValid
- PrivateKeyNotFound
HashAlgorithm:
description: Enum specifies a hash algorithm
type: string
enum:
- SHA256
- SHA384
- SHA512
CertificateHashData:
description: Type specifies the hash data of a certificate
type: object
required:
- hash_algorithm
- issuer_name_hash
- issuer_key_hash
- serial_number
properties:
hash_algorithm:
description: Algorithm used for the hashes provided
type: string
$ref: '#/components/schemas/HashAlgorithm'
issuer_name_hash:
description: >-
The hash of the issuer's distinguished name (DN), calculated over the DER encoding of the issuer's name field.
type: string
maxLength: 128
issuer_key_hash:
description: >-
The hash of the DER encoded public key: the value (excluding tag and length) of the subject public key field
type: string
maxLength: 128
serial_number:
description: >-
The string representation of the hexadecimal value of the serial number without the prefix "0x" and without leading
zeroes.
type: string
maxLength: 40
additionalProperties: true
CertificateOCSP:
description: OCSP data related to requested the certificates
type: object
required:
- hash
properties:
hash:
description: Hash of certificate linked to the provided data
type: object
$ref: '#/components/schemas/CertificateHashData'
ocsp_path:
description: OCSP path of the file containing the data
type: string
additionalProperties: true
CertificateInfo:
description: Type that specifies the paths of a certificate and the respective private key
type: object
required:
- key
- certificate_count
properties:
key:
description: The path of the PEM or DER encoded private key
type: string
certificate_root:
description: The PEM of the root certificate that issued this leaf
type: string
certificate:
description: The path of the PEM or DER encoded certificate chain
type: string
certificate_single:
description: The path of the PEM or DER encoded single certificate
type: string
certificate_count:
description: The count of certificates in the chain
type: integer
password:
description: Specifies the password for the private key if encrypted
type: string
ocsp:
description: Certificate related OCSP data, if requested
type: array
items:
minimum: 0
type: object
$ref: '#/components/schemas/CertificateOCSP'
additionalProperties: true
GetCertificateInfoResult:
description: Response to the command get_leaf_certificate_info
type: object
required:
- status
properties:
status:
description: The status of the requested command
type: string
$ref: '#/components/schemas/GetCertificateInfoStatus'
info:
description: The requested info
type: object
$ref: '#/components/schemas/CertificateInfo'
additionalProperties: true
HeartBeatId:
type: integer
description: >-
64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value
is reached
CommunicationCheck:
type: boolean
description: >-
Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop
communication check

View File

@@ -0,0 +1,570 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:external_energy_limits_consumer_API'
info:
title: 'EVerest API definition for external energy limits'
version: 1.0.0
description: >-
API to allow EVerest API clients to set energy limits.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: external energy limits
servers:
default:
pathname: 'everest_api/1/external_energy_limits_consumer/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
send_set_external_limits:
address: 'm2e/set_external_limits'
messages:
send_set_external_limits:
$ref: '#/components/messages/send_set_external_limits'
receive_capabilities:
address: 'e2m/capabilities'
messages:
receive_capabilities:
$ref: '#/components/messages/receive_capabilities'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_set_external_limits:
title: 'Send external energy limits'
action: send
channel:
$ref: '#/channels/send_set_external_limits'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_set_external_limits:
name: send_set_external_limits
title: 'Send external energy limits'
summary: 'External energy limits'
contentType: application/json
payload:
$ref: '#/components/schemas/ExternalLimits'
examples:
- summary: "Set enforced limits"
payload:
{
"schedule_import": [
{
"timestamp": "2019-08-24T14:15:22Z",
"limits_to_root": {
"total_power_W": {
"value": 0,
"source": "string"
},
"ac_max_current_A": {
"value": 0,
"source": "string"
},
"ac_min_current_A": {
"value": 0,
"source": "string"
},
"ac_max_phase_count": {
"value": 0,
"source": "string"
},
"ac_min_phase_count": {
"value": 0,
"source": "string"
},
"ac_supports_changing_phases_during_charging": true,
"ac_number_of_active_phases": 1
},
"limits_to_leaves": {
"total_power_W": {
"value": 0,
"source": "string"
},
"ac_max_current_A": {
"value": 0,
"source": "string"
},
"ac_min_current_A": {
"value": 0,
"source": "string"
},
"ac_max_phase_count": {
"value": 0,
"source": "string"
},
"ac_min_phase_count": {
"value": 0,
"source": "string"
},
"ac_supports_changing_phases_during_charging": true,
"ac_number_of_active_phases": 1
},
"conversion_efficiency": 1,
"price_per_kwh": {
"timestamp": "2019-08-24T14:15:22Z",
"value": 0,
"currency": "str"
}
}
],
"schedule_export": [
{
"timestamp": "2019-08-24T14:15:22Z",
"limits_to_root": {
"total_power_W": {
"value": 0,
"source": "string"
},
"ac_max_current_A": {
"value": 0,
"source": "string"
},
"ac_min_current_A": {
"value": 0,
"source": "string"
},
"ac_max_phase_count": {
"value": 0,
"source": "string"
},
"ac_min_phase_count": {
"value": 0,
"source": "string"
},
"ac_supports_changing_phases_during_charging": true,
"ac_number_of_active_phases": 1
},
"limits_to_leaves": {
"total_power_W": {
"value": 0,
"source": "string"
},
"ac_max_current_A": {
"value": 0,
"source": "string"
},
"ac_min_current_A": {
"value": 0,
"source": "string"
},
"ac_max_phase_count": {
"value": 0,
"source": "string"
},
"ac_min_phase_count": {
"value": 0,
"source": "string"
},
"ac_supports_changing_phases_during_charging": true,
"ac_number_of_active_phases": 1
},
"conversion_efficiency": 1,
"price_per_kwh": {
"timestamp": "2019-08-24T14:15:22Z",
"value": 0,
"currency": "str"
}
}
],
"schedule_setpoints": [
{
"timestamp": "2019-08-24T14:15:22Z",
"setpoint": {
"ac_current_A": 0,
"total_power_W": 0,
"frequency_table": [
{
"frequency_Hz": 0,
"total_power_W": 0
}
],
"priority": 1000,
"source": "string"
}
}
]
}
receive_capabilities:
name: receive_capabilities
title: 'Receive energy node capabilities'
summary: 'Capabilities of the energy node'
contentType: application/json
payload:
$ref: '#/components/schemas/CapabilityLimits'
examples:
- summary: ""
payload:
{
"max_current_A": 16,
"max_phase_count": 3,
"nominal_voltage_V": 230,
"total_power_W": 11040
}
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
ExternalLimits:
description: External Limits data type
type: object
additionalProperties: true
required:
- schedule_import
- schedule_export
- schedule_setpoints
properties:
schedule_import:
description: >-
Energy import/limits time series. The first entry is special as it will be active already now
even if the timestamp is in the future, so it is good practice to set the
first entry to current time. The time series can have arbitrary time difference
between entries and all timestamps are absolute UTC time.
The last entry is valid for any time after the schedule ends.
type: array
items:
description: One entry for the time series
type: object
$ref: '#/components/schemas/ScheduleReqEntry'
schedule_export:
description: >-
Energy export/limits time series. The first entry is special as it will be active already now
even if the timestamp is in the future, so it is good practice to set the
first entry to current time. The time series can have arbitrary time difference
between entries and all timestamps are absolute UTC time.
The last entry is valid for any time after the schedule ends.
type: array
items:
description: One entry for the time series
type: object
$ref: '#/components/schemas/ScheduleReqEntry'
schedule_setpoints:
description: >-
Setpoints time series. The first entry is special
as it will be active already now even if the timestamp is in the future,
so it is good practice to set the first entry to current time. The time
series can have arbitrary time difference between entries and all timestamps
are absolute UTC time.
type: array
items:
description: One entry for the time series.
type: object
$ref: '#/components/schemas/ScheduleSetpointEntry'
FrequencyWattPoint:
description: A point of a frequency-watt curve
type: object
additionalProperties: true
required:
- frequency_Hz
- total_power_W
properties:
frequency_Hz:
description: The frequency in Hz
type: number
total_power_W:
description: The total power in W
type: number
IntegerWithSource:
description: Simple number type with source information
type: object
additionalProperties: true
required:
- value
- source
properties:
value:
description: Value
type: integer
source:
description: Source of the value
type: string
LimitsReq:
description: Energy flow limiting object request (Evses to EnergyManager)
type: object
additionalProperties: true
properties:
total_power_W:
description: >-
Total power limit in Watt. Can be used for DC or as additional
limit for AC.
type: object
$ref: '#/components/schemas/NumberWithSource'
ac_max_current_A:
description: Max current limit (per phase) in Ampere. AC only.
type: object
$ref: '#/components/schemas/NumberWithSource'
ac_min_current_A:
description: >-
Min AC current limit per phase in Ampere. Values below that value indicate the
device will not work properly, i.e. it will not charge below 6 amps. AC only.
type: object
$ref: '#/components/schemas/NumberWithSource'
ac_max_phase_count:
description: Limit to number of phases. Omit if number of phases are not limited.
type: object
$ref: '#/components/schemas/IntegerWithSource'
ac_min_phase_count:
description: Minimal number of phases. Omit if number of phases are not limited.
type: object
$ref: '#/components/schemas/IntegerWithSource'
ac_supports_changing_phases_during_charging:
description: >-
Indicate whether phase switching is allowed during charging or
not
type: boolean
ac_number_of_active_phases:
description: >-
Number of phases currently offered to the vehicle (1ph or 3ph mode)
type: integer
minimum: 1
maximum: 3
LimitsRes:
description: Energy flow limiting object Result (Energy manager to Evses)
type: object
additionalProperties: true
properties:
total_power_W:
description: >-
Total power limit in Watt. Can be used for DC or as additional
limit for AC. Negative numbers mean export to grid direction.
type: object
$ref: '#/components/schemas/NumberWithSource'
ac_max_current_A:
description: Max current limit (per phase) in Ampere. AC only. Negative numbers mean export to grid direction.
type: object
$ref: '#/components/schemas/NumberWithSource'
ac_max_phase_count:
description: Limit to number of phases. Omit if number of phases are not limited.
type: object
$ref: '#/components/schemas/IntegerWithSource'
NumberWithSource:
description: Simple number type with source information
type: object
additionalProperties: true
required:
- value
- source
properties:
value:
description: Value
type: number
source:
description: Source of the value
type: string
PricePerkWh:
description: Price information for this timepoint
type: object
additionalProperties: true
required:
- timestamp
- value
- currency
properties:
timestamp:
description: Absolute timestamp for this sample in RFC3339 UTC format
type: string
format: date-time
value:
description: Price per kWh (cost)
type: number
currency:
description: Currency in 3 digit ISO 4217
type: string
minLength: 3
maxLength: 3
ScheduleReqEntry:
description: One entry for the time series (request)
type: object
additionalProperties: true
required:
- timestamp
- limits_to_root
- limits_to_leaves
properties:
timestamp:
description: Absolute timestamp for this sample in RFC3339 UTC format
type: string
format: date-time
limits_to_root:
description: Limit for this timestamp, for the root facing side
type: object
$ref: '#/components/schemas/LimitsReq'
limits_to_leaves:
description: Limit for this timestamp, for the leaves facing side
type: object
$ref: '#/components/schemas/LimitsReq'
conversion_efficiency:
description: Conversion efficiency from root to leaves side (e.g. AC/DC efficiency). Defaults to one if not specified.
type: number
minimum: 0
maximum: 1
price_per_kwh:
description: Price information for this timepoint
type: object
$ref: '#/components/schemas/PricePerkWh'
ScheduleResEntry:
description: One entry for the time series (result)
type: object
additionalProperties: true
required:
- timestamp
- limits_to_root
properties:
timestamp:
description: Absolute timestamp for this sample in RFC3339 UTC format
type: string
format: date-time
limits_to_root:
description: Limit for this timestamp, for the root facing side
type: object
$ref: '#/components/schemas/LimitsRes'
price_per_kwh:
description: Price information for this timepoint
type: object
$ref: '#/components/schemas/PricePerkWh'
ScheduleSetpointEntry:
description: One entry for the time series (setpoint request)
type: object
additionalProperties: true
required:
- timestamp
properties:
timestamp:
description: Absolute timestamp for this sample in RFC3339 UTC format
type: string
format: date-time
setpoint:
description: Setpoint for this timestamp
type: object
$ref: '#/components/schemas/SetpointType'
SetpointType:
description: Defines a setpoint
type: object
additionalProperties: true
required:
- source
- priority
properties:
ac_current_A:
description: >-
The target value in amps per phase for either charging or discharging depending on the sign.
Positive values indicate charging, while negative values indicate discharging.
Do not set ac_current_A, total_power_W and frequency_table properties simultaneously.
type: number
total_power_W:
description: >-
The target value for the total power for either charging or discharging depending on the sign.
Positive values indicate charging, while negative values indicate discharging.
Do not set ac_current_A, total_power_W and frequency_table properties simultaneously.
type: number
frequency_table:
description: >-
Frequency table for the setpoint. When used it must contain at least
two coordinates to specify a power-frequency table to use during this period.
If the array is empty, no frequency setpoint is set.
Do not set ac_current_A, total_power_W and frequency_table properties simultaneously.
type: array
items:
description: One entry for the frequency table
type: object
$ref: '#/components/schemas/FrequencyWattPoint'
priority:
description: >-
If multiple conflicting setpoints are specified in the tree, the priority selects which one is used.
Highest priority is 0, lowest priority is 1000.
type: integer
minimum: 0
maximum: 1000
source:
description: Source of the setpoint
type: string
CapabilityLimits:
description: Configured/rated maximum limits of an energy node
type: object
additionalProperties: true
required:
- max_current_A
- max_phase_count
- nominal_voltage_V
- total_power_W
properties:
max_current_A:
description: Max current limit (per phase) in Ampere.
type: number
minimum: 0
max_phase_count:
description: Number of phases covered by this fuse
type: integer
minimum: 0
maximum: 3
nominal_voltage_V:
description: Nominal AC voltage between a single phase and neutral in Volt
type: number
minimum: 1
total_power_W:
description: >-
Total power limit in Watt.
For AC energy nodes, this usually is: nominal_voltage_V x max_current_A x max_phase_count
type: number
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,169 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:generic_error_raiser'
info:
title: 'EVerest API definition for raising and clearing generic errors'
version: 1.0.0
description: >-
API for EVerest API clients for raising and clearing generic errors.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: generic errors
servers:
default:
pathname: 'everest_api/1/generic_error_raiser/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
description: 'Direction: EVerest to Module'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Raise error example"
payload:
"type": "CommunicationFault"
"sub_type": "subtype"
"message": "message"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that a previously raised error is no longer active.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Clear error example"
payload:
type: "CommunicationFault"
sub_type: "subtype"
message: "message"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
ErrorEnum:
description: |
Type of error
- CommunicationFault: The communication to the hardware or underlying driver is lost or has errors.
- VendorError: Vendor specific error code. Will stop charging session.
- VendorWarning: Vendor specific error code. Charging may continue.
type: string
enum:
- CommunicationFault
- VendorError
- VendorWarning
Error:
description: >-
Error object with type, subtype and message.
type: object
additionalProperties: true
required:
- type
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
description: The subtype of the error
type: string
message:
description: Addition information about the error
type: string
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,316 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:isolation_monitor_API'
info:
title: 'EVerest API definition for isolation monitors'
version: 1.0.0
description: >-
API for EVerest API clients implementing isolation monitoring.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: isolation monitor
servers:
default:
pathname: 'everest_api/1/isolation_monitor/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_start:
address: 'e2m/start'
messages:
receive_start:
$ref: '#/components/messages/receive_start'
receive_stop:
address: 'e2m/stop'
messages:
receive_stop:
$ref: '#/components/messages/receive_stop'
receive_start_self_test:
address: 'e2m/start_self_test'
messages:
receive_start_self_test:
$ref: '#/components/messages/receive_start_self_test'
send_isolation_measurement:
address: 'm2e/isolation_measurement'
messages:
send_isolation_measurement:
$ref: '#/components/messages/send_isolation_measurement'
send_self_test_result:
address: 'm2e/self_test_result'
messages:
send_self_test_result:
$ref: '#/components/messages/send_self_test_result'
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_start:
title: 'Receive start command'
summary: 'Direction: EVerest to Module'
description: By receiving the start command the monitoring of the isolation status should be started. Measurement data should be sent in user dependent interval until the stop command is received.
action: receive
channel:
$ref: '#/channels/receive_start'
receive_stop:
title: 'Receive stop command'
summary: 'Direction: EVerest to Module'
description: By receiving the stop command the monitoring of the isolation status should be stopped. Measurement data must not be sent until the next start command is received.
action: receive
channel:
$ref: '#/channels/receive_stop'
receive_start_self_test:
title: 'Receive start self test command'
summary: 'Direction: EVerest to Module'
description: The EvseManager will enable a DC voltage to support the testing, but will not enable output relays such that there is no high voltage on the external plug. The "self_test_result" variable must be published once the self testing is done.
action: receive
channel:
$ref: '#/channels/receive_start_self_test'
send_isolation_measurement:
title: 'Send isolation measurement'
summary: 'Direction: Module to EVerest'
description: This operation is used to send a dataset of measured values. The isolation resistance (in Ohm) is required. The voltage is optional.
action: send
channel:
$ref: '#/channels/send_isolation_measurement'
send_self_test_result:
title: 'Send self test result'
summary: 'Direction: Module to EVerest'
description: This operation is used to send the result of the self test.
action: send
channel:
$ref: '#/channels/send_self_test_result'
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
description: 'Direction: Module to EVerest'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_start:
name: receive_start
title: 'Receive start command'
summary: Start recurring isolation measurements. The device should monitor the isolation status until stopped and publish the resistance data in regular intervals. The actual interval is device dependent.
contentType: application/json
payload: {}
receive_stop:
name: receive_stop
title: 'Receive stop command'
summary: Stop recurring measurements. The device should stop to monitor the isolation resistance and stop publishing the data.
contentType: application/json
payload: {}
receive_start_self_test:
name: receive_start_self_test
title: 'Receive start self test command'
summary: Start self test. EvseManager will enable a DC voltage to support the testing, but will not enable output relais such that there is no high voltage on the external plug.
contentType: application/json
payload:
$ref: '#/components/schemas/SelfTestVoltage'
send_isolation_measurement:
name: send_isolation_measurement
title: 'Send isolation monitor measurement'
summary: 'Isolation monitoring measurement results'
contentType: application/json
payload:
$ref: '#/components/schemas/IsolationMeasurement'
examples:
- summary: ""
payload:
"resistance_F_Ohm": 0
"voltage_V": 0
send_self_test_result:
name: send_self_test_result
title: 'Send self test result'
summary: 'Self test result'
contentType: application/json
payload:
$ref: '#/components/schemas/SelfTestResult'
examples:
- summary: ""
payload:
true
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: ""
payload:
"type": "CommunicationFault"
"sub_type": "string"
"message": "string"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that a previously raised error is no longer active.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: ""
payload:
"type": "CommunicationFault"
"sub_type": "string"
"message": "string"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: ""
payload:
true
schemas:
IsolationMeasurement:
description: Results of an isolation measurement
type: object
additionalProperties: true
required:
- resistance_F_Ohm
properties:
resistance_F_Ohm:
description: 'Isolation resistance between DC+/DC- and protective earth in Ohm'
type: number
voltage_V:
description: DC voltage between positive and negative terminal in Volt
type: number
voltage_to_earth_l1e_V:
description: DC voltage to earth on L1 in Volt
type: number
voltage_to_earth_l2e_V:
description: DC voltage to earth on L2 in Volt
type: number
SelfTestResult:
description: >-
Indicates the self test is done and publishes the result.
Set "true" for success, "false" for failure.
type: boolean
SelfTestVoltage:
type: number
description: "Voltage for the isolation monitor self test"
ErrorEnum:
description: |
Type of error
- DeviceFault: The IMD device is not fully functional anymore and cannot be used to monitor the isolation resistance.
- CommunicationFault: The communication to the hardware or underlying driver is lost or has errors.
- VendorError: Vendor specific error code. Will stop charging session.
- VendorWarning: Vendor specific error code. Charging may continue.
type: string
enum:
- DeviceFault
- CommunicationFault
- VendorError
- VendorWarning
Error:
description: >-
Errors for Isolation Monitor
Note that actual isolation faults should just be reported as resistance values,
EvseManager will interpret them according to the limits given in the norm and stop charging.
This is only to report device errors to indicate valid isolation resistance measurements etc
are no longer possible.
type: object
additionalProperties: true
required:
- type
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
description: The subtype of the error
type: string
message:
description: Addition information about the error
type: string
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,357 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:over_voltage_monitor'
info:
title: 'EVerest API definition for the implementation of over voltage monitoring'
version: 1.0.0
description: >-
API for EVerest for over voltage monitoring.
This EVerest API defines a fast over voltage monitoring device according
to IEC61851-23:2023 6.3.1.106.2 and 6.3.1.106.3 for DC charging.
6.3.1.106.2
An emergency shutdown needs to be triggered if the DC output voltage is above the limit of Table 103 for 9ms.
The actual shutdown needs to be handled in a lower layer outside of EVerest, but this interface sets the
correct voltage limit during the power transfer and stops monitoring at the end of the session.
After the actual emergency shutdown was already performed, report an MREC5OverVoltage error with severity set to high.
6.3.1.106.3
An error shutdown needs to be triggered if the DC output voltage is above the limits of Table 104:
- Present voltage > negotiated maximum for >400ms: Trigger error shutdown in <50ms.
- Present voltage > negotiated maximum for <400ms and >200ms: Allow energy transfer or error shutdown
- Present voltage > negotiated maximum for <200ms: Allow energy transfer
To trigger an error shutdown, raise the error MREC5OverVoltage with severity set to medium or low.
After raising the error, wait for 2.5s according to CC.3.4.2 and verify the CP signal has been switched to state X1 or F.
If not, trigger an emergency shutdown.
Once an MREC5OverVoltage error was raised, it shall only be cleared when the reset_over_voltage_error command is called.
All other errors shall be raised/cleared when they occur/are no longer active immediately.
The voltage_measurement_V should be published in regular intervals, e.g. 1 second. It is not
used to compare it with the overvoltage threshold setting in EVerest, that has to be done in the OVM device itself.
It will only be used to validate that the OVM and the IMD see the same voltage to ensure they are correctly wired to the same
charging port. If it is not available in hardware, do not publish the voltage_measurement_V at all.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: over voltage monitor
servers:
default:
pathname: 'everest_api/1/over_voltage_monitor/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_set_limits:
address: 'e2m/set_limits'
messages:
receive_set_limits:
$ref: '#/components/messages/receive_set_limits'
receive_start:
address: 'e2m/start'
messages:
receive_start:
$ref: '#/components/messages/receive_start'
receive_stop:
address: 'e2m/stop'
messages:
receive_stop:
$ref: '#/components/messages/receive_stop'
receive_reset_over_voltage_error:
address: 'e2m/reset_over_voltage_error'
messages:
reset_over_voltage_error:
$ref: '#/components/messages/receive_reset_over_voltage_error'
send_voltage_measurement_V:
address: 'm2e/voltage_measurement_V'
messages:
send_voltage_measurement_V:
$ref: '#/components/messages/send_voltage_measurement_V'
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_set_limits:
title: Receive set over voltage limits command
action: receive
channel:
$ref: '#/channels/receive_set_limits'
description: 'Direction: EVerest to Module'
receive_start:
title: 'Receive start over voltage monitoring command'
action: receive
channel:
$ref: '#/channels/receive_start'
description: 'Direction: EVerest to Module'
receive_stop:
title: 'Receive stop over voltage monitoring command'
action: receive
channel:
$ref: '#/channels/receive_stop'
description: 'Direction: EVerest to Module'
receive_reset_over_voltage_error:
title: 'Receive reset command'
action: receive
channel:
$ref: '#/channels/receive_reset_over_voltage_error'
description: 'Direction: EVerest to Module'
send_voltage_measurement_V:
title: 'Send measured voltage in V'
action: send
channel:
$ref: '#/channels/send_voltage_measurement_V'
description: 'Direction: Module to EVerest'
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
description: 'Direction: EVerest to Module'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_set_limits:
name: receive_set_limits
title: Receive set overvoltage limits.
summary: >-
It will be called any time the voltage limits change, independent of
whether the monitoring is currently active or not.
The values shall be cached, and the last value received shall be used as threshold while monitoring is active.
contentType: application/json
payload:
$ref: '#/components/schemas/OverVoltageLimits'
examples:
- summary: ""
payload:
{
"emergency_limit_V": 600,
"error_limit_V": 500
}
receive_start:
name: receive_start
title: Receive start over voltage monitoring command
summary: >-
Start monitoring. Called once at the beginning of power transfer.
Use the last limits set by set_limits and make sure to update them when set_limits is called while monitoring is active.
Trigger shutdowns and raise errors as needed.
receive_stop:
name: receive_stop
title: Receive stop over voltage monitoring command
summary: >-
Stop monitoring. Called once at the end of power transfer.
Do not raise any over voltage errors or trigger any shutdowns in this mode.
receive_reset_over_voltage_error:
name: receive_reset_over_voltage_error
title: Receive reset command
summary: >-
Resets the detection logic to allow for new charging session after an over voltage error occured.
This shall clear the over voltage error.
If monitoring is still active, it shall be stopped.
send_voltage_measurement_V:
name: send_voltage_measurement_V
title: Send voltage measurement
summary: Send the current voltage measurement to EVerest
contentType: application/json
payload:
$ref: '#/components/schemas/VoltageMeasurementV'
examples:
- summary: ""
payload: 500
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Raise error example"
payload:
"type": "MREC5OverVoltage"
"sub_type": "subtype"
"message": "message"
"severity": "High"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that a previously raised error is no longer active.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Clear error example"
payload:
"type": "CommunicationFault"
"sub_type": "subtype"
"message": "message"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
OverVoltageLimits:
type: object
additionalProperties: true
required:
- emergency_limit_V
- error_limit_V
properties:
emergency_limit_V:
description: >-
Specifies the over voltage threshold [V] for emergency shutdown
(based on IEC61851-23:2023 Table 103 and IEC61851-23-3:(DRAFT 2025) Table 202)
An emergency shutdown shall be triggered if the DC output voltage is higher
than this value.
type: number
error_limit_V:
description: >-
Specifies the over voltage threshold [V] for error shutdown (for use with IEC61851-23:2023 Table 104).
An error shutdown shall be triggered if the DC output voltage is higher
than this value. The OVM shall trigger an emergency shutdown if error shutdown does not work properly
(after 2.5s, see CC.3.4.2).
type: number
VoltageMeasurementV:
description: >-
The voltage measurement should be published in regular intervals,
e.g. 1 second. It is not used to compare it with the overvoltage threshold
setting in EVerest, that has to be done in the OVM device itself.
It will only used to validate that the OVM and the IMD see the same voltage
to ensure they are correctly wired to the same charging port.
If it is not available in hardware, do not publish the voltage_measurement_V at all.
type: number
Error:
description: >-
Errors for Over Voltage Monitor
Note that the actual shutdown needs to be performed by lower layers outside of EVerest.
In the event of a shutdown, this error needs to be raised to indicate the nature of the shutdown
to EVerest after the fact.
type: object
additionalProperties: true
required:
- type
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
description: The subtype of the error
type: string
severity:
description: The severity of the error
$ref: '#/components/schemas/ErrorSeverityEnum'
message:
description: Addition information about the error
type: string
ErrorEnum:
description: |
Type of error
- MREC5OverVoltage: The output voltage was above IEC61851-23:2023 6.3.1.106.2 Table 103 limits for more than 9ms (severity high) or above Table 104 (medium or low severity).
- DeviceFault: The over voltage monitoring device is no longer functional.
- CommunicationFault: The communication to the hardware or underlying driver is lost or has errors.
- VendorError: Vendor specific error code. Will stop charging session.
- VendorWarning: Vendor specific error code. Charging may continue.
type: string
enum:
- MREC5OverVoltage
- DeviceFault
- CommunicationFault
- VendorError
- VendorWarning
ErrorSeverityEnum:
description: >-
Severity of the error. For MREC5OverVoltage report with severity 'high' after an emergency shutdown
and severity 'medium' or 'low' to trigger an error shutdown
type: string
enum:
- Low
- Medium
- High
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,503 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:power_supply_DC_API'
info:
title: 'EVerest API definition for DC power supplies'
version: 1.0.0
description: >-
API for EVerest API clients implementing DC power supplies.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: DC power supply
servers:
default:
pathname: 'everest_api/1/power_supply_DC/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_mode:
address: 'e2m/mode'
messages:
receive_mode:
$ref: '#/components/messages/receive_mode'
receive_export_voltage_current:
address: 'e2m/export_voltage_current'
messages:
receive_export_voltage_current:
$ref: '#/components/messages/receive_export_voltage_current'
receive_import_voltage_current:
address: 'e2m/import_voltage_current'
messages:
receive_import_voltage_current:
$ref: '#/components/messages/receive_import_voltage_current'
send_voltage_current:
address: 'm2e/voltage_current'
messages:
send_voltage_current:
$ref: '#/components/messages/send_voltage_current'
send_mode:
address: 'm2e/mode'
messages:
send_mode:
$ref: '#/components/messages/send_mode'
send_capabilities:
address: 'm2e/capabilities'
messages:
send_capabilities:
$ref: '#/components/messages/send_capabilities'
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_mode:
title: 'Receive mode'
action: receive
channel:
$ref: '#/channels/receive_mode'
description: 'Direction: EVerest to Module'
receive_export_voltage_current:
title: 'Receive export voltage current'
action: receive
channel:
$ref: '#/channels/receive_export_voltage_current'
description: 'Direction: EVerest to Module'
receive_import_voltage_current:
title: 'Receive import voltage current'
action: receive
channel:
$ref: '#/channels/receive_import_voltage_current'
description: 'Direction: EVerest to Module'
send_voltage_current:
title: 'Send voltage current'
action: send
channel:
$ref: '#/channels/send_voltage_current'
description: 'Direction: Module to EVerest'
send_mode:
title: 'Send mode'
action: send
channel:
$ref: '#/channels/send_mode'
description: 'Direction: Module to EVerest'
send_capabilities:
title: 'Send current capabilities'
action: send
channel:
$ref: '#/channels/send_capabilities'
description: 'Direction: Module to EVerest'
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
description: 'Direction: EVerest to Module'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_mode:
name: receive_mode
title: 'Receive mode'
summary: 'Receive the requested mode for DC power supply and the current charging phase.'
contentType: application/json
payload:
$ref: '#/components/schemas/ModeRequest'
receive_export_voltage_current:
name: receive_export_voltage_current
title: 'Receive export voltage / current'
summary: 'Receive the requested voltage and current when exporting energy to the car.'
contentType: application/json
payload:
$ref: '#/components/schemas/VoltageCurrent'
receive_import_voltage_current:
name: receive_import_voltage_current
title: 'Receive import voltage / current'
summary: 'Receive the requested voltage and current when importing energy from the car.'
contentType: application/json
payload:
$ref: '#/components/schemas/VoltageCurrent'
send_voltage_current:
name: send_voltage_current
title: 'Send voltage / current'
summary: 'Current value of voltage (V) and current (A).'
contentType: application/json
payload:
$ref: '#/components/schemas/VoltageCurrent'
examples: # Define examples here
- summary: "Example 1 of sending voltage and current."
payload:
voltage_V: 230.0
current_A: 15.0
send_mode:
name: send_mode
title: 'Send mode'
summary: 'Current mode of DC power supply.'
contentType: application/json
payload:
$ref: '#/components/schemas/Mode'
examples:
- summary: "Example of sending mode."
payload:
"Export"
send_capabilities:
name: send_capabilities
title: 'Send current capabilities'
summary: 'Current capabilities of the DC power supply. Non-nominal values can be used to update the limits during runtime, e.g. for derating.'
contentType: application/json
payload:
$ref: '#/components/schemas/Capabilities'
examples:
- summary: "Capabilities example"
payload:
bidirectional: true
current_regulation_tolerance_A: 0
peak_current_ripple_A: 0
max_export_voltage_V: 0
nominal_max_export_voltage_V: 0
min_export_voltage_V: 0
nominal_min_export_voltage_V: 0
max_export_current_A: 0
nominal_max_export_current_A: 0
min_export_current_A: 0
nominal_min_export_current_A: 0
max_import_voltage_V: 0
nominal_max_import_voltage_V: 0
min_import_voltage_V: 0
nominal_min_import_voltage_V: 0
max_import_current_A: 0
nominal_max_import_current_A: 0
min_import_current_A: 0
nominal_min_import_current_A: 0
max_export_power_W: 0
nominal_max_export_power_W: 0
max_import_power_W: 0
nominal_max_import_power_W: 0
conversion_efficiency_import: 1
conversion_efficiency_export: 1
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Raise error example"
payload:
"type": "CommunicationFault"
"sub_type": "string"
"message": "string"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that a previously raised error is no longer active.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Raise error example"
payload:
"type": "CommunicationFault"
"sub_type": "string"
"message": "string"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
Capabilities:
type: object
additionalProperties: true
required:
- bidirectional
- max_export_voltage_V
- min_export_voltage_V
- max_export_current_A
- min_export_current_A
- max_export_power_W
- current_regulation_tolerance_A
- peak_current_ripple_A
properties:
bidirectional:
description: |
- true: support bidirectional energy flow
- false: support only Export mode (output)
type: boolean
current_regulation_tolerance_A:
description: Absolute magnitude of the regulation tolerance. Measured in Ampere.
type: number
peak_current_ripple_A:
description: >
Peak-to-peak magnitude of the current ripple measured in Ampere.
This value is transmitted to the vehicle and can potentially influence the charging speed.
type: number
max_export_voltage_V:
description: Maximum voltage that the power supply can output on the DC side. Measured in Volt.
type: number
nominal_max_export_voltage_V:
description: Nominal maximum voltage that the power supply outputs in Volt.
type: number
min_export_voltage_V:
description: Minimum voltage that the power supply can output on the DC side. Measured in Volt.
type: number
nominal_min_export_voltage_V:
description: Nominal minimum voltage that the power supply outputs in Volt.
type: number
max_export_current_A:
description: Maximum current that the power supply can output on the DC side. Measured in Ampere.
type: number
nominal_max_export_current_A:
description: Nominal maximum current that the power supply can output in Ampere.
type: number
min_export_current_A:
description: Minimum current limit on the DC side that the power supply can set. Measured in Ampere.
type: number
nominal_min_export_current_A:
description: Nominal minimum current limit that the power supply can set in Ampere.
type: number
max_import_voltage_V:
description: >-
Maximum voltage on the DC side that the power supply supports to import energy.
Measured in Volt.
type: number
nominal_max_import_voltage_V:
description: >-
Nominal maximum voltage on the DC side that the power supply supports to import energy.
Measured in Volt.
type: number
min_import_voltage_V:
description: >
Minimum voltage on the DC side that the power supply requires to import energy.
Measured in Volt.
type: number
nominal_min_import_voltage_V:
description: >
Nominal minimum voltage on the DC side that the power supply requires to import energy.
Measured in Volt.
type: number
max_import_current_A:
description: Maximum current that the power supply can sink on the DC side. Measuered in Ampere.
type: number
nominal_max_import_current_A:
description: Nominal maximum current that the power supply can output in Ampere.
type: number
min_import_current_A:
description: >
Minimum limit for sinking current on the DC side that the power supply can set.
Measured in Ampere.
type: number
nominal_min_import_current_A:
description: Nominal minimum current limit that the power supply can set in Ampere.
type: number
max_export_power_W:
description: Maximum export power on the DC side that the power supply can source. Measured in Watt.
type: number
nominal_max_export_power_W:
description: Nominal maximum export power that the power supply can output in Watt.
type: number
max_import_power_W:
description: Maximum import power on the DC side that the power supply can sink. Measured in Watt.
type: number
nominal_max_import_power_W:
description: Nominal maximum import power that the power supply can sink in Watt.
type: number
conversion_efficiency_import:
description: Typical import efficiency used for energy management
type: number
minimum: 0.0
maximum: 1.0
conversion_efficiency_export:
description: Typical export efficiency used for energy management
type: number
minimum: 0.0
maximum: 1.0
ChargingPhase:
description: |
Charging phase of the current mode change.
- Other: Used for e.g. switching it off or any other internal testing not related to real charging.
- CableCheck
- PreCharge
- Charging
type: string
enum:
- "Other"
- "CableCheck"
- "PreCharge"
- "Charging"
Mode:
description: |
Mode of the DC power supply
- Off: Power Supply switched off
- Export: Charge the vehicle
- Import: V2G etc
- Fault: Power supply is in error state
type: string
enum:
- Off
- Export
- Import
- Fault
ModeRequest:
description: >-
Requested Mode and the current charging state
type: object
additionalProperties: true
properties:
mode:
$ref: '#/components/schemas/Mode'
charging_phase:
$ref: '#/components/schemas/ChargingPhase'
VoltageCurrent:
type: object
additionalProperties: true
required:
- voltage_V
- current_A
properties:
voltage_V:
description: Voltage in volt
type: number
current_A:
description: Electric current in amp
type: number
ErrorEnum:
description: |
Type of error
- CommunicationFault: The communication to the hardware or underlying driver is lost or has errors.
- HardwareFault: The hardware reported a fault
- OverTemperature: The hardware shut down because of over temperature. This should not be used if the power supply can handle temperature reduction by reducing output power, in this case update the capabilities as needed.
- UnderTemperature: The hardware cannot operate because it is too cold
- UnderVoltageAC: The AC input voltage is too low
- OverVoltageAC: The AC input voltage is too high
- UnderVoltageDC: The DC output voltage is too low
- OverVoltageDC: The DC output voltage is too high
- OverCurrentAC: The AC input current is too high
- OverCurrentDC: The DC output current it too high
- VendorError: Vendor specific error code. Will stop charging session.
- VendorWarning: Vendor specific error code. Charging may continue.
type: string
enum:
- CommunicationFault
- HardwareFault
- OverTemperature
- UnderTemperature
- UnderVoltageAC
- OverVoltageAC
- UnderVoltageDC
- OverVoltageDC
- OverCurrentAC
- OverCurrentDC
- VendorError
- VendorWarning
Error:
description: >-
Errors for the power_supply_DC interface.
Except for VendorWarning, all error codes will stop the charging session.
During all errors, follow the commands for setMode and setVoltageCurrent from EvseManager.
If they cannot be sent to the hardware, cache the last values received.
Once the PSU is back on-line (e.g. after a CommunicationFault), set the last mode and voltage/current
values and only after that clear the error.
type: object
additionalProperties: true
required:
- type
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
description: The subtype of the error
type: string
message:
description: Addition information about the error
type: string
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,898 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:powermeter_API'
info:
title: 'EVerest API definition for powermeters'
version: 1.0.0
description: >-
API for EVerest API clients implementing powermeter.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: powermeter
servers:
default:
pathname: 'everest_api/1/powermeter/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_request_start_transaction:
address: 'e2m/start_transaction'
messages:
receive_request_start_transaction:
$ref: '#/components/messages/receive_request_start_transaction'
send_reply_start_transaction:
address: null
description: Dynamically defined channel. Used to reply to a start_transaction message.
messages:
send_reply_start_transaction:
$ref: '#/components/messages/send_reply_start_transaction'
receive_request_stop_transaction:
address: 'e2m/stop_transaction'
messages:
receive_request_stop_transaction:
$ref: '#/components/messages/receive_request_stop_transaction'
send_reply_stop_transaction:
title: 'Reply stop transaction'
address: null
description: Dynamically defined channel. Used to reply to a stop_transaction message.
messages:
send_reply_stop_transaction:
$ref: '#/components/messages/send_reply_stop_transaction'
send_powermeter_values:
address: 'm2e/powermeter_values'
messages:
send_powermeter_values:
$ref: '#/components/messages/send_powermeter_values'
send_public_key_ocmf:
address: 'm2e/public_key_ocmf'
messages:
send_public_key_ocmf:
$ref: '#/components/messages/send_public_key_ocmf'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_request_start_transaction:
title: 'Request start transaction'
summary: Request to reply.
action: receive
description: This operation is used to handle the request to start a new transaction on the powermeter (for signed metering according to German Eichrecht).
channel:
$ref: '#/channels/receive_request_start_transaction'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_start_transaction'
send_reply_start_transaction:
title: 'Send reply for start transaction'
summary: Request to reply.
description: This operation is used to handle the request to start a new transaction on the powermeter (for signed metering according to German Eichrecht).
action: send
channel:
$ref: '#/channels/send_reply_start_transaction'
receive_request_stop_transaction:
title: 'Request stop transaction'
summary: Request to reply.
description: This operation is used to handle the request to stop the transaction on the powermeter and ask for the signed metering information in a reply.
action: receive
channel:
$ref: '#/channels/receive_request_stop_transaction'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_stop_transaction'
send_reply_stop_transaction:
title: 'Send reply for stop transaction'
summary: Request to reply.
description: This operation is used to handle the request to stop the transaction on the powermeter and ask for the signed metering information in a reply.
action: send
channel:
$ref: '#/channels/send_reply_stop_transaction'
send_powermeter_values:
title: 'Send powermeter values'
summary: 'Direction: Module to EVerest'
description: This operation is used to send a dataset of measured values. The timestamp and the imported energy (in Wh) are required. Other values are optional.
action: send
channel:
$ref: '#/channels/send_powermeter_values'
send_public_key_ocmf:
title: 'Send the public key'
action: send
channel:
$ref: '#/channels/send_public_key_ocmf'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_request_start_transaction:
name: start_transaction_req
title: 'Start transaction request message'
summary: The start transaction request message contains the required input parameter for starting an OCMF transaction. These values will be included in the signed OCMF packet of the stop transaction reply.
contentType: application/json
payload:
type: object
additionalProperties: true
required:
- payload
properties:
headers:
type: object
properties:
replyTo:
type: string
description: 'The topic to which to send the reply. If this information is missing, the command will still be accepted, but no response will be sent.'
payload:
$ref: '#/components/schemas/StartTransactionRequest'
send_reply_start_transaction:
name: start_transaction_reply
title: 'Start transaction reply message'
summary: The start transaction reply message contains the request status. It indicates whether the transaction could be started successfully or not. Further values may be added to the message depending on the value of the status.
contentType: application/json
payload:
$ref: '#/components/schemas/StartTransactionReply'
examples:
- summary: ""
payload:
status: "OK"
error: "string"
transaction_min_stop_time: "2019-08-24T14:15:22Z"
transaction_max_stop_time: "2019-08-24T14:15:22Z"
receive_request_stop_transaction:
name: stop_transaction_req
title: 'Stop transaction request message'
summary: The stop transaction request message contains the transaction id to stop the corresponding transaction.
contentType: application/json
payload:
type: object
additionalProperties: true
required:
- payload
properties:
headers:
type: object
properties:
replyTo:
type: string
description: 'The topic to which to send the reply. If this information is missing, the command will still be accepted, but no response will be sent.'
payload:
type: object
additionalProperties: true
required:
- transaction_id
properties:
transaction_id:
type: string
description: 'Transaction id received in start transaction request.'
send_reply_stop_transaction:
name: stop_transaction_reply
title: 'Stop transaction reply message'
summary: The stop transaction reply message contains the request status. It indicates whether the transaction could be stopped successfully or not. If successful the signed meter value report must be provided in this message too.
contentType: application/json
payload:
$ref: '#/components/schemas/StopTransactionReply'
examples:
- summary: ""
payload:
status: OK
signed_meter_value:
signed_meter_data: string
signing_method: string
encoding_method: string
public_key: string
timestamp: '2019-08-24T14:15:22Z'
error: string
send_powermeter_values:
name: send_powermeter_values
title: 'Send powermeter values'
summary: The send powermeter values message contains the measured dataset. It requires a timestamp and the imported energy in Wh at least. Other values are optional.
contentType: application/json
payload:
$ref: '#/components/schemas/Powermeter'
examples:
- summary: ""
payload:
current_A:
L1: 0
L2: 0
L3: 0
N: 0
energy_Wh_import:
L1: 0
L2: 0
L3: 0
total: 0
frequency_Hz:
L1: 50.099517822265625
L2: 50.099517822265625
L3: 50.099517822265625
meter_id: THE_POWERMETER
phase_seq_error: false
power_W:
L1: 0
L2: 0
L3: 0
total: 0
timestamp: '2024-09-27T07:21:14.127Z'
voltage_V:
L1: 228.47914123535156
L2: 228.47914123535156
L3: 228.47914123535156
send_public_key_ocmf:
name: send_public_key_ocmf
title: 'Send the public key'
summary: Provide the public key used to sign the OCMF data
contentType: application/json
payload:
$ref: '#/components/schemas/SendPublicKeyOCMF'
examples:
- summary: ""
payload:
"THE_KEY"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: ""
payload:
true
schemas:
OCMFIdentificationFlags:
description: |
- RFID_NONE: No assignment via RFID
- RFID_PLAIN: Assignment via external RFID card reader
- RFID_RELATED: Assignment via protected RFID card reader
- RFID_PSK: A previously known shared key (pre-shared key) was used, e.g. with a secured RFID card.
- OCPP_NONE: No user assignment by OCPP
- OCPP_RS: Assignment by OCPP RemoteStart method
- OCPP_AUTH: Assignment by OCPP Authorize method
- OCPP_RS_TLS: Assignment by OCPP RemoteStart method, obtained via a secured TLS connection.
- OCPP_AUTH_TLS: Assignment by OCPP Authorize method, obtained via a secured TLS connection.
- OCPP_CACHE: Assignment by authorization cache of OCPP
- OCPP_WHITELIST: Assignment by whitelist from OCPP
- OCPP_CERTIFIED: A certificate of the backend was used which certifies the user mapping.
- ISO15118_NONE: no user assignment by ISO 15118
- ISO15118_PNC: Plug & Charge was used
- PLMN_NONE: no user assignment
- PLMN_RING: call
- PLMN_SMS: short message
type: string
enum:
- RFID_NONE
- RFID_PLAIN
- RFID_RELATED
- RFID_PSK
- OCPP_NONE
- OCPP_RS
- OCPP_AUTH
- OCPP_RS_TLS
- OCPP_AUTH_TLS
- OCPP_CACHE
- OCPP_WHITELIST
- OCPP_CERTIFIED
- ISO15118_NONE
- ISO15118_PNC
- PLMN_NONE
- PLMN_RING
- PLMN_SMS
OCMFIdentificationLevel:
description: |
- NONE: There is no user assignment. The other data for user assignment have no significance.
- HEARSAY: The assignment is unsecured; e.g. by reading an RFID UID.
- TRUSTED: The mapping can be trusted to some extent, but there is no absolute reliability. Example: Authorization by backend.
- VERIFIED: The assignment has been verified by the signature component and special measures.
- CERTIFIED: The assignment was verified by the signature component using a cryptographic signature that certifies the assignment.
- SECURE: The mapping was established by a secure feature (e.g. secure RFID card, ISO 15118 with plug and charge, etc.).
- MISMATCH: Error; UIDs do not match.
- INVALID: Error; certificate not correct (check negative).
- OUTDATED: Error; referenced trust certificate expired.
- UNKNOWN: Certificate could not be successfully verified (no matching trust certificate found).
type: string
enum:
- NONE
- HEARSAY
- TRUSTED
- VERIFIED
- CERTIFIED
- SECURE
- MISMATCH
- INVALID
- OUTDATED
- UNKNOWN
OCMFIdentificationType:
description: |
- NONE: No assignment available
- DENIED: Assignment currently not available (due to two-factor authorization)
- UNDEFINED: Type not specified
- ISO14443: UID of an RFID card according to ISO 14443. Represented as 4 or 7 bytes in hexadecimal notation.
- ISO15693: UID of an RFID card according to ISO 15693. Represented as 8 bytes in hexadecimal notation.
- EMAID: Electro-Mobility-Account-ID according to ISO/IEC 15118 (string with length 14 or 15)
- EVCCID: ID of an electric vehicle according to ISO/IEC 15118 (maximum length 6 characters)
- EVCOID: EV Contract ID according to DIN 91286.
- ISO7812: Identification card format according to ISO/IEC 7812 (credit and bank cards, etc.)
- CARD_TXN_NR: Card transaction number (CardTxNbr) for a payment with credit or bank card used in a terminal at the charging point.
- CENTRAL: Centrally generated ID. No exact format defined, can be e.g. a UUID. (OCPP 2.0)
- CENTRAL_1: Centrally generated ID, e.g. by start via SMS. No exact format defined. (until OCPP 1.6)
- CENTRAL_2: Centrally generated ID, e.g. by operator start. No exact format defined. (until OCPP 1.6)
- LOCAL: Locally generated ID. No exact format defined, might be e.g. a UUID. (OCPP 2.0)
- LOCAL_1: Locally generated ID, e.g. ID generated internally by the charge point. No exact format defined. (until OCPP 1.6)
- LOCAL_2: Locally generated ID, for other cases. No exact format defined. (until OCPP 1.6)
- PHONE_NUMBER: International phone number with leading "+".
- KEY_CODE: User-related private key code. No exact format defined.
type: string
enum:
- NONE
- DENIED
- UNDEFINED
- ISO14443
- ISO15693
- EMAID
- EVCCID
- EVCOID
- ISO7812
- CARD_TXN_NR
- CENTRAL
- CENTRAL_1
- CENTRAL_2
- LOCAL
- LOCAL_1
- LOCAL_2
- PHONE_NUMBER
- KEY_CODE
OCMFUserIdentificationStatus:
description: |
General status for user assignment
- ASSIGNED: user successfully assigned
- NOT_ASSIGNED: user not assigned
type: string
enum:
- ASSIGNED
- NOT_ASSIGNED
Powermeter:
description: Measured dataset (AC or DC)
type: object
additionalProperties: true
required:
- timestamp
- energy_Wh_import
properties:
timestamp:
description: Timestamp of measurement
type: string
format: date-time
meter_id:
description: A (user defined) meter id (e.g. id printed on the case)
type: string
phase_seq_error:
description: "AC only: true for 3 phase rotation error (ccw)"
type: boolean
energy_Wh_import:
description: Imported energy in Wh (from grid)
type: object
$ref: '#/components/schemas/units/types/Energy'
energy_Wh_export:
description: Exported energy in Wh (to grid)
type: object
$ref: '#/components/schemas/units/types/Energy'
power_W:
description:
Instantaneous power in Watt. Negative values are exported, positive
values imported Energy.
type: object
$ref: '#/components/schemas/units/types/Power'
voltage_V:
description: Voltage in Volts
type: object
$ref: '#/components/schemas/units/types/Voltage'
VAR:
description: Reactive power VAR
type: object
$ref: '#/components/schemas/units/types/ReactivePower'
current_A:
description: Current in ampere
type: object
$ref: '#/components/schemas/units/types/Current'
frequency_Hz:
description: Grid frequency in Hertz
type: object
$ref: '#/components/schemas/units/types/Frequency'
# Extension for individual signed meter values
energy_Wh_import_signed:
description: Imported energy in Wh (from grid)
type: object
$ref: '#/components/schemas/units_signed/types/Energy'
energy_Wh_export_signed:
description: Exported energy in Wh (to grid)
type: object
$ref: '#/components/schemas/units_signed/types/Energy'
power_W_signed:
description:
Instantaneous power in Watt. Negative values are exported, positive
values imported Energy.
type: object
$ref: '#/components/schemas/units_signed/types/Power'
voltage_V_signed:
description: Voltage in Volts
type: object
$ref: '#/components/schemas/units_signed/types/Voltage'
VAR_signed:
description: Reactive power VAR
type: object
$ref: '#/components/schemas/units_signed/types/ReactivePower'
current_A_signed:
description: Current in ampere
type: object
$ref: '#/components/schemas/units_signed/types/Current'
frequency_Hz_signed:
description: Grid frequency in Hertz
type: object
$ref: '#/components/schemas/units_signed/types/Frequency'
signed_meter_value:
description: >-
Signed collection of instantaneous meter values if supported by the meter.
This is intended for meters that only support signing a collection of meter values.
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
temperatures:
description: >-
An array of temperature sensors expressed in C, their definition and meaning is product specific
type: array
items:
type: object
$ref: '#/components/schemas/Temperature'
SendPublicKeyOCMF:
type: string
description: "The public key as string used to sign the OCMF data"
StartTransactionReply:
description: Return value when a transaction is started.
type: object
additionalProperties: true
required:
- status
properties:
status:
description: Response status that indicates whether the transaction start request could successfully be performed.
$ref: '#/components/schemas/TransactionStatus'
error:
description: If status is not OK, a verbose error message.
type: string
transaction_min_stop_time:
description: Earliest point in time the started transaction can be stopped again (if a minimum duration is required by the meter); yields a RFC3339 timestamp.
type: string
format: date-time
transaction_max_stop_time:
description: Deadline for the transaction to be stopped again (if a minimum duration is required by the meter); yields a RFC3339 timestamp.
type: string
format: date-time
StartTransactionRequest:
type: object
additionalProperties: true
required:
- evse_id
- transaction_id
- identification_status
- identification_type
- identification_flags
properties:
evse_id:
description: Id of this EVSE
type: string
transaction_id:
description: OCPP transaction UUID
type: string
identification_status:
description: >-
OCMF Identification Status (IS): General status for user assignment
type: string
$ref: '#/components/schemas/OCMFUserIdentificationStatus'
identification_level:
description: >-
OCMF Identification Level (IL): Encoded overall status of the user assignment
type: string
$ref: '#/components/schemas/OCMFIdentificationLevel'
identification_flags:
description: >-
OCMF Identification Flags (IF): Detailed statements about the user assignment, represented by one or more identifiers
type: array
items:
type: string
$ref: '#/components/schemas/OCMFIdentificationFlags'
minItems: 0
maxItems: 4
identification_type:
description: >-
OCMF Identification Type (IT): Type of identification data
type: string
$ref: '#/components/schemas/OCMFIdentificationType'
identification_data:
description: >-
OCMF Identification Data (ID): The actual identification data e.g. a hex-coded UID according to ISO 14443.
type: string
tariff_text:
description: >-
A textual description used to identify a unique tariff.
This field is intended for the tariff designation in "Direct Payment" use case.
type: string
minLength: 0
maxLength: 250
StopTransactionReply:
description: Report returned when a signed transaction is requested to stop. If successful, includes the signed meter value object. In case of an error, an additional error message can be provided.
type: object
additionalProperties: true
required:
- status
properties:
status:
description: Response status that indicates whether the transaction stop request could successfully be performed.
$ref: '#/components/schemas/TransactionStatus'
start_signed_meter_value:
description: The signed meter value report for start of transaction. Needs to be filled if meter provides separate values for start and stop.
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
signed_meter_value:
description: The signed meter value report of the stopped transaction. Must be provided if status is OK.
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
error:
description: If status is not OK, a verbose error message.
type: string
Temperature:
description: Temperature sensor expressed in C and a description (vendor specific) allowing to identify its purpose or meaning
type: object
additionalProperties: true
required:
- temperature
properties:
temperature:
description: The temperature of the sensor measured in C
type: number
identification:
description: A (vendor specific) ID if required
type: string
location:
description: Location of the measurement
type: string
TransactionStatus:
description: Status of a start or stop transaction - used in start or stop transaction reply.
type: string
enum:
- OK
- NOT_SUPPORTED
- UNEXPECTED_ERROR
units:
description: Unit types
types:
Current:
description: Current in Ampere
type: object
additionalProperties: true
properties:
DC:
description: DC current
type: number
L1:
description: AC L1 value only
type: number
L2:
description: AC L2 value only
type: number
L3:
description: AC L3 value only
type: number
N:
description: AC Neutral value only
type: number
Voltage:
description: Voltage in Volt
type: object
additionalProperties: true
properties:
DC:
description: DC voltage
type: number
L1:
description: AC L1 value only
type: number
L2:
description: AC L2 value only
type: number
L3:
description: AC L3 value only
type: number
Frequency:
description: "AC only: Frequency in Hertz"
type: object
additionalProperties: true
required:
- L1
properties:
L1:
description: AC L1 value
type: number
L2:
description: AC L2 value
type: number
L3:
description: AC L3 value
type: number
Power:
description:
Instantaneous power in Watt. Negative values are exported, positive
values imported Energy.
type: object
additionalProperties: true
required:
- total
properties:
total:
description: DC / AC Sum value
type: number
L1:
description: AC L1 value only
type: number
L2:
description: AC L2 value only
type: number
L3:
description: AC L3 value only
type: number
Energy:
description: Energy in Wh.
type: object
additionalProperties: true
required:
- total
properties:
total:
description: DC / AC Sum value (which is relevant for billing)
type: number
L1:
description: AC L1 value only
type: number
L2:
description: AC L2 value only
type: number
L3:
description: AC L3 value only
type: number
ReactivePower:
description: Reactive power VAR
type: object
additionalProperties: true
required:
- total
properties:
total:
description: VAR total
type: number
L1:
description: VAR phase A
type: number
L2:
description: VAR phase B
type: number
L3:
description: VAR phase C
type: number
units_signed:
description: Unit types signed
types:
SignedMeterValue:
description: Representation of a signed meter value
type: object
additionalProperties: true
required:
- signed_meter_data
- signing_method
- encoding_method
properties:
signed_meter_data:
description: Signed meter data (encoded in a string representation with eg. Base64)
type: string
signing_method:
description: Method used to create the signature
type: string
encoding_method:
description: Method used to encode the meter values before signing them
type: string
public_key:
description: Public key (encoded in a string representation with eg. Base64)
type: string
timestamp:
description: Timestamp of measurement
type: string
format: date-time
Current:
description: Current in Ampere
type: object
additionalProperties: true
properties:
DC:
description: DC current
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L1:
description: AC L1 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L2:
description: AC L2 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L3:
description: AC L3 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
N:
description: AC Neutral value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
Voltage:
description: Voltage in Volt
type: object
additionalProperties: true
properties:
DC:
description: DC voltage
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L1:
description: AC L1 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L2:
description: AC L2 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L3:
description: AC L3 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
Frequency:
description: "AC only: Frequency in Hertz"
type: object
additionalProperties: true
properties:
L1:
description: AC L1 value
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L2:
description: AC L2 value
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L3:
description: AC L3 value
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
Power:
description:
Instantaneous power in Watt. Negative values are exported, positive
values imported Energy.
type: object
additionalProperties: true
properties:
total:
description: DC / AC Sum value
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L1:
description: AC L1 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L2:
description: AC L2 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L3:
description: AC L3 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
Energy:
description: Energy in Wh.
type: object
additionalProperties: true
properties:
total:
description: DC / AC Sum value (which is relevant for billing)
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L1:
description: AC L1 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L2:
description: AC L2 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L3:
description: AC L3 value only
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
ReactivePower:
description: Reactive power VAR
type: object
additionalProperties: true
properties:
total:
description: VAR total
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L1:
description: VAR phase A
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L2:
description: VAR phase B
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
L3:
description: VAR phase C
type: object
$ref: '#/components/schemas/units_signed/types/SignedMeterValue'
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,829 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:session_cost_API'
info:
title: 'EVerest API definition for session cost'
version: 1.0.0
description: >-
API for EVerest API clients implementing session cost.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: SessionCost
servers:
default:
pathname: 'everest_api/1/session_cost/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
send_tariff_message:
address: 'm2e/tariff_message'
messages:
tariff_message:
$ref: '#/components/messages/send_tariff_message'
send_session_cost:
address: 'm2e/session_cost'
messages:
session_cost:
$ref: '#/components/messages/send_session_cost'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
send_tariff_message:
title: 'Send tariff message'
action: send
channel:
$ref: '#/channels/send_tariff_message'
description: 'Direction: Module to EVerest'
send_session_cost:
title: 'Send session cost'
action: send
channel:
$ref: '#/channels/send_session_cost'
description: 'Direction: Module to EVerest'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
send_tariff_message:
name: send_tariff_message
title: 'Send tariff message'
summary: 'The tariff message'
contentType: application/json
payload:
$ref: '#/components/schemas/TariffMessage'
send_session_cost:
name: send_session_cost
title: 'Send session cost'
summary: 'The session cost record'
contentType: application/json
payload:
$ref: '#/components/schemas/SessionCost'
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
ChargingPriceComponent:
description: Charging price for a category
type: object
additionalProperties: true
properties:
category:
description: Component type for this charging price
type: string
$ref: '#/components/schemas/CostCategory'
price:
description: Price for this component
type: object
$ref: '#/components/schemas/Price'
CostCategory:
description: Cost category
type: string
enum:
- Energy
- Time
- FlatFee
- Other
CurrencyCode:
description: >-
Currency in 3 alphabetical characters according to ISO 4217.
type: string
minLength: 3
maxLength: 3
enum:
# 784, UAE Dirham, UNITED ARAB EMIRATES (THE)
- AED
# 971, Afghani, AFGHANISTAN
- AFN
# 008, Lek, ALBANIA
- ALL
# 051, Armenian Dram, ARMENIA
- AMD
# 532, Netherlands Antillean Guilder, CURAÇAO
# SINT MAARTEN (DUTCH PART)
- ANG
# 973, Kwanza, ANGOLA
- AOA
# 032, Argentine Peso, ARGENTINA
- ARS
# 036, Australian Dollar, AUSTRALIA
# CHRISTMAS ISLAND
# COCOS (KEELING) ISLANDS (THE)
# HEARD ISLAND AND McDONALD ISLANDS
# KIRIBATI
# NAURU
# NORFOLK ISLAND
# TUVALU
- AUD
# 533, Aruban Florin, ARUBA
- AWG
# 944, Azerbaijan Manat, AZERBAIJAN
- AZN
# 977, Convertible Mark, BOSNIA AND HERZEGOVINA
- BAM
# 052, Barbados Dollar, BARBADOS
- BBD
# 050, Taka, BANGLADESH
- BDT
# 975, Bulgarian Lev, BULGARIA
- BGN
# 048, Bahraini Dinar, BAHRAIN
- BHD
# 108, Burundi Franc, BURUNDI
- BIF
# 060, Bermudian Dollar, BERMUDA
- BMD
# 096, Brunei Dollar, BRUNEI DARUSSALAM
- BND
# 068, Boliviano, BOLIVIA (PLURINATIONAL STATE OF)
- BOB
# 984, Mvdol, BOLIVIA (PLURINATIONAL STATE OF)
- BOV
# 986, Brazilian Real, BRAZIL
- BRL
# 044, Bahamian Dollar, BAHAMAS (THE)
- BSD
# 064, Ngultrum, BHUTAN
- BTN
# 072, Pula, BOTSWANA
- BWP
# 933, Belarusian Ruble, BELARUS
- BYN
# 084, Belize Dollar, BELIZE
- BZD
# 124, Canadian Dollar, CANADA
- CAD
# 976, Congolese Franc, CONGO (THE DEMOCRATIC REPUBLIC OF THE)
- CDF
# 947, WIR Euro, SWITZERLAND
- CHE
# 756, Swiss Franc, LIECHTENSTEIN
# SWITZERLAND
- CHF
# 948, WIR Franc, SWITZERLAND
- CHW
# 990, Unidad de Fomento, CHILE
- CLF
# 152, Chilean Peso, CHILE
- CLP
# 156, Yuan Renminbi, CHINA
- CNY
# 170, Colombian Peso, COLOMBIA
- COP
# 970, Unidad de Valor Real, COLOMBIA
- COU
# 188, Costa Rican Colon, COSTA RICA
- CRC
# 931, Peso Convertible, CUBA
- CUC
# 192, Cuban Peso, CUBA
- CUP
# 132, Cabo Verde Escudo, CABO VERDE
- CVE
# 203, Czech Koruna, CZECHIA
- CZK
# 262, Djibouti Franc, DJIBOUTI
- DJF
# 208, Danish Krone, DENMARK
# FAROE ISLANDS (THE)
# GREENLAND
- DKK
# 214, Dominican Peso, DOMINICAN REPUBLIC (THE)
- DOP
# 012, Algerian Dinar, ALGERIA
- DZD
# 818, Egyptian Pound, EGYPT
- EGP
# 232, Nakfa, ERITREA
- ERN
# 230, Ethiopian Birr, ETHIOPIA
- ETB
# 978, Euro, ÅLAND ISLANDS
# ANDORRA
# AUSTRIA
# BELGIUM
# CROATIA
# CYPRUS
# ESTONIA
# EUROPEAN UNION
# FINLAND
# FRANCE
# FRENCH GUIANA
# FRENCH SOUTHERN TERRITORIES (THE)
# GERMANY
# GREECE
# GUADELOUPE
# HOLY SEE (THE)
# IRELAND
# ITALY
# LATVIA
# LITHUANIA
# LUXEMBOURG
# MALTA
# MARTINIQUE
# MAYOTTE
# MONACO
# MONTENEGRO
# NETHERLANDS (THE)
# PORTUGAL
# RÉUNION
# SAINT BARTHÉLEMY
# SAINT MARTIN (FRENCH PART)
# SAINT PIERRE AND MIQUELON
# SAN MARINO
# SLOVAKIA
# SLOVENIA
# SPAIN
- EUR
# 242, Fiji Dollar, FIJI
- FJD
# 238, Falkland Islands Pound, FALKLAND ISLANDS (THE) [MALVINAS]
- FKP
# 826, Pound Sterling, GUERNSEY
# ISLE OF MAN
# JERSEY
# UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)
- GBP
# 981, Lari, GEORGIA
- GEL
# 936, Ghana Cedi, GHANA
- GHS
# 292, Gibraltar Pound, GIBRALTAR
- GIP
# 270, Dalasi, GAMBIA (THE)
- GMD
# 324, Guinean Franc, GUINEA
- GNF
# 320, Quetzal, GUATEMALA
- GTQ
# 328, Guyana Dollar, GUYANA
- GYD
# 344, Hong Kong Dollar, HONG KONG
- HKD
# 340, Lempira, HONDURAS
- HNL
# 332, Gourde, HAITI
- HTG
# 348, Forint, HUNGARY
- HUF
# 360, Rupiah, INDONESIA
- IDR
# 376, New Israeli Sheqel, ISRAEL
- ILS
# 356, Indian Rupee, BHUTAN
# INDIA
- INR
# 368, Iraqi Dinar, IRAQ
- IQD
# 364, Iranian Rial, IRAN (ISLAMIC REPUBLIC OF)
- IRR
# 352, Iceland Krona, ICELAND
- ISK
# 388, Jamaican Dollar, JAMAICA
- JMD
# 400, Jordanian Dinar, JORDAN
- JOD
# 392, Yen, JAPAN
- JPY
# 404, Kenyan Shilling, KENYA
- KES
# 417, Som, KYRGYZSTAN
- KGS
# 116, Riel, CAMBODIA
- KHR
# 174, Comorian Franc , COMOROS (THE)
- KMF
# 408, North Korean Won, KOREA (THE DEMOCRATIC PEOPLES REPUBLIC OF)
- KPW
# 410, Won, KOREA (THE REPUBLIC OF)
- KRW
# 414, Kuwaiti Dinar, KUWAIT
- KWD
# 136, Cayman Islands Dollar, CAYMAN ISLANDS (THE)
- KYD
# 398, Tenge, KAZAKHSTAN
- KZT
# 418, Lao Kip, LAO PEOPLES DEMOCRATIC REPUBLIC (THE)
- LAK
# 422, Lebanese Pound, LEBANON
- LBP
# 144, Sri Lanka Rupee, SRI LANKA
- LKR
# 430, Liberian Dollar, LIBERIA
- LRD
# 426, Loti, LESOTHO
- LSL
# 434, Libyan Dinar, LIBYA
- LYD
# 504, Moroccan Dirham, MOROCCO
# WESTERN SAHARA
- MAD
# 498, Moldovan Leu, MOLDOVA (THE REPUBLIC OF)
- MDL
# 969, Malagasy Ariary, MADAGASCAR
- MGA
# 807, Denar, NORTH MACEDONIA
- MKD
# 104, Kyat, MYANMAR
- MMK
# 496, Tugrik, MONGOLIA
- MNT
# 446, Pataca, MACAO
- MOP
# 929, Ouguiya, MAURITANIA
- MRU
# 480, Mauritius Rupee, MAURITIUS
- MUR
# 462, Rufiyaa, MALDIVES
- MVR
# 454, Malawi Kwacha, MALAWI
- MWK
# 484, Mexican Peso, MEXICO
- MXN
# 979, Mexican Unidad de Inversion (UDI), MEXICO
- MXV
# 458, Malaysian Ringgit, MALAYSIA
- MYR
# 943, Mozambique Metical, MOZAMBIQUE
- MZN
# 516, Namibia Dollar, NAMIBIA
- NAD
# 566, Naira, NIGERIA
- NGN
# 558, Cordoba Oro, NICARAGUA
- NIO
# 578, Norwegian Krone, BOUVET ISLAND
# NORWAY
# SVALBARD AND JAN MAYEN
- NOK
# 524, Nepalese Rupee, NEPAL
- NPR
# 554, New Zealand Dollar, COOK ISLANDS (THE)
# NEW ZEALAND
# NIUE
# PITCAIRN
# TOKELAU
- NZD
# 512, Rial Omani, OMAN
- OMR
# 590, Balboa, PANAMA
- PAB
# 604, Sol, PERU
- PEN
# 598, Kina, PAPUA NEW GUINEA
- PGK
# 608, Philippine Peso, PHILIPPINES (THE)
- PHP
# 586, Pakistan Rupee, PAKISTAN
- PKR
# 985, Zloty, POLAND
- PLN
# 600, Guarani, PARAGUAY
- PYG
# 634, Qatari Rial, QATAR
- QAR
# 946, Romanian Leu, ROMANIA
- RON
# 941, Serbian Dinar, SERBIA
- RSD
# 643, Russian Ruble, RUSSIAN FEDERATION (THE)
- RUB
# 646, Rwanda Franc, RWANDA
- RWF
# 682, Saudi Riyal, SAUDI ARABIA
- SAR
# 090, Solomon Islands Dollar, SOLOMON ISLANDS
- SBD
# 690, Seychelles Rupee, SEYCHELLES
- SCR
# 938, Sudanese Pound, SUDAN (THE)
- SDG
# 752, Swedish Krona, SWEDEN
- SEK
# 702, Singapore Dollar, SINGAPORE
- SGD
# 654, Saint Helena Pound, SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA
- SHP
# 925, Leone, SIERRA LEONE
- SLE
# 694, Leone, SIERRA LEONE
- SLL
# 706, Somali Shilling, SOMALIA
- SOS
# 968, Surinam Dollar, SURINAME
- SRD
# 728, South Sudanese Pound, SOUTH SUDAN
- SSP
# 930, Dobra, SAO TOME AND PRINCIPE
- STN
# 222, El Salvador Colon, EL SALVADOR
- SVC
# 760, Syrian Pound, SYRIAN ARAB REPUBLIC
- SYP
# 748, Lilangeni, ESWATINI
- SZL
# 764, Baht, THAILAND
- THB
# 972, Somoni, TAJIKISTAN
- TJS
# 934, Turkmenistan New Manat, TURKMENISTAN
- TMT
# 788, Tunisian Dinar, TUNISIA
- TND
# 776, Paanga, TONGA
- TOP
# 949, Turkish Lira, TÜRKİYE
- TRY
# 780, Trinidad and Tobago Dollar, TRINIDAD AND TOBAGO
- TTD
# 901, New Taiwan Dollar, TAIWAN (PROVINCE OF CHINA)
- TWD
# 834, Tanzanian Shilling, TANZANIA, UNITED REPUBLIC OF
- TZS
# 980, Hryvnia, UKRAINE
- UAH
# 800, Uganda Shilling, UGANDA
- UGX
# 840, US Dollar, AMERICAN SAMOA
# BONAIRE, SINT EUSTATIUS AND SABA
# BRITISH INDIAN OCEAN TERRITORY (THE)
# ECUADOR
# EL SALVADOR
# GUAM
# HAITI
# MARSHALL ISLANDS (THE)
# MICRONESIA (FEDERATED STATES OF)
# NORTHERN MARIANA ISLANDS (THE)
# PALAU
# PANAMA
# PUERTO RICO
# TIMOR-LESTE
# TURKS AND CAICOS ISLANDS (THE)
# UNITED STATES MINOR OUTLYING ISLANDS (THE)
# UNITED STATES OF AMERICA (THE)
# VIRGIN ISLANDS (BRITISH)
# VIRGIN ISLANDS (U.S.)
- USD
# 997, US Dollar (Next day), UNITED STATES OF AMERICA (THE)
- USN
# 940, Uruguay Peso en Unidades Indexadas (UI), URUGUAY
- UYI
# 858, Peso Uruguayo, URUGUAY
- UYU
# 927, Unidad Previsional, URUGUAY
- UYW
# 860, Uzbekistan Sum, UZBEKISTAN
- UZS
# 926, Bolívar Soberano, VENEZUELA (BOLIVARIAN REPUBLIC OF)
- VED
# 928, Bolívar Soberano, VENEZUELA (BOLIVARIAN REPUBLIC OF)
- VES
# 704, Dong, VIET NAM
- VND
# 548, Vatu, VANUATU
- VUV
# 882, Tala, SAMOA
- WST
# 950, CFA Franc BEAC, CAMEROON
# CENTRAL AFRICAN REPUBLIC (THE)
# CHAD
# CONGO (THE)
# EQUATORIAL GUINEA
# GABON
- XAF
# 951, East Caribbean Dollar, ANGUILLA
# ANTIGUA AND BARBUDA
# DOMINICA
# GRENADA
# MONTSERRAT
# SAINT KITTS AND NEVIS
# SAINT LUCIA
# SAINT VINCENT AND THE GRENADINES
- XCD
# 960, SDR (Special Drawing Right), INTERNATIONAL MONETARY FUND (IMF) 
- XDR
# 952, CFA Franc BCEAO, BENIN
# BURKINA FASO
# CÔTE D'IVOIRE
# GUINEA-BISSAU
# MALI
# NIGER (THE)
# SENEGAL
# TOGO
- XOF
# 953, CFP Franc, FRENCH POLYNESIA
# NEW CALEDONIA
# WALLIS AND FUTUNA
- XPF
# 994, Sucre, SISTEMA UNITARIO DE COMPENSACION REGIONAL DE PAGOS SUCRE
- XSU
# 965, ADB Unit of Account, MEMBER COUNTRIES OF THE AFRICAN DEVELOPMENT BANK GROUP
- XUA
# 886, Yemeni Rial, YEMEN
- YER
# 710, Rand, LESOTHO
# NAMIBIA
# SOUTH AFRICA
- ZAR
# 967, Zambian Kwacha, ZAMBIA
- ZMW
# 932, Zimbabwe Dollar, ZIMBABWE
- ZWL
Currency:
description: >-
Currency object containing the currency code and the accuracy of the minor
unit according to ISO 4217.
type: object
additionalProperties: true
properties:
code:
description: >-
Currency code.
type: string
$ref: '#/components/schemas/CurrencyCode'
decimals:
description: >-
The number of digits after the decimal separator, that are expressed
by the minor units of the currency.
For example for Euro, Euro cents express 2 digits after the
decimal separator.
In other words, the price in the main currency units would be the
`value * 10^(-decimals)`.
type: integer
minimum: 0
IdlePrice:
description: Price components when idle
type: object
additionalProperties: true
properties:
grace_minutes:
description: >-
Grace period in minutes before idle time is charged.
Grace minutes start counting from the timestamp of the message in which state
changed from "Charging" to "Idle".
type: integer
hour_price:
description: >-
Price per hour while idle
type: object
$ref: '#/components/schemas/Price'
MoneyAmount:
description: >-
'Money amount is expressed as an amount of minor units of the currency. Example price of 1.23 EUR is expressed as { value: 123 }'
type: object
additionalProperties: true
required:
- value
properties:
value:
description: >-
The amount of minor units of the currency.
type: integer
NextPeriodPrice:
description: Pricing for the next period
type: object
additionalProperties: true
required:
- timestamp_from
- charging_price
properties:
timestamp_from:
description: Time when these prices become active.
type: string
format: date-time
charging_price:
description: Price components while charging
type: array
items:
type: object
$ref: '#/components/schemas/ChargingPriceComponent'
idle_price:
description: Price components while idle. Optional if no idle fee charged.
type: object
$ref: '#/components/schemas/IdlePrice'
Price:
description: >-
Price object containing the currency and the value of money.
type: object
additionalProperties: true
required:
- currency
- value
properties:
currency:
description: >-
Currency of the price.
type: object
$ref: '#/components/schemas/Currency'
value:
description: >-
Value in the minor units of the currency.
type: object
$ref: '#/components/schemas/MoneyAmount'
SessionCost:
description: >-
Session cost object containing the total cost of the session and a list
of chunks
type: object
additionalProperties: true
required:
- session_id
- currency
- status
properties:
id_tag:
description: The id tag assigned to this transaction
type: object
$ref: 'auth_consumer_API.yaml#/components/schemas/ProvidedIdToken'
session_id:
description: The session id
type: string
currency:
description: >-
Currency of the session cost. It applies to all chunks.
type: object
$ref: '#/components/schemas/Currency'
cost_chunks:
description: >-
List of cost chunks. The total cost of the session is the sum of
all chunks.
type: array
items:
description: One chunk of the session cost
type: object
$ref: '#/components/schemas/SessionCostChunk'
idle_price:
description: >-
Prices for when the EV is idle.
type: object
$ref: '#/components/schemas/IdlePrice'
charging_price:
description: >-
Charging prices.
type: array
items:
description: Charging price per type
type: object
$ref: '#/components/schemas/ChargingPriceComponent'
next_period:
description: >-
Charging prices for the next period, starting from the given date/time
type: object
$ref: '#/components/schemas/NextPeriodPrice'
status:
description: >-
Session status. Session can be running or finished. Costs of the
running session are not final and can change.
Only after the session is finished, the session cost can be committed
to bank and/or backend.
type: object
$ref: '#/components/schemas/SessionStatus'
message:
description: >-
Message to show to the user containing information about the price
type: array
items:
description: Message with pricing information in a specific language
type: object
$ref: 'display_message_API.yaml#/components/schemas/MessageContent'
qr_code:
description: >-
QR Code with more information. For example when the charging is finished,
to download the invoice from
type: string
SessionCostChunk:
description: >-
A chunk of the session cost. The total cost of the session is the sum of
all chunks.
type: object
additionalProperties: true
properties:
timestamp_from:
description: >-
Absolute timestamp for the start of this chunk in RFC3339 UTC format
type: string
format: date-time
timestamp_to:
description: >-
Absolute timestamp for the end of this chunk in RFC3339 UTC format
type: string
format: date-time
metervalue_from:
description: >-
Metervalue (energy Wh import) for the start of this chunk
type: integer
metervalue_to:
description: >-
Metervalue (energy Wh import) for the end of this chunk
type: integer
cost:
description: >-
Cost of the energy (or other things like time, base price, ...)
consumed during this chunk in the currency specified in the session
price
type: object
$ref: '#/components/schemas/MoneyAmount'
category:
description: >-
Cost category. Typically this is energy, time or a flat fee.
type: string
$ref: '#/components/schemas/CostCategory'
SessionStatus:
description: >-
Session status enum. Session can be running or finished. Costs of the
running session are not final and can change.
type: string
enum:
- Running
- Idle
- Finished
TariffMessage:
description: Message containing cost information
type: object
additionalProperties: true
required:
- messages
properties:
ocpp_transaction_id:
description: Transaction id of ocpp.
type: string
identifier_id:
description: To which token this message is bound.
type: string
identifier_type:
description: The type of 'identifier_id'. If omitted, type will be session id.
type: string
$ref: 'display_message_API.yaml#/components/schemas/IdentifierType'
messages:
description: Message with session price information to show the user.
type: array
items:
description: Message with pricing information in a specific language
type: object
$ref: 'display_message_API.yaml#/components/schemas/MessageContent'
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,183 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:session_cost_consumer_API'
info:
title: 'EVerest API definition for session cost consumer'
version: 1.0.0
description: >-
API for EVerest API clients that consume session cost and tariff
information from the `session_cost` interface. See the
Integrate Tariff and Cost how-to guide for OCPP-specific
configuration and message flow details.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: SessionCost
servers:
default:
pathname: 'everest_api/1/session_cost_consumer/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_default_price:
address: 'e2m/default_price'
messages:
default_price:
$ref: '#/components/messages/receive_default_price'
receive_tariff_message:
address: 'e2m/tariff_message'
messages:
tariff_message:
$ref: '#/components/messages/receive_tariff_message'
receive_session_cost:
address: 'e2m/session_cost'
messages:
session_cost:
$ref: '#/components/messages/receive_session_cost'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_default_price:
title: 'Receive default price'
action: receive
channel:
$ref: '#/channels/receive_default_price'
description: >-
Published once on startup and again whenever the applicable default price
changes (e.g. after a connectivity state change or a configuration
update). Contains human-readable price text in one or more languages.
Absent if no default price is configured.
receive_tariff_message:
title: 'Receive tariff message'
action: receive
channel:
$ref: '#/channels/receive_tariff_message'
description: >-
Published at authorization time and whenever the CSMS sends updated
pricing during a session. Contains human-readable price text in one
or more languages.
receive_session_cost:
title: 'Receive session cost'
action: receive
channel:
$ref: '#/channels/receive_session_cost'
description: >-
Published periodically during a session and once when it ends.
Contains session cost broken down into chunks, current and upcoming
pricing, and optional display messages.
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_default_price:
name: receive_default_price
title: 'Receive default price'
summary: 'Currently applicable default pricing text for this charger'
contentType: application/json
payload:
$ref: '#/components/schemas/DefaultPrice'
receive_tariff_message:
name: receive_tariff_message
title: 'Receive tariff message'
summary: 'Tariff and pricing information for a charging session'
contentType: application/json
payload:
$ref: 'session_cost_API.yaml#/components/schemas/TariffMessage'
receive_session_cost:
name: receive_session_cost
title: 'Receive session cost'
summary: 'Running or final cost of a charging session'
contentType: application/json
payload:
$ref: 'session_cost_API.yaml#/components/schemas/SessionCost'
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
DefaultPrice:
description: >-
The currently applicable default pricing text for this charger,
independent of any active session. Contains human-readable text only —
no computed cost amounts are included. Published once on startup and
again whenever the applicable price changes (e.g. after a connectivity
state change or a configuration update).
type: object
additionalProperties: false
required:
- messages
properties:
messages:
description: >-
Price text in one or more languages. The first entry uses the
configured default language.
type: array
items:
description: Price text in a specific language
type: object
$ref: 'display_message_API.yaml#/components/schemas/MessageContent'
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,378 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:slac_API'
info:
title: 'EVerest API definition for SLAC'
version: 1.0.0
description: >-
API for EVerest API clients implementing SLAC.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: slac
servers:
default:
pathname: 'everest_api/1/slac/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
############ slac
receive_reset:
address: 'e2m/reset'
messages:
receive_reset:
$ref: '#/components/messages/receive_reset'
receive_enter_bcd:
address: 'e2m/enter_bcd'
messages:
receive_enter_bcd:
$ref: '#/components/messages/receive_enter_bcd'
receive_leave_bcd:
address: 'e2m/leave_bcd'
messages:
receive_leave_bcd:
$ref: '#/components/messages/receive_leave_bcd'
receive_dlink_terminate:
address: 'e2m/dlink_terminate'
messages:
receive_dlink_terminate:
$ref: '#/components/messages/receive_dlink_terminate'
receive_dlink_error:
address: 'e2m/dlink_error'
messages:
receive_dlink_error:
$ref: '#/components/messages/receive_dlink_error'
receive_dlink_pause:
address: 'e2m/dlink_pause'
messages:
receive_dlink_pause:
$ref: '#/components/messages/receive_dlink_pause'
send_state:
address: 'm2e/state'
messages:
send_state:
$ref: '#/components/messages/send_state'
send_dlink_ready:
address: 'm2e/dlink_ready'
messages:
send_dlink_ready:
$ref: '#/components/messages/send_dlink_ready'
send_request_error_routine:
address: 'm2e/request_error_routine'
messages:
send_request_error_routine:
$ref: '#/components/messages/send_request_error_routine'
send_ev_mac_address:
address: 'm2e/ev_mac_address'
messages:
send_ev_mac_address:
$ref: '#/components/messages/send_ev_mac_address'
############ errors
send_raise_error:
address: 'm2e/raise_error'
messages:
send_raise_error:
$ref: '#/components/messages/send_raise_error'
send_clear_error:
address: 'm2e/clear_error'
messages:
send_clear_error:
$ref: '#/components/messages/send_clear_error'
############ heartbeat
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
############ slac
receive_reset:
title: 'Receive reset'
action: receive
channel:
$ref: '#/channels/receive_reset'
description: 'Direction: EVerest to Module'
receive_enter_bcd:
title: 'Receive enter_bcd'
action: receive
channel:
$ref: '#/channels/receive_enter_bcd'
description: 'Direction: EVerest to Module'
receive_leave_bcd:
title: 'Receive leave_bcd'
action: receive
channel:
$ref: '#/channels/receive_leave_bcd'
description: 'Direction: EVerest to Module'
receive_dlink_terminate:
title: 'Receive dlink_terminate'
action: receive
channel:
$ref: '#/channels/receive_dlink_terminate'
description: 'Direction: EVerest to Module'
receive_dlink_error:
title: 'Receive dlink_error'
action: receive
channel:
$ref: '#/channels/receive_dlink_error'
description: 'Direction: EVerest to Module'
receive_dlink_pause:
title: 'Receive dlink_pause'
action: receive
channel:
$ref: '#/channels/receive_dlink_pause'
description: 'Direction: EVerest to Module'
send_state:
title: 'Send state'
action: send
channel:
$ref: '#/channels/send_state'
description: 'Direction: Module to EVerest'
send_dlink_ready:
title: 'Send dlink_ready'
action: send
channel:
$ref: '#/channels/send_dlink_ready'
description: 'Direction: Module to EVerest'
send_request_error_routine:
title: 'Send request_error_routine'
action: send
channel:
$ref: '#/channels/send_request_error_routine'
description: 'Direction: Module to EVerest'
send_ev_mac_address:
title: 'Send ev_mac_address'
action: send
channel:
$ref: '#/channels/send_ev_mac_address'
description: 'Direction: Module to EVerest'
send_raise_error:
title: 'Send raise error'
action: send
channel:
$ref: '#/channels/send_raise_error'
description: 'Direction: Module to EVerest'
send_clear_error:
title: 'Send clear error'
action: send
channel:
$ref: '#/channels/send_clear_error'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
description: 'Direction: EVerest to Module'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_reset:
name: receive_reset
title: 'Reset SLAC'
summary: Reset SLAC
contentType: application/json
payload:
$ref: '#/components/schemas/Enabled'
examples:
- summary: ""
payload:
true
receive_enter_bcd:
name: receive_enter_bcd
title: 'Enter B/C/D'
summary: Signal pilot state change to B/C/D from A/E/F.
receive_leave_bcd:
name: receive_leave_bcd
title: 'Leave B/C/D'
summary: Signal pilot state change to A/E/F from B/C/D.
receive_dlink_terminate:
name: receive_dlink_terminate
title: 'Dlink terminate'
summary: Terminate the data link and become UNMATCHED.
receive_dlink_error:
name: receive_dlink_error
title: 'Dlink error'
summary: Terminate the data link and restart the matching process.
receive_dlink_pause:
name: receive_dlink_pause
title: 'Dlink pause'
summary: Request power saving mode, while staying MATCHED.
send_state:
name: send_state
title: 'SLAC state'
summary: Provides the state enum.
contentType: application/json
payload:
$ref: '#/components/schemas/SLACState'
examples:
- summary: "Example state MATCHED"
payload:
"state": "MATCHED"
send_dlink_ready:
name: send_dlink_ready
title: 'Dlink ready'
summary: >-
Inform higher layers about a change in data link status. Emits true
if link was set up and false when the link is shut down.
contentType: application/json
payload:
$ref: '#/components/schemas/DLinkStatus'
examples:
- summary: "Example dlink_ready true"
payload:
"dlink_ready": true
send_request_error_routine:
name: send_request_error_routine
title: 'Request error routine'
summary: >-
Inform the higher layer to execute the error routine for a SLAC connection
retry
contentType: application/json
payload:
type: 'null'
send_ev_mac_address:
name: send_ev_mac_address
title: 'EV MAC address'
summary: >-
Inform higher layers about the MAC address of the vehicle (upper case)
contentType: application/json
payload:
$ref: '#/components/schemas/MACAddress'
examples:
- summary: "Example MAC address"
payload:
"ev_mac_address": "AA:BB:CC:DD:EE:FF"
send_raise_error:
name: send_raise_error
title: 'Send raise error'
summary: Signal to EVerest that an error happened.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: "Example error message"
payload:
"type": "CommunicationFault"
"sub_type": "string"
"message": "string"
send_clear_error:
name: send_clear_error
title: 'Send clear error'
summary: Signal to EVerest that an error was resolved.
contentType: application/json
payload:
$ref: '#/components/schemas/Error'
examples:
- summary: Signal to EVerest that a previously raised error is no longer active.
payload:
"type": "CommunicationFault"
"sub_type": "string"
"message": "string"
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: ""
payload:
true
schemas:
Enabled:
type: boolean
description: 'true: start SLAC after reset, false: stop SLAC'
SLACState:
type: object
properties:
state:
type: string
description: Provides the state enum.
enum:
- UNMATCHED
- MATCHING
- MATCHED
DLinkStatus:
type: object
properties:
dlink_ready:
type: boolean
description: >-
Inform higher layers about a change in data link status. Emits true
if link was set up and false when the link is shut down.
MACAddress:
type: object
properties:
ev_mac_address:
type: string
description: >-
Inform higher layers about the MAC address of the vehicle (upper case)
pattern: ^[A-F0-9]{2}(:[A-F0-9]{2}){5}$
Error:
type: object
properties:
type:
$ref: '#/components/schemas/ErrorEnum'
sub_type:
type: string
description: Sub-type of the error.
message:
type: string
description: Addition information about the error
ErrorEnum:
type: string
description: |
Type of Error
- CommunicationFault: 'The communication to the hardware or underlying driver is lost or has errors.'
- VendorError: 'Vendor specific error code. Will stop charging session.'
- VendorWarning: 'Vendor specific error code. Charging may continue.'
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"

View File

@@ -0,0 +1,718 @@
---
asyncapi: 3.0.0
id: 'pionix:de:everest:system_API'
info:
title: 'EVerest API definition for the system module'
version: 1.0.0
description: >-
API for EVerest API client implementing the system capabilities OTA update and log upload.
license:
name: Apache-2.0
url: https://opensource.org/licenses/Apache-2.0
tags:
- name: EVerest
- name: SystemAPI
servers:
default:
pathname: 'everest_api/1/system/{module_id}'
host: 'localhost:1883'
description: default local MQTT
protocol: mqtt
variables:
module_id:
description: The ID of the module as defined in the EVerest config file.
defaultContentType: application/json
channels:
receive_request_update_firmware:
address: 'e2m/update_firmware'
messages:
receive_request_update_firmware:
$ref: '#/components/messages/receive_request_update_firmware'
send_reply_update_firmware:
address: null
messages:
send_reply_update_firmware:
$ref: '#/components/messages/send_reply_update_firmware'
receive_allow_firmware_installation:
address: 'e2m/allow_firmware_installation'
messages:
receive_allow_firmware_installation:
$ref: '#/components/messages/receive_allow_firmware_installation'
receive_request_upload_logs:
address: 'e2m/upload_logs'
messages:
receive_request_upload_logs:
$ref: '#/components/messages/receive_request_upload_logs'
send_reply_upload_logs:
address: null
messages:
send_reply_upload_logs:
$ref: '#/components/messages/send_reply_upload_logs'
receive_request_is_reset_allowed:
address: 'e2m/is_reset_allowed'
messages:
receive_request_is_reset_allowed:
$ref: '#/components/messages/receive_request_is_reset_allowed'
send_reply_is_reset_allowed:
address: null
messages:
send_reply_is_reset_allowed:
$ref: '#/components/messages/send_reply_is_reset_allowed'
receive_reset:
address: 'e2m/reset'
messages:
receive_reset:
$ref: '#/components/messages/receive_reset'
receive_request_set_system_time:
address: 'e2m/set_system_time'
messages:
receive_request_set_system_time:
$ref: '#/components/messages/receive_request_set_system_time'
send_reply_set_system_time:
address: null
messages:
send_reply_set_system_time:
$ref: '#/components/messages/send_reply_set_system_time'
receive_request_get_boot_reason:
address: 'e2m/get_boot_reason'
messages:
receive_request_get_boot_reason:
$ref: '#/components/messages/receive_request_get_boot_reason'
send_reply_get_boot_reason:
address: null
messages:
send_reply_get_boot_reason:
$ref: '#/components/messages/send_reply_get_boot_reason'
send_firmware_update_status:
address: 'm2e/firmware_update_status'
messages:
send_firmware_update_status:
$ref: '#/components/messages/send_firmware_update_status'
send_log_status:
address: 'm2e/log_status'
messages:
send_log_status:
$ref: '#/components/messages/send_log_status'
receive_heartbeat:
address: 'e2m/heartbeat'
messages:
receive_heartbeat:
$ref: '#/components/messages/receive_heartbeat'
send_communication_check:
address: 'm2e/communication_check'
messages:
send_communication_check:
$ref: '#/components/messages/send_communication_check'
operations:
receive_request_update_firmware:
title: 'Request to update the firmware'
action: receive
channel:
$ref: '#/channels/receive_request_update_firmware'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_update_firmware'
send_reply_update_firmware:
title: 'Reply to update firmware request'
action: send
description: 'Direction: Module to EVerest'
channel:
$ref: '#/channels/send_reply_update_firmware'
receive_allow_firmware_installation:
title: 'Call to allow a firmware installation to proceed'
action: receive
description: 'Direction: EVerest to Module'
channel:
$ref: '#/channels/receive_allow_firmware_installation'
receive_request_upload_logs:
title: 'Receive request to upload logs'
action: receive
channel:
$ref: '#/channels/receive_request_upload_logs'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_upload_logs'
send_reply_upload_logs:
title: 'Request to upload logs'
action: send
description: 'Direction: Module to EVerest'
channel:
$ref: '#/channels/send_reply_upload_logs'
receive_request_is_reset_allowed:
title: 'Receive request for is reset allowed'
action: receive
channel:
$ref: '#/channels/receive_request_is_reset_allowed'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_is_reset_allowed'
send_reply_is_reset_allowed:
title: 'Send reply for is_reset_allowed'
action: send
channel:
$ref: '#/channels/send_reply_is_reset_allowed'
description: 'Direction: Module to EVerest'
receive_reset:
title: 'Call to reset the system immediately'
action: receive
channel:
$ref: '#/channels/receive_reset'
description: 'Direction: EVerest to Module'
receive_request_set_system_time:
title: 'Receive request to set the system time'
action: receive
channel:
$ref: '#/channels/receive_request_set_system_time'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_set_system_time'
send_reply_set_system_time:
title: 'Send reply to set system time request'
action: send
channel:
$ref: '#/channels/send_reply_set_system_time'
description: 'Direction: Module to EVerest'
receive_request_get_boot_reason:
title: 'Receive request to get the boot reason'
action: receive
channel:
$ref: '#/channels/receive_request_get_boot_reason'
description: 'Direction: EVerest to Module'
reply:
address:
location: "$message.header#/replyTo"
channel:
$ref: '#/channels/send_reply_get_boot_reason'
send_reply_get_boot_reason:
title: 'Send reply to get boot reason request'
action: send
channel:
$ref: '#/channels/send_reply_get_boot_reason'
description: 'Direction: Module to EVerest'
send_firmware_update_status:
title: 'Send firmware update status'
action: send
channel:
$ref: '#/channels/send_firmware_update_status'
description: 'Direction: Module to EVerest'
send_log_status:
title: 'Send log upload status'
action: send
channel:
$ref: '#/channels/send_log_status'
receive_heartbeat:
title: 'Receive heartbeat'
action: receive
channel:
$ref: '#/channels/receive_heartbeat'
send_communication_check:
title: 'Send communication check'
action: send
channel:
$ref: '#/channels/send_communication_check'
components:
messages:
receive_request_update_firmware:
name: receive_request_update_firmware
title: 'Request update firmware'
summary: 'Request to update the firmware.'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/FirmwareUpdateRequest'
send_reply_update_firmware:
name: send_reply_update_firmware
title: 'Reply update firmware'
summary: 'Reply to update firmware request.'
contentType: application/json
payload:
$ref: '#/components/schemas/UpdateFirmwareResponse'
examples:
- summary: "Update firmware"
payload:
"Accepted"
receive_request_upload_logs:
name: receive_request_upload_logs
title: 'Request upload logs'
summary: 'Request to upload logs.'
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/UploadLogsRequest'
send_reply_upload_logs:
name: send_reply_upload_logs
title: 'Reply upload logs'
summary: 'Reply to upload logs request.'
contentType: application/json
payload:
$ref: '#/components/schemas/UploadLogsResponse'
examples:
- summary: "Upload logs"
payload:
file_name: "string"
upload_logs_status: "Accepted"
receive_request_is_reset_allowed:
name: receive_request_is_reset_allowed
title: 'Request if reset is allowed'
summary: >-
Request if is reset allowed. This is usually called prior to a reset
request.
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to.
payload:
$ref: '#/components/schemas/ResetType'
send_reply_is_reset_allowed:
name: send_reply_is_reset_allowed
title: 'Reply to is reset allowed'
summary: 'Reply to is reset allowed request.'
contentType: application/json
payload:
$ref: '#/components/schemas/ResetAllowed'
examples:
- summary: "Reset is allowed"
payload:
true
receive_request_set_system_time:
name: receive_request_set_system_time
title: 'Receive set system time request'
summary: Call to set the system time
contentType: application/json
payload:
type: object
required:
- payload
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to. If this information is missing, the command will still be accepted, but no response will be sent.
payload:
$ref: '#/components/schemas/SystemTime'
send_reply_set_system_time:
name: send_reply_set_system_time
title: 'Reply to set system time'
summary: 'Reply to set system time request.'
contentType: application/json
payload:
$ref: '#/components/schemas/SystemTimeSet'
examples:
- summary: "system time set successfully"
payload:
true
receive_request_get_boot_reason:
name: receive_request_get_boot_reason
title: 'Receive get boot reason request'
summary: Call to get the boot reason
payload:
type: object
properties:
headers:
type: object
properties:
replyTo: # Address for the request to reply to
type: string
description: Address to send the response to.
send_reply_get_boot_reason:
name: send_reply_get_boot_reason
title: 'Reply to get boot reason'
summary: 'Reply to get boot reason.'
contentType: application/json
payload:
$ref: '#/components/schemas/BootReason'
examples:
- summary: "Get boot reason"
payload:
"ApplicationReset"
receive_allow_firmware_installation:
name: receive_allow_firmware_installation
title: 'Receive Allow firmware installation'
summary: Call to allow firmware installation to proceed
description: >-
Call to allow a firmware installation to proceed. This is
usually called after a firmware update has been downloaded.
OCPP requires to move all EVSE to an unavailable state prior to
installing new firmware. EVerest will take care of this and call
this function when all EVSE are in unavailable state to signal
that installation can proceed.
receive_reset:
name: receive_reset
title: 'Receive reset command'
summary: Call to reset the system immediately
payload:
$ref: '#/components/schemas/ResetRequest'
send_firmware_update_status:
name: send_firmware_update_status
title: 'Send firmware update status'
summary: Describes the current status of a firmware update of the system
payload:
$ref: '#/components/schemas/FirmwareUpdateStatus'
examples:
- summary: "Firmware update status"
payload:
firmware_update_status: "Downloaded"
request_id: 0
send_log_status:
name: send_log_status
title: 'Send log upload status'
summary: Describes the current status of log upload of the system
payload:
$ref: '#/components/schemas/LogStatus'
examples:
- summary: "Log upload status"
payload:
log_status: "BadMessage"
request_id: 0
receive_heartbeat:
name: receive_heartbeat
title: 'Receive heartbeat'
summary: Heartbeat produced by EVerest as configured via cfg_heartbeat_interval_ms in the EVerest configuration
contentType: application/json
payload:
$ref: '#/components/schemas/HeartBeatId'
examples:
- summary: "Heartbeat"
payload: 42
send_communication_check:
name: send_communication_check
title: 'Send communication check'
summary: Signal to EVerest that communication is good or check shall be stopped
contentType: application/json
payload:
$ref: '#/components/schemas/CommunicationCheck'
examples:
- summary: "CommunicationCheck"
payload:
true
schemas:
BootReason:
description: Enum defining the boot reason
type: string
enum:
- ApplicationReset
- FirmwareUpdate
- LocalReset
- PowerUp
- RemoteReset
- ScheduledReset
- Triggered
- Unknown
- Watchdog
FirmwareUpdateRequest:
description: Type defining a Firmware update request
type: object
additionalProperties: true
required:
- location
- request_id
properties:
retries:
description: >-
This specifies how many times the system must try to download
the firmware before giving up.
type: integer
minimum: 1
retry_interval_s:
description: The interval in seconds after which a retry may be attempted
type: integer
request_id:
description: >-
The Id of this request. If the originating firmware request (e.g. from
the OCPP CSMS) did not include a request_id (e.g. classic UpdateFirmware.req),
a request_id of -1 is used.
type: integer
location:
description: URI defining the origin of the firmware
type: string
retrieve_timestamp:
description: Time when the firmware update shall be retrieved in RFC3339 format
type: string
format: date-time
install_timestamp:
description: Time when the firmware update shall be installed in RFC3339 format
type: string
format: date-time
signing_certificate:
description: >-
Certificate with which the firmware was signed. PEM encoded X.509
certificate
type: string
signature:
description: Base64 encoded firmware signature
type: string
FirmwareUpdateStatus:
description: Type defining the status of a firmware update
type: object
additionalProperties: true
required:
- firmware_update_status
- request_id
properties:
firmware_update_status:
description: >-
State describing the current status of firmware update of the
system
type: string
$ref: '#/components/schemas/FirmwareUpdateStatusEnum'
request_id:
description: >-
Id of the request. Use the request_id from the corresponding
FirmwareUpdateRequest.
type: integer
FirmwareUpdateStatusEnum:
description: |
State describing the current download/upload status of a firmware update of the system:
- Downloaded: Intermediate state. New firmware has been downloaded by System
- DownloadFailed: Failure end state. System failed to download firmware
- Downloading: Intermediate state. Firmware is being downloaded
- DownloadScheduled: Intermediate state. Downloading of new firmware has been scheduled
- DownloadPaused: Intermediate state. Downloading has been paused
- Idle: System is not performing firmware update related tasks
- InstallationFailed: Failure end state. Installation of new firmware has failed
- Installing: Intermediate state. Firmware is being installed
- Installed: Successful end state. New firmware has successfully been installed in System
- InstallRebooting: Intermediate state. System is about to reboot to activate new firmware
- InstallScheduled: Intermediate state. Installation of the downloaded firmware is scheduled to take place on installDateTime
- InstallVerificationFailed: Failure end state. Verification of the new firmware (e.g. using a checksum or some other means) has failed and installation will not proceed. (Final failure state)
- InvalidSignature: Failure end state. The firmware signature is not valid
- SignatureVerified: Intermediate state. Provide signature successfully verified
type: string
enum:
- Downloaded
- DownloadFailed
- Downloading
- DownloadScheduled
- DownloadPaused
- Idle
- InstallationFailed
- Installing
- Installed
- InstallRebooting
- InstallScheduled
- InstallVerificationFailed
- InvalidSignature
- SignatureVerified
LogStatusEnum:
description: |
State describing the current status of log upload of the system:
- AcceptedCanceled: Log upload request accepted, but cancelled an ongoing log upload.
- BadMessage: A badly formatted packet or other protocol incompatibility was detected
- Idle: The system is not uploading a log file
- NotSupportedOperation: The server does not support the operation
- PermissionDenied: Insufficient permissions to perform the operation
- Uploaded: File has been uploaded successfully
- UploadFailure: Failed to upload the requested file
- Uploading: File is being uploaded
type: string
enum:
- AcceptedCanceled
- BadMessage
- Idle
- NotSupportedOperation
- PermissionDenied
- Uploaded
- UploadFailure
- Uploading
LogStatus:
description: Type defining the status of a log upload
type: object
additionalProperties: true
required:
- log_status
- request_id
properties:
log_status:
description: State describing the current status of log upload of the system
type: string
$ref: '#/components/schemas/LogStatusEnum'
request_id:
description: >-
Id of the request. Use the request_id from the corresponding
UploadLogsRequest. If the originating log request did not include a
request_id (e.g. classic GetDiagnostics), a request_id of -1 shall be
used.
type: integer
ResetAllowed:
description: 'true if reset is allowed'
type: boolean
ResetRequest:
description: 'request for reset'
type: object
additionalProperties: true
properties:
type:
description: 'type of the reset (Soft or Hard)'
type: string
$ref: '#/components/schemas/ResetType'
scheduled:
type: boolean
ResetType:
description: Enum defining the type of a reset
type: string
enum:
- Soft
- Hard
- NotSpecified
SystemTime:
description: 'system time in RFC3339 format'
type: string
format: date-time
SystemTimeSet:
description: 'true if reset successful'
type: boolean
UpdateFirmwareResponse:
description: |
Enum for the response of an update_firmware command
- Accepted: Accepted this firmware update request. This does not mean the firmware update is successful, the system will now start the firmware update process
- Rejected: Firmware update request rejected
- AcceptedCanceled: Accepted this firmware update request, but in doing this has cancelled an ongoing firmware update
- InvalidCertificate: The certificate is invalid
- RevokedCertificate: Failure end state. The Firmware Signing certificate has been revoked
type: string
enum:
- Accepted
- Rejected
- AcceptedCanceled
- InvalidCertificate
- RevokedCertificate
UploadLogsRequest:
description: Type defining an upload logs request.
type: object
additionalProperties: true
required:
- location
properties:
retries:
description: >-
This specifies how many times the system must try to upload the logs
before giving up.
type: integer
minimum: 1
retry_interval_s:
description: The interval in seconds after which an upload retry may be attempted
type: integer
oldest_timestamp:
description: >-
Oldest timestamp that should be included in the log in RFC3339
format
type: string
format: date-time
latest_timestamp:
description: >-
Latest timestamp that should be included in the log in RFC3339
format
type: string
format: date-time
location:
description: >-
The URL of the location at the remote system where the log should
be stored.
type: string
type:
description: >-
The type of the log (e.g. in OCPP there is the SecurityLog and
the DiagnosticsLog
type: string
request_id:
description: >-
The Id of this request. If the originating log request did not
include a request_id (e.g. classic GetDiagnostics), the request_id
is omitted.
type: integer
UploadLogsResponse:
description: Response to a upload logs request
type: object
additionalProperties: true
required:
- upload_logs_status
properties:
file_name:
description: This contains the name of the log file that will be uploaded.
type: string
upload_logs_status:
description: The log status enum
type: string
$ref: '#/components/schemas/UploadLogsStatus'
UploadLogsStatus:
description: |
Enum for the upload logs status response
- Accepted: Request to upload logs has been accepted
- Rejected: Request to upload logs has been rejected
- AcceptedCanceled: Accepted this log upload, but in doing this has cancelled an ongoing log file upload
type: string
enum:
- Accepted
- Rejected
- AcceptedCanceled
CommunicationCheck:
type: boolean
description: "Send 'true' at least every 'cfg_communication_check_to_s' seconds to signal module is alive. Send 'false' to stop communication check'"
HeartBeatId:
type: integer
description: "64bit unsigned integer. The id of every heartbeat increases by 1 and overflows when the maximum representable value is reached"