Automated Home Caretaker App
This project was sponsored by John Arens through BYU-I. The goal was to create a seamless smart home experience to control essential home appliances and functions.
As a multiple home owner John has experienced certain troubles concerning the caretaking of his properties when he is away. For example, the water in toilets evaporating which allows for sewer gases to enter the home, or having a water heater left on, or wanting to turn other utilities on ahead of arriving. As the lead software developer for this project my goal was to create a app that can be utilized on either IOS or Android, to remotely control things like a water heater dial, a toilet flusher (To allow for fresh water in the bowl to prevent evaporation), and other future appliances such as lights, lawn care, etc.
This app and product prototype is intended for future development and market release, so it is important to create an app from scratch and avoid using other IoT apps like Blynk or Virtuino. Since cross platform development was needed I settled with React Native as the development framework of choice. To communicate with our smart devices, an MQTT server was provided using HiveMQ, and the JavaScript Paho MQTT library was used to facilitate connection between the app, MQTT server, and microprocessor. Our microprocessor of choice was the ESP32. This allows for easy programming through ESP-IDF, and low power, reliable commincation through the ESP-NOW protocol. Since both the app and the hub device needed to send and receive information, multiple subscription topics were required to facilitate easy commincation through the MQTT server.

The following screenshots show the design and function of the app. The UI/UX, features, and styling were planned in advance in collaboration with the sponsor and aligned with the IEEE 29148-2018 standard for software requirements specifications. The main function of the app serves to have a home page that displays all active smart devices, a My Home page to calibrate, add, or remove smart devices, and then individual smart device controls which includes current smart device battery life.
A video demonstration of the water heater controls and scheduling can be seen here.
Final Project demonstration
As seen in the video, you will see that the app can wirelessly control the water heater dial by sending and receiving MQTT messages. It displays the current position, allows preset calibration, and supports scheduled future adjustments. Note that the jittery servo motor is caused by a poor reference ground in the prototype design that will be further developed before production.
The full open source code for this project can be found on my GitHub here.