Hello eh! There may only be one thing that my sweet home Canada lacks, it's the availability of Amazon Echo devices. No matter, I found a will and a way! As soon as it arrived, I brainstormed heavily to conceive a project. A long time friend of mine had just got his new 3D printer ( a Prusa i3 type ) and I had to go see it (p.s. I'm a bit of a 3D printing nut). The printer was in his garage due to noise, what a shame. Going to check its progress was a bit of a pain, so I thought, why not have Alexa (the virtual assistant living in an Echo device) tell me the progress from the** comfort** of his living room?
What it does
In essence, my skill expands the Internet-of-Things to a maker-favorite: 3D printers. A user can ask Alexa for details on any number of 3D printers and their current print jobs. The custom Alexa skill uses a streamlined natural interaction model to retrieve information from an AWS DynamoDB ... database. This information includes hot-end temperature, bed temperature, minutes remaining, and the name of the part being printed. Information can be returned in one batch, or as individual responses, according to the question.
How I built it
The skill relies on an AWS Lambda function written in Node.js (my preferred way to program Alexa) to handle the API calls for DynamoDB (A non-relational database in the cloud). The project architecture involves each printer being its own database object, therefore, one user can have any number of printers with information in the cloud. The intuitive intent schema has a custom slot type (a variable to be passed from voice to code) which represents the name of a given printer. This string is passed into Lambda and used as the primary key to retrive information from the noSQL database. The database is designed to be fed information from a raspberry pi running Octoprint.
Challenges I ran into
This was my first time using an API with the Lambda, so there was a bit of a learning curve to experience. It took me a while to realize that the data returned from the database only existed in the scope of the API call.
What I learned
I learned about non-relational databases, good practices for natural technology interaction, and implementing APIs.