Post by i-campbell on Ticket #48: Cforge tool integration discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Wireshark analysis shows: After recieving the request, the server waits 30 seconds then sends a FIN ACK. ie. it gives no response. So it could be the path length is now too great, or it could be the SVN server has a limit on the XML response size. I think only the SVN logs can say why no response is given for the svn list command.
Last updated: 2021-08-10
Post by hermsen on Ticket #114: Refactor anything "SparkplugB" into "Sparkplug" discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1 +1,5 @@ With an eye on the future I noticed that we rely heavily on "SparkplugB", which is a specific version of the Sparkplug protocol instead of "Sparkplug" which is the protocol itself. + +So anything in the library which now is called "SparkplugB" could be refactored to "Sparkplug" where due (not everywhere!) + +I want to refactor several spots where I think a change is prudent.
Last updated: 2021-08-10
Post by hermsen on Ticket #37: FB_MQTTPUBSUB : Before sending a payload, ensure that MQTT.MQTTParam.g_udiMaxPayloadSize and g_udiMaxPacketSize are appropriately set discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: pending --> closed
Last updated: 2021-08-10
Post by aliazzz on Ticket #1: Create Introductionpage discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
summary: Creat Introductionpage --> Create Introductionpage
Last updated: 2021-08-10
Post by i-campbell on Ticket #26: LibCat.xml discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Milestone: 999 Backlog --> 9.9.9.9: Backlog
Last updated: 2021-08-10
Post by aliazzz on Ticket #64: EoN: repeatedly publising NDATA or missing NDATA discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: accepted --> closed
Last updated: 2021-08-10
Post by i-campbell on Ticket #57: EoN / Metrics: The final Metric of the example project is not showing up in ignition discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
labels: Bug, Metrics. --> status: open --> closed
Last updated: 2021-08-10
Post by aliazzz on Ticket #6: How to implement “Google Protobufs” serialization/deserialization ? discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
3. So I think we need an IEC function block called Payload which has .blob, all the fields of sparkplugb.proto, and .xEncode and .xDecode. What do you think? Thinking out loud and expanding on your idea; Yes, it sounds like a good way to handle the Payload itself. An FB_Payload which exposes various methods via interface ITF_Payload which has methods Encode and Decode. Every producer would like to send (Encode) its payload data. Every consumer would like to receive (Decode) its payload data. So the number of FB_Payload instances will mirror the number of devices/instruments/whatever (i.e. payload acts as a bridge/gateway) to the outside world from the devices/instruments/whatever code point of view. Also, From what I have understood from the hierarchy, we need to couple a single EoN instance to multiple FB_Payload instances. They share a 1..n relation with n>=1. We should dynamically couple (register) the Payload instances to the EoN edge device via an interface (ITF_Payload?) Perhaps on start of the code via FB_Init via dependency injection or some other form of dynamic registering. I have seen code do this with the alarm handler so we can do it too. This way the user has a minimum of Burner plate code, which I personally think is very important! 4. I see a posibility of putting a generic protobufs library in the future, but the first implementation should be only sparkplug. Yes, I totally agree on this. The ease of use and debugging is key. We can always opt to separate it in a later stage Feel free to shoot on the ideas
Last updated: 2021-08-10
Post by hermsen on Ticket #94: (Bd)SeqNum flow control issue's discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Fix present in 1.1.0.13 in personal branch => merge into trunk
Last updated: 2021-08-10
Post by i-campbell on Ticket #12: Embedded some resources discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: open --> closed
Last updated: 2021-08-10
Post by hermsen on Ticket #69: MQTT: ping interval should = keep alive time discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
In trunk with 0.9.0.4
Last updated: 2021-08-10
Post by i-campbell on Ticket #60: FB_Payload: The shuffling of values uses one more byte than it need to discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
labels: Payload --> status: open --> closed
Last updated: 2021-08-10
Post by i-campbell on Ticket #45: FB_SimplePayloadEncoder: all unit tests all return a 37KB payload, even the small ones discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
assigned_to: i-campbell --> aliazzz
Last updated: 2021-08-10
Post by hermsen on Ticket #16: Implement SparkPlugB Device discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
v1.1.x.x TODO EoN Rebirth doesn't work. It gets the rebirth NCMD but ignores it. After some NCMDs(20)it picks it up. Device Does not DBIRTH, just starts sending DDATA.
Last updated: 2021-08-10
Post by hermsen on Ticket #88: EoN / Device: RBE or time based publishing discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
"Some people just really like periodic reporting without exception." This is going to be out of spec according to Sparkplug™ MQTT Topic & Payload Specification Rev 2.2 Page 15. Once an MQTT EoN node is online with a proper NBIRTH it is in a mode of quiescent Report by Exception (RBE) or time based reporting of metric information that changes. This enables the advantages of the native Continuous Session Awareness of MQTT to monitor the STATE of all connected MQTT EoN node and to rely on Report by Exception (RBE) messages for metric state changes over the MQTT session connection. And Page 25: Following the Sparkplug™ specification in section 7.4, Device Data Messages (DDATA), all subsequent metrics are published to the Primary Application on a Report by Exception (RBE) basis using the DDATA message format.
Last updated: 2021-08-10
Post by hermsen on Ticket #105: Lowering Device CPU consumption discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Offcourse we have seen many other points for revision. However having a complete v2.0 has a higher prio then optimisation. I'll close this ticket for now. A new optimisation round will be a new ticket (e.g profiler)
Last updated: 2021-08-10
Post by aliazzz on Ticket #19: Add certificate generation to the library discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Also, be sure to check the Codesys Security Screen package, as it can also generate certificates for various purposes. I don't know if they can be utilised for MQTT certificates though.
Last updated: 2021-08-10
Post by aliazzz on Ticket #56: Edge_node_id and group_id elements may not contain /, #, + characters discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
summary: Edge_node_id may not contain /, #, + characters --> Edge_node_id and group_id elements may not contain /, #, + characters Description has changed: Diff: --- old +++ new @@ -1 +1 @@ -Update code to check/replace these illegal characters (/,+,#) from the Edge_Node _Id name +Update code to check/replace these illegal characters (/,+,#) from the Edge_Node _Id or Group_id element
Last updated: 2021-08-10
Post by hermsen on Ticket #102: Paylaod: refactor discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Implemented and demonstrated
Last updated: 2021-08-10
Post by aliazzz on Ticket #29: MIT Licence discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
I'll update the license.txt in the trunk accordingly ;-)
Last updated: 2021-08-10
Post by hermsen on Ticket #125: PrimaryHost: proces & publish messages discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
In order to issue Node Rebirths we must check the incoming payload seqnum order. We must do this for every Edge node as each Edge publishes them: SeqNum : ULINT := 0; //next sequence number (0..255) _NextBdSeq : ULINT := 0; //next birth/death sequence number (0..255) Method CheckBDSeqNum Method CheckSeqNum
Last updated: 2021-08-10
Post by aliazzz on Ticket #5: FB_EoN_Node discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: accepted --> closed
Last updated: 2021-08-10
Post by i-campbell on Ticket #11: FB_Payload discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -6,67 +6,67 @@ Progress (Implemented, not tested): Get Set Encode Decode [x] [x] [x] [x] Payload.timestamp -[ ] [x] [ ] [ ] Payload.metrics[].name -[ ] [x] [ ] [ ] Payload.metrics[].alias -[ ] [x] [ ] [ ] Payload.metrics[].timestamp -[ ] [x] [ ] [ ] Payload.metrics[].datatype -[ ] [x] [ ] [ ] Payload.metrics[].is_historical -[ ] [x] [ ] [ ] Payload.metrics[].is_transient -[ ] [x] [ ] [ ] Payload.metrics[].is_null -[ ] [x] [ ] [ ] Payload.metrics[].metadata.is_multi_part -[ ] [x] [ ] [ ] Payload.metrics[].metadata.content_type -[ ] [x] [ ] [ ] Payload.metrics[].metadata.size -[ ] [x] [ ] [ ] Payload.metrics[].metadata.seq -[ ] [x] [ ] [ ] Payload.metrics[].metadata.file_name -[ ] [x] [ ] [ ] Payload.metrics[].metadata.file_type -[ ] [x] [ ] [ ] Payload.metrics[].metadata.md5 -[ ] [x] [ ] [ ] Payload.metrics[].metadata.description +[x] [x] [ ] [ ] Payload.metrics[].name +[x] [x] [ ] [ ] Payload.metrics[].alias +[x] [x] [ ] [ ] Payload.metrics[].timestamp +[x] [x] [ ] [ ] Payload.metrics[].datatype +[x] [x] [ ] [ ] Payload.metrics[].is_historical +[x] [x] [ ] [ ] Payload.metrics[].is_transient +[x] [x] [ ] [ ] Payload.metrics[].is_null +[x] [x] [ ] [ ] Payload.metrics[].metadata.is_multi_part +[x] [x] [ ] [ ] Payload.metrics[].metadata.content_type +[x] [x] [ ] [ ] Payload.metrics[].metadata.size +[x] [x] [ ] [ ] Payload.metrics[].metadata.seq +[x] [x] [ ] [ ] Payload.metrics[].metadata.file_name +[x] [x] [ ] [ ] Payload.metrics[].metadata.file_type +[x] [x] [ ] [ ] Payload.metrics[].metadata.md5 +[x] [x] [ ] [ ] Payload.metrics[].metadata.description Payload.metrics[].metadata.extensions[] //none -[ ] [x] [ ] [ ] Payload.metrics[].properties.keys[] -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].type -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].is_null -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].int_value -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].long_value -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].float_value -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].double_value -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].boolean_value -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].string_value -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].propertyset_value. //(RECURSIVE PROPERTIES) -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].propertysets_value.propertyset[]. //(RECURSIVE PROPERTIES) -[ ] [ ] [ ] [ ] Payload.metrics[].properties.values[].extension_value //none -[ ] [ ] [ ] [ ] Payload.metrics[].properties.extensions[] //none -[ ] [x] [ ] [ ] Payload.metrics[].int_value -[ ] [x] [ ] [ ] Payload.metrics[].long_value -[ ] [x] [ ] [ ] Payload.metrics[].float_value -[ ] [x] [ ] [ ] Payload.metrics[].double_value -[ ] [x] [ ] [ ] Payload.metrics[].boolean_value -[ ] [x] [ ] [ ] Payload.metrics[].string_value -[ ] [x] [ ] [ ] Payload.metrics[].bytes_value -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.num_of_columns -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.columns[] -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.types[] -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].int_value -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].long_value -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].float_value -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].double_value -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].boolean_value -[ ] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].string_value +[x] [x] [ ] [ ] Payload.metrics[].properties.keys[] +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].type +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].is_null +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].int_value +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].long_value +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].float_value +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].double_value +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].boolean_value +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].string_value +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].propertyset_value. //(RECURSIVE PROPERTIES) +[x] [x] [ ] [ ] Payload.metrics[].properties.values[].propertysets_value.propertyset[]. //(RECURSIVE PROPERTIES) +Payload.metrics[].properties.values[].extension_value //none +Payload.metrics[].properties.extensions[] //none +[x] [x] [ ] [ ] Payload.metrics[].int_value +[x] [x] [ ] [ ] Payload.metrics[].long_value +[x] [x] [ ] [ ] Payload.metrics[].float_value +[x] [x] [ ] [ ] Payload.metrics[].double_value +[x] [x] [ ] [ ] Payload.metrics[].boolean_value +[x] [x] [ ] [ ] Payload.metrics[].string_value +[x] [x] [ ] [ ] Payload.metrics[].bytes_value +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.num_of_columns +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.columns[] +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.types[] +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].int_value +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].long_value +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].float_value +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].double_value +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].boolean_value +[x] [x] [ ] [ ] Payload.metrics[].dataset_value.rows[].elements[].string_value Payload.metrics[].dataset_value.rows[].elements[].extension_value //none Payload.metrics[].dataset_value.rows[].extensions[] //none Payload.metrics[].dataset_value.extensions[] //none -[ ] [x] [ ] [ ] Payload.metrics[].template_value.version -[ ] [x] [ ] [ ] Payload.metrics[].template_value.metrics[]. //(RECURSIVE Metrics) -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].name -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].type -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].int_value -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].long_value -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].float_value -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].double_value -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].boolean_value -[ ] [ ] [ ] [ ] Payload.metrics[].template_value.parameters[].string_value +[x] [x] [ ] [ ] Payload.metrics[].template_value.version +[x] [x] [ ] [ ] Payload.metrics[].template_value.metrics[]. //(RECURSIVE Metrics) +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].name +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].type +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].int_value +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].long_value +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].float_value +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].double_value +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].boolean_value +[x] [x] [ ] [ ] Payload.metrics[].template_value.parameters[].string_value Payload.metrics[].template_value.parameters[].extension_value //none -[ ] [x] [ ] [ ] Payload.metrics[].template_value.template_ref -[ ] [x] [ ] [ ] Payload.metrics[].template_value.is_definition +[x] [x] [ ] [ ] Payload.metrics[].template_value.template_ref +[x] [x] [ ] [ ] Payload.metrics[].template_value.is_definition Payload.metrics[].template_value.extensions[] //none Payload.metrics[].extension_value.extensions[] //none [x] [x] [x] [x] Payload.seq
Last updated: 2021-08-10
Post by aliazzz on Ticket #4: Create session state management for EoN Node discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
We should build a mock state machine as starters for our test. Use CfUnit for any unit/functional testing of the state machine
Last updated: 2021-08-10
Post by hermsen on Ticket #123: PrimaryHost: Investigate suitability of FBFactory for dynamic structure discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
assigned_to: i-campbell
Last updated: 2021-08-10