You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/07/19 16:07:26 UTC
[plc4x] 01/02: feat(cbus): implemented heating application
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 4d1b020c27ffbf86bc8cec881d9b961806019d95
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Jul 19 18:00:11 2022 +0200
feat(cbus): implemented heating application
---
.../cbus/readwrite/model/SALDataHeating.go | 54 +++++++++++++++++---
.../readwrite/model/SALDataIrrigationControl.go | 58 +++++++++++-----------
.../model/SALDataPoolsSpasPondsFountainsControl.go | 58 +++++++++++-----------
.../src/main/resources/protocols/cbus/c-bus.mspec | 9 ++--
4 files changed, 111 insertions(+), 68 deletions(-)
diff --git a/plc4go/protocols/cbus/readwrite/model/SALDataHeating.go b/plc4go/protocols/cbus/readwrite/model/SALDataHeating.go
index 41cb5e248..f5dbe26b7 100644
--- a/plc4go/protocols/cbus/readwrite/model/SALDataHeating.go
+++ b/plc4go/protocols/cbus/readwrite/model/SALDataHeating.go
@@ -31,6 +31,8 @@ type SALDataHeating interface {
utils.LengthAware
utils.Serializable
SALData
+ // GetHeatingData returns HeatingData (property field)
+ GetHeatingData() LightingData
}
// SALDataHeatingExactly can be used when we want exactly this type and not a type which fulfills SALDataHeating.
@@ -43,6 +45,7 @@ type SALDataHeatingExactly interface {
// _SALDataHeating is the data-structure of this message
type _SALDataHeating struct {
*_SALData
+ HeatingData LightingData
}
///////////////////////////////////////////////////////////
@@ -67,10 +70,25 @@ func (m *_SALDataHeating) GetParent() SALData {
return m._SALData
}
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_SALDataHeating) GetHeatingData() LightingData {
+ return m.HeatingData
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
// NewSALDataHeating factory function for _SALDataHeating
-func NewSALDataHeating(salData SALData) *_SALDataHeating {
+func NewSALDataHeating(heatingData LightingData, salData SALData) *_SALDataHeating {
_result := &_SALDataHeating{
- _SALData: NewSALData(salData),
+ HeatingData: heatingData,
+ _SALData: NewSALData(salData),
}
_result._SALData._SALDataChildRequirements = _result
return _result
@@ -98,6 +116,9 @@ func (m *_SALDataHeating) GetLengthInBits() uint16 {
func (m *_SALDataHeating) GetLengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.GetParentLengthInBits())
+ // Simple field (heatingData)
+ lengthInBits += m.HeatingData.GetLengthInBits()
+
return lengthInBits
}
@@ -114,9 +135,17 @@ func SALDataHeatingParse(readBuffer utils.ReadBuffer, applicationId ApplicationI
currentPos := positionAware.GetPos()
_ = currentPos
- // Validation
- if !(bool((1) == (2))) {
- return nil, errors.WithStack(utils.ParseValidationError{"HEATING Not yet implemented"})
+ // Simple Field (heatingData)
+ if pullErr := readBuffer.PullContext("heatingData"); pullErr != nil {
+ return nil, errors.Wrap(pullErr, "Error pulling for heatingData")
+ }
+ _heatingData, _heatingDataErr := LightingDataParse(readBuffer)
+ if _heatingDataErr != nil {
+ return nil, errors.Wrap(_heatingDataErr, "Error parsing 'heatingData' field of SALDataHeating")
+ }
+ heatingData := _heatingData.(LightingData)
+ if closeErr := readBuffer.CloseContext("heatingData"); closeErr != nil {
+ return nil, errors.Wrap(closeErr, "Error closing for heatingData")
}
if closeErr := readBuffer.CloseContext("SALDataHeating"); closeErr != nil {
@@ -125,7 +154,8 @@ func SALDataHeatingParse(readBuffer utils.ReadBuffer, applicationId ApplicationI
// Create a partially initialized instance
_child := &_SALDataHeating{
- _SALData: &_SALData{},
+ HeatingData: heatingData,
+ _SALData: &_SALData{},
}
_child._SALData._SALDataChildRequirements = _child
return _child, nil
@@ -139,6 +169,18 @@ func (m *_SALDataHeating) Serialize(writeBuffer utils.WriteBuffer) error {
return errors.Wrap(pushErr, "Error pushing for SALDataHeating")
}
+ // Simple Field (heatingData)
+ if pushErr := writeBuffer.PushContext("heatingData"); pushErr != nil {
+ return errors.Wrap(pushErr, "Error pushing for heatingData")
+ }
+ _heatingDataErr := writeBuffer.WriteSerializable(m.GetHeatingData())
+ if popErr := writeBuffer.PopContext("heatingData"); popErr != nil {
+ return errors.Wrap(popErr, "Error popping for heatingData")
+ }
+ if _heatingDataErr != nil {
+ return errors.Wrap(_heatingDataErr, "Error serializing 'heatingData' field")
+ }
+
if popErr := writeBuffer.PopContext("SALDataHeating"); popErr != nil {
return errors.Wrap(popErr, "Error popping for SALDataHeating")
}
diff --git a/plc4go/protocols/cbus/readwrite/model/SALDataIrrigationControl.go b/plc4go/protocols/cbus/readwrite/model/SALDataIrrigationControl.go
index f66465d0b..5d84bc332 100644
--- a/plc4go/protocols/cbus/readwrite/model/SALDataIrrigationControl.go
+++ b/plc4go/protocols/cbus/readwrite/model/SALDataIrrigationControl.go
@@ -31,8 +31,8 @@ type SALDataIrrigationControl interface {
utils.LengthAware
utils.Serializable
SALData
- // GetVentilationData returns VentilationData (property field)
- GetVentilationData() LightingData
+ // GetIrrigationControlData returns IrrigationControlData (property field)
+ GetIrrigationControlData() LightingData
}
// SALDataIrrigationControlExactly can be used when we want exactly this type and not a type which fulfills SALDataIrrigationControl.
@@ -45,7 +45,7 @@ type SALDataIrrigationControlExactly interface {
// _SALDataIrrigationControl is the data-structure of this message
type _SALDataIrrigationControl struct {
*_SALData
- VentilationData LightingData
+ IrrigationControlData LightingData
}
///////////////////////////////////////////////////////////
@@ -75,8 +75,8 @@ func (m *_SALDataIrrigationControl) GetParent() SALData {
/////////////////////// Accessors for property fields.
///////////////////////
-func (m *_SALDataIrrigationControl) GetVentilationData() LightingData {
- return m.VentilationData
+func (m *_SALDataIrrigationControl) GetIrrigationControlData() LightingData {
+ return m.IrrigationControlData
}
///////////////////////
@@ -85,10 +85,10 @@ func (m *_SALDataIrrigationControl) GetVentilationData() LightingData {
///////////////////////////////////////////////////////////
// NewSALDataIrrigationControl factory function for _SALDataIrrigationControl
-func NewSALDataIrrigationControl(ventilationData LightingData, salData SALData) *_SALDataIrrigationControl {
+func NewSALDataIrrigationControl(irrigationControlData LightingData, salData SALData) *_SALDataIrrigationControl {
_result := &_SALDataIrrigationControl{
- VentilationData: ventilationData,
- _SALData: NewSALData(salData),
+ IrrigationControlData: irrigationControlData,
+ _SALData: NewSALData(salData),
}
_result._SALData._SALDataChildRequirements = _result
return _result
@@ -116,8 +116,8 @@ func (m *_SALDataIrrigationControl) GetLengthInBits() uint16 {
func (m *_SALDataIrrigationControl) GetLengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.GetParentLengthInBits())
- // Simple field (ventilationData)
- lengthInBits += m.VentilationData.GetLengthInBits()
+ // Simple field (irrigationControlData)
+ lengthInBits += m.IrrigationControlData.GetLengthInBits()
return lengthInBits
}
@@ -135,17 +135,17 @@ func SALDataIrrigationControlParse(readBuffer utils.ReadBuffer, applicationId Ap
currentPos := positionAware.GetPos()
_ = currentPos
- // Simple Field (ventilationData)
- if pullErr := readBuffer.PullContext("ventilationData"); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for ventilationData")
+ // Simple Field (irrigationControlData)
+ if pullErr := readBuffer.PullContext("irrigationControlData"); pullErr != nil {
+ return nil, errors.Wrap(pullErr, "Error pulling for irrigationControlData")
}
- _ventilationData, _ventilationDataErr := LightingDataParse(readBuffer)
- if _ventilationDataErr != nil {
- return nil, errors.Wrap(_ventilationDataErr, "Error parsing 'ventilationData' field of SALDataIrrigationControl")
+ _irrigationControlData, _irrigationControlDataErr := LightingDataParse(readBuffer)
+ if _irrigationControlDataErr != nil {
+ return nil, errors.Wrap(_irrigationControlDataErr, "Error parsing 'irrigationControlData' field of SALDataIrrigationControl")
}
- ventilationData := _ventilationData.(LightingData)
- if closeErr := readBuffer.CloseContext("ventilationData"); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for ventilationData")
+ irrigationControlData := _irrigationControlData.(LightingData)
+ if closeErr := readBuffer.CloseContext("irrigationControlData"); closeErr != nil {
+ return nil, errors.Wrap(closeErr, "Error closing for irrigationControlData")
}
if closeErr := readBuffer.CloseContext("SALDataIrrigationControl"); closeErr != nil {
@@ -154,8 +154,8 @@ func SALDataIrrigationControlParse(readBuffer utils.ReadBuffer, applicationId Ap
// Create a partially initialized instance
_child := &_SALDataIrrigationControl{
- VentilationData: ventilationData,
- _SALData: &_SALData{},
+ IrrigationControlData: irrigationControlData,
+ _SALData: &_SALData{},
}
_child._SALData._SALDataChildRequirements = _child
return _child, nil
@@ -169,16 +169,16 @@ func (m *_SALDataIrrigationControl) Serialize(writeBuffer utils.WriteBuffer) err
return errors.Wrap(pushErr, "Error pushing for SALDataIrrigationControl")
}
- // Simple Field (ventilationData)
- if pushErr := writeBuffer.PushContext("ventilationData"); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for ventilationData")
+ // Simple Field (irrigationControlData)
+ if pushErr := writeBuffer.PushContext("irrigationControlData"); pushErr != nil {
+ return errors.Wrap(pushErr, "Error pushing for irrigationControlData")
}
- _ventilationDataErr := writeBuffer.WriteSerializable(m.GetVentilationData())
- if popErr := writeBuffer.PopContext("ventilationData"); popErr != nil {
- return errors.Wrap(popErr, "Error popping for ventilationData")
+ _irrigationControlDataErr := writeBuffer.WriteSerializable(m.GetIrrigationControlData())
+ if popErr := writeBuffer.PopContext("irrigationControlData"); popErr != nil {
+ return errors.Wrap(popErr, "Error popping for irrigationControlData")
}
- if _ventilationDataErr != nil {
- return errors.Wrap(_ventilationDataErr, "Error serializing 'ventilationData' field")
+ if _irrigationControlDataErr != nil {
+ return errors.Wrap(_irrigationControlDataErr, "Error serializing 'irrigationControlData' field")
}
if popErr := writeBuffer.PopContext("SALDataIrrigationControl"); popErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/SALDataPoolsSpasPondsFountainsControl.go b/plc4go/protocols/cbus/readwrite/model/SALDataPoolsSpasPondsFountainsControl.go
index e7f8ad09b..01315bfe7 100644
--- a/plc4go/protocols/cbus/readwrite/model/SALDataPoolsSpasPondsFountainsControl.go
+++ b/plc4go/protocols/cbus/readwrite/model/SALDataPoolsSpasPondsFountainsControl.go
@@ -31,8 +31,8 @@ type SALDataPoolsSpasPondsFountainsControl interface {
utils.LengthAware
utils.Serializable
SALData
- // GetVentilationData returns VentilationData (property field)
- GetVentilationData() LightingData
+ // GetPoolsSpaPondsFountainsData returns PoolsSpaPondsFountainsData (property field)
+ GetPoolsSpaPondsFountainsData() LightingData
}
// SALDataPoolsSpasPondsFountainsControlExactly can be used when we want exactly this type and not a type which fulfills SALDataPoolsSpasPondsFountainsControl.
@@ -45,7 +45,7 @@ type SALDataPoolsSpasPondsFountainsControlExactly interface {
// _SALDataPoolsSpasPondsFountainsControl is the data-structure of this message
type _SALDataPoolsSpasPondsFountainsControl struct {
*_SALData
- VentilationData LightingData
+ PoolsSpaPondsFountainsData LightingData
}
///////////////////////////////////////////////////////////
@@ -75,8 +75,8 @@ func (m *_SALDataPoolsSpasPondsFountainsControl) GetParent() SALData {
/////////////////////// Accessors for property fields.
///////////////////////
-func (m *_SALDataPoolsSpasPondsFountainsControl) GetVentilationData() LightingData {
- return m.VentilationData
+func (m *_SALDataPoolsSpasPondsFountainsControl) GetPoolsSpaPondsFountainsData() LightingData {
+ return m.PoolsSpaPondsFountainsData
}
///////////////////////
@@ -85,10 +85,10 @@ func (m *_SALDataPoolsSpasPondsFountainsControl) GetVentilationData() LightingDa
///////////////////////////////////////////////////////////
// NewSALDataPoolsSpasPondsFountainsControl factory function for _SALDataPoolsSpasPondsFountainsControl
-func NewSALDataPoolsSpasPondsFountainsControl(ventilationData LightingData, salData SALData) *_SALDataPoolsSpasPondsFountainsControl {
+func NewSALDataPoolsSpasPondsFountainsControl(poolsSpaPondsFountainsData LightingData, salData SALData) *_SALDataPoolsSpasPondsFountainsControl {
_result := &_SALDataPoolsSpasPondsFountainsControl{
- VentilationData: ventilationData,
- _SALData: NewSALData(salData),
+ PoolsSpaPondsFountainsData: poolsSpaPondsFountainsData,
+ _SALData: NewSALData(salData),
}
_result._SALData._SALDataChildRequirements = _result
return _result
@@ -116,8 +116,8 @@ func (m *_SALDataPoolsSpasPondsFountainsControl) GetLengthInBits() uint16 {
func (m *_SALDataPoolsSpasPondsFountainsControl) GetLengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.GetParentLengthInBits())
- // Simple field (ventilationData)
- lengthInBits += m.VentilationData.GetLengthInBits()
+ // Simple field (poolsSpaPondsFountainsData)
+ lengthInBits += m.PoolsSpaPondsFountainsData.GetLengthInBits()
return lengthInBits
}
@@ -135,17 +135,17 @@ func SALDataPoolsSpasPondsFountainsControlParse(readBuffer utils.ReadBuffer, app
currentPos := positionAware.GetPos()
_ = currentPos
- // Simple Field (ventilationData)
- if pullErr := readBuffer.PullContext("ventilationData"); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for ventilationData")
+ // Simple Field (poolsSpaPondsFountainsData)
+ if pullErr := readBuffer.PullContext("poolsSpaPondsFountainsData"); pullErr != nil {
+ return nil, errors.Wrap(pullErr, "Error pulling for poolsSpaPondsFountainsData")
}
- _ventilationData, _ventilationDataErr := LightingDataParse(readBuffer)
- if _ventilationDataErr != nil {
- return nil, errors.Wrap(_ventilationDataErr, "Error parsing 'ventilationData' field of SALDataPoolsSpasPondsFountainsControl")
+ _poolsSpaPondsFountainsData, _poolsSpaPondsFountainsDataErr := LightingDataParse(readBuffer)
+ if _poolsSpaPondsFountainsDataErr != nil {
+ return nil, errors.Wrap(_poolsSpaPondsFountainsDataErr, "Error parsing 'poolsSpaPondsFountainsData' field of SALDataPoolsSpasPondsFountainsControl")
}
- ventilationData := _ventilationData.(LightingData)
- if closeErr := readBuffer.CloseContext("ventilationData"); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for ventilationData")
+ poolsSpaPondsFountainsData := _poolsSpaPondsFountainsData.(LightingData)
+ if closeErr := readBuffer.CloseContext("poolsSpaPondsFountainsData"); closeErr != nil {
+ return nil, errors.Wrap(closeErr, "Error closing for poolsSpaPondsFountainsData")
}
if closeErr := readBuffer.CloseContext("SALDataPoolsSpasPondsFountainsControl"); closeErr != nil {
@@ -154,8 +154,8 @@ func SALDataPoolsSpasPondsFountainsControlParse(readBuffer utils.ReadBuffer, app
// Create a partially initialized instance
_child := &_SALDataPoolsSpasPondsFountainsControl{
- VentilationData: ventilationData,
- _SALData: &_SALData{},
+ PoolsSpaPondsFountainsData: poolsSpaPondsFountainsData,
+ _SALData: &_SALData{},
}
_child._SALData._SALDataChildRequirements = _child
return _child, nil
@@ -169,16 +169,16 @@ func (m *_SALDataPoolsSpasPondsFountainsControl) Serialize(writeBuffer utils.Wri
return errors.Wrap(pushErr, "Error pushing for SALDataPoolsSpasPondsFountainsControl")
}
- // Simple Field (ventilationData)
- if pushErr := writeBuffer.PushContext("ventilationData"); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for ventilationData")
+ // Simple Field (poolsSpaPondsFountainsData)
+ if pushErr := writeBuffer.PushContext("poolsSpaPondsFountainsData"); pushErr != nil {
+ return errors.Wrap(pushErr, "Error pushing for poolsSpaPondsFountainsData")
}
- _ventilationDataErr := writeBuffer.WriteSerializable(m.GetVentilationData())
- if popErr := writeBuffer.PopContext("ventilationData"); popErr != nil {
- return errors.Wrap(popErr, "Error popping for ventilationData")
+ _poolsSpaPondsFountainsDataErr := writeBuffer.WriteSerializable(m.GetPoolsSpaPondsFountainsData())
+ if popErr := writeBuffer.PopContext("poolsSpaPondsFountainsData"); popErr != nil {
+ return errors.Wrap(popErr, "Error popping for poolsSpaPondsFountainsData")
}
- if _ventilationDataErr != nil {
- return errors.Wrap(_ventilationDataErr, "Error serializing 'ventilationData' field")
+ if _poolsSpaPondsFountainsDataErr != nil {
+ return errors.Wrap(_poolsSpaPondsFountainsDataErr, "Error serializing 'poolsSpaPondsFountainsData' field")
}
if popErr := writeBuffer.PopContext("SALDataPoolsSpasPondsFountainsControl"); popErr != nil {
diff --git a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
index 88f746d6e..ad67589ba 100644
--- a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
+++ b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
@@ -1322,14 +1322,15 @@
]
['IRRIGATION_CONTROL' *IrrigationControl
// Note: the documentation states that the data for irrigation control uses LightingData
- [simple LightingData ventilationData]
+ [simple LightingData irrigationControlData]
]
['POOLS_SPAS_PONDS_FOUNTAINS_CONTROL' *PoolsSpasPondsFountainsControl
- // Note: the documentation states that the data for pools spas ponds fauntains uses LightingData
- [simple LightingData ventilationData]
+ // Note: the documentation states that the data for pools spas ponds fountains uses LightingData
+ [simple LightingData poolsSpaPondsFountainsData]
]
['HEATING' *Heating
- [validation '1==2' "HEATING Not yet implemented"] // TODO: implement me
+ // Note: the documentation states that the data for ventilation uses LightingData
+ [simple LightingData heatingData]
]
['AIR_CONDITIONING' *AirConditioning
[simple AirConditioningData airConditioningData]