Push-Mitteilungen via Telegram direkt von einer Synology Diskstation

Begonnen von Tyllux, 04 Juli 2016, 22:23:25

Vorheriges Thema - Nächstes Thema

Tyllux

Auf die Vorzüge von direkten Push-Mitteilungen bei Events muss ich nicht näher eingehen. ;)

Die Diskstations von Synology bieten von Haus aus leider keine Möglichkeit Status-Mitteilungen per Push zu versenden. Über den Telegram Bot kann dies aber recht einfach nachgerüstet werden (alternativ ist es auch mit anderen Diensten wie Pushover möglich). Natürlich könnte dies auch per Anbindung der DS an FHEM realisiert werden - wenngleich es auch komplizierter wäre. Ich habe mir für meine Synology Diskstation eine direkte Einbindung des Telegram Messengers gewünscht. Daher landet dieser Beitrag auch im Bereich "Off Topic".

Benötigt wird:

- das funktionale Paket "Web Station" auf der DiskStation (mind. ab DSM > 6.x.x ist dies ein Paket, zuvor war es im DSM implementiert und via den erweiterten Einstellungen aktivierbar)
- den Bot-Token
- eine Chat ID
- den unten angegebenen PHP-Code in einer Datei auf der DS
- diesen Code-Einzeiler: http://localhost/telegram.php?user=1&pass=1&phone=010&body=Hello World&bot_token=DURCH_TOKEN_ERSETZEN&chat_id=DURCH_CHAT_ID_ERSETZEN

Ich setze voraus, dass Ihr euren Bot-Token und die gewünschte Chat ID kennt oder selbst erarbeitet (unterstütze aber gern bei Rückfragen).

Sofern bzw. sobald "Web Station" auf der DS aktiv ist, sollte in der Applikation "File Station" auch ein Ordner namens "Web" vorhanden sein. In diesem erstellt ihr die Datei "telegram.php" mit folgendem Inhalt:

<?php
header
("Content-Type: text/html; charset=utf-8");

define('BOT_TOKEN'$_GET["bot_token"]);
define('API_URL''https://api.telegram.org/bot'.BOT_TOKEN.'/');
 
// grab the chatID
$chatID $_GET["chat_id"];
 
// compose reply
$reply =  sendMessage();
 
// send reply
$sendto API_URL."sendmessage?chat_id=".$chatID."&text=".$reply;
file_get_contents($sendto);
 
function 
sendMessage(){
$message urlencode($_GET["body"]);
return 
$message;
}
?>


Nun ruft in der Systemsteuerung den Punkt "Benachrichtigungen" auf, dort dann "SMS". Aktiviert diesen Punkt und wählt "Neuen SMS-Serviceanbieter hinzufügen". Wählt einen passenden Namen, z.B. "Telegram" und fügt den o.a. Code-Einzeiler ein. Vergesst nicht DURCH_TOKEN_ERSETZEN und DURCH_CHAT_ID_ERSETZEN mit euren Angaben zu ersetzen.

Nach einem Klick auf "Weiter" müssen Kategorien für inhaltliche Werte gewählt werden, dies ist IMHO selbsterklärend. Als Benutzername und Passwort gebt einfach jeweils eine "1" ein.

Fertig! Via "Test-SMS senden" solltet ihr jetzt die Nachricht "Test Message from .." und künftig die Ereignisse eurer DS via Telegram Bot erhalten.

hoods

Hallo Tyllux,

ich habe seit einiger Zeit einen Bot laufen und nutze diesen um FHEM Nachrichten zu erhalten. Auf unseren Android Handys kommen die Status Meldungen an und soweit funktioniert alles.
Telegram auch auf der Synology nutzen zu können wäre super, denn dann brauche ich Pushover gar nicht mehr. Allerdings klappt es trotz deiner Anleitung nicht mit dem Nachrichten Versand. Wenn ich versuche eine Test-SMS über die Synology Admin Oberfläche zu versenden, passiert einfach nichts.

Weisst Du wo die relevant Logs liegen könnten? Unter /var/log habe ich keine passenden Logeinträge gefunden.

Meine URL sieht aktuell so aus:
http://localhost/telegram.php?user=1&pass=1&phone=010&body=HelloWorld&bot_token=1111111111:AAFdkhdsODLHFz987970AHD-D4lflhlFHLA&chat_id=@meinBot

/volume1/web/telegram.php hat aktuell zu Testzwecken folgende Berechtigungen:
-rwxrwxrwx  1 root root   451 Jul  9 23:36 telegram.php


