{"id":50811377,"url":"https://github.com/pzzzy/eversmart","last_synced_at":"2026-06-13T05:04:05.701Z","repository":{"id":363229429,"uuid":"1262416150","full_name":"pzzzy/eversmart","owner":"pzzzy","description":"Authenticated Eversource smart-meter retrieval and local dashboard","archived":false,"fork":false,"pushed_at":"2026-06-08T02:57:43.000Z","size":67,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T03:18:13.957Z","etag":null,"topics":["dashboard","data-export","energy","eversource","opower","python","smart-meter","utility-data"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pzzzy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2026-06-08T00:58:29.000Z","updated_at":"2026-06-08T02:57:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pzzzy/eversmart","commit_stats":null,"previous_names":["pzzzy/eversmart"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/pzzzy/eversmart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pzzzy%2Feversmart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pzzzy%2Feversmart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pzzzy%2Feversmart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pzzzy%2Feversmart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pzzzy","download_url":"https://codeload.github.com/pzzzy/eversmart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pzzzy%2Feversmart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34272619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"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":["dashboard","data-export","energy","eversource","opower","python","smart-meter","utility-data"],"created_at":"2026-06-13T05:04:04.740Z","updated_at":"2026-06-13T05:04:05.692Z","avatar_url":"https://github.com/pzzzy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eversmart\n\nEversmart is a small Python utility for authenticated Eversource / Oracle Opower smart-meter data retrieval. It logs in to the Eversource DataBrowser experience, discovers Opower metadata, downloads available interval reads, and builds a self-contained local dashboard.\n\nThis repository is designed as a privacy-preserving public release: no live account data, cookies, tokens, generated dashboard output, photos, or scraped data snapshots are included.\n\n## Features\n\n- Direct Eversource login using credentials from `.env`.\n- Optional reuse of a Netscape-format cookie jar.\n- Opower DataBrowser token/entity discovery.\n- GraphQL retrieval for:\n  - usage interval reads\n  - cost interval reads\n  - rated pricing components\n  - weather rows when available\n  - bill-history summaries\n  - demand maxima\n  - service-point metadata\n- Optional Green Button export audit/backfill.\n- Timestamped local run directories under `data/`.\n- Self-contained `dashboard.html` generation from local CSV/JSON snapshots.\n- Regression tests for parsing, token refresh, dashboard aggregation, warning handling, and chart null handling.\n\n## Privacy and safety model\n\nThis tool handles authenticated utility-account information. Treat output as private.\n\nNever commit or share:\n\n- `.env`\n- `.eversource_cookies.txt`\n- `cookieinfo.txt`\n- `.opower_access_token`\n- `data/`\n- generated `dashboard.html` files containing real account data\n- screenshots or meter photos tied to a live account\n- account IDs, service agreement UUIDs, service point UUIDs, cookies, access tokens, or bill data\n\nThe included `.gitignore` blocks the common sensitive artifacts.\n\n## Requirements\n\n- Python 3.11+\n- Standard-library-only runtime for the core scraper/dashboard\n- Network access to Eversource and Opower endpoints\n\n## Configuration\n\nCopy the example env file and fill in local credentials:\n\n```sh\ncp .env.example .env\nchmod 600 .env\n```\n\n`.env`:\n\n```sh\nEVERSOURCE_LOGIN=your-login-here\nEVERSOURCE_PASS=your-password-here\nEVERSMART_ACCOUNT=your-account-id-here\nEVERSMART_ENTITY_ID=your-opower-entity-id-here  # optional; normally discovered\n```\n\nYou can also pass the account/service-point id explicitly:\n\n```sh\npython3 eversmart.py --account 'your-account-id' --out data\n```\n\n## Usage\n\nRun tests:\n\n```sh\npython3 -m unittest discover -v\n```\n\nVerify login and DataBrowser token extraction:\n\n```sh\npython3 eversmart.py --login\n```\n\nRetrieve currently available data:\n\n```sh\npython3 eversmart.py --account 'your-account-id' --out data\n```\n\nPoll periodically. This is near-real-time in the sense of repeatedly collecting newly published utility intervals; it is not live meter telemetry.\n\n```sh\npython3 eversmart.py --account 'your-account-id' --poll 900 --out data\n```\n\nRequest a specific interval/resolution:\n\n```sh\npython3 eversmart.py \\\n  --account 'your-account-id' \\\n  --interval '2026-06-03T00:00:00-04:00/2026-06-06T00:00:00-04:00' \\\n  --resolution QUARTER_HOUR \\\n  --out data\n```\n\nOptional Green Button audit/backfill:\n\n```sh\npython3 eversmart.py --account 'your-account-id' --out data --green-button\n```\n\nDo not run Green Button exports on every poll; they start server-side export jobs.\n\n## Output layout\n\nEach successful poll creates a timestamped directory under `data/` with files such as:\n\n- `metadata.json`\n- `usage_*.json`, `cost_*.json`, `pricing_*.json`, `weather_*.json`, `demand_maxima_*.json`\n- `usage.csv`, `cost.csv`, `pricing.csv`, `weather.csv`, `bills.csv`, `demand_maxima.csv`, `service_points.csv`\n- `manifest.json`\n- optional `green_button.zip`, `green_button_rows.csv`, `green_button_manifest.json`\n\nThe scraper also regenerates a self-contained dashboard:\n\n```sh\nopen dashboard.html\n```\n\nDo not publish the generated dashboard if it was built from real data.\n\n## Dashboard interpretation notes\n\n- Opower may publish new usage rows before corresponding monetary cost rows.\n- The dashboard estimates missing/zero same-day cost from rated component price when available.\n- Weather data is sparse and daily; missing temperature values are treated as missing, not zero.\n- `billForecast` can fail upstream while core usage/cost data succeeds; the tool records that as an optional warning.\n\n## Physical meter notes\n\n`meter_inventory.md` and `meter_inventory.json` document sanitized Itron Gen5 Riva observations and capability notes. Live meter serials, barcodes, module IDs, photos, and account mappings were redacted for the public release.\n\n## Development\n\n```sh\npython3 -m unittest discover -v\npython3 -m py_compile eversmart.py dashboard.py cookie_convert.py test_eversmart.py\n```\n\n## Security policy\n\nSee `SECURITY.md`. Do not disclose credentials, cookies, tokens, account numbers, service UUIDs, or account-derived data in public issues.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpzzzy%2Feversmart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpzzzy%2Feversmart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpzzzy%2Feversmart/lists"}