From b779bca324be309acf8b053ef7432dbad56c0418 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Mon, 12 Aug 2024 14:52:18 +0200 Subject: [PATCH 01/25] Update README badges --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a183314a..871a5eba 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # eebus-go -[![Build Status](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=master)](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=master) +[![Build Status](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=dev)](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=dev) [![GoDoc](https://img.shields.io/badge/godoc-reference-5272B4)](https://godoc.org/github.com/enbility/eebus-go) -[![Coverage Status](https://coveralls.io/repos/github/enbility/eebus-go/badge.svg?branch=master)](https://coveralls.io/github/enbility/eebus-go?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/enbility/eebus-go/badge.svg?branch=dev)](https://coveralls.io/github/enbility/eebus-go?branch=dev) [![Go report](https://goreportcard.com/badge/github.com/enbility/eebus-go)](https://goreportcard.com/report/github.com/enbility/eebus-go) [![CodeFactor](https://www.codefactor.io/repository/github/enbility/eebus-go/badge)](https://www.codefactor.io/repository/github/enbility/eebus-go) From 5c7fc4dc655b384fcf2e3cc801946e233bdf7d94 Mon Sep 17 00:00:00 2001 From: Simon Thelen Date: Thu, 15 Aug 2024 11:23:48 +0200 Subject: [PATCH 02/25] Fix potential race condition leading to nil dereference Split ApproveOrDeny*Limit public functions into a public part which takes a msgCounter and resolves it to a Message using the pendingLimits as before and a private part which takes a *Message and can be called directly from the internal WriteApprovalCallbacks. This removes the need to call FeatureLocalInterface.ApproveOrDenyWrite with an "empty" message when a message is not found in the pendingLimits for ApprovalRequests that don't match the current use case. Fixes #104 --- usecases/cs/lpc/public.go | 21 ++------------------- usecases/cs/lpc/usecase.go | 16 +++++++++++++++- usecases/cs/lpp/public.go | 21 ++------------------- usecases/cs/lpp/usecase.go | 16 +++++++++++++++- 4 files changed, 34 insertions(+), 40 deletions(-) diff --git a/usecases/cs/lpc/public.go b/usecases/cs/lpc/public.go index 156cfeb2..4c6148ae 100644 --- a/usecases/cs/lpc/public.go +++ b/usecases/cs/lpc/public.go @@ -7,7 +7,6 @@ import ( "github.com/enbility/eebus-go/api" "github.com/enbility/eebus-go/features/server" ucapi "github.com/enbility/eebus-go/usecases/api" - spineapi "github.com/enbility/spine-go/api" "github.com/enbility/spine-go/model" "github.com/enbility/spine-go/util" ) @@ -134,29 +133,13 @@ func (e *LPC) ApproveOrDenyConsumptionLimit(msgCounter model.MsgCounterType, app e.pendingMux.Lock() defer e.pendingMux.Unlock() - f := e.LocalEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - - result := model.ErrorType{ - ErrorNumber: model.ErrorNumberType(0), - } - msg, ok := e.pendingLimits[msgCounter] if !ok { - // it is not a limit of this usecase, so approve it - newMsg := &spineapi.Message{ - RequestHeader: &model.HeaderType{ - MsgCounter: &msgCounter, - }, - } - f.ApproveOrDenyWrite(newMsg, result) + // no pending limit for this msgCounter, this is a caller error return } - if !approve { - result.ErrorNumber = model.ErrorNumberType(7) - result.Description = util.Ptr(model.DescriptionType(reason)) - } - f.ApproveOrDenyWrite(msg, result) + e.approveOrDenyConsumptionLimit(msg, approve, reason) delete(e.pendingLimits, msgCounter) } diff --git a/usecases/cs/lpc/usecase.go b/usecases/cs/lpc/usecase.go index 167d75ad..f974a335 100644 --- a/usecases/cs/lpc/usecase.go +++ b/usecases/cs/lpc/usecase.go @@ -103,6 +103,20 @@ func (e *LPC) loadControlServerAndLimitId() (lc *server.LoadControl, limitid mod return lc, *description.LimitId, nil } +func (e *LPC) approveOrDenyConsumptionLimit(msg *spineapi.Message, approve bool, reason string) { + f := e.LocalEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) + + result := model.ErrorType{ + ErrorNumber: model.ErrorNumberType(0), + } + + if !approve { + result.ErrorNumber = model.ErrorNumberType(7) + result.Description = util.Ptr(model.DescriptionType(reason)) + } + f.ApproveOrDenyWrite(msg, result) +} + // callback invoked on incoming write messages to this // loadcontrol server feature. // the implementation only considers write messages for this use case and @@ -145,7 +159,7 @@ func (e *LPC) loadControlWriteCB(msg *spineapi.Message) { e.pendingMux.Unlock() // approve, because this is no request for this usecase - go e.ApproveOrDenyConsumptionLimit(*msg.RequestHeader.MsgCounter, true, "") + go e.approveOrDenyConsumptionLimit(msg, true, "") } func (e *LPC) AddFeatures() { diff --git a/usecases/cs/lpp/public.go b/usecases/cs/lpp/public.go index 29bb175a..15d47df2 100644 --- a/usecases/cs/lpp/public.go +++ b/usecases/cs/lpp/public.go @@ -7,7 +7,6 @@ import ( "github.com/enbility/eebus-go/api" "github.com/enbility/eebus-go/features/server" ucapi "github.com/enbility/eebus-go/usecases/api" - spineapi "github.com/enbility/spine-go/api" "github.com/enbility/spine-go/model" "github.com/enbility/spine-go/util" ) @@ -134,29 +133,13 @@ func (e *LPP) ApproveOrDenyProductionLimit(msgCounter model.MsgCounterType, appr e.pendingMux.Lock() defer e.pendingMux.Unlock() - f := e.LocalEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - - result := model.ErrorType{ - ErrorNumber: model.ErrorNumberType(0), - } - msg, ok := e.pendingLimits[msgCounter] if !ok { - // it is not a limit of this usecase, so approve it - newMsg := &spineapi.Message{ - RequestHeader: &model.HeaderType{ - MsgCounter: &msgCounter, - }, - } - f.ApproveOrDenyWrite(newMsg, result) + // no pending limit for this msgCounter, this is a caller error return } - if !approve { - result.ErrorNumber = model.ErrorNumberType(7) - result.Description = util.Ptr(model.DescriptionType(reason)) - } - f.ApproveOrDenyWrite(msg, result) + e.approveOrDenyProductionLimit(msg, approve, reason) delete(e.pendingLimits, msgCounter) } diff --git a/usecases/cs/lpp/usecase.go b/usecases/cs/lpp/usecase.go index 1f916a05..9d8a6d64 100644 --- a/usecases/cs/lpp/usecase.go +++ b/usecases/cs/lpp/usecase.go @@ -102,6 +102,20 @@ func (e *LPP) loadControlServerAndLimitId() (lc *server.LoadControl, limitid mod return lc, *description.LimitId, nil } +func (e *LPP) approveOrDenyProductionLimit(msg *spineapi.Message, approve bool, reason string) { + f := e.LocalEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) + + result := model.ErrorType{ + ErrorNumber: model.ErrorNumberType(0), + } + + if !approve { + result.ErrorNumber = model.ErrorNumberType(7) + result.Description = util.Ptr(model.DescriptionType(reason)) + } + f.ApproveOrDenyWrite(msg, result) +} + // callback invoked on incoming write messages to this // loadcontrol server feature. // the implementation only considers write messages for this use case and @@ -145,7 +159,7 @@ func (e *LPP) loadControlWriteCB(msg *spineapi.Message) { e.pendingMux.Unlock() // approve, because this is no request for this usecase - go e.ApproveOrDenyProductionLimit(*msg.RequestHeader.MsgCounter, true, "") + go e.approveOrDenyProductionLimit(msg, true, "") } func (e *LPP) AddFeatures() { From 052de4341610eb9f3babe5b83a65054b6cdd02ff Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 17 Aug 2024 21:51:55 +0200 Subject: [PATCH 03/25] Add workaround for PMCP reporting wrong uc address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PMCP device reports EV usecases at the entity address of the EVSE entity (e.g. “[1]”), instead of the EV entity (e.g. “[1,1]”) This change checks for the actor type to be an EV and patches the address to include the EV subentity if it doesn’t have it --- usecases/usecase/events.go | 6 +++ usecases/usecase/events_test.go | 71 +++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/usecases/usecase/events.go b/usecases/usecase/events.go index 4c9d10a8..0bab5b49 100644 --- a/usecases/usecase/events.go +++ b/usecases/usecase/events.go @@ -64,6 +64,12 @@ func (u *UseCaseBase) useCaseDataUpdate( // if the address is given, use that for further checks if uc.Address != nil { ucEntity := remoteDevice.Entity(uc.Address.Entity) + // the PMCP EVSE reports EV use cases with the address of the EVSE + if *uc.Actor == model.UseCaseActorTypeEV && len(uc.Address.Entity) == 1 { + // add the EV subentity to the address + evAddress := append(uc.Address.Entity, 1) + ucEntity = remoteDevice.Entity(evAddress) + } if ucEntity != nil { entitiesToCheck = append(entitiesToCheck, ucEntity) } diff --git a/usecases/usecase/events_test.go b/usecases/usecase/events_test.go index 6049b5bf..7d46190c 100644 --- a/usecases/usecase/events_test.go +++ b/usecases/usecase/events_test.go @@ -144,3 +144,74 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { result = s.uc.IsScenarioAvailableAtEntity(s.monitoredEntity, 1) assert.False(s.T(), result) } + +func (s *UseCaseSuite) Test_useCaseDataUpdate_PMCP() { + payload := spineapi.EventPayload{ + Device: s.remoteDevice, + Entity: s.remoteDevice.Entities()[0], + EventType: spineapi.EventTypeDataChange, + ChangeType: spineapi.ElementChangeUpdate, + Data: &model.NodeManagementUseCaseDataType{}, + } + s.uc.useCaseDataUpdate(payload) + + result := s.uc.IsScenarioAvailableAtEntity(s.monitoredEntity, 1) + assert.False(s.T(), result) + + address := &model.FeatureAddressType{ + Device: s.monitoredEntity.Device().Address(), + Entity: []model.AddressEntityType{0}, + Feature: util.Ptr(model.AddressFeatureType(0)), + } + nodeFeature := s.remoteDevice.FeatureByAddress(address) + + // the PMCP device reports the wrong entity address for the EV use cases :( + data := &model.NodeManagementUseCaseDataType{ + UseCaseInformation: []model.UseCaseInformationDataType{ + { + Address: &model.FeatureAddressType{ + Device: util.Ptr(model.AddressDeviceType("d:_i:19667_PorscheEVSE_0012345")), + Entity: []model.AddressEntityType{1}, + }, + Actor: util.Ptr(model.UseCaseActorTypeEVSE), + UseCaseSupport: []model.UseCaseSupportType{ + { + UseCaseName: util.Ptr(model.UseCaseNameType("evseCommissioningAndConfiguration")), + UseCaseVersion: util.Ptr(model.SpecificationVersionType("1.0.0")), + ScenarioSupport: []model.UseCaseScenarioSupportType{1, 2}, + }, + }, + }, + { + Address: &model.FeatureAddressType{ + Device: util.Ptr(model.AddressDeviceType("d:_i:19667_PorscheEVSE_0012345")), + Entity: []model.AddressEntityType{1}, // this should include the subentity 1 to point to the EV entity + }, + Actor: util.Ptr(model.UseCaseActorTypeEV), + UseCaseSupport: []model.UseCaseSupportType{ + { + UseCaseName: util.Ptr(model.UseCaseNameType("evCommissioningAndConfiguration")), + UseCaseVersion: util.Ptr(model.SpecificationVersionType("1.0.0")), + ScenarioSupport: []model.UseCaseScenarioSupportType{1, 2, 3, 6, 7, 8}, + }, + { + UseCaseName: util.Ptr(model.UseCaseNameType("overloadProtectionByEvChargingCurrentCurtailment")), + UseCaseVersion: util.Ptr(model.SpecificationVersionType("1.0.0")), + ScenarioSupport: []model.UseCaseScenarioSupportType{1, 2, 3}, + }, + { + UseCaseName: util.Ptr(model.UseCaseNameType("measurementOfElectricityDuringEvCharging")), + UseCaseVersion: util.Ptr(model.SpecificationVersionType("1.0.0")), + ScenarioSupport: []model.UseCaseScenarioSupportType{1}, + }, + }, + }, + }, + } + nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + + s.uc.useCaseDataUpdate(payload) + + result = s.uc.IsScenarioAvailableAtEntity(s.monitoredEntity, 1) + assert.True(s.T(), result) +} From 330aad85c4422cf6b02fc32c2ab93f73a69caad1 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 27 Aug 2024 13:10:01 +0200 Subject: [PATCH 04/25] Do not send initial requests in EVSOC The requests are currently doubled as EVCEM sends the same and EVSOC requires EVCEM anyway. Once the SPINE stack can handle non answered pending identical requests, simply comment this code out and add it later again, once SPINE has this ability. --- usecases/cem/evsoc/events.go | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/usecases/cem/evsoc/events.go b/usecases/cem/evsoc/events.go index 8d59f5be..21d5910d 100644 --- a/usecases/cem/evsoc/events.go +++ b/usecases/cem/evsoc/events.go @@ -3,7 +3,6 @@ package evsoc import ( "github.com/enbility/eebus-go/features/client" internal "github.com/enbility/eebus-go/usecases/internal" - "github.com/enbility/ship-go/logging" spineapi "github.com/enbility/spine-go/api" "github.com/enbility/spine-go/model" "github.com/enbility/spine-go/util" @@ -38,21 +37,25 @@ func (e *EVSOC) HandleEvent(payload spineapi.EventPayload) { // an EV was connected func (e *EVSOC) evConnected(entity spineapi.EntityRemoteInterface) { // initialise features, e.g. subscriptions, descriptions - if evMeasurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { - if _, err := evMeasurement.Subscribe(); err != nil { - logging.Log().Debug(err) - } + // TODO: Don't do these requests for now, only add it once SPINE supports handling filtering identical pending subscription requests + // Also: these are covered by EVCEM anyway, which is required + /* + if evMeasurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { + if _, err := evMeasurement.Subscribe(); err != nil { + logging.Log().Debug(err) + } - // get measurement descriptions - if _, err := evMeasurement.RequestDescriptions(nil, nil); err != nil { - logging.Log().Debug(err) - } + // get measurement descriptions + if _, err := evMeasurement.RequestDescriptions(nil, nil); err != nil { + logging.Log().Debug(err) + } - // get measurement constraints - if _, err := evMeasurement.RequestConstraints(nil, nil); err != nil { - logging.Log().Debug(err) + // get measurement constraints + if _, err := evMeasurement.RequestConstraints(nil, nil); err != nil { + logging.Log().Debug(err) + } } - } + */ } // the measurement data of an EV was updated From 9e534cd325b2819b20eeb89c9b698d0ad6f423f7 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 27 Aug 2024 15:29:52 +0200 Subject: [PATCH 05/25] Fix linter warnings --- features/internal/electricalconnection.go | 6 +++--- usecases/cem/cevc/public_scen1.go | 2 +- usecases/cem/evcc/public.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/features/internal/electricalconnection.go b/features/internal/electricalconnection.go index 295a1aa5..a6c3d5dd 100644 --- a/features/internal/electricalconnection.go +++ b/features/internal/electricalconnection.go @@ -152,7 +152,7 @@ func (e *ElectricalConnectionCommon) GetPermittedValueDataForFilter( var resultMin, resultMax, resultDefault float64 for _, set := range data[0].PermittedValueSet { - if set.Value != nil && len(set.Value) > 0 { + if len(set.Value) > 0 { resultDefault = set.Value[0].GetValue() } if set.Range != nil { @@ -247,12 +247,12 @@ func (e *ElectricalConnectionCommon) AdjustValueToBeWithinPermittedValuesForPara for _, element := range data[0].PermittedValueSet { // is a value set - if element.Value != nil && len(element.Value) > 0 { + if len(element.Value) > 0 { defaultValue = element.Value[0].GetValue() hasDefaultValue = true } // is a range set - if element.Range != nil && len(element.Range) > 0 { + if len(element.Range) > 0 { if element.Range[0].Min != nil { minValue = element.Range[0].Min.GetValue() } diff --git a/usecases/cem/cevc/public_scen1.go b/usecases/cem/cevc/public_scen1.go index 7b4bb963..f45b262e 100644 --- a/usecases/cem/cevc/public_scen1.go +++ b/usecases/cem/cevc/public_scen1.go @@ -32,7 +32,7 @@ func (e *CEVC) ChargeStrategy(entity spineapi.EntityRemoteInterface) ucapi.EVCha } // without time series slots, there is no known strategy - if data[0].TimeSeriesSlot == nil || len(data[0].TimeSeriesSlot) == 0 { + if len(data[0].TimeSeriesSlot) == 0 { return ucapi.EVChargeStrategyTypeUnknown } diff --git a/usecases/cem/evcc/public.go b/usecases/cem/evcc/public.go index 280c1630..bee47fcd 100644 --- a/usecases/cem/evcc/public.go +++ b/usecases/cem/evcc/public.go @@ -245,7 +245,7 @@ func (e *EVCC) ChargingPowerLimits(entity spineapi.EntityRemoteInterface) (float if dataSet[0].PermittedValueSet[0].Range[0].Max != nil { maxValue = dataSet[0].PermittedValueSet[0].Range[0].Max.GetValue() } - if dataSet[0].PermittedValueSet[0].Value != nil && len(dataSet[0].PermittedValueSet[0].Value) > 0 { + if len(dataSet[0].PermittedValueSet[0].Value) > 0 { standByValue = dataSet[0].PermittedValueSet[0].Value[0].GetValue() } From b64eb8787b74d524a09abd54a859ef444e0bcd86 Mon Sep 17 00:00:00 2001 From: Simon Thelen Date: Thu, 18 Jul 2024 10:26:10 +0200 Subject: [PATCH 06/25] Adjust EventType for ma-mpc UseCaseSupportUpdate to not mention oscev --- usecases/ma/mpc/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usecases/ma/mpc/types.go b/usecases/ma/mpc/types.go index e824ca2c..01892c1d 100644 --- a/usecases/ma/mpc/types.go +++ b/usecases/ma/mpc/types.go @@ -6,7 +6,7 @@ const ( // Update of the list of remote entities supporting the Use Case // // Use `RemoteEntities` to get the current data - UseCaseSupportUpdate api.EventType = "ma-mpc-oscev-UseCaseSupportUpdate" + UseCaseSupportUpdate api.EventType = "ma-mpc-UseCaseSupportUpdate" // Total momentary active power consumption or production // From 9736aaa7d28b5f24b08524e0081e141ef6760975 Mon Sep 17 00:00:00 2001 From: Simon Thelen Date: Thu, 18 Jul 2024 10:26:10 +0200 Subject: [PATCH 07/25] Adjust validActorTypes for MaMpc UseCase The actor in this use case should be a MonitoringAppliance, but it should connect to actors of type MonitoredUnit. --- usecases/ma/mpc/usecase.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usecases/ma/mpc/usecase.go b/usecases/ma/mpc/usecase.go index 393b8a7b..69a420cf 100644 --- a/usecases/ma/mpc/usecase.go +++ b/usecases/ma/mpc/usecase.go @@ -16,7 +16,7 @@ type MPC struct { var _ ucapi.MaMPCInterface = (*MPC)(nil) func NewMPC(localEntity spineapi.EntityLocalInterface, eventCB api.EntityEventCallback) *MPC { - validActorTypes := []model.UseCaseActorType{model.UseCaseActorTypeMonitoringAppliance} + validActorTypes := []model.UseCaseActorType{model.UseCaseActorTypeMonitoredUnit} validEntityTypes := []model.EntityTypeType{ model.EntityTypeTypeCompressor, model.EntityTypeTypeElectricalImmersionHeater, From 380041c91b209e4cd387153b19ac219f25d2510f Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Wed, 4 Sep 2024 12:57:26 +0200 Subject: [PATCH 08/25] Add full write support to some features Some old devices do not support partial writes. Therefor the complete dataset needs to be sent. The features `loadControl`, `deviceConfiguration` support this now, as these also support merges. --- features/client/deviceconfiguration.go | 23 ++- features/client/deviceconfiguration_test.go | 110 ++++++++++- features/client/feature.go | 3 +- features/client/loadcontrol.go | 29 ++- features/client/loadcontrol_test.go | 120 +++++++++++- .../internal/deviceclassification_test.go | 4 +- features/internal/deviceconfiguration_test.go | 12 +- features/internal/devicediagnosis_test.go | 12 +- .../internal/electricalconnection_test.go | 32 ++-- features/internal/identification_test.go | 4 +- features/internal/incentivetable_test.go | 10 +- features/internal/loadcontrol_test.go | 10 +- features/internal/measurement_test.go | 14 +- .../internal/smartenergymanagementps_test.go | 4 +- features/internal/timeseries_test.go | 12 +- go.mod | 20 +- go.sum | 44 ++--- usecases/cem/cevc/events_test.go | 8 +- usecases/cem/cevc/public_scen1_test.go | 26 +-- usecases/cem/cevc/public_scen2_test.go | 12 +- usecases/cem/cevc/public_scen3_test.go | 10 +- usecases/cem/cevc/public_scen4_test.go | 10 +- usecases/cem/cevc/public_test.go | 18 +- usecases/cem/evcc/events_test.go | 8 +- usecases/cem/evcc/public_test.go | 38 ++-- usecases/cem/evcem/events_test.go | 2 +- usecases/cem/evcem/public_test.go | 176 ++++++++++++++++-- usecases/cem/evsecc/events_test.go | 4 +- usecases/cem/evsecc/public_test.go | 8 +- usecases/cem/evsoc/events_test.go | 2 +- usecases/cem/evsoc/public_test.go | 8 +- usecases/cem/opev/events_test.go | 4 +- usecases/cem/opev/public_test.go | 2 +- usecases/cem/oscev/events_test.go | 4 +- usecases/cem/oscev/public_test.go | 2 +- usecases/cem/vabd/events_test.go | 2 +- usecases/cem/vabd/public_test.go | 16 +- usecases/cem/vapd/events_test.go | 4 +- usecases/cem/vapd/public_test.go | 12 +- usecases/cs/lpc/public_test.go | 4 +- usecases/cs/lpp/public_test.go | 4 +- usecases/eg/lpc/events_test.go | 6 +- usecases/eg/lpc/public_test.go | 32 ++-- usecases/eg/lpp/events_test.go | 6 +- usecases/eg/lpp/public_test.go | 32 ++-- usecases/internal/loadcontrol_test.go | 42 ++--- usecases/internal/manufacturerdata_test.go | 2 +- usecases/internal/measurement_test.go | 8 +- usecases/ma/mgcp/events_test.go | 4 +- usecases/ma/mgcp/public_test.go | 38 ++-- usecases/ma/mpc/events_test.go | 2 +- usecases/ma/mpc/public_test.go | 42 ++--- usecases/usecase/events_test.go | 14 +- 53 files changed, 737 insertions(+), 338 deletions(-) diff --git a/features/client/deviceconfiguration.go b/features/client/deviceconfiguration.go index d18a8659..6749dcd5 100644 --- a/features/client/deviceconfiguration.go +++ b/features/client/deviceconfiguration.go @@ -59,13 +59,32 @@ func (d *DeviceConfiguration) WriteKeyValues(data []model.DeviceConfigurationKey return nil, api.ErrMissingData } + filters := []model.FilterType{*model.NewFilterTypePartial()} + + // does the remote server feature not support partials? + operation := d.featureRemote.Operations()[model.FunctionTypeDeviceConfigurationKeyValueListData] + if operation == nil || !operation.WritePartial() { + filters = nil + // we need to send all data + updateData := &model.DeviceConfigurationKeyValueListDataType{ + DeviceConfigurationKeyValueData: data, + } + + if mergedData, err := d.featureRemote.UpdateData(false, model.FunctionTypeDeviceConfigurationKeyValueListData, updateData, nil, nil); err == nil { + data = mergedData.([]model.DeviceConfigurationKeyValueDataType) + } + } + cmd := model.CmdType{ - Function: util.Ptr(model.FunctionTypeDeviceConfigurationKeyValueListData), - Filter: []model.FilterType{*model.NewFilterTypePartial()}, DeviceConfigurationKeyValueListData: &model.DeviceConfigurationKeyValueListDataType{ DeviceConfigurationKeyValueData: data, }, } + if filters != nil { + cmd.Filter = filters + cmd.Function = util.Ptr(model.FunctionTypeDeviceConfigurationKeyValueListData) + } + return d.remoteDevice.Sender().Write(d.featureLocal.Address(), d.featureRemote.Address(), cmd) } diff --git a/features/client/deviceconfiguration_test.go b/features/client/deviceconfiguration_test.go index 0bf9ae39..6e499f95 100644 --- a/features/client/deviceconfiguration_test.go +++ b/features/client/deviceconfiguration_test.go @@ -20,11 +20,16 @@ func TestDeviceConfigurationSuite(t *testing.T) { type DeviceConfigurationSuite struct { suite.Suite - localEntity spineapi.EntityLocalInterface - remoteEntity spineapi.EntityRemoteInterface + localEntity spineapi.EntityLocalInterface + localEntityPartial spineapi.EntityLocalInterface + + remoteEntity spineapi.EntityRemoteInterface + remoteEntityPartial spineapi.EntityRemoteInterface + mockRemoteEntity *mocks.EntityRemoteInterface - deviceConfiguration *DeviceConfiguration + deviceConfiguration *DeviceConfiguration + deviceConfigurationPartial *DeviceConfiguration } const remoteSki string = "testremoteski" @@ -47,6 +52,21 @@ func (s *DeviceConfigurationSuite) BeforeTest(suiteName, testName string) { }, ) + s.localEntityPartial, s.remoteEntityPartial = setupFeatures( + s.T(), + mockWriter, + []featureFunctions{ + { + featureType: model.FeatureTypeTypeDeviceConfiguration, + functions: []model.FunctionType{ + model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, + model.FunctionTypeDeviceConfigurationKeyValueListData, + }, + partial: true, + }, + }, + ) + mockRemoteDevice := mocks.NewDeviceRemoteInterface(s.T()) s.mockRemoteEntity = mocks.NewEntityRemoteInterface(s.T()) mockRemoteFeature := mocks.NewFeatureRemoteInterface(s.T()) @@ -66,6 +86,10 @@ func (s *DeviceConfigurationSuite) BeforeTest(suiteName, testName string) { s.deviceConfiguration, err = NewDeviceConfiguration(s.localEntity, s.remoteEntity) assert.Nil(s.T(), err) assert.NotNil(s.T(), s.deviceConfiguration) + + s.deviceConfigurationPartial, err = NewDeviceConfiguration(s.localEntityPartial, s.remoteEntityPartial) + assert.Nil(s.T(), err) + assert.NotNil(s.T(), s.deviceConfiguration) } func (s *DeviceConfigurationSuite) Test_RequestKeyValueDescriptions() { @@ -104,6 +128,34 @@ func (s *DeviceConfigurationSuite) Test_WriteValues() { assert.NotNil(s.T(), err) assert.Nil(s.T(), counter) + rF := s.remoteEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) + data1 := rF.DataCopy(model.FunctionTypeDeviceConfigurationKeyValueListData).(*model.DeviceConfigurationKeyValueListDataType) + assert.Nil(s.T(), data1) + + defaultData := &model.DeviceConfigurationKeyValueListDataType{ + DeviceConfigurationKeyValueData: []model.DeviceConfigurationKeyValueDataType{ + { + KeyId: util.Ptr(model.DeviceConfigurationKeyIdType(0)), + IsValueChangeable: util.Ptr(true), + Value: &model.DeviceConfigurationKeyValueValueType{ + ScaledNumber: model.NewScaledNumberType(16), + }, + }, + { + KeyId: util.Ptr(model.DeviceConfigurationKeyIdType(1)), + IsValueChangeable: util.Ptr(true), + Value: &model.DeviceConfigurationKeyValueValueType{ + ScaledNumber: model.NewScaledNumberType(32), + }, + }, + }, + } + _, err1 := rF.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, defaultData, nil, nil) + assert.Nil(s.T(), err1) + data1 = rF.DataCopy(model.FunctionTypeDeviceConfigurationKeyValueListData).(*model.DeviceConfigurationKeyValueListDataType) + assert.NotNil(s.T(), data1) + assert.Equal(s.T(), 2, len(data1.DeviceConfigurationKeyValueData)) + data = []model.DeviceConfigurationKeyValueDataType{ { KeyId: util.Ptr(model.DeviceConfigurationKeyIdType(0)), @@ -116,3 +168,55 @@ func (s *DeviceConfigurationSuite) Test_WriteValues() { assert.Nil(s.T(), err) assert.NotNil(s.T(), counter) } + +// test with partial support +func (s *DeviceConfigurationSuite) Test_WriteValues_Partial() { + counter, err := s.deviceConfigurationPartial.WriteKeyValues(nil) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), counter) + + data := []model.DeviceConfigurationKeyValueDataType{} + counter, err = s.deviceConfigurationPartial.WriteKeyValues(data) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), counter) + + rF := s.remoteEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) + data1 := rF.DataCopy(model.FunctionTypeDeviceConfigurationKeyValueListData).(*model.DeviceConfigurationKeyValueListDataType) + assert.Nil(s.T(), data1) + + defaultData := &model.DeviceConfigurationKeyValueListDataType{ + DeviceConfigurationKeyValueData: []model.DeviceConfigurationKeyValueDataType{ + { + KeyId: util.Ptr(model.DeviceConfigurationKeyIdType(0)), + IsValueChangeable: util.Ptr(true), + Value: &model.DeviceConfigurationKeyValueValueType{ + ScaledNumber: model.NewScaledNumberType(16), + }, + }, + { + KeyId: util.Ptr(model.DeviceConfigurationKeyIdType(1)), + IsValueChangeable: util.Ptr(true), + Value: &model.DeviceConfigurationKeyValueValueType{ + ScaledNumber: model.NewScaledNumberType(32), + }, + }, + }, + } + _, err1 := rF.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, defaultData, nil, nil) + assert.Nil(s.T(), err1) + data1 = rF.DataCopy(model.FunctionTypeDeviceConfigurationKeyValueListData).(*model.DeviceConfigurationKeyValueListDataType) + assert.NotNil(s.T(), data1) + assert.Equal(s.T(), 2, len(data1.DeviceConfigurationKeyValueData)) + + data = []model.DeviceConfigurationKeyValueDataType{ + { + KeyId: util.Ptr(model.DeviceConfigurationKeyIdType(0)), + Value: &model.DeviceConfigurationKeyValueValueType{ + ScaledNumber: model.NewScaledNumberType(10), + }, + }, + } + counter, err = s.deviceConfigurationPartial.WriteKeyValues(data) + assert.Nil(s.T(), err) + assert.NotNil(s.T(), counter) +} diff --git a/features/client/feature.go b/features/client/feature.go index cc695970..ea80246f 100644 --- a/features/client/feature.go +++ b/features/client/feature.go @@ -141,7 +141,8 @@ func (f *Feature) requestData(function model.FunctionType, selectors any, elemen } // remove the selectors if the remote does not allow partial reads - if selectors != nil && !op.ReadPartial() { + // or partial writes, because in that case we need to have all data + if selectors != nil && (!op.ReadPartial() || !op.WritePartial()) { selectors = nil elements = nil } diff --git a/features/client/loadcontrol.go b/features/client/loadcontrol.go index 2ec8f0c9..b8c7c42e 100644 --- a/features/client/loadcontrol.go +++ b/features/client/loadcontrol.go @@ -72,25 +72,44 @@ func (l *LoadControl) WriteLimitData( } var filters []model.FilterType + var delFilter *model.FilterType + partialFilter := model.NewFilterTypePartial() if deleteElements != nil && deleteSelectors != nil { - delFilter := model.FilterType{ + delFilter = &model.FilterType{ CmdControl: &model.CmdControlType{ Delete: &model.ElementTagType{}, }, LoadControlLimitListDataSelectors: deleteSelectors, LoadControlLimitDataElements: deleteElements, } - filters = append(filters, delFilter) + filters = append(filters, *delFilter) + } + filters = append(filters, *partialFilter) + + // does the remote server feature not support partials? + operation := l.featureRemote.Operations()[model.FunctionTypeLoadControlLimitListData] + if operation == nil || !operation.WritePartial() { + filters = nil + // we need to send all data + updateData := &model.LoadControlLimitListDataType{ + LoadControlLimitData: data, + } + + if mergedData, err := l.featureRemote.UpdateData(false, model.FunctionTypeLoadControlLimitListData, updateData, partialFilter, delFilter); err == nil { + data = mergedData.([]model.LoadControlLimitDataType) + } } - filters = append(filters, *model.NewFilterTypePartial()) cmd := model.CmdType{ - Function: util.Ptr(model.FunctionTypeLoadControlLimitListData), - Filter: filters, LoadControlLimitListData: &model.LoadControlLimitListDataType{ LoadControlLimitData: data, }, } + if filters != nil { + cmd.Filter = filters + cmd.Function = util.Ptr(model.FunctionTypeLoadControlLimitListData) + } + return l.remoteDevice.Sender().Write(l.featureLocal.Address(), l.featureRemote.Address(), cmd) } diff --git a/features/client/loadcontrol_test.go b/features/client/loadcontrol_test.go index 50db7e60..209b8e63 100644 --- a/features/client/loadcontrol_test.go +++ b/features/client/loadcontrol_test.go @@ -19,10 +19,15 @@ func TestLoadControlSuite(t *testing.T) { type LoadControlSuite struct { suite.Suite - localEntity spineapi.EntityLocalInterface - remoteEntity spineapi.EntityRemoteInterface + localEntity spineapi.EntityLocalInterface + localEntityPartial spineapi.EntityLocalInterface + + remoteEntity spineapi.EntityRemoteInterface + remoteEntityPartial spineapi.EntityRemoteInterface + + loadControl *LoadControl + loadControlPartial *LoadControl - loadControl *LoadControl sentMessage []byte } @@ -44,6 +49,23 @@ func (s *LoadControlSuite) BeforeTest(suiteName, testName string) { model.FunctionTypeLoadControlLimitConstraintsListData, model.FunctionTypeLoadControlLimitListData, }, + partial: false, + }, + }, + ) + + s.localEntityPartial, s.remoteEntityPartial = setupFeatures( + s.T(), + s, + []featureFunctions{ + { + featureType: model.FeatureTypeTypeLoadControl, + functions: []model.FunctionType{ + model.FunctionTypeLoadControlLimitDescriptionListData, + model.FunctionTypeLoadControlLimitConstraintsListData, + model.FunctionTypeLoadControlLimitListData, + }, + partial: true, }, }, ) @@ -56,6 +78,10 @@ func (s *LoadControlSuite) BeforeTest(suiteName, testName string) { s.loadControl, err = NewLoadControl(s.localEntity, s.remoteEntity) assert.Nil(s.T(), err) assert.NotNil(s.T(), s.loadControl) + + s.loadControlPartial, err = NewLoadControl(s.localEntityPartial, s.remoteEntityPartial) + assert.Nil(s.T(), err) + assert.NotNil(s.T(), s.loadControl) } func (s *LoadControlSuite) Test_RequestLimitDescription() { @@ -107,6 +133,34 @@ func (s *LoadControlSuite) Test_WriteLimitValues() { assert.NotNil(s.T(), err) assert.Nil(s.T(), counter) + rF := s.remoteEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) + data1 := rF.DataCopy(model.FunctionTypeLoadControlLimitListData).(*model.LoadControlLimitListDataType) + assert.Nil(s.T(), data1) + + defaultData := &model.LoadControlLimitListDataType{ + LoadControlLimitData: []model.LoadControlLimitDataType{ + { + LimitId: util.Ptr(model.LoadControlLimitIdType(0)), + IsLimitChangeable: util.Ptr(true), + IsLimitActive: util.Ptr(false), + Value: model.NewScaledNumberType(16), + TimePeriod: nil, + }, + { + LimitId: util.Ptr(model.LoadControlLimitIdType(0)), + Value: model.NewScaledNumberType(10), + TimePeriod: &model.TimePeriodType{ + EndTime: model.NewAbsoluteOrRelativeTimeTypeFromDuration(time.Minute * 5), + }, + }, + }, + } + _, err1 := rF.UpdateData(true, model.FunctionTypeLoadControlLimitListData, defaultData, nil, nil) + assert.Nil(s.T(), err1) + data1 = rF.DataCopy(model.FunctionTypeLoadControlLimitListData).(*model.LoadControlLimitListDataType) + assert.NotNil(s.T(), data1) + assert.Equal(s.T(), 2, len(data1.LoadControlLimitData)) + data = []model.LoadControlLimitDataType{ { LimitId: util.Ptr(model.LoadControlLimitIdType(0)), @@ -119,6 +173,64 @@ func (s *LoadControlSuite) Test_WriteLimitValues() { counter, err = s.loadControl.WriteLimitData(data, nil, nil) assert.Nil(s.T(), err) assert.NotNil(s.T(), counter) +} + +// test with partial support +func (s *LoadControlSuite) Test_WriteLimitValues_Partial() { + counter, err := s.loadControlPartial.WriteLimitData(nil, nil, nil) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), counter) + + data := []model.LoadControlLimitDataType{} + counter, err = s.loadControlPartial.WriteLimitData(data, nil, nil) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), counter) + + rF := s.remoteEntityPartial.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) + data1 := rF.DataCopy(model.FunctionTypeLoadControlLimitListData).(*model.LoadControlLimitListDataType) + assert.Nil(s.T(), data1) + + defaultData := &model.LoadControlLimitListDataType{ + LoadControlLimitData: []model.LoadControlLimitDataType{ + { + LimitId: util.Ptr(model.LoadControlLimitIdType(0)), + IsLimitChangeable: util.Ptr(true), + IsLimitActive: util.Ptr(false), + Value: model.NewScaledNumberType(16), + TimePeriod: nil, + }, + { + LimitId: util.Ptr(model.LoadControlLimitIdType(0)), + Value: model.NewScaledNumberType(10), + TimePeriod: &model.TimePeriodType{ + EndTime: model.NewAbsoluteOrRelativeTimeTypeFromDuration(time.Minute * 5), + }, + }, + }, + } + + _, err1 := rF.UpdateData(true, model.FunctionTypeLoadControlLimitListData, defaultData, nil, nil) + assert.Nil(s.T(), err1) + data1 = rF.DataCopy(model.FunctionTypeLoadControlLimitListData).(*model.LoadControlLimitListDataType) + assert.NotNil(s.T(), data1) + assert.Equal(s.T(), 2, len(data1.LoadControlLimitData)) + + data = []model.LoadControlLimitDataType{ + { + LimitId: util.Ptr(model.LoadControlLimitIdType(0)), + Value: model.NewScaledNumberType(10), + TimePeriod: &model.TimePeriodType{ + EndTime: model.NewAbsoluteOrRelativeTimeTypeFromDuration(time.Minute * 5), + }, + }, + } + counter, err = s.loadControlPartial.WriteLimitData(data, nil, nil) + assert.Nil(s.T(), err) + assert.NotNil(s.T(), counter) + + data1 = rF.DataCopy(model.FunctionTypeLoadControlLimitListData).(*model.LoadControlLimitListDataType) + assert.NotNil(s.T(), data1) + assert.Equal(s.T(), 2, len(data1.LoadControlLimitData)) deleteSelectors := &model.LoadControlLimitListDataSelectorsType{ LimitId: util.Ptr(model.LoadControlLimitIdType(0)), @@ -126,7 +238,7 @@ func (s *LoadControlSuite) Test_WriteLimitValues() { deleteElements := &model.LoadControlLimitDataElementsType{ TimePeriod: &model.TimePeriodElementsType{}, } - counter, err = s.loadControl.WriteLimitData(data, deleteSelectors, deleteElements) + counter, err = s.loadControlPartial.WriteLimitData(data, deleteSelectors, deleteElements) assert.Nil(s.T(), err) assert.NotNil(s.T(), counter) } diff --git a/features/internal/deviceclassification_test.go b/features/internal/deviceclassification_test.go index 29395663..657b663c 100644 --- a/features/internal/deviceclassification_test.go +++ b/features/internal/deviceclassification_test.go @@ -80,8 +80,8 @@ func (s *DeviceClassificationSuite) Test_GetManufacturerDetails() { ManufacturerLabel: util.Ptr(model.LabelType("label")), ManufacturerDescription: util.Ptr(model.DescriptionType("description")), } - s.remoteFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, fData, nil, nil) - s.localFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, fData, nil, nil) result, err = s.remoteSut.GetManufacturerDetails() assert.Nil(s.T(), err) diff --git a/features/internal/deviceconfiguration_test.go b/features/internal/deviceconfiguration_test.go index cca780ae..0fd035e2 100644 --- a/features/internal/deviceconfiguration_test.go +++ b/features/internal/deviceconfiguration_test.go @@ -89,7 +89,7 @@ func (s *DeviceConfigurationSuite) Test_CheckEventPayloadDataForFilter() { }, } - fErr := s.remoteFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) fErr = s.localFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) @@ -115,7 +115,7 @@ func (s *DeviceConfigurationSuite) Test_CheckEventPayloadDataForFilter() { }, } - fErr = s.remoteFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) fErr = s.localFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) @@ -412,8 +412,8 @@ func (s *DeviceConfigurationSuite) addDescription() { }, }, } - s.remoteFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, fData, nil, nil) - s.localFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, fData, nil, nil) } func (s *DeviceConfigurationSuite) addData() { @@ -463,6 +463,6 @@ func (s *DeviceConfigurationSuite) addData() { }, }, } - s.remoteFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, fData, nil, nil) - s.localFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, fData, nil, nil) } diff --git a/features/internal/devicediagnosis_test.go b/features/internal/devicediagnosis_test.go index 0db7f4f1..203a3b73 100644 --- a/features/internal/devicediagnosis_test.go +++ b/features/internal/devicediagnosis_test.go @@ -72,8 +72,8 @@ func (s *DeviceDiagnosisSuite) Test_GetState() { OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeNormalOperation), PowerSupplyCondition: util.Ptr(model.PowerSupplyConditionTypeGood), } - s.localFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, fData, nil, nil) result, err = s.localSut.GetState() assert.Nil(s.T(), err) @@ -96,8 +96,8 @@ func (s *DeviceDiagnosisSuite) Test_IsHeartbeatWithinDuration() { HeartbeatTimeout: model.NewDurationType(time.Second * 4), } - s.localFeature.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) result = s.localSut.IsHeartbeatWithinDuration(time.Second * 10) assert.Equal(s.T(), false, result) @@ -105,8 +105,8 @@ func (s *DeviceDiagnosisSuite) Test_IsHeartbeatWithinDuration() { assert.Equal(s.T(), false, result) data.Timestamp = model.NewAbsoluteOrRelativeTimeTypeFromTime(now) - s.localFeature.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) result = s.localSut.IsHeartbeatWithinDuration(time.Second * 10) assert.Equal(s.T(), true, result) diff --git a/features/internal/electricalconnection_test.go b/features/internal/electricalconnection_test.go index a489d217..f82b138b 100644 --- a/features/internal/electricalconnection_test.go +++ b/features/internal/electricalconnection_test.go @@ -108,7 +108,7 @@ func (s *ElectricalConnectionSuite) Test_CheckEventPayloadDataForFilter() { fErr := s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) - fErr = s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, descData, nil, nil) + _, fErr = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) exists = s.localSut.CheckEventPayloadDataForFilter(nil, filter) @@ -680,7 +680,7 @@ func (s *ElectricalConnectionSuite) Test_EVCurrentLimits() { fErr := s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) - fErr = s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) minData, maxData, defaultData, err = s.localSut.GetPhaseCurrentLimits(nil) @@ -720,7 +720,7 @@ func (s *ElectricalConnectionSuite) Test_EVCurrentLimits() { } fErr = s.localMeasFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measData, nil, nil) assert.Nil(s.T(), fErr) - fErr = s.remoteMeasFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measData, nil, nil) + _, fErr = s.remoteMeasFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measData, nil, nil) assert.Nil(s.T(), fErr) type permittedStruct struct { @@ -810,7 +810,7 @@ func (s *ElectricalConnectionSuite) Test_EVCurrentLimits() { fErr := s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) - fErr = s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + _, fErr = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) minData, maxData, defaultData, err = s.localSut.GetPhaseCurrentLimits(measData.MeasurementDescriptionData) @@ -856,8 +856,8 @@ func (s *ElectricalConnectionSuite) addDescription() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, fData, nil, nil) } func (s *ElectricalConnectionSuite) addCharacteristics() { @@ -874,8 +874,8 @@ func (s *ElectricalConnectionSuite) addCharacteristics() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionCharacteristicListData, fData, nil, nil) } func (s *ElectricalConnectionSuite) addParamDescriptionCurrents() { @@ -953,8 +953,8 @@ func (s *ElectricalConnectionSuite) addParamDescriptionCurrents() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) } func (s *ElectricalConnectionSuite) addParamDescriptionPower() { @@ -968,8 +968,8 @@ func (s *ElectricalConnectionSuite) addParamDescriptionPower() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) } func (s *ElectricalConnectionSuite) addPermittedValueSet() { @@ -1045,8 +1045,8 @@ func (s *ElectricalConnectionSuite) addPermittedValueSet() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) } func (s *ElectricalConnectionSuite) addPermittedValueSetEmptyElli() { @@ -1067,6 +1067,6 @@ func (s *ElectricalConnectionSuite) addPermittedValueSetEmptyElli() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, fData, nil, nil) } diff --git a/features/internal/identification_test.go b/features/internal/identification_test.go index ad23af98..39000104 100644 --- a/features/internal/identification_test.go +++ b/features/internal/identification_test.go @@ -129,6 +129,6 @@ func (s *IdentificationSuite) addData() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeIdentificationListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeIdentificationListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeIdentificationListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeIdentificationListData, fData, nil, nil) } diff --git a/features/internal/incentivetable_test.go b/features/internal/incentivetable_test.go index ae9d7a65..4901444f 100644 --- a/features/internal/incentivetable_test.go +++ b/features/internal/incentivetable_test.go @@ -154,7 +154,7 @@ func (s *IncentiveTableSuite) addData() { }, } s.localFeature.UpdateData(model.FunctionTypeIncentiveTableData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeIncentiveTableData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeIncentiveTableData, fData, nil, nil) } func (s *IncentiveTableSuite) addDescription() { @@ -192,8 +192,8 @@ func (s *IncentiveTableSuite) addDescription() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeIncentiveTableDescriptionData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeIncentiveTableDescriptionData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeIncentiveTableDescriptionData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeIncentiveTableDescriptionData, fData, nil, nil) } func (s *IncentiveTableSuite) addConstraints() { @@ -214,6 +214,6 @@ func (s *IncentiveTableSuite) addConstraints() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeIncentiveTableConstraintsData, fData, nil, nil) } diff --git a/features/internal/loadcontrol_test.go b/features/internal/loadcontrol_test.go index e4339083..b94c7bca 100644 --- a/features/internal/loadcontrol_test.go +++ b/features/internal/loadcontrol_test.go @@ -111,7 +111,7 @@ func (s *LoadControlSuite) Test_CheckEventPayloadDataForFilter() { fErr := s.localFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) - fErr = s.remoteFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr = s.remoteFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) exists = s.localSut.CheckEventPayloadDataForFilter(nil, filter) @@ -335,8 +335,8 @@ func (s *LoadControlSuite) addDescription() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, fData, nil, nil) } func (s *LoadControlSuite) addData() { @@ -350,6 +350,6 @@ func (s *LoadControlSuite) addData() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, fData, nil, nil) } diff --git a/features/internal/measurement_test.go b/features/internal/measurement_test.go index 293759b3..4d0e55c0 100644 --- a/features/internal/measurement_test.go +++ b/features/internal/measurement_test.go @@ -98,7 +98,7 @@ func (s *MeasurementSuite) Test_MeasurementCheckPayloadDataForScope() { fErr := s.localFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) - fErr = s.remoteFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr = s.remoteFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) exists = s.localSut.CheckEventPayloadDataForFilter(nil, filter) @@ -325,8 +325,8 @@ func (s *MeasurementSuite) addDescription() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, fData, nil, nil) } func (s *MeasurementSuite) addConstraints() { @@ -346,8 +346,8 @@ func (s *MeasurementSuite) addConstraints() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeMeasurementConstraintsListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeMeasurementConstraintsListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeMeasurementConstraintsListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeMeasurementConstraintsListData, fData, nil, nil) } func (s *MeasurementSuite) addData() { @@ -366,6 +366,6 @@ func (s *MeasurementSuite) addData() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeMeasurementListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeMeasurementListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeMeasurementListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeMeasurementListData, fData, nil, nil) } diff --git a/features/internal/smartenergymanagementps_test.go b/features/internal/smartenergymanagementps_test.go index b8edb6ce..d9ec6e06 100644 --- a/features/internal/smartenergymanagementps_test.go +++ b/features/internal/smartenergymanagementps_test.go @@ -82,6 +82,6 @@ func (s *SmartEnergyManagementPsSuite) addData() { NodeScheduleInformation: &model.PowerSequenceNodeScheduleInformationDataType{}, Alternatives: []model.SmartEnergyManagementPsAlternativesType{}, } - s.localFeature.UpdateData(model.FunctionTypeSmartEnergyManagementPsData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeSmartEnergyManagementPsData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeSmartEnergyManagementPsData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeSmartEnergyManagementPsData, fData, nil, nil) } diff --git a/features/internal/timeseries_test.go b/features/internal/timeseries_test.go index 755befb5..a0f2670f 100644 --- a/features/internal/timeseries_test.go +++ b/features/internal/timeseries_test.go @@ -233,8 +233,8 @@ func (s *TimeSeriesSuite) addData() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeTimeSeriesListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeTimeSeriesListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeTimeSeriesListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, fData, nil, nil) } func (s *TimeSeriesSuite) addDescription() { @@ -250,8 +250,8 @@ func (s *TimeSeriesSuite) addDescription() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, fData, nil, nil) } func (s *TimeSeriesSuite) addConstraints() { @@ -272,6 +272,6 @@ func (s *TimeSeriesSuite) addConstraints() { }, }, } - s.localFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, fData, nil, nil) - s.remoteFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, fData, nil, nil) + _ = s.localFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeTimeSeriesConstraintsListData, fData, nil, nil) } diff --git a/go.mod b/go.mod index 52f01153..8817ed02 100644 --- a/go.mod +++ b/go.mod @@ -11,23 +11,23 @@ require ( require ( github.com/ahmetb/go-linq/v3 v3.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/enbility/zeroconf/v2 v2.0.0-20240210101930-d0004078577b // indirect + github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2 // indirect + github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/golanguzb70/lrucache v1.2.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/holoplot/go-avahi v0.0.0-20240210093433-b8dc0fc11e7e // indirect - github.com/miekg/dns v1.1.61 // indirect + github.com/miekg/dns v1.1.62 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rickb777/date v1.20.6 // indirect github.com/rickb777/plural v1.4.2 // indirect github.com/stretchr/objx v0.5.2 // indirect gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a // indirect go.uber.org/mock v0.4.0 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/tools v0.22.0 // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/tools v0.24.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -35,3 +35,7 @@ retract ( v0.2.2 // Contains retractions only. v0.2.1 // Published accidentally. ) + +replace github.com/enbility/ship-go => github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 + +replace github.com/enbility/spine-go => github.com/enbility/spine-go v0.0.0-20240903070433-dd8261993071 diff --git a/go.sum b/go.sum index edba30f5..076518cb 100644 --- a/go.sum +++ b/go.sum @@ -2,12 +2,14 @@ github.com/ahmetb/go-linq/v3 v3.2.0 h1:BEuMfp+b59io8g5wYzNoFe9pWPalRklhlhbiU3hYZ github.com/ahmetb/go-linq/v3 v3.2.0/go.mod h1:haQ3JfOeWK8HpVxMtHHEMPVgBKiYyQ+f1/kLZh/cj9U= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/enbility/ship-go v0.5.3 h1:P8eA/WDz3hq18zEKzqCB697OA1sVFiZkTF51Cx4tyGU= -github.com/enbility/ship-go v0.5.3/go.mod h1:jewJWYQ10jNhsnhS1C4jESx3CNmDa5HNWZjBhkTug5Y= -github.com/enbility/spine-go v0.6.2 h1:uxEUGLcaaA3PzkaTYTe4Ic64PElFlMQcfcES0O4Dk1c= -github.com/enbility/spine-go v0.6.2/go.mod h1:6AbRXzd0fLVGFJdT60YQACe1WskwdjiznCfljQ+Ud6s= -github.com/enbility/zeroconf/v2 v2.0.0-20240210101930-d0004078577b h1:sg3c6LJ4eWffwtt9SW0lgcIX4Oh274vwdJnNFNNrDco= -github.com/enbility/zeroconf/v2 v2.0.0-20240210101930-d0004078577b/go.mod h1:BjzRRiYX6mWdOgku1xxDE+NsV8PijTby7Q7BkYVdfDU= +github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2 h1:voP4zFVNvVWxlV22T1EUAdZ0VlqVV1pkFLhoTTPgwbA= +github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2/go.mod h1:KJXUEgg/b4XZzS+OFfqnykHREsinuNSL/IzJ+nU43P8= +github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 h1:i/n9UFYf660TyC8Y48P3MDxLaWWKRNW3pFjEOVzPzto= +github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825/go.mod h1:dzymc1D7BDZUTLVHVt9JRRkFLlBrlUmRKyLJvAe07Mc= +github.com/enbility/spine-go v0.0.0-20240903070433-dd8261993071 h1:rjvpnD3xTrSPdU6AQK4miwl/gZQ84CJ6gv/kEEguBME= +github.com/enbility/spine-go v0.0.0-20240903070433-dd8261993071/go.mod h1:6AbRXzd0fLVGFJdT60YQACe1WskwdjiznCfljQ+Ud6s= +github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= +github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450/go.mod h1:1sUbJ+VE7yLNyRzGoCMjoDWtdZ+bW4aYBKx2+Rw+9hs= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golanguzb70/lrucache v1.2.0 h1:VjpjmB4VTf9VXBtZTJGcgcN0CNFM5egDrrSjkGyQOlg= @@ -16,10 +18,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/holoplot/go-avahi v0.0.0-20240210093433-b8dc0fc11e7e h1:XOKmPp6CgtFByseoBaL5Ew9b6NWSie+nr6pMFeO0Tvc= -github.com/holoplot/go-avahi v0.0.0-20240210093433-b8dc0fc11e7e/go.mod h1:WRfsMEGa+MvsfqqKmS7Ye1jrnfRW6kfF/CTP9UMZj0Q= -github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= -github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -36,18 +36,18 @@ gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a h1:DxppxFKRqJ8 gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a/go.mod h1:NREvu3a57BaK0R1+ztrEzHWiZAihohNLQ6trPxlIqZI= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/usecases/cem/cevc/events_test.go b/usecases/cem/cevc/events_test.go index eb6ffe79..d55d6e91 100644 --- a/usecases/cem/cevc/events_test.go +++ b/usecases/cem/cevc/events_test.go @@ -95,7 +95,7 @@ func (s *CemCEVCSuite) Test_evTimeSeriesDescriptionDataUpdate() { } rTimeFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr := rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, timeDesc, nil, nil) + _, fErr := rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, timeDesc, nil, nil) assert.Nil(s.T(), fErr) s.sut.evTimeSeriesDescriptionDataUpdate(payload) @@ -120,7 +120,7 @@ func (s *CemCEVCSuite) Test_evTimeSeriesDescriptionDataUpdate() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err := s.sut.EnergyDemand(s.evEntity) @@ -148,7 +148,7 @@ func (s *CemCEVCSuite) Test_evTimeSeriesDescriptionDataUpdate() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, constData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesConstraintsListData, constData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evTimeSeriesDescriptionDataUpdate(payload) @@ -167,7 +167,7 @@ func (s *CemCEVCSuite) Test_evTimeSeriesDescriptionDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeIncentiveTable, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, incConstData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeIncentiveTableConstraintsData, incConstData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evTimeSeriesDescriptionDataUpdate(payload) diff --git a/usecases/cem/cevc/public_scen1_test.go b/usecases/cem/cevc/public_scen1_test.go index 1d63e48f..2438951c 100644 --- a/usecases/cem/cevc/public_scen1_test.go +++ b/usecases/cem/cevc/public_scen1_test.go @@ -26,7 +26,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -43,7 +43,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -59,7 +59,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { } rTimeFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, timeDescData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, timeDescData, nil, nil) assert.Nil(s.T(), fErr) timeData := &model.TimeSeriesListDataType{ @@ -70,7 +70,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -89,7 +89,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -110,7 +110,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -130,7 +130,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -151,7 +151,7 @@ func (s *CemCEVCSuite) Test_ChargeStrategy() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.ChargeStrategy(s.evEntity) @@ -185,7 +185,7 @@ func (s *CemCEVCSuite) Test_EnergySingleDemand() { } rTimeFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr := rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, timeDescData, nil, nil) + _, fErr := rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, timeDescData, nil, nil) assert.Nil(s.T(), fErr) timeData := &model.TimeSeriesListDataType{ @@ -196,7 +196,7 @@ func (s *CemCEVCSuite) Test_EnergySingleDemand() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err = s.sut.EnergyDemand(s.evEntity) @@ -223,7 +223,7 @@ func (s *CemCEVCSuite) Test_EnergySingleDemand() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err = s.sut.EnergyDemand(s.evEntity) @@ -253,7 +253,7 @@ func (s *CemCEVCSuite) Test_EnergySingleDemand() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err = s.sut.EnergyDemand(s.evEntity) @@ -282,7 +282,7 @@ func (s *CemCEVCSuite) Test_EnergySingleDemand() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err = s.sut.EnergyDemand(s.evEntity) diff --git a/usecases/cem/cevc/public_scen2_test.go b/usecases/cem/cevc/public_scen2_test.go index 730d1dd1..bae6d0a6 100644 --- a/usecases/cem/cevc/public_scen2_test.go +++ b/usecases/cem/cevc/public_scen2_test.go @@ -41,7 +41,7 @@ func (s *CemCEVCSuite) Test_TimeSlotConstraints() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, constData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeTimeSeriesConstraintsListData, constData, nil, nil) assert.Nil(s.T(), fErr) constraints, err = s.sut.TimeSlotConstraints(s.evEntity) @@ -73,7 +73,7 @@ func (s *CemCEVCSuite) Test_WritePowerLimits() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamDesc, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamDesc, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WritePowerLimits(s.evEntity, data) @@ -88,7 +88,7 @@ func (s *CemCEVCSuite) Test_WritePowerLimits() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, elPermDesc, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, elPermDesc, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WritePowerLimits(s.evEntity, data) @@ -112,7 +112,7 @@ func (s *CemCEVCSuite) Test_WritePowerLimits() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, elPermDesc, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, elPermDesc, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WritePowerLimits(s.evEntity, data) @@ -128,7 +128,7 @@ func (s *CemCEVCSuite) Test_WritePowerLimits() { } rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WritePowerLimits(s.evEntity, data) @@ -204,7 +204,7 @@ func (s *CemCEVCSuite) Test_WritePowerLimits() { }, } - fErr := rFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, constData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeTimeSeriesConstraintsListData, constData, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WritePowerLimits(s.evEntity, data.slots) diff --git a/usecases/cem/cevc/public_scen3_test.go b/usecases/cem/cevc/public_scen3_test.go index 822034a8..06795ea1 100644 --- a/usecases/cem/cevc/public_scen3_test.go +++ b/usecases/cem/cevc/public_scen3_test.go @@ -33,7 +33,7 @@ func (s *CemCEVCSuite) Test_IncentiveConstraints() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeIncentiveTable, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) assert.Nil(s.T(), fErr) constraints, err = s.sut.IncentiveConstraints(s.evEntity) @@ -51,7 +51,7 @@ func (s *CemCEVCSuite) Test_IncentiveConstraints() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) assert.Nil(s.T(), fErr) constraints, err = s.sut.IncentiveConstraints(s.evEntity) @@ -81,7 +81,7 @@ func (s *CemCEVCSuite) Test_WriteIncentiveTableDescriptions() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeIncentiveTable, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeIncentiveTableDescriptionData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeIncentiveTableDescriptionData, descData, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WriteIncentiveTableDescriptions(s.evEntity, data) @@ -137,7 +137,7 @@ func (s *CemCEVCSuite) Test_WriteIncentives() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeIncentiveTable, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WriteIncentives(s.evEntity, data) @@ -214,7 +214,7 @@ func (s *CemCEVCSuite) Test_WriteIncentives() { }, } - fErr := rFeature.UpdateData(model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeIncentiveTableConstraintsData, constData, nil, nil) assert.Nil(s.T(), fErr) err = s.sut.WriteIncentives(s.evEntity, data.slots) diff --git a/usecases/cem/cevc/public_scen4_test.go b/usecases/cem/cevc/public_scen4_test.go index e744acb0..26e03411 100644 --- a/usecases/cem/cevc/public_scen4_test.go +++ b/usecases/cem/cevc/public_scen4_test.go @@ -23,7 +23,7 @@ func (s *CemCEVCSuite) Test_ChargePlanConstaints() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.ChargePlanConstraints(s.evEntity) @@ -40,7 +40,7 @@ func (s *CemCEVCSuite) Test_ChargePlanConstaints() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeTimeSeriesListData, data, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, data, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.ChargePlanConstraints(s.evEntity) @@ -72,7 +72,7 @@ func (s *CemCEVCSuite) Test_ChargePlanConstaints() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeTimeSeriesListData, data, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, data, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.ChargePlanConstraints(s.evEntity) @@ -111,7 +111,7 @@ func (s *CemCEVCSuite) Test_ChargePlan() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.ChargePlan(s.evEntity) @@ -166,7 +166,7 @@ func (s *CemCEVCSuite) Test_ChargePlan() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.ChargePlan(s.evEntity) diff --git a/usecases/cem/cevc/public_test.go b/usecases/cem/cevc/public_test.go index fe7fd816..51a722fd 100644 --- a/usecases/cem/cevc/public_test.go +++ b/usecases/cem/cevc/public_test.go @@ -19,7 +19,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { } rTimeFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeTimeSeries, model.RoleTypeServer) - fErr := rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesConstraintsListData, timeConst, nil, nil) + _, fErr := rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesConstraintsListData, timeConst, nil, nil) assert.Nil(s.T(), fErr) timeDesc := &model.TimeSeriesDescriptionListDataType{ @@ -46,7 +46,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesDescriptionListData, timeDesc, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesDescriptionListData, timeDesc, nil, nil) assert.Nil(s.T(), fErr) incDesc := &model.IncentiveTableDescriptionDataType{ @@ -63,7 +63,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { } rIncentiveFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeIncentiveTable, model.RoleTypeServer) - fErr = rIncentiveFeature.UpdateData(model.FunctionTypeIncentiveTableDescriptionData, incDesc, nil, nil) + _, fErr = rIncentiveFeature.UpdateData(true, model.FunctionTypeIncentiveTableDescriptionData, incDesc, nil, nil) assert.Nil(s.T(), fErr) // demand, No Profile No Timer demand @@ -86,7 +86,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err := s.sut.EnergyDemand(s.evEntity) @@ -127,7 +127,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) // demand, profile + timer with 80% target and no climate, minSoC reached @@ -156,7 +156,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err = s.sut.EnergyDemand(s.evEntity) @@ -197,7 +197,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) // demand, profile with 25% min SoC, minSoC not reached, no timer @@ -242,7 +242,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) demand, err = s.sut.EnergyDemand(s.evEntity) @@ -278,7 +278,7 @@ func (s *CemCEVCSuite) Test_CoordinatedChargingScenarios() { }, } - fErr = rTimeFeature.UpdateData(model.FunctionTypeTimeSeriesListData, timeData, nil, nil) + _, fErr = rTimeFeature.UpdateData(true, model.FunctionTypeTimeSeriesListData, timeData, nil, nil) assert.Nil(s.T(), fErr) } diff --git a/usecases/cem/evcc/events_test.go b/usecases/cem/evcc/events_test.go index 5296967f..01dc22a2 100644 --- a/usecases/cem/evcc/events_test.go +++ b/usecases/cem/evcc/events_test.go @@ -101,7 +101,7 @@ func (s *CemEVCCSuite) Test_evConfigurationDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evConfigurationDataUpdate(payload) @@ -161,7 +161,7 @@ func (s *CemEVCCSuite) Test_evOperatingStateDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, data, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, data, nil, nil) assert.Nil(s.T(), fErr) s.sut.evOperatingStateDataUpdate(payload) @@ -218,7 +218,7 @@ func (s *CemEVCCSuite) Test_evManufacturerDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceClassification, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, data, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, data, nil, nil) assert.Nil(s.T(), fErr) s.sut.evManufacturerDataUpdate(payload) @@ -249,7 +249,7 @@ func (s *CemEVCCSuite) Test_evElectricalPermittedValuesUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evElectricalPermittedValuesUpdate(payload) diff --git a/usecases/cem/evcc/public_test.go b/usecases/cem/evcc/public_test.go index 453ed96c..56ad2eeb 100644 --- a/usecases/cem/evcc/public_test.go +++ b/usecases/cem/evcc/public_test.go @@ -23,7 +23,7 @@ func (s *CemEVCCSuite) Test_ChargeState() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ChargeState(s.evEntity) @@ -34,7 +34,7 @@ func (s *CemEVCCSuite) Test_ChargeState() { OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeStandby), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ChargeState(s.evEntity) @@ -45,7 +45,7 @@ func (s *CemEVCCSuite) Test_ChargeState() { OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeFailure), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ChargeState(s.evEntity) @@ -56,7 +56,7 @@ func (s *CemEVCCSuite) Test_ChargeState() { OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeFinished), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ChargeState(s.evEntity) @@ -67,7 +67,7 @@ func (s *CemEVCCSuite) Test_ChargeState() { OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeInAlarm), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ChargeState(s.evEntity) @@ -90,7 +90,7 @@ func (s *CemEVCCSuite) Test_EVConnected() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, stateData, nil, nil) assert.Nil(s.T(), fErr) data = s.sut.EVConnected(s.evEntity) @@ -116,7 +116,7 @@ func (s *CemEVCCSuite) Test_EVCommunicationStandard() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CommunicationStandard(s.evEntity) @@ -133,7 +133,7 @@ func (s *CemEVCCSuite) Test_EVCommunicationStandard() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CommunicationStandard(s.evEntity) @@ -151,7 +151,7 @@ func (s *CemEVCCSuite) Test_EVCommunicationStandard() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, devData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, devData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CommunicationStandard(s.evEntity) @@ -178,7 +178,7 @@ func (s *CemEVCCSuite) Test_EVAsymmetricChargingSupport() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.AsymmetricChargingSupport(s.evEntity) @@ -195,7 +195,7 @@ func (s *CemEVCCSuite) Test_EVAsymmetricChargingSupport() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.AsymmetricChargingSupport(s.evEntity) @@ -213,7 +213,7 @@ func (s *CemEVCCSuite) Test_EVAsymmetricChargingSupport() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, devData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, devData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.AsymmetricChargingSupport(s.evEntity) @@ -245,7 +245,7 @@ func (s *CemEVCCSuite) Test_EVIdentification() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeIdentification, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeIdentificationListData, idData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeIdentificationListData, idData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Identifications(s.evEntity) @@ -267,7 +267,7 @@ func (s *CemEVCCSuite) Test_EVManufacturerData() { descData := &model.DeviceClassificationManufacturerDataType{} rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceClassification, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err := s.sut.ManufacturerData(s.evEntity) @@ -281,7 +281,7 @@ func (s *CemEVCCSuite) Test_EVManufacturerData() { SerialNumber: util.Ptr(model.DeviceClassificationStringType("12345")), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ManufacturerData(s.evEntity) @@ -316,7 +316,7 @@ func (s *CemEVCCSuite) Test_EVChargingPowerLimits() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) minData, maxData, standByData, err = s.sut.ChargingPowerLimits(s.evEntity) @@ -375,7 +375,7 @@ func (s *CemEVCCSuite) Test_EVChargingPowerLimits() { ElectricalConnectionPermittedValueSetData: dataSet, } - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) minData, maxData, standByData, err = s.sut.ChargingPowerLimits(s.evEntity) @@ -401,7 +401,7 @@ func (s *CemEVCCSuite) Test_EVInSleepMode() { descData := &model.DeviceDiagnosisStateDataType{} rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.IsInSleepMode(s.evEntity) @@ -412,7 +412,7 @@ func (s *CemEVCCSuite) Test_EVInSleepMode() { OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeStandby), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.IsInSleepMode(s.evEntity) diff --git a/usecases/cem/evcem/events_test.go b/usecases/cem/evcem/events_test.go index f206380e..a4d42853 100644 --- a/usecases/cem/evcem/events_test.go +++ b/usecases/cem/evcem/events_test.go @@ -116,7 +116,7 @@ func (s *CemEVCEMSuite) Test_evMeasurementDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evMeasurementDataUpdate(payload) diff --git a/usecases/cem/evcem/public_test.go b/usecases/cem/evcem/public_test.go index 72c11adf..812f75b5 100644 --- a/usecases/cem/evcem/public_test.go +++ b/usecases/cem/evcem/public_test.go @@ -26,7 +26,7 @@ func (s *CemEVCEMSuite) Test_EVConnectedPhases() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PhasesConnected(s.evEntity) @@ -42,7 +42,7 @@ func (s *CemEVCEMSuite) Test_EVConnectedPhases() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PhasesConnected(s.evEntity) @@ -72,7 +72,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -91,7 +91,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase() { } rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.evEntity) @@ -107,7 +107,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.evEntity) @@ -126,7 +126,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.evEntity) @@ -144,7 +144,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.evEntity) @@ -162,7 +162,147 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = s.sut.CurrentPerPhase(s.evEntity) + assert.Nil(s.T(), err) + assert.Equal(s.T(), 10.0, data[0]) +} + +func (s *CemEVCEMSuite) Test_EVCurrentPerPhase_AudiConnect() { + data, err := s.sut.CurrentPerPhase(s.mockRemoteEntity) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + data, err = s.sut.CurrentPerPhase(s.evEntity) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + paramDesc := &model.ElectricalConnectionParameterDescriptionListDataType{ + ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{ + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(1)), + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasuredInReferenceTo: util.Ptr(model.ElectricalConnectionPhaseNameTypeNeutral), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(2)), + MeasurementId: util.Ptr(model.MeasurementIdType(4)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasuredInReferenceTo: util.Ptr(model.ElectricalConnectionPhaseNameTypeNeutral), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(3)), + MeasurementId: util.Ptr(model.MeasurementIdType(7)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasuredInReferenceTo: util.Ptr(model.ElectricalConnectionPhaseNameTypeNeutral), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(8)), + ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal), + }, + }, + } + + rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = s.sut.PowerPerPhase(s.evEntity) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + measDesc := &model.MeasurementDescriptionListDataType{ + MeasurementDescriptionData: []model.MeasurementDescriptionDataType{ + { + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + MeasurementType: util.Ptr(model.MeasurementTypeTypeCurrent), + CommodityType: util.Ptr(model.CommodityTypeTypeElectricity), + Unit: util.Ptr(model.UnitOfMeasurementTypeA), + ScopeType: util.Ptr(model.ScopeTypeTypeACCurrent), + }, + { + MeasurementId: util.Ptr(model.MeasurementIdType(4)), + MeasurementType: util.Ptr(model.MeasurementTypeTypePower), + CommodityType: util.Ptr(model.CommodityTypeTypeElectricity), + Unit: util.Ptr(model.UnitOfMeasurementTypeW), + ScopeType: util.Ptr(model.ScopeTypeTypeACPower), + }, + { + MeasurementId: util.Ptr(model.MeasurementIdType(7)), + MeasurementType: util.Ptr(model.MeasurementTypeTypeEnergy), + CommodityType: util.Ptr(model.CommodityTypeTypeElectricity), + Unit: util.Ptr(model.UnitOfMeasurementTypeWh), + ScopeType: util.Ptr(model.ScopeTypeTypeCharge), + }, + }, + } + + rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = s.sut.CurrentPerPhase(s.evEntity) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + measData := &model.MeasurementListDataType{ + MeasurementData: []model.MeasurementDataType{ + { + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + Value: model.NewScaledNumberType(10), + }, + }, + } + + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = s.sut.CurrentPerPhase(s.evEntity) + assert.Nil(s.T(), err) + assert.Equal(s.T(), 10.0, data[0]) + + now := time.Now().Add(-50 * time.Second) + + measData = &model.MeasurementListDataType{ + MeasurementData: []model.MeasurementDataType{ + { + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + Value: model.NewScaledNumberType(10), + Timestamp: model.NewAbsoluteOrRelativeTimeTypeFromTime(now), + ValueSource: util.Ptr(model.MeasurementValueSourceTypeMeasuredValue), + }, + { + MeasurementId: util.Ptr(model.MeasurementIdType(4)), + Value: model.NewScaledNumberType(10), + Timestamp: model.NewAbsoluteOrRelativeTimeTypeFromTime(now), + ValueSource: util.Ptr(model.MeasurementValueSourceTypeMeasuredValue), + }, + { + MeasurementId: util.Ptr(model.MeasurementIdType(7)), + Value: model.NewScaledNumberType(10), + Timestamp: model.NewAbsoluteOrRelativeTimeTypeFromTime(now), + ValueSource: util.Ptr(model.MeasurementValueSourceTypeMeasuredValue), + }, + }, + } + + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.evEntity) @@ -192,7 +332,7 @@ func (s *CemEVCEMSuite) Test_EVPowerPerPhase_Power() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -211,7 +351,7 @@ func (s *CemEVCEMSuite) Test_EVPowerPerPhase_Power() { } rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -227,7 +367,7 @@ func (s *CemEVCEMSuite) Test_EVPowerPerPhase_Power() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -306,7 +446,7 @@ func (s *CemEVCEMSuite) Test_EVPowerPerPhase_Current() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -368,7 +508,7 @@ func (s *CemEVCEMSuite) Test_EVPowerPerPhase_Current() { } rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -404,7 +544,7 @@ func (s *CemEVCEMSuite) Test_EVPowerPerPhase_Current() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.evEntity) @@ -433,7 +573,7 @@ func (s *CemEVCEMSuite) Test_EVChargedEnergy() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyCharged(s.evEntity) @@ -449,7 +589,7 @@ func (s *CemEVCEMSuite) Test_EVChargedEnergy() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyCharged(s.evEntity) @@ -521,7 +661,7 @@ func (s *CemEVCEMSuite) Test_EVChargedEnergy_ElliGen1() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyCharged(s.evEntity) @@ -557,7 +697,7 @@ func (s *CemEVCEMSuite) Test_EVChargedEnergy_ElliGen1() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyCharged(s.evEntity) diff --git a/usecases/cem/evsecc/events_test.go b/usecases/cem/evsecc/events_test.go index a70c2b94..65568369 100644 --- a/usecases/cem/evsecc/events_test.go +++ b/usecases/cem/evsecc/events_test.go @@ -65,7 +65,7 @@ func (s *CemEVSECCSuite) Test_evseManufacturerDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evseEntity, model.FeatureTypeTypeDeviceClassification, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, data, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, data, nil, nil) assert.Nil(s.T(), fErr) s.sut.evseManufacturerDataUpdate(payload) @@ -90,7 +90,7 @@ func (s *CemEVSECCSuite) Test_evseStateUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evseEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, data, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, data, nil, nil) assert.Nil(s.T(), fErr) s.sut.evseStateUpdate(payload) diff --git a/usecases/cem/evsecc/public_test.go b/usecases/cem/evsecc/public_test.go index a07ae7d0..a2cb4ccd 100644 --- a/usecases/cem/evsecc/public_test.go +++ b/usecases/cem/evsecc/public_test.go @@ -19,7 +19,7 @@ func (s *CemEVSECCSuite) Test_EVSEManufacturerData() { descData := &model.DeviceClassificationManufacturerDataType{} rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evseEntity, model.FeatureTypeTypeDeviceClassification, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err := s.sut.ManufacturerData(s.evseEntity) @@ -33,7 +33,7 @@ func (s *CemEVSECCSuite) Test_EVSEManufacturerData() { SerialNumber: util.Ptr(model.DeviceClassificationStringType("12345")), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ManufacturerData(s.evseEntity) @@ -63,7 +63,7 @@ func (s *CemEVSECCSuite) Test_EVSEOperatingState() { descData := &model.DeviceDiagnosisStateDataType{} rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evseEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) assert.Nil(s.T(), fErr) data, errCode, err = s.sut.OperatingState(s.evseEntity) @@ -76,7 +76,7 @@ func (s *CemEVSECCSuite) Test_EVSEOperatingState() { LastErrorCode: util.Ptr(model.LastErrorCodeType("error")), } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceDiagnosisStateData, descData, nil, nil) assert.Nil(s.T(), fErr) data, errCode, err = s.sut.OperatingState(s.evseEntity) diff --git a/usecases/cem/evsoc/events_test.go b/usecases/cem/evsoc/events_test.go index 29083997..365c7f7d 100644 --- a/usecases/cem/evsoc/events_test.go +++ b/usecases/cem/evsoc/events_test.go @@ -72,7 +72,7 @@ func (s *CemEVSOCSuite) Test_evMeasurementDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.eventCalled = false diff --git a/usecases/cem/evsoc/public_test.go b/usecases/cem/evsoc/public_test.go index 29d5159e..63775643 100644 --- a/usecases/cem/evsoc/public_test.go +++ b/usecases/cem/evsoc/public_test.go @@ -32,7 +32,7 @@ func (s *CemEVSOCSuite) Test_StateOfCharge() { nodemgmtEntity := s.remoteDevice.Entity([]model.AddressEntityType{0}) nodeFeature := s.remoteDevice.FeatureByEntityTypeAndRole(nodemgmtEntity, model.FeatureTypeTypeNodeManagement, model.RoleTypeSpecial) - fErr := nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, ucData, nil, nil) + _, fErr := nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, ucData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.StateOfCharge(s.evEntity) @@ -51,7 +51,7 @@ func (s *CemEVSOCSuite) Test_StateOfCharge() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, measDesc, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.StateOfCharge(s.evEntity) @@ -66,7 +66,7 @@ func (s *CemEVSOCSuite) Test_StateOfCharge() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.StateOfCharge(s.evEntity) @@ -82,7 +82,7 @@ func (s *CemEVSOCSuite) Test_StateOfCharge() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.StateOfCharge(s.evEntity) diff --git a/usecases/cem/opev/events_test.go b/usecases/cem/opev/events_test.go index 4e96591c..45d658c9 100644 --- a/usecases/cem/opev/events_test.go +++ b/usecases/cem/opev/events_test.go @@ -85,7 +85,7 @@ func (s *CemOPEVSuite) Test_evElectricalPermittedValuesUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evElectricalPermittedValuesUpdate(payload) @@ -152,7 +152,7 @@ func (s *CemOPEVSuite) Test_evLoadControlLimitDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evLoadControlLimitDataUpdate(payload) diff --git a/usecases/cem/opev/public_test.go b/usecases/cem/opev/public_test.go index 7dd8b38d..e3b864f7 100644 --- a/usecases/cem/opev/public_test.go +++ b/usecases/cem/opev/public_test.go @@ -30,7 +30,7 @@ func (s *CemOPEVSuite) Test_Public() { }, }, } - errT := meas.UpdateData(model.FunctionTypeMeasurementDescriptionListData, mData, nil, nil) + _, errT := meas.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, mData, nil, nil) assert.Nil(s.T(), errT) _, _, _, err = s.sut.CurrentLimits(s.evEntity) diff --git a/usecases/cem/oscev/events_test.go b/usecases/cem/oscev/events_test.go index a2c35718..36fba397 100644 --- a/usecases/cem/oscev/events_test.go +++ b/usecases/cem/oscev/events_test.go @@ -76,7 +76,7 @@ func (s *CemOSCEVSuite) Test_evElectricalPermittedValuesUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evElectricalPermittedValuesUpdate(payload) @@ -143,7 +143,7 @@ func (s *CemOSCEVSuite) Test_evLoadControlLimitDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.evEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.evLoadControlLimitDataUpdate(payload) diff --git a/usecases/cem/oscev/public_test.go b/usecases/cem/oscev/public_test.go index 187c425b..bc996ede 100644 --- a/usecases/cem/oscev/public_test.go +++ b/usecases/cem/oscev/public_test.go @@ -30,7 +30,7 @@ func (s *CemOSCEVSuite) Test_Public() { }, }, } - errT := meas.UpdateData(model.FunctionTypeMeasurementDescriptionListData, mData, nil, nil) + _, errT := meas.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, mData, nil, nil) assert.Nil(s.T(), errT) _, _, _, err = s.sut.CurrentLimits(s.evEntity) diff --git a/usecases/cem/vabd/events_test.go b/usecases/cem/vabd/events_test.go index f98c206e..ab43299e 100644 --- a/usecases/cem/vabd/events_test.go +++ b/usecases/cem/vabd/events_test.go @@ -82,7 +82,7 @@ func (s *CemVABDSuite) Test_inverterMeasurementDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.batteryEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.inverterMeasurementDataUpdate(payload) diff --git a/usecases/cem/vabd/public_test.go b/usecases/cem/vabd/public_test.go index 0b5bf920..7f725416 100644 --- a/usecases/cem/vabd/public_test.go +++ b/usecases/cem/vabd/public_test.go @@ -27,7 +27,7 @@ func (s *CemVABDSuite) Test_CurrentChargePower() { } measurementFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.batteryEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := measurementFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := measurementFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.batteryEntity) @@ -43,7 +43,7 @@ func (s *CemVABDSuite) Test_CurrentChargePower() { }, } - fErr = measurementFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = measurementFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.batteryEntity) @@ -72,7 +72,7 @@ func (s *CemVABDSuite) Test_TotalChargeEnergy() { } measurementFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.batteryEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := measurementFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := measurementFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyCharged(s.batteryEntity) @@ -88,7 +88,7 @@ func (s *CemVABDSuite) Test_TotalChargeEnergy() { }, } - fErr = measurementFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = measurementFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyCharged(s.batteryEntity) @@ -117,7 +117,7 @@ func (s *CemVABDSuite) Test_TotalDischargeEnergy() { } measurementFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.batteryEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := measurementFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := measurementFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyDischarged(s.batteryEntity) @@ -133,7 +133,7 @@ func (s *CemVABDSuite) Test_TotalDischargeEnergy() { }, } - fErr = measurementFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = measurementFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyDischarged(s.batteryEntity) @@ -162,7 +162,7 @@ func (s *CemVABDSuite) Test_CurrentStateOfCharge() { } measurementFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.batteryEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := measurementFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := measurementFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.StateOfCharge(s.batteryEntity) @@ -178,7 +178,7 @@ func (s *CemVABDSuite) Test_CurrentStateOfCharge() { }, } - fErr = measurementFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = measurementFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.StateOfCharge(s.batteryEntity) diff --git a/usecases/cem/vapd/events_test.go b/usecases/cem/vapd/events_test.go index b127da45..3c9a2412 100644 --- a/usecases/cem/vapd/events_test.go +++ b/usecases/cem/vapd/events_test.go @@ -73,7 +73,7 @@ func (s *CemVAPDSuite) Test_inverterConfigurationDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.pvEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.inverterConfigurationDataUpdate(payload) @@ -119,7 +119,7 @@ func (s *CemVAPDSuite) Test_inverterMeasurementDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.pvEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.inverterMeasurementDescriptionDataUpdate(payload.Entity) diff --git a/usecases/cem/vapd/public_test.go b/usecases/cem/vapd/public_test.go index b6d90e6d..a372929c 100644 --- a/usecases/cem/vapd/public_test.go +++ b/usecases/cem/vapd/public_test.go @@ -27,7 +27,7 @@ func (s *CemVAPDSuite) Test_CurrentProductionPower() { } measurementFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.pvEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := measurementFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := measurementFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.pvEntity) @@ -43,7 +43,7 @@ func (s *CemVAPDSuite) Test_CurrentProductionPower() { }, } - fErr = measurementFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = measurementFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.pvEntity) @@ -71,7 +71,7 @@ func (s *CemVAPDSuite) Test_NominalPeakPower() { } confFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.pvEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := confFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, confData, nil, nil) + _, fErr := confFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, confData, nil, nil) assert.Nil(s.T(), fErr) keyData := &model.DeviceConfigurationKeyValueListDataType{ @@ -84,7 +84,7 @@ func (s *CemVAPDSuite) Test_NominalPeakPower() { }, }, } - fErr = confFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = confFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerNominalPeak(s.pvEntity) @@ -113,7 +113,7 @@ func (s *CemVAPDSuite) Test_TotalPVYield() { } measurementFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.pvEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := measurementFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := measurementFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PVYieldTotal(s.pvEntity) @@ -129,7 +129,7 @@ func (s *CemVAPDSuite) Test_TotalPVYield() { }, } - fErr = measurementFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = measurementFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PVYieldTotal(s.pvEntity) diff --git a/usecases/cs/lpc/public_test.go b/usecases/cs/lpc/public_test.go index 89162725..8aceb046 100644 --- a/usecases/cs/lpc/public_test.go +++ b/usecases/cs/lpc/public_test.go @@ -136,7 +136,7 @@ func (s *CsLPCSuite) Test_IsHeartbeatWithinDuration() { HeartbeatCounter: util.Ptr(uint64(1)), HeartbeatTimeout: model.NewDurationType(time.Second * 120), } - err1 := remoteDiagServer.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _, err1 := remoteDiagServer.UpdateData(true, model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) assert.Nil(s.T(), err1) value = s.sut.IsHeartbeatWithinDuration() @@ -145,7 +145,7 @@ func (s *CsLPCSuite) Test_IsHeartbeatWithinDuration() { timestamp = time.Now() data.Timestamp = model.NewAbsoluteOrRelativeTimeTypeFromTime(timestamp) - err1 = remoteDiagServer.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _, err1 = remoteDiagServer.UpdateData(true, model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) assert.Nil(s.T(), err1) value = s.sut.IsHeartbeatWithinDuration() diff --git a/usecases/cs/lpp/public_test.go b/usecases/cs/lpp/public_test.go index 49965c23..90442644 100644 --- a/usecases/cs/lpp/public_test.go +++ b/usecases/cs/lpp/public_test.go @@ -135,7 +135,7 @@ func (s *CsLPPSuite) Test_IsHeartbeatWithinDuration() { HeartbeatCounter: util.Ptr(uint64(1)), HeartbeatTimeout: model.NewDurationType(time.Second * 120), } - err1 := remoteDiagServer.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _, err1 := remoteDiagServer.UpdateData(true, model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) assert.Nil(s.T(), err1) value = s.sut.IsHeartbeatWithinDuration() @@ -144,7 +144,7 @@ func (s *CsLPPSuite) Test_IsHeartbeatWithinDuration() { timestamp = time.Now() data.Timestamp = model.NewAbsoluteOrRelativeTimeTypeFromTime(timestamp) - err1 = remoteDiagServer.UpdateData(model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) + _, err1 = remoteDiagServer.UpdateData(true, model.FunctionTypeDeviceDiagnosisHeartbeatData, data, nil, nil) assert.Nil(s.T(), err1) value = s.sut.IsHeartbeatWithinDuration() diff --git a/usecases/eg/lpc/events_test.go b/usecases/eg/lpc/events_test.go index 8ebfd6dc..0ca717f1 100644 --- a/usecases/eg/lpc/events_test.go +++ b/usecases/eg/lpc/events_test.go @@ -69,7 +69,7 @@ func (s *EgLPCSuite) Test_loadControlLimitDescriptionDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.loadControlLimitDescriptionDataUpdate(s.monitoredEntity) @@ -97,7 +97,7 @@ func (s *EgLPCSuite) Test_loadControlLimitDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.loadControlLimitDataUpdate(payload) @@ -150,7 +150,7 @@ func (s *EgLPCSuite) Test_configurationDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.configurationDataUpdate(payload) diff --git a/usecases/eg/lpc/public_test.go b/usecases/eg/lpc/public_test.go index 44f4d43b..eec728c7 100644 --- a/usecases/eg/lpc/public_test.go +++ b/usecases/eg/lpc/public_test.go @@ -41,7 +41,7 @@ func (s *EgLPCSuite) Test_ConsumptionLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ConsumptionLimit(s.monitoredEntity) @@ -64,7 +64,7 @@ func (s *EgLPCSuite) Test_ConsumptionLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ConsumptionLimit(s.monitoredEntity) @@ -99,7 +99,7 @@ func (s *EgLPCSuite) Test_WriteLoadControlLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteConsumptionLimit(s.monitoredEntity, limit, nil) @@ -116,7 +116,7 @@ func (s *EgLPCSuite) Test_WriteLoadControlLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteConsumptionLimit(s.monitoredEntity, limit, nil) @@ -147,7 +147,7 @@ func (s *EgLPCSuite) Test_FailsafeConsumptionActivePowerLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeConsumptionActivePowerLimit(s.monitoredEntity) @@ -163,7 +163,7 @@ func (s *EgLPCSuite) Test_FailsafeConsumptionActivePowerLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeConsumptionActivePowerLimit(s.monitoredEntity) @@ -181,7 +181,7 @@ func (s *EgLPCSuite) Test_FailsafeConsumptionActivePowerLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeConsumptionActivePowerLimit(s.monitoredEntity) @@ -206,7 +206,7 @@ func (s *EgLPCSuite) Test_WriteFailsafeConsumptionActivePowerLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeConsumptionActivePowerLimit(s.monitoredEntity, 6000) @@ -221,7 +221,7 @@ func (s *EgLPCSuite) Test_WriteFailsafeConsumptionActivePowerLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeConsumptionActivePowerLimit(s.monitoredEntity, 6000) @@ -248,7 +248,7 @@ func (s *EgLPCSuite) Test_FailsafeDurationMinimum() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeDurationMinimum(s.monitoredEntity) @@ -264,7 +264,7 @@ func (s *EgLPCSuite) Test_FailsafeDurationMinimum() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeDurationMinimum(s.monitoredEntity) @@ -282,7 +282,7 @@ func (s *EgLPCSuite) Test_FailsafeDurationMinimum() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeDurationMinimum(s.monitoredEntity) @@ -307,7 +307,7 @@ func (s *EgLPCSuite) Test_WriteFailsafeDurationMinimum() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeDurationMinimum(s.monitoredEntity, time.Duration(time.Hour*2)) @@ -322,7 +322,7 @@ func (s *EgLPCSuite) Test_WriteFailsafeDurationMinimum() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeDurationMinimum(s.monitoredEntity, time.Duration(time.Hour*2)) @@ -354,7 +354,7 @@ func (s *EgLPCSuite) Test_PowerConsumptionNominalMax() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ConsumptionNominalMax(s.monitoredEntity) @@ -374,7 +374,7 @@ func (s *EgLPCSuite) Test_PowerConsumptionNominalMax() { } rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ConsumptionNominalMax(s.monitoredEntity) diff --git a/usecases/eg/lpp/events_test.go b/usecases/eg/lpp/events_test.go index fbb6c36d..d78e45ff 100644 --- a/usecases/eg/lpp/events_test.go +++ b/usecases/eg/lpp/events_test.go @@ -69,7 +69,7 @@ func (s *EgLPPSuite) Test_loadControlLimitDescriptionDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.loadControlLimitDescriptionDataUpdate(s.monitoredEntity) @@ -97,7 +97,7 @@ func (s *EgLPPSuite) Test_loadControlLimitDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.loadControlLimitDataUpdate(payload) @@ -150,7 +150,7 @@ func (s *EgLPPSuite) Test_configurationDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.configurationDataUpdate(payload) diff --git a/usecases/eg/lpp/public_test.go b/usecases/eg/lpp/public_test.go index 72edb8f3..1b15ae92 100644 --- a/usecases/eg/lpp/public_test.go +++ b/usecases/eg/lpp/public_test.go @@ -35,7 +35,7 @@ func (s *EgLPPSuite) Test_LoadControlLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ProductionLimit(s.monitoredEntity) @@ -58,7 +58,7 @@ func (s *EgLPPSuite) Test_LoadControlLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ProductionLimit(s.monitoredEntity) @@ -93,7 +93,7 @@ func (s *EgLPPSuite) Test_WriteLoadControlLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteProductionLimit(s.monitoredEntity, limit, nil) @@ -110,7 +110,7 @@ func (s *EgLPPSuite) Test_WriteLoadControlLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteProductionLimit(s.monitoredEntity, limit, nil) @@ -141,7 +141,7 @@ func (s *EgLPPSuite) Test_FailsafeProductionActivePowerLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeProductionActivePowerLimit(s.monitoredEntity) @@ -157,7 +157,7 @@ func (s *EgLPPSuite) Test_FailsafeProductionActivePowerLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeProductionActivePowerLimit(s.monitoredEntity) @@ -175,7 +175,7 @@ func (s *EgLPPSuite) Test_FailsafeProductionActivePowerLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeProductionActivePowerLimit(s.monitoredEntity) @@ -200,7 +200,7 @@ func (s *EgLPPSuite) Test_WriteFailsafeProductionActivePowerLimit() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeProductionActivePowerLimit(s.monitoredEntity, 6000) @@ -215,7 +215,7 @@ func (s *EgLPPSuite) Test_WriteFailsafeProductionActivePowerLimit() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeProductionActivePowerLimit(s.monitoredEntity, 6000) @@ -242,7 +242,7 @@ func (s *EgLPPSuite) Test_FailsafeDurationMinimum() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeDurationMinimum(s.monitoredEntity) @@ -258,7 +258,7 @@ func (s *EgLPPSuite) Test_FailsafeDurationMinimum() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeDurationMinimum(s.monitoredEntity) @@ -276,7 +276,7 @@ func (s *EgLPPSuite) Test_FailsafeDurationMinimum() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.FailsafeDurationMinimum(s.monitoredEntity) @@ -301,7 +301,7 @@ func (s *EgLPPSuite) Test_WriteFailsafeDurationMinimum() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeDurationMinimum(s.monitoredEntity, time.Duration(time.Hour*2)) @@ -316,7 +316,7 @@ func (s *EgLPPSuite) Test_WriteFailsafeDurationMinimum() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) _, err = s.sut.WriteFailsafeDurationMinimum(s.monitoredEntity, time.Duration(time.Hour*2)) @@ -348,7 +348,7 @@ func (s *EgLPPSuite) Test_PowerProductionNominalMax() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ProductionNominalMax(s.monitoredEntity) @@ -368,7 +368,7 @@ func (s *EgLPPSuite) Test_PowerProductionNominalMax() { } rFeature = s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionCharacteristicListData, charData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.ProductionNominalMax(s.monitoredEntity) diff --git a/usecases/internal/loadcontrol_test.go b/usecases/internal/loadcontrol_test.go index 2ae90223..447ea8b4 100644 --- a/usecases/internal/loadcontrol_test.go +++ b/usecases/internal/loadcontrol_test.go @@ -62,7 +62,7 @@ func (s *InternalSuite) Test_LoadControlLimits() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -97,7 +97,7 @@ func (s *InternalSuite) Test_LoadControlLimits() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -120,7 +120,7 @@ func (s *InternalSuite) Test_LoadControlLimits() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -150,7 +150,7 @@ func (s *InternalSuite) Test_LoadControlLimits() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -213,7 +213,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -280,7 +280,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -301,7 +301,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -355,7 +355,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -444,7 +444,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -511,7 +511,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -541,7 +541,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -573,7 +573,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) @@ -628,14 +628,14 @@ func (s *InternalSuite) Test_WriteLoadControlLimit() { }, } lc := s.monitoredEntity.FeatureOfTypeAndRole(model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - lc.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, _ = lc.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) msgCounter, err = WriteLoadControlLimit(s.localEntity, s.monitoredEntity, filter, loadLimit, nil) assert.NotNil(s.T(), err) assert.Nil(s.T(), msgCounter) data := &model.LoadControlLimitListDataType{LoadControlLimitData: []model.LoadControlLimitDataType{}} - lc.UpdateData(model.FunctionTypeLoadControlLimitListData, data, nil, nil) + _, _ = lc.UpdateData(true, model.FunctionTypeLoadControlLimitListData, data, nil, nil) msgCounter, err = WriteLoadControlLimit(s.localEntity, s.monitoredEntity, filter, loadLimit, nil) assert.NotNil(s.T(), err) @@ -651,7 +651,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimit() { }, }, } - lc.UpdateData(model.FunctionTypeLoadControlLimitListData, data, nil, nil) + _, _ = lc.UpdateData(true, model.FunctionTypeLoadControlLimitListData, data, nil, nil) msgCounter, err = WriteLoadControlLimit(s.localEntity, s.monitoredEntity, filter, loadLimit, nil) assert.NotNil(s.T(), err) @@ -670,7 +670,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimit() { }, }, } - lc.UpdateData(model.FunctionTypeLoadControlLimitListData, data, nil, nil) + _, _ = lc.UpdateData(true, model.FunctionTypeLoadControlLimitListData, data, nil, nil) s.mux.Lock() cbInvoked := false @@ -756,7 +756,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimits() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) assert.Nil(s.T(), fErr) msgCounter, err = WriteLoadControlPhaseLimits(s.localEntity, s.monitoredEntity, filter, loadLimits, nil) @@ -833,7 +833,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimits() { assert.NotNil(s.T(), remoteLoadControlF) emptyLimits := model.LoadControlLimitListDataType{} - errT := remoteLoadControlF.UpdateData(model.FunctionTypeLoadControlLimitListData, &emptyLimits, nil, nil) + _, errT := remoteLoadControlF.UpdateData(true, model.FunctionTypeLoadControlLimitListData, &emptyLimits, nil, nil) assert.Nil(s.T(), errT) for phase := 0; phase < data.phases; phase++ { @@ -862,7 +862,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimits() { ElectricalConnectionPermittedValueSetData: dataSet, } - fErr = rFeature.UpdateData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) assert.Nil(s.T(), fErr) msgCounter, err := WriteLoadControlPhaseLimits(s.localEntity, s.monitoredEntity, filter, loadLimits, nil) @@ -901,7 +901,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimits() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) msgCounter, err = WriteLoadControlPhaseLimits(s.localEntity, s.monitoredEntity, filter, loadLimits, nil) @@ -923,7 +923,7 @@ func (s *InternalSuite) Test_WriteLoadControlLimits() { LoadControlLimitData: limitData, } - fErr = rFeature.UpdateData(model.FunctionTypeLoadControlLimitListData, limitListData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitListData, nil, nil) assert.Nil(s.T(), fErr) msgCounter, err = WriteLoadControlPhaseLimits(s.localEntity, s.monitoredEntity, filter, loadLimits, nil) diff --git a/usecases/internal/manufacturerdata_test.go b/usecases/internal/manufacturerdata_test.go index 4afc7963..1df4f9ca 100644 --- a/usecases/internal/manufacturerdata_test.go +++ b/usecases/internal/manufacturerdata_test.go @@ -25,7 +25,7 @@ func (s *InternalSuite) Test_ManufacturerData() { rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeDeviceClassification, model.RoleTypeServer) assert.NotNil(s.T(), rFeature) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceClassificationManufacturerData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err := ManufacturerData(s.localEntity, s.monitoredEntity) assert.Nil(s.T(), err) diff --git a/usecases/internal/measurement_test.go b/usecases/internal/measurement_test.go index 62fe5f5e..d33190d2 100644 --- a/usecases/internal/measurement_test.go +++ b/usecases/internal/measurement_test.go @@ -70,7 +70,7 @@ func (s *InternalSuite) Test_MeasurementPhaseSpecificDataForFilter() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = MeasurementPhaseSpecificDataForFilter( @@ -103,7 +103,7 @@ func (s *InternalSuite) Test_MeasurementPhaseSpecificDataForFilter() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = MeasurementPhaseSpecificDataForFilter( @@ -137,7 +137,7 @@ func (s *InternalSuite) Test_MeasurementPhaseSpecificDataForFilter() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) elDescData := &model.ElectricalConnectionDescriptionListDataType{ @@ -149,7 +149,7 @@ func (s *InternalSuite) Test_MeasurementPhaseSpecificDataForFilter() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) assert.Nil(s.T(), fErr) data, err = MeasurementPhaseSpecificDataForFilter( diff --git a/usecases/ma/mgcp/events_test.go b/usecases/ma/mgcp/events_test.go index cc6e0f2c..63a5d8e7 100644 --- a/usecases/ma/mgcp/events_test.go +++ b/usecases/ma/mgcp/events_test.go @@ -70,7 +70,7 @@ func (s *GcpMGCPSuite) Test_gridConfigurationDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.gridConfigurationDataUpdate(payload) @@ -132,7 +132,7 @@ func (s *GcpMGCPSuite) Test_gridMeasurementDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.gridMeasurementDataUpdate(payload) diff --git a/usecases/ma/mgcp/public_test.go b/usecases/ma/mgcp/public_test.go index 5ab86f9e..4ded2704 100644 --- a/usecases/ma/mgcp/public_test.go +++ b/usecases/ma/mgcp/public_test.go @@ -26,7 +26,7 @@ func (s *GcpMGCPSuite) Test_PowerLimitationFactor() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeDeviceConfiguration, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerLimitationFactor(s.smgwEntity) @@ -44,7 +44,7 @@ func (s *GcpMGCPSuite) Test_PowerLimitationFactor() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeDeviceConfigurationKeyValueListData, keyData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerLimitationFactor(s.smgwEntity) @@ -73,7 +73,7 @@ func (s *GcpMGCPSuite) Test_Power() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.smgwEntity) @@ -89,7 +89,7 @@ func (s *GcpMGCPSuite) Test_Power() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.smgwEntity) @@ -106,7 +106,7 @@ func (s *GcpMGCPSuite) Test_Power() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.smgwEntity) @@ -122,7 +122,7 @@ func (s *GcpMGCPSuite) Test_Power() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.smgwEntity) @@ -151,7 +151,7 @@ func (s *GcpMGCPSuite) Test_EnergyFeedIn() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyFeedIn(s.smgwEntity) @@ -167,7 +167,7 @@ func (s *GcpMGCPSuite) Test_EnergyFeedIn() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyFeedIn(s.smgwEntity) @@ -196,7 +196,7 @@ func (s *GcpMGCPSuite) Test_EnergyConsumed() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyConsumed(s.smgwEntity) @@ -212,7 +212,7 @@ func (s *GcpMGCPSuite) Test_EnergyConsumed() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyConsumed(s.smgwEntity) @@ -253,7 +253,7 @@ func (s *GcpMGCPSuite) Test_CurrentPerPhase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.smgwEntity) @@ -277,7 +277,7 @@ func (s *GcpMGCPSuite) Test_CurrentPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.smgwEntity) @@ -305,7 +305,7 @@ func (s *GcpMGCPSuite) Test_CurrentPerPhase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) elDescData := &model.ElectricalConnectionDescriptionListDataType{ @@ -317,7 +317,7 @@ func (s *GcpMGCPSuite) Test_CurrentPerPhase() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.smgwEntity) @@ -358,7 +358,7 @@ func (s *GcpMGCPSuite) Test_VoltagePerPhase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.VoltagePerPhase(s.smgwEntity) @@ -382,7 +382,7 @@ func (s *GcpMGCPSuite) Test_VoltagePerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.VoltagePerPhase(s.smgwEntity) @@ -410,7 +410,7 @@ func (s *GcpMGCPSuite) Test_VoltagePerPhase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.VoltagePerPhase(s.smgwEntity) @@ -439,7 +439,7 @@ func (s *GcpMGCPSuite) Test_Frequency() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.smgwEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Frequency(s.smgwEntity) @@ -455,7 +455,7 @@ func (s *GcpMGCPSuite) Test_Frequency() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Frequency(s.smgwEntity) diff --git a/usecases/ma/mpc/events_test.go b/usecases/ma/mpc/events_test.go index 6b816c46..cca469f7 100644 --- a/usecases/ma/mpc/events_test.go +++ b/usecases/ma/mpc/events_test.go @@ -88,7 +88,7 @@ func (s *MaMPCSuite) Test_deviceMeasurementDataUpdate() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) s.sut.deviceMeasurementDataUpdate(payload) diff --git a/usecases/ma/mpc/public_test.go b/usecases/ma/mpc/public_test.go index 9bf6e3e5..cb6a8708 100644 --- a/usecases/ma/mpc/public_test.go +++ b/usecases/ma/mpc/public_test.go @@ -27,7 +27,7 @@ func (s *MaMPCSuite) Test_Power() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.monitoredEntity) @@ -43,7 +43,7 @@ func (s *MaMPCSuite) Test_Power() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.monitoredEntity) @@ -60,7 +60,7 @@ func (s *MaMPCSuite) Test_Power() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.monitoredEntity) @@ -76,7 +76,7 @@ func (s *MaMPCSuite) Test_Power() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Power(s.monitoredEntity) @@ -117,7 +117,7 @@ func (s *MaMPCSuite) Test_PowerPerPhase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.monitoredEntity) @@ -141,7 +141,7 @@ func (s *MaMPCSuite) Test_PowerPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.monitoredEntity) @@ -169,7 +169,7 @@ func (s *MaMPCSuite) Test_PowerPerPhase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) elDescData := &model.ElectricalConnectionDescriptionListDataType{ @@ -181,7 +181,7 @@ func (s *MaMPCSuite) Test_PowerPerPhase() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.PowerPerPhase(s.monitoredEntity) @@ -210,7 +210,7 @@ func (s *MaMPCSuite) Test_EnergyConsumed() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyConsumed(s.monitoredEntity) @@ -226,7 +226,7 @@ func (s *MaMPCSuite) Test_EnergyConsumed() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyConsumed(s.monitoredEntity) @@ -255,7 +255,7 @@ func (s *MaMPCSuite) Test_EnergyProduced() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyProduced(s.monitoredEntity) @@ -271,7 +271,7 @@ func (s *MaMPCSuite) Test_EnergyProduced() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.EnergyProduced(s.monitoredEntity) @@ -312,7 +312,7 @@ func (s *MaMPCSuite) Test_CurrentPerPhase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.monitoredEntity) @@ -336,7 +336,7 @@ func (s *MaMPCSuite) Test_CurrentPerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.monitoredEntity) @@ -364,7 +364,7 @@ func (s *MaMPCSuite) Test_CurrentPerPhase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) elDescData := &model.ElectricalConnectionDescriptionListDataType{ @@ -376,7 +376,7 @@ func (s *MaMPCSuite) Test_CurrentPerPhase() { }, } - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionDescriptionListData, elDescData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.CurrentPerPhase(s.monitoredEntity) @@ -417,7 +417,7 @@ func (s *MaMPCSuite) Test_VoltagePerPhase() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.VoltagePerPhase(s.monitoredEntity) @@ -441,7 +441,7 @@ func (s *MaMPCSuite) Test_VoltagePerPhase() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.VoltagePerPhase(s.monitoredEntity) @@ -469,7 +469,7 @@ func (s *MaMPCSuite) Test_VoltagePerPhase() { } rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) - fErr = rElFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, elParamData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.VoltagePerPhase(s.monitoredEntity) @@ -498,7 +498,7 @@ func (s *MaMPCSuite) Test_Frequency() { } rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeMeasurement, model.RoleTypeServer) - fErr := rFeature.UpdateData(model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeMeasurementDescriptionListData, descData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Frequency(s.monitoredEntity) @@ -514,7 +514,7 @@ func (s *MaMPCSuite) Test_Frequency() { }, } - fErr = rFeature.UpdateData(model.FunctionTypeMeasurementListData, measData, nil, nil) + _, fErr = rFeature.UpdateData(true, model.FunctionTypeMeasurementListData, measData, nil, nil) assert.Nil(s.T(), fErr) data, err = s.sut.Frequency(s.monitoredEntity) diff --git a/usecases/usecase/events_test.go b/usecases/usecase/events_test.go index 7d46190c..de1c35b2 100644 --- a/usecases/usecase/events_test.go +++ b/usecases/usecase/events_test.go @@ -55,7 +55,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { "release", false, []model.UseCaseScenarioSupportType{1, 2, 3}) - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseDataUpdate(payload) @@ -71,7 +71,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { "release", false, []model.UseCaseScenarioSupportType{1, 2, 3}) - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseDataUpdate(payload) @@ -87,7 +87,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { "release", true, []model.UseCaseScenarioSupportType{1, 2, 3}) - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseDataUpdate(payload) @@ -103,7 +103,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { "release", true, []model.UseCaseScenarioSupportType{1, 2, 3}) - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseDataUpdate(payload) @@ -119,7 +119,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { "release", true, []model.UseCaseScenarioSupportType{2, 3}) - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseDataUpdate(payload) @@ -135,7 +135,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate() { "release", true, []model.UseCaseScenarioSupportType{1, 2, 3}) - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseScenarios[0].ServerFeatures = []model.FeatureTypeType{model.FeatureTypeTypeSmartEnergyManagementPs} @@ -208,7 +208,7 @@ func (s *UseCaseSuite) Test_useCaseDataUpdate_PMCP() { }, }, } - nodeFeature.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) + _, _ = nodeFeature.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) s.uc.useCaseDataUpdate(payload) From 8544b350ffc6f595b75d83cfa1541566c6c56114 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Wed, 4 Sep 2024 13:03:43 +0200 Subject: [PATCH 09/25] Minor code cleanup --- cmd/hems/main.go | 8 ++++---- service/service.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/hems/main.go b/cmd/hems/main.go index 9d825a85..ea743936 100644 --- a/cmd/hems/main.go +++ b/cmd/hems/main.go @@ -222,19 +222,19 @@ func main() { // Logging interface func (h *hems) Trace(args ...interface{}) { - // h.print("TRACE", args...) + h.print("TRACE", args...) } func (h *hems) Tracef(format string, args ...interface{}) { - // h.printFormat("TRACE", format, args...) + h.printFormat("TRACE", format, args...) } func (h *hems) Debug(args ...interface{}) { - // h.print("DEBUG", args...) + h.print("DEBUG", args...) } func (h *hems) Debugf(format string, args ...interface{}) { - // h.printFormat("DEBUG", format, args...) + h.printFormat("DEBUG", format, args...) } func (h *hems) Info(args ...interface{}) { diff --git a/service/service.go b/service/service.go index 792952cb..de7b767f 100644 --- a/service/service.go +++ b/service/service.go @@ -84,7 +84,7 @@ func (s *Service) Setup() error { s.localService.SetShipID(sd.Identifier()) s.localService.SetDeviceType(string(sd.DeviceType())) - logging.Log().Info("Local SKI: ", ski) + logging.Log().Info("Local SKI:", ski) vendor := sd.VendorCode() if vendor == "" { From 2cd13fc7893a87167b72236194a1cd61a6c36c28 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 5 Sep 2024 11:10:20 +0200 Subject: [PATCH 10/25] Fix LoadControl for 1 phase connected EVSE - If an EVSE is connected via 1 phase, `LoadControlLimits` should not add empty data for non existing phases, otherwise this will lead to invalid data for consumers. E.g. checking if any phase is active will always fail, as these are always returning false - Add more tests for Audi Mobile Connect setup with 1 phase - Add more tests for Elli Connect/Pro Gen 1 with 1 phase setup --- .../internal/electricalconnection_test.go | 122 ++++++++++- usecases/cem/evcem/public_test.go | 1 + usecases/internal/loadcontrol.go | 2 +- usecases/internal/loadcontrol_test.go | 190 +++++++++++++++++- 4 files changed, 301 insertions(+), 14 deletions(-) diff --git a/features/internal/electricalconnection_test.go b/features/internal/electricalconnection_test.go index f82b138b..15a2ac50 100644 --- a/features/internal/electricalconnection_test.go +++ b/features/internal/electricalconnection_test.go @@ -549,15 +549,67 @@ func (s *ElectricalConnectionSuite) Test_GetLimitsForParameterId() { assert.Equal(s.T(), defaultV, 0.1) } +func (s *ElectricalConnectionSuite) Test_GetLimitsForParameterId_Elli_1Phase() { + filter := model.ElectricalConnectionPermittedValueSetDataType{ + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(0)), + } + minV, maxV, defaultV, err := s.localSut.GetPermittedValueDataForFilter(filter) + assert.NotNil(s.T(), err) + assert.Equal(s.T(), minV, 0.0) + assert.Equal(s.T(), maxV, 0.0) + assert.Equal(s.T(), defaultV, 0.0) + minV, maxV, defaultV, err = s.remoteSut.GetPermittedValueDataForFilter(filter) + assert.NotNil(s.T(), err) + assert.Equal(s.T(), minV, 0.0) + assert.Equal(s.T(), maxV, 0.0) + assert.Equal(s.T(), defaultV, 0.0) + + s.addParamDescription_Elli_1Phase() + s.addPermittedValueSetEmptyElli() + + minV, maxV, defaultV, err = s.localSut.GetPermittedValueDataForFilter(filter) + assert.Nil(s.T(), err) + assert.Equal(s.T(), minV, 0.0) + assert.Equal(s.T(), maxV, 0.0) + assert.Equal(s.T(), defaultV, 0.0) + minV, maxV, defaultV, err = s.remoteSut.GetPermittedValueDataForFilter(filter) + assert.Nil(s.T(), err) + assert.Equal(s.T(), minV, 0.0) + assert.Equal(s.T(), maxV, 0.0) + assert.Equal(s.T(), defaultV, 0.0) +} + func (s *ElectricalConnectionSuite) Test_AdjustValueToBeWithinPermittedValuesForParameter() { parameterId := model.ElectricalConnectionParameterIdType(1) s.addPermittedValueSet() s.addParamDescriptionCurrents() value := s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId) - assert.Equal(s.T(), value, 16.0) + assert.Equal(s.T(), 16.0, value) + value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId) + assert.Equal(s.T(), 16.0, value) + + value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId) + assert.Equal(s.T(), 2.0, value) + value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId) + assert.Equal(s.T(), 2.0, value) + + value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId) + assert.Equal(s.T(), 0.1, value) + value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId) + assert.Equal(s.T(), 0.1, value) +} + +func (s *ElectricalConnectionSuite) Test_AdjustValueToBeWithinPermittedValuesForParameter_Elli_1Phase() { + parameterId := model.ElectricalConnectionParameterIdType(1) + + s.addPermittedValueSetEmptyElli() + s.addParamDescription_Elli_1Phase() + + value := s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId) + assert.Equal(s.T(), value, 20.0) value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(20, parameterId) - assert.Equal(s.T(), value, 16.0) + assert.Equal(s.T(), value, 20.0) value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(2, parameterId) assert.Equal(s.T(), value, 2.0) @@ -565,9 +617,9 @@ func (s *ElectricalConnectionSuite) Test_AdjustValueToBeWithinPermittedValuesFor assert.Equal(s.T(), value, 2.0) value = s.localSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId) - assert.Equal(s.T(), value, 0.1) + assert.Equal(s.T(), value, 1.0) value = s.remoteSut.AdjustValueToBeWithinPermittedValuesForParameterId(1, parameterId) - assert.Equal(s.T(), value, 0.1) + assert.Equal(s.T(), value, 1.0) } func (s *ElectricalConnectionSuite) Test_GetCharacteristics() { @@ -972,6 +1024,68 @@ func (s *ElectricalConnectionSuite) addParamDescriptionPower() { _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) } +func (s *ElectricalConnectionSuite) addParamDescription_Elli_1Phase() { + fData := &model.ElectricalConnectionParameterDescriptionListDataType{ + ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{ + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(0)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeAbc), + ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(1)), + MeasurementId: util.Ptr(model.MeasurementIdType(0)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(2)), + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeB), + AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(3)), + MeasurementId: util.Ptr(model.MeasurementIdType(2)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeC), + AcMeasurementVariant: util.Ptr(model.ElectricalConnectionMeasurandVariantTypeRms), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(4)), + MeasurementId: util.Ptr(model.MeasurementIdType(3)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(5)), + MeasurementId: util.Ptr(model.MeasurementIdType(4)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeB), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(6)), + MeasurementId: util.Ptr(model.MeasurementIdType(5)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeC), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(7)), + MeasurementId: util.Ptr(model.MeasurementIdType(6)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeAbc), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + }, + }, + } + _ = s.localFeature.UpdateData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) + _, _ = s.remoteFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, fData, nil, nil) +} + func (s *ElectricalConnectionSuite) addPermittedValueSet() { fData := &model.ElectricalConnectionPermittedValueSetListDataType{ ElectricalConnectionPermittedValueSetData: []model.ElectricalConnectionPermittedValueSetDataType{ diff --git a/usecases/cem/evcem/public_test.go b/usecases/cem/evcem/public_test.go index 812f75b5..d080f68a 100644 --- a/usecases/cem/evcem/public_test.go +++ b/usecases/cem/evcem/public_test.go @@ -307,6 +307,7 @@ func (s *CemEVCEMSuite) Test_EVCurrentPerPhase_AudiConnect() { data, err = s.sut.CurrentPerPhase(s.evEntity) assert.Nil(s.T(), err) + assert.Equal(s.T(), 1, len(data)) assert.Equal(s.T(), 10.0, data[0]) } diff --git a/usecases/internal/loadcontrol.go b/usecases/internal/loadcontrol.go index 44a01d24..a7e49174 100644 --- a/usecases/internal/loadcontrol.go +++ b/usecases/internal/loadcontrol.go @@ -49,7 +49,7 @@ func LoadControlLimits( elParamDesc, err := evElectricalConnection.GetParameterDescriptionsForFilter(filter) if err != nil || len(elParamDesc) == 0 || elParamDesc[0].MeasurementId == nil { // there is no data for this phase, the phase may not exist - result = append(result, ucapi.LoadLimitsPhase{Phase: phaseName}) + // so do not add id to the result continue } diff --git a/usecases/internal/loadcontrol_test.go b/usecases/internal/loadcontrol_test.go index 447ea8b4..d3cd9584 100644 --- a/usecases/internal/loadcontrol_test.go +++ b/usecases/internal/loadcontrol_test.go @@ -67,8 +67,7 @@ func (s *InternalSuite) Test_LoadControlLimits() { data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) assert.Nil(s.T(), err) - assert.Equal(s.T(), 3, len(data)) - assert.Equal(s.T(), 0.0, data[0].Value) + assert.Equal(s.T(), 0, len(data)) paramData := &model.ElectricalConnectionParameterDescriptionListDataType{ ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{ @@ -159,6 +158,183 @@ func (s *InternalSuite) Test_LoadControlLimits() { assert.Equal(s.T(), 16.0, data[0].Value) } +func (s *InternalSuite) Test_LoadControlLimits_AudiMobileConnect_1Phase() { + var data []ucapi.LoadLimitsPhase + var err error + limitType := model.LoadControlLimitTypeTypeMaxValueLimit + scope := model.ScopeTypeTypeSelfConsumption + category := model.LoadControlCategoryTypeObligation + + filter := model.LoadControlLimitDescriptionDataType{ + LimitType: util.Ptr(limitType), + LimitCategory: util.Ptr(category), + ScopeType: util.Ptr(scope), + } + data, err = LoadControlLimits(nil, nil, filter) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + data, err = LoadControlLimits(s.localEntity, s.mockRemoteEntity, filter) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + descData := &model.LoadControlLimitDescriptionListDataType{ + LoadControlLimitDescriptionData: []model.LoadControlLimitDescriptionDataType{ + { + LimitId: util.Ptr(model.LoadControlLimitIdType(1)), + LimitType: util.Ptr(limitType), + LimitCategory: util.Ptr(category), + LimitDirection: util.Ptr(model.EnergyDirectionTypeConsume), + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + Unit: util.Ptr(model.UnitOfMeasurementTypeA), + ScopeType: util.Ptr(scope), + }, + { + LimitId: util.Ptr(model.LoadControlLimitIdType(2)), + LimitType: util.Ptr(limitType), + LimitCategory: util.Ptr(model.LoadControlCategoryTypeRecommendation), + LimitDirection: util.Ptr(model.EnergyDirectionTypeConsume), + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + Unit: util.Ptr(model.UnitOfMeasurementTypeA), + ScopeType: util.Ptr(model.ScopeTypeTypeSelfConsumption), + }, + }, + } + + rFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeLoadControl, model.RoleTypeServer) + _, fErr := rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitDescriptionListData, descData, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) + assert.Nil(s.T(), err) + assert.Equal(s.T(), 0, len(data)) + + paramData := &model.ElectricalConnectionParameterDescriptionListDataType{ + ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{ + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(10)), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(1)), + MeasurementId: util.Ptr(model.MeasurementIdType(1)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasuredInReferenceTo: util.Ptr(model.ElectricalConnectionPhaseNameTypeNeutral), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(2)), + MeasurementId: util.Ptr(model.MeasurementIdType(4)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasuredInReferenceTo: util.Ptr(model.ElectricalConnectionPhaseNameTypeNeutral), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(3)), + MeasurementId: util.Ptr(model.MeasurementIdType(7)), + VoltageType: util.Ptr(model.ElectricalConnectionVoltageTypeTypeAc), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + AcMeasuredInReferenceTo: util.Ptr(model.ElectricalConnectionPhaseNameTypeNeutral), + AcMeasurementType: util.Ptr(model.ElectricalConnectionAcMeasurementTypeTypeReal), + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(8)), + AcMeasuredPhases: util.Ptr(model.ElectricalConnectionPhaseNameTypeA), + ScopeType: util.Ptr(model.ScopeTypeTypeACPowerTotal), + }, + }, + } + + rElFeature := s.remoteDevice.FeatureByEntityTypeAndRole(s.monitoredEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer) + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionParameterDescriptionListData, paramData, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) + assert.NotNil(s.T(), err) + assert.Nil(s.T(), data) + + limitData := &model.LoadControlLimitListDataType{ + LoadControlLimitData: []model.LoadControlLimitDataType{ + { + LimitId: util.Ptr(model.LoadControlLimitIdType(1)), + IsLimitChangeable: util.Ptr(true), + IsLimitActive: util.Ptr(false), + Value: model.NewScaledNumberType(0), + }, + { + LimitId: util.Ptr(model.LoadControlLimitIdType(2)), + IsLimitChangeable: util.Ptr(true), + IsLimitActive: util.Ptr(false), + Value: model.NewScaledNumberType(0), + }, + }, + } + + _, fErr = rFeature.UpdateData(true, model.FunctionTypeLoadControlLimitListData, limitData, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) + assert.Nil(s.T(), err) + assert.Equal(s.T(), 0, len(data)) + + permData := &model.ElectricalConnectionPermittedValueSetListDataType{ + ElectricalConnectionPermittedValueSetData: []model.ElectricalConnectionPermittedValueSetDataType{ + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(1)), + PermittedValueSet: []model.ScaledNumberSetType{ + { + Value: []model.ScaledNumberType{ + *model.NewScaledNumberType(0.1), + }, + Range: []model.ScaledNumberRangeType{ + { + Min: model.NewScaledNumberType(6), + Max: model.NewScaledNumberType(10), + }, + }, + }, + }, + }, + { + ElectricalConnectionId: util.Ptr(model.ElectricalConnectionIdType(0)), + ParameterId: util.Ptr(model.ElectricalConnectionParameterIdType(8)), + PermittedValueSet: []model.ScaledNumberSetType{ + { + Value: []model.ScaledNumberType{ + *model.NewScaledNumberType(0.1), + }, + Range: []model.ScaledNumberRangeType{ + { + Min: model.NewScaledNumberType(1437), + Max: model.NewScaledNumberType(2395), + }, + }, + }, + }, + }, + }, + } + + _, fErr = rElFeature.UpdateData(true, model.FunctionTypeElectricalConnectionPermittedValueSetListData, permData, nil, nil) + assert.Nil(s.T(), fErr) + + data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) + assert.Nil(s.T(), err) + assert.Equal(s.T(), 1, len(data)) + assert.Equal(s.T(), 10.0, data[0].Value) + assert.Equal(s.T(), false, data[0].IsActive) +} + func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { var data []ucapi.LoadLimitsPhase var err error @@ -218,8 +394,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) assert.Nil(s.T(), err) - assert.Equal(s.T(), 3, len(data)) - assert.Equal(s.T(), 0.0, data[0].Value) + assert.Nil(s.T(), data) paramData := &model.ElectricalConnectionParameterDescriptionListDataType{ ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{ @@ -307,7 +482,6 @@ func (s *InternalSuite) Test_LoadControlLimits_Bender_1Phase() { data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) assert.Nil(s.T(), err) assert.Nil(s.T(), data) - assert.Equal(s.T(), 0, len(data)) // according to OpEV Spec 1.0.1b, page 30: "At least one set of permitted values SHALL be stated." // which is not the case here for all elements @@ -449,8 +623,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) assert.Nil(s.T(), err) - assert.Equal(s.T(), 3, len(data)) - assert.Equal(s.T(), 0.0, data[0].Value) + assert.Nil(s.T(), data) paramData := &model.ElectricalConnectionParameterDescriptionListDataType{ ElectricalConnectionParameterDescriptionData: []model.ElectricalConnectionParameterDescriptionDataType{ @@ -547,7 +720,6 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) assert.Nil(s.T(), err) assert.Nil(s.T(), data) - assert.Equal(s.T(), 0, len(data)) // according to OpEV Spec 1.0.1b, page 30: "At least one set of permitted values SHALL be stated." // which is not the case here for all elements @@ -578,7 +750,7 @@ func (s *InternalSuite) Test_LoadControlLimits_Elli_1Phase() { data, err = LoadControlLimits(s.localEntity, s.monitoredEntity, filter) assert.Nil(s.T(), err) - assert.Equal(s.T(), 0, len(data)) + assert.Nil(s.T(), data) } func (s *InternalSuite) Test_WriteLoadControlLimit() { From 6f39d11329878f4c9eaebac7c736b1c4d000504a Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 5 Sep 2024 11:27:55 +0200 Subject: [PATCH 11/25] Disable a heartbeat test for now --- features/internal/devicediagnosis_test.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/features/internal/devicediagnosis_test.go b/features/internal/devicediagnosis_test.go index 203a3b73..a7e6168c 100644 --- a/features/internal/devicediagnosis_test.go +++ b/features/internal/devicediagnosis_test.go @@ -113,10 +113,13 @@ func (s *DeviceDiagnosisSuite) Test_IsHeartbeatWithinDuration() { result = s.remoteSut.IsHeartbeatWithinDuration(time.Second * 10) assert.Equal(s.T(), true, result) - time.Sleep(time.Second * 2) - - result = s.localSut.IsHeartbeatWithinDuration(time.Second * 1) - assert.Equal(s.T(), false, result) - result = s.remoteSut.IsHeartbeatWithinDuration(time.Second * 1) - assert.Equal(s.T(), false, result) + // Disable this test as it may sometimes fail due to timing issues + /* + time.Sleep(time.Second * 2) + + result = s.localSut.IsHeartbeatWithinDuration(time.Millisecond * 500) + assert.Equal(s.T(), false, result) + result = s.remoteSut.IsHeartbeatWithinDuration(time.Millisecond * 500) + assert.Equal(s.T(), false, result) + */ } From ce6e4341ae4088146705729ca86eecb6f3a32560 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 5 Sep 2024 12:18:43 +0200 Subject: [PATCH 12/25] Try different gosec action --- .github/workflows/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml index ecc2341b..58bb98c8 100644 --- a/.github/workflows/default.yml +++ b/.github/workflows/default.yml @@ -48,7 +48,7 @@ jobs: file: coverage.out - name: Run Gosec Security Scanner - uses: securego/gosec@master + uses: securego/gosec@11d69032b0856c96afd4c493967ab7a30e20ff5e with: # we let the report trigger content trigger a failure using the GitHub Security features. args: '-no-fail -fmt sarif -out results.sarif ./...' From 4faee21510d1f0a08d28b2e45a15f87c974223c1 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 7 Sep 2024 21:50:09 +0200 Subject: [PATCH 13/25] Various updates - Update Github workflow to stable gosec - Update SHIP and SPINE - Check for subscriptions and bindings before requesting them --- .github/workflows/default.yml | 2 +- go.mod | 8 ++--- go.sum | 4 +-- usecases/cem/cevc/events.go | 30 ++++++++++++------ usecases/cem/evcc/events.go | 31 ++++++++++++------ usecases/cem/evcem/events.go | 12 ++++--- usecases/cem/opev/events.go | 12 ++++--- usecases/cem/vabd/events.go | 12 ++++--- usecases/cem/vapd/events.go | 18 +++++++---- usecases/cs/lpc/events.go | 12 ++++--- usecases/cs/lpc/usecase.go | 10 ++++-- usecases/cs/lpc/usecase_test.go | 56 +++++++++++++++++++++++++++------ usecases/cs/lpp/events.go | 12 ++++--- usecases/cs/lpp/usecase.go | 4 +-- usecases/eg/lpc/events.go | 30 ++++++++++++------ usecases/eg/lpp/events.go | 30 ++++++++++++------ usecases/ma/mgcp/events.go | 18 +++++++---- usecases/ma/mpc/events.go | 12 ++++--- 18 files changed, 214 insertions(+), 99 deletions(-) diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml index 58bb98c8..d649a4e0 100644 --- a/.github/workflows/default.yml +++ b/.github/workflows/default.yml @@ -48,7 +48,7 @@ jobs: file: coverage.out - name: Run Gosec Security Scanner - uses: securego/gosec@11d69032b0856c96afd4c493967ab7a30e20ff5e + uses: securego/gosec@v2.20.0 with: # we let the report trigger content trigger a failure using the GitHub Security features. args: '-no-fail -fmt sarif -out results.sarif ./...' diff --git a/go.mod b/go.mod index 8817ed02..f3bc91e0 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,8 @@ module github.com/enbility/eebus-go go 1.21.1 require ( - github.com/enbility/ship-go v0.5.3 - github.com/enbility/spine-go v0.6.2 + github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 + github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36 github.com/stretchr/testify v1.9.0 ) @@ -35,7 +35,3 @@ retract ( v0.2.2 // Contains retractions only. v0.2.1 // Published accidentally. ) - -replace github.com/enbility/ship-go => github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 - -replace github.com/enbility/spine-go => github.com/enbility/spine-go v0.0.0-20240903070433-dd8261993071 diff --git a/go.sum b/go.sum index 076518cb..024a2d12 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2 h1:voP4zFVNvVWxl github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2/go.mod h1:KJXUEgg/b4XZzS+OFfqnykHREsinuNSL/IzJ+nU43P8= github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 h1:i/n9UFYf660TyC8Y48P3MDxLaWWKRNW3pFjEOVzPzto= github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825/go.mod h1:dzymc1D7BDZUTLVHVt9JRRkFLlBrlUmRKyLJvAe07Mc= -github.com/enbility/spine-go v0.0.0-20240903070433-dd8261993071 h1:rjvpnD3xTrSPdU6AQK4miwl/gZQ84CJ6gv/kEEguBME= -github.com/enbility/spine-go v0.0.0-20240903070433-dd8261993071/go.mod h1:6AbRXzd0fLVGFJdT60YQACe1WskwdjiznCfljQ+Ud6s= +github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36 h1:Y44hzp5uIYSEyBMe/zwFzlXKokgZHQ9cv2NiIF1NkZs= +github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450/go.mod h1:1sUbJ+VE7yLNyRzGoCMjoDWtdZ+bW4aYBKx2+Rw+9hs= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= diff --git a/usecases/cem/cevc/events.go b/usecases/cem/cevc/events.go index 1dd07b47..c47e31fd 100644 --- a/usecases/cem/cevc/events.go +++ b/usecases/cem/cevc/events.go @@ -49,8 +49,10 @@ func (e *CEVC) HandleEvent(payload spineapi.EventPayload) { func (e *CEVC) evConnected(entity spineapi.EntityRemoteInterface) { // initialise features, e.g. subscriptions, descriptions if evDeviceConfiguration, err := client.NewDeviceConfiguration(e.LocalEntity, entity); err == nil { - if _, err := evDeviceConfiguration.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evDeviceConfiguration.HasSubscription() { + if _, err := evDeviceConfiguration.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get device configuration descriptions @@ -60,12 +62,16 @@ func (e *CEVC) evConnected(entity spineapi.EntityRemoteInterface) { } if evTimeSeries, err := client.NewTimeSeries(e.LocalEntity, entity); err == nil { - if _, err := evTimeSeries.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evTimeSeries.HasSubscription() { + if _, err := evTimeSeries.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := evTimeSeries.Bind(); err != nil { - logging.Log().Debug(err) + if !evTimeSeries.HasBinding() { + if _, err := evTimeSeries.Bind(); err != nil { + logging.Log().Debug(err) + } } // get time series descriptions @@ -80,12 +86,16 @@ func (e *CEVC) evConnected(entity spineapi.EntityRemoteInterface) { } if evIncentiveTable, err := client.NewIncentiveTable(e.LocalEntity, entity); err == nil { - if _, err := evIncentiveTable.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evIncentiveTable.HasSubscription() { + if _, err := evIncentiveTable.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := evIncentiveTable.Bind(); err != nil { - logging.Log().Debug(err) + if !evIncentiveTable.HasBinding() { + if _, err := evIncentiveTable.Bind(); err != nil { + logging.Log().Debug(err) + } } // get incentivetable descriptions diff --git a/usecases/cem/evcc/events.go b/usecases/cem/evcc/events.go index aa35c4b9..0c789827 100644 --- a/usecases/cem/evcc/events.go +++ b/usecases/cem/evcc/events.go @@ -58,8 +58,10 @@ func (e *EVCC) HandleEvent(payload spineapi.EventPayload) { func (e *EVCC) evConnected(payload spineapi.EventPayload) { // initialise features, e.g. subscriptions, descriptions if evDeviceClassification, err := client.NewDeviceClassification(e.LocalEntity, payload.Entity); err == nil { - if _, err := evDeviceClassification.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evDeviceClassification.HasSubscription() { + if _, err := evDeviceClassification.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get manufacturer details @@ -69,9 +71,12 @@ func (e *EVCC) evConnected(payload spineapi.EventPayload) { } if evDeviceConfiguration, err := client.NewDeviceConfiguration(e.LocalEntity, payload.Entity); err == nil { - if _, err := evDeviceConfiguration.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evDeviceConfiguration.HasSubscription() { + if _, err := evDeviceConfiguration.Subscribe(); err != nil { + logging.Log().Debug(err) + } } + // get ev configuration data if _, err := evDeviceConfiguration.RequestKeyValueDescriptions(nil, nil); err != nil { logging.Log().Debug(err) @@ -79,8 +84,10 @@ func (e *EVCC) evConnected(payload spineapi.EventPayload) { } if evDeviceDiagnosis, err := client.NewDeviceDiagnosis(e.LocalEntity, payload.Entity); err == nil { - if _, err := evDeviceDiagnosis.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evDeviceDiagnosis.HasSubscription() { + if _, err := evDeviceDiagnosis.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get device diagnosis state @@ -90,8 +97,10 @@ func (e *EVCC) evConnected(payload spineapi.EventPayload) { } if evElectricalConnection, err := client.NewElectricalConnection(e.LocalEntity, payload.Entity); err == nil { - if _, err := evElectricalConnection.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evElectricalConnection.HasSubscription() { + if _, err := evElectricalConnection.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get electrical connection parameter descriptions @@ -106,8 +115,10 @@ func (e *EVCC) evConnected(payload spineapi.EventPayload) { } if evIdentification, err := client.NewIdentification(e.LocalEntity, payload.Entity); err == nil { - if _, err := evIdentification.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evIdentification.HasSubscription() { + if _, err := evIdentification.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get identification diff --git a/usecases/cem/evcem/events.go b/usecases/cem/evcem/events.go index 61613190..e26e6556 100644 --- a/usecases/cem/evcem/events.go +++ b/usecases/cem/evcem/events.go @@ -43,8 +43,10 @@ func (e *EVCEM) evConnected(entity spineapi.EntityRemoteInterface) { // initialise features, e.g. subscriptions, descriptions if evElectricalConnection, err := client.NewElectricalConnection(e.LocalEntity, entity); err == nil { - if _, err := evElectricalConnection.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evElectricalConnection.HasSubscription() { + if _, err := evElectricalConnection.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get electrical connection descriptions @@ -59,8 +61,10 @@ func (e *EVCEM) evConnected(entity spineapi.EntityRemoteInterface) { } if evMeasurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { - if _, err := evMeasurement.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evMeasurement.HasSubscription() { + if _, err := evMeasurement.Subscribe(); err != nil { + logging.Log().Debug(err) + } } // get measurement descriptions diff --git a/usecases/cem/opev/events.go b/usecases/cem/opev/events.go index 611d8f49..05a33405 100644 --- a/usecases/cem/opev/events.go +++ b/usecases/cem/opev/events.go @@ -43,12 +43,16 @@ func (e *OPEV) HandleEvent(payload spineapi.EventPayload) { func (e *OPEV) evConnected(entity spineapi.EntityRemoteInterface) { // initialise features, e.g. subscriptions, descriptions if evLoadControl, err := client.NewLoadControl(e.LocalEntity, entity); err == nil { - if _, err := evLoadControl.Subscribe(); err != nil { - logging.Log().Debug(err) + if !evLoadControl.HasSubscription() { + if _, err := evLoadControl.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := evLoadControl.Bind(); err != nil { - logging.Log().Debug(err) + if !evLoadControl.HasBinding() { + if _, err := evLoadControl.Bind(); err != nil { + logging.Log().Debug(err) + } } // get descriptions diff --git a/usecases/cem/vabd/events.go b/usecases/cem/vabd/events.go index 46af814d..fa8f9ab9 100644 --- a/usecases/cem/vabd/events.go +++ b/usecases/cem/vabd/events.go @@ -39,8 +39,10 @@ func (e *VABD) HandleEvent(payload spineapi.EventPayload) { // process required steps when a grid device is connected func (e *VABD) inverterConnected(entity spineapi.EntityRemoteInterface) { if electricalConnection, err := client.NewElectricalConnection(e.LocalEntity, entity); err == nil { - if _, err := electricalConnection.Subscribe(); err != nil { - logging.Log().Error(err) + if !electricalConnection.HasSubscription() { + if _, err := electricalConnection.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get electrical connection parameter @@ -54,8 +56,10 @@ func (e *VABD) inverterConnected(entity spineapi.EntityRemoteInterface) { } if measurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { - if _, err := measurement.Subscribe(); err != nil { - logging.Log().Error(err) + if !measurement.HasSubscription() { + if _, err := measurement.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get measurement parameters diff --git a/usecases/cem/vapd/events.go b/usecases/cem/vapd/events.go index 2dd03d31..30f94a69 100644 --- a/usecases/cem/vapd/events.go +++ b/usecases/cem/vapd/events.go @@ -45,8 +45,10 @@ func (e *VAPD) HandleEvent(payload spineapi.EventPayload) { // process required steps when a grid device is connected func (e *VAPD) inverterConnected(entity spineapi.EntityRemoteInterface) { if deviceConfiguration, err := client.NewDeviceConfiguration(e.LocalEntity, entity); err == nil { - if _, err := deviceConfiguration.Subscribe(); err != nil { - logging.Log().Error(err) + if !deviceConfiguration.HasSubscription() { + if _, err := deviceConfiguration.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get configuration data @@ -56,8 +58,10 @@ func (e *VAPD) inverterConnected(entity spineapi.EntityRemoteInterface) { } if electricalConnection, err := client.NewElectricalConnection(e.LocalEntity, entity); err == nil { - if _, err := electricalConnection.Subscribe(); err != nil { - logging.Log().Error(err) + if !electricalConnection.HasSubscription() { + if _, err := electricalConnection.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get electrical connection parameter @@ -71,8 +75,10 @@ func (e *VAPD) inverterConnected(entity spineapi.EntityRemoteInterface) { } if measurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { - if _, err := measurement.Subscribe(); err != nil { - logging.Log().Error(err) + if !measurement.HasSubscription() { + if _, err := measurement.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get measurement parameters diff --git a/usecases/cs/lpc/events.go b/usecases/cs/lpc/events.go index f2f3ef7b..65aa3a99 100644 --- a/usecases/cs/lpc/events.go +++ b/usecases/cs/lpc/events.go @@ -102,8 +102,10 @@ func (e *LPC) deviceConnected(payload spineapi.EventPayload) { if len(deviceDiagEntities) == 1 { if localDeviceDiag, err := client.NewDeviceDiagnosis(e.LocalEntity, deviceDiagEntities[0]); err == nil { e.heartbeatDiag = localDeviceDiag - if _, err := localDeviceDiag.Subscribe(); err != nil { - logging.Log().Debug(err) + if !localDeviceDiag.HasSubscription() { + if _, err := localDeviceDiag.Subscribe(); err != nil { + logging.Log().Debug(err) + } } if _, err := localDeviceDiag.RequestHeartbeat(); err != nil { @@ -126,8 +128,10 @@ func (e *LPC) subscribeHeartbeatWorkaround(payload spineapi.EventPayload) { if e.heartbeatKeoWorkaround { if localDeviceDiag, err := client.NewDeviceDiagnosis(e.LocalEntity, payload.Entity); err == nil { e.heartbeatDiag = localDeviceDiag - if _, err := localDeviceDiag.Subscribe(); err != nil { - logging.Log().Debug(err) + if !localDeviceDiag.HasSubscription() { + if _, err := localDeviceDiag.Subscribe(); err != nil { + logging.Log().Debug(err) + } } if _, err := localDeviceDiag.RequestHeartbeat(); err != nil { diff --git a/usecases/cs/lpc/usecase.go b/usecases/cs/lpc/usecase.go index f974a335..7053c19e 100644 --- a/usecases/cs/lpc/usecase.go +++ b/usecases/cs/lpc/usecase.go @@ -8,6 +8,7 @@ import ( "github.com/enbility/eebus-go/features/server" ucapi "github.com/enbility/eebus-go/usecases/api" "github.com/enbility/eebus-go/usecases/usecase" + "github.com/enbility/ship-go/logging" spineapi "github.com/enbility/spine-go/api" "github.com/enbility/spine-go/model" "github.com/enbility/spine-go/spine" @@ -122,13 +123,16 @@ func (e *LPC) approveOrDenyConsumptionLimit(msg *spineapi.Message, approve bool, // the implementation only considers write messages for this use case and // approves all others func (e *LPC) loadControlWriteCB(msg *spineapi.Message) { + logging.Log().Debug("LPC loadControlWriteCB") if msg.RequestHeader == nil || msg.RequestHeader.MsgCounter == nil || msg.Cmd.LoadControlLimitListData == nil { + logging.Log().Debug("LPC loadControlWriteCB: invalid message") return } _, limitId, err := e.loadControlServerAndLimitId() if err != nil { + logging.Log().Debug("LPC loadControlWriteCB: error getting limit id") return } @@ -137,6 +141,7 @@ func (e *LPC) loadControlWriteCB(msg *spineapi.Message) { // we assume there is always only one limit if data == nil || data.LoadControlLimitData == nil || len(data.LoadControlLimitData) == 0 { + logging.Log().Debug("LPC loadControlWriteCB: no data") return } @@ -146,6 +151,7 @@ func (e *LPC) loadControlWriteCB(msg *spineapi.Message) { for _, item := range data.LoadControlLimitData { if item.LimitId == nil || limitId != *item.LimitId { + logging.Log().Debug("LPC loadControlWriteCB: no matching limit id") continue } @@ -223,7 +229,7 @@ func (e *LPC) AddFeatures() { _ = dcs.UpdateKeyValueDataForFilter( model.DeviceConfigurationKeyValueDataType{ Value: value, - IsValueChangeable: util.Ptr(false), + IsValueChangeable: util.Ptr(true), }, nil, model.DeviceConfigurationKeyValueDescriptionDataType{ @@ -237,7 +243,7 @@ func (e *LPC) AddFeatures() { _ = dcs.UpdateKeyValueDataForFilter( model.DeviceConfigurationKeyValueDataType{ Value: value, - IsValueChangeable: util.Ptr(false), + IsValueChangeable: util.Ptr(true), }, nil, model.DeviceConfigurationKeyValueDescriptionDataType{ diff --git a/usecases/cs/lpc/usecase_test.go b/usecases/cs/lpc/usecase_test.go index 119c9a87..75eda834 100644 --- a/usecases/cs/lpc/usecase_test.go +++ b/usecases/cs/lpc/usecase_test.go @@ -27,11 +27,12 @@ func (s *CsLPCSuite) Test_loadControlServerAndLimitId() { } func (s *CsLPCSuite) Test_loadControlWriteCB() { - msg := &spineapi.Message{} + msg := spineapi.Message{} - s.sut.loadControlWriteCB(msg) + s.sut.loadControlWriteCB(&msg) + assert.False(s.T(), s.eventCalled) - msg = &spineapi.Message{ + msg = spineapi.Message{ RequestHeader: &model.HeaderType{ MsgCounter: util.Ptr(model.MsgCounterType(500)), }, @@ -42,17 +43,23 @@ func (s *CsLPCSuite) Test_loadControlWriteCB() { EntityRemote: s.monitoredEntity, } - s.sut.loadControlWriteCB(msg) + msg0 := msg + s.sut.loadControlWriteCB(&msg0) - msg.Cmd = model.CmdType{ + msg1 := msg + msg1.RequestHeader.MsgCounter = util.Ptr(model.MsgCounterType(501)) + msg1.Cmd = model.CmdType{ LoadControlLimitListData: &model.LoadControlLimitListDataType{ LoadControlLimitData: []model.LoadControlLimitDataType{}, }, } - s.sut.loadControlWriteCB(msg) + s.sut.loadControlWriteCB(&msg1) + assert.False(s.T(), s.eventCalled) - msg.Cmd = model.CmdType{ + msg2 := msg + msg2.RequestHeader.MsgCounter = util.Ptr(model.MsgCounterType(502)) + msg2.Cmd = model.CmdType{ LoadControlLimitListData: &model.LoadControlLimitListDataType{ LoadControlLimitData: []model.LoadControlLimitDataType{ {}, @@ -60,9 +67,12 @@ func (s *CsLPCSuite) Test_loadControlWriteCB() { }, } - s.sut.loadControlWriteCB(msg) + s.sut.loadControlWriteCB(&msg2) + assert.False(s.T(), s.eventCalled) - msg.Cmd = model.CmdType{ + msg3 := msg + msg3.RequestHeader.MsgCounter = util.Ptr(model.MsgCounterType(503)) + msg3.Cmd = model.CmdType{ LoadControlLimitListData: &model.LoadControlLimitListDataType{ LoadControlLimitData: []model.LoadControlLimitDataType{ { @@ -75,7 +85,33 @@ func (s *CsLPCSuite) Test_loadControlWriteCB() { }, } - s.sut.loadControlWriteCB(msg) + s.sut.loadControlWriteCB(&msg3) + assert.True(s.T(), s.eventCalled) + + msg4 := msg + msg4.RequestHeader.MsgCounter = util.Ptr(model.MsgCounterType(504)) + msg4.Cmd = model.CmdType{ + Filter: []model.FilterType{ + { + CmdControl: &model.CmdControlType{ + Partial: util.Ptr(model.ElementTagType{}), + }, + }, + }, + LoadControlLimitListData: &model.LoadControlLimitListDataType{ + LoadControlLimitData: []model.LoadControlLimitDataType{ + { + LimitId: util.Ptr(model.LoadControlLimitIdType(0)), + IsLimitActive: util.Ptr(true), + Value: model.NewScaledNumberType(5000), + TimePeriod: model.NewTimePeriodTypeWithRelativeEndTime(time.Hour * 3), + }, + }, + }, + } + + s.sut.loadControlWriteCB(&msg4) + assert.True(s.T(), s.eventCalled) } func (s *CsLPCSuite) Test_UpdateUseCaseAvailability() { diff --git a/usecases/cs/lpp/events.go b/usecases/cs/lpp/events.go index d7c2541d..ea68cad2 100644 --- a/usecases/cs/lpp/events.go +++ b/usecases/cs/lpp/events.go @@ -102,8 +102,10 @@ func (e *LPP) deviceConnected(payload spineapi.EventPayload) { if len(deviceDiagEntities) == 1 { if localDeviceDiag, err := client.NewDeviceDiagnosis(e.LocalEntity, deviceDiagEntities[0]); err == nil { e.heartbeatDiag = localDeviceDiag - if _, err := localDeviceDiag.Subscribe(); err != nil { - logging.Log().Debug(err) + if !localDeviceDiag.HasSubscription() { + if _, err := localDeviceDiag.Subscribe(); err != nil { + logging.Log().Debug(err) + } } if _, err := localDeviceDiag.RequestHeartbeat(); err != nil { @@ -126,8 +128,10 @@ func (e *LPP) subscribeHeartbeatWorkaround(payload spineapi.EventPayload) { if e.heartbeatKeoWorkaround { if localDeviceDiag, err := client.NewDeviceDiagnosis(e.LocalEntity, payload.Entity); err == nil { e.heartbeatDiag = localDeviceDiag - if _, err := localDeviceDiag.Subscribe(); err != nil { - logging.Log().Debug(err) + if !localDeviceDiag.HasSubscription() { + if _, err := localDeviceDiag.Subscribe(); err != nil { + logging.Log().Debug(err) + } } if _, err := localDeviceDiag.RequestHeartbeat(); err != nil { diff --git a/usecases/cs/lpp/usecase.go b/usecases/cs/lpp/usecase.go index 9d8a6d64..47de65f0 100644 --- a/usecases/cs/lpp/usecase.go +++ b/usecases/cs/lpp/usecase.go @@ -223,7 +223,7 @@ func (e *LPP) AddFeatures() { _ = dcs.UpdateKeyValueDataForFilter( model.DeviceConfigurationKeyValueDataType{ Value: value, - IsValueChangeable: util.Ptr(false), + IsValueChangeable: util.Ptr(true), }, nil, model.DeviceConfigurationKeyValueDescriptionDataType{ @@ -237,7 +237,7 @@ func (e *LPP) AddFeatures() { _ = dcs.UpdateKeyValueDataForFilter( model.DeviceConfigurationKeyValueDataType{ Value: value, - IsValueChangeable: util.Ptr(false), + IsValueChangeable: util.Ptr(true), }, nil, model.DeviceConfigurationKeyValueDescriptionDataType{ diff --git a/usecases/eg/lpc/events.go b/usecases/eg/lpc/events.go index 3afbe06f..5d92c4b4 100644 --- a/usecases/eg/lpc/events.go +++ b/usecases/eg/lpc/events.go @@ -43,12 +43,16 @@ func (e *LPC) HandleEvent(payload spineapi.EventPayload) { func (e *LPC) connected(entity spineapi.EntityRemoteInterface) { // initialise features, e.g. subscriptions, descriptions if loadControl, err := client.NewLoadControl(e.LocalEntity, entity); err == nil { - if _, err := loadControl.Subscribe(); err != nil { - logging.Log().Debug(err) + if !loadControl.HasSubscription() { + if _, err := loadControl.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := loadControl.Bind(); err != nil { - logging.Log().Debug(err) + if !loadControl.HasBinding() { + if _, err := loadControl.Bind(); err != nil { + logging.Log().Debug(err) + } } // get descriptions @@ -63,12 +67,16 @@ func (e *LPC) connected(entity spineapi.EntityRemoteInterface) { } if deviceConfiguration, err := client.NewDeviceConfiguration(e.LocalEntity, entity); err == nil { - if _, err := deviceConfiguration.Subscribe(); err != nil { - logging.Log().Debug(err) + if !deviceConfiguration.HasSubscription() { + if _, err := deviceConfiguration.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := deviceConfiguration.Bind(); err != nil { - logging.Log().Debug(err) + if !deviceConfiguration.HasBinding() { + if _, err := deviceConfiguration.Bind(); err != nil { + logging.Log().Debug(err) + } } // get descriptions @@ -79,8 +87,10 @@ func (e *LPC) connected(entity spineapi.EntityRemoteInterface) { } if deviceDiagnosis, err := client.NewDeviceDiagnosis(e.LocalEntity, entity); err == nil { - if _, err := deviceDiagnosis.Subscribe(); err != nil { - logging.Log().Debug(err) + if !deviceDiagnosis.HasSubscription() { + if _, err := deviceDiagnosis.Subscribe(); err != nil { + logging.Log().Debug(err) + } } if _, err := deviceDiagnosis.RequestHeartbeat(); err != nil { diff --git a/usecases/eg/lpp/events.go b/usecases/eg/lpp/events.go index aff875a8..38798f04 100644 --- a/usecases/eg/lpp/events.go +++ b/usecases/eg/lpp/events.go @@ -44,12 +44,16 @@ func (e *LPP) HandleEvent(payload spineapi.EventPayload) { func (e *LPP) connected(entity spineapi.EntityRemoteInterface) { // initialise features, e.g. subscriptions, descriptions if loadControl, err := client.NewLoadControl(e.LocalEntity, entity); err == nil { - if _, err := loadControl.Subscribe(); err != nil { - logging.Log().Debug(err) + if !loadControl.HasSubscription() { + if _, err := loadControl.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := loadControl.Bind(); err != nil { - logging.Log().Debug(err) + if !loadControl.HasBinding() { + if _, err := loadControl.Bind(); err != nil { + logging.Log().Debug(err) + } } // get descriptions @@ -64,12 +68,16 @@ func (e *LPP) connected(entity spineapi.EntityRemoteInterface) { } if deviceConfiguration, err := client.NewDeviceConfiguration(e.LocalEntity, entity); err == nil { - if _, err := deviceConfiguration.Subscribe(); err != nil { - logging.Log().Debug(err) + if !deviceConfiguration.HasSubscription() { + if _, err := deviceConfiguration.Subscribe(); err != nil { + logging.Log().Debug(err) + } } - if _, err := deviceConfiguration.Bind(); err != nil { - logging.Log().Debug(err) + if !deviceConfiguration.HasBinding() { + if _, err := deviceConfiguration.Bind(); err != nil { + logging.Log().Debug(err) + } } // get descriptions @@ -80,8 +88,10 @@ func (e *LPP) connected(entity spineapi.EntityRemoteInterface) { } if deviceDiagnosis, err := client.NewDeviceDiagnosis(e.LocalEntity, entity); err == nil { - if _, err := deviceDiagnosis.Subscribe(); err != nil { - logging.Log().Debug(err) + if !deviceDiagnosis.HasSubscription() { + if _, err := deviceDiagnosis.Subscribe(); err != nil { + logging.Log().Debug(err) + } } if _, err := deviceDiagnosis.RequestHeartbeat(); err != nil { diff --git a/usecases/ma/mgcp/events.go b/usecases/ma/mgcp/events.go index abcf61c3..38a2f81c 100644 --- a/usecases/ma/mgcp/events.go +++ b/usecases/ma/mgcp/events.go @@ -45,8 +45,10 @@ func (e *MGCP) HandleEvent(payload spineapi.EventPayload) { // process required steps when a grid device is connected func (e *MGCP) gridConnected(entity spineapi.EntityRemoteInterface) { if deviceConfiguration, err := client.NewDeviceConfiguration(e.LocalEntity, entity); err == nil { - if _, err := deviceConfiguration.Subscribe(); err != nil { - logging.Log().Error(err) + if !deviceConfiguration.HasSubscription() { + if _, err := deviceConfiguration.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get configuration data @@ -56,8 +58,10 @@ func (e *MGCP) gridConnected(entity spineapi.EntityRemoteInterface) { } if electricalConnection, err := client.NewElectricalConnection(e.LocalEntity, entity); err == nil { - if _, err := electricalConnection.Subscribe(); err != nil { - logging.Log().Error(err) + if !electricalConnection.HasSubscription() { + if _, err := electricalConnection.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get electrical connection parameter @@ -71,8 +75,10 @@ func (e *MGCP) gridConnected(entity spineapi.EntityRemoteInterface) { } if measurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { - if _, err := measurement.Subscribe(); err != nil { - logging.Log().Error(err) + if !measurement.HasSubscription() { + if _, err := measurement.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get measurement parameters diff --git a/usecases/ma/mpc/events.go b/usecases/ma/mpc/events.go index 2cf93386..ae13b5b9 100644 --- a/usecases/ma/mpc/events.go +++ b/usecases/ma/mpc/events.go @@ -39,8 +39,10 @@ func (e *MPC) HandleEvent(payload spineapi.EventPayload) { // process required steps when a device is connected func (e *MPC) deviceConnected(entity spineapi.EntityRemoteInterface) { if electricalConnection, err := client.NewElectricalConnection(e.LocalEntity, entity); err == nil { - if _, err := electricalConnection.Subscribe(); err != nil { - logging.Log().Error(err) + if !electricalConnection.HasSubscription() { + if _, err := electricalConnection.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get electrical connection parameter @@ -54,8 +56,10 @@ func (e *MPC) deviceConnected(entity spineapi.EntityRemoteInterface) { } if measurement, err := client.NewMeasurement(e.LocalEntity, entity); err == nil { - if _, err := measurement.Subscribe(); err != nil { - logging.Log().Error(err) + if !measurement.HasSubscription() { + if _, err := measurement.Subscribe(); err != nil { + logging.Log().Error(err) + } } // get measurement parameters From 243e3701a1fc00158fa0d77fec3627baae8bd002 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 7 Sep 2024 21:58:45 +0200 Subject: [PATCH 14/25] Fix tests --- usecases/cs/lpc/public_test.go | 11 +++++++---- usecases/cs/lpp/public_test.go | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/usecases/cs/lpc/public_test.go b/usecases/cs/lpc/public_test.go index 8aceb046..77a5d8e1 100644 --- a/usecases/cs/lpc/public_test.go +++ b/usecases/cs/lpc/public_test.go @@ -81,21 +81,21 @@ func (s *CsLPCSuite) Test_PendingConsumptionLimits() { func (s *CsLPCSuite) Test_Failsafe() { limit, changeable, err := s.sut.FailsafeConsumptionActivePowerLimit() assert.Equal(s.T(), 0.0, limit) - assert.Equal(s.T(), false, changeable) + assert.Equal(s.T(), true, changeable) assert.Nil(s.T(), err) - err = s.sut.SetFailsafeConsumptionActivePowerLimit(10, true) + err = s.sut.SetFailsafeConsumptionActivePowerLimit(10, false) assert.Nil(s.T(), err) limit, changeable, err = s.sut.FailsafeConsumptionActivePowerLimit() assert.Equal(s.T(), 10.0, limit) - assert.Equal(s.T(), true, changeable) + assert.Equal(s.T(), false, changeable) assert.Nil(s.T(), err) // The actual tests of the functionality is located in the util package duration, changeable, err := s.sut.FailsafeDurationMinimum() assert.Equal(s.T(), time.Duration(0), duration) - assert.Equal(s.T(), false, changeable) + assert.Equal(s.T(), true, changeable) assert.Nil(s.T(), err) err = s.sut.SetFailsafeDurationMinimum(time.Duration(time.Hour*1), true) @@ -104,6 +104,9 @@ func (s *CsLPCSuite) Test_Failsafe() { err = s.sut.SetFailsafeDurationMinimum(time.Duration(time.Hour*2), true) assert.Nil(s.T(), err) + err = s.sut.SetFailsafeConsumptionActivePowerLimit(10, true) + assert.Nil(s.T(), err) + limit, changeable, err = s.sut.FailsafeConsumptionActivePowerLimit() assert.Equal(s.T(), 10.0, limit) assert.Equal(s.T(), true, changeable) diff --git a/usecases/cs/lpp/public_test.go b/usecases/cs/lpp/public_test.go index 90442644..6d911172 100644 --- a/usecases/cs/lpp/public_test.go +++ b/usecases/cs/lpp/public_test.go @@ -80,21 +80,21 @@ func (s *CsLPPSuite) Test_PendingProductionLimits() { func (s *CsLPPSuite) Test_Failsafe() { limit, changeable, err := s.sut.FailsafeProductionActivePowerLimit() assert.Equal(s.T(), 0.0, limit) - assert.Equal(s.T(), false, changeable) + assert.Equal(s.T(), true, changeable) assert.Nil(s.T(), err) - err = s.sut.SetFailsafeProductionActivePowerLimit(10, true) + err = s.sut.SetFailsafeProductionActivePowerLimit(10, false) assert.Nil(s.T(), err) limit, changeable, err = s.sut.FailsafeProductionActivePowerLimit() assert.Equal(s.T(), 10.0, limit) - assert.Equal(s.T(), true, changeable) + assert.Equal(s.T(), false, changeable) assert.Nil(s.T(), err) // The actual tests of the functionality is located in the util package duration, changeable, err := s.sut.FailsafeDurationMinimum() assert.Equal(s.T(), time.Duration(0), duration) - assert.Equal(s.T(), false, changeable) + assert.Equal(s.T(), true, changeable) assert.Nil(s.T(), err) err = s.sut.SetFailsafeDurationMinimum(time.Duration(time.Hour*1), true) @@ -103,6 +103,9 @@ func (s *CsLPPSuite) Test_Failsafe() { err = s.sut.SetFailsafeDurationMinimum(time.Duration(time.Hour*2), true) assert.Nil(s.T(), err) + err = s.sut.SetFailsafeProductionActivePowerLimit(10, true) + assert.Nil(s.T(), err) + limit, changeable, err = s.sut.FailsafeProductionActivePowerLimit() assert.Equal(s.T(), 10.0, limit) assert.Equal(s.T(), true, changeable) From 974c8ea387184c40fb6bc56374d683b3b6fbd2b0 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 7 Sep 2024 22:01:11 +0200 Subject: [PATCH 15/25] Update LPC & LPP logging --- usecases/cs/lpc/usecase.go | 2 -- usecases/cs/lpp/usecase.go | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/usecases/cs/lpc/usecase.go b/usecases/cs/lpc/usecase.go index 7053c19e..1228df92 100644 --- a/usecases/cs/lpc/usecase.go +++ b/usecases/cs/lpc/usecase.go @@ -123,7 +123,6 @@ func (e *LPC) approveOrDenyConsumptionLimit(msg *spineapi.Message, approve bool, // the implementation only considers write messages for this use case and // approves all others func (e *LPC) loadControlWriteCB(msg *spineapi.Message) { - logging.Log().Debug("LPC loadControlWriteCB") if msg.RequestHeader == nil || msg.RequestHeader.MsgCounter == nil || msg.Cmd.LoadControlLimitListData == nil { logging.Log().Debug("LPC loadControlWriteCB: invalid message") @@ -151,7 +150,6 @@ func (e *LPC) loadControlWriteCB(msg *spineapi.Message) { for _, item := range data.LoadControlLimitData { if item.LimitId == nil || limitId != *item.LimitId { - logging.Log().Debug("LPC loadControlWriteCB: no matching limit id") continue } diff --git a/usecases/cs/lpp/usecase.go b/usecases/cs/lpp/usecase.go index 47de65f0..bbdaf02b 100644 --- a/usecases/cs/lpp/usecase.go +++ b/usecases/cs/lpp/usecase.go @@ -8,6 +8,7 @@ import ( "github.com/enbility/eebus-go/features/server" ucapi "github.com/enbility/eebus-go/usecases/api" "github.com/enbility/eebus-go/usecases/usecase" + "github.com/enbility/ship-go/logging" spineapi "github.com/enbility/spine-go/api" "github.com/enbility/spine-go/model" "github.com/enbility/spine-go/spine" @@ -123,11 +124,13 @@ func (e *LPP) approveOrDenyProductionLimit(msg *spineapi.Message, approve bool, func (e *LPP) loadControlWriteCB(msg *spineapi.Message) { if msg.RequestHeader == nil || msg.RequestHeader.MsgCounter == nil || msg.Cmd.LoadControlLimitListData == nil { + logging.Log().Debug("LPC loadControlWriteCB: invalid message") return } _, limitId, err := e.loadControlServerAndLimitId() if err != nil { + logging.Log().Debug("LPC loadControlWriteCB: error getting limit id") return } From a741a08109fa6c09cc6992648c2979cdd84b9aee Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 10 Sep 2024 09:32:28 +0200 Subject: [PATCH 16/25] Add missing change for prev PR --- usecases/cs/lpp/usecase.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usecases/cs/lpp/usecase.go b/usecases/cs/lpp/usecase.go index bbdaf02b..ee19c37e 100644 --- a/usecases/cs/lpp/usecase.go +++ b/usecases/cs/lpp/usecase.go @@ -124,13 +124,13 @@ func (e *LPP) approveOrDenyProductionLimit(msg *spineapi.Message, approve bool, func (e *LPP) loadControlWriteCB(msg *spineapi.Message) { if msg.RequestHeader == nil || msg.RequestHeader.MsgCounter == nil || msg.Cmd.LoadControlLimitListData == nil { - logging.Log().Debug("LPC loadControlWriteCB: invalid message") + logging.Log().Debug("LPP loadControlWriteCB: invalid message") return } _, limitId, err := e.loadControlServerAndLimitId() if err != nil { - logging.Log().Debug("LPC loadControlWriteCB: error getting limit id") + logging.Log().Debug("LPP loadControlWriteCB: error getting limit id") return } @@ -139,6 +139,7 @@ func (e *LPP) loadControlWriteCB(msg *spineapi.Message) { // we assume there is always only one limit if data == nil || data.LoadControlLimitData == nil || len(data.LoadControlLimitData) == 0 { + logging.Log().Debug("LPP loadControlWriteCB: no data") return } From 1bba4381463436c80e4c160cb17ff7aeb791b8b3 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 10 Sep 2024 10:33:02 +0200 Subject: [PATCH 17/25] Various minor updates - Update SHIP to latest dev version which support avahi reconnects - Update usecases testhelpers to properly set remote entites device --- go.mod | 4 ++-- go.sum | 8 ++++---- usecases/cem/cevc/testhelper_test.go | 4 ++++ usecases/cem/evcc/testhelper_test.go | 4 ++++ usecases/cem/evcem/testhelper_test.go | 4 ++++ usecases/cem/evsecc/testhelper_test.go | 4 ++++ usecases/cem/evsoc/testhelper_test.go | 4 ++++ usecases/cem/opev/testhelper_test.go | 4 ++++ usecases/cem/oscev/testhelper_test.go | 4 ++++ usecases/cem/vabd/testhelper_test.go | 4 ++++ usecases/cem/vapd/testhelper_test.go | 4 ++++ usecases/cs/lpc/testhelper_test.go | 4 ++++ usecases/cs/lpp/testhelper_test.go | 4 ++++ usecases/eg/lpc/testhelper_test.go | 4 ++++ usecases/eg/lpp/testhelper_test.go | 4 ++++ usecases/ma/mgcp/testhelper_test.go | 4 ++++ usecases/ma/mpc/testhelper_test.go | 4 ++++ usecases/usecase/testhelper_test.go | 6 ++++++ 18 files changed, 72 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index f3bc91e0..ab2f914c 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/enbility/eebus-go go 1.21.1 require ( - github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 + github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36 github.com/stretchr/testify v1.9.0 ) @@ -11,7 +11,7 @@ require ( require ( github.com/ahmetb/go-linq/v3 v3.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2 // indirect + github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a // indirect github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/golanguzb70/lrucache v1.2.0 // indirect diff --git a/go.sum b/go.sum index 024a2d12..02fb4ab8 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ github.com/ahmetb/go-linq/v3 v3.2.0 h1:BEuMfp+b59io8g5wYzNoFe9pWPalRklhlhbiU3hYZ github.com/ahmetb/go-linq/v3 v3.2.0/go.mod h1:haQ3JfOeWK8HpVxMtHHEMPVgBKiYyQ+f1/kLZh/cj9U= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2 h1:voP4zFVNvVWxlV22T1EUAdZ0VlqVV1pkFLhoTTPgwbA= -github.com/enbility/go-avahi v0.0.0-20240829083637-9ae2ef5f5ed2/go.mod h1:KJXUEgg/b4XZzS+OFfqnykHREsinuNSL/IzJ+nU43P8= -github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825 h1:i/n9UFYf660TyC8Y48P3MDxLaWWKRNW3pFjEOVzPzto= -github.com/enbility/ship-go v0.0.0-20240904104254-04d944c4f825/go.mod h1:dzymc1D7BDZUTLVHVt9JRRkFLlBrlUmRKyLJvAe07Mc= +github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a h1:foChWb8lhzqa6lWDRs6COYMdp649YlUirFP8GqoT0JQ= +github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a/go.mod h1:H64mhYcAQUGUUnVqMdZQf93kPecH4M79xwH95Lddt3U= +github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 h1:ZuOja5wms/Yujch+f1wQAw5ASY8mEFUpqf/j2LFrjzA= +github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21/go.mod h1:8EaCKa2WOVZ/4SpquvZStPakEarjRXQLNHhC4azvaA0= github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36 h1:Y44hzp5uIYSEyBMe/zwFzlXKokgZHQ9cv2NiIF1NkZs= github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= diff --git a/usecases/cem/cevc/testhelper_test.go b/usecases/cem/cevc/testhelper_test.go index 1d665f30..0522d9fc 100644 --- a/usecases/cem/cevc/testhelper_test.go +++ b/usecases/cem/cevc/testhelper_test.go @@ -193,6 +193,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities diff --git a/usecases/cem/evcc/testhelper_test.go b/usecases/cem/evcc/testhelper_test.go index b2ee9b21..3c282af1 100644 --- a/usecases/cem/evcc/testhelper_test.go +++ b/usecases/cem/evcc/testhelper_test.go @@ -203,6 +203,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, mockSender, entities diff --git a/usecases/cem/evcem/testhelper_test.go b/usecases/cem/evcem/testhelper_test.go index ad02cdbd..91110916 100644 --- a/usecases/cem/evcem/testhelper_test.go +++ b/usecases/cem/evcem/testhelper_test.go @@ -176,6 +176,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities diff --git a/usecases/cem/evsecc/testhelper_test.go b/usecases/cem/evsecc/testhelper_test.go index 70127455..585349aa 100644 --- a/usecases/cem/evsecc/testhelper_test.go +++ b/usecases/cem/evsecc/testhelper_test.go @@ -175,6 +175,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities diff --git a/usecases/cem/evsoc/testhelper_test.go b/usecases/cem/evsoc/testhelper_test.go index f0595c63..b0ca22d1 100644 --- a/usecases/cem/evsoc/testhelper_test.go +++ b/usecases/cem/evsoc/testhelper_test.go @@ -176,6 +176,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities diff --git a/usecases/cem/opev/testhelper_test.go b/usecases/cem/opev/testhelper_test.go index 459787da..33e2e439 100644 --- a/usecases/cem/opev/testhelper_test.go +++ b/usecases/cem/opev/testhelper_test.go @@ -195,6 +195,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities diff --git a/usecases/cem/oscev/testhelper_test.go b/usecases/cem/oscev/testhelper_test.go index 96ca7648..e4ff6e6b 100644 --- a/usecases/cem/oscev/testhelper_test.go +++ b/usecases/cem/oscev/testhelper_test.go @@ -205,6 +205,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities diff --git a/usecases/cem/vabd/testhelper_test.go b/usecases/cem/vabd/testhelper_test.go index 5fd1f410..14caa53c 100644 --- a/usecases/cem/vabd/testhelper_test.go +++ b/usecases/cem/vabd/testhelper_test.go @@ -167,6 +167,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/cem/vapd/testhelper_test.go b/usecases/cem/vapd/testhelper_test.go index 03cfb358..f13eaead 100644 --- a/usecases/cem/vapd/testhelper_test.go +++ b/usecases/cem/vapd/testhelper_test.go @@ -173,6 +173,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/cs/lpc/testhelper_test.go b/usecases/cs/lpc/testhelper_test.go index 09ca06f7..abca42ed 100644 --- a/usecases/cs/lpc/testhelper_test.go +++ b/usecases/cs/lpc/testhelper_test.go @@ -194,6 +194,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/cs/lpp/testhelper_test.go b/usecases/cs/lpp/testhelper_test.go index f2a46b9f..408956c3 100644 --- a/usecases/cs/lpp/testhelper_test.go +++ b/usecases/cs/lpp/testhelper_test.go @@ -194,6 +194,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/eg/lpc/testhelper_test.go b/usecases/eg/lpc/testhelper_test.go index a6fa5f68..dd2b3546 100644 --- a/usecases/eg/lpc/testhelper_test.go +++ b/usecases/eg/lpc/testhelper_test.go @@ -180,6 +180,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/eg/lpp/testhelper_test.go b/usecases/eg/lpp/testhelper_test.go index e11f62b7..5ce67a4e 100644 --- a/usecases/eg/lpp/testhelper_test.go +++ b/usecases/eg/lpp/testhelper_test.go @@ -180,6 +180,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/ma/mgcp/testhelper_test.go b/usecases/ma/mgcp/testhelper_test.go index 01778c5c..2a91d81c 100644 --- a/usecases/ma/mgcp/testhelper_test.go +++ b/usecases/ma/mgcp/testhelper_test.go @@ -172,6 +172,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/ma/mpc/testhelper_test.go b/usecases/ma/mpc/testhelper_test.go index adc5fb7c..a02ec676 100644 --- a/usecases/ma/mpc/testhelper_test.go +++ b/usecases/ma/mpc/testhelper_test.go @@ -166,6 +166,10 @@ func setupDevices( } remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } + localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) return remoteDevice, entities[0] diff --git a/usecases/usecase/testhelper_test.go b/usecases/usecase/testhelper_test.go index 4e8fe2d0..c00498d5 100644 --- a/usecases/usecase/testhelper_test.go +++ b/usecases/usecase/testhelper_test.go @@ -81,6 +81,7 @@ func (s *UseCaseSuite) BeforeTest(suiteName, testName string) { s.localEntity, s.remoteDevice, entities = setupDevices(s.service, s.T()) s.evseEntity = entities[0] s.monitoredEntity = entities[1] + s.remoteDevice.AddEntity(s.monitoredEntity) validActorTypes := []model.UseCaseActorType{model.UseCaseActorTypeEV} validEntityTypes := []model.EntityTypeType{model.EntityTypeTypeEV} @@ -261,6 +262,11 @@ func setupDevices( if err != nil { fmt.Println(err) } + remoteDevice.UpdateDevice(detailedData.DeviceInformation.Description) + + for _, entity := range entities { + entity.UpdateDeviceAddress(*remoteDevice.Address()) + } localDevice.AddRemoteDeviceForSki(remoteSki, remoteDevice) From 9cc1fcff7307369ec609d8d9b60eeb1cd458a8a0 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Wed, 11 Sep 2024 16:02:40 +0200 Subject: [PATCH 18/25] Update SPINE --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ab2f914c..1549e84d 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.21.1 require ( github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 - github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36 + github.com/enbility/spine-go v0.0.0-20240911140055-b637b5392906 github.com/stretchr/testify v1.9.0 ) diff --git a/go.sum b/go.sum index 02fb4ab8..74efa4bf 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a h1:foChWb8lhzqa6 github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a/go.mod h1:H64mhYcAQUGUUnVqMdZQf93kPecH4M79xwH95Lddt3U= github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 h1:ZuOja5wms/Yujch+f1wQAw5ASY8mEFUpqf/j2LFrjzA= github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21/go.mod h1:8EaCKa2WOVZ/4SpquvZStPakEarjRXQLNHhC4azvaA0= -github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36 h1:Y44hzp5uIYSEyBMe/zwFzlXKokgZHQ9cv2NiIF1NkZs= -github.com/enbility/spine-go v0.0.0-20240907194637-0024041a4f36/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= +github.com/enbility/spine-go v0.0.0-20240911140055-b637b5392906 h1:/jhq32DUM6vj/mUwy0134PP6wtP7Rm8SI5tmixZhE4I= +github.com/enbility/spine-go v0.0.0-20240911140055-b637b5392906/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450/go.mod h1:1sUbJ+VE7yLNyRzGoCMjoDWtdZ+bW4aYBKx2+Rw+9hs= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= From e7bda9757d3cb7f794e64f54e97e4d9ff3e858ca Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Wed, 11 Sep 2024 23:44:37 +0200 Subject: [PATCH 19/25] Fix LPP typo for hems demo cmd --- cmd/hems/main.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/hems/main.go b/cmd/hems/main.go index ea743936..069359e2 100644 --- a/cmd/hems/main.go +++ b/cmd/hems/main.go @@ -16,7 +16,6 @@ import ( "github.com/enbility/eebus-go/api" "github.com/enbility/eebus-go/service" ucapi "github.com/enbility/eebus-go/usecases/api" - "github.com/enbility/eebus-go/usecases/cs/lpc" cslpc "github.com/enbility/eebus-go/usecases/cs/lpc" cslpp "github.com/enbility/eebus-go/usecases/cs/lpp" eglpc "github.com/enbility/eebus-go/usecases/eg/lpc" @@ -122,7 +121,7 @@ func (h *hems) OnLPCEvent(ski string, device spineapi.DeviceRemoteInterface, ent } switch event { - case lpc.WriteApprovalRequired: + case cslpc.WriteApprovalRequired: // get pending writes pendingWrites := h.uccslpc.PendingConsumptionLimits() @@ -131,7 +130,7 @@ func (h *hems) OnLPCEvent(ski string, device spineapi.DeviceRemoteInterface, ent fmt.Println("Approving LPC write with msgCounter", msgCounter, "and limit", write.Value, "W") h.uccslpc.ApproveOrDenyConsumptionLimit(msgCounter, true, "") } - case lpc.DataUpdateLimit: + case cslpc.DataUpdateLimit: if currentLimit, err := h.uccslpc.ConsumptionLimit(); err != nil { fmt.Println("New LPC Limit set to", currentLimit.Value, "W") } @@ -146,7 +145,7 @@ func (h *hems) OnLPPEvent(ski string, device spineapi.DeviceRemoteInterface, ent } switch event { - case lpc.WriteApprovalRequired: + case cslpp.WriteApprovalRequired: // get pending writes pendingWrites := h.uccslpp.PendingProductionLimits() @@ -155,7 +154,7 @@ func (h *hems) OnLPPEvent(ski string, device spineapi.DeviceRemoteInterface, ent fmt.Println("Approving LPP write with msgCounter", msgCounter, "and limit", write.Value, "W") h.uccslpp.ApproveOrDenyProductionLimit(msgCounter, true, "") } - case lpc.DataUpdateLimit: + case cslpp.DataUpdateLimit: if currentLimit, err := h.uccslpp.ProductionLimit(); err != nil { fmt.Println("New LPP Limit set to", currentLimit.Value, "W") } From d392fce37b2129263b895417667fd2d19eb7007b Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sun, 15 Sep 2024 12:49:57 +0200 Subject: [PATCH 20/25] Update SPINE and adopt heartbeats per local entity --- api/configuration.go | 3 ++- features/client/helper_test.go | 4 ++-- features/internal/helper_test.go | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- integration_tests/emobility_measurement_test.go | 4 ++-- service/service.go | 3 +-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api/configuration.go b/api/configuration.go index 150e3a5d..d281eb88 100644 --- a/api/configuration.go +++ b/api/configuration.go @@ -64,7 +64,8 @@ type Configuration struct { // The certificate used for the service and its connections, required certificate tls.Certificate - // The timeout to be used for sending heartbeats + // The timeout to be used for sending heartbeats and applied to all + // local entities created on setup the service heartbeatTimeout time.Duration // Optional set which mDNS providers should be used diff --git a/features/client/helper_test.go b/features/client/helper_test.go index d9d63611..0ce38aa2 100644 --- a/features/client/helper_test.go +++ b/features/client/helper_test.go @@ -102,8 +102,8 @@ func setupFeatures( dataCon shipapi.ShipConnectionDataWriterInterface, featureFunctions []featureFunctions) (spineapi.EntityLocalInterface, spineapi.EntityRemoteInterface) { localDevice := spine.NewDeviceLocal("TestBrandName", "TestDeviceModel", "TestSerialNumber", "TestDeviceCode", - "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart, time.Second*4) - localEntity := spine.NewEntityLocal(localDevice, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1})) + "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart) + localEntity := spine.NewEntityLocal(localDevice, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1}), time.Second*4) for i, item := range featureFunctions { f := spine.NewFeatureLocal(uint(i+1), localEntity, item.featureType, model.RoleTypeClient) diff --git a/features/internal/helper_test.go b/features/internal/helper_test.go index 442be090..68533c01 100644 --- a/features/internal/helper_test.go +++ b/features/internal/helper_test.go @@ -102,8 +102,8 @@ func setupFeatures( featureFunctions []featureFunctions, ) (spineapi.EntityLocalInterface, spineapi.EntityRemoteInterface) { localDevice := spine.NewDeviceLocal("TestBrandName", "TestDeviceModel", "TestSerialNumber", "TestDeviceCode", - "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart, time.Second*4) - localEntity := spine.NewEntityLocal(localDevice, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1})) + "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart) + localEntity := spine.NewEntityLocal(localDevice, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1}), time.Second*4) for i, item := range featureFunctions { f := spine.NewFeatureLocal(uint(i+1), localEntity, item.featureType, model.RoleTypeClient) diff --git a/go.mod b/go.mod index 1549e84d..21b7dd39 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.21.1 require ( github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 - github.com/enbility/spine-go v0.0.0-20240911140055-b637b5392906 + github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a github.com/stretchr/testify v1.9.0 ) diff --git a/go.sum b/go.sum index 74efa4bf..288be9f8 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a h1:foChWb8lhzqa6 github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a/go.mod h1:H64mhYcAQUGUUnVqMdZQf93kPecH4M79xwH95Lddt3U= github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 h1:ZuOja5wms/Yujch+f1wQAw5ASY8mEFUpqf/j2LFrjzA= github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21/go.mod h1:8EaCKa2WOVZ/4SpquvZStPakEarjRXQLNHhC4azvaA0= -github.com/enbility/spine-go v0.0.0-20240911140055-b637b5392906 h1:/jhq32DUM6vj/mUwy0134PP6wtP7Rm8SI5tmixZhE4I= -github.com/enbility/spine-go v0.0.0-20240911140055-b637b5392906/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= +github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a h1:S2oeUCg0lnlWIl/CQoB+DGGEyyhtJ5Fxxd1qnRV5pfI= +github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450/go.mod h1:1sUbJ+VE7yLNyRzGoCMjoDWtdZ+bW4aYBKx2+Rw+9hs= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= diff --git a/integration_tests/emobility_measurement_test.go b/integration_tests/emobility_measurement_test.go index b30913fe..90479694 100644 --- a/integration_tests/emobility_measurement_test.go +++ b/integration_tests/emobility_measurement_test.go @@ -39,8 +39,8 @@ type EmobilityMeasurementSuite struct { func (s *EmobilityMeasurementSuite) BeforeTest(suiteName, testName string) { s.sut = spine.NewDeviceLocal("TestBrandName", "TestDeviceModel", "TestSerialNumber", "TestDeviceCode", - "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart, time.Second*4) - s.localEntity = spine.NewEntityLocal(s.sut, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1})) + "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart) + s.localEntity = spine.NewEntityLocal(s.sut, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1}), time.Second*4) s.sut.AddEntity(s.localEntity) f := spine.NewFeatureLocal(1, s.localEntity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeClient) diff --git a/service/service.go b/service/service.go index de7b767f..cddbd368 100644 --- a/service/service.go +++ b/service/service.go @@ -117,14 +117,13 @@ func (s *Service) Setup() error { deviceAddress, sd.DeviceType(), sd.FeatureSet(), - sd.HeartbeatTimeout(), ) // Create the device entities and add it to the SPINE device for _, entityType := range sd.EntityTypes() { entityAddressId := model.AddressEntityType(len(s.spineLocalDevice.Entities())) entityAddress := []model.AddressEntityType{entityAddressId} - entity := spine.NewEntityLocal(s.spineLocalDevice, entityType, entityAddress) + entity := spine.NewEntityLocal(s.spineLocalDevice, entityType, entityAddress, sd.HeartbeatTimeout()) s.spineLocalDevice.AddEntity(entity) } From 3c95ca018c607c0449111ffd6c60333b2f1febd3 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sun, 15 Sep 2024 17:14:24 +0200 Subject: [PATCH 21/25] Update SHIP to properly initialize Zeroconf --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 21b7dd39..05d30b11 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/enbility/eebus-go go 1.21.1 require ( - github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 + github.com/enbility/ship-go v0.0.0-20240915151100-204855558021 github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a github.com/stretchr/testify v1.9.0 ) diff --git a/go.sum b/go.sum index 288be9f8..955a2f3a 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a h1:foChWb8lhzqa6lWDRs6COYMdp649YlUirFP8GqoT0JQ= github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a/go.mod h1:H64mhYcAQUGUUnVqMdZQf93kPecH4M79xwH95Lddt3U= -github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21 h1:ZuOja5wms/Yujch+f1wQAw5ASY8mEFUpqf/j2LFrjzA= -github.com/enbility/ship-go v0.0.0-20240909200111-0d37cebbfc21/go.mod h1:8EaCKa2WOVZ/4SpquvZStPakEarjRXQLNHhC4azvaA0= +github.com/enbility/ship-go v0.0.0-20240915151100-204855558021 h1:R4gpoh58ZKbaALtNPhTItkGXj8RKK6rc8GyUpcuLTx0= +github.com/enbility/ship-go v0.0.0-20240915151100-204855558021/go.mod h1:8EaCKa2WOVZ/4SpquvZStPakEarjRXQLNHhC4azvaA0= github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a h1:S2oeUCg0lnlWIl/CQoB+DGGEyyhtJ5Fxxd1qnRV5pfI= github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= From 740f15eba48e564ee52facc8f8b32360687cf8db Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sun, 15 Sep 2024 17:22:16 +0200 Subject: [PATCH 22/25] Change mDNS default provider By default, avahi is attempted and if not found, go native zeroconf is used --- api/configuration.go | 2 +- api/configuration_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/configuration.go b/api/configuration.go index d281eb88..b3b5bc43 100644 --- a/api/configuration.go +++ b/api/configuration.go @@ -88,7 +88,7 @@ func NewConfiguration( certificate: certificate, port: port, heartbeatTimeout: heartbeatTimeout, - mdnsProviderSelection: mdns.MdnsProviderSelectionGoZeroConfOnly, + mdnsProviderSelection: mdns.MdnsProviderSelectionAll, } if port == 0 { diff --git a/api/configuration_test.go b/api/configuration_test.go index 5e4bfbaa..dd144abf 100644 --- a/api/configuration_test.go +++ b/api/configuration_test.go @@ -78,7 +78,7 @@ func (s *ConfigurationSuite) Test_Configuration() { assert.NotNil(s.T(), config) assert.Nil(s.T(), err) - assert.Equal(s.T(), mdns.MdnsProviderSelectionGoZeroConfOnly, config.MdnsProviderSelection()) + assert.Equal(s.T(), mdns.MdnsProviderSelectionAll, config.MdnsProviderSelection()) config.SetMdnsProviderSelection(mdns.MdnsProviderSelectionAvahiOnly) assert.Equal(s.T(), mdns.MdnsProviderSelectionAvahiOnly, config.MdnsProviderSelection()) From 238b900c6fa144fffeb9f80bdaa876977b57a7d7 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 21 Sep 2024 17:56:45 +0200 Subject: [PATCH 23/25] Update dependencies and minimum go version - Update ship-go to v0.6.0 - Update spine-go to v0.7.0 - Update minimum go version to 1.22.0 - Update other dependencies --- go.mod | 18 +++++++++--------- go.sum | 40 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index 05d30b11..cd6b651b 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/enbility/eebus-go -go 1.21.1 +go 1.22.0 require ( - github.com/enbility/ship-go v0.0.0-20240915151100-204855558021 - github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a + github.com/enbility/ship-go v0.6.0 + github.com/enbility/spine-go v0.7.0 github.com/stretchr/testify v1.9.0 ) @@ -12,22 +12,22 @@ require ( github.com/ahmetb/go-linq/v3 v3.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a // indirect - github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 // indirect + github.com/enbility/zeroconf/v2 v2.0.0-20240920094356-be1cae74fda6 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/golanguzb70/lrucache v1.2.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/miekg/dns v1.1.62 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rickb777/date v1.20.6 // indirect + github.com/rickb777/date v1.21.1 // indirect github.com/rickb777/plural v1.4.2 // indirect github.com/stretchr/objx v0.5.2 // indirect gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a // indirect go.uber.org/mock v0.4.0 // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.28.0 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.29.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.24.0 // indirect - golang.org/x/tools v0.24.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/tools v0.25.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 955a2f3a..84205cbd 100644 --- a/go.sum +++ b/go.sum @@ -4,12 +4,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a h1:foChWb8lhzqa6lWDRs6COYMdp649YlUirFP8GqoT0JQ= github.com/enbility/go-avahi v0.0.0-20240909195612-d5de6b280d7a/go.mod h1:H64mhYcAQUGUUnVqMdZQf93kPecH4M79xwH95Lddt3U= -github.com/enbility/ship-go v0.0.0-20240915151100-204855558021 h1:R4gpoh58ZKbaALtNPhTItkGXj8RKK6rc8GyUpcuLTx0= -github.com/enbility/ship-go v0.0.0-20240915151100-204855558021/go.mod h1:8EaCKa2WOVZ/4SpquvZStPakEarjRXQLNHhC4azvaA0= -github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a h1:S2oeUCg0lnlWIl/CQoB+DGGEyyhtJ5Fxxd1qnRV5pfI= -github.com/enbility/spine-go v0.0.0-20240915104201-575c4bb4751a/go.mod h1:BDvhbs+XsWDGYwd8eQOzPXc8w/avVFmWKLlSKV/gx9k= -github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450 h1:39tnpfiV5OVfYb9sOqYmoivBzTHyNLWSYIxd9Qng1eg= -github.com/enbility/zeroconf/v2 v2.0.0-20240827101515-f3956627c450/go.mod h1:1sUbJ+VE7yLNyRzGoCMjoDWtdZ+bW4aYBKx2+Rw+9hs= +github.com/enbility/ship-go v0.6.0 h1:1ft5NJJHqqGU3/ryYwQj8xBYJLFbf0q2cP9mjlYHlgw= +github.com/enbility/ship-go v0.6.0/go.mod h1:JJp8EQcJhUhTpZ2LSEU4rpdaM3E2n08tswWFWtmm/wU= +github.com/enbility/spine-go v0.7.0 h1:UZeghFgnM3VFU0ghc57Htt6gnxwP9jLppfU2GUMJGgY= +github.com/enbility/spine-go v0.7.0/go.mod h1:IF1sBTr7p3wXqlejeBJcJ8BYFlzzRaZcJsGw8XjgEgc= +github.com/enbility/zeroconf/v2 v2.0.0-20240920094356-be1cae74fda6 h1:XOYvxKtT1oxT37w/5oEiRLuPbm9FuJPt3fiYhX0h8Po= +github.com/enbility/zeroconf/v2 v2.0.0-20240920094356-be1cae74fda6/go.mod h1:BszP9qFV14mPXgyIREbgIdQtWxbAj3OKqvK02HihMoM= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golanguzb70/lrucache v1.2.0 h1:VjpjmB4VTf9VXBtZTJGcgcN0CNFM5egDrrSjkGyQOlg= @@ -20,12 +20,12 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rickb777/date v1.20.6 h1:DQ4QZDcJt+CytSnkFgL0JtQWO0NXN3SaXcTUovoxXhk= -github.com/rickb777/date v1.20.6/go.mod h1:k/6AwXJ0l62oPgZlZ60/Jnf3m+6aTIJQ5Wp/gMpUhSg= +github.com/rickb777/date v1.21.1 h1:tUcQS8riIRoYK5kUAv5aevllFEYUEk2x8OYDyoldOn4= +github.com/rickb777/date v1.21.1/go.mod h1:gnDexsbXViZr2fCKMrY3m6IfAF5U2vSkEaiGJcNFaLQ= github.com/rickb777/plural v1.4.2 h1:Kl/syFGLFZ5EbuV8c9SVud8s5HI2HpCCtOMw2U1kS+A= github.com/rickb777/plural v1.4.2/go.mod h1:kdmXUpmKBJTS0FtG/TFumd//VBWsNTD7zOw7x4umxNw= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -36,18 +36,18 @@ gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a h1:DxppxFKRqJ8 gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a/go.mod h1:NREvu3a57BaK0R1+ztrEzHWiZAihohNLQ6trPxlIqZI= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From b7d0731e8b786298f81fcdd61963bc0a65a683d2 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 21 Sep 2024 18:04:37 +0200 Subject: [PATCH 24/25] Init local usecase server data on demo cmds --- cmd/evse/main.go | 11 +++++++++++ cmd/hems/main.go | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/cmd/evse/main.go b/cmd/evse/main.go index 11a2a8a5..5fa8bb03 100644 --- a/cmd/evse/main.go +++ b/cmd/evse/main.go @@ -15,6 +15,7 @@ import ( "github.com/enbility/eebus-go/api" "github.com/enbility/eebus-go/service" + ucapi "github.com/enbility/eebus-go/usecases/api" "github.com/enbility/eebus-go/usecases/cs/lpc" shipapi "github.com/enbility/ship-go/api" "github.com/enbility/ship-go/cert" @@ -92,6 +93,16 @@ func (h *evse) run() { h.uclpc = lpc.NewLPC(localEntity, h.OnLPCEvent) h.myService.AddUseCase(h.uclpc) + // Initialize local server data + _ = h.uclpc.SetConsumptionNominalMax(32000) + _ = h.uclpc.SetConsumptionLimit(ucapi.LoadLimit{ + Value: 4200, + IsChangeable: true, + IsActive: false, + }) + _ = h.uclpc.SetFailsafeConsumptionActivePowerLimit(4200, true) + _ = h.uclpc.SetFailsafeDurationMinimum(2*time.Hour, true) + if len(remoteSki) == 0 { os.Exit(0) } diff --git a/cmd/hems/main.go b/cmd/hems/main.go index 069359e2..586b201e 100644 --- a/cmd/hems/main.go +++ b/cmd/hems/main.go @@ -103,6 +103,25 @@ func (h *hems) run() { h.uceglpp = eglpp.NewLPP(localEntity, nil) h.myService.AddUseCase(h.uceglpp) + // Initialize local server data + _ = h.uccslpc.SetConsumptionNominalMax(32000) + _ = h.uccslpc.SetConsumptionLimit(ucapi.LoadLimit{ + Value: 4200, + IsChangeable: true, + IsActive: false, + }) + _ = h.uccslpc.SetFailsafeConsumptionActivePowerLimit(4200, true) + _ = h.uccslpc.SetFailsafeDurationMinimum(2*time.Hour, true) + + _ = h.uccslpp.SetProductionNominalMax(10000) + _ = h.uccslpp.SetProductionLimit(ucapi.LoadLimit{ + Value: 10000, + IsChangeable: true, + IsActive: false, + }) + _ = h.uccslpp.SetFailsafeProductionActivePowerLimit(4200, true) + _ = h.uccslpp.SetFailsafeDurationMinimum(2*time.Hour, true) + if len(remoteSki) == 0 { os.Exit(0) } From fc43eb80af242e5581e8c97c14dc4b3cdaf9e867 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 21 Sep 2024 18:05:21 +0200 Subject: [PATCH 25/25] Update README badges --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 871a5eba..0e66927f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # eebus-go -[![Build Status](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=dev)](https://github.com/enbility/eebus-go/actions/workflows/default.yml/badge.svg?branch=dev) +[![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) [![GoDoc](https://img.shields.io/badge/godoc-reference-5272B4)](https://godoc.org/github.com/enbility/eebus-go) -[![Coverage Status](https://coveralls.io/repos/github/enbility/eebus-go/badge.svg?branch=dev)](https://coveralls.io/github/enbility/eebus-go?branch=dev) +[![Coverage Status](https://coveralls.io/repos/github/enbility/eebus-go/badge.svg?branch=main)](https://coveralls.io/github/enbility/eebus-go?branch=main) [![Go report](https://goreportcard.com/badge/github.com/enbility/eebus-go)](https://goreportcard.com/report/github.com/enbility/eebus-go) [![CodeFactor](https://www.codefactor.io/repository/github/enbility/eebus-go/badge)](https://www.codefactor.io/repository/github/enbility/eebus-go)