Difference between revisions of "User Scripts examples"

From Teltonika Networks Wiki
 
(33 intermediate revisions by 3 users not shown)
Line 11: Line 11:
  
 
For the instruction on how to setup 1-Wire sensor with the TRB141 kindly navigate to this [[TRB141 1-Wire Setup/Configuration|article]] that we have.
 
For the instruction on how to setup 1-Wire sensor with the TRB141 kindly navigate to this [[TRB141 1-Wire Setup/Configuration|article]] that we have.
 +
 +
====Disclaimer====
 +
----
 +
1) This configuration together with the custom script is tested and written on the firmware version [https://wiki.teltonika-networks.com/images/1/1c/TRB1_R_00.07.04.2_WEBUI.bin TRB1_R_00.07.04.2] of TRB141. <br>
 +
2) The provided script is written for example purposes only as our devices, specifically TRB141, doesn't have a built-in functionality to send 1-wire data to a specific server.
 +
  
 
=== Writing the Script ===
 
=== Writing the Script ===
 +
----
 
Connect to the TRB141 CLI via SSH or WebUI.
 
Connect to the TRB141 CLI via SSH or WebUI.
  
Line 19: Line 26:
 
Navigate to it, then create a new sh file using the “vi” command followed by the filename of your choice. (Don’t forget to add the .sh extension at the end).
 
Navigate to it, then create a new sh file using the “vi” command followed by the filename of your choice. (Don’t forget to add the .sh extension at the end).
  
<code>vi 1wire_script.sh</code>
+
<pre>vi 1wire_script.sh</pre>
  
  
Line 26: Line 33:
 
Copy the provided code and paste it into your script file.
 
Copy the provided code and paste it into your script file.
  
<code>#!/bin/sh</code>
+
<pre>#!/bin/sh
  
<code># Capture output of ubus call ioman.gpio.onewire status command</code>
+
# Capture output of ubus call ioman.gpio.onewire status command
  
<code>status=$(ubus call ioman.gpio.onewire status)</code>
+
status=$(ubus call ioman.gpio.onewire status)
  
<code># Parse value of "value" parameters</code>
+
# Parse value of "value" parameters
 +
value=$(echo "$status" | grep -o '"value":[^,}]*' | sed 's/.*: *"\?\([^,"}]*\)"\?/\1/')
  
<code>value=$(echo "$status" | grep -o '"value":[^,}]*' | sed 's/.*: *"\?\([^,"}]*\)"\?/\1/')</code>
+
if [ "$value" -eq 0 ]; then
  
<code>if [ "$value" -eq 0 ]; then</code>
+
  ubus call ioman.gpio.onewire update '{"value":"1"}'
  
<code>  ubus call ioman.gpio.onewire update '{"value":"1"}'</code>
+
fi
  
<code>fi</code>
+
BASE_DIR="/sys/bus/w1/devices/"
  
<code>BASE_DIR="/sys/bus/w1/devices/"</code>
+
do
 +
# Iterate through each sensor directory
 +
for sensor_dir in $BASE_DIR/28-*; do
  
<code>do</code>
+
  sensor_id=$(basename $sensor_dir)
  
<code># Iterate through each sensor directory</code>
+
  # Read temperature data from device file and filter it to display up to 2 decimal points
  
<code>for sensor_dir in $BASE_DIR/28-*; do</code>
+
  temp_raw=$(cat $sensor_dir/w1_slave | grep "t=" | awk -F"=" '{print $2}')
  
<code>  sensor_id=$(basename $sensor_dir)</code>
+
  temp=$(echo "$temp_raw" | awk '{printf "%.2f", $1/1000}')
  
<code>  # Read temperature data from device file and filter it to display up to 2 decimal points</code>
+
  # Define HTTP server URL and payload data
  
<code>  temp_raw=$(cat $sensor_dir/w1_slave | grep "t=" | awk -F"=" '{print $2}')</code>
+
  SERVER_URL="192.168.2.227"
  
<code>  temp=$(echo "$temp_raw" | awk '{printf "%.2f", $1/1000}')</code>
+
  PAYLOAD="{\"SensorID\": \"$sensor_id\", \"temperature\": $temp}"
  
<code>  # Define HTTP server URL and payload data</code>
+
  # Send temperature data to server using cURL
  
<code>  SERVER_URL="192.168.2.227"</code>
+
  curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" $SERVER_URL
  
<code>  PAYLOAD="{\"SensorID\": \"$sensor_id\", \"temperature\": $temp}"</code>
+
done</pre>
 
 
<code>  # Send temperature data to server using cURL</code>
 
 
 
