Skip to content

Repository files navigation

epaper-notifier

Un afficheur de notifications sur e-ink pour Raspberry Pi + écran Waveshare 2.13" e-Paper HAT (V2). N'importe lequel de tes projets lui envoie une notif — par HTTP ou via ntfy — et elle s'affiche à l'écran. Livré avec un petit dashboard web (aperçu live, envoi de test, réglage des topics) et un kit de flash qui prépare une carte SD prête à booter (Wi-Fi + Tailscale + auto-install).

Réutilisable par tous tes projets : ARGUS (surveillance) pousse déjà en ntfy → abonne l'afficheur au même topic, ses alertes s'affichent toutes seules. Tout projet qui publie sur ntfy ou fait un POST /notify apparaît pareil.

Rendu (250×122, N&B) — icône choisie selon le contexte, filet titre/corps, badge « +N » sur les rafales :

┌───────────────────────────────────────────┐
│ ⌂ ARGUS                             20:34  │  bandeau : icône · source · heure
│ Personne détectée                          │  titre (gras)
│ ─────────────────────────────────────────  │
│ Caméra Entrée — visage inconnu.       [+2] │  corps  ·  +N si coalescé
└───────────────────────────────────────────┘

Matériel

  • Raspberry Pi (testé : Pi 4) sous Raspberry Pi OS (Bookworm).
  • Waveshare 2.13" e-Paper HAT, Rev2.1 / V2 sur le GPIO 40 broches, cavalier BS = 0.

Installation — deux voies

A. Carte SD prête à booter (recommandé)

Depuis un Mac, tu prépares une carte qui, au premier boot, rejoint le Wi-Fi, (optionnel) Tailscale, active le SPI et s'installe toute seule — façon Raspberry Pi Imager, en plus complet.

cp flash.conf.example flash.conf     # remplis Wi-Fi, compte, topic ntfy, (Tailscale)
./flash.sh prepare                   # carte DÉJÀ flashée Pi OS Lite → on la configure (sûr)
#   ou, tout automatique (destructif, verrouillé) :
./flash.sh burn disk4                # télécharge Pi OS Lite + écrit sur disk4 + configure

prepare ne touche à aucun disque (il configure la partition de boot déjà montée). burn refuse tout disque interne/partition et exige de taper ERASE diskN. Ensuite : carte dans le Pi, e-paper branché, on allume. 1er boot = Wi-Fi + compte + SPI ; 2e boot = install + démarrage. (Bookworm requis pour le mode burn.)

B. Pi déjà sous Pi OS

bash install.sh          # SPI + deps + lib Waveshare + service systemd
nano config.json         # ntfy_topics: ["ton-topic"]
sudo systemctl restart epaper-notifier
journalctl -u epaper-notifier -f

Dashboard web

Sur http://<ip-ou-hostname-du-pi>:4800/ :

  • aperçu live (miroir exact de l'écran e-ink),
  • envoi d'une notif de test (source, titre, message),
  • édition des topics ntfy à chaud (réabonnement sans redémarrage) + libellé source.

Endpoints : GET /api/status, GET /preview.png, POST /notify, POST /config.

Envoyer une notif

HTTP (n'importe quel projet, n'importe quel langage) :

curl -X POST http://<pi>:4800/notify -H 'Content-Type: application/json' \
  -d '{"source":"MonApp","title":"Build terminé","body":"Déploiement OK en 42 s."}'

Champs : title, body/text, source, icon (bell/alert/camera/sound/check/ person/shield/info) — tous optionnels ; l'icône est sinon devinée du texte.

ntfy (publie sur un topic suivi) :

curl -d "Sauvegarde terminée" ntfy.sh/ton-topic-ntfy

Brancher ARGUS (zéro modif)

ARGUS envoie déjà ses alertes en ntfy. Mets le même topic que dans ses Réglages → chaque événement (mouvement, personne, bruit…) s'affiche sur l'e-paper.

Tailscale (accès distant)

Renseigne TAILSCALE_AUTHKEY dans flash.conf (clé générée sur login.tailscale.com, Reusable

  • Pre-approved) : le Pi rejoint ton tailnet au premier boot. Depuis ton tel (Tailscale connecté), le dashboard et POST /notify sont joignables de partout via http://<hostname>:4800/. (Déjà installé ? install.sh la lit dans .ts_authkey ou $TAILSCALE_AUTHKEY.)

Config (config.json)

clé rôle
http_port port du dashboard + /notify (défaut 4800)
ntfy_server / ntfy_topics serveur + topics ntfy suivis
model panneau : epd2in13_V2 (défaut), _V3 ou _V4 selon ta carte
rotate 0 ou 180
min_interval secondes mini entre 2 rafraîchis (protège l'e-ink lent)
source_default libellé « source » par défaut

Aperçu sans le matériel (dev)

display.py sait dessiner sans e-paper : sur Mac/PC il écrit preview.png. Pratique pour régler la mise en page. Le service écrit toujours ce PNG (même sur le Pi) → c'est lui que le dashboard affiche.

python3 display.py        # -> preview.png

Dépannage

Souci Piste
Écran vide sur le Pi mais service OK mauvais model : le driver V2 exige init(FULL_UPDATE) (déjà géré) — si ta carte est V3/V4, mets epd2in13_V3/_V4 dans config.json
Rien ne s'affiche du tout SPI pas activé (sudo raspi-config → Interfaces → SPI) ; cavalier BS=0
Image à l'envers rotate: 180
burn refuse le disque donne un disque entier externe (diskN, pas diskNsM)
macOS : hash mot de passe l'openssl d'Apple (LibreSSL) ne fait pas -6 : brew install openssl@3
ntfy ne remonte rien vérifie ntfy_topics + que le projet publie sur CE topic/serveur

Fichiers

epaper-notifier/
├── notifier.py          service : dashboard web + HTTP /notify + abonnement ntfy
├── display.py           rendu e-ink 1-bit (icônes, états) + repli PNG hors Pi
├── dashboard.html       page web (aperçu live, test, topics)
├── config.example.json  modèle de config
├── install.sh           SPI + deps + lib Waveshare + service (+ Tailscale)
├── send-test.sh         POST une notif de test
├── flash.conf.example   réglages du flash (Wi-Fi, compte, ntfy, Tailscale)
├── flash.sh             prépare la carte SD (modes prepare / burn)
└── flash/firstrun.sh    exécuté au 1er boot (Wi-Fi, compte, SPI, déploiement)

Licence

MIT © 2026 Sébastien SCHNABEL — AVEXTD Maroc. Non affilié à Waveshare / Tailscale / ntfy.

About

Afficheur de notifications e-ink (Waveshare 2.13" + Raspberry Pi) — dashboard web, HTTP + ntfy, carte SD prête à booter (Wi-Fi + Tailscale).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages