[Modul] Gotify

IPSymconGotify
Modul zum Senden von Benachrichtigungen via Gotify.

1. Voraussetzungen

  • IPS ab Version 5.3
  • Gotify Server ab Version 2.0.0
  • gültiger Gotify App Token
  • (optional) eingerichteter Android Client

Info: die benötigten Versionen für Sonderfunktionen können hier nachgelesen werden.

2. Installation

  • über den Module Store
  • über Module Control direkt von GitHub

3. Konfiguration

1 „Gefällt mir“

Changelog

Version 1.2 @ 05.03.2023

  • SendImage hinzugefügt
  • SendImageFromUrl hinzugefügt
  • SendMessageWithNotificationUrl hinzugefügt

Version 1.1 @ 01.03.2023

  • Fix für SendMessageWithExtras

Version 1.0 @ 18.02.2022

  • Initiale Version

Hi,

@netti93
danke für das Modul, könntest du ggf folgende Änderung in der module.php durchführen?

nach der Funktion SendMessageWithExtras() Zeile 44 - 54 löschen
ALT

            curl_setopt_array($ch = curl_init(), [
                CURLOPT_URL        => $this->BuildMessageURL(),
                CURLOPT_POSTFIELDS => [
                    'title'     => $title,
                    'message'   => $message,
                    'priority'  => $priority,
                    'extras'	   => json_encode($extras),
                ],
                CURLOPT_SAFE_UPLOAD    => true,
                CURLOPT_RETURNTRANSFER => true,
            ]);

und gegen

                if (empty($extras))
                {
                        curl_setopt_array($ch = curl_init(), [
                        CURLOPT_URL        => $this->BuildMessageURL(),
                        CURLOPT_POSTFIELDS => [
                        'title'     => $title,
                        'message'   => $message,
                        'priority'  => $priority,
                        ],
                        CURLOPT_SAFE_UPLOAD    => true,
                        CURLOPT_RETURNTRANSFER => true,
                        ]);
                }
                else {
                        curl_setopt_array($ch = curl_init(), [
                        CURLOPT_URL        => $this->BuildMessageURL(),
                        CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
                        CURLOPT_POST       => true,
                        CURLOPT_POSTFIELDS => json_encode([
                        'title'     => $title,
                        'message'   => $message,
                        'priority'  => $priority,
                        'extras'           => $extras,
                        ]),
                        CURLOPT_SAFE_UPLOAD    => true,
                        CURLOPT_RETURNTRANSFER => true,
                        ]);
                }
            $response = curl_exec($ch);


tauschen?

Damit kann man auch base64 codierte Bilder hinzufügen. Zum testen

$Message="![Hello World](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAAAAAAVAxSkAAABrUlEQVQ4y+3TPUvDQBgH8OdDOGa+oUMgk2MpdHIIgpSUiqC0OKirgxYX8QVFRQRpBRF8KShqLbgIYkUEteCgFVuqUEVxEIkvJFhae3m8S2KbSkcFBw9yHP88+eXucgH8kQZ/jSm4VDaIy9RKCpKac9NKgU4uEJNwhHhK3qvPBVO8rxRWmFXPF+NSM1KVMbwriAMwhDgVcrxeMZm85GR0PhvGJAAmyozJsbsxgNEir4iEjIK0SYqGd8sOR3rJAGN2BCEkOxhxMhpd8Mk0CXtZacxi1hr20mI/rzgnxayoidevcGuHXTC/q6QuYSMt1jC+gBIiMg12v2vb5NlklChiWnhmFZpwvxDGzuUzV8kOg+N8UUvNBp64vy9q3UN7gDXhwWLY2nMC3zRDibfsY7wjEkY79CdMZhrxSqqzxf4ZRPXwzWJirMicDa5KwiPeARygHXKNMQHEy3rMopDR20XNZGbJzUtrwDC/KshlLDWyqdmhxZzCsdYmf2fWZPoxCEDyfIvdtNQH0PRkH6Q51g8rFO3Qzxh2LbItcDCOpmuOsV7ntNaERe3v/lP/zO8yn4N+yNPrekmPAAAAAElFTkSuQmCC)";
GOTIFY_SendMessageWithExtras(41320,"Hallo Welt!",$Message, 8, array("client::display" => array("contentType" => "text/markdown")));

Wollte dafür keinen PR erstellen. Gotify ist ehrlich sehr cool. Endlich mal schnelle Push-Nachrichten :smiley:

Vielen Dank

