Hands-On MQTT Usage
Background
Although the heartbeat system used in MESHdesk / APdesk allows for remote command execution there might be situations where you need the immediate command execution.
Security is a big thing where I stay and with this hands on lab we will see how to make use of the MQTT implementation to switch outdoor lights remotely on and off using one of the mesh nodes' GPIOs
For this lab we have:
MESHdesk allows you to manage hardware from various vendors in one mesh network.
In this mesh network we have Xiaomi which are Mediatek based and currently sold in many places.
We also have Dragino which are Atheros based and have been on the market for more than a decade.
GPIO Pins of Dragino MS14
Dragino | Arduino | Comment |
GPIO19 | In1 | Driving the relay to the garage light |
GPIO21 | In2 | Driving the relay to the backyard light |
GPIO18 | In3 | Driving the relay to the driveway light |
GPIO24 | In4 | Extra for future expansion |
3.3v | Vcc | Use the 3.3V since the 5V is to high for the GPIO pin output to trigger a low / high |
GND | Gnd | |
GPIO Helper Scripts
The latest version of the MESHdesk firmware includes the following folder /etc/MESHdesk/gpio_utils.
There we will keep helper scripts for GPIO management.
The following is currently there:
If we want to set GPIO 18 on the Dragino we can issue the following /etc/MEHdesk/gpio_utils/gpio_set_clear.sh 18 1.
To clear it /etc/MEHdesk/gpio_utils/gpio_set_clear.sh 18 0.
If we want to flash (on-off) GPIO 18 a couple of times: /etc/MEHdesk/gpio_utils/gpio_flash.sh 18 15
The default on-off transition is with one second intervals. There is an optional parameter where you can set the interval in seconds.
/etc/MEHdesk/gpio_utils/gpio_flash.sh 18 15 30 will increase the transition interval to 30 seconds.
Now that we have our mapping and know about our helper scripts we can bring it together in RADIUSdesk to create predefined commands which we can use on our Dragino.
Predefined Commands
Note that we did not make those commands available to sub-providers. This way we can keep certain predefined commands private to an access provider.
These commands can now be used when defining schedules e.g. if you want to set the lights on and off on certain times or when you want to send the command to the mesh node or access point immediately.
Since this is a page about hands on work we end with a demonstration video showing things in action.
In action video