-
-
Save Aractor/03b5832e558e78b616b7ee332315df9f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
import struct | |
import binascii | |
import time | |
import json | |
import urllib2 | |
# Use your own IFTTT key, not this fake one | |
ifttt_key = 'xxxxxxxxxxxxxxxxxxxxx' | |
# Set these up at https://ifttt.com/maker | |
ifttt_url_button1 = 'https://maker.ifttt.com/trigger/button_1/with/key/' + ifttt_key | |
ifttt_url_button2 = 'https://maker.ifttt.com/trigger/button_2/with/key/' + ifttt_key | |
# Replace these fake MAC addresses and nicknames with your own | |
macs = { | |
'34545555e7ad' : 'dash-btn1', | |
'48d703450d65' : 'dash-btn2', | |
} | |
# Trigger a IFTTT URL. Body includes JSON with timestamp values. | |
def trigger_url(url): | |
data = '{ "value1" : "' + time.strftime("%Y-%m-%d") + '", "value2" : "' + time.strftime("%H:%M") + '" }' | |
req = urllib2.Request(url, data, {'Content-Type': 'application/json'}) | |
f = urllib2.urlopen(req) | |
response = f.read() | |
f.close() | |
return response | |
def button_1(): | |
print 'triggering button1 event, response: ' + trigger_url(ifttt_url_poop) | |
def button_2(): | |
print 'triggering button2 event, response: ' + trigger_url(ifttt_url_pee) | |
rawSocket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003)) | |
while True: | |
packet = rawSocket.recvfrom(2048) | |
ethernet_header = packet[0][0:14] | |
ethernet_detailed = struct.unpack("!6s6s2s", ethernet_header) | |
# skip non-ARP packets | |
ethertype = ethernet_detailed[2] | |
if ethertype != '\x08\x06': | |
continue | |
# read out data | |
arp_header = packet[0][14:42] | |
arp_detailed = struct.unpack("2s2s1s1s2s6s4s6s4s", arp_header) | |
source_mac = binascii.hexlify(arp_detailed[5]) | |
source_ip = socket.inet_ntoa(arp_detailed[6]) | |
dest_ip = socket.inet_ntoa(arp_detailed[8]) | |
if source_mac in macs: | |
#print "ARP from " + macs[source_mac] + " with IP " + source_ip | |
if macs[source_mac] == 'dash-btn1': | |
button_1() | |
if macs[source_mac] == 'dash-btn2': | |
button_2() | |
else: | |
print "Unknown MAC " + source_mac + " from IP " + source_ip |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Script updated to support multiple Amazon Dash buttons connecting to IFTTT.