Update: 05.03.2016 Das ist ein alter Blog-Beitrag. Bitte den Telegram-Bot benutzen, weil dieses Modul weiterentwickelt wird. Der Telegram-Bot ist einfacher zu installieren, eine Hilfe gibts in der Wiki hier
Mal wieder ein kleiner Beitrag für unsere Freunde der Hausautomation Fhem. Fhem ist mittlerweile so vielseitig, man kann ganze Bücher über die Features schreiben, dank Open Source und eine sehr aktive Entwickler-Gemeinde. Heute geht es um den kostenlosen Dienst Telegram. Was Telegram ist, könnt ihr auf der Website nachlesen. Auf dem Smartphone gibt man in der Telegram App einen Befehl ein, beispielsweise OK Fhem Laterne on und dieser Befehl wird dann von Fhem ausgeführt und schaltet die Laterne ein. Ebenfalls kann man mit Telegram auch zum Pushen verwenden, ähnlich wie die Pushover-App. So können beispielsweise Zustandsdaten an das Smartphone geschickt werden. Beispielweise ein Hinweis an Telegram falls noch ein Fenster geöffnet ist, wenn man das Haus verlässt. Oder eine Telegram-Nachricht, wenn die Kühltruhe eine bestimmte Temperatur überschreitet. Wie man sieht, unendliche Möglichkeiten, man muss sie nur scripten. Das Ganze ist vom Entwickler noch in der Testphase (Stand August 2015) und man muss einzelne Dateien noch manuell auf dem Server kopieren.
Die ganze Idee fängt mit diesem Thread im Fhem-Forum an: siehe hier
Um nicht die ganzen Thread durchzulesen, wurde auch schon abgekürzt etwas in der Wiki geschrieben, siehe hier.
Wichtig ist es, zunächst einen Account, genauer gesagt zwei (oder mehrere für die Familienmitglieder) Accounts bei Telegram zu erstellen. Einen Account für das Smartphone, ein anderes für Fhem. Ich habe meine Festnetznummer für Fhem bei den Einstellungen eingegeben. Ihr könnt Euch den Aktivierungscode nämlich auch via Voice mitteilen lassen, sonst kommt er per SMS. Dann muss der oder die Kontakte, mit der Fhem nach außen kommunizieren soll, mit add_contact in die Liste hinzugefügt werden. Die genaue Beschreibung für die Installation von Telegram auf Fhem findet ihr auch in dem Thread.
Meine Meinung nach eine gute Idee, sie wird bei mir Pushover ablösen, welches – wie der Name schon sagt – nur Mitteilungen von Fhem senden kann.
Falls Fragen, fragen in den Kommentaren und viel Spaß beim Ausprobieren!
Hier ein Screenshot, wie Telegram in Fhem ungefähr aussehen sollte, wenn es richtig installiert wurde. Wichtig ist hier das State = opened
DEF |
1234
|
DeviceName
|
localhost:1234
|
FD
|
75
|
NAME
|
user1
|
NR
|
1652
|
PARTIAL
|
|
Port
|
1234
|
Protocol
|
telnet
|
REMAINING
|
|
STATE
|
opened
|
TYPE
|
Telegram
|
lastmessage
|
User xxx online (was online [2015/08/12 21:41:32])
|
sentMsgPeer
|
xxx
|
sentMsgResult
|
NO RESULT
|
sentMsgSecure
|
normal
|
sentMsgText
|
FHEM INITIALIZED
|
Autostart:
Blog-Leser Georg hat noch einen Tip, wie man das Problem mit dem Autostart löst:
Er startet den Dienst einfach 20 Sekunden später, und so geht es:
Die Datei /etc/rc.local
um folgenden Eintrag erweitern (vor dem exit 0):
/bin/sleep 20 && /etc/init.d/telegram-daemon start
Infos zum init.d telegram-daemon findet ihr oben in den Link zum Fhem-Forum.
Update 13.09.2015: Der Vorteil von Telegram gegenüber von Pushover ist, das man die Versendung von Nachrichten auch bi-direktional verwenden kann. So kann man beispielsweise auf dem Smartphone eine Nachricht schreiben und mit
pt 30
text v1 0 380 {"Info: ".ReadingsVal("user1","msgText",0)}
erscheint diese Info auf dem InfoPanel (-> Blog-Beitrag und -> Blog-Beitrag).
Um diese Meldung nach eine gewissen Zeit wieder automatisch zu löschen, nutze ich bei Fhem den AT-Befehl und schicke eine Nachricht an das System selber
define trigger_Telegram_Cleanup at +*01:00:00 setreading user1 msgText -
Hier wird die Nachricht nach einer Stunde gelöscht.
Aktionen mit Telegram von Fhem ausführen:
Stellen wir uns einmal vor, wir würden jede Minute ein Camerabild machen, welches wir auf /opt/fhem/www/snapshots/snap.jpg speichern.
Wir könnten jetzt von unterwegs dieses Snapshot anfordern und uns das Kamerabild per Telegram auf das Smartphone schicken lassen.
Wir müssen an unserem Bot in Fhem ein Codewort schicken, sodass der Befehl von Fhem ausgeführt werden kann. Das Attribut bei Fhem heisst: cmdKeyword. Wir legen als cmdKeyword bspw. das Wort Fhem fest. Möchten wir nun ein aktuelles Cam-Bild empfangen sagen wir hier:
Fhem set user1 sendImage /opt/fhem/www/snapshots/snap.jpg
Mit diesem Befehl schicken wir mit dem Code-Wort Fhem an den user1 (Name des Telegram-Devices) eine Aufforderung in dem Pfad /opt/fhem/www/snapshots/snap.jpg zu schauen und die jpg zu posten. Wichtig ist hier vorab einmal das Attribut pollingTimeout auf 1 zu setzen.
Hallo Georg,
gut zu wissen, checke ich nach und übernehme es in meinem Blog. Vielleicht mich noch mal per pm kontaktieren über die genaue Installation. Ich starte immer noch das Teil von Hand. Aber ok, nach 100 Tagen online und reboot (wegen Backup des Images der SD-Karte) kann man das ja mal machen 🙂
LG
/robin
Hallo Robin! Danke für den Tipp!
Hab den Script aus dem Forum verwendet und kam auch nicht weiter.
Hab aber denke ich das Problem gelöst, vielleicht auf einer ungewöhnliche Weise, aber besser kann ich es nicht.. 🙂
Als erstes hatte ich das Problem das nach dem starten und wieder stoppen weitere Startversuche nichts gebracht haben, ob über den Script oder direkt mit dem Befehl.
Da beim stoppen der Befehl „sudo pkill telegram-cli“ verwendet wird, fährt die Anwendung nicht sauber herunter. Es hinterlässt eine Datei „/home/USER/.telegram-cli/state“, diese verhindert nochmaligen start. Wenn man diese löscht, hat es wunderbar geklappt.
Das zweite Problem war, das es beim booten nicht starten wollte, hab dann den Aufruf in die „/etc/rc.local“ umgezogen:
(/bin/sleep 30 && /etc/init.d/telegram-daemon start)
Und jetzt startet der Dienst Telegram beim booten.
Gruß,
Georg
Hallo Georg, ich habe es auch mit init.d versucht (quasi Startup-Script) aus dem Forum, klappt bei mir aber noch nicht.
http://forum.fhem.de/index.php/topic,38328.msg318707.html#msg318707
LG
/robin
Super Sache! Kann mir noch jemand ein Tipp geben wie man telegram-cli zusammen mit dem System automatisch startet? Also Rebootfest machen.