HomeNode

HomeNode is a smart home system that is radically cheaper than traditional products while offering many of the same functionalities, including monitoring and controlling many different factors of home living, home automation (ex: watering plants), and intruder detection.

See full code for project here.

Architecture of project.

Tools / Techniques Used

Hosting

  • GitHub for version control + collaborating code sharing
  • docker-compose for faster build times + pushed to docker hub  
  • Digital Ocean droplet, server built by pulling the docker image from docker hub, then running it on the droplet

Backend

  • Backend server written in NodeJS with TypeScript
  • Express.js is the main library used for the server, to allow for middleware and routing
  • Index file connects to MongoDB using the mongoose library, listens on port 80 with the server, and sets up cronjobs
  • Server.js file sets up middleware for CORS, JSON, and serving static files.
  • The API routing passes data to the sensors, intruders, home, or users as specified, and calls functions for getting data, posting data, putting data, and deleting data, as specified.

Frontend

  • Created in React.js with TypeScript
  • UI was created using the npm library Chakra UI and code snippets from Choc UI
  • Axios used to send HTTP requests to communicate with the backend server
  • ReCharts was used to create the data visualizations

Raspberry Pi (Software perspective)

  • Sends requests and reads responses from the Arduinos using the serial library in Python
  • Converts the sensor data as Python objects with custom classes
  • JSON + Requests library to format and send data to the corresponding API endpoint

Arduino (Software perspective)

  • Algorithm to process raw sensor data and send significant average data to the central Raspberry Pi, by comparing to past data
  • Wokwi for testing and simulation
  • All Arduino boards are constantly checking the serial buffer to see if their respective address has been requested for data

Personal Contribution

I wrote code so that the raspberry PI reads from the serial line and converts that data into a Python dictionary. I implemented object-oriented programming to modularize the code and easily interface with all of the modules (intruder, sensors, and plants) as well as communicating with the server through the Python requests library. I also wrote unit tests and implemented continuous integration through GitHub actions for my Python code.