Skip to content

Instantly share code, notes, and snippets.

@dexterlabora
dexterlabora / PalaceCinema-Node-RED.json
Created May 31, 2016 11:07
Node-RED flow to demonstrate controlling two different strands of addressable LEDs for a cinema. More info: www.InternetOfLEGO.com
[{"id":"6693c500.996c3c","type":"ui_tab","z":"","name":"IoL","icon":"dashboard","order":"1"},{"id":"7167a6c3.61f5c8","type":"inject","z":"bbcb5e8d.ab303","name":"Marquee Rainbow","topic":"","payload":"https://iot.seeed.cc/v1/node/GroveLedWs2812D1/start_rainbow_flow/7/25/9?access_token=[yourtoken]","payloadType":"str","repeat":"","crontab":"","once":true,"x":150,"y":120,"wires":[["76ab58cc.d20528"]]},{"id":"71802f0d.9e035","type":"http request","z":"bbcb5e8d.ab303","name":"[post] GroveLedWs2812D1","method":"POST","ret":"txt","url":"","x":540,"y":160,"wires":[["a4a79d6a.f3b34"]]},{"id":"a4a79d6a.f3b34","type":"debug","z":"bbcb5e8d.ab303","name":"Marquee Lights","active":true,"console":"false","complete":"payload","x":760,"y":200,"wires":[]},{"id":"c0f8746c.609bc8","type":"inject","z":"bbcb5e8d.ab303","name":"Roof Rainbow","topic":"","payload":"https://iot.seeed.cc/v1/node/GroveLedWs2812D2/start_rainbow_flow/7/25/4?access_token=[yourtoken]","payloadType":"str","repeat":"","crontab":"","once":true,"x":130,"y":300
@dexterlabora
dexterlabora / merakiCMXSampleFlow.json
Created July 27, 2016 09:50
A Cisco Meraki CMX sample flow for Node-RED.
[{"id":"63f92812.0db518","type":"switch","z":"7e446509.34277c","name":"Search Clients","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"Apple","vt":"str"},{"t":"cont","v":"00:26:ab:b8:a9:a5","vt":"str"}],"checkall":"true","outputs":2,"x":140,"y":160,"wires":[["d9c66fc1.8e415"],["d06f6538.11dd78"]]},{"id":"5945d3d6.15f76c","type":"debug","z":"7e446509.34277c","name":"Apple Device Found!","active":true,"console":"false","complete":"payload","x":600,"y":160,"wires":[]},{"id":"d9c66fc1.8e415","type":"function","z":"7e446509.34277c","name":"Apple device found!","func":"msg.payload = \"Apple device found!\"\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":160,"wires":[["5945d3d6.15f76c"]]},{"id":"4cc8a088.2fccb","type":"file","z":"7e446509.34277c","name":"","filename":"logs/cmx.log","appendNewline":true,"createDir":true,"overwriteFile":"false","x":630,"y":100,"wires":[]},{"id":"d06f6538.11dd78","type":"trigger","z":"7e446509.34277c","op1":"Welcome Back!","op2":"We miss you :(","op1type":"str","op2
@dexterlabora
dexterlabora / Train Crossing - Node-RED flow
Last active September 12, 2016 22:06
This Node-RED flow uses the node-red-contrib-gpio nodes to control a LEGO train crossing using an Arduino nano via Raspberry Pi.
[{"id":"9444f83b.ef0ad8","type":"nodebot","z":"a95b80de.67f24","name":"","username":"","password":"","boardType":"firmata","serialportName":"/dev/ttyUSB0","connectionType":"local","mqttServer":"","socketServer":"","pubTopic":"","subTopic":"","tcpHost":"","tcpPort":"","sparkId":"","sparkToken":"","beanId":"","impId":"","meshbluServer":"https://meshblu.octoblu.com","uuid":"","token":"","sendUuid":""},{"id":"98648f72.7b1ad","type":"inject","z":"a95b80de.67f24","name":"Activate","topic":"","payload":"1","payloadType":"num","repeat":"","crontab":"","once":false,"x":103.5,"y":202,"wires":[["3b80da05.e922c6"]]},{"id":"73514cd1.a256c4","type":"function","z":"a95b80de.67f24","name":"Servo 90 degrees","func":"msg.payload = 90;\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":180,"wires":[["71805320.3193ac"]]},{"id":"52f22a6f.2717d4","type":"function","z":"a95b80de.67f24","name":"Servo 180 degrees","func":"msg.payload = 180;\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":240,"wires":[["7ab41623.1c8488"]]},{"id":"9e58777
@dexterlabora
dexterlabora / OLEDbillboardESPEasy.json
Created September 11, 2016 12:50
A Node-RED flow to collect weather data and transmit it to an ESPEasy based OLED screen using MQTT.
[{"id":"9945da0f.2a7b68","type":"mqtt in","z":"2c52dacb.b88696","name":"","topic":"/billboard/#","qos":"2","broker":"7609358c.89f6cc","x":170,"y":120,"wires":[["e7c65a45.a47508"]]},{"id":"e7c65a45.a47508","type":"debug","z":"2c52dacb.b88696","name":"/billboard/#","active":true,"console":"false","complete":"payload","x":810,"y":120,"wires":[]},{"id":"549d260e.0d5318","type":"inject","z":"2c52dacb.b88696","name":"Billboard Clear","topic":"","payload":"oledcmd,clear","payloadType":"str","repeat":"","crontab":"","once":false,"x":180,"y":220,"wires":[["493a4d4e.763194"]]},{"id":"493a4d4e.763194","type":"mqtt out","z":"2c52dacb.b88696","name":"","topic":"/billboard/cmd","qos":"","retain":"","broker":"7609358c.89f6cc","x":820,"y":220,"wires":[]},{"id":"96a198b3.ecaee8","type":"mqtt in","z":"2c52dacb.b88696","name":"","topic":"/sensors/iolcity/weather/temperature","qos":"2","broker":"7609358c.89f6cc","x":220,"y":420,"wires":[["9f172cb3.ae4b7"]]},{"id":"9f172cb3.ae4b7","type":"function","z":"2c52dacb.b88696","name":"F
@dexterlabora
dexterlabora / cmxreceiver-lambda-inline.js
Last active April 1, 2019 11:14
A Cisco Meraki CMX receiver to be run on Amazon AWS Lambda. This acts as a micro service to collect CMX JSON posts and commit them to a DynamoDB
/**
* Cisco Meraki CMX Receiver to DynamoDB
*
* Written by Cory Guynn
*/
'use strict';
// ******* ENTER YOUR CREDENTIALS **********
@dexterlabora
dexterlabora / cmxreceiver-lambda-inline-testPOST.js
Created September 26, 2016 16:18
CMX Lambda in-line - TEST POST
{
"resource": "/cmxreceiver-dynamodb",
"path": "/cmxreceiver-dynamodb",
"httpMethod": "POST",
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.8",
"Cache-Control": "no-cache",
"CloudFront-Forwarded-Proto": "https",
@dexterlabora
dexterlabora / basics.json
Created June 13, 2017 13:23
Node-RED Basic Flows
[{"id":"cf8e54cb.3685b8","type":"inject","z":"27bac376.4fd3bc","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":140,"y":100,"wires":[["32541133.2047ae"]]},{"id":"32541133.2047ae","type":"function","z":"27bac376.4fd3bc","name":"Format Date","func":"var time = new Date(msg.payload);\nmsg.payload = \"Message sent at: \"+time;\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":100,"wires":[["ae8630a2.c0c39","43b585ec.232abc"]]},{"id":"ae8630a2.c0c39","type":"debug","z":"27bac376.4fd3bc","name":"formatted message","active":true,"console":"false","complete":"payload","x":550,"y":100,"wires":[]},{"id":"63c73248.c3599c","type":"http in","z":"27bac376.4fd3bc","name":"","url":"/time","method":"get","swaggerDoc":"","x":140,"y":180,"wires":[["d1712c04.48f36"]]},{"id":"d1712c04.48f36","type":"function","z":"27bac376.4fd3bc","name":"timestamp","func":"msg.payload = new Date().getTime();\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":180,"wires":[["32541133.2047ae"]]},{"id":"43b
@dexterlabora
dexterlabora / node-red_merakiAPI_DemoLabs.json
Last active July 19, 2017 10:59
Node-RED Cisco Meraki API Demo Labs
[{"id":"23e64752.6bedb8","type":"tab","label":"Location API"},{"id":"466595c5.4621ec","type":"tab","label":"Captive Portal"},{"id":"1f491da9.9d14e2","type":"tab","label":"Dashboard API - Admin Form"},{"id":"394a1eba.47a102","type":"tab","label":"Cisco Spark"},{"id":"ff3c6aec.eaab38","type":"mongodb","hostname":"127.0.0.1","port":"27017","db":"test","name":""},{"id":"ddd53c8a.50174","type":"Spark Authentication","z":"","name":"Cory"},{"id":"d1246adf.32e488","type":"mongodb2","z":"23e64752.6bedb8","uri":"mongodb://localhost:27017/test","name":"test","options":"","parallelism":"-1"},{"id":"34e2ddd5.605be2","type":"mongodb in","z":"23e64752.6bedb8","mongodb":"ff3c6aec.eaab38","name":"cmx data","collection":"cmx","operation":"find","x":480,"y":620,"wires":[["5543ec24.5d4b14","61baad59.306584"]]},{"id":"2cd857e8.de1398","type":"mongodb out","z":"23e64752.6bedb8","mongodb":"ff3c6aec.eaab38","name":"cmx data","collection":"cmx","payonly":true,"upsert":false,"multi":false,"operation":"store","x":600,"y":340,"wires":[]
@dexterlabora
dexterlabora / MerakiScanningNative.json
Last active July 12, 2017 21:21
Meraki CMX Location Scanning API
[
{
"id": "ab588013.cfa1f",
"type": "comment",
"z": "3e08f755.c41b78",
"name": "Meraki Location Scanning API - Native Receiver README",
"info": "This flow demonstrates the core mechanics of the\nMeraki Scanning API.\n\nLocation observation data is sent periodically from\nthe Meraki Dashboard. \n\n\n# Setup\n*Configure Meraki Network*\n- In the Meraki Dashboard, add a Post URL pointing to this server\n`http://yourserver:1880/scanningNative`\n* note your validator key provided and define your secret\n\n*Validator*\n- Update the function node with your validator key\n\n*Secret*\n- Update the switch node with your secret\n\n\n# How it works\n\n\nMeraki must first perform a GET request, in which\nit expects a response string that is the Validator\ndefined in the Meraki Dashboard (Network-wide settings)\n\nOnce validated, Meraki will periodically send\nPOSTs. This array of objects should contain a \nsecret that was defined on the Meraki Dashboard.\nThis flow will check fo
@dexterlabora
dexterlabora / Node-RED_MerakiScanningBasicSample.json
Created July 14, 2017 10:46
A Node-RED flow to demonstrate the Meraki CMX/Scanning Node (updated version with BLE support)
[{"id":"8d0a63e4.7ff19","type":"debug","z":"9560177e.d80b58","name":"Data","active":true,"console":"false","complete":"payload","x":510,"y":120,"wires":[]},{"id":"e6a6b005.01677","type":"Meraki CMX","z":"9560177e.d80b58","name":"","url":"/scanning","settings":"","radioType":"BluetoothDevicesSeen","x":100,"y":140,"wires":[["8d0a63e4.7ff19","23f1e4d9.3149ec"],["a303ae76.9149d"]]},{"id":"6b254578.dfd17c","type":"debug","z":"9560177e.d80b58","name":"Status: Data","active":true,"console":"false","complete":"true","x":490,"y":200,"wires":[]},{"id":"aa97b7a4.7e4b18","type":"split","z":"9560177e.d80b58","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"topic","x":330,"y":520,"wires":[["5700cec1.0367b"]]},{"id":"cb89fe11.4c4b5","type":"function","z":"9560177e.d80b58","name":"Extract Observations","func":"// Flatten JSON\nmsg.type = msg.payload.type;\nmsg.apMac = msg.payload.data.apMac;\nmsg.apFloors = msg.payload.data.apFloors\nmsg.apTags = msg.payload.data.apTags;\n