This repository contains a collection of services for a personal weather station project, designed to be deployed on Google Cloud Platform (GCP). It ingests data from a Pimoroni Enviro Weather device, stores it, and provides multiple interfaces for viewing and analyzing the data.
- Data Ingestion: Receives weather data via an HTTP endpoint.
- Data Storage: Stores time-series weather data in a Firestore NoSQL database.
- Web Dashboard: A responsive web page to view the latest weather conditions.
- Interactive Analysis: An interactive dashboard for analyzing historical data over custom time periods.
- Natural Language Queries: A chatbot interface (powered by Gemini) to ask questions about the weather data.
- Image Classification: A service to classify weather images into categories like sunny, cloudy, raining, etc.
The project is organized into several microservices:
| Directory | Description |
|---|---|
get-weather-data |
A service to retrieve weather data from an external source. |
store-weather-data |
A GCP Cloud Run function that provides an HTTP endpoint to accept and store readings from the Enviro Weather device in Firestore. |
display-weather-data |
A service to display the collected weather data. |
interactive_dashboard |
A Dash-based interactive dashboard for detailed data analysis. |
weather-chat |
A chatbot application that uses a Large Language Model (Gemini) to answer natural language questions about the weather data. |
weather-image-classifier |
A service that uses a Gemini 2.0 Flash Lite model to classify weather images. |
weather-dashboard |
A Flask-based web application that serves a responsive dashboard to view current and historical weather data. |
kill-switch |
A utility to stop or disable services. |
The services are designed to be deployed as individual Cloud Run functions on GCP. Deployment can be done using the gcloud CLI. While detailed, user-specific instructions are not provided, each service's directory contains a requirements.txt and some have a Dockerfile to facilitate containerization and deployment.