1. bei der aktuellen DSM Version ist https standardmäßig aktiviert und ich kanns scheinbar im GUI auch nicht mehr deaktivieren. Nutzt Du http oder https?
2. bot_token ist durch meinen tatsächlichen Token ersetzt
3. lt. API Doku muss chat_id meinem Botnamen inkl. @ davor entsprechen. Trotzdem habe ich versucht über
https://api.telegram.org/bot1111111111:AAFdkhdsODLHFz987970AHD-D4lflhlFHLA/getUpdates

die chat_id herauszufinden aber die Antwort ist leer:
{"ok":true,"result":[]}

Ich komme gerade irgendwie nicht weiter oder habe einen Denkfehler. Hast Du einen Tipp für mich?

Viele Grüße,
hoods

Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Tyllux

Hi, ich sehe da in der Tat schon einen Fehler bzgl. der Chat ID in deinem Punkt 3. Dein Bot Token hat damit nichts zu tun; du kannst die Chat ID, die du verwenden möchtest auch einfach im Telegram Modul in FHEM kopieren. Habe da heut Abend noch ein, zwei Tipps - aber gerade ist erst Planschbecken mit Junior angesagt. ;)

Tyllux

Hi,

hier der in der SMS-URL von mir verwendete (anonymisierte) Code:

http://localhost/telegram.php?user=1&pass=1&phone=010&body=Hello World&bot_token=987654321:AABBccDDeeFFggHHIIJJ-kkLLmmnn_OOpp&chat_id=-12345678

Ich verwende in meinen Konfigurationen keine Chat-Namen, sondern immer die dem Namen zugehörige Nummer. Nicht wundern, dass im Code oben vor der Nummer bei der Chat ID ein "-" steht, das ist bei Gruppen so korrekt. Bei normalen Benutzern entsprechend ohne. Ebenso wird in der URL kein @ benötigt.

Diese Nummern findest du auch in FHEM im Telegram Bot Modul unter Readings / Contacts.

Damit du mit der URL

https://api.telegram.org/bot<YourBOTToken>/getUpdates

mehr und relevante Informationen erhältst, musst du beim Aufruf dieser URL auch etwa gleichzeitig in den Chat etwas schreiben! Einfach testen, manchmal braucht es diverse Anläufe, solange erscheint nur das reguläre "{"ok":true,"result":[]}".

Im DSM / Benachrichtigungen / SMS habe ich unter "Vorrangige Telefonnummer" übrigens eine fiktive Rufnummer eingetragen.

Meine Diskstation läuft übrigens ebenfalls per default mit https.

Ich hoffe das hilft etwas weiter.

hoods

Es klappt nun. Der Trick ist, einen bestehenden Benutzer aus dem FHEM teleBot reading Contacts für die chat_id zu nehmen.

Vielen Dank für die Tipps!

Gruß Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

juergen012

Hallo, habe mit einigen Schwierigkeiten die Telegram Benachrichtigung auf meiner Synology installiert..
Klappt jetzt einwandfrei SUPER!!!

Beste Grüße
Jürgen K.
Fhem unter Proxmox

gelbwichtel

#6
Hi,
also irgendwie bekomme ich keine TestSms´zu Teleebot aus der Syologie raus. Fehler bekomme ich aber auch nicht.
Aus FHEM raus habe ich keine Probleme was zu senden.

Meine Internals sehen so aus: (Codes hier ge-Xt)
CFGFN   ./FHEM/my02Telebot.cfg
DEF       37***301:AAGNTZPjTWr***Mdy-hYLr***CY
FAILS    0
NAME    telebot2
Token    37***301:AAGNTZPjTWr***Mdy-hYLr***CY
UPDATER 0
URL      https://api.telegram.org/bot37***301:AAGNTZPjTWr***Mdy-hYLr***CY/
me       37***301:SynoNas:@SYNOxxxxxt
sentMsgPeerId    32109****

Attributes
cmdRestrictedPeer    32109****
defaultPeer              32109****
pollingTimeout         120

die SMS Definition auf der DS216 wie folgt

http://localhost/telegram.php?user=1&pass=1&phone=010&body=Hello World&bot_token=37***301:AAGNTZPjTWr***Mdy-hYLr***CY
&chat_id=32109****


Ein direkt über linux abgesetzter curl-Aufruf schickt mir den Text, genauso wie FHEM, aber irgendwie will das Ding nicht aus der Synology raus

curl -X  POST 'https://api.telegram.org/bot37***301:AAGNTZPjTWr***Mdy-hYLr***CY/sendMessage?chat_id=32109****&text="testtext"'

