Inspiration
We wanted to learn and do something cool in this Hackathon. We have worked in a building automation and control application for small and medium sized building, called Building Energy Management Open Source Software (BEMOSS) (www.bemoss.org), and thought it would be cool to integrate it with Alexa. Alexa can already control many smart-home appliances, but BEMOSS has a much more comprehensive coverage and there are tons of other features/possibilities such as scheduling and automating. Letting Alexa interface with BEMOSS will give nice accessibility to the basic functions, especially for those who aren't very tech-savy to use the techy BEMOSS interface. That's how this project helps the society. :)
What it does
Out of the many functionalities of BEMOSS, we have addressed two primary functionalities i) Change the value of any variable of any device connected in the BEMOSS system. ii) Get the value of any variable of any device connected in the BEMOSS system. The AlexaSkill we developed in the hackathon lets the user do those things. Besides those main tasks, there are auxiliary tasks that has been accomplished (or will be accomplished by the time we will submit the code) i) Set the AlexaSkill to link up with a BEMOSS server of choice ii) Configure the AlexaSkill with appropriate authentication token so that the BEMOSS will know the commands are coming from trusted party.
How we built it
We used django framework to serve as a remote end point for BEMOSS. We used urllib from Lambda function to connect to BEMOSS. We used dyanamoDB to save persistent user data (IP address and authentication token of users). We used the Alexa Skill kit to parse the user speech and send it to BEMOSS.
Challenges we ran into
Setup Alexa to connect to WiFi, create amazon developer account and link with alexa, create Alexa Skills, create a Lambda function and link with Alexa Skill, create a DynamoDB table and connect from Lambda function, create new aws IAM roles with fullDyanmoDBAccess and you will be set. Sounds straight forward and easy in the hindsight only. There were a lots of learning to be done, and lots of bugs to be killed.
Accomplishments that we're proud of
It works! Really! :)
What we learned
Amazon AWS provides tons of good stuff. Alexa is cool. Amazon DynamoDB can be used to store user information. But, one upsetting fact we learned is that Alexa is not 100% accurate in its voice recognization (which can be overlooked, and really who is 100% accurate? ), but it was also found not to be consistent on mapping the voice recognized sentences to invocation patterns; especially with AMAZON.Literal datatypes. There were cases in which a regex parser would have easily done a better job.
What's next for BEMOSS-Commander
Try to get rid of the AMAZON.Literal datatypes for matching variable names to improve accuracy. For this a huge list of possible and practical device variable names should be compiled. Also, we need to increase the coverage of our invocation patterns, since the current coverage is tiny and just proof-of-concepty. And, we need to have a proper oath based authentication mechanism for user to link with their BEMOSS instead of the hacky method we have now. Currently, we require the user to spell out the IP address (how much more funny can it be than that?)
Log in or sign up for Devpost to join the conversation.