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 set up two RUT955 routers to
| + | *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 |
| | | |
− | '''Prerequisites''':
| + | ==RUT2 configuration== |
− | * Two RUT955 routers (one of them with SIM card inserted);
| + | ===Configuring Modbus RTU Slave=== |
− | * An end device (PC, Laptop, Tablet, Smartphone) for configuration;
| + | ---- |
− | | + | Go to Services → Modbus → Modbus RTU Slave and create a new instance. |
− | ==Router configuration== | + | # Enter the '''desired instance name'''; |
− | | + | # Select the '''desired serial interface'''. |
− | If you have familiarized yourself with the configuration scheme and have all of the devices in order, you can start configuring your routers using instructions provided in this section.
| |
| | | |
− | If you're having trouble finding this 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.
| + | [[File:Modbus RTU Slave.png|border|center|class=tlt-border|855 × 308px]] |
− | [[File:Basic WebUI Advanced.gif|border|center|class=tlt-border|1004x1004px]] | |
| | | |
− | ==Via SMS== | + | ==RUT1 configuration== |
− | 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.
| + | ===Configuring MQTT Gateway=== |
− | ===RUT 2===
| |
− | First, let's configure a RUT2 router.
| |
− | ----
| |
− | ====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;
| + | Go to '''Services → Modbus → MQTT Gateway''' and there: |
− | * Go to the '''Services → Mobile Utilities → SMS Utilities''' page;
| |
− | * Enter desired SMS text command ('''1''') and select action ('''2''');
| |
− | * Add new instance ('''3''');
| |
| | | |
− | [[File:SMS utils add.png|border|center|class=tlt-border|1004x1004px]]
| + | # '''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'''. |
| | | |
− | After this you should redirected to configuration page for that rule:
| + | [[File:MQTT Gateway config.png|border|center|class=tlt-border|862 × 412px]] |
− | [[File:SMS utils SMS config.png|border|center|class=tlt-border|1004x1004px]] | |
| | | |
− | # '''Open General''' tab;
| + | '''Note''': ''Everything else can be left as default or changed according to your needs.'' |
− | # Check '''Enable''';
| |
− | # Action - '''Change I/O state''';
| |
− | # State - '''High'''
| |
− | # SMS text - Enter your desired '''SMS text''';
| |
− | # Save and apply changes;
| |
| | | |
− | '''Note:''' Not marked fields can be left as default.
| + | ===Configuring Serial Gateway=== |
− | ===RUT 2=== | |
− | ----
| |
− | ====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 tab=====
| |
− | 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 2 WebUI and go to the '''Services → Input/Output → I/O Juggler''' page; Then navigate to '''Actions''' and '''create a new instance'''.
| + | Under the MQTT Gateway configuration, create the Serial Gateway: |
− | [[File:IO juggler action sms.png|border|center|class=tlt-border|1004x1004px]]
| + | # Enter the '''desired device ID'''; |
| + | # Select the '''desired serial interface'''. |
| | | |
− | # '''Enter''' the desired action '''instance name''';
| + | [[File:Serial gateway config.png|border|center|class=tlt-border|868×308px]] |
− | # Select '''desired type''';
| |
− | # Click '''add''';
| |
| | | |
− | This will open a new configuration page:
| + | ===Configuring Flespi.io MQTT Broker=== |
− | [[File:IO_juggler_SMS_config_new.png|border|center|class=tlt-border|1004x1004px]]
| + | ---- |
| + | '''Log in''' or '''create an account''' on '''https://flespi.io'''; |
| | | |
− | # Type - '''SMS'''; | + | #Navigate to '''MQTT Board''' on the '''left side''' menu; |
− | # Text message - enter your '''Router 2 password''' and the '''SMS rule''' that you have created; | + | #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''; |
− | # Recipient's phone number - enter Router '''2 SIM cards number'''; | + | #In the opened window, press '''"Get flespi token"''' to generate a username; |
− | # Save and apply changes | + | #Enter the '''Client name'''; |
| + | #Copy the Host address; |
| + | #Copy '''Username'''; |
| + | #Create a '''password'''. |
| | | |
− | '''Note:''' Not marked fields can be left as default.
| + | Once done, save all the changes. |
| + | [[File:Flespi board.png|border|center|class=tlt-border|1102x729px]] |
| | | |
− | =====General tab===== | + | ===Message format for MQTT publisher=== |
| ---- | | ---- |
| + | Modbus request data sent in the MQTT payload should be generated in accordance with the following format: |
| | | |
− | [[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> |
| | | |
− | # Open '''General''' tab ('''1''') and enable it ('''2''');
| + | The table below explains what each option means: |
− | # Add '''new instance''' role ('''3''');
| |
− | # Click Add ('''4''');
| |
| | | |
− | After that, you will be prompted to edit an instance:
| + | {| class="wikitable" |
− | | + | |1. Format version |
− | # Check '''Enable''';
| + | |'''1''' |
− | # Trigger - '''Raising''';
| + | |- |
− | # Add actions - Select the action you have created;
| + | |2. Cookie |
− | [[File:IO_Juggler_general_input_config.png|border|center|class=tlt-border|1004x1004px]] | + | |from '''0''' to '''2<sup>64</sup> -1''' |
− | | + | |- |
− | '''Note:''' Not marked fields can be left as default. | + | |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''']]. |
| | | |
− | ==Via Public IP== | + | ==Testing MQTT Publisher and Subscriber on flespi.io== |
− | 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 RUT2 Output state to a high via RUT2 Public IP.
| + | ====Adding Flespi Subscriber==== |
− | | |
− | ===RUT 1=== | |
| ---- | | ---- |
− | ====Remote access====
| + | To test the Modbus Serial Gateway functionality, '''log into''' your '''Flespi account''' → '''MQTT Board''' and '''add a Subscriber''': |
− | ----
| |
− | Navigate to '''System → Administration → Access Control''':
| |
| | | |
− | [[File:Access control rutos.png|border|center|class=tlt-border|1004x1004px]]
| + | #Press '''''<nowiki/>'+'''''' button on the top right corner |
| + | #Select '''''<nowiki/>'Subscriber'''''' |
| + | # In the topic field enter '''''<nowiki/>'response'''''' |
| + | #Press '''''<nowiki/>'Subscribe'''''' button |
| | | |
− | # Open '''General''' tab ('''1''') and locate the '''WebUI section''';
| + | [[File:Flespi subscriber.png|border|class=tlt-border|496x204px]] [[File:Flespi subscriber setup.png|border|class=tlt-border|496x205px]] |
− | # '''Enable''' remote '''HTTP''' ('''2''') and '''HTTPS''' access ('''3''');
| + | ====Adding Flespi Subscriber==== |
− | # Save and apply changes ('''4''');
| |
− | | |
− | '''Note:''' Not marked fields can be left as default.
| |
− | ====SMS Gateway configuration==== | |
| ---- | | ---- |
− | Go to the '''Services → Mobile Utilities → SMS Gateway page''';
| |
| | | |
− | [[File:SMS post get.png|border|center|class=tlt-border|1004x1004px]]
| + | Also, you will need to '''add a Publisher''': |
| | | |
− | # Open '''Post/Get''' tab; | + | #Press '''''<nowiki/>'+'''''' button on the top right corner |
− | # Check '''enable'''; | + | #Select '''''<nowiki/>'Publisher'''''' |
− | # Enter desired '''username'''; | + | #In the topic field enter '''''<nowiki/>'request'''''' |
− | # '''Password'''; | + | #In the message field enter message, for this example '''''<nowiki/>'Getting temperature'''''' is used |
− | # '''Confirm password'''; | + | #Press '''''<nowiki/>'Publish'''''' button |
− | # Save and apply changes;
| |
| | | |
− | '''Note:''' Not marked fields can be left as default.
| + | [[File:Flespi publisher.png|border|class=tlt-border|495x238px]] [[File:Flespi publisher setup.png|border|class=tlt-border|494x239px]] |
− | | + | ====Flespi Subscriber output==== |
− | ===RUT 2=== | |
− | ----
| |
− | =====Actions tab===== | |
| ---- | | ---- |
− | 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:
| |
− | </b><br><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==
| |
| | | |
| | | |
− | ==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] |