Skip to content

Personal dashboard for E-Ink displays showing calendar events and weather.

License

maxexcloo/dailydisplay

Repository files navigation

Daily Display

License Status Docker Python

Personal dashboard for E-Ink displays showing calendar events and weather. Python Flask server + Arduino ESP32 client for M5Paper S3.

Quick Start

Client

  1. Set WiFi/server credentials in client/client.ino
  2. Flash to M5Paper S3 using Arduino IDE

Server

# Set configuration
export CONFIG='{
  "user_hash": {
    "timezone": "America/New_York",
    "weather_location": "New York, NY",
    "caldav_urls": "https://user:[email protected]/cal.ics"
  }
}'

# Run with Docker (recommended)
docker run -d -p 7777:7777 -e CONFIG="$CONFIG" --restart unless-stopped ghcr.io/max.schaefer/dailydisplay:latest

# Or with docker-compose
docker-compose up -d

Features

  • Auto-refresh: Hourly background updates
  • Calendar: CalDAV integration with timezone support
  • E-ink optimized: Grayscale PNG rendering
  • Multi-user: Multiple dashboard configurations
  • Weather: Open-Meteo API with day/night icons

Installation

Docker Compose (Recommended)

services:
  dailydisplay:
    image: ghcr.io/max.schaefer/dailydisplay:latest
    ports: ["7777:7777"]
    restart: unless-stopped
    environment:
      CONFIG: |
        {"user_hash": {"timezone": "America/New_York", "weather_location": "New York"}}

Docker Run

docker run -d -p 7777:7777 -e CONFIG='{"user_hash":{"timezone":"America/New_York","weather_location":"New York"}}' ghcr.io/max.schaefer/dailydisplay:latest

Local Development

cd server && python app.py

Usage

API

  • GET / - Health check
  • GET /<user_hash> - HTML dashboard
  • GET /<user_hash>.png - PNG for e-ink display

Architecture

Client (client/client.ino): ESP32 firmware polls PNG endpoint, renders to M5Paper S3 display

Server (server/app.py): Flask app fetches calendar/weather data, generates PNGs with Playwright

Configuration

Single environment variable contains JSON config:

{
  "user_hash": {
    "timezone": "America/New_York",
    "weather_location": "New York, NY", 
    "caldav_urls": "https://user:[email protected]/cal.ics,https://user:[email protected]/work.ics",
    "caldav_filter_names": "personal,work"
  }
}

Dependencies

Client: FastEPD, HTTPClient, NTPClient, PNGdec

Server: CalDAV, Flask, Gunicorn, iCalendar, Playwright

Pre-built Docker images available for linux/amd64 and linux/arm64 via GitHub Actions.

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature-name
  3. Make changes following the code standards in CLAUDE.md
  4. Test locally: cd server && python app.py
  5. Submit a pull request

Troubleshooting

  • Client issues: Check WiFi credentials and server URL
  • No events: Check CalDAV URL format (https://user:pass@host/path.ics)
  • No weather: Verify location name spelling
  • PNG errors: Playwright dependencies missing

License

This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.

About

Personal dashboard for E-Ink displays showing calendar events and weather.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 3

  •  
  •  
  •