<code>  curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" $SERVER_URL</code>
 
 
 
<code>done</code>
 
  
 
''To use this script, replace the ‘DEVICE_FILE’, ‘SERVER_URL’, and ‘PAYLOAD’ variables with the appropriate values for your system and HTTP server.''
 
''To use this script, replace the ‘DEVICE_FILE’, ‘SERVER_URL’, and ‘PAYLOAD’ variables with the appropriate values for your system and HTTP server.''
Line 86: Line 90:
 
After that, it checks if the value stored in the '''‘value’''' variable is equal to 0. If it is, the '''‘ubus’''' command is used to call the '''‘ioman.gpio.onewire’''' service and execute the ‘update’ command, which updates the ‘value’ parameter to 1.
 
After that, it checks if the value stored in the '''‘value’''' variable is equal to 0. If it is, the '''‘ubus’''' command is used to call the '''‘ioman.gpio.onewire’''' service and execute the ‘update’ command, which updates the ‘value’ parameter to 1.
 
[[File:Networking trb user scripts cli code explanation2.png|border|class=tlt-border]]
 
[[File:Networking trb user scripts cli code explanation2.png|border|class=tlt-border]]
 
  
 
This line sets the ‘BASE_DIR’ variable to the base directory for 1-wire devices.
 
This line sets the ‘BASE_DIR’ variable to the base directory for 1-wire devices.
  
 
[[File:Networking trb user scripts cli code explanation3.png|border|class=tlt-border]]
 
[[File:Networking trb user scripts cli code explanation3.png|border|class=tlt-border]]
 
  
 
This line sets up a ‘for’ loop to iterate through all directories in ‘$BASE_DIR’ that start with ’28-‘, which is the prefix for 1-wire temperature sensors.
 
This line sets up a ‘for’ loop to iterate through all directories in ‘$BASE_DIR’ that start with ’28-‘, which is the prefix for 1-wire temperature sensors.
Line 98: Line 100:
  
 
[[File:Networking trb user scripts cli code explanation4.png|border|class=tlt-border]]
 
[[File:Networking trb user scripts cli code explanation4.png|border|class=tlt-border]]
 
  
 
This block reads the temperature data from the device file '''‘$sensor_dir/w1_slave’''' and extracts the raw temperature value using '''‘grep’''' and '''‘awk’'''. The temperature value is encoded as an integer.
 
This block reads the temperature data from the device file '''‘$sensor_dir/w1_slave’''' and extracts the raw temperature value using '''‘grep’''' and '''‘awk’'''. The temperature value is encoded as an integer.
Line 104: Line 105:
 
Which then converts the raw temperature value to degrees Celsius by dividing it by 1000 and then formatting it with two decimal places using '''‘printf’'''. The resulting temperature value is stored in the '''‘temp’''' variable.
 
Which then converts the raw temperature value to degrees Celsius by dividing it by 1000 and then formatting it with two decimal places using '''‘printf’'''. The resulting temperature value is stored in the '''‘temp’''' variable.
  
[[File:Networking trb user scripts cli code explanation5.png|left|border|class=tlt-border]]
+
[[File:Networking trb user scripts cli code explanation5.png|border|class=tlt-border]]
 
 
 
 
 
 
 
 
 
 
  
 
These lines define the URL of the server to which the temperature data will be sent and the payload data that will be sent with each request. The payload includes the '''‘sensor_id’''' and '''‘temp’''' variables, formatted as a JSON object.
 
These lines define the URL of the server to which the temperature data will be sent and the payload data that will be sent with each request. The payload includes the '''‘sensor_id’''' and '''‘temp’''' variables, formatted as a JSON object.
  
[[File:Networking trb user scripts cli code explanation6.png|left]]
+
[[File:Networking trb user scripts cli code explanation6.png|border|class=tlt-border]]
 
 
 
 
 
 
 
 
  
 
This line uses the '''‘curl’''' command to send an HTTP POST request to the server specified by '''‘$SERVER_URL’'''. The '''‘-X POST’''' option specifies that the request should be a POST request, and the '''‘-H “Content-Type: application/json”’''' option specifies that the payload data is in JSON format. The '''‘-d “$PAYLOAD”’''' option specifies the payload data to be sent with the request.
 
This line uses the '''‘curl’''' command to send an HTTP POST request to the server specified by '''‘$SERVER_URL’'''. The '''‘-X POST’''' option specifies that the request should be a POST request, and the '''‘-H “Content-Type: application/json”’''' option specifies that the payload data is in JSON format. The '''‘-d “$PAYLOAD”’''' option specifies the payload data to be sent with the request.
  
