We had an Internal Tulip Hackathon where all of engineering had a day to play around with Node-red on EMC.
Here is a forum for submission of projects (everything does not need to be working for you to submit something!)
We had an Internal Tulip Hackathon where all of engineering had a day to play around with Node-red on EMC.
Here is a forum for submission of projects (everything does not need to be working for you to submit something!)
project concept: Control a Roomba using Node RED and Tulip
team members: Sasha, Marysia
video demo: https://www.loom.com/share/241ce14c91d44288900ae4409a87da88 (demo starts at 1:37)
flow:
[
{
"id": "9a7c661a.0dec08",
"type": "tab",
"label": "Flow 2",
"disabled": false,
"info": ""
},
{
"id": "fd4cd21f.4fdb2",
"type": "http in",
"z": "9a7c661a.0dec08",
"name": "http in",
"url": "/roomba",
"method": "post",
"upload": false,
"swaggerDoc": "",
"x": 130,
"y": 220,
"wires": [
[
"a5d0a1ec.55a43"
]
]
},
{
"id": "b1f9f81c.2ce028",
"type": "basic",
"z": "9a7c661a.0dec08",
"connection": "a66c329b.3291d",
"name": "",
"x": 550,
"y": 220,
"wires": [
[
"f4a2e119.b596c"
]
]
},
{
"id": "a5d0a1ec.55a43",
"type": "function",
"z": "9a7c661a.0dec08",
"name": "",
"func": "msg.payload = msg.payload.command\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 360,
"y": 220,
"wires": [
[
"b1f9f81c.2ce028"
]
]
},
{
"id": "f4a2e119.b596c",
"type": "http response",
"z": "9a7c661a.0dec08",
"name": "http reponse",
"statusCode": "200",
"headers": {},
"x": 760,
"y": 220,
"wires": []
},
{
"id": "a66c329b.3291d",
"type": "dorita980Config",
"ip": "192.168.0.105",
"username": "3175C62422124590",
"password": *****,
"name": "Roomba"
}
]
project concept: Use Tulip as a TV remote
team members: Clark
video demo: https://drive.google.com/file/d/1dmGZiGZJdB02PhqvL9v2rA66wmRg3W70/view?usp=sharing
flow: (requires TV-specific config node)
[
{
"id": "3ede4a54.ad67e6",
"type": "tab",
"label": "Bravia X900H control",
"disabled": false,
"info": ""
},
{
"id": "93d86f4e.e7f03",
"type": "bravia-api",
"z": "3ede4a54.ad67e6",
"tv": "",
"method": "appControl:1.0:getApplicationList",
"payload": "",
"name": "",
"x": 440,
"y": 320,
"wires": [["48c3cff3.8e4f4", "4b515d5f.f524b4"]]
},
{
"id": "cb16273a.8fbaa8",
"type": "inject",
"z": "3ede4a54.ad67e6",
"name": "",
"props": [],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 250,
"y": 280,
"wires": [["93d86f4e.e7f03"]]
},
{
"id": "48c3cff3.8e4f4",
"type": "debug",
"z": "3ede4a54.ad67e6",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 280,
"wires": []
},
{
"id": "7f0d6410.6f662c",
"type": "http in",
"z": "3ede4a54.ad67e6",
"name": "",
"url": "/tv/apps",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 230,
"y": 320,
"wires": [["93d86f4e.e7f03"]]
},
{
"id": "4b515d5f.f524b4",
"type": "http response",
"z": "3ede4a54.ad67e6",
"name": "",
"statusCode": "",
"headers": {},
"x": 630,
"y": 320,
"wires": []
},
{
"id": "b52bdf15.59dc8",
"type": "bravia-api",
"z": "3ede4a54.ad67e6",
"tv": "",
"method": "appControl:1.0:setActiveApp",
"payload": "",
"name": "",
"x": 440,
"y": 400,
"wires": [["663c47f.ef12db8", "d25ffdac.6959e"]]
},
{
"id": "1b984bcc.3a6414",
"type": "inject",
"z": "3ede4a54.ad67e6",
"name": "",
"props": [{ "p": "payload" }],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"uri\":\"com.sony.dtv.com.google.android.youtube.tv.com.google.android.apps.youtube.tv.activity.ShellActivity\"}",
"payloadType": "json",
"x": 250,
"y": 360,
"wires": [["b52bdf15.59dc8"]]
},
{
"id": "ef04bd7f.1c916",
"type": "http in",
"z": "3ede4a54.ad67e6",
"name": "",
"url": "/tv/apps/run",
"method": "post",
"upload": false,
"swaggerDoc": "",
"x": 210,
"y": 400,
"wires": [["b52bdf15.59dc8"]]
},
{
"id": "d25ffdac.6959e",
"type": "debug",
"z": "3ede4a54.ad67e6",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 360,
"wires": []
},
{
"id": "663c47f.ef12db8",
"type": "http response",
"z": "3ede4a54.ad67e6",
"name": "",
"statusCode": "",
"headers": {},
"x": 630,
"y": 400,
"wires": []
},
{
"id": "fa8de3d9.56294",
"type": "bravia-api",
"z": "3ede4a54.ad67e6",
"tv": "",
"method": "avContent:1.1:getCurrentExternalInputsStatus",
"payload": "",
"name": "",
"x": 440,
"y": 480,
"wires": [["948f8d92.aa24c", "4bd8250f.5b5bbc"]]
},
{
"id": "dac306d0.c5e558",
"type": "inject",
"z": "3ede4a54.ad67e6",
"name": "",
"props": [],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 250,
"y": 440,
"wires": [["fa8de3d9.56294"]]
},
{
"id": "1648dc6c.f60a04",
"type": "http in",
"z": "3ede4a54.ad67e6",
"name": "",
"url": "/tv/inputs",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 230,
"y": 480,
"wires": [["fa8de3d9.56294"]]
},
{
"id": "4bd8250f.5b5bbc",
"type": "debug",
"z": "3ede4a54.ad67e6",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 440,
"wires": []
},
{
"id": "948f8d92.aa24c",
"type": "http response",
"z": "3ede4a54.ad67e6",
"name": "",
"statusCode": "",
"headers": {},
"x": 630,
"y": 480,
"wires": []
},
{
"id": "1dd175c1.447b2a",
"type": "bravia-api",
"z": "3ede4a54.ad67e6",
"tv": "",
"method": "avContent:1.0:setPlayContent",
"payload": "",
"name": "",
"x": 440,
"y": 560,
"wires": [["9b1c9ef0.07d74", "b71fd2f7.c0e8b"]]
},
{
"id": "9771f356.d7cf3",
"type": "inject",
"z": "3ede4a54.ad67e6",
"name": "",
"props": [{ "p": "payload" }],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"uri\":\"extInput:hdmi?port=1\"}",
"payloadType": "json",
"x": 250,
"y": 520,
"wires": [["1dd175c1.447b2a"]]
},
{
"id": "5bd243a3.892e3c",
"type": "http in",
"z": "3ede4a54.ad67e6",
"name": "",
"url": "/tv/inputs/open",
"method": "post",
"upload": false,
"swaggerDoc": "",
"x": 210,
"y": 560,
"wires": [["1dd175c1.447b2a"]]
},
{
"id": "b71fd2f7.c0e8b",
"type": "debug",
"z": "3ede4a54.ad67e6",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 520,
"wires": []
},
{
"id": "9b1c9ef0.07d74",
"type": "http response",
"z": "3ede4a54.ad67e6",
"name": "",
"statusCode": "",
"headers": {},
"x": 630,
"y": 560,
"wires": []
}
]
project concept: Use Node-RED running on Edge MC to pull Nest data and push it to the Tulip Machine API.
team members: Mason & Tory
video demo: https://drive.google.com/file/d/10sH2-iDakmPwRKwJ7udh-D-MxsGZIpoX/view
flow: (requires custom Google API node)
[
{
"id": "27ee7625.f47bea",
"type": "tab",
"label": "Flow 2",
"disabled": false,
"info": ""
},
{
"id": "270a3ef2.f09912",
"type": "nest",
"z": "27ee7625.f47bea",
"name": "",
"x": 270,
"y": 220,
"wires": [
[
"5e90d8f1.6809d8"
],
[
"c00c2e07.7206b"
],
[
"eb054c55.375cf8"
]
]
},
{
"id": "5e90d8f1.6809d8",
"type": "tulip-machine-attribute",
"z": "27ee7625.f47bea",
"name": "Temperature",
"apiAuth": "cb27e848.4a8388",
"deviceInfo": "{\"attributeId\":\"tFk8XrNoEtYSoHh6G\", \"machineId\":\"6LZmt6k7HPsKoB92y\"}",
"payloadSource": "payload",
"payloadType": "msg",
"x": 450,
"y": 180,
"wires": [
[]
]
},
{
"id": "c00c2e07.7206b",
"type": "tulip-machine-attribute",
"z": "27ee7625.f47bea",
"name": "Relative Humidity",
"apiAuth": "cb27e848.4a8388",
"deviceInfo": "{\"attributeId\":\"wAMmuoBJnAjfsJSeC\", \"machineId\":\"6LZmt6k7HPsKoB92y\"}",
"payloadSource": "payload",
"payloadType": "msg",
"x": 470,
"y": 220,
"wires": [
[]
]
},
{
"id": "eb054c55.375cf8",
"type": "tulip-machine-attribute",
"z": "27ee7625.f47bea",
"name": "State",
"apiAuth": "cb27e848.4a8388",
"deviceInfo": "{\"attributeId\":\"edjpv6JvdgAK9NRES\", \"machineId\":\"6LZmt6k7HPsKoB92y\"}",
"payloadSource": "payload",
"payloadType": "msg",
"x": 430,
"y": 260,
"wires": [
[]
]
},
{
"id": "e56f02f8.67141",
"type": "inject",
"z": "27ee7625.f47bea",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 130,
"y": 220,
"wires": [
[
"270a3ef2.f09912"
]
]
},
{
"id": "cb27e848.4a8388",
"type": "tulip-api-auth",
"name": "tulip-api-auth",
"protocol": "https",
"hostname": "tory.bulb.cloud",
"port": ""
}
]
project concept: take a photo using Node RED + USB webcam + EdgeMC and upload it to player
team: Sean and Nan
video demo: nodered_hackathon_webcam_demo.mp4 - Google Drive
flow: (requires an AWS S3 bucket to store the photo)
[
{
"id":"b640d09d.91a1c",
"type":"tab",
"label":"Flow 1",
"disabled":false,
"info":""
},
{
"id":"cdfff9ec.d26d18",
"type":"exec",
"z":"b640d09d.91a1c",
"command":"fswebcam -d /dev/video0 -r 160x120 --no-banner --save '-'",
"addpay":false,
"append":"",
"useSpawn":"false",
"timer":"",
"oldrc":false,
"name":"Camera",
"x":280,
"y":260,
"wires":[
[
"88eee0f4.ae3b3",
"f5f927a7.dfd418"
],
[
],
[
]
]
},
{
"id":"8998a10b.4ba7",
"type":"inject",
"z":"b640d09d.91a1c",
"name":"Take Picture",
"props":[
{
"p":"payload"
},
{
"p":"topic",
"vt":"str"
}
],
"repeat":"",
"crontab":"",
"once":false,
"onceDelay":0.1,
"topic":"",
"payload":"",
"payloadType":"date",
"x":110,
"y":260,
"wires":[
[
"cdfff9ec.d26d18"
]
]
},
{
"id":"f5f927a7.dfd418",
"type":"amazon s3 out",
"z":"b640d09d.91a1c",
"aws":"",
"bucket":"",
"filename":"pic.jpg",
"localFilename":"",
"region":"us-east-1",
"name":"S3",
"x":490,
"y":200,
"wires":[
]
},
{
"id":"88eee0f4.ae3b3",
"type":"jimp-image",
"z":"b640d09d.91a1c",
"name":"Encoder",
"data":"payload",
"dataType":"msg",
"ret":"img",
"parameter1":"",
"parameter1Type":"msg",
"parameter2":"",
"parameter2Type":"msg",
"parameter3":"",
"parameter3Type":"msg",
"parameter4":"",
"parameter4Type":"msg",
"parameter5":"",
"parameter5Type":"msg",
"parameter6":"",
"parameter6Type":"msg",
"parameter7":"",
"parameter7Type":"msg",
"parameter8":"",
"parameter8Type":"msg",
"sendProperty":"payload",
"sendPropertyType":"msg",
"parameterCount":0,
"jimpFunction":"none",
"selectedJimpFunction":{
"name":"none",
"fn":"none",
"description":"Just loads the image.",
"parameters":[
]
},
"x":460,
"y":300,
"wires":[
[
"d0935f58.8b078"
]
]
},
{
"id":"d0935f58.8b078",
"type":"image viewer",
"z":"b640d09d.91a1c",
"name":"",
"width":160,
"data":"payload",
"dataType":"msg",
"x":610,
"y":300,
"wires":[
[
]
]
}
]
Need to get myself an edge MC to connect to my nest!