Wiliot is an Internet of Things company that is known for their IoT Pixels (labels) amongst other solutions. The great benefit of the pixel is that it is battery free and label size (compact) Bluetooth "tag" (that broadcasts Bluetooth beacons with telemetry data).

  • To power the IoT Pixel, you need a bridge ("energizer") device. It provides "energy" over radio-waves and powers the IoT pixels from a distance.
  • To forward IoT Pixel's data to the server ("dashboard"), you need a gateway device. It establishes the connection with the server using a TCP/IP connection, and forwards label's payloads that contain sensor's data (like temperature).

Both operation modes can be performed by a single device, or by separate devices.

Introduction

RouterOS allows the usage of Wiliot gateway and bridge modes on devices that have Bluetooth support.

Wiliot gateway mode is responsible for establishing the connection with the MQTT server (by registering the gateway through the API, obtaining required tokes and credentials, and authorizing the device). It is also responsible for forwarding Pixel's Bluetooth payloads that it captures over the air via established MQTT connection, and for relaying additional commands it might get from the subscribed MQTT topic via Bluetooth advertising.

Wiliot bridge mode is responsible for providing energy over the frequency and keeping the IoT Pixels powered.

bridge mode is not implemented yet.

Step by step

Step by step requires two quick steps:

  1. To register the device and activate the MikroTik board;
  2. To set up IoT Pixels.

Step #1, Gateway Registration

On the Wiliot portal:

  • 2. Select "Gateway Registration".
  • 3. Select "Manual input" (top right corner of the screen).
  • 4. Enter "Gateway ID".

You can copy "Gateway ID" from the RouterOS settings (gateway-id field):

[admin@MikroTik] > /iot wiliot configuration print
                  status: inactive                
              gateway-id: XXXXXXXXX          
                    type: mikrotik-knot-embedded
                   owner: xxxx              
               spoof-gps: xx                   
                     lat: xx                    
                    long: xx                    
  token-refresh-handicap: 3600                  
                  server: Wiliot US East        
                 scanner: bt1                   
              advertiser: bt1                   
                   wi-fi: none                  
                features: gateway  


In the RouterOS:

You can navigate the settings using different tools. The advised way of management is by using Winbox software. Download the tool using this link and run it. Connect your PC with an "ethernet" cable to any port beginning with ether2+ (avoid using ether1 as, in most cases, it is configured as a WAN port and is restricted by the firewall, while the rest of the ports are LAN ports with open access and DHCP-server enabled), or connect using Wi-Fi (if the board has Wi-Fi chip).

In Winbox, navigate to the "Neighbors" tab (Select from: Neighbors), find the MAC-address of your MikroTik board (which is printed on the label on the device), click on the MAC-address, enter login credentials (also printed on the label) and "connect" to it.

From here, you can use "GUI" or "CLI" commands. The guide shows "CLI" command examples, which you can run by opening "New Terminal" from the Winbox options. However, the exact same sections and tabs are available in GUI as well. For example, if the command is shown as "/iot wiliot enable", go to IoT→ Wiliot tab and click on the "enable" button.

  • 1. Enable "wiliot" functionality:
[admin@MikroTik] > /iot wiliot enable
  • 2. Confirm, that the device successfully obtained token, authorized and connected to the MQTT server with the "active" status (status: active):
[admin@MikroTik] > /iot wiliot configuration print
                  status: active                  
              gateway-id: XXXXXXXXX           
                    type: mikrotik-knot-embedded
                   owner: xxxx              
  token-refresh-handicap: 3600                  
                  server: Wiliot US East        
                 scanner: bt1                   
              advertiser: bt1                   
                   wi-fi: none                  
                features: gateway               

 Gateway status should change from "pre-registered" to "approved" (or/and to "online") on the Wiliot platform → https://platform.wiliot.com/edge/gateways

Step #2, Adding IoT Pixel (label)

On the Wiliot portal:

  • 1. Login to the Wiliot platform and navigate to the "Category" tab → https://platform.wiliot.com/categories. Add a new "Category" ("Add new"). Name it and select a required category type.
  • 2. Navigate to the "Pixels" tab → https://platform.wiliot.com/edge/pixels. Check the "ID" of your label. Labels should be already assigned to your account.
  • 3. Go to "Assets" tab → https://platform.wiliot.com/assets. Create a new asset ("Add New"). Select/link the asset to the previously created "Category", enter "Asset ID" (or generate a random one) and select pixel's ID from the list.
  • 4. By clicking on the created "asset" entry (once the label is energized and gateway is ready), you will be able to see label's readings (temperature, etc..)

RouterOS settings

Sub-menu: /iot wiliot

noteiot package is required.

PropertyDescription
configurationGeneral Wiliot gateway/bridge settings.
serversMQTT server configuration.
bluetooth trafficBluetooth traffic menu.
mqtt trafficMQTT traffic menu.

Configuration (General options)

To enable the configuration, use the command:

/iot/wiliot/enable

To disable it:

/iot/wiliot/disable

To clear (purge) MQTT connection/authentication data (only usable when "disabled"):

/iot/wiliot/disable
/iot/wiliot/clear

