arteee87 / Get-LTE-signal-from-AT-command-mikrotik

A bunch of scripts to export LTE signal levels from the cellular modems, that do not report their stats to the RouterOS.
GNU General Public License v3.0
0 stars 0 forks source link

Problem script #1

Closed arekjaskulski closed 5 days ago

arekjaskulski commented 3 weeks ago

[admin@MikroTik] /system/script> run script1 expected end of command (line 106 column 40)

RBM 33G Mikrotik 7.15.3 - Telit LN960 Mobile Broadband , DW5821E , firmware T77W968.F1.0.0.5.2.GC.013 050

arteee87 commented 3 weeks ago

Hello, Please provide these outputs: 1) /in lte at-chat 0 input="AT^DEBUG?" 2) /system script print where name=script1

arekjaskulski commented 3 weeks ago

Hello

/in lte at-chat 0 input="AT^DEBUG?"

[admin@MikroTik] > /in lte at-chat 0 input="AT^DEBUG?" failure: AT channel not responding

/system script print where name=script1

[admin@MikroTik] > /system script print where name=script1 Flags: I - invalid 0 name="script1" owner="admin" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon dont-require-permissions=no last-started=2024-08-17 12:34:30 run-count=4 source= /system logging add topics=async

   /system script
   add dont-require-permissions=yes name=lte_info owner=arteee87 policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/in lte at-chat [find where \
       name=lte1] input=\"AT^DEBUG\?\"\r\
       \n/in lte at-chat [find where name=lte1] input=\"AT^CA_INFO\?\""
   add dont-require-permissions=no name=lte_log_parser policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":global lastTime;\r\
       \n\r\
       \n:global currentSINR [ :toarray [ /log find message~\"lte1: rcvd RS-SINR\"  ] ] ;\r\
       \n:global currentLineCountSINR [ :len \$currentSINR ] ;\r\
       \n:global currentTime [ :totime [/log get [ :pick \$currentSINR (\$currentLineCountSINR -1) ] time   ] ]>
       \n\r\
       \n:global currentRSSI [ :toarray [ /log find message~\"lte1: rcvd RSSI\"  ] ] ;\r\
       \n:global currentLineCountRSSI [ :len \$currentRSSI ] ;\r\
       \n\r\
       \n:global currentRSRP [ :toarray [ /log find message~\"lte1: rcvd AVG RSRP\"  ] ] ;\r\
       \n:global currentLineCountRSRP [ :len \$currentRSRP ] ;\r\
       \n\r\
       \n:global currentRSRQ [ :toarray [ /log find message~\"lte1: rcvd RSRQ\"  ] ] ;\r\
       \n:global currentLineCountRSRQ [ :len \$currentRSRQ ] ;\r\
       \n\r\
       \n:global messageSINR \"\";\r\
       \n:global messageRSSI \"\";\r\
       \n:global messageRSRP \"\";\r\
       \n:global messageRSRQ \"\";\r\
       \n\r\
       \n:global valueSINR \"\";\r\
       \n:global valueRSSI \"\";\r\
       \n:global valueRSRP \"\";\r\
       \n:global valueRSRQ \"\";\r\
       \n\r\
       \n:if ( \$lastTime = \"\" ) do={\r\
       \n    :set lastTime \$currentTime ;\r\
       \n    :set messageSINR [/log get [ :pick \$currentSINR (\$currentLineCountSINR-1) ] message];\r\
       \n    :set messageRSSI [/log get [ :pick \$currentRSSI (\$currentLineCountRSSI-1) ] message];\r\
       \n    :set messageRSRP [/log get [ :pick \$currentRSRP (\$currentLineCountRSRP-1) ] message];\r\
       \n    :set messageRSRQ [/log get [ :pick \$currentRSRQ (\$currentLineCountRSRQ-1) ] message];\r\
       \n \r\
       \n} else={\r\
       \n    :if ( \$lastTime < \$currentTime ) do={\r\
       \n        :set lastTime \$currentTime ;\r\
       \n        :set messageSINR [/log get [ :pick \$currentSINR (\$currentLineCountSINR-1) ] message];\r\
       \n        :set messageRSSI [/log get [ :pick \$currentRSSI (\$currentLineCountRSSI-1) ] message];\r\
       \n        :set messageRSRP [/log get [ :pick \$currentRSRP (\$currentLineCountRSRP-1) ] message];\r\
       \n        :set messageRSRQ [/log get [ :pick \$currentRSRQ (\$currentLineCountRSRQ-1) ] message];\r\
       \n    }\r\
       \n}\r\
       \n\r\
       \n:if ([:len \$messageSINR]=25) do={\r\
       \n    :set valueSINR [:pick \$messageSINR 20 23];\r\
       \n} else={\r\
       \n    :if ([:len \$messageSINR]=24) do={\r\
       \n        :set valueSINR [:pick \$messageSINR 20 22];\r\
       \n        } else={\r\
       \n            :if ([:len \$messageSINR]=23) do={\r\
       \n                :set valueSINR [:pick \$messageSINR 20];\r\
       \n            } else={\r\
       \n                :set valueSINR \"(err)\";\r\
       \n}}}\r\
       \n\r\
       \n:if ([:len \$messageRSSI]=26) do={\r\
       \n    :set valueRSSI [:pick \$messageRSSI 17 23];\r\
       \n} else={\r\
       \n    :if ([:len \$messageRSSI]=25) do={\r\
       \n        :set valueRSSI [:pick \$messageRSSI 17 22];\r\
       \n    } else={\r\
       \n        :set valueRSSI \"(err)\";\r\
       \n    }\r\
       \n}\r\
       \n\r\
       \n:if ([:len \$messageRSRQ]=24) do={\r\
       \n    :set valueRSRQ [:pick \$messageRSRQ 17 22];\r\
       \n} else={\r\
       \n    :if ([:len \$messageRSRQ]=23) do={\r\
       \n        :set valueRSRQ [:pick \$messageRSRQ 17 21];\r\
       \n    } else={\r\
       \n        :set valueRSRQ \"(err)\";\r\
       \n    }  \r\
       \n}\r\
       \n\r\
       \n:if ([:len \$messageRSRP]=30) do={\r\
       \n    :set valueRSRP [:pick \$messageRSRP 21 27];\r\
       \n} else={\r\
       \n    :if ([:len \$messageRSRP]=29) do={\r\
       \n        :set valueRSRP [:pick \$messageRSRP 21 26];\r\
       \n    } else={\r\
       \n        :set valueRSRP \"(err)\";\r\
       \n    }\r\
       \n}"
   add dont-require-permissions=no name=http_push_lte_signal_info owner=arteee87 policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":global valueSINR;\r\
       \n:global valueRSSI;\r\
       \n:global valueRSRP;\r\
       \n:global valueRSRQ;\r\
       \n\r\
       \n:local pushdata \"<prtg><result><channel>RSRQ</channel><value>\$valueRSRQ</value><float>1</float><u\
       nit>custom</unit><customunit>dB</customunit></result><result><channel>RSRP</channel><value>\$valueRSR\
       P</value><float>1</float><unit>custom</unit><customunit>dBm</customunit></result><result><channel>RSS\
       I</channel><value>\$valueRSSI</value><float>1</float><unit>custom</unit><customunit>dBm</customunit><\
       /result><result><channel>SINR</channel><value>\$valueSINR</value><unit>custom</unit><customunit>dB</c\
       ustomunit></result></prtg>\";\r\
       \n\r\
       \n:local prtg \"PRTG PROBE IP:PORT"\r\
       \n:local token \"TOKEN FORM THE HTTP PUSH DATA ADVANCED SENSOR (USE HTTP GET)\";\r\
       \n\r\
       \n/tool fetch http-method=get url=\"\$prtg/\$token\?content=\$pushdata\" http-header-field=\"h1:appli\
       cation/x-www-form-urlencoded\""

   /system scheduler
   add interval=15s name=lte_info on-event="/system/script/run lte_info" policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
   add interval=30s name=lte_log_parser on-event="/system script run lte_log_parser" policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
   add interval=1m name=send_lte_info on-event="/system script run http_push_lte_signal_info" policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
arteee87 commented 3 weeks ago

Hi. The first problem i see, is that your modem does not have AT channel working. You probably need to change the USB dev id on the windows system first. You must have at least 3 COM ports appear in the device manager.

Then for the script - I dont see any content in the "script1" that you're trying to run. Note, that when you run "lte_log_parser", you should have variables appear in the routeros env: (even when there is no data from the AT channel) Снимок экрана 2024-08-17 211448

arekjaskulski commented 3 weeks ago

Hi ok txh I restored the modem to the DELL DW5821 status and I already have the data

/system/script/environment/pri detail
0 name="currentLineCountRSRP" value="2"

1 name="currentLineCountRSRQ" value="2"

2 name="currentLineCountRSSI" value="2"

3 name="currentLineCountSINR" value="1"

4 name="currentRSRP" value="387;539"

5 name="currentRSRQ" value="37a;539"

6 name="currentRSSI" value="37b;539"

7 name="currentSINR" value="*539"

8 name="currentTime" value="08:50:21"

9 name="lastTime" value="08:50:21"

10 name="messageRSRP" value="new script added by winbox-3.41/mac-msg(winbox):admin@54:BF:64:97:F6:12 (2 = /system script add dont-require-permissions=no name=script2 policy=1,2,3,ftp,reboot,read,write,policy,test,A,password,C,sniff,sensitive,F,romon,13 source=":global lastTime;\r\; \n:global currentSINR [ :toarray [ /log find message~\"lte1: rcvd RS-SINR\" ] ] ;\r\; \n:global currentLineCountSINR [ :len \$currentSINR ] ;\r\; \n:global currentTime [ :totime [/log get [ :pick \$currentSINR (\$currentLineCountSINR -1) ] time ] ];\r\; \n:global currentRSSI [ :toarray [ /log find message~\"lte1: rcvd RSSI\" ] ] ;\r\; \n:global currentLineCountRSSI [ :len \$currentRSSI ] ;\r\; \n:global currentRSRP [ :toarray [ /log find message~\"lte1: rcvd AVG RSRP\" ] ] ;\r\; \n:global currentLineCountRSRP [ :len \$currentRSRP ] ;\r\; \n:global currentRSRQ [ :toarray [ /log find message~\"lte1: rcvd RSRQ\" ] ] ;\r\; \n:global currentLineCountRSRQ [ :len \$currentRSRQ ] ;\r\; \n\r\; \n:global messageSI"

11 name="messageRSRQ" value="new script added by winbox-3.41/mac-msg(winbox):admin@54:BF:64:97:F6:12 (2 = /system script add dont-require-permissions=no name=script2 policy=1,2,3,ftp,reboot,read,write,policy,test,A,password,C,sniff,sensitive,F,romon,13 source=":global lastTime;\r\; \n:global currentSINR [ :toarray [ /log find message~\"lte1: rcvd RS-SINR\" ] ] ;\r\; \n:global currentLineCountSINR [ :len \$currentSINR ] ;\r\; \n:global currentTime [ :totime [/log get [ :pick \$currentSINR (\$currentLineCountSINR -1) ] time ] ];\r\; \n:global currentRSSI [ :toarray [ /log find message~\"lte1: rcvd RSSI\" ] ] ;\r\; \n:global currentLineCountRSSI [ :len \$currentRSSI ] ;\r\; \n:global currentRSRP [ :toarray [ /log find message~\"lte1: rcvd AVG RSRP\" ] ] ;\r\; \n:global currentLineCountRSRP [ :len \$currentRSRP ] ;\r\; \n:global currentRSRQ [ :toarray [ /log find message~\"lte1: rcvd RSRQ\" ] ] ;\r\; \n:global currentLineCountRSRQ [ :len \$currentRSRQ ] ;\r\; \n\r\; \n:global messageSI"

12 name="messageRSSI" value="new script added by winbox-3.41/mac-msg(winbox):admin@54:BF:64:97:F6:12 (2 = /system script add dont-require-permissions=no name=script2 policy=1,2,3,ftp,reboot,read,write,policy,test,A,password,C,sniff,sensitive,F,romon,13 source=":global lastTime;\r\; \n:global currentSINR [ :toarray [ /log find message~\"lte1: rcvd RS-SINR\" ] ] ;\r\; \n:global currentLineCountSINR [ :len \$currentSINR ] ;\r\; \n:global

and

[admin@MikroTik] > /interface/lte/ at-chat lte1 input="AT^DEBUG?" output: RAT:LTE EARFCN(DL/UL): 1749/19749 BAND: 3 BW: 10.0 MHz PLMN: 260 02 TAC: 57063 eNB ID(PCI): 170831-14(226) ESM CAUSE: 0 EMM CAUSE: -1 DRX: 320ms RSRP: -120.5dBm rx_diversity: 3 (-125.2dBm,-119.8dBm,-256.0dBm,-256.0dBm) RSRQ: -13.8dB RSSI: -90.3dBm L2W: 0 RI: 1 CQI: 13 RS-SNR: 3dB STATUS: SRV/REGISTERED SUB STATUS: NORMAL_SERVICE RRC Status: CONNECTED SVC: CS_PS Tx Pwr: - TMSI: 30197243137 IP: 10.128.188.86 AVG RSRP: -120.5dBm OK

but when I run the script

[admin@MikroTik] /system/script> run script1 expected command name (line 106 column 41) [admin@MikroTik] /system/script>

arteee87 commented 3 weeks ago

Hi, you still haven't provided the contents of "script1". If you use the config.rsc from the main page, you should follow this order when running scripts: 1) system/script/run lte_info 2) system/script/run lte_log_parser 3) system/script/run http_push_lte_signal_info

arekjaskulski commented 3 weeks ago

[admin@MikroTik] > /system script print where name=script1 Flags: I - invalid 0 name="script1" owner="admin" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon dont-require-permissions=no run-count=0 source= /system logging add topics=async

   /system script
   add dont-require-permissions=yes name=lte_info owner=arteee87 policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/in lte at-chat [find where \
       name=lte1] input=\"AT^DEBUG\?\"\r\
       \n/in lte at-chat [find where name=lte1] input=\"AT^CA_INFO\?\""
   add dont-require-permissions=no name=lte_log_parser policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":global lastTime;\r\
       \n\r\
       \n:global currentSINR [ :toarray [ /log find message~\"lte1: rcvd RS-SINR\"  ] ] ;\r\
       \n:global currentLineCountSINR [ :len \$currentSINR ] ;\r\
       \n:global currentTime [ :totime [/log get [ :pick \$currentSINR (\$currentLineCountSINR -1) ] time   ] ];\r\
       \n\r\
       \n:global currentRSSI [ :toarray [ /log find message~\"lte1: rcvd RSSI\"  ] ] ;\r\
       \n:global currentLineCountRSSI [ :len \$currentRSSI ] ;\r\
       \n\r\
       \n:global currentRSRP [ :toarray [ /log find message~\"lte1: rcvd AVG RSRP\"  ] ] ;\r\
       \n:global currentLineCountRSRP [ :len \$currentRSRP ] ;\r\
       \n\r\
       \n:global currentRSRQ [ :toarray [ /log find message~\"lte1: rcvd RSRQ\"  ] ] ;\r\
       \n:global currentLineCountRSRQ [ :len \$currentRSRQ ] ;\r\
       \n\r\
       \n:global messageSINR \"\";\r\
       \n:global messageRSSI \"\";\r\
       \n:global messageRSRP \"\";\r\
       \n:global messageRSRQ \"\";\r\
       \n\r\
       \n:global valueSINR \"\";\r\
       \n:global valueRSSI \"\";\r\
       \n:global valueRSRP \"\";\r\
       \n:global valueRSRQ \"\";\r\
       \n\r\
       \n:if ( \$lastTime = \"\" ) do={\r\
       \n    :set lastTime \$currentTime ;\r\
       \n    :set messageSINR [/log get [ :pick \$currentSINR (\$currentLineCountSINR-1) ] message];\r\
       \n    :set messageRSSI [/log get [ :pick \$currentRSSI (\$currentLineCountRSSI-1) ] message];\r\
       \n    :set messageRSRP [/log get [ :pick \$currentRSRP (\$currentLineCountRSRP-1) ] message];\r\
       \n    :set messageRSRQ [/log get [ :pick \$currentRSRQ (\$currentLineCountRSRQ-1) ] message];\r\
       \n \r\
       \n} else={\r\
       \n    :if ( \$lastTime < \$currentTime ) do={\r\
       \n        :set lastTime \$currentTime ;\r\
       \n        :set messageSINR [/log get [ :pick \$currentSINR (\$currentLineCountSINR-1) ] message];\r\
       \n        :set messageRSSI [/log get [ :pick \$currentRSSI (\$currentLineCountRSSI-1) ] message];\r\
       \n        :set messageRSRP [/log get [ :pick \$currentRSRP (\$currentLineCountRSRP-1) ] message];\r\
       \n        :set messageRSRQ [/log get [ :pick \$currentRSRQ (\$currentLineCountRSRQ-1) ] message];\r\
       \n    }\r\
       \n}\r\
       \n\r\
       \n:if ([:len \$messageRSRP]=30) do={\r\
       \n    :set valueRSRP [:pick \$messageRSRP 21 27];\r\
       \n} else={\r\
       \n    :if ([:len \$messageRSRP]=29) do={\r\
       \n        :set valueRSRP [:pick \$messageRSRP 21 26];\r\
       \n    } else={\r\
       \n        :set valueRSRP \"(err)\";\r\
       \n    }\r\
       \n}"
   add dont-require-permissions=no name=http_push_lte_signal_info owner=arteee87 policy=\
       ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":global valueSINR;\r\
       \n:global valueRSSI;\r\
       \n:global valueRSRP;\r\
       \n:global valueRSRQ;\r\
       \n\r\
       \n:local pushdata \"<prtg><result><channel>RSRQ</channel><value>\$valueRSRQ</value><float>1</float><u\
       nit>custom</unit><customunit>dB</customunit></result><result><channel>RSRP</channel><value>\$valueRSR\
       P</value><float>1</float><unit>custom</unit><customunit>dBm</customunit></result><result><channel>RSS\
       I</channel><value>\$valueRSSI</value><float>1</float><unit>custom</unit><customunit>dBm</customunit><\
       /result><result><channel>SINR</channel><value>\$valueSINR</value><unit>custom</unit><customunit>dB</c\
       ustomunit></result></prtg>\";\r\
       \n\r\
       \n:local prtg \"PRTG PROBE IP:PORT";\r\
       \n:local token \"TOKEN FORM THE HTTP PUSH DATA ADVANCED SENSOR (USE HTTP GET)\";\r\
       \n\r\
       \n/tool fetch http-method=get url=\"\$prtg/\$token\?content=\$pushdata\" http-header-field=\"h1:appli\
       cation/x-www-form-urlencoded\""

/system scheduler add interval=15s name=lte_info on-event="/system/script/run lte_info" policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup add interval=30s name=lte_log_parser on-event="/system script run lte_log_parser" policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup add interval=1m name=send_lte_info on-event="/system script run http_push_lte_signal_info" policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup

arekjaskulski commented 3 weeks ago

Hello, is this the result you are looking for?

arteee87 commented 3 weeks ago

What you have in the "script1" is not a script, but a config file. Remove all the scripts you've created and do this: /import config.rsc

or

copy-paste the contents of config.rsc from the main page to the terminal

arekjaskulski commented 3 weeks ago

[admin@MikroTik] > /import config.rsc expected command name (line 106 column 41) [admin@MikroTik] >

arekjaskulski commented 3 weeks ago

look in script : currentSINR

I have it lte1: rcvd RS-SNR: 7dB

arekjaskulski commented 3 weeks ago

mikrotik

arteee87 commented 3 weeks ago

Try creating them manually - for "http_push_lte_signal_info", copy contents from here: https://github.com/arteee87/Get-LTE-signal-from-AT-command-mikrotik/blob/main/http_push_lte_signal_info.rsc

And for "lte_log_parser" - from here: https://github.com/arteee87/Get-LTE-signal-from-AT-command-mikrotik/blob/main/lte_log_parser.rsc

arteee87 commented 5 days ago

could not reproduce