Skip to content

Instantly share code, notes, and snippets.

@amcewen
Created April 12, 2021 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amcewen/f8f8e789221d9865130cf3c7debe72b5 to your computer and use it in GitHub Desktop.
Save amcewen/f8f8e789221d9865130cf3c7debe72b5 to your computer and use it in GitHub Desktop.
Control WLED neopixels from Twitter

Connects a Twitter search (in this example for "#DoESTheLiverbirdPlay") to an ESP8266/ESP32 running the WLED software so that you can tweet a colour and/or a lighting effect and have the RGB LEDs react accordingly

[{"id":"db1d65be.42f728","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"8c94ab52.90aa9","type":"inject","z":"db1d65be.42f728","name":"On","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{ \"on\": true }","payloadType":"json","x":110,"y":560,"wires":[["bf7b8d1d.9fbfa"]]},{"id":"bdd8bf72.6a1eb8","type":"debug","z":"db1d65be.42f728","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":240,"wires":[]},{"id":"c21a01f5.502cd","type":"twitter in","z":"db1d65be.42f728","twitter":"","tags":"#DoesTheLiverbirdPlay","user":"false","name":"","inputs":0,"x":90,"y":40,"wires":[["bdd8bf72.6a1eb8","408a98a3.c56498","527a3d89.209aac","8c068bb4.446258"]]},{"id":"bf7b8d1d.9fbfa","type":"wled2","z":"db1d65be.42f728","address":"10.0.33.231","brightness":128,"delay":0,"color1":"#ffffff","color2":"#ffffff","color3":"#ffffff","effect":0,"effectIntensity":128,"effectSpeed":128,"name":"Liverbird","palette":"0","preset":0,"state":"on","x":360,"y":560,"wires":[["bdd8bf72.6a1eb8"]]},{"id":"8a8488eb.866b1","type":"inject","z":"db1d65be.42f728","name":"Off","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{ \"state\": \"off\" }","payloadType":"json","x":110,"y":600,"wires":[["bf7b8d1d.9fbfa"]]},{"id":"4d705230.c36f04","type":"node-red-contrib-colorspace","z":"db1d65be.42f728","name":"","target":"payload","x":160,"y":440,"wires":[["bdd8bf72.6a1eb8","bf798744.8bb978"]]},{"id":"bf798744.8bb978","type":"template","z":"db1d65be.42f728","name":"Turn colour into a message for WLED","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{ \n \"color1\": [\n {{payload.rgb.red}}, \n {{payload.rgb.green}}, \n {{payload.rgb.blue}}\n ],\n \"color2\": [0,0,0],\n \"color3\": [0,0,0],\n \"effect\": {{effect}}\n}","output":"json","x":230,"y":500,"wires":[["bf7b8d1d.9fbfa","bdd8bf72.6a1eb8"]]},{"id":"83d007bb.ede018","type":"delay","z":"db1d65be.42f728","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":150,"y":380,"wires":[["4d705230.c36f04"]]},{"id":"408a98a3.c56498","type":"function","z":"db1d65be.42f728","name":"Choose the effect","func":"var effects = [\n { \"name\": \"TWO DOTS\", \"value\": 50 },\n { \"name\": \"TWO AREAS\", \"value\": 51 },\n { \"name\": \"TWINKLE\", \"value\": 17 }, \n { \"name\": \"TWINKLEUP\", \"value\": 106 },\n { \"name\": \"TWINKLEFOX\", \"value\": 80 },\n { \"name\": \"TWINKLECAT\", \"value\": 81 },\n { \"name\": \"TRI STATIC PATTERN\", \"value\": 84 },\n { \"name\": \"TRICOLOR WIPE\", \"value\": 55 },\n { \"name\": \"TRICOLOR FADE\", \"value\": 56 },\n { \"name\": \"TRICOLOR CHASE\", \"value\": 54 },\n { \"name\": \"TRAFFIC LIGHT\", \"value\": 35 },\n { \"name\": \"THEATER CHASE\", \"value\": 13 },\n { \"name\": \"THEATER CHASE RAINBOW\", \"value\": 14 },\n { \"name\": \"SUNRISE\", \"value\": 104 },\n { \"name\": \"STROBE\", \"value\": 23 },\n { \"name\": \"STROBE RAINBOW\", \"value\": 24 },\n { \"name\": \"STATIC\", \"value\": 0 },\n { \"name\": \"STATIC PATTERN\", \"value\": 83 },\n { \"name\": \"STARBURST\", \"value\": 89 },\n { \"name\": \"SPOTS\", \"value\": 85 },\n { \"name\": \"SPOTS FADE\", \"value\": 86 },\n { \"name\": \"SPARKLE\", \"value\": 20 },\n { \"name\": \"SOLID GLITTER\", \"value\": 103 },\n { \"name\": \"SINEWAVE\", \"value\": 108 },\n { \"name\": \"SINELON\", \"value\": 92 },\n { \"name\": \"SINELON RAINBOW\", \"value\": 94 },\n { \"name\": \"SINELON DUAL\", \"value\": 93 },\n { \"name\": \"SCAN\", \"value\": 10 }, \n { \"name\": \"SAW\", \"value\": 16 },\n { \"name\": \"RUNNING RED BLUE\", \"value\": 38 },\n { \"name\": \"RUNNING RANDOM\", \"value\": 39 },\n { \"name\": \"RUNNING LIGHTS\", \"value\": 15 },\n { \"name\": \"RUNNING COLOR\", \"value\": 37 },\n { \"name\": \"RIPPLE\", \"value\": 79 },\n { \"name\": \"RIPPLE RAINBOW\", \"value\": 99 },\n { \"name\": \"RANDOM COLOR\", \"value\": 5 },\n { \"name\": \"RANDOM CHASE\", \"value\": 61 },\n { \"name\": \"RAIN\", \"value\": 43 },\n { \"name\": \"RAINBOW\", \"value\": 8 },\n { \"name\": \"RAINBOW CYCLE\", \"value\": 9 },\n { \"name\": \"RAILWAY\", \"value\": 78 },\n { \"name\": \"PRIDE 2015\", \"value\": 63 },\n { \"name\": \"POPCORN\", \"value\": 95 },\n { \"name\": \"POLICE\", \"value\": 48 },\n { \"name\": \"POLICE ALL\", \"value\": 49 },\n { \"name\": \"PLASMA\", \"value\": 97 },\n { \"name\": \"PHASED\", \"value\": 105 },\n { \"name\": \"PHASEDNOISE\", \"value\": 109 },\n { \"name\": \"PERCENT\", \"value\": 98 },\n { \"name\": \"PALETTE\", \"value\": 65 },\n { \"name\": \"PACIFICA\", \"value\": 101 },\n { \"name\": \"OSCILLATE\", \"value\": 62 },\n { \"name\": \"NOISEPAL\", \"value\": 107 },\n { \"name\": \"NOISE16 4\", \"value\": 73 },\n { \"name\": \"NOISE16 3\", \"value\": 72 },\n { \"name\": \"NOISE16 2\", \"value\": 71 },\n { \"name\": \"NOISE16 1\", \"value\": 70 },\n { \"name\": \"MULTI STROBE\", \"value\": 25 },\n { \"name\": \"MULTI COMET\", \"value\": 59 },\n { \"name\": \"METEOR\", \"value\": 76 },\n { \"name\": \"METEOR SMOOTH\", \"value\": 77 },\n { \"name\": \"MERRY CHRISTMAS\", \"value\": 44 },\n { \"name\": \"LOADING\", \"value\": 47 },\n { \"name\": \"LIGHTNING\", \"value\": 57 },\n { \"name\": \"LARSON SCANNER\", \"value\": 40 },\n { \"name\": \"LAKE\", \"value\": 75 },\n { \"name\": \"JUGGLE\", \"value\": 64 },\n { \"name\": \"ICU\", \"value\": 58 },\n { \"name\": \"HYPER SPARKLE\", \"value\": 22 },\n { \"name\": \"HEARTBEAT\", \"value\": 100 },\n { \"name\": \"HALLOWEEN\", \"value\": 53 },\n { \"name\": \"HALLOWEEN EYES\", \"value\": 82 },\n { \"name\": \"GRADIENT\", \"value\": 46 },\n { \"name\": \"GLITTER\", \"value\": 87 },\n { \"name\": \"FLOW\", \"value\": 110 },\n { \"name\": \"FLASH SPARKLE\", \"value\": 21 },\n { \"name\": \"FIREWORKS\", \"value\": 42 },\n { \"name\": \"FIRE FLICKER\", \"value\": 45 },\n { \"name\": \"FIRE 2012\", \"value\": 66 },\n { \"name\": \"FILLNOISE8\", \"value\": 69 },\n { \"name\": \"FADE\", \"value\": 12 },\n { \"name\": \"EXPLODING FIREWORKS\", \"value\": 90 },\n { \"name\": \"DYNAMIC\", \"value\": 7 },\n { \"name\": \"DUAL SCAN\", \"value\": 11 }, \n { \"name\": \"DUAL LARSON SCANNER\", \"value\": 60 },\n { \"name\": \"DRIP\", \"value\": 96 },\n { \"name\": \"DISSOLVE\", \"value\": 18 },\n { \"name\": \"DISSOLVE RANDOM\", \"value\": 19 },\n { \"name\": \"COMET\", \"value\": 41 },\n { \"name\": \"COLOR WIPE\", \"value\": 3 },\n { \"name\": \"COLOR WIPE RANDOM\", \"value\": 4 },\n { \"name\": \"COLORWAVES\", \"value\": 67 },\n { \"name\": \"COLORTWINKLE\", \"value\": 74 },\n { \"name\": \"COLOR SWEEP\", \"value\": 6 },\n { \"name\": \"COLOR SWEEP RANDOM\", \"value\": 36 },\n { \"name\": \"COLORFUL\", \"value\": 34 },\n { \"name\": \"CIRCUS COMBUSTUS\", \"value\": 52 },\n { \"name\": \"CHUNCHUN\", \"value\": 111 },\n { \"name\": \"CHASE RANDOM\", \"value\": 29 },\n { \"name\": \"CHASE RAINBOW WHITE\", \"value\": 33 },\n { \"name\": \"CHASE RAINBOW\", \"value\": 30 },\n { \"name\": \"CHASE FLASH\", \"value\": 31 },\n { \"name\": \"CHASE FLASH RANDOM\", \"value\": 32 },\n { \"name\": \"CHASE COLOR\", \"value\": 28 },\n { \"name\": \"CANDLE\", \"value\": 88 },\n { \"name\": \"CANDLE MULTI\", \"value\": 102 },\n { \"name\": \"BREATH\", \"value\": 2 },\n { \"name\": \"BPM\", \"value\": 68 },\n { \"name\": \"BOUNCINGBALLS\", \"value\": 91 },\n { \"name\": \"BLINK\", \"value\": 1 },\n { \"name\": \"BLINK RAINBOW\", \"value\": 26 },\n { \"name\": \"ANDROID\", \"value\": 27 }\n];\n// Work out if this is a super long tweet and pull out\n// the longer text\nif (msg.tweet.truncated) {\n // It's a long tweet\n msg.payload = msg.tweet.extended_tweet.full_text;\n}\n\nvar chosen_effect = 18;\nvar p = msg.payload.toUpperCase();\nfor (var i =0; i < effects.length; i++) {\n if (p.search(effects[i].name) >= 0) {\n chosen_effect = effects[i].value;\n }\n}\n\nreturn { \"payload\": msg.payload, \"effect\": chosen_effect };","outputs":1,"noerr":0,"initialize":"","finalize":"","x":170,"y":100,"wires":[["d3c56657.ab91b"]]},{"id":"d3c56657.ab91b","type":"split","z":"db1d65be.42f728","name":"","splt":" ","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":130,"y":160,"wires":[["a2a00151.6d05b"]]},{"id":"eb2e1fdc.5490f","type":"string","z":"db1d65be.42f728","name":"Strip out any punctuation","methods":[{"name":"stripPunctuation","params":[]},{"name":"toLowerCase","params":[]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":190,"y":320,"wires":[["83d007bb.ede018"]]},{"id":"a2a00151.6d05b","type":"switch","z":"db1d65be.42f728","name":"","property":"payload","propertyType":"msg","rules":[{"t":"regex","v":"#DoesTheLiverbirdPlay","vt":"str","case":true},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":130,"y":200,"wires":[["8fe4221f.7745d"],["d59fdff6.35ea"]]},{"id":"8fe4221f.7745d","type":"change","z":"db1d65be.42f728","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"blueviolet","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":200,"wires":[["83d007bb.ede018","bdd8bf72.6a1eb8"]]},{"id":"8b8fc3c7.fc4bd8","type":"twitter out","z":"db1d65be.42f728","twitter":"","name":"Tweet","x":790,"y":160,"wires":[]},{"id":"561afa77.b9a72c","type":"template","z":"db1d65be.42f728","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"@{{tweet.user.screen_name}} Nice! See it live here: https://www.youtube.com/watch?v=UXvZNb_OVQw\n\n(unless someone else has played with the liver bird since!)\n\nInspired by Love To Play 2021: https://lovetoplay.fun - check it out!","output":"str","x":660,"y":100,"wires":[["8b8fc3c7.fc4bd8","527a3d89.209aac"]]},{"id":"9d1702cb.7ff41","type":"change","z":"db1d65be.42f728","name":"","rules":[{"t":"set","p":"params","pt":"msg","to":"{ \"in_reply_to_status_id\": \"1380557517529485300\"}","tot":"json"},{"t":"set","p":"params.in_reply_to_status_id","pt":"msg","to":"tweet.id_str","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":100,"wires":[["561afa77.b9a72c","527a3d89.209aac"]]},{"id":"527a3d89.209aac","type":"debug","z":"db1d65be.42f728","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":180,"wires":[]},{"id":"8c068bb4.446258","type":"switch","z":"db1d65be.42f728","name":"Discard RTs","property":"payload","propertyType":"msg","rules":[{"t":"regex","v":"^RT ","vt":"str","case":false},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":40,"wires":[["527a3d89.209aac"],["9d1702cb.7ff41"]]},{"id":"d59fdff6.35ea","type":"function","z":"db1d65be.42f728","name":"Catch HEX colours","func":"if (msg.payload.match(/#[0-9a-fA-F]+/)) {\n // It's a HEX colour\n // Extract the relevant bit...\n msg.payload = { \"hex\": msg.payload.match(/#([0-9a-fA-F]+)/)[1] };\n return [msg, null];\n} else {\n return [null, msg];\n}\n","outputs":2,"noerr":0,"initialize":"","finalize":"","x":170,"y":260,"wires":[["83d007bb.ede018"],["eb2e1fdc.5490f"]]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment