Page Tree
Previous Releases
...
Info | ||
---|---|---|
| ||
Quick video tutorial: MQTT Broker Without Sparkplug, TMQTT Broker And Sparkplug, MQTT With Mosquitto Broker (no audio) |
There is an executable file called TMQTTBroker.exe inside the product installation folder. To run it you need to double-click over the file. After running, you can see a blue icon in the Windows tray bar. MQTT Broker will run following the specification configured in the file TMQTTBroker.exe.config, you can find more information about it in the next section.
There is the possibility to run the Broker as Windows Service running the file InstallTMQTTBrokerAsService.exe also found in the product installation folder. This MQTT Broker accepts connection with MQTT Clients following the SparkplugB specification and pure MQTT Clients that do not use SparkplugB as the Mosquitto clients.
Also, it is possible to connect the TMQTTBroker with a runtime project where it can make available all namespaces and properties from the specific projects. In this case the project information will be available following the SparkplugB specification.
Before running the TMQTTBroker.exe the file TMQTTBroker.exe.config must be configured with the desire configuration. It can be found in the product installation folder and you can open it in any Text Editor. However, it is very important that the file name and extension (.exe.config) remains the same.
Open the TMQTTBroker.exe.config file, you are going to find all the possible configured parameters already there, but they will be in comments (between <!−− −−> ). Then, to set a specific parameter you need to move the whole line of the parameter outside the comments (<!−− −−>) but keep it into the section <configuration> <appSettings>.
Example of whole line to move:
Code Block |
---|
<add key="ListeningPort" value="1883"/> |
Running the MQTT Broker with the default configuration (without changing the .config file) it will assume the parameters below:
See below the complete list of parameters found in the .config file and their respective description.
As defined in http://mqtt.org/:
”MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. For example, it has been used in sensors communicating to a broker via satellite link, over occasional dial-up connections with healthcare providers, and in a range of home automation and small device scenarios. It is also ideal for mobile applications because of its small size, low power usage, minimized data packets, and efficient distribution of information to one or many receivers (more...)”.
As defined in https://www.bevywise.com/blog/sparkplug-b-mqtt-simulation/.
Sparkplug provides an open and freely available specification for how Edge of Network (EoN) gateways or native MQTT enabled end devices and MQTT Applications communicate bi-directionally within an MQTT Infrastructure. One of the unique aspects of MQTT is that it was originally designed for real time SCADA systems to help reduce data latency over bandwidth limited and often unreliable network infrastructure. Similarly the intent of the Sparkplug specification is to take full advantage of MQTT’s native Continuous Session Awareness capability as it applies to real time SCADA/IIoT solutions.
Inside the product installation folder, you will find an executable file called TMQTTBroker.exe. To run it, double click on the file. Once the file is running, a blue icon will appear in the Windows System Tray. The MQTT Broker will run by following the specifications configured in the TMQTTBroker.exe.config file. You can find more information regarding this in the next section.
The Broker can run as a Windows service by running the file InstallTMQTTBrokerAsService.exe, which is also found in the product installation folder. The MQTT Broker accepts connections with MQTT clients by following the SparkplugB specification. Also, it accepts connections with pure MQTT clients, who do not use SparkplugB, as Mosquitto clients.
The TMQTTBroker can be connected to a runtime project, and it will make all of the project's namespaces and properties available. When connected like this, the project information will be available following the SparkplugB specification.
...
Before running TMQTTBroker.exe, the file TMQTTBroker.exe.config must be configured with the desired configuration. TMQTTBroker.exe.config is in the product installation folder, and you can open it in any text editor. It is very important that the file name and extension (.exe.config) remain the same.
When you open the TMQTTBroker.exe.config file, you will find all of the possible configured parameters. The parameters will be comments surrounded by (<!−− −−>). To set a specific parameter, you need to move the whole line of the parameter outside the comments (<!−− −−>) but keep it in the section <configuration> <appSettings>.
Example of the whole line you need to move:
Code Block |
---|
Code Block |
<appSettings>
<add key="ListeningPort" value="1883"/> |
When you run the MQTT Broker with the default configuration (without changing the .config file), it will assume the parameters below:
Below is the complete list of parameters found in the .config file and their respective description.
Code Block |
---|
<appSettings> <add key="ListeningPort" value="1883 <add key="Backlog" value="100"/> <add key="GroupId" value="TServer"/> <add key="TimeUpdateTServers" value="500"/> <add key="DisableRetainedFileBacklog" value="false100"/> <add key="CertificateFileGroupId" value="TServer"/> <add key="CertificatePasswordTimeUpdateTServers" value="500"/> <add key="SslProtocolsDisableRetainedFile" value="Tls12false"/> <add key="UserNameAndPassword1CertificateFile" value="Test;#3B43F58BFF9AFF8CFF8BFFCDFF"/> <add key="ClientID1CertificatePassword" value=""/> <add key="SslProtocols" value="Tls12"/> <add key="UserNameAndPassword1" value="Test;#3B43F58BFF9AFF8CFF8BFFCDFF"/> <add key="ClientID1" value="ClientID01;Topic1=*,Subscribe1=True,Publish1=True"/> <add key="ClientID2" value="ClientID02;Topic1=*,Subscribe1=True,Publish1=True"/> <add key="TServer1" value="<ProjectName>;localhost:3101"/> <add key="TagProperties" value="Min;Max"/> </appSettings> |
...
...
The password can be a string (with no encryption ) or an encrypted password. For encrypting To encrypt a password you can use in any coder (ex. Visual Studio), use the following code:
Code Block |
---|
string Encrypted_password = T.Library.StringUtilities.ToHex(string <password>); |
The encrypted password will be is a hex character that will be an input is in the .config file. To make To make sure the Broker knows it is required to decrypt it in order to check must decrypt the password to check for matches, you must add the ’# ’ symbol before the password.
Code Block |
---|
<add key="UserNameAndPassword1" value="<UserName>;< Password>" /> E.g.: <add key="UserNameAndPassword1" value="test;1234" /> |
...
DisableRetainedFile: The broker stores the last retained message and the corresponding QoS for that topic. Valid The valid value is true or false. Default The default is false.
ClientID: This parameter can enable limitation This parameter enables limitations for specific MQTT Clients related to For configuring clients. To configure more than one MQTT Client client, you need to create a whole new whole line changing and change the last number of the ClientID to the next sequence sequential number.
Code Block |
---|
add key="ClientID1" value="<MQTTClientID>; Topic1=<Topic>, Subscribe1=<True or False>, Publish1=<True or False>" /> |
There are 4 internal parameters:
Publish: flag Flag (true or false) that allows Client the client to publish to a topic (can write messages).
Code Block |
---|
<add key="ClientID1" value="MQTTClientTest;Topic1=*,Subscribe1=True, Publish1=True"/> <add key="ClientID2" value="32443fsa6546fa;Topic1=*,Subscribe1=True, Publish1=False"/> <add key="ClientID3" value="7323rt304343r4;Topic1=*,Subscribe1=False,Publish1=True"/> |
The parameters below are used to make the TMQTTBroker connecting connect with a running project (TServer).
Code Block |
---|
add key="TServer1" value="<ProjectName>;<TServerIPAddress>:<TServerPort> " /> E.g. <add key="TServer1" value="ProjectTest1;localhost:3101" /> <add key="TServer2" value="ProjectDemo;localhost:3201" /> <add key="TServer3" value="ProjectMQTT;192.168.1.10:3101" /> |
...
Code Block |
---|
<add key="TagProperties" value="Minl;Max;AlarmState;Acked" /> |
...
There are two ways the The TMQTTBroker can be implemented in two ways. It can be used as a simple gateway to exchange that exchanges data between any MQTT Clients client or through a direct connection with runtime projects and by publishing project data for MQTT Clients clients using the SparkplugB specification.
In this scenario, the TMQTTBroker only will exchange exchanges data between MQTT Clients clients following the SparkplugB specification or not. Then, the Clients clients are responsible to subscribe and publish topics to the Broker. Any topic format is supported All topic formats are shown in this scenario.
In this scenario, the TMQTTBroker will connect with connects to one or several more runtime projects through the TServer. It will publish only publishes the project data only for topics by following the SparkplugB specification.
...
Code Block |
---|
spBv1.0/<Group_Id>/<message_type>/<Project_Name>/<MQTT_Device_Name> |
Where the:
Examples of namespaces: Tag, Script, Device, Info, Script, Server, Security, Alarm, Historian DataSets, TemplatesName and MainTag for arrays.
...
spBv1.0/TServer/DDATA/Project1/Tag
Warning |
---|
The Topics topics are case sensitive. |
In this scenario, the TMQTTBroker will work works as if the last two scenarios are combined together. As This means a simple gateway exchange any exchanges data between the MQTT Clients and publishing publishes project data projects to the topics that match the project configuration in the TMQTTBroker.exe.config.
...
To The first step to set up a communication between the TMQTTBroker and the MQTTdriver , the first step is to create a Channel using this the protocol shown in the image below.
In the Engineering Environmentenvironment, go to Edit > Devices > Channels Edit>Devices>Channels and find the desired protocol inside the list.
In the Nodes tab, the primary station is configured in configured using the following syntax below:
Code Block |
---|
<BrokerURL> ; <port> ; [Username] ; [Password] ; [X509Certificate] ; [QoS] |
...
Where, Username, Password, X509Certificate, and QoS are optional.
In the Points tab, you need to configure the Topic in which topic so that your variable may can publish or subscribe to messages ( according to its AccessType). More information on is available for each item is available in the MQTT driver documentationAddress columns, under Edit > Devices > Points.
The TMQTT Broker can have other clients connect to it in Clients can connect with TMQTT Brokers the same way as others Brokers available they connect to other available Brokers (e.g: mosquitto).
In order to test itthe connection, you can use mosquitto (Mosquitto either as a publisher or as a subscriber). The syntax required to publish a message and subscribe to a topic with mosquitto Mosquitto is:
Code Block |
---|
mosquitto_pub -p <portNumber> -t <Topic> -m <Message> mosquitto_sub -p <portNumber> -t <Topic> |
...
To The first step to set up a communication between MQTT + SparkPlug Driver and the TMQTT Broker , the first step is to create a Channel using this the protocol shown in the image below.
In the Engineering Environmentenvironment, go to Edit > Devices > Edit>Devices>Channels and find the desired protocol inside the list.
In the ProtocolOptions column ProtocolOptions, there are some fields that must be filled., you need to fill out the following fields:
...
More information on each item is available in the MQTT + SparkPlugB driver documentation. In the Nodes tab, the primary station is configured in configured using the following syntax below:
Code Block |
---|
<BrokerURL> ; <port> ; [Username] ; [Password] ; [X509Certificate] ; [SslProtocol] ; [WebSocket] ; [ScadaIIoTHostID] |
...
The topics are configured using the following syntax.:
Code Block |
---|
<GroupId>;<EdgeNodeId>;<DeviceId>;<QoS> |
...
It is possible to You can set up a communication between the TMQTT Broker with Third Parties and third party MQTT Clients. In this example, we will use MQTT.fx.
To configure this client MQTT.fx, the following steps are required:
Step 1: The TMQTT Broker must be running (look . Look for the icon in the Windows TaskBar).
Step 2: In the Clientclient, go to Extras > Edit Extras>Edit Connections Profiles. In the opened Window you will fill the properties In the window that opens, fill in the MQTT Broker Profile Settings according to your Broker broker (e.g.: Broker Address and Broker Portbroker address and broker port). Then, click on connect.
Step 3: In the subscribe Tab tab, the Topic topic will follow the syntax below:
Code Block |
---|
spBv1.0/<Group_Id>/<message_type>/<Project_Name>/<MQTT_Device_Name> |
Let’s imagine an example , in which the Project Name project name is ’Project1’, and we have an integer tag called ’Tag.Integer1’.
In this situation, order to correctly subscribe to the Tagtag, first you need to create a Device Birth Certificate (to start device birth certificate, which starts the communication channel).
Code Block |
---|
spBv1.0/TServer/DBIRTH/Project1/Tag.Integer1 // create channel for this specific tag // or spBv1.0/TServer/DBIRTH/Project1/Tag // create channel for all tags |
...
Note |
---|
It is worth mentioning that for an array Tag it is not its not required to point to each element individually for an array tag. The broker is smart enough to fetch all data by just receiving the main Tag tag element. The same happens for Tags tags with Template Datatypestemplate datatypes. |
There are some other More data that can exchange be exchanged between the running project and TMQTT Broker. Some examples can be seen below.
...
Info |
---|
The client is case-sensitive. If the Topic topic is not fetching data, check for possible typos in the subscribed topics. |
Step 4: After subscribing for to the desired topics, the exchanged data can be seen in the top - right corner.
Note |
---|
You must change the Payload Decoder to Sparkplug. |
...
Step 5: To correctly format the received data, copy the message and paste it in into any JSON formatter (e.g.: https://jsonformatter.org/json-pretty-print). The result should be something like the code below.
Code Block |
---|
{ "timestamp": 1580152490182, "metrics": [ { "name": "Integer1", "timestamp": 1580152489659, "dataType": "Int32", "value": 30 } ], "seq": 1 } |
As defined in http://mqtt.org/:
”MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was de- signed as an extremely lightweight publish/subscribe messaging transport. It is useful for connec- tions with remote locations where a small code footprint is required and/or network bandwidth is at a premium. For example, it has been used in sensors communicating to a broker via satellite link, over occasional dial-up connections with healthcare providers, and in a range of home automation and small device scenarios. It is also ideal for mobile applications because of its small size, low power usage, minimised data packets, and efficient distribution of information to one or many receivers (more...)”.
As defined in https://www.bevywise.com/blog/sparkplug-b-mqtt-simulation/.
...