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)
resolved in trunk with r372
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)
status: open --> closed
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)
Done, List is now decorated with; {attribute 'no_assign'}
Last updated: 2021-08-10
Post by i-campbell on Ticket #19: Add certificate generation to the library discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Implemented, but "Authenticator" functionality will be moved to new project.
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)
Check behaviour of this occurrence (via unit-test) and implement options for mitigation: raise an error in the log for occurrence: payload > g_udiMaxPayloadSize, skip sending of payload if: payload > g_udiMaxPayloadSize
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)
status: pending --> closed
Last updated: 2021-08-10
Post by aliazzz on Ticket #50: FB_MQTT: false calculation of _LastwillMessageSize discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
labels: Bug, FB_MQTT --> status: open --> closed
Last updated: 2021-08-10
Post by i-campbell on Ticket #79: Create a .package v1.0.0.0 in tags directory for MVP discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: accepted --> closed
Last updated: 2021-08-10
Post by aliazzz on Ticket #32: FB_MQTT_PubSub Considerations discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -37,6 +37,6 @@ PubRetain:= PublishRetain ); xPublish := xPublishBusy AND NOT(xPublishDone OR xPublishError); -~~ +~~~
Last updated: 2021-08-10
Post by i-campbell on Ticket #1: Create Introductionpage discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Status: open --> accepted
Last updated: 2021-08-10
Post by i-campbell on Ticket #105: Lowering Device CPU consumption discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
MQTT.Publisher.xDone only comes true after a PUBACK has been received back from the server. This could last seconds depending on the server load and network load. So the Entry Action should do all the one time setup stuff, and then the Cyclic Action should call Publisher() until .xDone.
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: accepted --> closed
Last updated: 2021-08-10
Post by aliazzz on Ticket #106: AWS IoT Core Support discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Hi! We love to know if you have succeeded and what type of obstacles you had to tackle ;-) 👌💪
Last updated: 2021-08-10
Post by i-campbell on Ticket #25: FB_Payload: UTF-8 strings discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
status: accepted --> closed
Last updated: 2021-08-10
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 @@ -21,9 +21,7 @@ * [ ] 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 +* [ ] 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
Last updated: 2021-08-10
Post by aliazzz on Ticket #24: FB_MQTT_PubSub discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -22,7 +22,7 @@ /Subscriber SetSubscriberBuffer => // !needs implementation! IsMessageReceived() // TRUE if a message is ready to be digested - GetMessage() // Provides the message itself + GetMessage() // Provides the message itself => DEBUG! provides NOTHING currently :-( Subscribe() SubscriberBusy() SubscriberDone()
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)
Description has changed: Diff: --- old +++ new @@ -3,6 +3,8 @@ * 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!
Last updated: 2021-08-10
Post by i-campbell on Ticket #19: Add certificate generation to the library discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,2 +1,45 @@ -The user should be able to give their own certificate (hCert) if they wish. -And as an alternative, they should also have a helper function, to self generate a certificate suitable for use for a particular MQTT broker type. +TODO: How to get trusted certificates in there? i.e. AWS's public certificates +TODO: Update with pictures of UI +TODO: renew certificate when it expires +# Three CODESYS applications: +On three seperate devices: +* EoN Node +* SCADA / IIoT Host +* Authenticator + +### EoN Node +check if he has a private key yet. If not, generate a private key and CSR. +check if he has a Certificate yet. If not check if he has a CSR yet. If notgenerate a CSR. +The CSR is not a secret, so publish the text of the CSR on a visualization. +have a text entry field on the visu to receive the signed certificate and install it for use. + +CODESYS Lib: CmpX509Cert +CODESYS Example project: CryptoCertDemo + +### SCADA / IIoT Host +check if he has a private key yet. If not, generate a private key and CSR. +check if he has a Certificate yet. If not check if he has a CSR yet. If notgenerate a CSR. +The CSR is not a secret, so publish the text of the CSR on a visualization. +have a text entry field on the visu to receive the signed certificate and install it for use. + +### Authenticator +Authenticator's only job is to take Certificate Signing Requests, and send them to AWS to register the device. +Interface: +3 text fields, same for all nodes / hosts: +* copy and paste your super secret amazon API key (from AWS) +* copy and paste the AWS arn (copy it from AWS) +* copy and paste the sparkplugB group_id + +then for each MQTT Client: +* copy and paste the text of the csr +* copy and paste the EoN Node name or SCADA / IIoT Host name (user's responsibility to assign unique names. AWS will probably give an error, if you assign a duplicate name) +* select wether EoN Node or SCADA / IIoT Host (OR BOTH!) +* Hit "register" +* This info is then sent via this API, which returns the signed public certificate: +https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html +https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#bulk-template-example +* will display the response from AWS (eg. SUCCESS) + +Note: it would be trivial to add application node, (same as SCADA / IIoT, but accept a list of allowed Nodes to read from, allowed nodes to write from, and whether it is allowed to publish its state) + +Note: I am not a security expert, so this implementation will need to be risk assessed for suitability in what the user wants to run it.
Last updated: 2021-08-10
Post by aliazzz on Ticket #24: FB_MQTT_PubSub discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -20,12 +20,13 @@ PublisherDone() PublisherError() /Subscriber + SetSubscriberBuffer() Received() Subscribe() SubscriberBusy() SubscriberDone() SubscriberError() - Unsubscribe() // ?Needed? + Unsubscribe() ~~~ *The behaviourmodel is phased out as it is overkill because each of the composite FB's allready implemented their own CMBL.IConc statemachine*
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)
Pushed into trunk v0.0.0.26
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)
The cforge checkout fails because Cforge/Scripts/pysvn.py:svn_list() calls this command line: args = " -R" svn list %s --username=%s --password=%s %s" % (args, username, password, url) If I try the same in command prompt, I get the E175009 error only for these two svn addresses: svn list -R https://forge.codesys.com/svn/prj,mqttsparkplugb,code/ svn list -R https://forge.codesys.com/svn/prj,mqttsparkplugb,code/trunk/ but listing the components of trunk is no problem (trunk contains only one folder, mqttsparkplugb): svn list -R https://forge.codesys.com/svn/prj,mqttsparkplugb,code/trunk/mqttsparkplugb/ svn list https://forge.codesys.com/svn/prj,mqttsparkplugb,code/trunk/ My first guess is a length issue, ie the command can't handle paths bigger than 256, but I don't know yet which end this is. I guess checking the server logs might help, but I can see with wireshark exactly what response I get from the server.
Last updated: 2021-08-10
Post by i-campbell on Ticket #28: FB_Payload.ClaimNextFree* should initialize for you discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
InitializeStructuredPayload( ) gets rid of any previously added metrics and any previously added timestamps, sequences, uuids or bodies. So when should it do that? Answer: 1. At the start of decode (which is already done internally) 2. after you are finished using the previous result and ready to start adding a new metric / timestamp etc. which you want to be encoded. So when does the FB know when you are finished with the previous result and ready to start fresh adding new stuff? Currently it is when you call this method.
Last updated: 2021-08-10
Post by hermsen on Ticket #135: Project Homepage: Update guides discussion
co⚡e: Sparkplug™ MQTT edge and host
tickets
(Post)
Description has changed: Diff: --- old +++ new @@ -1,6 +1,6 @@ Proof and Update the following to match latest library: -[ ] [Add to existing](https://forge.codesys.com/prj/mqttsparkplugb/home/Add%20SparkplugB%20to%20existing%20CODESYS%20project/) -[ ] [Set up Test Server](https://forge.codesys.com/prj/mqttsparkplugb/home/Set%20up%20test%20system/) - rename to setup a test system with Ignition Primary Host +[x] [Add to existing](https://forge.codesys.com/prj/mqttsparkplugb/home/Add%20SparkplugB%20to%20existing%20CODESYS%20project/) +[x] [Set up Test Server](https://forge.codesys.com/prj/mqttsparkplugb/home/Set%20up%20test%20system/) - rename to setup a test system with Ignition Primary Host Add the following guides: [x] setting up a test environment with a co⚡e primary host
Last updated: 2021-08-10