Changes

480 bytes removed ,  08:14, 13 September 2023
no edit summary
Line 1: Line 1:  +
<p style="color:red">The information on this page is updated in accordance with the [https://wiki.teltonika-networks.com/view/FW_%26_SDK_Downloads'''00.07.4'''] firmware version .</p>
 +
__TOC__
 +
==Summary==
 +
In this guide, the MQTT Serial Gateway function will be configured using third-party MQTT Broker services (in this example, ''Flespi.io'').
   −
==Introduction==
+
==Configuration overview & prerequisites==
This article contains instructions on how to configure I/O Juggler between two RUT955 routers.
+
*Two devices with serials ports - one acts as Modbus RTU Master, another as Modbus RTU Slave;
 +
*Flespi.io account to act as an MQTT Broker/Publisher/Subscriber (for first configuration example);
   −
==Configuration overview and prerequisites==
+
[[File:MQTT Serial gateway topology v2.png|border|center|class=tlt-border|847x279px]]
   −
Before we begin, let's overview the configuration that we are attempting to achieve and the prerequisites that make it possible. On a RUT1 an I/O Juggler action is created to execute a command when Input 1 is being triggered to a state high to change Output state to high on a RUT2.
+
RUT2 will act as a Modbus RTU slave and RUT1 as a Modbus RTU Master. On RUT1, MQTT Serial Gateway will be configured to transfer Modbus data over MQTT. Flespi.io platform will serve as an MQTT Broker
   −
# RUT1 Input 1 state changes to a High;
+
==RUT2 configuration==
# RUT1 executes action and send command to RUT2;
+
===Configuring Modbus RTU Slave===
# RUT2 Output(4) state changes to High;
+
----
 +
Go to Services → Modbus → Modbus RTU Slave and create a new instance.
 +
# Enter the '''desired instance name''';
 +
# Select the '''desired serial interface'''.
   −
'''Prerequisites''':
+
[[File:Modbus RTU Slave.png|border|center|class=tlt-border|855 × 308px]]
* Two RUT955 routers (one of them with SIM card inserted);
  −
* An end device (PC, Laptop, Tablet, Smartphone) for configuration;
     −
If you're having trouble finding any page or some of the parameters described here on your device's WebUI, you should >turn on "Advanced WebUI" mode</b>. . You can do that by clicking the "Basic" button under "Mode", which is located at the top-right corner of the WebUI.
+
==RUT1 configuration==
[[File:Basic WebUI Advanced.gif|border|center|class=tlt-border|1004x1004px]]
+
===Configuring MQTT Gateway===
 +
----
 +
Go to '''Services → Modbus → MQTT Gateway''' and there:
    +
# '''Enable''' the '''instance''';
 +
# '''Enter Host''' (copied from flespi connection settings without 'wss://' and port);
 +
# '''Enter Username''' (Copied from flespi Connection settings generated '''token''');
 +
# '''Enter Password'''.
    +
[[File:MQTT Gateway config.png|border|center|class=tlt-border|862 × 412px]]
    +
'''Note''': ''Everything else can be left as default or changed according to your needs.''
   −
==Via SMS==
+
===Configuring Serial Gateway===
This section contains a detailed guide on how to execute an action from RUT1 when Input 1 is being trigger. Action will send an SMS message to a RUT2 and change the device Output state to a high.
  −
===RUT 2===
  −
This section contain information on how to configure RUT2 device.
  −
----
  −
====SMS Utilities configuration====
  −
The SMS Utilities section contains a list of rules that perform certain actions when they are activated by SMS messages.
   
----
 
----
* Log into Router 2 WebUI;
+
Under the MQTT Gateway configuration, create the Serial Gateway:
* Go to the '''Services → Mobile Utilities → SMS Utilities''' page and scroll down for '''Add new rule''';
+
# Enter the '''desired device ID''';
* Enter '''desired SMS text''' command ('''1''') and '''select action''' ('''2''');
+
# Select the '''desired serial interface'''.
* '''Add''' new '''instance''' ('''3''');
     −
[[File:SMS utils add.png|border|center|class=tlt-border|1004x1004px]]
+
[[File:Serial gateway config.png|border|center|class=tlt-border|868×308px]]
   −
After this you should redirected to configuration page for that rule:
+
===Configuring Flespi.io MQTT Broker===
[[File:SMS utils SMS config.png|border|center|class=tlt-border|1004x1004px]]
  −
 
  −
# '''Open General''' tab;
  −
# Check '''Enable''';
  −
# Action - '''Change I/O state''';
  −
# I/O - '''Output(4)''';
  −
# State - '''High'''
  −
# SMS text - Enter your desired '''SMS text''';
  −
# '''Save''' and '''apply''' '''changes''';
  −
 
  −
'''Note:''' Not marked fields can be left as default.
   
----
 
----
===RUT 1===
+
'''Log in''' or '''create an account''' on '''https://flespi.io''';
This section contains RUT1 I/O Juggler configuration.
  −
----
  −
====I/O Juggler configuration====
  −
The I/O Juggler is a feature that provides the possibility to create automated rules that perform certain actions based on Input state changes and other conditions. You can learn more about it [[RUT955_Input/Output#I.2FO_Juggler|here]].
  −
----
  −
=====Actions configuration=====
  −
The Actions section is used to manage and create new Actions that can be executed by the I/O Juggler Rules. The figure below is an example of the Actions section, which is empty by default. You can learn more about it [[RUT955_Input/Output#Actions|here]].
  −
----
  −
* Log into Router 1 WebUI and go to the '''Services → Input/Output → I/O Juggler → Actions (1)''' page;
  −
* '''Enter''' the desired action '''instance name (2)''' and select '''desired action type (3)''';  
  −
* Click '''add (4)''';
  −
[[File:IO juggler action sms.png|border|center|class=tlt-border|1004x1004px]]
     −
This will open a new configuration page:
+
#Navigate to '''MQTT Board''' on the '''left side''' menu;                                       
[[File:IO_juggler_SMS_config_new.png|border|center|class=tlt-border|1004x1004px]]
+
#On the right-hand panel, top right corner, next to the name of the MQTT board, '''press the cogwheel-looking icon''' to open ''Connection Settings'';
 +
#In the opened window, press '''"Get flespi token"''' to generate a username;
 +
#Enter the '''Client name''';
 +
#Copy the Host address;
 +
#Copy '''Username''';
 +
#Create a '''password'''.
   −
# Type - '''SMS''';
+
Once done, save all the changes.
# Text message - '''RUT2 password''' and the '''SMS rule''' that have been created on RUT2;
+
[[File:Flespi board.png|border|center|class=tlt-border|1102x729px]]
# Recipient's phone number - RUT2''' SIM cards number''';
  −
# '''Save''' and '''apply changes''';
     −
'''Note:''' Not marked fields can be left as default.
+
===Message format for MQTT publisher===
 
----
 
----
=====General configuration=====
+
Modbus request data sent in the MQTT payload should be generated in accordance with the following format:
The General section is used to Input Trigger rules, which can perform a specified user-configured action when the Input state changes
  −
----
  −
* Once I/O Juggler Action tab is configured, open '''General''' tab ('''1''') and '''enable''' it ('''2''');
  −
* Add '''new instance''' role ('''3''');
  −
* Click Add ('''4''');
     −
[[File:IO juggler general config.png|border|center|class=tlt-border|1004x1004px]]
+
<pre>1 <COOKIE> <SERIAL_DEVICE_ID> <TIMEOUT> <SLAVE_ID> <MODBUS_FUNCTION> <FIRST_REGISTER> <REGISTER_COUNT> </pre>
   −
After that, you will be prompted to edit an instance:
+
The table below explains what each option means:
   −
[[File:IO_Juggler_general_input_config.png|border|center|class=tlt-border|1004x1004px]]
+
{| class="wikitable"
# Check '''Enable''';
+
|1.  Format version
# Trigger - '''Raising''';
+
|'''1'''
# Add actions - '''Action name''' that was created previously;
+
|-
 +
|2. Cookie
 +
|from '''0''' to '''2<sup>64</sup> -1'''
 +
|-
 +
|3. Serial device ID
 +
|a string used to identify a serial device. Must match with <u>Device ID</u> field in MQTT Gateway page Serial gateway configuration section
 +
|-
 +
|4. Timeout
 +
|timeout for Modbus connection, in seconds. Range [1..999].
 +
|-
 +
|5. Slave ID
 +
|Indicates to which slave request is sent
 +
|-
 +
|6. Modbus function
 +
|Modbus task type that will be executed. Possible values are:
 +
        <ul>
 +
            <li><b>1</b> - read coils;</li>
 +
            <li><b>2</b> - read input coils;</li>
 +
            <li><b>3</b> - read holding registers;</li>
 +
            <li><b>4</b> - read input registers;</li>
 +
            <li><b>5</b> - set single coil;</li>
 +
            <li><b>6</b> - write to a single holding register;</li>
 +
            <li><b>15</b> - set multiple coils;</li>
 +
            <li><b>16</b> - write to multiple holding registers.</li>
 +
        </ul>
 +
|-
 +
|7. First register
 +
|number (not address) of the first register/coil/input (in range [1..65536]) from which the registers/coils/inputs will be read/written to.
 +
|-
 +
|8. Registry count
 +
| <li><b>1</b> - <u>coil count</u> (in range [1..2000]); must not exceed the boundary (first coil number + coil count <= 65537);</li>
 +
            <li><b>2</b> - <u>input count</u> (in range [1..2000]); must not exceed the boundary (first input number + input count <= 65537);</li>
 +
            <li><b>3</b> - <u>holding register count</u> (in range [0..125]); must not exceed the boundary (first register number + holding register count <= 65537);</li>
 +
            <li><b>4</b> - <u>input register count</u> (in range [0..125]); must not exceed the boundary (first register number + input register count <= 65537);</li>
 +
            <li><b>5</b> - <u>coil value</u> (in range [0..1]);</li>
 +
            <li><b>6</b> - <u>holding register value</u> (in range [0..65535]);</li>
 +
            <li><b>15</b> - <u>coil count</u> (in range [1..1968]); must not exceed the boundary (first coil number + coil count <= 65537); and <u>coil values</u> separated with commas, without spaces (e.g., <i>1,2,3,654,21,789</i>); there must be exactly as many values as specified (with coil count); each value must be in the range of [0..1].
 +
|}
 +
====Examples====
 +
----
 +
{| class="wikitable"
 +
|Setting relay (on) (Relay address is 202, which means 'Number of first register will be 203)
 +
|'''1 1 1 1 1 6 203 1'''
 +
|-
 +
|Getting temperature
 +
|'''1 1 1 1 1 3 6 2'''
 +
|}
 +
Modbus parameters are held within registers. The register numbers and corresponding system values can be found [[RUT955_Monitoring_via_Modbus#Get_Parameters|'''in this article''']].
   −
'''Note:''' Not marked fields can be left as default.
+
==Testing MQTT Publisher and Subscriber on flespi.io==
 +
====Adding Flespi Subscriber====
 
----
 
----
 +
To test the Modbus Serial Gateway functionality, '''log into''' your '''Flespi account''' → '''MQTT Board''' and '''add a Subscriber''':
   −
==Via Public IP==
+
#Press '''''<nowiki/>'+'''''' button on the top right corner
For this configuration you will need a Static or Dynamic Public IP address. You can read up more on this in our article on [[Private_and_Public_IP_Addresses|Private and Public IP Addresses.]] Action will execute a script that contains a curl -X command which will change RUT2 Output state to a high via RUT2 Public IP.
+
#Select '''''<nowiki/>'Subscriber''''''
 +
# In the topic field enter '''''<nowiki/>'response''''''
 +
#Press '''''<nowiki/>'Subscribe'''''' button
   −
===RUT 2===
+
[[File:Flespi subscriber.png|border|class=tlt-border|496x204px]]          [[File:Flespi subscriber setup.png|border|class=tlt-border|496x205px]]
This section contain information on how to configure RUT2 device. A guide on how to [https://wiki.teltonika-networks.com/wikibase/index.php?title=Domnev&oldid=97979#SMS_Utilities_configuration configure SMS Utilities] can be found above.
+
====Adding Flespi Subscriber====
----
  −
====Remote access configuration====
  −
The Access Control page is used to manage remote and local access to device.
   
----
 
----
* Navigate to '''System → Administration → Access Control'''
  −
* Open '''General''' tab ('''1''') and locate the '''WebUI section''';
  −
* '''Enable''' remote '''HTTP''' ('''2''') and '''HTTPS''' access ('''3''');
  −
* '''Save''' and '''apply''' '''changes''' ('''4''');
     −
[[File:Access control rutos1.png|border|center|class=tlt-border|1004x1004px]]
+
Also, you will need to '''add a Publisher''':
 
  −
====SMS Gateway (Post/Get) configuration====
  −
Post/Get allows you to perform action requests by writing them in the URL after your device’s IP address.
  −
----
  −
* Go to the '''Services → Mobile Utilities → SMS Gateway page → Post/Get (1)''';
  −
* '''Enable''' Post/Get '''(2)''';
  −
* '''Set a username (3)''' and '''password (4)''';
  −
* '''Save''' and '''apply changes (5)''';
     −
[[File:SMS utils SMS config.png|border|center|class=tlt-border|1004x1004px]]
+
#Press '''''<nowiki/>'+'''''' button on the top right corner
 +
#Select '''''<nowiki/>'Publisher''''''
 +
#In the topic field enter '''''<nowiki/>'request''''''
 +
#In the message field enter message, for this example '''''<nowiki/>'Getting temperature'''''' is used
 +
#Press '''''<nowiki/>'Publish'''''' button
   −
===RUT 1===
+
[[File:Flespi publisher.png|border|class=tlt-border|495x238px]]  [[File:Flespi publisher setup.png|border|class=tlt-border|494x239px]]
This section contain information on how to configure RUT1 device. A guide on how to [https://wiki.teltonika-networks.com/wikibase/index.php?title=Domnev&oldid=97979#I.2FO_Juggler_configuration configure I/O Juggler] can be found above.
+
====Flespi Subscriber output====
----
  −
=====Actions configuration=====
   
----
 
----
Navigate to '''Services → Input/Output → I/O Juggler''' and create an Action instance.
+
Check the response in the '''''<nowiki/>'Subscriber'''''' tab, you should receive a message similar to the one below.
 
  −
[[File:IO juggler script conf.png|border|center|class=tlt-border|1004x1004px]]
  −
 
  −
# Type - '''Script''';
  −
# Specify path - you can choose between '''specifying''' the '''script path''' or '''uploading''' a '''script file''' directly;
  −
# Script file - depending on what you have chosen in the field above, you will be asked to enter a '''script directory''' or '''upload a script''' file;
  −
# Save and apply changes
  −
 
  −
'''Note:''' Not marked fields can be left as default.
  −
 
  −
Script example can be seen below:
  −
<pre>#!/bin/sh
  −
 
  −
curl -X GET "http://84.25.189.15/cgi-bin/sms_send?username=name&password=password&number=0037066081843&text=admin01 outputon"
  −
 
  −
exit 0</pre></li>
  −
 
  −
More information about '''curl -X''' command syntax [[RUT955_Mobile_Utilities#Post.2FGet|here]].
  −
 
  −
==Via RMS VPN==
  −
 
  −
===RMS VPN configuration===
  −
 
  −
A guide on how to set up a RMS VPN Hub can be found [https://youtu.be/dfAudZR2wPY here].
  −
 
  −
[[File:RMS VPN config IO.png|border|center|class=tlt-border|504x504px]]
  −
 
  −
Both RUT1 and RUT2 have to be added to RMS VPN Hub.
     −
====Script====
  −
Adjust the script accordingly to the RMS VPN Hub assigned IP to RUT2.
     −
==Results==
+
[[File:Flespi response.png|border|center|class=tlt-border|500x305px]]
   −
If configured correctly you should be able to see that the RUT1 Input 1 state is being changed to high as well as RUT2 Output.
     −
[[File:IO state.gif|border|center|class=tlt-border|1004x1004px]]
+
In the output, we can see that router's '''temperature''' is '''44 degrees Celsius'''.
   −
[[File:Output state.gif|border|center|class=tlt-border|1004x1004px]]
+
==See Also==
 +
*[[RUT955 Monitoring via Modbus#Get Parameters]]
 +
*[[RUT955_Modbus#MQTT_Gateway|MQTT Gateway and Modbus]]
 +
==External links==
 +
[https://flespi.io/#/ Flespi.io]