IOT Home application Part 1
A Next.js and Golang Based Smart Home Application
Background
IOT Home is an application I created to help manage my smart Home. The application allows me to control lights and switches in my house, providing me with a convenient and intuitive way to manage my home automation.
My inspiration for IOT Home came from Home Assistant, an open-source home automation software that can connect with many smart devices. I wanted to create a similar application that I could use daily, with a focus on controlling lights and switches. I also wanted to explore a variety of technologies and integrate them into my project.
Application Overview
IOT Home is a web application that provides a dashboard to control lights and switches in my home. The application's current focus is on controlling lights and switches, but it can be extended to control other smart home devices in the future.
Here's a preview of the application we will be building:
App features
Below is a list of features to build for my first minimal version of the app.
Authentication
Users can log in to the dashboard
Users can logout of the account
Users can signup for an account
Rooms
Users can create a room
Users can view all the rooms created
Users can delete rooms
Devices
Users can add a device to a room
Users can view all devices in a room
Users can see the status of the device
check if the device is currently connected
check if the device is currently on
Users can access the settings page of a device
Users can switch a device on or off
Users can delete a device
Device type can support
Application Architecture
Below is a simple architecture diagram that shows the interaction between the different components of the application that I will be working on. The initial communication protocol between the device and the server will be through REST API, similar to the communication between the server and the front end. Our data will be persistent through the use of a database in which we can insert and modify the data through SQL queries.
Tech stack
Some of the main technologies I will be using are listed below:
Next.js
Golang
Sqlite3
Next.js
Next.js is a React-based web framework that I will be using to write my frontend part of the application. I like Next.js as they simplify development for my project. It uses a built-in router that automatically generates routes based on the file system structure of the project. Next.js also uses TypeScript which helps in static type checking in JavaScript code.
Golang
I plan to use Golang as my backend server programming language due to its simplicity, efficiency and concurrency support. It is a popular language for building backend services.
SQLite3
SQLite3 is a lightweight relational database management system that is used in small-scale applications. I believe that utilizing SQLite3 will provide me with an opportunity to enhance my knowledge about relational databases and their optimization techniques.
I don't think this is a perfect guide to creating an application but more of a documentation of my thought process and difficulties when developing an application from scratch.
Check out part 2 on creating a backend server with Golang and Gin