Skip to content

Commit c379d19

Browse files
committed
Merge branch 'release/v0.1.1'
2 parents aac2e52 + 2a563b8 commit c379d19

13 files changed

Lines changed: 101 additions & 79 deletions

File tree

.github/workflows/default.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77
push:
88
branches:
99
- dev
10+
- main
1011
pull_request:
1112
workflow_call:
1213

@@ -36,3 +37,8 @@ jobs:
3637

3738
- name: Test
3839
run: go test -race -v -coverprofile=coverage.out -covermode=atomic ./...
40+
41+
- name: Send coverage
42+
uses: shogo82148/actions-goveralls@v1
43+
with:
44+
path-to-profile: coverage.out

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# eebus-go
22

3-
![Build Status](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=main)
3+
[![Build Status](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=main)](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=main)
4+
[![GoDoc](https://img.shields.io/badge/godoc-reference-5272B4)](https://godoc.org/github.com/enbility/eebus-go)
5+
[![Coverage Status](https://coveralls.io/repos/github/enbility/eebus-go/badge.svg?branch=main)](https://coveralls.io/github/enbility/eebus-go?branch=main)
6+
[![Go report](https://goreportcard.com/badge/github.com/enbility/eebus-go)](https://goreportcard.com/report/github.com/enbility/eebus-go)
47

58
This library provides a complete foundation for implementing [EEBUS](https://eebus.org) use cases. The use cases define various functional scenarios for different device categories, e.g. energy management systems, charging stations, heat pumps, and more.
69

@@ -238,6 +241,7 @@ Use `SetLogger` on `Service` to set the logger which needs to conform to the `lo
238241
Example:
239242

240243
```go
241-
h.myService = service.NewEEBUSService(serviceDescription, h)
244+
configuration = service.NewConfiguration(...)
245+
h.myService = service.NewEEBUSService(configuration, h)
242246
h.myService.SetLogging(h)
243247
```

cmd/evse/main.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ func (h *evse) run() {
6060
log.Fatal(err)
6161
}
6262

63-
serviceDescription, err := service.NewServiceDescription(
63+
configuration, err := service.NewConfiguration(
6464
"Demo", "Demo", "EVSE", "234567890",
65-
model.DeviceTypeTypeChargingStation, port, certificate)
65+
model.DeviceTypeTypeChargingStation, port, certificate, 230)
6666
if err != nil {
6767
log.Fatal(err)
6868
}
69-
serviceDescription.SetAlternateIdentifier("Demo-EVSE-234567890")
69+
configuration.SetAlternateIdentifier("Demo-EVSE-234567890")
7070

71-
h.myService = service.NewEEBUSService(serviceDescription, h)
71+
h.myService = service.NewEEBUSService(configuration, h)
7272
h.myService.SetLogging(h)
7373

7474
if err = h.myService.Setup(); err != nil {

cmd/hems/main.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ func (h *hems) run() {
6060
log.Fatal(err)
6161
}
6262

63-
serviceDescription, err := service.NewServiceDescription(
63+
configuration, err := service.NewConfiguration(
6464
"Demo", "Demo", "HEMS", "123456789",
65-
model.DeviceTypeTypeEnergyManagementSystem, port, certificate)
65+
model.DeviceTypeTypeEnergyManagementSystem, port, certificate, 230)
6666
if err != nil {
6767
log.Fatal(err)
6868
}
69-
serviceDescription.SetAlternateIdentifier("Demo-HEMS-123456789")
69+
configuration.SetAlternateIdentifier("Demo-HEMS-123456789")
7070

71-
h.myService = service.NewEEBUSService(serviceDescription, h)
71+
h.myService = service.NewEEBUSService(configuration, h)
7272
h.myService.SetLogging(h)
7373

7474
if err = h.myService.Setup(); err != nil {

features/measurement.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,17 @@ func (m *Measurement) Request() (*model.MsgCounterType, error) {
7070
// return current value of a defined scope
7171
func (m *Measurement) GetValueForScope(scope model.ScopeTypeType, electricalConnection *ElectricalConnection) (float64, error) {
7272
if m.featureRemote == nil {
73-
return 0.0, ErrDataNotAvailable
73+
return 0, ErrDataNotAvailable
7474
}
7575

7676
descRef, err := m.GetDescription()
7777
if err != nil {
78-
return 0.0, ErrMetadataNotAvailable
78+
return 0, ErrMetadataNotAvailable
7979
}
8080

8181
rData := m.featureRemote.Data(model.FunctionTypeMeasurementListData)
8282
if rData == nil {
83-
return 0.0, ErrDataNotAvailable
83+
return 0, ErrDataNotAvailable
8484
}
8585
data := rData.(*model.MeasurementListDataType)
8686

@@ -218,17 +218,17 @@ func (m *Measurement) GetDescriptionForScope(scope model.ScopeTypeType) (measure
218218
// return current SoC for measurements
219219
func (m *Measurement) GetSoC() (float64, error) {
220220
if m.featureRemote == nil {
221-
return 0.0, ErrDataNotAvailable
221+
return 0, ErrDataNotAvailable
222222
}
223223

224224
descRef, err := m.GetDescription()
225225
if err != nil {
226-
return 0.0, ErrMetadataNotAvailable
226+
return 0, ErrMetadataNotAvailable
227227
}
228228

229229
rData := m.featureRemote.Data(model.FunctionTypeMeasurementListData)
230230
if rData == nil {
231-
return 0.0, ErrDataNotAvailable
231+
return 0, ErrDataNotAvailable
232232
}
233233
data := rData.(*model.MeasurementListDataType)
234234

@@ -251,7 +251,7 @@ func (m *Measurement) GetSoC() (float64, error) {
251251
}
252252
}
253253

254-
return 0.0, ErrDataNotAvailable
254+
return 0, ErrDataNotAvailable
255255
}
256256

257257
type measurementConstraintMap map[model.MeasurementIdType]model.MeasurementConstraintsDataType

service/hub.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const shipWebsocketPath = "/ship/"
2626
const shipZeroConfServiceType = "_ship._tcp"
2727
const shipZeroConfDomain = "local."
2828

29-
// used for randomizing the connection initation delay
29+
// used for randomizing the connection initiation delay
3030
// this limits the possibility of concurrent connection attempts from both sides
3131
type connectionInitiationDelayTimeRange struct {
3232
// defines the minimum and maximum wait time for when to try to initate an connection
@@ -65,8 +65,8 @@ type connectionsHub struct {
6565
connectionAttemptCounter map[string]int
6666
connectionAttemptRunning map[string]bool
6767

68-
serviceDescription *ServiceDescription
69-
localService *ServiceDetails
68+
configuration *Configuration
69+
localService *ServiceDetails
7070

7171
serviceProvider serviceProvider
7272

@@ -88,21 +88,21 @@ type connectionsHub struct {
8888
muxMdns sync.Mutex
8989
}
9090

91-
func newConnectionsHub(serviceProvider serviceProvider, spineLocalDevice *spine.DeviceLocalImpl, serviceDescription *ServiceDescription, localService *ServiceDetails) (*connectionsHub, error) {
91+
func newConnectionsHub(serviceProvider serviceProvider, spineLocalDevice *spine.DeviceLocalImpl, configuration *Configuration, localService *ServiceDetails) (*connectionsHub, error) {
9292
hub := &connectionsHub{
9393
connections: make(map[string]*ship.ShipConnection),
9494
connectionAttemptCounter: make(map[string]int),
9595
connectionAttemptRunning: make(map[string]bool),
9696
pairedServices: make([]ServiceDetails, 0),
9797
serviceProvider: serviceProvider,
9898
spineLocalDevice: spineLocalDevice,
99-
serviceDescription: serviceDescription,
99+
configuration: configuration,
100100
localService: localService,
101101
}
102102

103103
localService.SKI = util.NormalizeSKI(localService.SKI)
104104

105-
mdns, err := newMDNS(localService.SKI, serviceDescription)
105+
mdns, err := newMDNS(localService.SKI, configuration)
106106
if err != nil {
107107
return nil, err
108108
}
@@ -251,14 +251,14 @@ func (h *connectionsHub) isSkiConnected(ski string) bool {
251251

252252
// start the ship websocket server
253253
func (h *connectionsHub) startWebsocketServer() error {
254-
addr := fmt.Sprintf(":%d", h.serviceDescription.port)
254+
addr := fmt.Sprintf(":%d", h.configuration.port)
255255
logging.Log.Debug("starting websocket server on", addr)
256256

257257
h.httpServer = &http.Server{
258258
Addr: addr,
259259
Handler: h,
260260
TLSConfig: &tls.Config{
261-
Certificates: []tls.Certificate{h.serviceDescription.certificate},
261+
Certificates: []tls.Certificate{h.configuration.certificate},
262262
ClientAuth: tls.RequireAnyClientCert, // SHIP 9: Client authentication is required
263263
CipherSuites: ciperSuites,
264264
VerifyPeerCertificate: func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error {
@@ -372,7 +372,7 @@ func (h *connectionsHub) connectFoundService(remoteService *ServiceDetails, host
372372
Proxy: http.ProxyFromEnvironment,
373373
HandshakeTimeout: 5 * time.Second,
374374
TLSClientConfig: &tls.Config{
375-
Certificates: []tls.Certificate{h.serviceDescription.certificate},
375+
Certificates: []tls.Certificate{h.configuration.certificate},
376376
InsecureSkipVerify: true,
377377
CipherSuites: ciperSuites,
378378
},

service/mdns.go

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ type MdnsSearch interface {
3434
}
3535

3636
type mdns struct {
37-
serviceDescription *ServiceDescription
38-
ski string
37+
configuration *Configuration
38+
ski string
3939

4040
isAnnounced bool
4141
isSearchingServices bool
@@ -58,12 +58,12 @@ type mdns struct {
5858
mux sync.Mutex
5959
}
6060

61-
func newMDNS(ski string, serviceDescription *ServiceDescription) (*mdns, error) {
61+
func newMDNS(ski string, configuration *Configuration) (*mdns, error) {
6262
m := &mdns{
63-
ski: ski,
64-
serviceDescription: serviceDescription,
65-
entries: make(map[string]MdnsEntry),
66-
cancelChan: make(chan bool),
63+
ski: ski,
64+
configuration: configuration,
65+
entries: make(map[string]MdnsEntry),
66+
cancelChan: make(chan bool),
6767
}
6868

6969
if av, err := m.setupAvahi(); err == nil {
@@ -112,10 +112,10 @@ func (m *mdns) interfaces() ([]net.Interface, []int32, error) {
112112
var ifaces []net.Interface
113113
var ifaceIndexes []int32
114114

115-
if len(m.serviceDescription.interfaces) > 0 {
116-
ifaces = make([]net.Interface, len(m.serviceDescription.interfaces))
117-
ifaceIndexes = make([]int32, len(m.serviceDescription.interfaces))
118-
for i, ifaceName := range m.serviceDescription.interfaces {
115+
if len(m.configuration.interfaces) > 0 {
116+
ifaces = make([]net.Interface, len(m.configuration.interfaces))
117+
ifaceIndexes = make([]int32, len(m.configuration.interfaces))
118+
for i, ifaceName := range m.configuration.interfaces {
119119
iface, err := net.InterfaceByName(ifaceName)
120120
if err != nil {
121121
return nil, nil, err
@@ -146,26 +146,26 @@ func (m *mdns) Announce() error {
146146
return err
147147
}
148148

149-
serviceIdentifier := m.serviceDescription.Identifier()
149+
serviceIdentifier := m.configuration.Identifier()
150150

151151
txt := []string{ // SHIP 7.3.2
152152
"txtvers=1",
153153
"path=" + shipWebsocketPath,
154154
"id=" + serviceIdentifier,
155155
"ski=" + m.ski,
156-
"brand=" + m.serviceDescription.deviceBrand,
157-
"model=" + m.serviceDescription.deviceModel,
158-
"type=" + string(m.serviceDescription.deviceType),
159-
"register=" + fmt.Sprintf("%v", m.serviceDescription.registerAutoAccept),
156+
"brand=" + m.configuration.deviceBrand,
157+
"model=" + m.configuration.deviceModel,
158+
"type=" + string(m.configuration.deviceType),
159+
"register=" + fmt.Sprintf("%v", m.configuration.registerAutoAccept),
160160
}
161161

162162
logging.Log.Debug("mdns: announce")
163163

164-
serviceName := m.serviceDescription.MdnsServiceName()
164+
serviceName := m.configuration.MdnsServiceName()
165165

166166
if m.av == nil {
167167
// use Zeroconf library if avahi is not available
168-
mDNSServer, err := zeroconf.Register(serviceName, shipZeroConfServiceType, shipZeroConfDomain, m.serviceDescription.port, txt, ifaces)
168+
mDNSServer, err := zeroconf.Register(serviceName, shipZeroConfServiceType, shipZeroConfDomain, m.configuration.port, txt, ifaces)
169169
if err == nil {
170170
m.zc = mDNSServer
171171

@@ -188,7 +188,7 @@ func (m *mdns) Announce() error {
188188
}
189189

190190
for _, iface := range ifaceIndexes {
191-
err = entryGroup.AddService(iface, avahi.ProtoUnspec, 0, serviceName, shipZeroConfServiceType, shipZeroConfDomain, "", uint16(m.serviceDescription.port), btxt)
191+
err = entryGroup.AddService(iface, avahi.ProtoUnspec, 0, serviceName, shipZeroConfServiceType, shipZeroConfDomain, "", uint16(m.configuration.port), btxt)
192192
if err != nil {
193193
return err
194194
}
@@ -317,7 +317,7 @@ func (m *mdns) resolveEntries() {
317317
case <-m.cancelChan:
318318
ctx.Done()
319319
case service := <-zcEntries:
320-
// Zeroconf has issues with merging mDNS data and sometimes reports non complety records
320+
// Zeroconf has issues with merging mDNS data and sometimes reports incomplete records
321321
if len(service.Text) == 0 {
322322
continue
323323
}

service/service.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type EEBUSServiceHandler interface {
2929
// A service is the central element of an EEBUS service
3030
// including its websocket server and a zeroconf service.
3131
type EEBUSService struct {
32-
ServiceDescription *ServiceDescription
32+
Configuration *Configuration
3333

3434
// The local service details
3535
LocalService *ServiceDetails
@@ -46,10 +46,10 @@ type EEBUSService struct {
4646
}
4747

4848
// creates a new EEBUS service
49-
func NewEEBUSService(ServiceDescription *ServiceDescription, serviceHandler EEBUSServiceHandler) *EEBUSService {
49+
func NewEEBUSService(configuration *Configuration, serviceHandler EEBUSServiceHandler) *EEBUSService {
5050
return &EEBUSService{
51-
ServiceDescription: ServiceDescription,
52-
serviceHandler: serviceHandler,
51+
Configuration: configuration,
52+
serviceHandler: serviceHandler,
5353
}
5454
}
5555

@@ -81,11 +81,11 @@ func (s *EEBUSService) SetLogging(logger logging.Logging) {
8181

8282
// Starts the service by initializeing mDNS and the server.
8383
func (s *EEBUSService) Setup() error {
84-
if s.ServiceDescription.port == 0 {
85-
s.ServiceDescription.port = defaultPort
84+
if s.Configuration.port == 0 {
85+
s.Configuration.port = defaultPort
8686
}
8787

88-
sd := s.ServiceDescription
88+
sd := s.Configuration
8989

9090
leaf, err := x509.ParseCertificate(sd.certificate.Certificate[0])
9191
if err != nil {
@@ -155,7 +155,7 @@ func (s *EEBUSService) Setup() error {
155155
s.spineLocalDevice.AddEntity(entity)
156156

157157
// Setup connections hub with mDNS and websocket connection handling
158-
hub, err := newConnectionsHub(s, s.spineLocalDevice, s.ServiceDescription, s.LocalService)
158+
hub, err := newConnectionsHub(s, s.spineLocalDevice, s.Configuration, s.LocalService)
159159
if err != nil {
160160
return err
161161
}

0 commit comments

Comments
 (0)