Over the past couple of months I have been working on a project called ArduinoGateway. The goal of this project is to create a public gateway that enables me to access data from several Arduinos on my home network, while keeping my home network safe and sound. I have designed this server to connect to Arduinos that are running the RestServer library and that are connected via either ethernet or serial.
At this point, this application is still a work in progress. It is working pretty well when handling request related to a single Arduino that is connected via Ethernet. This means I have a long way to go before I can get this server working with multiple Arduinos connected via both serial and ethernet. However, I thought it was time that I started to document the work that I have done thus far.
Let’s me start off by sharing the git repository where the code is located. For the first time I have been using the git milestone and issue tracking functionality to help me plan my development efforts. On a personal level, I’ve found this to be very helpful. On a communal level, anyone who is interested can find out what I are the features that I am planning to work on soon.
This is the most complex Ruby application that I have built to date. Therefore, I have been trying to think through how I want to application to be structured at an architecture level to help guide my coding efforts. This has been very helpful. Of course, this process is much very bi-directional – I first took a stab at the architecture then I wrote some code and went back and revised the architecture based on what I learned from working on the code.
Here are the most recent architecture schematics that I’ve developed. The first one provides an overview of the communication architecture between the application controller, and the public server and Arduino client interfaces. The second one maps out the data model for this application. The last features an overview of all the classes and modules that make up this application (though I’ll admit that this last one is already a bit out of date).