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:
@@ -23,6 +23,7 @@ from modules.gartenwasser_module import GartenwasserModule
|
||||
from modules.solarmanager_module import SolarManagerModule
|
||||
from modules.wetterstation_module import WetterstationModule
|
||||
from modules.logic_module import LogicModule #nicht Vergessen neue Module auch unten in die Liste "modules" einzufügen!!
|
||||
from modules.benachrichtigung_module import BenachrichtigungModule
|
||||
|
||||
# Logging
|
||||
logging.basicConfig(
|
||||
@@ -153,6 +154,15 @@ class Config:
|
||||
return False
|
||||
return self._get_bool('logic', 'enable', False)
|
||||
|
||||
# BENACHRICHTIGUNGEN
|
||||
@property
|
||||
def benachrichtigung_enable(self) -> bool:
|
||||
# Ohne eigenen Abschnitt trotzdem an: das Geraet haengt an keinem
|
||||
# Netz, kostet keinen Suchlauf und schadet nicht.
|
||||
if not self.config.has_section('benachrichtigung'):
|
||||
return True
|
||||
return self._get_bool('benachrichtigung', 'enable', True)
|
||||
|
||||
# GARTENWASSER
|
||||
@property
|
||||
def gartenwasser_enable(self) -> bool:
|
||||
@@ -610,6 +620,7 @@ def main():
|
||||
MQTTModule(config),
|
||||
ShellyModule(config),
|
||||
LogicModule(config),
|
||||
BenachrichtigungModule(config),
|
||||
GartenwasserModule(config),
|
||||
SolarManagerModule(config),
|
||||
WetterstationModule(config)
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Benachrichtigungen als Geraet.
|
||||
|
||||
Ein gerechnetes Geraet wie "Zeitpunkt" (logic_module.py): Es haengt an keinem
|
||||
Netzwerkanschluss, sondern buendelt Kommandos, die der Runner selbst
|
||||
ausfuehrt. Damit kann jede Automatik melden, ohne dass Editor, Datenbank oder
|
||||
Zeitleiste etwas davon wissen muessten - fuer sie ist es ein Geraet mit
|
||||
Kommandos wie jedes andere.
|
||||
|
||||
Zwei Kanaele, beide ohne fremde App auf dem Handy:
|
||||
|
||||
Nachricht Web Push an alle angemeldeten Geraete. Der Browser meldet sich
|
||||
unter Einstellungen -> Meldungen selbst an; verschickt wird
|
||||
verschluesselt ueber den Push-Dienst des Browserherstellers.
|
||||
E-Mail ueber den SMTP-Zugang aus der config.ini des Runners.
|
||||
|
||||
Die Kommandos tragen keine Empfaengerliste: Wer eine Meldung bekommt, steht
|
||||
in der Datenbank (push_abos) bzw. in der Konfiguration. Ein Empfaengerfeld je
|
||||
Automatik waere eine zweite Stelle, an der dieselbe Liste gepflegt werden
|
||||
muesste - und sie liefe auseinander.
|
||||
|
||||
Der Text darf Platzhalter enthalten, die der Runner ersetzt:
|
||||
{automatik} Name der Automatik, die gerade ausgeloest hat
|
||||
{zeit} Uhrzeit der Ausloesung, "HH:MM"
|
||||
{datum} Datum der Ausloesung, "TT.MM.JJJJ"
|
||||
"""
|
||||
|
||||
import logging
|
||||
from typing import List, Dict, Tuple
|
||||
from modules.base_module import BaseModule
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BenachrichtigungModule(BaseModule):
|
||||
"""Legt das Geraet "Benachrichtigungen" mit seinen Kanaelen an."""
|
||||
|
||||
def is_enabled(self) -> bool:
|
||||
# Wie beim Logic-Modul: ohne eigenen Abschnitt in der config.ini
|
||||
# trotzdem an - das Geraet kostet nichts und schadet nicht.
|
||||
return getattr(self.config, "benachrichtigung_enable", True)
|
||||
|
||||
def discover(self) -> Tuple[List[Dict], List[Dict]]:
|
||||
logger.info("\n" + "=" * 60)
|
||||
logger.info("BENACHRICHTIGUNGEN WERDEN ERZEUGT")
|
||||
logger.info("=" * 60)
|
||||
|
||||
kommandos = [
|
||||
{
|
||||
"command": "Nachricht aufs Handy",
|
||||
"url": "push",
|
||||
"parameters": [
|
||||
{"name": "Titel", "type": "string", "url": "titel"},
|
||||
{"name": "Text", "type": "string", "url": "text"},
|
||||
],
|
||||
},
|
||||
{
|
||||
"command": "E-Mail",
|
||||
"url": "mail",
|
||||
"parameters": [
|
||||
{"name": "Betreff", "type": "string", "url": "betreff"},
|
||||
{"name": "Text", "type": "string", "url": "text"},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
aktoren = [{
|
||||
"type": "Benachrichtigung",
|
||||
"name": "Benachrichtigungen",
|
||||
"url": "Benachrichtigung",
|
||||
"commands": kommandos,
|
||||
"states": [],
|
||||
}]
|
||||
return aktoren, []
|
||||
Reference in New Issue
Block a user