4.6 KiB
About The Project
I love having plants around but I often forget to water them or how much to water them. So I initially started this project to just check if soil was dry and have a small piezo buzzer go off when a plant needed water. Well things escalated as I wanted to add features and now I'm at the point where it's a multi-system product with multiple moving parts.
Where the project is now
At this point the project consists of:
- Probe nodes that record soil moisture data
- Reporter node that collects and sends the probe data to an API
- An API that serves to both the reporter node and a front-end client
- Front-end client that provides a web interface for viewing the collected plant moisture data.
Where the project is going
The end goal is to have the probe nodes collect soil moisture, soil temperature, relative humidity, air temperature and light spectrum values. With all this information I'm hoping to be able to optimism plant health and maybe even help figure out resource distribution for farming... but that's years down the road.
Built With
This project is built on the following technologies:
Project Structures:
- plant-browser: Front-end client.
- SoilMoistureAPI: Backend API.
- Eagle: PCB project for soil nodes.
- batteryValidationTest: Arduino project for testing batteries.
- soilReporterNode: Arduino project for probe notes to report and forward data to API.
- soilProbeNode: Arduino project for gathering plant information.
Requirement (Client and API)
- Node: v22.12.0
- NPM: v10.9.0
- Docker: v27.4.0
Requirement (Hardware)
- Arduino IDE: v10
- WiFiManager
- Additional Boards: (https://espressif.github.io/arduino-esp32/package_esp32_index.json)
- XAIO ESP32C6
- Soil Sensor 2.0
- Miscellaneous electrical components
Installing for Local Development:
API:
You will need to modify a few things int he API project for local development.
- program.cs
options.ListenAnyIP(80) --> options.ListenAnyIP(8000)
- appsettings.json
"DefaultConnection": "Data Source=app/data/SoilMoisture.db" --> "DefaultConnection": "Data Source=SoilMoisture.db"
Then just click "http" to run the API.
Install client dependencies:
From the client folder
Install dependencies
npm install
Run the Client:
ng s
Building Images:
Building images for runtime distrobution
API image:
Build docker image
docker build --no-cache -t plantpal-api:latest .
Tag image
docker image tag plantpal-api 192.168.1.193:5000/plantpal-api
Push to registry
docker push 192.168.1.193:5000/plantpal-api
Client image:
Building images for runtime distrobution
Build docker image
docker build -t plantpal-client:latest .
Tag image
docker image tag plantpal-client 192.168.1.193:5000/plantpal-client
Push to registry
docker push 192.168.1.193:5000/plantpal-client
Running Docker Images:
Create Docker Network
Create new docker network for the containers to communicate
docker network create soilmoisture_network
Run API Image
docker run -d --name plantpal_api --network soilmoisture_network -p 8000:80 plantpal_api:latest
Run Client Image
docker run -d --name plantpal_client --network plantpal_network -p 3000:80 plantpal_client:latest
Docker Compose:
optionally You can also use docker compose with the file at the root
docker-compose up -d --build
Roadmap
- Functional API
- Functional Client
- Functional reporter node
- Functional prob node
- Unraid integration
- Initial PCB design
Contributing
Currently this is closed to contributing till V1 is functional.
License
Distributed under the MIT License. See MIT License for more information.
Contact
Christopher Koch - ckoch@lazypug.net
Project Link: https://github.com/programmingPug/houseplant
