{"id":49718671,"url":"https://github.com/b0x42/pi-weather-ink","last_synced_at":"2026-05-08T22:13:58.037Z","repository":{"id":334917767,"uuid":"932229580","full_name":"b0x42/pi-weather-ink","owner":"b0x42","description":"Raspberry Pi weather station with Waveshare 2.13\" bi-color and monochrome e-Paper display","archived":false,"fork":false,"pushed_at":"2026-04-23T10:57:29.000Z","size":636,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-23T12:27:41.443Z","etag":null,"topics":["e-paper","epaper-display","home-automation","iot","pirate-weather","python","raspberry-pi","waveshare","weather-station"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/b0x42.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-02-13T15:25:47.000Z","updated_at":"2026-04-23T10:57:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/b0x42/pi-weather-ink","commit_stats":null,"previous_names":["benjaminburzan/weatherstation-epaper","b0x42/weatherstation-epaper","b0x42/pi-weather-ink"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/b0x42/pi-weather-ink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b0x42%2Fpi-weather-ink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b0x42%2Fpi-weather-ink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b0x42%2Fpi-weather-ink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b0x42%2Fpi-weather-ink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/b0x42","download_url":"https://codeload.github.com/b0x42/pi-weather-ink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b0x42%2Fpi-weather-ink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32799475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"ssl_error","status_checked_at":"2026-05-08T08:22:45.650Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["e-paper","epaper-display","home-automation","iot","pirate-weather","python","raspberry-pi","waveshare","weather-station"],"created_at":"2026-05-08T22:13:57.209Z","updated_at":"2026-05-08T22:13:58.032Z","avatar_url":"https://github.com/b0x42.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003ePi Weather Ink\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.python.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Python-3-blue.svg\" alt=\"Python 3\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.raspberrypi.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Raspberry%20Pi-Compatible-c51a4a.svg\" alt=\"Raspberry Pi\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pirateweather.net/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Pirate%20Weather-API-purple.svg\" alt=\"Pirate Weather\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-green.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/pi-weather-ink-display.jpeg\" alt=\"Pi Weather Ink Display\" width=\"509\"\u003e\n\u003c/p\u003e\n\nA Raspberry Pi weather station with Waveshare 2.13\" e-Paper displays. Supports multiple display models (bi-color and monochrome). Shows current temperature, daily max, and weather summary.\n\n- Current temperature, daily max temperature with a beautiful weather icon\n- Multi-language weather summaries\n- 10 supported Waveshare 2.13\" display models (bi-color and monochrome)\n- Desktop development with built-in e-Paper emulator\n\n## Table of Contents\n\n- [Quick Start](#quick-start)\n- [What You Need](#what-you-need)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Usage](#usage)\n- [Supported Display Models](#supported-display-models)\n- [Development \u0026 Testing](#development--testing)\n- [Troubleshooting](#troubleshooting)\n- [File Structure](#file-structure)\n- [Credits](#credits)\n- [License](#license)\n\n## Quick Start\n\n\u003e **TL;DR** - Get a free [Pirate Weather API key](https://pirate-weather.apiable.io/products/weather-data/plans), then run:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/b0x42/pi-weather-ink/main/install.sh | bash\n```\n\nThe installer sets up everything: dependencies, SPI, configuration, and an optional systemd service. See [Installation](#installation) for manual setup.\n\n## What You Need\n\n### Hardware\n- Raspberry Pi (Zero W, 3, 4, or 5)\n- Any Waveshare 2.13\" e-Paper display (see [Supported Display Models](#supported-display-models))\n- Internet connection\n\n### Software\n- Free [Pirate Weather API key](https://pirate-weather.apiable.io/products/weather-data/plans)\n- Raspberry Pi OS, DietPi, or Debian-based Linux distro\n- DejaVu Sans Bold font (pre-installed on Raspberry Pi OS and DietPi)\n\n## Installation\n\nRun the installer on your Raspberry Pi — it handles SPI, dependencies, configuration, and the systemd service:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/b0x42/pi-weather-ink/main/install.sh | bash\n```\n\n\u003e **Prefer manual setup?** Follow the step-by-step [Manual Installation Guide](docs/MANUAL_INSTALL.md) (pipx or venv).\n\n### Updating\n\nTo update, simply re-run the installer — it detects the existing installation, upgrades the application, and keeps your configuration.\n\n### Uninstalling\n\nSee the [Uninstall Guide](docs/MANUAL_INSTALL.md#uninstall) for step-by-step removal instructions.\n\n## Configuration\n\nAll settings are configured via environment variables in your `.env` file.\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `PIRATE_WEATHER_API_KEY` | Your Pirate Weather API key | **Required** |\n| `LATITUDE` | Your location's latitude | 52.5200 (Berlin) |\n| `LONGITUDE` | Your location's longitude | 13.4050 (Berlin) |\n| `LANGUAGE` | Weather summary language ([see options](https://pirateweather.net/en/latest/API/#language)) | de |\n| `UNITS` | `si` for Celsius, `us` for Fahrenheit | si |\n| `DISPLAY_MODEL` | Display model (see [Supported Display Models](#supported-display-models)) | epd2in13bc |\n| `FLIP_DISPLAY` | Set to `true` to rotate display 180° | false |\n| `UPDATE_INTERVAL_SECONDS` | How often to refresh (1800 = 30 min) | 1800 |\n\n## Usage\n\n### Manual Start\n\n```bash\ncd ~/pi-weather-ink\nsource venv/bin/activate\npi-weather-ink\n```\n\n### Run as System Service (recommended)\n\nFor automatic startup on boot:\n\n```bash\nsudo cp pi-weather-ink.service /etc/systemd/system/\nsudo systemctl daemon-reload\nsudo systemctl enable pi-weather-ink\nsudo systemctl start pi-weather-ink\n```\n\n**Check status:**\n```bash\nsudo systemctl status pi-weather-ink\n```\n\n**View logs:**\n```bash\ntail -f /var/log/pi-weather-ink.log\n```\n\n## Supported Display Models\n\nAll Waveshare 2.13\" e-Paper displays are supported:\n\n### 104×212 Resolution\n\n| Model | Type | Colors | Model ID |\n|-------|------|--------|----------|\n| [2.13\" e-Paper HAT (B)](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(B)_Manual) | Bi-color | Black/Red | `epd2in13bc` (default) |\n| [2.13\" e-Paper HAT (D)](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(D)_Manual) | Monochrome | Black/White | `epd2in13d` |\n\n### 122×250 Resolution\n\n| Model | Type | Colors | Model ID |\n|-------|------|--------|----------|\n| [2.13\" e-Paper HAT](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_Manual) | Monochrome | Black/White | `epd2in13` |\n| [2.13\" e-Paper HAT V2](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_Manual) | Monochrome | Black/White | `epd2in13_V2` |\n| [2.13\" e-Paper HAT V3](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_Manual) | Monochrome | Black/White | `epd2in13_V3` |\n| [2.13\" e-Paper HAT V4](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_Manual) | Monochrome | Black/White | `epd2in13_V4` |\n| [2.13\" e-Paper HAT (B) V3](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(B)_Manual) | Bi-color | Black/Red | `epd2in13b_V3` |\n| [2.13\" e-Paper HAT (B) V4](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(B)_Manual) | Bi-color | Black/Red | `epd2in13b_V4` |\n| [2.13\" e-Paper HAT (G)](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(G)_Manual) | 4-color | Black/White/Yellow/Red | `epd2in13g` |\n\n**Features:**\n- Bi-color displays: Red activates when current temp ≥ max temp\n- Layout automatically scales based on display resolution\n- All displays work with both hardware and emulator\n\n## Development \u0026 Testing\n\n### Development Configuration\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `USE_EMULATOR` | Use E-Paper-Emulator instead of hardware | false |\n| `USE_TKINTER` | Use Tkinter window instead of browser (only with emulator) | false |\n| `LOG_FILE_PATH` | Path to log file (use local path on macOS) | `/var/log/pi-weather-ink.log` |\n| `FONT_PATH` | TrueType font file (see [macOS font setup](#macos-install-font)) | `/usr/share/fonts/.../DejaVuSans-Bold.ttf` |\n\n### Quick Setup (macOS/Linux)\n\n```bash\n# 1. Clone and setup (includes E-Paper-Emulator and pytest)\ngit clone https://github.com/b0x42/pi-weather-ink.git\ncd pi-weather-ink\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -e \".[dev]\"\n\n# 2. Setup environment\ncp .env.example .env\n# Edit .env and add your PIRATE_WEATHER_API_KEY\n\n# 3. Run with emulator (opens in browser at http://localhost:5000)\nUSE_EMULATOR=true pi-weather-ink\n\n# Or use Tkinter window instead of browser\nUSE_EMULATOR=true USE_TKINTER=true pi-weather-ink\n```\n\n### macOS: Install Font\n\n```bash\n# DejaVu Sans is required (pre-installed on Raspberry Pi OS and DietPi)\nbrew install font-dejavu\n\n# Add to .env\necho \"FONT_PATH=~/Library/Fonts/DejaVuSans-Bold.ttf\" \u003e\u003e .env\n```\n\n### Test Different Display Models\n\n```bash\n# Bi-color (black/red) - opens in browser\nUSE_EMULATOR=true DISPLAY_MODEL=epd2in13bc pi-weather-ink\n\n# Monochrome (black/white) - opens in browser\nUSE_EMULATOR=true DISPLAY_MODEL=epd2in13d pi-weather-ink\n```\n\n**Note:** The emulator uses Flask and serves at http://localhost:5000 by default. Set `USE_TKINTER=true` if you prefer a native window.\n\n### Running Tests\n\n```bash\npython -m pytest tests/ -v\n```\n\n## Troubleshooting\n\nSee the [Troubleshooting Guide](docs/TROUBLESHOOTING.md) for solutions to common issues including display not updating, API errors, service problems, and the Pi Zero ReadBusy hang fix.\n\n## File Structure\n\n```\npi-weather-ink/\n├── install.sh                  # Automated installer for Raspberry Pi\n├── pi-weather-ink.service      # Systemd service file\n├── .env                        # Your configuration (create from .env.example)\n├── .env.example                # Configuration template\n├── pi_weather_ink/             # Main package\n│   ├── pi_weather_ink.py       # Main application\n│   ├── display_config.py       # Display configuration and module loading\n│   └── emulator_adapter.py     # E-Paper-Emulator adapter for testing without hardware\n├── icons/                      # Weather icon assets\n│   ├── icons.json              # Weather icon unicode mapping\n│   └── weathericons.ttf        # Weather icons font\n├── scripts/\n│   └── fix-pi-zero-readbusy.sh # Pi Zero ReadBusy hang fix script\n├── tests/                      # Test files\n│   ├── test_pi_weather_ink.py\n│   ├── test_display_config.py\n│   └── test_emulator_integration.py\n└── docs/\n    ├── TROUBLESHOOTING.md      # Troubleshooting guide (includes Pi Zero fix)\n    └── MANUAL_INSTALL.md       # Manual installation guide\n```\n\n## Credits\n\n- Weather icons: [Erik Flowers Weather Icons](https://github.com/erikflowers/weather-icons)\n- Weather data: [Pirate Weather API](https://pirateweather.net/)\n- e-Paper library: [Waveshare e-Paper](https://github.com/waveshareteam/e-Paper)\n\n## License\n\nMIT License - see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fb0x42%2Fpi-weather-ink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fb0x42%2Fpi-weather-ink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fb0x42%2Fpi-weather-ink/lists"}