So I got one of these Cheap Chinese HID RGB LEDs the other day. The include software only interfaced with Outlook, sigh. Oh well, lets start poking around.
I found that the drive is for an HID (Human Interface Device) device so I opened python and grabbed pywinusb, which includes a HID helper class.
So again looking at the driver, I found that the vendor-id was 0×1294. This number 4278190081 for the report… I don’t remember how I found it…
But after finding out those two values I started throwing bits at it. I sent 0×0001 and to my surprise, the envlope started glowing green. There are 8 settings, and the mapping is as follows:
- 0 – off
- 1 – green
- 2 – red
- 3 – blu
- 4 – teal
- 5 – yelloish-green
- 6 – purple
- 7 – white(ish)
Bam… Disco Party In My Room
import time,random
import pywinusb.hid as hid
def get_device():
all_devices = hid.HidDeviceFilter(vendor_id = 0x1294).get_devices()
if len(all_devices)==0:
print "Can't find target device"
else:
return all_devices[0]
return null
def set_color(device,color):
for report in device.find_output_reports():
if 4278190081 in report:
report[4278190081] = [color,0,0,0,0]
report.send()
if __name__ == '__main__':
try:
d = get_device()
d.open()
set_color(d,0)
color = 0
while True:
nucolor = color # windows has a bad random,
while color is nucolor: # i saw a ten streak of 6's
nucolor = random.randint(1, 7) # so this forces it to change
color = nucolor
print color
set_color(d,color)
time.sleep(1)
finally:
d.close()
exit()
Ok, Lets now grab my Reddit Inbox.
I quickly found the reddit_api python module, now called PRAW (Python Reddit API Wrapper), but it didn’t quite do what I wanted. [*Disclaimer: This might not be true with newer versions of PRAW]
So I forked it.
My changes include a direct way to access reddits unread message end-point.
With that in hand, we can build a script to check our unread messages.
#configure your details here user = "" #reddit username password = "" #reddit password delay = 60*5 #delay in seconds between checking mail #dont you dare look down past here!!! import time import pywinusb.hid as hid import reddit def get_device(): all_devices = hid.HidDeviceFilter(vendor_id = 0x1294).get_devices() if len(all_devices)==0: print "Can't find target device" else: return all_devices[0] return null def set_color(device,color): for report in device.find_output_reports(): if 4278190081 in report: report[4278190081] = [color,0,0,0,0] report.send() if __name__ == '__main__': try: d = get_device() d.open() set_color(d,0) r = reddit.Reddit(user_agent="redmail") r.login(user=user,password=password) inbox = r.get_inbox() while True: new = inbox.get_new_messages(force=True) if len(new) > 0: set_color(d,2) else: set_color(d,0) time.sleep(delay) finally: d.close() exit()
And done, Reddit orangered’s on my desk.
The Github project: https://github.com/willwharton/redmail