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:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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
|
||||
Station’s 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"
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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 PEOPLE’S 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 PEOPLE’S 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, Pa’anga, 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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user