📬 NTFY.sh: Push Nachrichten an iOS, Android, PC, Command-Line, E-Mail & Telefon

Begonnen von Torxgewinde, 09 Februar 2024, 15:35:12

Vorheriges Thema - Nächstes Thema

isy

Laut git hat die iOS Version keine Möglichkeit, Anhänge zu empfangen.
Info vom Dez. 2024.
Siehe https://github.com/binwiederhier/ntfy/issues/1226

Nachtrag: Ich habe dort mal nachgefragt. Ein Grund sei, dass "PWA" auf iOS keine Attachments erlaubt.
Siehe auch:
https://www.heise.de/news/Apple-bestaetigt-Keine-Progressive-Web-Apps-mehr-fuer-iOS-in-der-EU-9630089.html
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Torxgewinde

Uuuh, das ist ja hart. Ich nutze selbst nur noch Android/GrapheneOS und habe das Problem in iOS nicht mitbekommen.

Am produktivsten und zukunftsgerichtet ist sicherlich dem Entwickler ein Ticket da zu lassen, oder sich dem vorhandenem Ticket anzuschließen. Ich glaube dies hier bezieht sich dann genau auf die richtig iOS-App: https://github.com/binwiederhier/ntfy-ios/pull/8

Unter iOS habe ich früher sehr gerne PushOver genutzt, das war ausgereift, aber eben nicht selbstgehostet. Vielleicht ist das für iOS-Empfänger dann die bessere Wahl. In FHEM kann man beide Dienste (NTFY, PushOver ...) gleichzeitig nutzen und die jeweiligen Nachrichten über die verschiedenen Kanäle raussenden.

isy

Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

Soll ich das Wiki Update schreiben?
Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

Die Web App auf MacOS und iOS zeigt die Attachments an.
Beide OS erlauben die Anzeige auf dem Home Bildschirm (sieht aus, wie eine App).
Benachrichtigungen funktionieren

OK, geht also
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Torxgewinde

Zitat von: isy am 15 Februar 2025, 13:47:19Soll ich das Wiki Update?
Sehr gerne, am besten auch mit dem Hinweis, dass/wie die WebApp installiert/gebookmarked werden sollte.

isy

Update ist eingetragen, ich hoffe die Info passt an die Stelle.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Torxgewinde

Passt, ich habe deinen Link zum GitHub Issue auch noch mit aufgenommen. Danke!

passibe

Nur zur Info, das hier
Zitat von: byterazor am 02 März 2024, 13:00:19Es gibt für NTFY_CLIENT jetzt eine update URL: https://rm.byterazor.de/upd-fhem-ntfy/controls_byterazor-fhem-ntfy.txt
scheint nicht mehr zu funktionieren. Die Seite ist offline (siehe hier).

Vielleicht müsste man darauf im Wiki hinweisen? Oder man kann das Modul irgendwo anders bereitstellen?



Ansonsten hier noch meine eher minimale und vermutlich verbesserungswürdige Implementierung, die aber für meinen Anwendungsfall ausreicht. Sie unterstützt keine Anhänge (weil iOS), aber das Senden von Kommandos über Buttons (ntfy nennt das "Actions").

Die ntfy-App am Handy sendet dazu über eine URL das jeweilige JSON-Objekt an eine Flask-Middleware, die dann wiederum den Befehl an FHEM sendet (und sich um so Dinge wie die Authentifizierung und den CSRF-Token kümmert; den Flask-Part kann ich, falls Interesse besteht, demnächst auch mal teilen).

Hier der Code für 99_myUtils.pm:
sub ntfy {
    my ($message, $priority, $tags, $title, $cmd1, $button1, $cmd2, $button2, $cmd3, $button3) = @_;
   
    # Set defaults
        if (!defined $priority) {$priority = 3}
        if (!defined $tags) {$tags = "house_with_garden"};
        if (!defined $title or $title eq "") {$title = "FHEM"}
        if ($tags !~ m/house_with_garden/) {
            $tags = $tags.",house_with_garden";
        }

    # Prepare headers
        my $param = {
            url => "https://ntfy.example.org/fhem",
            method => "POST",
            timeout => 10,
            callback => sub() {},
            header => "Content-Type: application/json\r\nAuthorization: Bearer REDACTED\r\np: $priority\r\nta: $tags\r\nt: $title",
            data => $message
        };

    # For actions:
        my $actions = "";
        my $url = "https://example.org/REDACTED";
        my $type = "http";
        my $jsonheader = "headers.Content-Type=application/json";

        # Build action header
        if (defined $cmd1) {
            $actions = "$type, $button1, $url, $jsonheader, body={\"cmd\":\"$cmd1\"}";
        }
        if (defined $cmd2) {
            $actions .= "; $type, $button2, $url, $jsonheader, body={\"cmd\":\"$cmd2\"}";
        }
        if (defined $cmd3) {
            $actions .= "; $type, $button3, $url, $jsonheader, body={\"cmd\":\"$cmd3\"}";
        }

        # Add header
        if ($actions ne "") {
            $param->{header} .= "\r\nActions: $actions";
        }

    # Make request
    HttpUtils_NonblockingGet($param);
}

sub ntfyBat {
    my ($msg, $tags) = @_;
    $tags = defined $tags && length $tags ? ",$tags" : "";
    ntfy($msg,4,"battery".$tags)
}

sub ntfyError {
    my ($msg, $tags) = @_;
    $tags = defined $tags && length $tags ? ",$tags" : "";
    ntfy($msg, 5, "x".$tags);
}

sub ntfyErrorSilent {
    my ($msg, $tags) = @_;
    $tags = defined $tags && length $tags ? ",$tags" : "";
    ntfy($msg,2,"x".$tags)
}

sub ntfyOk {
    my ($msg, $tags) = @_;
    $tags = defined $tags && length $tags ? ",$tags" : "";
    ntfy($msg,2,"white_check_mark".$tags)
}

Nutzung z.B.:
ntfy("Nicht Stören aktiviert.",4,"shushing_face,crescent_moon","","set sys_dnd off","Deaktivieren");Sieht dann aus wie im angehängten Screenshot.

Geht natürlich z.B. auch für eine eigentlich dumme Spülmaschine, die nur über eine Leistungsmesssteckdose smart gemacht wurde, damit man direkt vom Handy aus mit Klick auf die "Spülmaschine fertig"-Benachrichtigung den Status wieder auf "ausgeräumt" setzen kann.

Oder ohne Action dann z.B.:
ntfy("Spülmaschine läuft!",2,"plate_with_cutlery,arrows_counterclockwise");und z.B. für eine Batteriebenachrichtigung:
ntfyBat("Die Batterie von ".AttrVal($NAME,"alias","")." ist fast leer! (".$EVTPART1." %)");