Hi,

habe oben den Schnipsel nochmal bearbeitet. Es wird geprüft ob „Extras“ verwendet wird, nur da wird laut doku das ganze als json benötigt…

Viele grüße

Hi,

gar keine Frage, das war ja Mist was ich da fabriziert hatte. Hab es bis heute tatsächlich nie mit Extras genutzt bzw. inzwischen nutze ich auf Grund von iOS Geräten notgedrungen Chanify statt Gotify. Will mir da demnächst mal ntfy näher anschauen um für die Zukunft idealerweise beides unter einem Hut zu haben.

Habe es etwas anders gemacht als in deinem Snippet, da ich kein Problem darin sehe grundsätzlich application/json zu verwenden und ich so die Initialisierung/Konfiguration von cURL etwas schöner/aufgeräumter finde. Ist aber inhaltlich exakt das Gleiche.

Das nächste Mal vielleicht doch einfach einen PR erstellen, dann wärs für mich etwas einfacher gewesen bzw. schneller gegangen (hätte direkt testen und bei erfolgreichen Test auch einfach direkt mergen können). :wink:

Beta ist bereits verfügbar, Stable sollte dann auch bald folgen.

:vulcan_salute:

Guten Morgen,

Super, schaut wirklich besser aus :smiley:
Ich habe dein Modul in meinem Livesystem installiert und direkt über vi editiert. Da hatte ich mit dem HTTPHeader probleme gehabt. Ich konnte bspw keine testnachrichten abschicken. Mit deinen Änderungen läuft es aber. :+1:

Ich hab noch nie ein PR erstellt :sweat_smile: Ich schau mir das aber mal an.

Ansonsten hab ich es getestet und läuft. Endlich bekomme ich per Push schnell ein Snapshot von der Kamera wenn es klingelt.

Viele Grüße

Moin,

Wie machst du denn aus dem Bild den Base64 String? Hast du da ein Beispiel? Dann würde ich mir das vielleicht auch mal angucken :slight_smile:

Danke :slight_smile:

Hi,

also ich nutze den Symcon Image-Grabber, dann hole ich das Bild per IPS_GetMediaContent

$Message = IPS_GetMediaContent(37001 /* Image ID vom Imagegrabber*/);
$Message = "![Tür](data:image/jpeg;base64,".$Message.")";

Man sollte aber darauf achten nicht gerade 4K Bilder zu verschicken, sonst läuft der Symcon ins memory_Limit.

Viele Grüße

1 „Gefällt mir“

https://www.php.net/manual/en/function.base64-encode.php

sollte dir helfen, File in einen Strind einlesen und dann encoden.

1 „Gefällt mir“

Wenn ich die Tage mal Zeit finde, erweitere ich das Modul ggf. um eine explizite Funktion zum Senden von Bildern. Dann muss der Anwender nicht mehr in der Doku nach den Extras schauen, sondern einfach nur eine ImageID oder URL mitgeben und fertig.

Hab gerade auch einmal versucht Bilder von URLs direkt zu versenden. Das hat zwar für irgendwelche Beispielbilder aus dem Internet perfekt funktioniert, für das lokal per HTTP API von meiner Mobotix Kamera abgerufene Bild irgendwie nicht. Das wird im Gotify UI einfach nicht gerendert. Sobald ich es jedoch im Voraus einlese und in base64 kodiere funktioniert der Spaß.

Sprich hier wird der Alternativtext angezeigt

$message = "![Alternativtext](http://192.168.123.123/record/current.jpg)";

und hier sehe ich das korrekt gerenderte Bild

$bild = base64_encode(file_get_contents(http://192.168.123.123/record/current.jpg));
$message = "![Alternativtext](data:image/jpg;base64," . $bild . ")";

genauso wie hier

$message = "![Alternativtext]https://upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg)";

Werde das aber jetzt nicht weiter versuchen zu analysieren weil ich es für mich eh nicht brauche und es dafür ganz schön viel Zeit frisst :joy:

Habe gerade die Version 1.2 als Beta veröffentlicht. Dort gibt es jetzt 3 zusätzliche Funktionen:

  • SendMessageWithNotificationUrl zum Öffnen einer URL bei Klick auf die Notification
  • SendImage für das Senden eines Bildes ohne sich mit den Extras auseinandersetzen zu müssen
  • SendImageFromUrl wie SendImage nur mit der URL eines Bildes

Die genaue Funktionsweise könnt ihr der Doku entnehmen :wink: