{"id":17649732,"url":"https://github.com/wiigg/enviro-station","last_synced_at":"2026-04-27T12:01:58.620Z","repository":{"id":49339637,"uuid":"487106433","full_name":"wiigg/enviro-station","owner":"wiigg","description":"Enviro Station captures and processes environmental data from edge devices and presents it in real-time","archived":false,"fork":false,"pushed_at":"2026-04-07T10:35:57.000Z","size":560,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-07T12:23:24.363Z","etag":null,"topics":["enviroplus","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wiigg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-29T20:47:37.000Z","updated_at":"2026-04-07T10:36:02.000Z","dependencies_parsed_at":"2025-06-21T17:23:34.777Z","dependency_job_id":"65ade95f-852a-4d2e-8059-53fc10281196","html_url":"https://github.com/wiigg/enviro-station","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wiigg/enviro-station","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiigg%2Fenviro-station","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiigg%2Fenviro-station/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiigg%2Fenviro-station/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiigg%2Fenviro-station/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wiigg","download_url":"https://codeload.github.com/wiigg/enviro-station/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiigg%2Fenviro-station/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32335297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["enviroplus","raspberry-pi"],"created_at":"2024-10-23T11:29:30.245Z","updated_at":"2026-04-27T12:01:58.615Z","avatar_url":"https://github.com/wiigg.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Enviro Station\n\nEnviro Station is an air quality monitoring platform with three services:\n\n- `device`: Raspberry Pi runtime that reads sensors and ingests readings\n- `backend`: Go API for ingest, storage, streaming, and AI insights\n- `dashboard-v2`: React dashboard for live and historical visibility\n\n## Architecture\n\n1. Device reads Enviro+ sensors and publishes live readings to the backend stream.\n2. Device batches durable uploads so the backend writes to Postgres less often.\n3. Dashboard uses the live stream for realtime updates and Postgres for longer-range history.\n4. If Postgres is down, the backend can still boot in live-only mode and retry durable storage later.\n\n## Repository Layout\n\n- `backend`: Go API + Postgres migrations\n- `device`: Python runtime with queue-based retry\n- `dashboard-v2`: Vite/React UI\n\n## Environment Files\n\nEach service tracks a single template file: `.env.example`.\nCreate a local runtime file by copying it to `.env`.\n\n## Quick Start\n\n### Backend + Postgres (Docker Compose)\n\n```bash\ncd backend\ncp .env.example .env\ndocker compose up --build\n```\n\nBackend runs on `http://localhost:8080`.\n\n### Dashboard\n\n```bash\ncd dashboard-v2\ncp .env.example .env\nnpm install\nnpm run dev\n```\n\n### Device\n\n```bash\ncd device\n./install.sh\ncp .env.example .env\nuv run python main.py\n```\n\n## Backend API\n\n- `POST /api/live` (requires `X-API-Key`; live stream only, no Postgres write)\n- `POST /api/ingest` (requires `X-API-Key`)\n- `POST /api/ingest/batch` (requires `X-API-Key`)\n- `GET /api/stream` (SSE live stream)\n- `GET /api/readings?limit=...`\n- `GET /api/readings?from=...\u0026to=...\u0026max_points=...`\n- `GET /api/readings?limit=...\u0026source=live`\n- `GET /api/insights?limit=...`\n- `GET /api/ops/events?limit=...`\n- `GET /health`\n- `GET /ready`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiigg%2Fenviro-station","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwiigg%2Fenviro-station","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiigg%2Fenviro-station/lists"}