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>
41 lines
2.2 KiB
SQL
41 lines
2.2 KiB
SQL
-- ---------------------------------------------------------------------------
|
|
-- 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;
|