Skip to content

Instantly share code, notes, and snippets.

@jamesbulpin
Created December 18, 2016 20:44
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 jamesbulpin/b16b46ba19d81408909f349d45d5286b to your computer and use it in GitHub Desktop.
Save jamesbulpin/b16b46ba19d81408909f349d45d5286b to your computer and use it in GitHub Desktop.
Alexa Smart Home Skill adapter to talk to Octoblu
import urllib
import urllib2
octoblu_trigger_start = "https://triggers.octoblu.com/v2/flows/16ddf358-c562-11e6-9d9d-cec0c932ce01/triggers/2f9ab37c-c562-11e6-9d9d-cec0c932ce01"
octoblu_trigger_stop = "https://triggers.octoblu.com/v2/flows/16ddf358-c562-11e6-9d9d-cec0c932ce01/triggers/24d91730-c562-11e6-9d9d-cec0c932ce01"
def lambda_handler(event, context):
access_token = event['payload']['accessToken']
if event['header']['namespace'] == 'Alexa.ConnectedHome.Discovery':
return handleDiscovery(context, event)
elif event['header']['namespace'] == 'Alexa.ConnectedHome.Control':
return handleControl(context, event)
def handleDiscovery(context, event):
payload = ''
header = {
"namespace": "Alexa.ConnectedHome.Discovery",
"name": "DiscoverAppliancesResponse",
"payloadVersion": "2"
}
if event['header']['name'] == 'DiscoverAppliancesRequest':
payload = {
"discoveredAppliances":[
{
"applianceId":"xmasparty",
"manufacturerName":"James Bulpin",
"modelName":"Octoblu",
"version":"v0.1",
"friendlyName":"Christmas Party",
"friendlyDescription":"Christmas Party!",
"isReachable":True,
"actions":[
"turnOn",
"turnOff"
]
}
]
}
return {"header":header, "payload":payload}
def handleControl(context, event):
payload = ''
device_id = event['payload']['appliance']['applianceId']
message_id = event['header']['messageId']
obmsg = {"debug":event}
cfm = ""
url = None
if event['header']['name'] == 'TurnOnRequest':
cfm = "TurnOnConfirmation"
url = octoblu_trigger_start
else:
cfm = "TurnOffConfirmation"
url = octoblu_trigger_stop
if url:
data = urllib.urlencode(obmsg)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
payload = { }
header = {
"namespace":"Alexa.ConnectedHome.Control",
"name":cfm,
"payloadVersion":"2",
"messageId": message_id
}
return {"header":header, "payload":payload}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment