Slackbot on Raspberry Pi
As per Benjie.Me and Neopixels on Raspberry and also JGarff
import re import time import json from slackclient import SlackClient import time from neopixel import * # LED strip configuration: LED_COUNT = 8 # Number of LED pixels. LED_PIN = 18 # GPIO pin connected to the pixels (must support PWM!). LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz) LED_DMA = 5 # DMA channel to use for generating signal (try 5) LED_BRIGHTNESS = 20 # Set to 0 for darkest and 255 for brightest LED_INVERT = False # True to invert the signal (when using NPN transistor level shift) def theaterChase(strip, color, wait_ms=50, iterations=2): """Movie theater light style chaser animation.""" for j in range(iterations): for q in range(3): for i in range(0, strip.numPixels(), 3): strip.setPixelColor(i+q, color) strip.show() time.sleep(wait_ms/1000.0) for i in range(0, strip.numPixels(), 3): strip.setPixelColor(i+q, 0) # Create NeoPixel object with appropriate configuration. strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS) # Intialize the library (must be called once before other functions). strip.begin() # Slack integration slack_client = SlackClient(YOUR_API_KEY_HERE) # Fetch your Bot's User ID user_list = slack_client.api_call("users.list") for user in user_list.get('members'): if user.get('name') == "labs-pi": slack_user_id = user.get('id') break # Start connection if slack_client.rtm_connect(): print "Connected!" while True: for message in slack_client.rtm_read(): if 'text' in message and message['text'].startswith("<@%s>" % slack_ user_id): print "Message received: %s" % json.dumps(message, indent=2) message_text = message['text'].\ split("<@%s>" % slack_user_id)[1].\ strip() if re.match(r'.*light.*on.*', message_text, re.IGNORECASE): theaterChase(strip, Color(127,127,127)) slack_client.api_call( "chat.postMessage", channel=message['channel'], text="Lights are now on", as_user=True) if re.match(r'.*light.*off.*', message_text, re.IGNORECASE): theaterChase(strip, Color(0,0,0)) slack_client.api_call( "chat.postMessage", channel=message['channel'], text="Lights are now off", as_user=True) time.sleep(1)