Skip to content

Danielle and Roger Blog

  • Cantenna Testing
  • HourChime
  • Cooking
  • St Johns Bach Foundation
June 1, 2017 / IT

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)

Post navigation

Previous Post:

Recipes for w/c 20/5

Next Post:

Meals w/c 3/6

Recent Posts

  • Slackbot on Raspberry Pi
  • Windows 10 Boot Recovery or Not
  • 20 Minute VC – the schizophrenia of raising v.s. running the business
  • SaaStr 2017
  • Testing Openstack with Ansible and all-in-one install on Hyper-V

Categories

  • 2012 Trip
  • 2014 trip
  • Cooking
  • IT
  • Knitting
  • Radio Control
  • SaaS
  • Uncategorized

Recent Comments

  • roger on Cooking for the cold this week
  • roger on Some things this week
  • danielle on Preserving olives
  • roger on Meal plan w/c 3/12
  • roger on Meal plan w/c 26/11

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 Danielle and Roger Blog