IOT Home application Part 1

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