Serverless plugin that emulates AWS IoT service. Manages topic subscriptions, lifecycle events, thing shadow management and rule engine with limited SQL syntax support.
Redis installed.
Serverless framework 1.x
Add serverless-iot-offline to your project:
npm install --save-dev serverless-iot-offline
Then inside yur serverless.yml
file add following entry to the plugins section: serverless-iot-offline
. If there is no plugin section you will need to add it to the file.
Example:
plugins:
- serverless-iot-offline
or if you are using serverless-offline
plugin:
plugins:
- serverless-iot-offline
- serverless-offline
Make sure redis-server
is started.
If you are using serverless-offline
you can run:
sls offline start
Otherwise run:
sls iot start
CLI options:
--port -p # Port to listen on. Default: 1883
--httpPort -h # Port for WebSocket connections. Default: 1884
--noStart -n # Prevent Iot broker (Mosca MQTT brorker) from being started (if you already have one)
--skipCacheValidation -c # Tells the plugin to skip require cache invalidation. A script reloading tool like Nodemon might then be needed (same as serverless-offline)
Above options could be added through serverless.yml
file:
custom:
iot:
start:
port: 1880
redis:
host: 'localhost'
port: 6379
db: 12
# path to initial shadows
# it is used to seed redis database with preconfigured shadows
shadows: ./shadows.json
Example of shadows.json
file which will seed redis with 2 shadows:
{
"thingName1": {
"state": {
"reported": {
"some_prop": "hello"
}
}
},
"thingName2": {
"state": {
"reported": {}
}
}
}
Local implementation of AWS IoT service has a minimum of SQL syntax support and primarily we need help with that.
To get a better understanding of what SQL syntax we are supporting see documentation and testData.js file.
Checkout contributing guidelines.
This plugin was inspired by Tradle's serverless-iot-local project
MIT