After "clearing" the configuration, you will have to delete the gateway (https://platform.wiliot.com/edge/gateways) and re-register the gateway anew (https://deployment-tool.wiliot.com/).

Configuration properties can be applied using "set" command (only usable when "disabled"):

/iot/wiliot/set

Example:

/iot/wiliot/set features=gateway
PropertyDescription
advertiser (Default: bt1)Select Bluetooth interface which will be used for advertising (relaying commands obtained from the MQTT server).
scanner (Default: bt1)Select Bluetooth interface which will be used for scanning (capturing Pixel's payloads).
spoof-gps (yes | no; Default: no)Choose whether to use manual GPS coordinates, which are going to be delivered to the server.
lat (Default: )Set GPS latitude value to be included during connection with the server when using "spoof-gps".
lon (Default: )
Set GPS longitude value to be included during connection with the server when using "spoof-gps".

features (gateway | bridge ; Default: )

Select a role for the device:

  • gateway. In this mode, the device establishes MQTT connection with the server and forward scanner's captured IoT Pixel beacons to it. It also advertises commands to the nearby bridges received from the subscribed topic.
  • bridge. In this mode, the device energizes surrounding IoT Pixel's (powering them up).

bridge mode is not implemented yet.

server (Default: )

Set the server for the MQTT connection.

Servers

To change MQTT server's settings:

PropertyDescription
address (Default: )IP/domain name address of the MQTT server.
certificate (Default: )Specify certificate to be used for the SSL MQTT connection if required by the server.
name (Default: )Server's name.
port (Default: )TCP port used by the MQTT server.
ssl (yes | no; Default: )
To enable SSL communication with the server.

Bluetooth traffic

Displays nearby IoT Pixel raw data:

/iot/wiliot/traffic/print 
Columns: TIME, ADDRESS, RSSI, PAYLOAD
 #  TIME        ADDRESS            RSSI    PAYLOAD                                                                                     
 0  2026-01-07  E9:B7:32:XX:XX:XX  -34dBm  1E 16 C6 FC 03 00 7C 7B 3C 22 0E D8 54 38 B0 03 E0 DA 8C 06 36 B4 CF AC 8A D6 76 54 BD FC B9
    14:23:26                                                                                                                           
 1  2026-01-07  E9:B7:32:XX:XX:XX  -41dBm  1E 16 C6 FC 03 00 3C DB 7D 72 BF A0 C1 62 9C 5F B6 D5 90 00 C1 62 BF 68 EC E5 64 02 63 F9 C3
    14:23:26                                                                                                                           
 2  2026-01-07  E9:B7:32:XX:XX:XX  -42dBm  1E 16 C6 FC 03 00 3C A8 3B 27 17 25 BC 6D 01 F5 49 E1 98 03 CA 3C 64 04 30 B2 E1 86 FC 80 CB
    14:23:28                                                                                                                           
 3  2026-01-07  E9:B7:32:XX:XX:XX  -33dBm  1E 16 C6 FC 03 00 3C F5 AF 22 CC E2 60 FA BC 4E 57 F7 8C 01 80 6A 21 EF 82 CB 62 2A 16 5A 3F
    14:23:29                                                                                                                           
 4  2026-01-07  E9:B7:32:XX:XX:XX  -33dBm  1E 16 C6 FC 03 00 3C FC AC 9A 1B 9A BD 2C DE B7 02 FF 7C 03 C7 28 BD AB 20 1B 91 89 B9 ED 88

MQTT traffic

Displays MQTT traffic:

/iot/wiliot/mqtt-traffic/print
   time: 2026-03-02                                                                                                                      >
         07:37:43                                                                                                                        >
  topic: update/mikrotik/XXXXXXXXXXX                                                                                                     >
   data: {"txPacket":"1E16C6FC0000ED070C3443B7D39DE2CE08993D7F40B2F56B822096AA19CD00","txMaxRetries":8,"txMaxDurationMs":700,"action":0} >

Debugging

You can enable "wiliot" debug logging, using the command:

/system logging
add topics=wiliot

As a result, you should see more detailed entries in the logs (/log print command):

 2026-02-12 12:04:54 wiliot,debug [CFG] authorizing...
 2026-02-12 12:04:54 wiliot,debug [CFG] authorization complete
 2026-02-12 12:04:54 wiliot,debug [CFG] registering...
 2026-02-12 12:04:55 wiliot,debug [CFG] registration complete
 2026-02-12 12:04:55 wiliot,debug [CFG] polling for token...
 2026-02-12 12:04:55 wiliot,debug [CFG] token obtained
 2026-02-12 12:04:55 wiliot,debug [CFG] ownerId
 2026-02-12 12:04:55 wiliot,debug [CFG] authorization complete
 2026-02-12 12:04:55 wiliot,debug [CFG] updating MQTT credentials
 2026-02-12 12:04:56 wiliot,debug [CFG] MQTT credentials updated
 2026-02-12 12:04:56 wiliot,debug [CFG] connecting to MQTT server
 2026-02-12 12:04:56 wiliot,debug [CFG] subscribing to BLE advertaisments
 2026-02-12 12:04:56 wiliot,debug [CFG] active

Certificates

Wiliot functionality initiates HTTP posts using /tool fetch and establishes MQTT connection using /mqtt. Both HTTP and MQTT require SSL certificates. RouterOS has a "builtin trust store" which contains all the required certificates from the get-go.

By default, "all" services should be allowed to use built-in certificate store, so you do not have to do anything. However, if you decide to restrict that (if you decide not to allow "all" services to have access to the "store"), for "wiliot" to work, you need to enable "wiliot", "mqtt" and "fetch" services (or disable builtin-trust-store and upload certificates manually):

[admin@MikroTik] > /certificate settings print
  builtin-trust-store: fetch                    
                       mqtt                      
                       wiliot                     
         crl-download: no    
              crl-use: no    
            crl-store: ram 


  • No labels