Post by aliazzz on Ticket #39: FB_SparkplugB_SimpleEncoder discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -4,33 +4,31 @@ The FB contains a protobuf blob encoder and various methods to quickly create (compose and/or encode) various messages. Messages which are mandatory for this FB are: - [ ] Node Death Message - [ ] Node Birth Message - [ ] Device Death Message - [ ] Device Birth Message +* [ ] Node Death Message +* [ ] Node Birth Message +* [ ] Device Death Message +* [ ] Device Birth Message Since this FB is of the simple variant, it can can only deal with the SimpleObjects type. Pass a single instance of SimpleObject to the Encoder. - [ ] AddMetric( Timestamp, SimpleObject ) // It is not mandatory for the SimpleObject to be part of a list. - [ ] AddMetric( Timestamp, ListOfSimpleObjects ) // Passes a prepared list of SimpleObjects to the encoder +* [ ] AddMetric( Timestamp, SimpleObject ) // It is not mandatory for the SimpleObject to be part of a list. +* [ ] AddMetric( Timestamp, ListOfSimpleObjects ) // Passes a prepared list of SimpleObjects to the encoder Apart from these methods it contains various interactions / diagnosis - [ ] Diag // Diagnosis - [ ] Encode // Start Encoding - [ ] Encoded // Is encoding finished? - [ ] EncoderBusy // Is the encoder busy on a task? - [ ] EncoderError // An error occured - [ ] FlushPool // Removes all poolElements(); +* [ ] Diag // Diagnosis +* [ ] Encode // Start Encoding +* [ ] Encoded // Is encoding finished? +* [ ] EncoderBusy // Is the encoder busy on a task? +* [ ] EncoderError // An error occured +* [ ] FlushPool // Removes all poolElements(); // Updates timestamp(); -// Initializes the PayloadEncoder - - [ ] GetBDSeqNum - [ ] getSeqNum - [ ] Private UpdateTimeStamp // called continously to update the internal timestamp, maybe not neccesary as the timestamp can be updated ad-hoc - [ ] GetEncodedBlob // returns the encoded blob to the customer +// Initializes the PayloadEncoder +* [ ] GetBDSeqNum +* [ ] getSeqNum +* [ ] Private UpdateTimeStamp // called continously to update the internal timestamp, maybe not neccesary as the timestamp can be updated ad-hoc +* [ ] GetEncodedBlob // returns the encoded blob to the customer NOTE - When this FB is finished we can take a look to separate it's design into a Core and an extension for the Simple part. That way we can expand without code duplication for the 'Advanced metrics' part
Last updated: 2021-08-10
Post by aliazzz on Ticket #55: How do we Implement #PublishInterval / PublishRate? discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,7 +1,10 @@ PublishInterval / PublishRate is default set to 5000 ms. -This means we cannot publish "updates" any faster then each 5000 ms. +So we cannot publish "updates" any faster then each 5s. -After some debate we decided on the following mechanism: +This means the publish rate is a kind of sample rate per signal change so 5000 means 1 change per interval of 5 seconds. -We have a timer, it sets itself as soon as we have sent data and after T#PublishInterval it resets itself. If new data is detected during timer countdown, we "buffer" it. -If the timer has expired we can send data immediately and the timer sets itself again after this action. So, the timer "blocks" sending of data during countdown. +100 means a signal change per 100mec. +10000 means a signal change per 10 seconds. + +Solution +We have a pulse timer (or some other means to detect a time interval), it sets itself as soon as we have sent data and after T#PublishInterval it resets itself. If new data is detected during timer countdown we ignore it. If the timer has expired we can send data immediately and the timer sets itself again after this action. So, the timer "blocks" sending of data during countdown.
Last updated: 2021-08-10
Post by hermsen on Ticket #80: MQTT: Not resubscribing discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
fixed in v0.9.0.0
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)
status: accepted --> closed
Last updated: 2021-08-10
Post by hermsen on Ticket #115: Every type of Node will have it's seperate log (bonus kudos) discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: closed --> open
Last updated: 2021-08-10
Post by aliazzz on Ticket #51: EoN: EON.PublishBirth() calls publish() twice discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
labels: EoN, Bug --> status: accepted --> closed
Last updated: 2021-08-10
Post by i-campbell on Ticket #48: Cforge tool integration 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 i-campbell on Ticket #31: Define how Store & Forward should be implemented (historical data) discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Milestone: SFP: SCADA --> 2.0.0.0: SCADA
Last updated: 2021-08-10
Post by i-campbell on Ticket #34: Implement basic metrics for now discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
NDEATH is an exception which does not require a Payload.seq So the Initialize must include HasSeq : BOOL;
Last updated: 2021-08-10
Post by aliazzz on Ticket #47: list.removecomponents: it uses a while loop that causes headaches discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
{attribute 'no_assign'} Smart addition! => Saves a lot of headaches 💪
Last updated: 2021-08-10
Post by aliazzz on Ticket #55: How do we Implement #PublishInterval / PublishRate? discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,10 +1,11 @@ +# Publish interval Definition PublishInterval / PublishRate is default set to 5000 ms. So we cannot publish "updates" any faster then each 5s. -This means the publish rate is a kind of sample rate per signal change so 5000 means 1 change per interval of 5 seconds. +This means the publish rate is a kind of "sample-rate" per signal change: +* 5000 means 1 signal change per interval of 5 seconds is sent, +* 100 means 1 signal change per interval of 100mec is sent, +* 10000 means 1 signal change per interval of 10 seconds is sent. -100 means a signal change per 100mec. -10000 means a signal change per 10 seconds. - -Solution +# Solution We have a pulse timer (or some other means to detect a time interval), it sets itself as soon as we have sent data and after T#PublishInterval it resets itself. If new data is detected during timer countdown we ignore it. If the timer has expired we can send data immediately and the timer sets itself again after this action. So, the timer "blocks" sending of data during countdown.
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 @@ -41,7 +41,7 @@ [x] [x] [x] [x] Payload.metrics[].double_value [x] [x] [x] [x] Payload.metrics[].boolean_value [x] [x] [x] [x] Payload.metrics[].string_value -[x] [x] [x] [ ] Payload.metrics[].bytes_value +[x] [x] [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[]
Last updated: 2021-08-10
Post by i-campbell on Ticket #31: Define how Store & Forward should be implemented (historical data) discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Milestone: 2.0.0.0: SCADA --> 3.0.0.0 Full Feature Product (FFP)
Last updated: 2021-08-10
Post by aliazzz on Ticket #42: Devicetree (Json) discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,85 +1,86 @@ A hierarchical representation of the Edge of Network with devices. + ~~~ json {"EoN": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value", - "Metric7": "Value", - "Metric8": "Value", + "EoNMetric1": "Value", + "EoNMetric2": "Value", + "EoNMetric3": "Value", + "EoNMetric4": "Value", + "EoNMetric5": "Value", + "EoNMetric6": "Value", + "EoNMetric7": "Value", + "EoNMetric8": "Value", "Sensor1": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value", + "SensorMetric5": "Value", + "SensorMetric6": "Value" }, "Sensor2": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value", + "SensorMetric5": "Value", + "SensorMetric6": "Value" }, "Device1": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value", + "DeviceMetric1": "Value", + "DeviceMetric2": "Value", + "DeviceMetric3": "Value", + "DeviceMetric4": "Value", + "DeviceMetric5": "Value", + "DeviceMetric6": "Value", "Sensor1": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value", + "SensorMetric5": "Value", + "SensorMetric6": "Value" }, "Sensor2": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value", + "SensorMetric5": "Value", + "SensorMetric6": "Value" }, "Sensor3": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value" }, "Sensor4": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value" } }, "Device2": { - "Metric1": "Metric1Value", - "Metric2": "Metric2Value", - "Metric3": "Metric3Value", - "Metric4": "Metric4Value", + "DeviceMetric1": "Metric1Value", + "DeviceMetric2": "Metric2Value", + "DeviceMetric3": "Metric3Value", + "DeviceMetric4": "Metric4Value", "Sensor1": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value", + "SensorMetric5": "Value", + "SensorMetric6": "Value" }, "Sensor2": { - "Metric1": "Value", - "Metric2": "Value", - "Metric3": "Value", - "Metric4": "Value", - "Metric5": "Value", - "Metric6": "Value" + "SensorMetric1": "Value", + "SensorMetric2": "Value", + "SensorMetric3": "Value", + "SensorMetric4": "Value", + "SensorMetric5": "Value", + "SensorMetric6": "Value" } } }
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)
Description has changed: Diff: --- old +++ new @@ -1 +1,3 @@ -Update code to check/replace these illegal characters (/,+,#) from the Edge_Node _Id or Group_id element +Update code to check/replace these illegal characters "/,+,#" from the Edge_Node _Id or Group_id element + +The illegal characters will be replaced with an underscore "_"
Last updated: 2021-08-10
Post by i-campbell on Ticket #48: Cforge tool integration discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Seems repository specific, as SM3RaspiStepper works. At least it extracts the repositories, even if it throws a few KeyNotFoundException. SVN: Information: [00:27:28] Added SM3_Drive_RaspiStepper SVN: Information: [00:27:28] Completed at revision: 24 SVN: Information: [00:27:28] Added: 95 SVN: Information: [00:27:28] ---------- Scripted SVN Operation ---------- See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box. ************** Exception Text ************** System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. at System.ThrowHelper.ThrowKeyNotFoundException() at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at _3S.CoDeSys.Svn.SVNVersionInfoData.get_WorkingCopyExists() at _3S.CoDeSys.Svn.SVNVersionInfoData.IsInitialized(SVNVersionInfoData vid) ...
Last updated: 2021-08-10
Post by aliazzz on Ticket #31: Define how Store & Forward should be implemented (historical data) discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Milestone: 999.0 Backlog --> 3.0 SCADA
Last updated: 2021-08-10
Post by i-campbell on Ticket #62: Sparkplug Birth Death Sequence: Should it MOD 256? discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: open --> wont-fix
Last updated: 2021-08-10
Post by hermsen on Ticket #72: MQTT: FB_MQTT.IsConnected producing false positives discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,3 +1,3 @@ there is an issue in our method FB_MQTT.IsConnected also rewrite it to resolve the eMQTTConnectionState -then we are in the clear with false positives on the connect case +then we are in the clear with false positives on the connect case.
Last updated: 2021-08-10
Post by hermsen on Ticket #107: Subscribe to "STATE" of Primary Application discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: open --> accepted
Last updated: 2021-08-10
Post by aliazzz on Ticket #15: Example project for a SCADA discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,2 +1,4 @@ * create installation and usage instructions -* A CODESYS SCADA / IIoT Host should connect to a third party MQTT_Broker and receive data from an EoN and send commands to an EoN, and indicate the EoN connection status +* A CODESYS SCADA / IIoT Host should connect to a third party MQTT_Broker and receive data from an EoN and send commands to an EoN, and indicate the EoN connection status. +* This CODESYS SCADA (PLC) application is the so called 'Primary Application' (see SparkplugB specs page 20 and beyond) and can reside on any CODESYS PLC. +Thie primary application is effectivly decoupled from the infrastructure via the use of the MQTT broker.
Last updated: 2021-08-10
Post by i-campbell on Ticket #67: Print library version into SparkplugLog (immutable) discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Owner: Anonymous --> h-hermsen
Last updated: 2021-08-10
Post by aliazzz on Ticket #23: Architecture discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
a new limit on devices has been set: 8 Devices max
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)
Description has changed: Diff: --- old +++ new @@ -4,9 +4,9 @@ * [x] Process NBIRTH * [x] Process NDATA * [x] Process NDEATH -* [ ] Process DBIRTH -* [ ] Process DDATA -* [ ] Process DDEATH +* [x] Process DBIRTH +* [x] Process DDATA +* [x] Process DDEATH publish it's STATE and, if applicable, issue commands
Last updated: 2021-08-10
Post by i-campbell on Ticket #98: install notes: update docs when Debian release with Mosquitto v2 discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Milestone: 2.0.0.0: SCADA --> 9.9.9.9: Backlog
Last updated: 2021-08-10