<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Ticket search results</title><link>https://forge.codesys.com/lib/cobolt/questions/</link><description>You searched for *:*</description><language>en</language><lastBuildDate>Thu, 25 Jan 2024 18:26:12 -0000</lastBuildDate><item><title>MQTT Host Library VfInit</title><link>https://forge.codesys.com/lib/cobolt/questions/14/</link><description>the MQTT Host library, POU/Sparkplug MQTT edge and Host stac/Function Blocks/ Factories/LinkedListWStringFactory/Create, in line 8 of Create has '`Create^.__vfInit();`' which is not defined. Should this be 'vfInit()'? And add a declaration of local variable vfInit:INIT?</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">amy123</dc:creator><pubDate>Thu, 25 Jan 2024 18:26:12 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/14/</guid></item><item><title>About CmpErrors Lib.</title><link>https://forge.codesys.com/lib/cobolt/questions/13/</link><description>Hello,
at last time , most researced and I have not found any imformation. in CmpErrors Lib. , there are "RST_IEC_HANDLE and RST_IEC_RESULT".  I could not see anything in that strcuts and therefore I did not understand when I use those struct in the project and how can I use that. what are there in those struct , how can ı see inside of this structures ? when will I use "RST_IEC_RESULT" and "RST_IEC_HANDLE" where and how  ? this question both of them.
Since I will be using it in TCP/IP communication, I am facing some problems about its use.I added two photo.

I am waiting your reply. Thank you.

Erdem Üstünel
+905362256285


</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">erdemustunel</dc:creator><pubDate>Tue, 14 Mar 2023 11:11:29 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/13/</guid></item><item><title>Accessing libraries, the example and the unittest for SP16.10</title><link>https://forge.codesys.com/lib/cobolt/questions/12/</link><description>Binaries tree [f9106e] TAG 16.10

For users who wish to use the library with older runtimes, the libraries, the example and the unittest are available for SP16.10. We have confirmed these versions to run correctly.