[[File:Networking trb user scripts cli code explanation7.png|left]]
+
[[File:Networking trb user scripts cli code explanation7.png|border|class=tlt-border]]
 
 
 
 
 
 
 
 
  
 
=== Output ===
 
=== Output ===
[[File:Networking trb user scripts HTTP listener screenshot.png|left|800x800px]]
+
----
 
+
[[File:Networking trb user scripts HTTP listener screenshot.png|800x800px|border|class=tlt-border]]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
Run the script by entering the file path of the file or '''./<filename>.sh''' if you are in the same directory.
 
Run the script by entering the file path of the file or '''./<filename>.sh''' if you are in the same directory.
Line 148: Line 123:
 
If configured correctly, you should be able to see the temperature data on your HTTP server.
 
If configured correctly, you should be able to see the temperature data on your HTTP server.
  
==Example 2: filtering SMS messages==
 
[[File:Configuration examples user scripts 1.png]]
 
  
==Example 3: Mobile Parameters to HTTP Server==
+
==Example 2: Mobile Parameters to HTTP Server==
  
 
Mobile parameters are needed to measure signal features that can be acquired using  
 
Mobile parameters are needed to measure signal features that can be acquired using  
Line 161: Line 134:
 
are required, and how to run it.
 
are required, and how to run it.
  
 +
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. You can do that by '''clicking''' the '''"Basic"''' button '''under "Mode"''', which is located at the top-right corner of the WebUI.
 +
[[File:Networking rutx manual webui basic advanced mode v1.gif|border|class=tlt-border]]
  
 +
====Disclaimer====
 
----
 
----
* First you want to make sure that you have '''ADVANCED mode''' enabled. This will allow you to choose from a larger variety of settings.
+
1) This page describes a custom script that is tested on the latest firmware version at that time ([[RUTX14_Firmware_Downloads|RUTXXX_R_00_07_04_2]]).
[[File:Networking rutx manual webui basic advanced mode v1.gif|border|class=tlt-border]]
+
 
----
+
2) While we strive to keep the information accurate and up-to-date, these are exclusively meant for illustrative purposes only. It's important to clarify that the functionalities being discussed are not inherent features of our routers. Any reliance you place on the information within this document/website/article is strictly at your own discretion.
  
 
===Prerequisites===
 
===Prerequisites===
 
+
----
 
For this particular configuration you will need:
 
For this particular configuration you will need:
  
Line 177: Line 153:
  
 
===Preparation===
 
===Preparation===
 
+
----
 
* Prepare RUTX14, power up the device, insert the sim card, check that mobile interface is active and working. SIM1, PWR and signal strength indicators should light up.
 
* Prepare RUTX14, power up the device, insert the sim card, check that mobile interface is active and working. SIM1, PWR and signal strength indicators should light up.
  
 
'''Network -> Interfaces''' should look similar to this:
 
'''Network -> Interfaces''' should look similar to this:
  
[[File:Screenshot 1.png|left]]
+
[[File:Blur1.png|border|center|1100px|class=tlt-border]]
  
 +
===Making a Directory and Script===
 +
----
  
===Making a Directory and Script===
 
 
'''1.''' Connect to RUTX14 CLI using PUTTY or WEBUI.
 
'''1.''' Connect to RUTX14 CLI using PUTTY or WEBUI.
  
'''2.''' Create a new directory for the custom script.
+
'''2.''' Create a new directory for the custom script with the following command: <code><span class="highlight">mkdir /etc/config/script</span></code> 
* mkdir /etc/config/scripts
 
  
[[File:Screenshot 2.png|left]]
+
[[File:Directory.png|border|center|1000px|class=tlt-border]]
  
 +
'''3.''' Then create a new .sh file: <code><span class="highlight">touch /etc/config/script/<filename>.sh</span></code>
  
 +
[[File:Crop1.png|border|center|class=tlt-border]]
  
 +
'''4.''' To edit the filename, use <code><span class="highlight">vi <filename>.sh</span></code>. Press '''I'''. To save and exit, '''Press Esc''' then ''':x''' or to exit without saving, '''Press Esc''' then ''':q!'''.
  
 +
[[File:Crop2.png|border|center|class=tlt-border]]
  
 +
'''5.''' After editing, save then run command <code><span class="highlight">chmod +x <filename></span></code> to make the script executable.
  
'''3.''' Then create a new .sh file.
+
[[File:Chmod3.png|border|center|class=tlt-border]]
*touch /etc/config/scripts/<filename>.sh
 
  
[[File:Screenshot 3.png|left]]
+
===Testing===
 +
