This library provides a complete foundation for implementing EEBUS use cases. The use cases define various functional scenarios for different device categories, e.g. energy management systems, charging stations, heat pumps, and more.
The supported functionality contains:
- Support for SHIP 1.0.1
- Support for big parts of SPINE 1.1.1
- (De-)serialization for EEBUS specific JSON format requirements
- Certificate handling
- mDNS Support, incl. avahi support (recommended)
- Connection (websocket) handling, including reconnection and double connections
- Support for handling pairing of devices
Basic understanding of the EEBUS concepts SHIP and SPINE to use this library is required. Please check the corresponding specifications on the EEBUS downloads website.
An open source SDK written in go providing the foundation to use EEBUS in your projects. Contains support for SHIP and SPINE communication.
The included small demo applications do not implement any usecases and thus will end the connection once it reached exchanging usecase information.
Services with implemented use cases will be implemented in different repositories and are also early work in progress:
go run cmd/hems/main.go 4715
4715
is the example server port that this process should use
The certificate and key and the local SKI will be generated and printed. You should then save the certificate and the key to a file.
Usage: go run cmd/hems/main.go <serverport> <remoteski> <certfile> <keyfile>
remoteski
is the SKI of the remote device or service you want to connect tocertfile
is a local file containing the generated certificate in the first usage runkeyfile
is a local file containing the generated key in the first usage run
go run cmd/hems/main.go 4715
4715
is the example server port that this process should use
The certificate and key and the local SKI will be generated and printed. You should then save the certificate and the key to a file.
Usage: go run cmd/evse/main.go <serverport> <remoteski> <certfile> <keyfile>
remoteski
is the SKI of the remote device or service you want to connect tocertfile
is a local file containing the generated certificate in the first usage runkeyfile
is a local file containing the generated key in the first usage run
The remoteski is from the eebus service to connect to. If no certfile or keyfile are provided, they are generated and printed in the console so they can be saved in a file and later used again. The local SKI is also printed.
- Double connection handling is not implemented according to SHIP 12.2.2. Instead the connection initiated by the higher SKI will be kept. Much simpler and always works
- PIN Verification is NOT supported other than SHIP 13.4.4.3.5.1 "none" PIN state is supported!
- Access Methods SHIP 13.4.6 only supports the most basic scenario and only works after PIN verification state is completed.
This approach has been tested with:
- Elli Charger Connect
- Porsche Mobile Charger Connect
- SMA Home Energy Manager 2.0
- Request and process full data
- Request partial data
- Delete Selectors
- Update Selectors
- Elements
- Send
- Full data
- Partial data
- Process partial data
- Delete Selectors
- Update Selectors
- Elements
- Request types
- Read
- Send
- Full Request
- Partial Request
- Partial Delete
- Receive
- Full Request
- Partial Request
- Partial Delete
- Send
- Reply
- Send
- Full Request
- Partial Request
- Partial Delete
- Receive
- Full Request
- Partial Request
- Partial Delete
- Send
- Notify
- Send
- Full Request
- Partial Request
- Partial Delete
- Receive
- Full Request
- Partial Request
- Partial Delete
- Send
- Write
- Send
- Full Request
- Partial Request
- Partial Delete
- Receive
- Full Request
- Partial Request
- Partial Delete
- Send
- Read
- Result message handling
- Handle incoming error results
- Handle incoming success results
- Respond with error result when processing failed
- Acknowledgement support
- Request
- Respond
- Use maximum response delay to timeout requests
- Detailed Discovery
- Read Messages
- Send
- Full Request
- Partial Request
- Receive
- Full Request
- Partial Request
- Send
- Reply Messages
- Send
- Full Request
- Partial Request
- Receive
- Full Request
- Partial Request
- Send
- Notify Messages
- Send
- Full Request
- Partial Request
- Receive
- Full Request
- Partial Request
- Send
- Read Messages
- Destination List
- Request and process full data
- Response full data
- Request and process partial data
- Response partial data
- Notify subscribers
- Binding
- Send Requests
- Add Binding
- Delete Binding
- Receive Requests
- Add Binding
- Delete Binding
- Send Requests
- Subscription
- Send Requests
- Add Subscription
- Delete Subscription
- Receive Requests
- Add Subscription
- Delete Subscription
- Notify subscribers
- Send Requests
- Use Case Discovery
- Read Messages
- Send
- Full Request
- Partial Request
- Receive
- Full Request
- Partial Request
- Send
- Reply Messages
- Send
- Full Request
- Partial Request
- Receive
- Full Request
- Partial Request
- Send
- Notify Messages
- Send
- Full Request
- Partial Request
- Receive
- Full Request
- Partial Request
- Send
- Read Messages
- Hearbeat Support
- Send hearbeats
- Receive hearbeats
All list types do support processing of incoming partial messages, including selectors and elements. Sending partial messages is possible but there is no special support implemented right now.
Use SetLogger
on Service
to set the logger which needs to conform to the logging.Logging
interface.
Example:
configuration = service.NewConfiguration(...)
h.myService = service.NewEEBUSService(configuration, h)
h.myService.SetLogging(h)