The web is full of fantastic UNIHIKER examples and tutorials, but many are designed more for controlled environments than for real-world applications. This project aims to bridge that gap by guiding you through using UNIHIKER with MQTT to set up and configure a IoT smart home environment. You’ll learn practical techniques that bring IoT closer to everyday use, showing you how to turn ideas into hands-on solutions for a connected home.
The great thing about this project is that it requires no coding or development skills! All you need to do, is some basic configuration, and I’ll guide you through each step in detail.
The goal of this project is to set up UNIHIKER as an MQTT Broker using Mosquitto, allowing seamless communication and control of smart devices in a home environment. We’ll be working with devices like the "Shelly Duo - RGBW" smart bulb and the "Shelly Plug S Gen3" smart plug, which can be operated directly from your mobile device (Android or iPhone) through the "IoT MQTT Panel" app — a free, user-friendly option for mobile MQTT control.
While Shelly devices offer a range of advanced features, I will keep it straightforward: we’ll focus on turning devices on and off remotely via the mobile app. By the end of this project, you’ll have a robust foundation for setting up and managing IoT devices in a smart home, all powered by MQTT communication with UNIHIKER as the hub.
All devices used must be on the same WLAN (UNIHIKER, Shelly devices and your mobile)! In addition, Internet connection is required to install Mosquitto on UNIHIKER and to update Shelly devices with latest Firmware.
However, this guide will not go into this important point in depth. You can do this without any additional help!
UNIHIKER includes a basic built-in IoT service, but it lacks the advanced features required for this project. To enable the necessary functionality, we’ll use Eclipse Mosquitto as our MQTT broker. Before installing Mosquitto, make sure to disable the existing SioT service to avoid any conflicts.
Disable SIoT on UNIHIKER
You can disable the SIoT service via different options. One option is done directly via the UNIHIKER touchscreen and the other via the web interface.
SSH connection and installation
To install and configure mosquitto, you need to connect via SSH into UNIHIKER from a local device. If you haven't changed something, the user is "root" and the password is "dfrobot".
# establish an SSH connection (from local device to UNIHIKER)
$ ssh [email protected]
As soon the SSH connection is successfully done, you can install the required Mosquitto packages on UNIHIKER via the package manager "apt".
# update repositories and install latest packages
$ apt update && apt upgrade -y
# install required package
$ apt install -y mosquitto
# install optional packages (optional)
$ apt install -y vim tree mosquitto-clients
# start mosquitto service after boot
$ systemctl enable mosquitto.service
# get service status (optional)
$ systemctl status mosquitto.service
Done! Please don't close the SSH connection.
If the installation was successful, Mosquitto should already be running, but without any protection. Let's change that right now!
# stop mosquitto
$ systemctl stop mosquitto.service
# create empty mosquitto configuration file
$ touch /etc/mosquitto/conf.d/secure.conf
# create empty mosquitto passwd file
$ touch /etc/mosquitto/mqttpasswd
# create empty mosquitto acl file
$ touch /etc/mosquitto/user.acl
# verify mosquitto folders and files (optional)
$ tree /etc/mosquitto/
/etc/mosquitto/
├── ca_certificates
│ └── README
├── certs
│ └── README
├── conf.d
│ ├── README
│ └── secure.conf
├── mosquitto.conf
├── mqttpasswd
└── user.acl
Now use your favorite text editor and add following content into the files. The example will make use of "vim".
secure.conf
# edit file secure.conf
$ vim /etc/mosquitto/conf.d/secure.conf
listener 1883
allow_anonymous false
password_file /etc/mosquitto/mqttpasswd
acl_file /etc/mosquitto/user.acl
listener 1883 - specifies that Mosquitto will listen for MQTT connections on port 1883 (standard port for MQTT communication).
allow_anonymous false - Setting allow_anonymous to false requires all clients to authenticate before connecting. This enhances security by preventing unauthorized access.
password_file /etc/mosquitto/mqttpasswd - This directive points Mosquitto to a password file, where we’ll store usernames and passwords for clients allowed to connect.
acl_file /etc/mosquitto/user.acl - The acl_file specifies an Access Control List (ACL) that defines permissions for each user, such as which topics they can publish or subscribe to.
mqttpasswd
# edit file mqttpasswd
$ vim /etc/mosquitto/mqttpasswd
admin:test123
shelly_bulb:test456
shelly_plug:456test
mobile:test789
The users and passwords are defined in plain text in this step. The passwords will be hashed later.
admin - Will be used for "MQTT Explorer"
shelly_bulb - Will be used for "Shelly Duo - RGBW"
shelly_plug - Will be used for "Shelly Plug S Gen3 White"
mobile - Will be used for "IoT MQTT Panel"
user.acl
At this point we have a “chicken/egg” problem. The following configuration requires information that we previously need from the Shelly devices.
You have to go to the Shelly plug web interfaces and note this information. In the example I show my information and configuration, please adapt "shellyplusplugs-e86beaeab358" to your environment!
Note: Your MQTT prefix will be different!
# edit file user.acl
$ vim /etc/mosquitto/user.acl
user admin
topic readwrite #
topic read $SYS/#
user shelly_bulb
topic readwrite shellies/#
user shelly_plug
topic readwrite shellyplusplugs-e86beaeab358/#
user mobile
topic read shellies/+/light/+/power
topic write shellies/+/color/+/command
topic write shellyplusplugs-e86beaeab358/rpc
pattern write $SYS/broker/connection/%c/state
In the configuration we have defined few users (admin, shelly_bulb, shelly_plug and mobile) with topics they can subscribe (read) and publish (write). To make it a bit simpler, we are using MQTT Wildcards (like + and #). The single-level wildcard is represented by the plus symbol. The multi-level wildcard covers multiple topic levels. It is represented by the hash symbol.
Now we convert the plain text passwords into hashed values. Execute this command only one time! It does not detect whether passwords are already hashed, so using it on a password file that already contains hashed passwords will generate new hashes based on the old hashes and render the password file unusable.
# convert plain text to use hashed passwords
$ mosquitto_passwd -U /etc/mosquitto/mqttpasswd
# verify file (optional)
$ cat /etc/mosquitto/mqttpasswd
Mostly done! Let's finish the configuration and start mosquitto.
# change file permissions
$ chmod 0640 /etc/mosquitto/mqttpasswd
$ chmod 0640 /etc/mosquitto/user.acl
# start mosquitto service
$ systemctl start mosquitto.service
# get service status (optional)
$ systemctl status mosquitto.service
If the MQTT broker is running on the UNIHIKER, we can start to connect the Shelly devices. The easiest way to do this step is via the respective web interfaces. You can access these web interfaces in the browser with the URL http://[IP address]. Here are the examples of my configuration.
Shelly Duo - RGBW
Note: The IP address used in the picture will be different for you! Reboot the device after saving the configuration.
Shelly Plug S Gen3 White
Note: The IP address used in the picture will be different for you! Reboot the device after saving the configuration.
MQTT Explorer
For testing and debugging you can install "MQTT Explorer" on your computer. Use the connection credentials of the user “admin” here!
After a few seconds you should see information about the broker itself and the respective topics.
Note: If you cannot see anything, check your network and Mosquitto configurations and if Mosquitto is running.
Now we use the free version of “IoT MQTT Panel” to control the Shelly devices and to display information. Please install the app and create a connection to the broker (UNIHIKER) on the same WiFi.
Note: The IP address used in the picture will be different for you!
Now create a new Dashboard with the connection and start to create the panels.
Plug Power Switch
The plug uses RPC topic and JSON payload for ON/OFF.
# power on
{
"method": "Switch.Set",
"params": {
"id": 0,
"on": true
}
}
#power off
{
"method": "Switch.Set",
"params": {
"id": 0,
"on": false
}
}
Bulb Power Switch
Bulb Watt Arc
Final Dashboard
MQTT is widely used for IoT because of its lightweight messaging protocol, ideal for remote connections where bandwidth may be limited. UNIHIKER is a great device to act as the MQTT Broker, centralizing the control and communication of IoT devices in your smart home setup.
Consider expanding beyond Shelly devices to integrate a variety of smart home products, such as temperature sensors, motion detectors, or smart door locks. Many IoT devices support MQTT and can be added to the same network, enhancing your smart home’s capabilities.