Community discussions

MikroTik App
 
DuncanCT
newbie
Topic Author
Posts: 28
Joined: Thu May 24, 2018 1:28 pm

KNOT MQTT Modbus Messaging

Tue Feb 01, 2022 11:41 am

I have modbus on the KNOT working with this example code...
{:local output [/iot modbus read-holding-registers slave-id=1 reg-addr=1 num-regs=2 as-value once];:put [($output->"values")]}

And MQTT working with example code...
# Required packages: iot

################################ Configuration ################################
# Name of an existing MQTT broker that should be used for publishing
:local broker "AWS"

# MQTT topic where the message should be published
:local topic "my/test/topic"

#################################### System ###################################
:put ("[*] Gathering system info...")
:local cpuLoad [/system resource get cpu-load]
:local freeMemory [/system resource get free-memory]
:local usedMemory ([/system resource get total-memory] - $freeMemory)
:local rosVersion [/system package get value-name=version \
    [/system package find where name ~ "^routeros"]]
:local model [/system routerboard get value-name=model]
:local serialNumber [/system routerboard get value-name=serial-number]
:local upTime [/system resource get uptime]

#################################### MQTT #####################################
:local message \
    "{\"model\":\"$model\",\
                \"sn\":\"$serialNumber\",\
                \"ros\":\"$rosVersion\",\
                \"cpu\":$cpuLoad,\
                \"umem\":$usedMemory,\
                \"fmem\":$freeMemory,\
                \"uptime\":\"$upTime\"}"

:log info "$message";
:put ("[*] Total message size: $[:len $message] bytes")
:put ("[*] Sending message to MQTT broker...")
/iot mqtt publish broker=$broker topic=$topic message=$message
:put ("[*] Done")

Now I am trying to combine the two...
# Required packages: iot

################################ Configuration ################################
# Name of an existing MQTT broker that should be used for publishing
:local broker "AWS"

# MQTT topic where the message should be published
:local topic "my/test/topic"

#################################### System ###################################
:put ("[*] Gathering system info...")
:local cpuLoad [/system resource get cpu-load]
:local freeMemory [/system resource get free-memory]
:local usedMemory ([/system resource get total-memory] - $freeMemory)
:local rosVersion [/system package get value-name=version \
    [/system package find where name ~ "^routeros"]]
:local model [/system routerboard get value-name=model]
:local serialNumber [/system routerboard get value-name=serial-number]
:local upTime [/system resource get uptime]

:local voltage [/iot modbus read-holding-registers slave-id=1 reg-addr=1 num-regs=2 as-value once]

#################################### MQTT #####################################
:local message \
    "{\"model\":\"$model\",\
                \"sn\":\"$serialNumber\",\
                \"ros\":\"$rosVersion\",\
                \"cpu\":$cpuLoad,\
                \"umem\":$usedMemory,\
                \"fmem\":$freeMemory,\
                \"uptime\":\"$upTime\",\
                \"volatge\":\"$voltage\"}"

:log info "$message";
:put ("[*] Total message size: $[:len $message] bytes")
:put ("[*] Sending message to MQTT broker...")
/iot mqtt publish broker=$broker topic=$topic message=$message
:put ("[*] Done")

Assume i've gone wrong somewhere here?
:local voltage [/iot modbus read-holding-registers slave-id=1 reg-addr=1 num-regs=2 as-value once]

Any assistance appreciated.
 
denissMT
MikroTik Support
MikroTik Support
Posts: 49
Joined: Wed May 26, 2021 12:00 pm

Re: KNOT MQTT Modbus Messaging

Thu Mar 03, 2022 4:38 pm

It would look something like this:

:local modbusread [/iot modbus read-holding-registers slave-id=0x03 num-regs=0x1 reg-addr=0x0 as-value once]
:local modbus [:put [($modbusread->"values")]]

#################################### MQTT #####################################
:local message \
"{\"AnalogOutputHoldingRegister\":\"$modbus\"}"
 
sjfp
just joined
Posts: 7
Joined: Fri Mar 04, 2022 2:10 pm

Re: KNOT MQTT Modbus Messaging

Fri Mar 04, 2022 4:37 pm

Using the script of Modbus to MQTT, how can I get the results of 20 meters (address 1 to 20) and have this run every 30 seconds
 
denissMT
MikroTik Support
MikroTik Support
Posts: 49
Joined: Wed May 26, 2021 12:00 pm

Re: KNOT MQTT Modbus Messaging

Wed Mar 16, 2022 3:13 pm

Create different variables for each address and set up the scheduler (to run the script whenever you like).

Who is online

Users browsing this forum: Bing [Bot], merlinthemagic7 and 13 guests