[ { "id": "cd5687adb333d888", "type": "tab", "label": "Alexa Voice Processing Example", "disabled": false, "info": "", "env": [] }, { "id": "f00b096c12aa3133", "type": "group", "z": "cd5687adb333d888", "name": "Voice Control for Fans", "style": { "stroke": "#000000", "fill": "#bfdbef", "label": true, "color": "#000000" }, "nodes": [ "b61d596fd9eb3e1e", "27de0c2ae7f2778a", "b4369bb76cce3275", "a5629deeaa4f9fdf", "fc3f170fe44f5e04", "6e11a079c8a6744c", "252462cbef8d39e5", "6d00997bcd425bc5", "7b414a0e22c8756f", "0b5660f905be1463", "0754114b79260c6e", "0b5bbc964f611019", "5d7a60503facb267", "8c17f0e2a00d821d", "02c17f2a21530f5e", "c9965302b523d1bc", "cfe81a12f3f82e9b", "1e1093d7499713b7", "f07ddce4b2319c8d", "629bf6e0d3155003", "fc973ff0813b56ab", "e5a2ec3d96cc2231", "33a48adf2c4caaa0", "727f08815741ecb7", "5404c7aee1b2554c", "799e3f8cbe4e78d5", "85f9f2cf2318ca17", "a997a9f9895f4d63", "4abeefb1f2874da0", "40b60c3574e9d158", "0faa66e2da327346", "3fd5d697e8ed05f7", "bb9c1ba398572c96", "9086a86544911050", "ae1e716e3f7d9499", "b7c284b200a8caa8", "56ae3119568c4dd3", "786a86c8d5b10a08", "9c72e98a4aa0c3cc", "3b830b5e3baa058e", "d43adf14cc51ee00", "711c270c28653404", "1477acca63258953", "531f9d7c6e0f20dc", "4f5bc54290466ecd", "1e6436c015f223dc" ], "x": 294, "y": 119, "w": 1292, "h": 587 }, { "id": "711c270c28653404", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 630, "y": 640, "wires": [ [] ] }, { "id": "da91b90ebd2d3346", "type": "group", "z": "cd5687adb333d888", "name": "Office Ceiling Fan", "style": { "stroke": "#000000", "label": true, "fill": "#addb7b", "color": "#000000" }, "nodes": [ "d4b1d289cf69b220", "b695dbc3f0a54db7", "84162e9d327275a6", "0e3f95be3aa50d1d" ], "x": 1654, "y": 53, "w": 1438, "h": 691.5 }, { "id": "84162e9d327275a6", "type": "group", "z": "cd5687adb333d888", "g": "da91b90ebd2d3346", "name": "Fan On/Off/Timer", "style": { "stroke": "#000000", "label": true, "color": "#000000", "fill": "#bfdbef" }, "nodes": [ "507ea02ba7431186", "573937d1d61c13aa", "c1afc9d3cdd4828b", "79d1b21576763681", "64abe126bd32bd4d", "8345c3507d152326", "7a1a06f433bf0bbf", "58f3485ac19dd87c", "aa7f46704071b976", "67791b657c8acc46", "e713367b315e4a62", "db08ba5c9dcb9e0e", "959cda1242fde7b2", "2579bc9072b903fd", "68af9ae0f2509d91", "2924cae7c83719c3", "f983079ad02ce270", "da6088864ab21553", "62b9c56e5892e473" ], "x": 1974, "y": 79, "w": 1092, "h": 322 }, { "id": "0e3f95be3aa50d1d", "type": "group", "z": "cd5687adb333d888", "g": "da91b90ebd2d3346", "name": "Fan Speed", "style": { "stroke": "#000000", "label": true, "color": "#000000", "fill": "#bfdbef" }, "nodes": [ "20775d3fceb13ff1", "941d4400d79b9230", "dac823b6a9e65308", "d50802999a20a00c", "5a04148198acadde", "109494905b905e07", "f9ac619cf1ce8b8a", "f0319789f763708a", "725ca935fe8e2a58", "3cb8448ed3b23c36", "897c9922d740c62d", "74bbf459c63819c2" ], "x": 1974, "y": 441.5, "w": 1052, "h": 277 }, { "id": "3cc9b70d4ff9fd7b", "type": "junction", "z": "cd5687adb333d888", "x": 240, "y": 500, "wires": [ [ "252462cbef8d39e5", "6e11a079c8a6744c" ] ] }, { "id": "0faa66e2da327346", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1190, "y": 300, "wires": [ [ "b4369bb76cce3275" ] ] }, { "id": "3fd5d697e8ed05f7", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1190, "y": 680, "wires": [ [ "f07ddce4b2319c8d" ] ] }, { "id": "bb9c1ba398572c96", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1330, "y": 600, "wires": [ [ "0b5660f905be1463" ] ] }, { "id": "9086a86544911050", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1330, "y": 480, "wires": [ [ "0754114b79260c6e" ] ] }, { "id": "ae1e716e3f7d9499", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1330, "y": 560, "wires": [ [ "0b5bbc964f611019" ] ] }, { "id": "b7c284b200a8caa8", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1330, "y": 520, "wires": [ [ "8c17f0e2a00d821d" ] ] }, { "id": "56ae3119568c4dd3", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1330, "y": 640, "wires": [ [ "c9965302b523d1bc" ] ] }, { "id": "786a86c8d5b10a08", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1330, "y": 440, "wires": [ [ "02c17f2a21530f5e" ] ] }, { "id": "9c72e98a4aa0c3cc", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 1030, "y": 260, "wires": [ [ "6d00997bcd425bc5" ] ] }, { "id": "3b830b5e3baa058e", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 590, "y": 420, "wires": [ [ "a997a9f9895f4d63", "fc3f170fe44f5e04", "4abeefb1f2874da0" ] ] }, { "id": "d43adf14cc51ee00", "type": "junction", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "x": 830, "y": 500, "wires": [ [ "1e1093d7499713b7" ] ] }, { "id": "79d1b21576763681", "type": "junction", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "x": 2680, "y": 260, "wires": [ [ "507ea02ba7431186" ] ] }, { "id": "e713367b315e4a62", "type": "junction", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "x": 2000, "y": 280, "wires": [ [ "2924cae7c83719c3", "68af9ae0f2509d91" ] ] }, { "id": "f9ac619cf1ce8b8a", "type": "junction", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "x": 2240, "y": 640, "wires": [ [ "109494905b905e07" ] ] }, { "id": "f0319789f763708a", "type": "junction", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "x": 2240, "y": 580, "wires": [ [ "5a04148198acadde" ] ] }, { "id": "725ca935fe8e2a58", "type": "junction", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "x": 2240, "y": 520, "wires": [ [ "d50802999a20a00c" ] ] }, { "id": "78186f0ee7284c0f", "type": "comment", "z": "cd5687adb333d888", "name": "Node paletts used", "info": "node-red-contrib-alexa-remote2-applestrudel \nnode-red-contrib-ecolect \nnode-red-contrib-stoptimer-varidelay\n", "x": 310, "y": 40, "wires": [] }, { "id": "3da79eb992c26b98", "type": "alexa-remote-event", "z": "cd5687adb333d888", "name": "", "account": "", "event": "ws-device-activity", "x": 150, "y": 320, "wires": [ [ "486f1eeef812fbb3" ] ] }, { "id": "486f1eeef812fbb3", "type": "switch", "z": "cd5687adb333d888", "name": "", "property": "payload.description.summary", "propertyType": "msg", "rules": [ { "t": "cont", "v": "light", "vt": "str" }, { "t": "cont", "v": "lights", "vt": "str" }, { "t": "cont", "v": "fan", "vt": "str" }, { "t": "cont", "v": "speed", "vt": "str" }, { "t": "cont", "v": "mode", "vt": "str" }, { "t": "cont", "v": "report", "vt": "str" } ], "checkall": "false", "repair": false, "outputs": 6, "x": 150, "y": 500, "wires": [ [], [], [ "3cc9b70d4ff9fd7b" ], [ "3cc9b70d4ff9fd7b" ], [], [] ] }, { "id": "4f758b127c2754a4", "type": "comment", "z": "cd5687adb333d888", "name": "Account Info Here", "info": "Add Alexa account info to the node above", "x": 150, "y": 360, "wires": [] }, { "id": "b61d596fd9eb3e1e", "type": "ecolect", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Local Voice Commands for Fans", "topics": [ { "name": "fans", "phrases": "{fan} {state} \nturn {fan} {state}\nturn the {fan} {state}\nturn {state} {fan}\nturn {state} the {fan}\n{area} {fan} {state}\nturn {state} {area} {fan}\nturn {area} {fan} {state}\nturn the {area} {fan} {state}\nturn {state} the {fan} in the {area}\nturn {state} the {area} {fan}\n{fan} {state} for {number} {units}\nturn {fan} {state} for {number} {units}\nturn the {fan} {state} for {number} {units}\nturn {state} {fan} for {number} {units}\nturn {state} the {fan} for {number} {units}\n{area} {fan} {state} for {number} {units}\nturn {area} {fan} {state} for {number} {units}\nturn {state} the {area} {fan} for {number} {units}\nturn {state} the {fan} in the {area} for {number} {units}", "values": [ { "name": "fan", "type": "enumeration", "enumerations": [ "fan", "ceiling fan", "exhaust fan", "fart fan", "circulating fan", "hvac fan", "nest fan", "whole house fan" ] }, { "name": "units", "type": "enumeration", "enumerations": [ "minute", "minutes", "hour", "hours", "Minutes", "Minute", "Hour", "Hours" ] }, { "name": "state", "type": "enumeration", "enumerations": [ "on", "off" ] }, { "name": "number", "type": "enumeration", "enumerations": [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "ninteen", "twenty", "twenty one", "twenty two", "twenty three", "twenty four", "twenty five", "twenty six", "twenty seven", "twenty eight", "twenty nine", "thirty", "thirty one", "thirty two", "thirty three", "thrity four", "thrity five", "thirty six", "thirty seven", "thirty eight", "thirty nine", "forty", "forty one", "forty two", "forty three", "forty four", "forty five", "forty six", "forty seven", "forty eight", "forty nine", "fifty", "fifty one", "fifty two", "fifty three", "fifty four", "fifty five", "fifty six", "fifty seven", "fifty eight", "fifty nine", "sixty", "sixty one", "sixty two", "sixty three", "sixty four", "sixty five", "sixty six", "sixty seven", "sixty eight", "sixty nine", "seventy", "seventy one", "seventy two", "seventy three", "seventy four", "seventy five", "seventy six", "seventy seven", "seventy eight", "seventy nine", "eighty", "eighty one", "eighty two", "eighty three", "eighty four", "eighty five", "eighty six", "eighty seven", "eighty eight", "eighty nine", "ninty", "ninty one", "ninty two", "ninty three", "ninty four", "ninty five", "ninty six", "ninty seven", "ninty eight", "ninty nine", "one hundred" ] }, { "name": "area", "type": "enumeration", "enumerations": [ "bathroom", "bedroom", "family room", "guest room", "laundry room", "living room", "master bath", "office", "house" ] } ] }, { "name": "fan_speed", "phrases": "{fan} {fanSpeed}\n{fan} to {fanSpeed}\n{fan} {fanSpeed} speed\n{fan} to {fanSpeed} speed\n{action} {fan} to {fanSpeed}\n{action} the {fan} to {fanSpeed}\n{fan} in the {area} to {fanSpeed}\n{action} {area} {fan} to {fanSpeed}\n{action} {fan} to {fanSpeed} speed\n{action} the {area} {fan} to {fanSpeed}\n{action} the {fan} to {fanSpeed} speed\n{fan} in the {area} to {fanSpeed} speed\n{action} {fan} in the {area} to {fanSpeed}\n{action} {area} {fan} to {fanSpeed} speed\n{action} the {fan} in the {area} to {fanSpeed}\n{action} the {area} {fan} to {fanSpeed} speed\n{action} {fan} in the {area} to {fanSpeed} speed\n{action} the {fan} in the {area} to {fanSpeed} speed", "values": [ { "name": "fan", "type": "enumeration", "enumerations": [ "fan", "ceiling fan" ] }, { "name": "action", "type": "enumeration", "enumerations": [ "change", "set", "switch", "adjust", "raise", "lower", "increase", "decrease", "speed up", "slow down" ] }, { "name": "fanSpeed", "type": "enumeration", "enumerations": [ "low", "medium", "high", "quarter", "half", "full", "twenty five percent", "fifty percent", "one hundred percent", "slow", "average", "fast", "minimum", "maximum", "max", "level one", "level two", "level three" ] }, { "name": "area", "type": "enumeration", "enumerations": [ "office", "living room", "family room", "bedroom", "guest room" ] } ] } ], "outputs": 3, "x": 460, "y": 500, "wires": [ [ "fc3f170fe44f5e04" ], [ "a997a9f9895f4d63" ], [ "4abeefb1f2874da0" ] ] }, { "id": "27de0c2ae7f2778a", "type": "switch", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Room/Area", "property": "values.area", "propertyType": "msg", "rules": [ { "t": "eq", "v": "house", "vt": "str" }, { "t": "eq", "v": "bathroom", "vt": "str" }, { "t": "eq", "v": "laundry room", "vt": "str" }, { "t": "eq", "v": "master bath", "vt": "str" }, { "t": "eq", "v": "family room", "vt": "str" }, { "t": "eq", "v": "living room", "vt": "str" }, { "t": "eq", "v": "guest room", "vt": "str" }, { "t": "eq", "v": "bedroom", "vt": "str" }, { "t": "eq", "v": "office", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 9, "x": 1100, "y": 440, "wires": [ [ "cfe81a12f3f82e9b" ], [ "0faa66e2da327346", "7b414a0e22c8756f" ], [ "0faa66e2da327346", "5d7a60503facb267" ], [ "0faa66e2da327346", "786a86c8d5b10a08" ], [ "0faa66e2da327346", "9086a86544911050" ], [ "0faa66e2da327346", "b7c284b200a8caa8" ], [ "0faa66e2da327346", "ae1e716e3f7d9499" ], [ "0faa66e2da327346", "bb9c1ba398572c96" ], [ "0faa66e2da327346", "56ae3119568c4dd3" ] ] }, { "id": "b4369bb76cce3275", "type": "debug", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "debug 1181", "active": false, "tosidebar": true, "console": false, "tostatus": true, "complete": "values.area", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1100, "y": 340, "wires": [] }, { "id": "a5629deeaa4f9fdf", "type": "alexa-remote-routine", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Alexa device", "account": "", "routineNode": { "type": "speak", "payload": { "type": "regular", "text": { "type": "msg", "value": "payload" }, "devices": { "type": "msg", "value": "device_name" } } }, "x": 1480, "y": 260, "wires": [ [] ] }, { "id": "fc3f170fe44f5e04", "type": "join", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "num", "reduceFixup": "", "x": 720, "y": 440, "wires": [ [ "d43adf14cc51ee00", "629bf6e0d3155003" ] ] }, { "id": "6e11a079c8a6744c", "type": "change", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "set payload from summary", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.description.summary", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 450, "y": 580, "wires": [ [ "b61d596fd9eb3e1e" ] ] }, { "id": "252462cbef8d39e5", "type": "change", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "alexa", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 410, "y": 420, "wires": [ [ "3b830b5e3baa058e" ] ] }, { "id": "6d00997bcd425bc5", "type": "change", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "set payload", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.status.text", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1260, "y": 260, "wires": [ [ "a5629deeaa4f9fdf" ] ] }, { "id": "7b414a0e22c8756f", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Bathroom Fan", "mode": "link", "links": [ "cd450b74533f9ba3", "63cab87495fae77a" ], "x": 1470, "y": 360, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "0b5660f905be1463", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Bedroom Fan", "mode": "link", "links": [ "fea9f07e5c49782a", "7fab4a5cc7b4c498", "b238194bb97c38dc" ], "x": 1470, "y": 600, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "0754114b79260c6e", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Family Room Fan", "mode": "link", "links": [ "9c0fdd62c1bfe726", "df58f8d30bdc48d2" ], "x": 1460, "y": 480, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "0b5bbc964f611019", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Guest Room Fan", "mode": "link", "links": [ "66d7a963a8de6412" ], "x": 1460, "y": 560, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "5d7a60503facb267", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Laundry Room Fan", "mode": "link", "links": [ "5e96547e18881bb2" ], "x": 1460, "y": 400, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "8c17f0e2a00d821d", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Living Room Fan", "mode": "link", "links": [ "6a8b7c8ad7e36ef1", "c8d2dcfc0f569499" ], "x": 1460, "y": 520, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "02c17f2a21530f5e", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Master Bath Fan", "mode": "link", "links": [ "143939ed168d7a83", "9fe09f0eb774817b" ], "x": 1460, "y": 440, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "c9965302b523d1bc", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Office Fan", "mode": "link", "links": [ "c4ece912a882f85d", "20b3d177202b751c", "73caa3dd332d8204", "24fb7de25f395635", "59ed6b47847224db", "b695dbc3f0a54db7" ], "x": 1480, "y": 640, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "cfe81a12f3f82e9b", "type": "link out", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "House Fan", "mode": "link", "links": [ "361870ed12b926a5" ], "x": 1480, "y": 320, "wires": [], "icon": "node-red/light.svg", "l": true }, { "id": "1e1093d7499713b7", "type": "switch", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "", "property": "values.area", "propertyType": "msg", "rules": [ { "t": "nnull" }, { "t": "else" } ], "checkall": "false", "repair": false, "outputs": 2, "x": 920, "y": 500, "wires": [ [ "27de0c2ae7f2778a" ], [ "85f9f2cf2318ca17" ] ] }, { "id": "f07ddce4b2319c8d", "type": "debug", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "debug 1182", "active": false, "tosidebar": true, "console": false, "tostatus": true, "complete": "true", "targetType": "full", "statusVal": "payload", "statusType": "auto", "x": 1100, "y": 640, "wires": [] }, { "id": "629bf6e0d3155003", "type": "switch", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Room", "property": "values.area", "propertyType": "msg", "rules": [ { "t": "null" }, { "t": "nnull" } ], "checkall": "false", "repair": false, "outputs": 2, "x": 480, "y": 260, "wires": [ [ "e5a2ec3d96cc2231" ], [ "fc973ff0813b56ab" ] ] }, { "id": "fc973ff0813b56ab", "type": "switch", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Time", "property": "values.units", "propertyType": "msg", "rules": [ { "t": "null" }, { "t": "nnull" } ], "checkall": "false", "repair": false, "outputs": 2, "x": 600, "y": 300, "wires": [ [ "727f08815741ecb7" ], [ "33a48adf2c4caaa0" ] ] }, { "id": "e5a2ec3d96cc2231", "type": "switch", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Time", "property": "values.units", "propertyType": "msg", "rules": [ { "t": "null" }, { "t": "nnull" } ], "checkall": "false", "repair": false, "outputs": 2, "x": 600, "y": 220, "wires": [ [ "799e3f8cbe4e78d5" ], [ "5404c7aee1b2554c" ] ] }, { "id": "33a48adf2c4caaa0", "type": "function", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Action/Fan/State/Area/Number/Units", "func": "var device_name = msg.payload.alexa.name;\nvar summary = msg.payload.alexa.description.summary;\nvar action = msg.values.action;\nvar state = msg.values.state;\nvar fan = msg.values.fan;\nvar area = msg.values.area;\nvar number = msg.values.number;\nvar units = msg.values.units;\n\nif ((summary != \"alexa\") && (summary != \"\")) {\n\n if ((action != \"\") && (state != \"\") && (fan != \"\") && (area != \"\") && (number != \"\") && (units != \"\")) {\n\n msg.payload = {};\n\n msg = {\n topic: \"Alexa_response\",\n device_name: device_name,\n payload: {\n \"status\": { text: \"Turning \" + state + \" the \" + fan + \" in the \" + area + \" for \" + number + \" \" + units }\n }\n }\n node.status({ text: \"Turning \" + state + \" the \" + fan + \" in the \" + area + \" for \" + number + \" \" + units });\n return msg;\n }\n \n\nelse {\n return null;\n }\n}", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 820, "y": 320, "wires": [ [ "9c72e98a4aa0c3cc" ] ] }, { "id": "727f08815741ecb7", "type": "function", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "State/Fan/Area", "func": "var device_name = msg.payload.alexa.name;\nvar summary = msg.payload.alexa.description.summary;\nvar state = msg.values.state;\nvar fan = msg.values.fan;\nvar area = msg.values.area;\n\nif ((summary != \"alexa\") && (summary != \"\")) {\n\n if ((state != \"\") && (fan != \"\") && (area != \"\")) {\n\n msg.payload = {};\n\n msg = {\n topic: \"Alexa_response\",\n device_name: device_name,\n payload: {\n \"status\": { text: \"Turning \" + state + \" the \" + fan + \" in the \" + area }\n }\n }\n node.status({ text: \"Turning \" + state + \" the \" + fan + \" in the \" + area });\n return msg;\n }\n \nelse {\n return null;\n }\n}", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 750, "y": 280, "wires": [ [ "9c72e98a4aa0c3cc" ] ] }, { "id": "5404c7aee1b2554c", "type": "function", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "State/Item/Number/Units", "func": "var device_name = msg.payload.alexa.name;\nvar summary = msg.payload.alexa.description.summary;\nvar state = msg.values.state;\nvar fan = msg.values.fan;\nvar number = msg.values.number;\nvar units = msg.values.units;\n\nif ((summary != \"alexa\") && (summary != \"\")) {\n\n if ((state != \"\") && (fan != \"\") && (number != \"\") && (units != \"\")) {\n\n msg.payload = {};\n\n msg = {\n topic: \"Alexa_response\",\n device_name: device_name,\n payload: {\n \"status\": { text: \"Turning \" + state + \" the \" + fan + \" for \" + number + \" \" + units }\n }\n }\n node.status({ text: \"Turning \" + state + \" the \" + fan + \" for \" + number + \" \" + units });\n return msg;\n }\n \n\nelse {\n return null;\n }\n}", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 780, "y": 240, "wires": [ [ "9c72e98a4aa0c3cc" ] ] }, { "id": "799e3f8cbe4e78d5", "type": "function", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "State/Fan", "func": "var device_name = msg.payload.alexa.name;\nvar summary = msg.payload.alexa.description.summary;\nvar state = msg.values.state;\nvar fan = msg.values.fan;\n\nif ((summary != \"alexa\") && (summary != \"\")) {\n\n if ((state != \"\") && (fan != \"\")) {\n\n msg.payload = {};\n\n msg = {\n topic: \"Alexa_response\",\n device_name: device_name,\n payload: {\n \"status\": { text: \"Turning \" + state + \" the \" + fan }\n }\n }\n }\n node.status({ text: \"Turning \" + state + \" the \" + fan });\n return msg;\n \n}\nelse {\n return null;\n }", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 730, "y": 200, "wires": [ [ "9c72e98a4aa0c3cc" ] ] }, { "id": "85f9f2cf2318ca17", "type": "switch", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Room/Area", "property": "payload.alexa.name", "propertyType": "msg", "rules": [ { "t": "eq", "v": "Master Bath Echo Spot", "vt": "str" }, { "t": "eq", "v": "Family Room Echo Show 8", "vt": "str" }, { "t": "eq", "v": "Living Room Echo Dot", "vt": "str" }, { "t": "eq", "v": "Guest Room Echo Dot", "vt": "str" }, { "t": "eq", "v": "Bedroom Echo Spot", "vt": "str" }, { "t": "eq", "v": "Office Echo Show 5", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 6, "x": 1100, "y": 560, "wires": [ [ "3fd5d697e8ed05f7", "786a86c8d5b10a08" ], [ "3fd5d697e8ed05f7", "9086a86544911050" ], [ "3fd5d697e8ed05f7", "b7c284b200a8caa8" ], [ "3fd5d697e8ed05f7", "ae1e716e3f7d9499" ], [ "3fd5d697e8ed05f7", "bb9c1ba398572c96" ], [ "3fd5d697e8ed05f7", "56ae3119568c4dd3" ] ] }, { "id": "a997a9f9895f4d63", "type": "join", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "num", "reduceFixup": "", "x": 720, "y": 500, "wires": [ [ "d43adf14cc51ee00" ] ] }, { "id": "4abeefb1f2874da0", "type": "join", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "num", "reduceFixup": "", "x": 720, "y": 580, "wires": [ [ "40b60c3574e9d158" ] ] }, { "id": "40b60c3574e9d158", "type": "alexa-remote-routine", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Alexa device", "account": "", "routineNode": { "type": "speak", "payload": { "type": "regular", "text": { "type": "str", "value": "Sorry, I'm an idiot." }, "devices": { "type": "msg", "value": "payload.alexa.deviceSerialNumber" } } }, "x": 900, "y": 580, "wires": [ [] ] }, { "id": "1477acca63258953", "type": "comment", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "@dynamicdave function nodes for Alexa responses", "info": "These nodes test for whether or not certain\nvalues have been created and route the \nmessage accordingly. Huge thanks to \nhttps://discourse.nodered.org/u/dynamicdave \nwho created the function node these nodes\nare based on. They were the last piece I\nneeded to put this all together. See\nhttps://discourse.nodered.org/t/pure-fun-with-alexa-and-alexa-skills/46867\n\n", "x": 850, "y": 160, "wires": [] }, { "id": "531f9d7c6e0f20dc", "type": "comment", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "ECOLECT for voice processing", "info": "", "x": 450, "y": 460, "wires": [] }, { "id": "4f5bc54290466ecd", "type": "comment", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Add Alexa Info", "info": "", "x": 1480, "y": 220, "wires": [] }, { "id": "1e6436c015f223dc", "type": "comment", "z": "cd5687adb333d888", "g": "f00b096c12aa3133", "name": "Add Alexa Info", "info": "", "x": 900, "y": 620, "wires": [] }, { "id": "d4b1d289cf69b220", "type": "switch", "z": "cd5687adb333d888", "g": "da91b90ebd2d3346", "name": "Speed defined?", "property": "values.fanSpeed", "propertyType": "msg", "rules": [ { "t": "istype", "v": "undefined", "vt": "undefined" }, { "t": "istype", "v": "string", "vt": "string" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 1820, "y": 420, "wires": [ [ "67791b657c8acc46" ], [ "3cb8448ed3b23c36" ] ] }, { "id": "b695dbc3f0a54db7", "type": "link in", "z": "cd5687adb333d888", "g": "da91b90ebd2d3346", "name": "Office Fan Voice Control", "links": [ "37ce79096d2540a0", "c9965302b523d1bc" ], "x": 1695, "y": 420, "wires": [ [ "d4b1d289cf69b220" ] ], "icon": "font-awesome/fa-bullhorn" }, { "id": "507ea02ba7431186", "type": "switch", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "T/F", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" }, { "t": "false" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 2790, "y": 260, "wires": [ [ "573937d1d61c13aa" ], [ "c1afc9d3cdd4828b" ] ] }, { "id": "573937d1d61c13aa", "type": "alexa-remote-smarthome", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Fan ON", "account": "", "config": { "option": "action", "value": [ { "entity": "fan info here", "action": "" } ] }, "outputs": 1, "x": 2940, "y": 220, "wires": [ [] ] }, { "id": "c1afc9d3cdd4828b", "type": "alexa-remote-smarthome", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Fan OFF", "account": "", "config": { "option": "action", "value": [ { "entity": "fan info here", "action": "" } ] }, "outputs": 1, "x": 2940, "y": 300, "wires": [ [] ] }, { "id": "64abe126bd32bd4d", "type": "inject", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Off", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "false", "payloadType": "bool", "x": 2605, "y": 340, "wires": [ [ "79d1b21576763681" ] ], "outputLabels": [ "Off" ], "icon": "font-awesome/fa-toggle-off", "l": false }, { "id": "8345c3507d152326", "type": "change", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "set state", "rules": [ { "t": "change", "p": "values.state", "pt": "msg", "from": "on", "fromt": "str", "to": "false", "tot": "bool" }, { "t": "change", "p": "values.state", "pt": "msg", "from": "off", "fromt": "str", "to": "true", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "values.state", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2560, "y": 300, "wires": [ [ "79d1b21576763681" ] ] }, { "id": "7a1a06f433bf0bbf", "type": "change", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "set state", "rules": [ { "t": "change", "p": "values.state", "pt": "msg", "from": "on", "fromt": "str", "to": "true", "tot": "bool" }, { "t": "change", "p": "values.state", "pt": "msg", "from": "off", "fromt": "str", "to": "false", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "values.state", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2560, "y": 260, "wires": [ [ "79d1b21576763681" ] ] }, { "id": "58f3485ac19dd87c", "type": "change", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "set state", "rules": [ { "t": "change", "p": "values.state", "pt": "msg", "from": "on", "fromt": "str", "to": "true", "tot": "bool" }, { "t": "change", "p": "values.state", "pt": "msg", "from": "off", "fromt": "str", "to": "false", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "values.state", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2560, "y": 220, "wires": [ [ "79d1b21576763681" ] ] }, { "id": "aa7f46704071b976", "type": "inject", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "On", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 2605, "y": 180, "wires": [ [ "79d1b21576763681" ] ], "outputLabels": [ "On" ], "icon": "font-awesome/fa-toggle-on", "l": false }, { "id": "67791b657c8acc46", "type": "switch", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Time Defined?", "property": "values.number", "propertyType": "msg", "rules": [ { "t": "istype", "v": "undefined", "vt": "undefined" }, { "t": "istype", "v": "string", "vt": "string" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 2080, "y": 220, "wires": [ [ "58f3485ac19dd87c" ], [ "e713367b315e4a62", "7a1a06f433bf0bbf" ] ] }, { "id": "db08ba5c9dcb9e0e", "type": "stoptimer-varidelay", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "duration": "60", "durationType": "num", "units": "Minute", "payloadtype": "str", "payloadval": "off", "name": "", "reporting": "every_second", "persist": true, "ignoretimerpass": true, "x": 2350, "y": 300, "wires": [ [ "8345c3507d152326" ], [], [] ] }, { "id": "959cda1242fde7b2", "type": "join", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "", "mode": "custom", "build": "array", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 2310, "y": 360, "wires": [ [ "db08ba5c9dcb9e0e" ] ] }, { "id": "2579bc9072b903fd", "type": "change", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "set numbers", "rules": [ { "t": "set", "p": "delay", "pt": "msg", "to": "values.number", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2110, "y": 360, "wires": [ [ "959cda1242fde7b2" ] ] }, { "id": "68af9ae0f2509d91", "type": "function", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Text2Number", "func": "var Small = {\n 'zero': 0,\n 'one': 1,\n 'two': 2,\n 'three': 3,\n 'four': 4,\n 'five': 5,\n 'six': 6,\n 'seven': 7,\n 'eight': 8,\n 'nine': 9,\n 'ten': 10,\n 'eleven': 11,\n 'twelve': 12,\n 'thirteen': 13,\n 'fourteen': 14,\n 'fifteen': 15,\n 'sixteen': 16,\n 'seventeen': 17,\n 'eighteen': 18,\n 'nineteen': 19,\n 'twenty': 20,\n 'thirty': 30,\n 'forty': 40,\n 'fifty': 50,\n 'sixty': 60,\n 'seventy': 70,\n 'eighty': 80,\n 'ninety': 90\n};\n\nvar Magnitude = {\n 'thousand': 1000,\n 'million': 1000000,\n 'billion': 1000000000,\n 'trillion': 1000000000000,\n 'quadrillion': 1000000000000000,\n 'quintillion': 1000000000000000000,\n 'sextillion': 1000000000000000000000,\n 'septillion': 1000000000000000000000000,\n 'octillion': 1000000000000000000000000000,\n 'nonillion': 1000000000000000000000000000000,\n 'decillion': 1000000000000000000000000000000000,\n};\n\nvar a, n, g;\n\n\nmsg.values.number = text2num(msg.values.number);\nreturn msg;\n\n\n\n\n\nfunction text2num(s) {\n a = s.toString().split(/[\\s-]+/);\n n = 0;\n g = 0;\n a.forEach(feach);\n return n + g;\n}\n\nfunction feach(w) {\n var x = Small[w];\n if (x != null) {\n g = g + x;\n }\n else if (w == \"hundred\") {\n g = g * 100;\n }\n else {\n x = Magnitude[w];\n if (x != null) {\n n = n + g * x\n g = 0;\n }\n else { \n alert(\"Unknown number: \"+w); \n }\n }\n}\n\nfunction alert(arg0) {\nthrow new Error(\"Function not implemented.\");\n}\n", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 2100, "y": 320, "wires": [ [ "2579bc9072b903fd" ] ] }, { "id": "2924cae7c83719c3", "type": "change", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "set units", "rules": [ { "t": "set", "p": "units", "pt": "msg", "to": "values.units", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2120, "y": 280, "wires": [ [ "959cda1242fde7b2" ] ] }, { "id": "f983079ad02ce270", "type": "comment", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Add Alexa Info", "info": "", "x": 2960, "y": 260, "wires": [] }, { "id": "20775d3fceb13ff1", "type": "alexa-remote-routine", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "name": "Alexa device", "account": "", "routineNode": { "type": "speak", "payload": { "type": "regular", "text": { "type": "msg", "value": "payload" }, "devices": { "type": "msg", "value": "device_name" } } }, "x": 2930, "y": 580, "wires": [ [] ] }, { "id": "941d4400d79b9230", "type": "change", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "name": "set payload", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.status.text", "tot": "msg" }, { "t": "set", "p": "statusReport.fans.office.state", "pt": "msg", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2750, "y": 580, "wires": [ [ "20775d3fceb13ff1" ] ] }, { "id": "dac823b6a9e65308", "type": "function", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "name": "fan/fanSpeed", "func": "var device_name = msg.payload.alexa.name;\nvar summary = msg.payload.alexa.description.summary;\nvar fanSpeed = msg.values.fanSpeed;\nvar fan = msg.values.fan;\n\nif ((summary != \"alexa\") && (summary != \"\") && (fanSpeed != \"ludicrous\")) {\n\n if ((fanSpeed != \"\") && (fan != \"\")) {\n\n msg.payload = {};\n\n msg = {\n topic: \"Alexa_response\",\n device_name: device_name,\n payload: {\n \"status\": { text: \"Setting the office \" + fan + \" to \" + fanSpeed + \" speed\" }\n }\n }\n node.status({ text: \"Setting the office \" + fan + \" to \" + fanSpeed + \" speed\" });\n return msg;\n }\n \n\nelse {\n return null;\n }\n}", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 2560, "y": 580, "wires": [ [ "941d4400d79b9230" ] ] }, { "id": "d50802999a20a00c", "type": "hubitat command", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "deviceLabel": "Family Room Ceiling Fan", "name": "Low", "server": "0816063d70c144cc", "deviceId": "1412", "command": "setSpeed", "commandArgs": "low", "x": 2330, "y": 520, "wires": [ [ "dac823b6a9e65308" ] ] }, { "id": "5a04148198acadde", "type": "hubitat command", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "deviceLabel": "Family Room Ceiling Fan", "name": "Medium", "server": "0816063d70c144cc", "deviceId": "1412", "command": "setSpeed", "commandArgs": "medium", "x": 2340, "y": 580, "wires": [ [ "dac823b6a9e65308" ] ] }, { "id": "109494905b905e07", "type": "hubitat command", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "deviceLabel": "Family Room Ceiling Fan", "name": "High", "server": "0816063d70c144cc", "deviceId": "1412", "command": "setSpeed", "commandArgs": "high", "x": 2330, "y": 640, "wires": [ [ "dac823b6a9e65308" ] ] }, { "id": "3cb8448ed3b23c36", "type": "switch", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "name": "Speed defined?", "property": "values.fanSpeed", "propertyType": "msg", "rules": [ { "t": "cont", "v": "low", "vt": "str" }, { "t": "cont", "v": "quarter", "vt": "str" }, { "t": "cont", "v": "twenty five percent", "vt": "str" }, { "t": "cont", "v": "slow", "vt": "str" }, { "t": "cont", "v": "minimum", "vt": "str" }, { "t": "cont", "v": "medium", "vt": "str" }, { "t": "cont", "v": "half", "vt": "str" }, { "t": "cont", "v": "fifty percent", "vt": "str" }, { "t": "cont", "v": "average", "vt": "str" }, { "t": "cont", "v": "high", "vt": "str" }, { "t": "cont", "v": "full", "vt": "str" }, { "t": "cont", "v": "one hundred percent", "vt": "str" }, { "t": "cont", "v": "fast", "vt": "str" }, { "t": "cont", "v": "maximum", "vt": "str" }, { "t": "cont", "v": "max", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 15, "x": 2080, "y": 580, "wires": [ [ "725ca935fe8e2a58" ], [ "725ca935fe8e2a58" ], [ "725ca935fe8e2a58" ], [ "725ca935fe8e2a58" ], [ "725ca935fe8e2a58" ], [ "f0319789f763708a" ], [ "f0319789f763708a" ], [ "f0319789f763708a" ], [ "f0319789f763708a" ], [ "f9ac619cf1ce8b8a" ], [ "f9ac619cf1ce8b8a" ], [ "f9ac619cf1ce8b8a" ], [ "f9ac619cf1ce8b8a" ], [ "f9ac619cf1ce8b8a" ], [ "f9ac619cf1ce8b8a" ] ] }, { "id": "897c9922d740c62d", "type": "comment", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "name": "Add Alexa Info", "info": "", "x": 2920, "y": 540, "wires": [] }, { "id": "b5e75a0f0c070428", "type": "comment", "z": "cd5687adb333d888", "name": "Read Me First", "info": "This is an example fow of how you can use \nAlexa voice commands via ECOLECT to set a specific fan\nto turn on/off for a particular amount of\ntime in a particular room. Alternatrively,\nyou can also set fan speeds. \n\nThe function\nnodes were origionally written by @dynamicdave\nof the node-red forums, but have been modified\nby me to fit my specific needs. \n\nSee adjacent \"node paletts used\" comment for specific\nnodes needed. \n\nMore information about using this method with \nAlexa can be found at: \nhttps://discourse.nodered.org/t/pure-fun-with-alexa-and-alexa-skills/46867", "x": 110, "y": 40, "wires": [] }, { "id": "da6088864ab21553", "type": "comment", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "Three states explained...", "info": "The first state node will allow the fan to\nsimply turn on or off without the timer.\n\nThe second state node will allow you to \nturn the fan on or off with the timer. \n\nThe third state node will then do the opposite\nof the second state node. So, for example, if\nyou want to turn ON the fan for ten minutes, \nthe node will then turn off the fan after \nten minutes. Howerver, if you want to turn OFF \nthe fan for ten minutes, then the third node\nwill turn the fan back on when the timer runs \nout. ", "x": 2630, "y": 120, "wires": [] }, { "id": "62b9c56e5892e473", "type": "comment", "z": "cd5687adb333d888", "g": "84162e9d327275a6", "name": "text2number", "info": "a nifty little function node that will convert\na spelled out number to an integer. This node\nis necesary beause ECOLECT doesn't seem to \nhandle time and numbers as it should. ", "x": 2090, "y": 160, "wires": [] }, { "id": "74bbf459c63819c2", "type": "comment", "z": "cd5687adb333d888", "g": "0e3f95be3aa50d1d", "name": "Function to set alexa response to speed", "info": "", "x": 2640, "y": 540, "wires": [] }, { "id": "0816063d70c144cc", "type": "hubitat config", "name": "Hubitat Hub - Webhook", "usetls": false, "host": "192.168.68.132", "port": "80", "appId": "97", "nodeRedServer": "http://192.168.68.130:1880", "webhookPath": "/hubitat/webhook__", "autoRefresh": true, "useWebsocket": false, "colorEnabled": true, "color": "#96d35f" } ]