.Net, Azure and occasionally gamedev
I've been building a home automation app for a while now and have actually had multiple (semi) working versions for a while now.
The app captures images from cameras each time motion is detected or someone rings the doorbell and pushes them to the server.
Any (app) user then receives push notifications when someone moves in front of the house or rings the doorbell.
The user can then see a history of images (by date and time) and also watch a livefeed from any of the cameras.
In addition the app allows controlling toggles (turn lights/air condition/etc. on/off) as well as open door/garage.
The downside was that due to originally building the app on IIS and then porting it to Azure it didn't really make use of the cloud platform.
It was a single web app (with local data storage) the client running in-house has become a single monolithic application (mono based console app on a raspberry pi) that handled image scaling, upload toggle states, livefeed (which was just a series of jpeg images) and on top of it it was hardwired to the specific cameras.
All in all it was working but I couldn't really scale it to multiple homes due to the architecture and I didn't really take advantage of any of the Azure services.
A full rebuild (with the knowledge from the working versions) thus allows me to change the architecture to be scalable and also allows me to use services that I hadn't used before (Logic Apps, IoTHub and its device twin feature, ...).
In addition I can actually build it in a DevOps manner with microservices that are deployed individually instead of having monolithic server architecture.
Making it scale for multiple users would also open way to making it a commercial product with ease of setup in mind (most existing home automation solutions require you to either modify ini files or fix broken python code - not exactly user friendly).
I've already come up with a preliminary architecture that I want to implement:
(Home Automation App infrastructure overview)
The architecture is intended to be flexible and scalable (I already have some people interested in it because the solutions they use are both expensive and less than satisfying).
I'll be writing a series of blog posts on my decisions and progress but since its a hobby project I'll do most of my work on weekends, so don't expect weekly updates (or constant progress).