To get this version, install git for windows and run this command:
~~~
git clone -b 16.10 https://forge.codesys.com/git/lib,cobolt,binaries.git/ .
~~~
Or you can visit the [Tag 16.10](https://forge.codesys.com/lib/cobolt/binaries/ci/16.10/tree/) and download them from your browser.

The binaries could in theory be used in SP15.x but since we have *NOT* tested this, your mileage may vary!
If you want to Try this, you still need a SP16.10 IDE and set the compiler for SP16.10 and download this version into a SP15 runtime.

**Warning, please read this!**
We decided we will not develop for SP16.x anymore. Current development will continue in SP18!
See Ticket [#158] for further details.
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Sun, 17 Apr 2022 20:09:24 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/12/</guid></item><item><title>why did you divide the library into 4 seperate libraries?</title><link>https://forge.codesys.com/lib/cobolt/questions/11/</link><description>### Background
Debugging the single library solution just became too time-consuming and therfore too tedious.
To adres this forseen (in terms of complexity) and unforseen (sooner in time) issue we decided to move Ticket #99 forward, to retain control over the source code in a more modular fashion

### Libraries
* [x] co⚡e: Sparkplug™ MQTT Stack - Contains the common basis for Edge and Host solutions
* [x] co⚡e: Sparkplug™ MQTT Edge - Contains the Edge of Network and Device solution
* [x] co⚡e: Sparkplug™ MQTT Host - Contains the Primary Host solution
* [x] co🔗e: A Linked List Solution
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Sat, 23 Oct 2021 11:39:04 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/11/</guid></item><item><title>co⚡e, how do I pronounce this?</title><link>https://forge.codesys.com/lib/cobolt/questions/10/</link><description>co⚡e is pronounced as co-bolt, kobold, cobolt or cobalt, whichever you prefer :wink:

</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Sat, 05 Nov 2022 22:32:23 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/10/</guid></item><item><title>Running Sparkplug at home</title><link>https://forge.codesys.com/lib/cobolt/questions/9/</link><description># So what does a CODESYS Based Sparkplug B Node cost?
This FAQ acts as a guideline for costs per node usage for **home use**. Costs are indications based on maker and home grade hardware and industrial software license components. 

If you wish to use our Sparkplug for CODESYS library in a real **industrial environment**, no problem! You only need an industrial PLC/PC hardware platform as the base software is allready industrial grade and has a runtime license (presumably). The software only needs an IIot libaries bundle license.

Though our library is for the **larger part** open source, we still make use of the Single License (SL) industrial IoT bundle component to guarantee MQTT stability. Luckily this library offers excellent value for money! It has an amazing assortment of filehandling and communication protocol suites. Especially if you take into consideration that you can use all provided software components from the IIoT Bundle library SL and the Runtime SL for your individual use.

## Actual costs in a maker/home scenario
* [x] Every Node needs a hardware platform of choice. Here we chose a Raspberry Pi 3B (any model could do) as it is very popular and powerful, starting at 12 Euro. Search the web for a starter kit. Maybe you can pick up a good deal. We obtained a 3B for 35 euro.
* [x] Every Raspberry Pi needs a CODESYS Runtime License at 60 euro (inc VAT)  https://store.codesys.com/codesys-control-for-raspberry-pi-sl.html
* [x] Every Node needs a CODESYS IIoT bundle license at 60 euro (inc VAT) https://store.codesys.com/iiot-libraries-sl.html
* [ ] Optional USB license storage key (dongle) at 40 (inc VAT) https://store.codesys.com/codesys-key.html


## Optional USB license storage key (dongle) is recommended
It is recommended to spend a little extra on the optional usb license storage key and activate your runtime and library licenses on it. Wait for your key to arrive, and activate the license on them, plug it in your hardware -&gt; READY!

Benefits of the USB license storage key

* Protects your license against loss, 
* Enables you to *migrate your licenses* as the licenses are bound to this USB key and not to the Raspberry Pi 

If you choose the soft-container please take in account the following

* Migration of your license is *not possible* after activation as soft containers are hardware bound! So if your raspberry pi breaks or you want to migrate, you have to buy a new license. 
* If your SD Card gets corrupted you have a bigger chance of losing the license on which the soft container resides.

There is a [procedure](https://help.codesys.com/webapp/_rbp_license;product=CODESYS_Control_for_Raspberry_Pi_SL;version=3.5.16.0) for this, but a dongle just makes life easier. The choice is yours.

## Conclusion
In the end it all depends on the chosen hardware, but for around 160 Euro you have a very powerful and highly scalable PLC based on Raspberry Pi 3B hardware for home educational and lab purpose. It can act as a programmable gateway for all your (wireless) home automation and is more then capable of running CODESYS Sparkplug Primary Host node or a Edge Node (or both at once). It can even run an MQTT broker at the same time!</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Sat, 05 Feb 2022 23:20:27 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/9/</guid></item><item><title>Are AWS IoT core, Azure IoT hub or Google Cloud supported?</title><link>https://forge.codesys.com/lib/cobolt/questions/8/</link><description># No support for non compliant MQTT v3.1.1 server/services
The key issue with Amazon AWS IoT core, Microsoft Azure IoT hub and Google Cloud IoT Core is that 
they are **NOT 100% MQTT v3.1.1 compliant**.

Usage of Sparkplug for MQTT **demands** a 100% MQTT v3.1.1 compliant server/service.
Key concepts of the Sparkplug standard like retained Server STATE messages, will not work in such an environment. Because of the lacking compliancy we cannot support any NON compliant MQTT v3.1.1 compatible MQTT servers or cloud services.

AWS, Microsoft and Google lack support of even basic MQTT features such as QoS 2, Retained Messages and guaranteed message ordering. These basic MQTT features are often used to implement business critical systems. In fact, in order to be MQTT compliant these features are mandatory (not optional). This means neither AWS nor Microsoft Azure IoT Hub or Google Cloud are fully compliant to the full MQTT v3.1.1 specification.

If you are using AWS, Azure Or Google Cloud infrastructure, a possible way to circumvent their lacking support is to host a self built VM in AWS, Azure or Google Cloud which leverages the service ( i.e. hosting a fully compliant MQTT broker). A sidestep could be to go for a Mosquitto cloud server or HiveMQ Cloud which is now free for 100 clients + 10GB/Month + NO SLA.

## Amazon AWS IoT core non compliancy statement

https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html

*MQTT is a lightweight and widely adopted messaging protocol that is designed for constrained devices. AWS IoT support for MQTT is based on the MQTT v3.1.1 specification, with some differences. For information about how AWS IoT differs from the MQTT v3.1.1 specification, see AWS IoT differences from MQTT version 3.1.1 specification.*

See https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-differences for further details.


## Microsoft Azure IoT hub non compliancy statement

https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support

*IoT Hub is not a full-featured MQTT broker and does not support all the behaviors specified in the MQTT v3.1.1 standard. This article describes how devices can use supported MQTT behaviors to communicate with IoT Hub.*


## Google Cloud IoT core is being retired on August 16, 2023.

Contact your Google Cloud account team for more information.

https://cloud.google.com/iot-core/?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=emea-nl-all-en-dr-bkws-all-all-trial-p-gcp-1011340&amp;utm_content=text-ad-none-any-dev_c-cre_544121429444-adgp_Hybrid%20%7C%20BKWS%20-%20PHR%20%7C%20Txt%20~%20Internet%20of%20Things%20~%20Cloud%20IoT%20Core-kwid_43700066203993621-kwd-340168069162-userloc_9064953&amp;utm_term=kw_google%20iot-net_g-plac_&amp;gclid=EAIaIQobChMI0v6Mov2X-wIVAeR3Ch2i-AeWEAAYASAAEgJl7vD_BwE&amp;gclsrc=aw.ds</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Sat, 05 Nov 2022 21:26:32 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/8/</guid></item><item><title>Public Free MQTT Brokers useful for spakplug usage</title><link>https://forge.codesys.com/lib/cobolt/questions/7/</link><description># Public MQTT Brokers
The following public brokers are useful:

Mosquitto MQTT Testbroker
&gt; Host: **test.mosquitto.org**
&gt; TCP Port: **1883**
&gt; TLS Port: **8883**
&gt; TLS with Client Certificate Port: **8884**

HiveMQ MQTT Testbroker
&gt; Host: **broker.hivemq.com**
&gt; TCP Port: **1883**

These broker channels are entirely open, so beware what data you share.
Read Caveats for a good understanding of their service availability

&gt; https://test.mosquitto.org/ for more info
&gt; http://broker.hivemq.com/ for more info

</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Sat, 06 Feb 2021 13:10:05 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/7/</guid></item><item><title>MQTT Sparkplug CODESYS Controller Prerequisites</title><link>https://forge.codesys.com/lib/cobolt/questions/6/</link><description>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 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.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Fri, 14 May 2021 11:28:12 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/6/</guid></item><item><title>Various tested SparkplugB, MQTT TLS Security scenario's</title><link>https://forge.codesys.com/lib/cobolt/questions/5/</link><description>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.

* 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';
~~~
            ServerUrl                     := 'test.mosquitto.org';
            ServerPort                    := 8884;
            KeepAlive                     := 60; // In seconds
            Username                      := "";
            Password                      := "";
            getClientCert.sCommonName     := 'EdgeOfNetworkNode1';
            getClientCert.sCountry        := 'NL';
            getClientCert.sOrganization   := '****'; // intentionally redacted
            UseTLS                        := TRUE;
            hCert                         := SysTypes.RTS_INVALID_HANDLE; //no client cert
            StillGettingClientCertificate := TRUE;
~~~


TLS without client certificate on server 'xxxxxx' 
~~~
            ServerUrl                     := 'xxxxxx'; // intentionally redacted
            ServerPort                    := 8883;
            KeepAlive                     := 60; // In seconds
            Username                      := "xxxxxx"; // intentionally redacted
            Password                      := "xxxxxx"; // intentionally redacted
            getClientCert.sCommonName     := '';
            getClientCert.sCountry        := '';
            getClientCert.sOrganization   := '';
            UseTLS                        := TRUE;
            hCert                         := SysTypes.RTS_INVALID_HANDLE; //no client cert
            StillGettingClientCertificate := FALSE;
~~~

TLS with client certificate on server 'xxxxxx' 
~~~
            ServerUrl                     := 'xxxxxx'; // intentionally redacted
            ServerPort                    := 8883;
            KeepAlive                     := 60; // In seconds
            Username                      := "xxxxxx"; // intentionally redacted
            Password                      := "xxxxxx"; // intentionally redacted
            getClientCert.sCommonName     := '';
            getClientCert.sCountry        := '';
            getClientCert.sOrganization   := '';
            UseTLS                        := TRUE;
            hCert                         := SysTypes.RTS_INVALID_HANDLE; //no client cert
            StillGettingClientCertificate := FALSE;
            
            // Additional mandatory TLSContextProvider settings
            sUseCaseName                  := 'u1',
            ePurpose                      := SparkplugB.MQTT.NBS.Purpose.Client_Side,
            sHostname                     := 'xxxxxx', // intentionally redacted
            udiVerificationMode           := 2);
            
            &gt; NOTE: wait, yet more additional mandatory requirements!
            &gt; Download Security Agent Package
            &gt; Drag the xxxxxx certificate from SecurityAgent =&gt; Devices =&gt;  Qarantine... to SecurityAgent =&gt; Devices =&gt; Trusted
~~~</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">hermsen</dc:creator><pubDate>Mon, 28 Dec 2020 23:14:33 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/5/</guid></item><item><title>What is the difference between a Template definition and instance?</title><link>https://forge.codesys.com/lib/cobolt/questions/3/</link><description>Q: What is the difference between a Template definition and instance?

A: There are two parts to a Template
    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
    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
                True for a Template Definition metric, False for a Template Instance Metric
            templateref
                This is used by a Template Instance to specify the "name" of the Template Definition
            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
                Not currently used, will be ignored by MQTT Engine, can be omitted or set to false
            version
                Not currently used, will be ignored by MQTT Engine, can be omitted or set to null

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)</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">aliazzz</dc:creator><pubDate>Sun, 26 Apr 2020 20:01:49 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/3/</guid></item><item><title>What is the difference between Sparkplug A and Sparkplug B?</title><link>https://forge.codesys.com/lib/cobolt/questions/2/</link><description>The 'A' and 'B' qualifiers differentiate payload encoding formats. 
The following points show the similarities and differences between the two:

**Important note!  Sparkplug A has been deprecated.  **

* Both A and B use the same topic format with a qualifier as the first token in the topic namespace to denote the payload encoding format
* The message flow of both A and B is the same
* The only difference is the payload encoding format.
* Both formats are open source
* Both are based on Google Protobuf definitions
* Sparkplug A uses Eclipse Kura's payload definition found here: https://raw.githubusercontent.com/eclipse/kura/develop/kura/org.eclipse.kura.core.cloud/src/main/protobuf/kurapayload.proto
* Sparkplug B uses an expanded definition allowing for more metadata found here: https://raw.githubusercontent.com/Cirrus-Link/Sparkplug/master/sparkplug_b/sparkplug_b.proto</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">aliazzz</dc:creator><pubDate>Fri, 13 Sep 2019 12:42:42 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/2/</guid></item><item><title>What is Sparkplug in a nutshell?</title><link>https://forge.codesys.com/lib/cobolt/questions/1/</link><description>Sparkplug is a set of definitions on top of MQTT to serve the following purposes;

* 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.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">aliazzz</dc:creator><pubDate>Sat, 06 Feb 2021 13:07:43 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com/lib/cobolt/questions/1/</guid></item></channel></rss>