----
 +
'''6.''' Run the script: <code><span class="highlight">/etc/config/script/<filename></span></code>  or if you are inside script directory just run <code><span class="highlight">./<filename></span></code>
  
 +
[[File:Exec.png|border|center|class=tlt-border]]
  
'''4.''' To edit the filename, use '''vi <filename>.sh'''. Press '''I'''. To save and exit, '''Press Esc''' then ''':x''' or to exit without saving, '''Press Esc''' then ''':q!'''.
+
'''7.''' If all configurations are correct, all parameters should be displayed in the HTTP Server
  
[[File:Screenshot 4.png|left]]
+
[[File:Blur2.png|border|center|class=tlt-border]]
 
 
 
 
[[File:Screenshot 5.png|left]]
 
 
 
 
 
 
 
'''5.''' After editing, save then run command '''chmod +x <filename>''' to make the script executable.
 
  
 
===Script===
 
===Script===
 
+
----
 
To get a copy of the whole script, please refer to this [https://wiki.teltonika-networks.com/view/File:Script.pdf file].
 
To get a copy of the whole script, please refer to this [https://wiki.teltonika-networks.com/view/File:Script.pdf file].
 
 
===Testing===
 
 
'''6.''' Run the script.
 
 
* /etc/config/script/<filename> or if you are inside script directory just run ./<filename>
 
 
[[File:Screenshot 6.png|left]]
 
 
 
 
'''7.''' If all configurations are correct, all parameters should be displayed in the HTTP Server
 
 
[[File:Screenshot 7.png|left]]
 

Latest revision as of 08:21, 23 August 2023

Introduction

User Scripts is a service in RUT routers that provides the user with the possibility to create custom shell scripts that run at the end of router's boot process.

This article will provide some examples on the usage of User Scripts. Although it must be noted that one should be at least be partially familiar with the syntax and basic principles of shell scripts beforehand as this guide will not provide a tutorial on shell scripts themselves.

Example 1: 1-Wire Data to Server for TRB141

Since there is no Web interface support for getting 1-wire data, it has to be accessed via SSH or Console modes. As of now, the Data to Server function for 1-wire sensor data can only be done by writing a custom script since there are no direct methods of storing this data.

This article will provide a step-by-step configuration on how to configure data to server using a custom script that allows 1-wire data to be sent on an HTTP server.

For the instruction on how to setup 1-Wire sensor with the TRB141 kindly navigate to this article that we have.

Disclaimer


1) This configuration together with the custom script is tested and written on the firmware version TRB1_R_00.07.04.2 of TRB141.
2) The provided script is written for example purposes only as our devices, specifically TRB141, doesn't have a built-in functionality to send 1-wire data to a specific server.


Writing the Script


Connect to the TRB141 CLI via SSH or WebUI.

Create a new directory for you to save the script that is to be created later. (Optional)

Navigate to it, then create a new sh file using the “vi” command followed by the filename of your choice. (Don’t forget to add the .sh extension at the end).

vi 1wire_script.sh


A text editor window will open and press the letter ‘i’ to enter insert mode.

Copy the provided code and paste it into your script file.

#!/bin/sh

# Capture output of ubus call ioman.gpio.onewire status command

status=$(ubus call ioman.gpio.onewire status)

# Parse value of "value" parameters
value=$(echo "$status" | grep -o '"value":[^,}]*' | sed 's/.*: *"\?\([^,"}]*\)"\?/\1/')

if [ "$value" -eq 0 ]; then

  ubus call ioman.gpio.onewire update '{"value":"1"}'

fi

BASE_DIR="/sys/bus/w1/devices/"

do
# Iterate through each sensor directory
for sensor_dir in $BASE_DIR/28-*; do

  sensor_id=$(basename $sensor_dir)

  # Read temperature data from device file and filter it to display up to 2 decimal points

  temp_raw=$(cat $sensor_dir/w1_slave | grep "t=" | awk -F"=" '{print $2}')

  temp=$(echo "$temp_raw" | awk '{printf "%.2f", $1/1000}')

  # Define HTTP server URL and payload data

  SERVER_URL="192.168.2.227"

  PAYLOAD="{\"SensorID\": \"$sensor_id\", \"temperature\": $temp}"

  # Send temperature data to server using cURL

  curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" $SERVER_URL

done

To use this script, replace the ‘DEVICE_FILE’, ‘SERVER_URL’, and ‘PAYLOAD’ variables with the appropriate values for your system and HTTP server. Press the ‘esc’ on your keyboard to exit insert mode, then type :x, and press enter.

