Ticket #53: FB_EoN: PublishNodeBirth
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
copy paste edit error around FB_Edge_Of_Network_Node.PublishNodeBirth line 22-24. NBIRTHTopic := WCONCAT( SPARKPLUGB, GroupId); NBIRTHTopic := WCONCAT( _LastWillTopic, NODE_BIRTH_TOPIC); NBIRTHTopic := WCONCAT( _LastWillTopic, FW_SLASH); NBIRTHTopic := WCONCAT( _LastWillTopic, NodeName); _LastWillTopic should be NBIRTHTopic Additionally, as NODE_BIRTH_TOPIC := "/NBIRTH/" you don't need the line with FW_SLASH (otherwise it becomes spBv1.0/NBIRTH//myNodeName2020-09-14 07:27:14.041000 Ticket #53: FB_EoN: PublishNodeBirth co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/53/ Ticket FB_EoN: PublishNodeBirth False 0 2020-09-12 21:09:28.217000 53 FB_EoN: PublishNodeBirth closed copy paste edit error around FB_Edge_Of_Network_Node.PublishNodeBirth line 22-24. NBIRTHTopic := WCONCAT( SPARKPLUGB, GroupId); NBIRTHTopic := WCONCAT( _LastWillTopic, NODE_BIRTH_TOPIC); NBIRTHTopic := WCONCAT( _LastWillTopic, FW_SLASH); NBIRTHTopic := WCONCAT( _LastWillTopic, NodeName); _LastWillTopic should be NBIRTHTopic Additionally, as NODE_BIRTH_TOPIC := "/NBIRTH/" you don't need the line with FW_SLASH (otherwise it becomes spBv1.0/NBIRTH//myNodeName False False 0 0 0 53 MVP EoN i-campbell aliazzz
Last updated: 2020-09-14
Ticket #54: FB_EoN: PublishNodeData topic error
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
similar to [#53] PublishNodeData() roughly line 17 through 19 NDATATopic := WCONCAT( SPARKPLUGB, GroupId); NDATATopic := WCONCAT( _LastWillTopic, NODE_DATA_TOPIC); NDATATopic := WCONCAT( _LastWillTopic, NodeName); Should be all NDATATopic2020-09-14 07:27:14.048000 Ticket #54: FB_EoN: PublishNodeData topic error co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/54/ Ticket FB_EoN: PublishNodeData topic error False 0 2020-09-12 22:16:59.795000 54 FB_EoN: PublishNodeData topic error closed similar to [#53] PublishNodeData() roughly line 17 through 19 NDATATopic := WCONCAT( SPARKPLUGB, GroupId); NDATATopic := WCONCAT( _LastWillTopic, NODE_DATA_TOPIC); NDATATopic := WCONCAT( _LastWillTopic, NodeName); Should be all NDATATopic False False 0 0 0 54 MVP EoN i-campbell aliazzz
Last updated: 2020-09-14
Ticket #6: How to implement “Google Protobufs” serialization/deserialization ?
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
The core component of the SparkplugB Library will be the IEC “Google Protobufs” encoder/parser. How do we solve this issue? Should we include an external C library? Personally I have no experience with that but I am willing to learn it ;-) Should we try to translate an existing version into A pure IEC solution? GO, C, C#, Python and many more are available, but no IEC61131-3.. Can we think of another way of implementing this? Ideas are welcome! This ticket is therefore a placeholder for Milestone 1.0. It is neccesary for the following; Sparkplug™ B MQTT Payload Definition The goal of the Sparkplug™ is to provide a specification that both OEM device manufactures and application developers can use to create rich and interoperable SCADA/IIoT solutions using MQTT as a base messaging technology. In Sparkplug™ B message payload definition, the goal was to create a simple and straightforward binary message encoding that could be used primarily for legacy register based process variables (Modbus register value for example). The Sparkplug™ B MQTT payload specification has come about based on the feedback from many system integrators and end user customers who wanted to be able to natively support a much richer data model within the MQTT infrastructures that they were designing and deploying. Using the feedback from the user community Sparkplug™ B provides support for: • Complex data types using templates. • Datasets. • Richer metrics with the ability to add property metadata for each metric. • Metric alias support to maintain rich metric naming while keeping bandwidth usage to a minimum. • Historical data. • File data. Sparkplug™ B definition creates a bandwidth efficient data transport for real time device data. For WAN based SCADA/IIoT infrastructures this equates to lower latency data updates while minimizing the amount of traffic and therefore cellular and/or VSAT bandwidth required. In situations where bandwidth savings is not the primary concern, the efficient use enables higher throughput of more and interesting data eliminating sensor data that have been left stranded in the field. It is also ideal for LAN based SCADA infrastructures equating to higher throughput of real time data to consumer applications without requiring extreme networking topologies and/or equipment. There are many data encoding technologies available that can all be used in conjunction with MQTT. Sparkplug™ B selected an existing, open, and highly available encoding scheme that efficiently encodes register based process variables. The encoding technology selected for Sparkplug™ B is Google Protocol Buffers also referred to as Google Protobufs. “Protocol Buffers are a way of encoding structured data in an efficient yet extensible format.” Google Protocol Buffers, sometimes referred to as “Google Protobufs”, provide the efficiency of packed binary data encoding while providing the structure required to make it easy to create, transmit, and parse register based process variables using a standard set of tools while enabling emerging IIoT requirements around richer metadata. Google Protocol Buffers development tools are available for: • C • C++ • C# • Java • Python • GO • JavaScript Additional information on Google Protocol Buffers can be found at: https://developers.google.com/protocol-buffers/ https://developers.google.com/protocol-buffers/docs/2020-09-14 07:27:06.547000 Ticket #6: How to implement “Google Protobufs” serialization/deserialization ? co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/6/ Ticket How to implement “Google Protobufs” serialization/deserialization ? False 0 2020-03-26 20:48:42.164000 6 How to implement “Google Protobufs” serialization/deserialization ? closed The core component of the SparkplugB Library will be the IEC “Google Protobufs” encoder/parser. How do we solve this issue? Should we include an external C library? Personally I have no experience with that but I am willing to learn it ;-) Should we try to translate an existing version into A pure IEC solution? GO, C, C#, Python and many more are available, but no IEC61131-3.. Can we think of another way of implementing this? Ideas are welcome! This ticket is therefore a placeholder for Milestone 1.0. It is neccesary for the following; Sparkplug™ B MQTT Payload Definition The goal of the Sparkplug™ is to provide a specification that both OEM device manufactures and application developers can use to create rich and interoperable SCADA/IIoT solutions using MQTT as a base messaging technology. In Sparkplug™ B message payload definition, the goal was to create a simple and straightforward binary message encoding that could be used primarily for legacy register based process variables (Modbus register value for example). The Sparkplug™ B MQTT payload specification has come about based on the feedback from many system integrators and end user customers who wanted to be able to natively support a much richer data model within the MQTT infrastructures that they were designing and deploying. Using the feedback from the user community Sparkplug™ B provides support for: • Complex data types using templates. • Datasets. • Richer metrics with the ability to add property metadata for each metric. • Metric alias support to maintain rich metric naming while keeping bandwidth usage to a minimum. • Historical data. • File data. Sparkplug™ B definition creates a bandwidth efficient data transport for real time device data. For WAN based SCADA/IIoT infrastructures this equates to lower latency data updates while minimizing the amount of traffic and therefore cellular and/or VSAT bandwidth required. In situations where bandwidth savings is not the primary concern, the efficient use enables higher throughput of more and interesting data eliminating sensor data that have been left stranded in the field. It is also ideal for LAN based SCADA infrastructures equating to higher throughput of real time data to consumer applications without requiring extreme networking topologies and/or equipment. There are many data encoding technologies available that can all be used in conjunction with MQTT. Sparkplug™ B selected an existing, open, and highly available encoding scheme that efficiently encodes register based process variables. The encoding technology selected for Sparkplug™ B is Google Protocol Buffers also referred to as Google Protobufs. “Protocol Buffers are a way of encoding structured data in an efficient yet extensible format.” Google Protocol Buffers, sometimes referred to as “Google Protobufs”, provide the efficiency of packed binary data encoding while providing the structure required to make it easy to create, transmit, and parse register based process variables using a standard set of tools while enabling emerging IIoT requirements around richer metadata. Google Protocol Buffers development tools are available for: • C • C++ • C# • Java • Python • GO • JavaScript Additional information on Google Protocol Buffers can be found at: https://developers.google.com/protocol-buffers/ https://developers.google.com/protocol-buffers/docs/ False False 0 0 0 6 MVP basic protobufs aliazzz i-campbell
Last updated: 2020-09-14
Ticket #18: SVN: use 'standard' cforge folder structure
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
The cforge svn guidelines are in the logical location: https://forge.codesys.com/forge/wiki/Migrating%20Projects/ so folder structure should be: license.txt STRUCTURE.MD .drone.yml branches/ tags/ trunk/ mqttsparkplugb.package <== created with cforge > build??? mqttsparkplugb/ package.manifest <== create with cforge > create package mqttsparkplugb/ <== Library (created with CODESYS SVN) unittest/ <== project with cf unit unittests (created with CODESYS SVN) mqttsparkplugb-example/ <== project (created with CODESYS SVN) mqttsparkplugb.library <== created with cforge > comit?? unittest.project <== created with cforge > comit?? mqttsparkplugb-example.project <== created with cforge > comit?? 2020-09-14 07:27:06.553000 Ticket #18: SVN: use 'standard' cforge folder structure co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/18/ Ticket SVN: use 'standard' cforge folder structure False 0 2020-03-29 19:36:30.938000 18 SVN: use 'standard' cforge folder structure closed The cforge svn guidelines are in the logical location: https://forge.codesys.com/forge/wiki/Migrating%20Projects/ so folder structure should be: license.txt STRUCTURE.MD .drone.yml branches/ tags/ trunk/ mqttsparkplugb.package <== created with cforge > build??? mqttsparkplugb/ package.manifest <== create with cforge > create package mqttsparkplugb/ <== Library (created with CODESYS SVN) unittest/ <== project with cf unit unittests (created with CODESYS SVN) mqttsparkplugb-example/ <== project (created with CODESYS SVN) mqttsparkplugb.library <== created with cforge > comit?? unittest.project <== created with cforge > comit?? mqttsparkplugb-example.project <== created with cforge > comit?? False False 0 0 0 18 MVP basic protobufs i-campbell aliazzz
Last updated: 2020-09-14
Ticket #25: FB_Payload: UTF-8 strings
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
sparkplug uses UTF-8 strings, so need to use WSTRINGS and convert from UTF-16 LE to UTF-8 using STUtil library. Have checked, and WSTRING is UTF-16, so a character can be either 1 or 2 words. This is fully compatible with the whole of UTF-8 encoding, it just needs to be converted. As a test, the "𐐷" U+10437 character is stored as: 01D8 37DC in a WSTRING2020-09-14 07:27:06.551000 Ticket #25: FB_Payload: UTF-8 strings co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/25/ Ticket FB_Payload: UTF-8 strings False 0 2020-04-16 19:18:32.229000 25 FB_Payload: UTF-8 strings closed sparkplug uses UTF-8 strings, so need to use WSTRINGS and convert from UTF-16 LE to UTF-8 using STUtil library. Have checked, and WSTRING is UTF-16, so a character can be either 1 or 2 words. This is fully compatible with the whole of UTF-8 encoding, it just needs to be converted. As a test, the "𐐷" U+10437 character is stored as: 01D8 37DC in a WSTRING False False 0 0 0 25 MVP basic protobufs i-campbell i-campbell
Last updated: 2020-09-14
Ticket #28: FB_Payload.ClaimNextFree* should initialize for you
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
As it stands, it was left to the user of FB_payload (ie FB_EoN_Node) to InitializeStructure() an added metric (or other payload object), but I think the FB_Payload.AddMetricBlank should do this. TODO: All FB_Payload.Add must initialize the object. There are also some FB_Payload.Set which will need this: (TBC)2020-09-14 07:27:06.549000 Ticket #28: FB_Payload.ClaimNextFree should initialize for you co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/28/ Ticket FB_Payload.ClaimNextFree should initialize for you False 0 2020-05-16 21:24:32.885000 28 FB_Payload.ClaimNextFree should initialize for you closed As it stands, it was left to the user of FB_payload (ie FB_EoN_Node) to InitializeStructure() an added metric (or other payload object), but I think the FB_Payload.AddMetricBlank should do this. TODO: All FB_Payload.Add must initialize the object. There are also some FB_Payload*.Set which will need this: (TBC) False False 0 0 0 28 MVP basic protobufs i-campbell i-campbell
Last updated: 2020-09-14
Ticket #35: Element Collections Linked List won't let you steal an Element
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
So the FB_Payload makes heavy use of COL.LinkedList. But it seems these elements can't be added to a second list before they are explicitly removed from the first. A solution will be needed to either remove them from the first list or some other way of stealing them.2020-09-14 07:27:06.552000 Ticket #35: Element Collections Linked List won't let you steal an Element co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/35/ Ticket Element Collections Linked List won't let you steal an Element False 0 2020-06-28 20:49:32.654000 35 Element Collections Linked List won't let you steal an Element closed So the FB_Payload makes heavy use of COL.LinkedList. But it seems these elements can't be added to a second list before they are explicitly removed from the first. A solution will be needed to either remove them from the first list or some other way of stealing them. False False 0 0 0 35 MVP basic protobufs i-campbell i-campbell
Last updated: 2020-09-14
Ticket #36: DecodedVarIntUnion does not clear the higer bytes when you use a smaller datatype
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
I thought I could get away with a union, but maybe not. If you write a 64 bit timestamp for example dviTemp.Uint64 := 0x0000017F_a32ae48F; and then dviTemp.Uint32 := 0x0C; Your dviTemp is now 0x0000017F_0000000C; but it needs to be 0x00000000_0000000C; So I think I will make a Function_Block with one internal ULINT variable and Properties to mimic the behaviour of a Union.2020-09-14 07:27:06.549000 Ticket #36: DecodedVarIntUnion does not clear the higer bytes when you use a smaller datatype co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/36/ Ticket DecodedVarIntUnion does not clear the higer bytes when you use a smaller datatype False 0 2020-07-04 19:16:03.718000 36 DecodedVarIntUnion does not clear the higer bytes when you use a smaller datatype closed I thought I could get away with a union, but maybe not. If you write a 64 bit timestamp for example dviTemp.Uint64 := 0x0000017F_a32ae48F; and then dviTemp.Uint32 := 0x0C; Your dviTemp is now 0x0000017F_0000000C; but it needs to be 0x00000000_0000000C; So I think I will make a Function_Block with one internal ULINT variable and Properties to mimic the behaviour of a Union. False False 0 0 0 36 MVP basic protobufs i-campbell i-campbell
Last updated: 2020-09-14
Ticket #38: Create and pass unit tests for the two FB_SimplePayload FBs.
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
Create and pass unit tests for the two FB_SimplePayload FBs. Ideas: write a python file and run python client from Eclipse Tahu via SysFile and SysProcessExecute. Maybe that ruins the portability of the unit test though, in which case a "generate unit test data" using one of these methods2020-09-14 07:27:06.548000 Ticket #38: Create and pass unit tests for the two FB_SimplePayload FBs. co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/38/ Ticket Create and pass unit tests for the two FB_SimplePayload FBs. False 0 2020-07-19 19:59:02.378000 38 Create and pass unit tests for the two FB_SimplePayload FBs. closed Create and pass unit tests for the two FB_SimplePayload FBs. Ideas: write a python file and run python client from Eclipse Tahu via SysFile and SysProcessExecute. Maybe that ruins the portability of the unit test though, in which case a "generate unit test data" using one of these methods False False 0 0 0 38 MVP basic protobufs i-campbell None
Last updated: 2020-09-14
Ticket #44: example project: theirPayloadDecoder.GetNextMetric.metricvalid stays false
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
theirPayloadDecoder.GetNextMetric.metricvalid stays false... so the decoder doesn't spit out valid metric values ==> SHOULD: have valid metrics come out.2020-09-14 07:27:06.551000 Ticket #44: example project: theirPayloadDecoder.GetNextMetric.metricvalid stays false co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/44/ Ticket example project: theirPayloadDecoder.GetNextMetric.metricvalid stays false False 0 2020-08-17 20:41:58.223000 44 example project: theirPayloadDecoder.GetNextMetric.metricvalid stays false closed theirPayloadDecoder.GetNextMetric.metricvalid stays false... so the decoder doesn't spit out valid metric values ==> SHOULD: have valid metrics come out. False False 0 0 0 44 MVP basic protobufs i-campbell i-campbell
Last updated: 2020-09-14
Ticket #45: FB_SimplePayloadEncoder: all unit tests all return a 37KB payload, even the small ones
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Ticket)
It seems that all unit tests are returning the result of the biggest unit test. ==> SHOULD: Each returns a different payload.2020-09-27 16:33:39.771000 Ticket #45: FB_SimplePayloadEncoder: all unit tests all return a 37KB payload, even the small ones co⚡e: Sparkplug™ MQTT edge and host cobolt tickets tickets False /lib/cobolt/tickets/45/ Ticket FB_SimplePayloadEncoder: all unit tests all return a 37KB payload, even the small ones False 0 2020-08-17 20:44:36.740000 45 FB_SimplePayloadEncoder: all unit tests all return a 37KB payload, even the small ones closed It seems that all unit tests are returning the result of the biggest unit test. ==> SHOULD: Each returns a different payload. False False 0 0 0 45 MVP basic protobufs i-campbell aliazzz
Last updated: 2020-09-27
questions Discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Discussion)
Forum for questions comments
Last updated: 2021-08-10
Post by hermsen on Ticket #6: MQTT Sparkplug CODESYS Controller Prerequisites discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
labels: --> MQTT, Sparkplug, CODESYS summary: SparkplugB Controller Prerequisites --> MQTT Sparkplug CODESYS Controller Prerequisites Description has changed: Diff: --- old +++ new @@ -1,5 +1,5 @@ -If your controller meets the following requirements, you can use SparkplugB without any issue's +If your CODESYS controller meets the following requirements, you can use Sparkplug without any issue's -* [x] At least runtime version 3.5.16.0 -* [x] Per PLC you need an IIoT Library SL for usage of it's MQTT client. +* [x] At least runtime version 3.5.16.0. +* [x] Per PLC or PC you need an IIoT Library SL. status: --> open
Last updated: 2021-08-10
Post by aliazzz on Ticket #3: What is the difference between a Template definition and instance? discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
Attachments has changed: Diff: --- old +++ new @@ -1 +0,0 @@ -template_samples.txt (2.6 kB; text/plain)
Last updated: 2021-08-10
Post by i-campbell on Ticket #3: What is the difference between a Template definition and instance? discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
So in CODESYS land, Template Definition = Struct definition OR FB definition Template instance = struct instance or FB instance Nice work
Last updated: 2021-08-10
Post by aliazzz on Ticket #3: What is the difference between a Template definition and instance? discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
Description has changed: Diff: --- old +++ new @@ -1,19 +1,19 @@ Q: What is the difference between a Template definition and instance? A: There are two parts to a Template - *Template Definition* + Template Definition This metric will will contain all the member Metrics with their default values/properties, as well as any Parameters with their default values. This metric is always only published in the NBIRTH message - *Template Instance* + Template Instance This metric is one or more "instances" of the above definition. It will contain the any member metrics with values/properties that are overridden/different from the defaults in the Template Definition. They are published as you would normal tags (BIRTH/DAT/CMD). When published in a NDATA/DDATA/NCMD/DCMD message they may only contain a subset of the member Metrics (if those are the only values that have changed) - * Other template fields* + Other template fields isdefinition True for a Template Definition metric, False for a Template Instance Metric templateref @@ -27,180 +27,4 @@ version Not currently used, will be ignored by MQTT Engine, can be omitted or set to null - -This template_samples.txt (see also the attachment) contains some sample template structures (in JSON) as well as some Java code for creating a Template. These should help show the basic Template structure and contain the important fields of a Template Definition and Instance. However, they are just references expressed in JSON, not actual protobuf representations (which may be a bit more verbose) - -~~~ -{ -"name": -"TemplateDef", -"timestamp": -1499817463261, -"dataType": -"Template", -"value": -{ -"version": -"v1.0", -"isDefinition": -true, -"metrics": -[ -{ -"name": -"floatMember", -"timestamp": -1499817463260, -"dataType": -"Float", -"value": -1.23 -}, -{ -"name": -"stringMember", -"timestamp": -1499817463260, -"dataType": -"String", -"value": -"123" -} -], -"parameters": -[ -{ -"name": -"Param1", -"type": -"Boolean", -"value": -true -}, -{ -"name": -"Param2", -"type": -"Int32", -"value": -123 -} -] -} -} -{ -"name": -"TemplateInst", -"timestamp": -1499817757169, -"dataType": -"Template", -"value": -{ -"reference": -"TemplateDef", -"isDefinition": -false, -"metrics": -[ -{ -"name": -"floatMember", -"timestamp": -1499817757169, -"dataType": -"Float", -"value": -3.21 -}, -{ -"name": -"stringMember", -"timestamp": -1499817757169, -"dataType": -"String", -"value": -"321" -} -], -"parameters": -[ -{ -"name": -"Param1", -"type": -"Boolean", -"value": -false -}, -{ -"name": -"Param2", -"type": -"Int32", -"value": -321 -} -] -} -} -Template -templateDef -= new -TemplateBuilder() -.version("v1.0") -.definition(true) -.addParameter(new -Parameter("Param1", -ParameterDataType.Boolean, -true)) -.addParameter(new -Parameter("Param2", -ParameterDataType.Int32, -(int)123)) -.addMetric(new -MetricBuilder("floatMember", -MetricDataType.Float, -1.23F).createMetric()) -.addMetric(new -MetricBuilder("stringMember", -MetricDataType.String, -"123").createMetric()) -.createTemplate(); -Metric -metric -= new - MetricBuilder("TemplateDef", - Template, -templateDef).createMetric(); -Template -templateInst -= new -TemplateBuilder() -.definition(false) -.templateRef("TemplateDef") -.addParameter(new -Parameter("Param1", -ParameterDataType.Boolean, -false)) -.addParameter(new -Parameter("Param2", -ParameterDataType.Int32, -(int)321)) -.addMetric(new -MetricBuilder("floatMember", -MetricDataType.Float, -3.21F).createMetric()) -.addMetric(new -MetricBuilder("stringMember", -MetricDataType.String, -"321").createMetric()) -.createTemplate(); -Metric -metric -= new - MetricBuilder("TemplateInst", - Template, -templateInst).createMetric( -~~~ +This template_samples.txt (see attachment) contains some sample template structures (in JSON) as well as some Java code for creating a Template. These should help show the basic Template structure and contain the important fields of a Template Definition and Instance. However, they are just references expressed in JSON, not actual protobuf representations (which may be a bit more verbose) Attachments has changed: Diff: --- old +++ new @@ -0,0 +1 @@ +template_samples.txt (2.6 kB; text/plain)
Last updated: 2021-08-10
Post by i-campbell on Ticket #6: MQTT Sparkplug CODESYS Controller Prerequisites discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
Description has changed: Diff: --- old +++ new @@ -1,6 +1,6 @@ If your CODESYS controller meets the following requirements, you can use Sparkplug without any issue's * [x] At least runtime version 3.5.14.0. -* [x] At least IDE version 3.5.16.0 +* [x] At least Compiler version 3.5.16.0. +* [x] At least IDE version 3.5.16.0. * [x] Per PLC or PC you need an IIoT Library SL. -
Last updated: 2021-08-10
Post by hermsen on Ticket #5: Various tested SparkplugB, MQTT TLS Security scenario's discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
labels: TLS, Security, Settings, Setup --> TLS, Security, Settings, Setup, TLSContextProvider summary: TLS & Security, how do I set it up? --> Various tested SparkplugB, TLS and Security scenario's status: --> open
Last updated: 2021-08-10
Post by hermsen on Ticket #5: Various tested SparkplugB, MQTT TLS Security scenario's discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
summary: Various tested SparkplugB, TLS and Security scenario's --> Various tested SparkplugB, MQTT TLS Security scenario's Description has changed: Diff: --- old +++ new @@ -1,6 +1,11 @@ +Hi There, + +This mini FAQ will to help/assist you setting up your SparkplugB MQTT TLS Channel Encryption. We have **Successfully** tested various scenario's using MQTT Client SL v1.0.2.0. +The example will be updated shortly to accommodate these tests. -The example will be updated shortly to accommodate these tests. +* Tested against library v1.3.3.0 +* Using example v1.3.3.0 slight modifications to the example code may apply, see below for details TLS with client certificate on server 'test.mosquitto.org'; ~~~ @@ -47,13 +52,13 @@ hCert := SysTypes.RTS_INVALID_HANDLE; //no client cert StillGettingClientCertificate := FALSE; - // Extra TLSContextProvider Settings + // Additional mandatory TLSContextProvider settings sUseCaseName := 'u1', ePurpose := SparkplugB.MQTT.NBS.Purpose.Client_Side, sHostname := 'xxxxxx', // intentionally redacted udiVerificationMode := 2); - > NOTE: Additional requirements + > NOTE: wait, yet more additional mandatory requirements! > Download Security Agent Package > Drag the xxxxxx certificate from SecurityAgent => Devices => Qarantine... to SecurityAgent => Devices => Trusted ~~~
Last updated: 2021-08-10
Post by hermsen on Ticket #7: Public Free MQTT Brokers useful for spakplug usage discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
summary: Public MQTT Broker --> Public MQTT Brokers status: --> open
Last updated: 2021-08-10
Post by hermsen on Ticket #1: What is Sparkplug in a nutshell? discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
labels: --> mqtt, sparkplug Description has changed: Diff: --- old +++ new @@ -1,5 +1,5 @@ -Sparkplug is a set of definitions on top of MQTT to serve the following purposes +Sparkplug is a set of definitions on top of MQTT to serve the following purposes; -* Define a set of topics to ensure state/quality of data be ensured in a backend MQTT client application -* Define a standard payload format that allows an edge node/device client to communicated with a backend application -* Define a flow of messages to ensure the state/quality of data. +* Defines a set of topics to ensure state/quality of data be ensured in a backend MQTT client application +* Defines a standard payload format that allows an edge node/device client to communicated with a backend application +* Defines a flow of messages to ensure the state/quality of data.
Last updated: 2021-08-10
Post by hermsen on Ticket #7: Public Free MQTT Brokers useful for spakplug usage discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
summary: Public MQTT Brokers --> Public Free MQTT Brokers useful for spakplug usage Description has changed: Diff: --- old +++ new @@ -1,5 +1,5 @@ # Public MQTT Brokers -Developers and testers will find the following public brokers useful: +The following public brokers are useful: Mosquitto MQTT Testbroker > Host: **test.mosquitto.org**
Last updated: 2021-08-10
Post by aliazzz on Ticket #3: What is the difference between a Template definition and instance? discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
Description has changed: Diff: --- old +++ new @@ -1,31 +1,30 @@ Q: What is the difference between a Template definition and instance? A: There are two parts to a Template - * **Template Definition** + *Template Definition* This metric will will contain all the member Metrics with their default values/properties, as well as any Parameters with their default values. This metric is always only published in the NBIRTH message - * **Template Instance** + *Template Instance* This metric is one or more "instances" of the above definition. It will contain the any member metrics with values/properties that are overridden/different from the defaults in the Template Definition. They are published as you would normal tags (BIRTH/DAT/CMD). When published in a NDATA/DDATA/NCMD/DCMD message they may only contain a subset of the member Metrics (if those are the only values that have changed) - * **Other template fields** - *isdefinition* + * Other template fields* + isdefinition True for a Template Definition metric, False for a Template Instance Metric - *templateref* + templateref This is used by a Template Instance to specify the "name" of the Template Definition - *ishistorical* + ishistorical Used to mark a Template Instance (or any Metric) as a historical (rather than a live) value. MQTT Engine may handle historical Metrics differently depending on how it is configured (see MQTT Engine documentation) - *istransient* + istransient Not currently used, will be ignored by MQTT Engine, can be omitted or set to false - - *version * + version Not currently used, will be ignored by MQTT Engine, can be omitted or set to null status: --> open
Last updated: 2021-08-10
Post by hermsen on Ticket #6: MQTT Sparkplug CODESYS Controller Prerequisites discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Post)
Description has changed: Diff: --- old +++ new @@ -1,5 +1,6 @@ If your CODESYS controller meets the following requirements, you can use Sparkplug without any issue's -* [x] At least runtime version 3.5.16.0. +* [x] At least runtime version 3.5.14.0. +* [x] At least IDE version 3.5.16.0 * [x] Per PLC or PC you need an IIoT Library SL.
Last updated: 2021-08-10
Ticket #7: Public Free MQTT Brokers useful for spakplug usage discussion
co⚡e: Sparkplug™ MQTT edge and host
questions
(Thread)
Ticket #7: Public Free MQTT Brokers useful for spakplug usage discussion
Last updated: 2021-08-10