Skip to content

Commit 2a6167e

Browse files
Add support for heartbeat events in EG LPC/LPP (#120)
The Energy Guard implementations of LPC and LPP should also get incoming heartbeat events, so it can react on missing heartbeatss from the controllable systems.
2 parents 94653eb + 4c85022 commit 2a6167e

File tree

6 files changed

+40
-0
lines changed

6 files changed

+40
-0
lines changed

usecases/eg/lpc/events.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ func (e *LPC) HandleEvent(payload spineapi.EventPayload) {
1919
return
2020
}
2121

22+
if internal.IsHeartbeat(payload) && e.EventCB != nil {
23+
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateHeartbeat)
24+
return
25+
}
26+
2227
if payload.EventType != spineapi.EventTypeDataChange ||
2328
payload.ChangeType != spineapi.ElementChangeUpdate {
2429
return

usecases/eg/lpc/events_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ func (s *EgLPCSuite) Test_Events() {
4141
payload.Data = util.Ptr(model.DeviceConfigurationKeyValueListDataType{})
4242
s.sut.HandleEvent(payload)
4343

44+
payload.EventType = spineapi.EventTypeDataChange
45+
payload.ChangeType = spineapi.ElementChangeUpdate
46+
payload.Function = model.FunctionTypeDeviceDiagnosisHeartbeatData
47+
deviceDiagF := s.sut.LocalEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer)
48+
payload.LocalFeature = deviceDiagF
49+
payload.CmdClassifier = util.Ptr(model.CmdClassifierTypeNotify)
50+
payload.Data = util.Ptr(model.DeviceDiagnosisHeartbeatDataType{})
51+
s.sut.HandleEvent(payload)
52+
4453
payload.Data = util.Ptr(model.NodeManagementUseCaseDataType{})
4554
s.sut.HandleEvent(payload)
4655
}

usecases/eg/lpc/types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,10 @@ const (
3030
//
3131
// Use Case LPC, Scenario 2
3232
DataUpdateFailsafeDurationMinimum api.EventType = "eg-lpc-DataUpdateFailsafeDurationMinimum"
33+
34+
// Indicates a notify heartbeat event the application should care of.
35+
// E.g. going into or out of the Failsafe state
36+
//
37+
// Use Case LPC, Scenario 3
38+
DataUpdateHeartbeat api.EventType = "cs-lpc-DataUpdateHeartbeat"
3339
)

usecases/eg/lpp/events.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ func (e *LPP) HandleEvent(payload spineapi.EventPayload) {
2020
return
2121
}
2222

23+
if internal.IsHeartbeat(payload) && e.EventCB != nil {
24+
e.EventCB(payload.Ski, payload.Device, payload.Entity, DataUpdateHeartbeat)
25+
return
26+
}
27+
2328
if payload.EventType != spineapi.EventTypeDataChange ||
2429
payload.ChangeType != spineapi.ElementChangeUpdate {
2530
return

usecases/eg/lpp/events_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ func (s *EgLPPSuite) Test_Events() {
4141
payload.Data = util.Ptr(model.DeviceConfigurationKeyValueListDataType{})
4242
s.sut.HandleEvent(payload)
4343

44+
payload.EventType = spineapi.EventTypeDataChange
45+
payload.ChangeType = spineapi.ElementChangeUpdate
46+
payload.Function = model.FunctionTypeDeviceDiagnosisHeartbeatData
47+
deviceDiagF := s.sut.LocalEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer)
48+
payload.LocalFeature = deviceDiagF
49+
payload.CmdClassifier = util.Ptr(model.CmdClassifierTypeNotify)
50+
payload.Data = util.Ptr(model.DeviceDiagnosisHeartbeatDataType{})
51+
s.sut.HandleEvent(payload)
52+
4453
payload.Data = util.Ptr(model.NodeManagementUseCaseDataType{})
4554
s.sut.HandleEvent(payload)
4655
}

usecases/eg/lpp/types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,10 @@ const (
3030
//
3131
// Use Case LPC, Scenario 2
3232
DataUpdateFailsafeDurationMinimum api.EventType = "eg-lpp-DataUpdateFailsafeDurationMinimum"
33+
34+
// Indicates a notify heartbeat event the application should care of.
35+
// E.g. going into or out of the Failsafe state
36+
//
37+
// Use Case LPC, Scenario 3
38+
DataUpdateHeartbeat api.EventType = "cs-lpc-DataUpdateHeartbeat"
3339
)

0 commit comments

Comments
 (0)