mqtt-firebase-bridge
v1.0.4
Published
Bridge between mqtt and firebase
Downloads
9
Readme
mqtt-firebase-bridge
Bridge between Firebase and MQTT. It is compatible with npx usage and installable as global node module.
Sample usage
The application needs mqtt broker information. Visit mqtt's github page for full parameters setup.
npx mqtt-firebase-bridge -h mqtt.mybroker.dev
With this command, you'll post on your firebase database every mqtt message published on your broker on every topic to a corresponding firebase database node.
N.B.: you need to have your serviceaccount.json file in the
cwd
.
You can also specify the path to
serviceaccount.json
by using--sa
or--serviceaccount
npx mqtt-firebase-bridge -h mqtt.mybroker.dev --sa path/to/serviceaccount.json
Advanced usage
You can configure advanced mapping, choose what topics to subscribe to and what is the firebase database's destination node for every topic by configuring a config.json
file in cwd
or specifying its path via --config
, --cfg
or -c
.
npx mqtt-firebase-bridge -h mqtt.mybroker.dev --sa path/to/serviceaccount.json -c path/to/config.json
It is made of two sections:
- mqtt configuration
- topics configuration
In mqtt section you can set all the params needed by mqtt to subscribe.
In topics configuration, you put an array of objects containing:
- the topic to subscribe to
- the firebase database destination node
They can contain escaped tokens too. e.g.
{
"topics": [ {
"topic": "/abc/iot/{a}/{b}",
"dbNode": "abc_iot_{a}_{b}"
}, {
"topic": "/abc/iot/{a}/{b}"
}, {
"topic": "/abc/iot/{a}/103",
"dbNode": "{a}_103"
}, {
"topic": "/abc/iot/#",
"dbNode": "all"
} ]
}
Every token becomes a +
during the subscription.
More than one configuration topics can match and the data will be written in every node matched.
Mapping
Mapping can be performed by using json path. Each configuration node can be given the configuration of the final object that will be saved on the dbNode
.
"mapper": {
"timestamp": "$.timestamp",
"value": "$.data[0].value",
"constant": "valueConstant",
"numericConstant": 3,
"child": {
"key": "$.data[0].params.key",
"anotherKey": "$.data[1].anotherKey"
}
}
Full configuration example
{
"topics": [ {
"topic": "/abc/iot/{a}/{b}",
"dbNode": "abc_iot_{a}_{b}",
"mapper": {
"timestamp": "$.timestamp",
"value": "$.data[0].value",
"constant": "valueConstant",
"numericConstant": 3,
"child": {
"key": "$.data[0].params.key",
"anotherKey": "$.data[1].anotherKey"
}
}
}
]
}