Networking trb user scripts examples cli 1wire data to server script.png.png

Run the command: ‘chmod 777 <filename>’ to make the script executable on your end.


Code explanation

This line uses ‘ubus’ command to call the ‘ioman.gpio.onewire’ service and execute the ‘status’ command. The output of this command is saved to the status variable. Networking trb user scripts cli code explanation1.png

This block of code extracts the value of the ‘value’ parameter from the ‘status’ output using ‘grep’and ‘sed’ and stores it in the ‘value’ variable.

After that, it checks if the value stored in the ‘value’ variable is equal to 0. If it is, the ‘ubus’ command is used to call the ‘ioman.gpio.onewire’ service and execute the ‘update’ command, which updates the ‘value’ parameter to 1. Networking trb user scripts cli code explanation2.png

This line sets the ‘BASE_DIR’ variable to the base directory for 1-wire devices.

Networking trb user scripts cli code explanation3.png

This line sets up a ‘for’ loop to iterate through all directories in ‘$BASE_DIR’ that start with ’28-‘, which is the prefix for 1-wire temperature sensors.

After that, it extracts the sensor ID from the sensor directory path using the ‘basename’ command and stores it in the ‘sensor_id’ variable.

Networking trb user scripts cli code explanation4.png

This block reads the temperature data from the device file ‘$sensor_dir/w1_slave’ and extracts the raw temperature value using ‘grep’ and ‘awk’. The temperature value is encoded as an integer.

Which then converts the raw temperature value to degrees Celsius by dividing it by 1000 and then formatting it with two decimal places using ‘printf’. The resulting temperature value is stored in the ‘temp’ variable.

Networking trb user scripts cli code explanation5.png

These lines define the URL of the server to which the temperature data will be sent and the payload data that will be sent with each request. The payload includes the ‘sensor_id’ and ‘temp’ variables, formatted as a JSON object.

Networking trb user scripts cli code explanation6.png

This line uses the ‘curl’ command to send an HTTP POST request to the server specified by ‘$SERVER_URL’. The ‘-X POST’ option specifies that the request should be a POST request, and the ‘-H “Content-Type: application/json”’ option specifies that the payload data is in JSON format. The ‘-d “$PAYLOAD”’ option specifies the payload data to be sent with the request.

Networking trb user scripts cli code explanation7.png

Output


Networking trb user scripts HTTP listener screenshot.png]

Run the script by entering the file path of the file or ./<filename>.sh if you are in the same directory.

If configured correctly, you should be able to see the temperature data on your HTTP server.


Example 2: Mobile Parameters to HTTP Server

Mobile parameters are needed to measure signal features that can be acquired using gsmctl commands. However, there is no available command to check/display all of the desired details.

With that said, a custom script is needed to show them using one command. This article provides step-by-step instructions on how to write the script, programs that are required, and how to run it.

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. You can do that by clicking the "Basic" button under "Mode", which is located at the top-right corner of the WebUI. Networking rutx manual webui basic advanced mode.gif

Disclaimer


1) This page describes a custom script that is tested on the latest firmware version at that time (RUTXXX_R_00_07_04_2).

2) While we strive to keep the information accurate and up-to-date, these are exclusively meant for illustrative purposes only. It's important to clarify that the functionalities being discussed are not inherent features of our routers. Any reliance you place on the information within this document/website/article is strictly at your own discretion.

Prerequisites


For this particular configuration you will need:

  • A Gateway or a Router with GSM (RUTX14 is being used in the example)
  • 1 SIM card
  • 1 PC
  • HTTP Server (Hercules)

Preparation


  • Prepare RUTX14, power up the device, insert the sim card, check that mobile interface is active and working. SIM1, PWR and signal strength indicators should light up.

Network -> Interfaces should look similar to this:

Blur1.png

Making a Directory and Script


1. Connect to RUTX14 CLI using PUTTY or WEBUI.

2. Create a new directory for the custom script with the following command: mkdir /etc/config/script

Directory.png

3. Then create a new .sh file: touch /etc/config/script/<filename>.sh

Crop1.png

4. To edit the filename, use vi <filename>.sh. Press I. To save and exit, Press Esc then :x or to exit without saving, Press Esc then :q!.

Crop2.png

5. After editing, save then run command chmod +x <filename> to make the script executable.

Chmod3.png

Testing


6. Run the script: /etc/config/script/<filename> or if you are inside script directory just run ./<filename>

Exec.png

7. If all configurations are correct, all parameters should be displayed in the HTTP Server

Blur2.png

Script


To get a copy of the whole script, please refer to this file.