This repository is a part of the HomeWSN project.
Whsnbg is a C implementation of the MQTT server(broker), the MQTT-SN gateway and simple MQTT rules engine designed for embedded platforms with small memory requirements (like OpenWrt).
MQTT server (broker):
- MQTT Protocol Specification Versions 3.1.0 and 3.1.1.
 - Both plain TCP and Websockets connections on the selectable IPv4 network interface.
 - SSL(TLS) encryption provided by the external library axTLS or OpenSSL.
 - QoS level 0, 1 and 2.
 - User authorization.
 - Remote MySQL database support for the specific topics.
 
MQTT-SN gateway:
- MQTT-SN Protocol Specification Version 1.2.
 - UDP connection on the selectable IPv4 network interface.
 - QoS level 0, 1 and 2.
 active,asleepandawakestates of the sensors.- Remote MySQL database support for the specific topics.
 
MQTT rules engine:
- Rules are stored in the specific rules topic (
$SYS/rulesengine/rules) and the external whsnbg.rules file. - Rules can be modified on the fly by publishing to this specific rules topic.
 - The rule set includes triggers (based on the cron or mqtt publish events), actions, conditions and the internal variables.
 
Download the latest release in tarball from github and untar it:
$ curl -L https://github.com/homewsn/whsnbg/archive/v1.4.tar.gz | tar zx
$ cd whsnbg-1.4Or you can also clone whsnbg repository:
$ git clone https://github.com/homewsn/whsnbg.git
$ cd whsnbgThen build possibly with options and install:
$ make
$ sudo make installConfigure the execution options:
$ sudo nano /usr/local/etc/whsnbg.confChange mqtt_iface from eth0 to the required network interface, for example enp0s3.
Change mqttsn_iface from eth0 to the required network interface, for example enp0s3 or sl0 etc.
You can always find out the network interfaces by running  $ ifconfig.
Download the latest release in zip from github and unzip it. Open the MSVS 2010 solution, build and run whsnbg.exe file.
- Install OpenWrt buildroot.
 - Add the following line to the 
feeds.conf.defaultin the OpenWrt buildroot: 
src-git homewsn https://github.com/homewsn/homewsn.openwrt.packages.git
- This feed should be included and enabled by default in the OpenWrt buildroot. To install all its package definitions, run:
 
$ ./scripts/feeds update homewsn
$ ./scripts/feeds install -a -p homewsn- The packages should now appear in menuconfig. You can find and select whsnbg in the Network menu.
 - Exit and save new configuration, then compile the package:
 
$ make package/whsnbg/compile V=99Build options can be set on the command line with the make command, for example:
$ make DAEMON_VERSION=1 DETAILED_LOG=1| Option | Description | 
|---|---|
| DAEMON_VERSION=1 | Builds the daemon version | 
| DETAILED_LOG=1 | Enables detailed debug log | 
| RULES_ENGINE=1 | Enables rules engine thread | 
| WITH_DEBUG=1 | Adds GDB debug support | 
| TLS_LIB_AXTLS=1 | Enables TLS support by axTLS library | 
| TLS_LIB_OPENSSL=1 | Enables TLS support by OpenSSL library | 
| SENSOR_DATA_DECODING=1 | Enables automatic decoding of the MQTT-SN message payload from the sensors | 
| SENSOR_DATA_STORING=1 | Enables storing decoded data from the sensors in the MySQL database | 
| MQTT_DATA_STORING=1 | Enables storing payload from the specific MQTT topics in the MySQL database | 
| STATIC_LINK=1 | Builds the static link version | 
Build options should be set manually in the config.h file, for example:
// Windows
// ** Manually configure ** >>>>>
#define USE_TLS_LIBRARY			// use external TLS library
// TLS library
#define OPENSSL_LIBRARY		// OpenSSL
//#define AXTLS_LIBRARY			// axTLS
//#define SSL_LIBRARY_HEADERS	// TLS library headers
...
// <<<<< ** Manually configure **$ make menuconfigThen find Network -> whsnbg and press Enter. Configure options, setting to <*> or < >.
The execution configuration is in res/whsnbg.conf file (Winodws) or /usr/local/etc/whsnbg.conf (Linux) by default. For Linux please make sure that you specify the correct mqtt_iface and mqttsn_iface parameters (they do not matter for Windows only). If incorrect interfaces are specified, then the program will end immediately.
# name = value
# maximum name length is 32 bytes
# maximum value length is 64 bytes
# MQTT section (tcp ports)
mqtt_iface = eth0
mqtt_port = 1883
mqtt_tls_port = 8883
mqtt_ws_port = 8082
mqtt_ws_tls_port = 8081
# MQTT-SN section (udp port)
mqttsn_iface = eth0
mqttsn_port = 1883
# MySQL section (remote MySQL database)
mysql_enable = 0
mysql_server = 192.168.0.213
mysql_user = whsnbg
mysql_password = some_pass
mysql_database = homewsn
mysql_port = 3306
# MQTT users section
mqtt_auth_enable = 0
user_name = name1
user_password = password1
user_publish_enable = 1
user_name = name2
user_password = password2
user_publish_enable = 0
- If you enable TSL support please be sure you have installed the appropriate library (axTLS or OpenSSL).
 - If you enable storing payload in the MySQL database you will need MySQL client library.