Mir drängt sich der Verdacht auf, dass die telegram.php erst gar nicht ausgeführt wird. Denn auch, wenn ich diese lösche bzw. umbenenne, meldet mir ein Send Test-SMS, dass eine SMS verschickt worden sei. Aktuell im EInsatz ist die DSM 6.0.2-8451 Update 9.

Vielleicht hat jemand ja eine Idee, woran es liegen könnte.
Danke

cu
gelbwichtel

gelbwichtel

So nach langen Hin und Her hab ich es nun hinbekommen. Aber nicht über das Php-Skript, sondern direkt.

Meine finale Lösung in der Synology ist nun:

SMS-URL

https://api.telegram.org/bot371*******mCY/sendMessage?chat_id=598**2109&text=Hello+World&user=1&pass=1&phone=010


Dann die einzelnen Kategorien wie folgt festgelegt:


chat_id=598**2109     Sonstiges
text=Hello+World     Nachrichteninhalt
user=1     Benutzer
pass=1     Passwort
phone=010Telefonnummer

und Senden der Test-SMS funktioniert.

Falls irgendjemand mal hier noch was dazu sagen kann, weshalb der php-Aufruf nicht funktioniert, würde ich mich freuen. Denn das fuxt mich schon. Vielleicht liegt es ja an der DSM.

cu
gelbwichtel

Tyllux

Mh,

klingt ein bissl als wäre die Datei entweder nicht an der richtigen Stelle oder hätte nicht die richtigen Berechtigungen ..

Wenn du die IP/URL deiner DiskStation direkt (unter Port 80) aufrufst - also der Ordner auf den "Web" i.d.R. verweist und dann /telegram.php anhängst - gibt es da ein Ergebnis? Zeigt sich überhaupt die Demo-Webseite (nicht die DSM-Verwaltung) bei direkten Aufruf der IP/URL?

In meinem Fall kommt das (korrekte) Echo:

Warning: file_get_contents(https://api.telegram.org/bot/sendmessage?chat_id=&text=): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /volume1/web/telegram.php on line 15

Teste auch mal den Aufruf der index.html - wenn das klappt  und die telegram.php sicher am richtigen Platz ist, sollte es mutmaßlich an den Berechtigungen liegen..

gelbwichtel

Vielen Dank Tyllux,
mit deinen Tips konnte ich jetzt auch dein Verfahren zum SMS-Versand einsetzen.
Frag mich nur nicht, was es jetzt im Endeffekt wirklich war. Irgendwas war scheinbar nicht aktiviert.
Rechteprobleme waren es jedenfalls nicht und die Dateien lagen auch an der richtigen Stelle.
Muss wohl am Server gelegen haben.
Jedenfalls haben wir jetzt mal 2 Aufrufmöglichkeiten für den SMS Versand.
Nachmal 1000 Dank. Wieder was dazugelernt.
cu
gelbwichtel

viegener

Ich habe ja verstanden, dass das hier offtopic ist, aber wäre es nicht sinnvoller den Befehl gegen FHEM auszuführen (also sprich ein FHEM-Kommando zum Setzen eines dummies oder ein direktes msg-Kommando)? Dann hätte man den Status/die Info gleich in FHEM und könnte auch von da aus weitersenden?

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

gelbwichtel

Hi viegener,
ich denke, dass man das so, oder so sehen kann.
Das Wichtigste ist für mich zunächst mal, dass ich einen Status von der Synology bekomme, wenn die irgendwas Kritisches feststellt. Da erscheint mir der direkte Weg ohne über ein weiteres System zu gehen letztendlich der sicherste. Zumal ich mein fhem nicht auf der Synology laufen habe.
Wenn ich den kritischen Aspekt weglasse, dann stimme ich Dir natürlich voll und ganz zu. Sollte sich auch umsetzen lassen, da auch der von Tyllux beschriebene Weg funktioniert. Ein Ansatz wäre dann im PHP-Skript was bzgl. FHEM zu coden.
cu
gelbwichtel

davedeluxe

Hi,

danke für die Anleitung, klappt super.
Gibt´s ne Möglichkeit den Snapshot mit zu senden bei einer Ereigniserkennung?
Ich möchte unbedingt die E-Mailbenachrichtigung abschaffen.

Grüße Dave

Tyllux

Hi, stehe gerade auf dem Schlauch .. Snapshot senden - ein tatsächlicher Schnappschuss von einer angeschlossenen IP-Cam?