Benachrichtigungen: Geraet, Abos und der Reiter Meldungen

Der Geraetesuchlauf legt "Benachrichtigungen" an (benachrichtigung_module.py),
ein Kommando je Kanal. Damit kann jede Automatik melden, ohne dass Editor,
Zeitleiste oder Datenbank etwas davon wissen muessten.

Fuer die Meldung aufs Handy braucht es keine App: Der Browser meldet sich
unter Einstellungen -> Meldungen selbst an (sw.js, ajax/push.php), das Abo
steht in homeMesh.push_abos, verschickt wird vom Runner. Auf dem iPhone geht
es erst ab der Ablage auf dem Home-Bildschirm - der Reiter sagt das auch.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-21 08:37:31 +02:00
co-authored by Claude Opus 5
parent 061dfa3fc5
commit df48432133
10 changed files with 720 additions and 1 deletions
+40
View File
@@ -0,0 +1,40 @@
-- ---------------------------------------------------------------------------
-- Web-Push-Abos fuer die Benachrichtigungen der Automatiken
-- ---------------------------------------------------------------------------
-- Ein Abo ist ein Geraet, das Meldungen bekommen moechte: Browser oder
-- Startbildschirm-Symbol auf einem Handy. Der Browser erzeugt es beim ersten
-- "Benachrichtigungen erlauben" und liefert drei Teile:
--
-- endpoint die Adresse beim Push-Dienst des Browserherstellers (Google,
-- Mozilla, Apple). Sie ist eindeutig und zugleich das Geheimnis -
-- wer sie hat, kann diesem Geraet etwas schicken.
-- p256dh oeffentlicher Schluessel des Geraets
-- auth Geheimnis fuer die Verschluesselung
--
-- Verschluesselt wird gegen p256dh und auth, unterschrieben mit dem
-- VAPID-Schluessel aus push_vapid.json (SolarManager). Der Push-Dienst sieht
-- nur ein Paket, das er nicht lesen kann.
--
-- Geloescht wird automatisch: meldet der Dienst 404 oder 410, gibt es das
-- Geraet nicht mehr (App entfernt, Browserdaten geloescht) - der Runner
-- raeumt die Zeile dann selbst weg.
--
-- Einspielen:
-- mysql -h nas.fritz.box -P 3310 -u homeMesh -p homeMesh < homeMesh_push.sql
-- ---------------------------------------------------------------------------
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `push_abos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`endpoint` varchar(500) NOT NULL COMMENT 'Adresse beim Push-Dienst; zugleich der Schluessel der Zeile',
`p256dh` varchar(255) NOT NULL COMMENT 'oeffentlicher Schluessel des Geraets',
`auth` varchar(64) NOT NULL COMMENT 'Geheimnis fuer die Verschluesselung',
`name` varchar(80) NOT NULL DEFAULT '' COMMENT 'Klarname, den der Nutzer vergibt ("Handy Moritz")',
`browser` varchar(120) NOT NULL DEFAULT '' COMMENT 'erkannt aus dem User-Agent, nur zum Wiedererkennen',
`angelegt` timestamp NOT NULL DEFAULT current_timestamp(),
`zuletzt` datetime DEFAULT NULL COMMENT 'wann zuletzt erfolgreich zugestellt',
`fehler` varchar(255) NOT NULL DEFAULT '' COMMENT 'letzter Fehler, leer = alles gut',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_endpoint` (`endpoint`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;