This SensorBox Data Decoder implementation is dedicated to be used as custom payload decoder add-on in MQTT.fx.
See also: addon-commons and mqttfx-payload-decoders.
The SensorBox Data Decoder decodes Google Protocol Buffers
encoded payload based on proto/sensorboxdata.proto
syntax = "proto3";
package sensorboxdata;
option java_package = "de.jensd.proto";
option java_outer_classname = "SensorBoxData";
message SensorData {
string id = 1;
string name = 2;
string description = 3;
uint64 time = 4;
double value = 5;
string unit = 6;
}
message SensorBoxData {
string id = 1;
string name = 2;
string description = 3;
repeated SensorData sensorData = 4;
}
Decoded payload looks like this in human readable format:
id............: lvgro-box-1
name..........: living-room
description...: The sensorbox of the living-room
id............: lvgro-tmp-1
name..........: Temperature
description...: Temperature of the living-room
time..........: 2017-04-05T18:20:10.061
value.........: 21.3
unit..........: Celsius
id............: lvgro-hum-1
name..........: Humidity
description...: Humidity of the living-room
time..........: 2017-04-05T18:20:10.061
value.........: 55.3
unit..........: %
This project includes the sbt-protoc plugin.
The proto case classes are created at ../target/scala-2.11/src_managed/main
.
sbt assembly
creates a FatJar at
../target/scala-2.11/sensorbox-data-decoder-assembly-1.0.jar
Copy this package into the "addons"
directory of MQTT.fx:
OS | Add-on location |
---|---|
Mac OSX | [USER_HOME]/Library/Application Support/MQTT-FX/addons |
Windows | [USER_HOME]\AppData\Local\MQTT-FX\addons |
Linux | [USER_HOME]/MQTT-FX/addons |
MQTT.fx will find the Decoder during next start. Have a look at About / Add-ons to verfigy MQTT.fx has loaded the decoder:
sbt run
Runs a Publisher to publish 10 MQTT messages with sensorboxdata.proto encoded payload.
A per default it connects to Broker URL tcp://localhost:1883
. Messages are published to topic sensorboxdata/demo
:
----------------------------------------------------------------------
Publishing 10 MQTT messages with sensorboxdata.proto encoded payload
----------------------------------------------------------------------
Topic ........ : sensorboxdata/demo
Broker URL ... : tcp://localhost:1883
[START]
Connecting to tcp://localhost:1883... OK
Message #1 published to sensorboxdata/demo
Message #2 published to sensorboxdata/demo
Message #3 published to sensorboxdata/demo
Message #4 published to sensorboxdata/demo
Message #5 published to sensorboxdata/demo
Message #6 published to sensorboxdata/demo
Message #7 published to sensorboxdata/demo
Message #8 published to sensorboxdata/demo
Message #9 published to sensorboxdata/demo
Message #10 published to sensorboxdata/demoDisconnected
[DONE]
Meanwhile at MQTT.fx... note the choosen payload decoder at the bottom:
To connect to a specific broker pass <name>/<ip>:<port>
to the 'run'
task:
sbt "run 192.168.0.61:1883"
Additionally you can set a certain topic as 2nd argument:
sbt "run 192.168.0.61:1883 proto/demo"