Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

Begonnen von viegener, 20 Juni 2015, 18:59:41

Vorheriges Thema - Nächstes Thema

viegener

Zitat von: Will am 23 September 2015, 19:41:56
Habe ihr weitere anwendungsbeispiele?

Meine 3 Hauptanwendungsfälle sind
- Kommandos von aussen an fhem schicken, ohne mein Firewall zu öffnen
- Benachrichtigungen über Ereignisse (z.B Fenster sind noch offen, wenn ich die Haustüre abschliesse)
- Neu hinzugekommen ist bei mir jetzt zustände und Infos aus dem System abzufragen (Luftfeuchtigkeit oder Temperatur an bestimmten Stellen, wg. Schimmel / Wer hat angerufen), also Dinge für die ich keine Benachrichtigung habe, die mich aber gerade brennend interessieren ;D
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Zitat von: viegener am 23 September 2015, 21:53:58
Mir ist allerdings nicht ganz klar, wie Du Dir vorstellst das switch/case als Device umzusetzen? Ein Attribut oder mehrere, steht das ganze Switch in einem Attribute, dann wäre sicher ein myutils-Modul eher einfacher, denn sonst muss man quasi die halbe Perl-Umgebung (stichwort syntaxprüfung und Auswertung von Ausdrücken) nachimplementieren.
Hatte es so angedacht, dass alles in der DEF steht, ähnlich wie bei DOIF, hatte nur Zeilenumbrüche eingefügt, damit es besser lesbar ist. Dann wäre es wieder benutzerfreundlicher, da man nicht in den myUtils editieren muss. Zudem könnte man pro Kommando verschiedene Attribute setzten wie z.B. cmdRestrictedPeer oder was einem in Zukunft noch so einfällt.
Syntaxprüfung habe ich dabei natürlich nicht bedacht...
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Will

Zitat von: viegener am 23 September 2015, 22:52:39
Meine 3 Hauptanwendungsfälle sind
- Kommandos von aussen an fhem schicken, ohne mein Firewall zu öffnen
- Benachrichtigungen über Ereignisse (z.B Fenster sind noch offen, wenn ich die Haustüre abschliesse)
- Neu hinzugekommen ist bei mir jetzt zustände und Infos aus dem System abzufragen (Luftfeuchtigkeit oder Temperatur an bestimmten Stellen, wg. Schimmel / Wer hat angerufen), also Dinge für die ich keine Benachrichtigung habe, die mich aber gerade brennend interessieren ;D
Abfragen machst du über ein notify mit einem if auf ReadingsVal msgtext, oder?


Sent from my SGP611 using Tapatalk


viegener

#108
Zitat von: Will am 24 September 2015, 08:20:04
Abfragen machst du über ein notify mit einem if auf ReadingsVal msgtext, oder?

Nein, ich habe über die Definition eines cmdKeyword Zugriff auf alle fhem Befehle, die fhem erlaubt. Also
attr myTelegrambot cmdKeyword heyfhem

Dann kann ich per Telegram zum Beispiel senden
heyfhem list myTelegrambot
Damit bekomme ich die Detailinfos aller internals/readigns/attr von myTelegrambot
Ist mangels Formatierung manchmal etwas schwerer zu beantworten

oder
heyfhem set myTelegrambot message echo
Fraglich ob das Sinn macht  ;D

Also eigentlich jede Art von Kommando um etwas anzusteuern oder abzufragen ohne etwas spezifisches pro Kommando zu konfigurieren.


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

kud

Kann man mit diesem Attribut eigentlich auch Systembefehle absetzen. zB. Reboot oder einfach Shelldateien aufzurufen?

viegener

Im Prinzip sollte alles möglich sein, was auch in FHEMWEB als command im Eingabefeld angegeben werden kann, da die gleichen Mechanismen verwendet werden (AnalyzeCommand).

Hinweis: Generell ist das also sehr mächtig, aber auch natürlich gefährlich wenn nicht abgesichert!

Ich verwende deshalb grundsätzlich cmdRestrictedPeer mit telegram user ids, damit man hier keine offenen Zugang schafft, ausserdem wird dann auch eine Benachrichtigung bei unzulässigem Zugriff versendet. Ich hoffe id eids sind nicht so einfach zu fälschen, wie eine MAC-Adresse.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

UweH

Moin,

Frage an die Experten: Installation von telegram-cli ist gelaufen, beim Aufruf von bin/telegram-cli -k /root/tg/tg-server.pub bekomme ich als Antwort auf der Konsole "Getötet".
Was soll mir das sagen?

Danke und Gruß
Uwe

viegener

Zitat von: UweH am 24 September 2015, 21:02:37
Moin,

Frage an die Experten: Installation von telegram-cli ist gelaufen, beim Aufruf von bin/telegram-cli -k /root/tg/tg-server.pub bekomme ich als Antwort auf der Konsole "Getötet".
Was soll mir das sagen?

Danke und Gruß
Uwe

Die kurze Antwort ist, dass das Programm direkt wieder abstürzt.

Die längere Antwort: Es ist also zu befürchten, dass die Installation von telegram-cli nicht erfolgreich war. Das kann jetzt ziemlich viele Ursachen haben. Ich würde das Programm mal mit soviel logging wie möglich starten, also sowas wie -l 20 -vvvv und sehen ob mehr Infos im Terminal oder im log file oder im syslog auftauchen.

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

kud

Ähmm ? Und was ist jetzt der Unterschied zwischen CLI und BOT ? Habe gerade CLI am laufen , was auch läuft (bis auf sendPhoto da wird die Verbindung zu Telegam nach jedem 2. od. 3 Bild gecancelt)

viegener

Zitat von: kud am 25 September 2015, 19:03:09
Ähmm ? Und was ist jetzt der Unterschied zwischen CLI und BOT ? Habe gerade CLI am laufen , was auch läuft (bis auf sendPhoto da wird die Verbindung zu Telegam nach jedem 2. od. 3 Bild gecancelt)

Ich erkläre es gerne nochmal, auch wenn nur wenige Posts zuvor ein paar erhellended Links enthalten sind  :D

telegram-cli verhält sich im wesentlichen wie ein normaler persönlicher telegram-client und erlaubt es auch auf Linux Nachrichten zu verschicken.

Also das bot-API ist eine neue Methode, die telegram zur Verfügung gestellt um Clients zu koppeln.

Inzwischen habe ich für beide ein Modul entwickelt, die Senden und Empfangen mit fhem erlauben. Es gibt aber ein paar Unterschiede:

+ Das Modul mit bot-api erfordert keine zusätzliche Software (wie cli) und funktioniert direkt aus fhem per https-Zugriff auf telegram. Ausserdem wird keine Telefonnummer benötigt, die Registrierung erfolgt direkt bei telegram.
- Allerdings habe ich noch keine Übertragung von Fotos implementiert und secret chats sind mit dem bisherigen API von telegram nicht möglich und dazu ist auch keine Änderung abzusehen.

Gruss,
Johannes

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

kud

Dankeschön für die Erklärung und Deine gute Umsetzung.

Maista

#116
Hallo zusammen, hallo Johannes,

danke für den Bot.

Seit langen habe ich nun etwas Zeit gefunden (Urlaub, Steuer) um mich mit Telegram weiter zu beschäftigen.

Mein Bot habe ich beim BotFather aktiviert.
Ich habe das Modul unter 
Zitat/opt/fhem/FHEM/
kopiert.

Den Hilfe-Eintrag in FHEM habe ich mit
Zitat
cd /opt/fhem/
perl contrib/commandref_join.pl
erzeugt bekommen.

Nach dem ich nun in die fhem.cfg ein eigenen Eintrag gemacht hatte und nach rereadcfg kam eine Meldung von Fhem
ZitatCannot load module TelegramBot
Daraufhin habe ich dein Beispiel aus der Hilfe verwendet.
Zitatdefine teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
Aber auch hier kam die Fehlermeldung.
Zitatshutdown restart
half auch nicht.

Unter http://www.fhemwiki.de/wiki/Pushbullet#Cannot_load_module_Pushbullet steht das man JSON installieren soll.


Wollte dann wie dort beschrieben JSON installieren, aber meine Installation findet die angegeben Pfade nicht um dies zu tun.
Die URLs scheint es bei Debian nicht mehr zu geben....

NACHTRAG: Im Log steht es ja
Zitat2015.09.26 23:51:05 0: Can't locate JSON.pm in......usw
Also fehlt das Modul tatsächlich :'(

Jemand eine Idee? Oder muss ich doch den neuen RPi2 aktivieren? Dachte ich komme da erst ein mal drum rum  :-\

NACHTRAG2: Schön wenn man sich die Fragen selbst beantworten kann ;)
Im Forum nach JSON.pm gesucht und
Zitatsudo apt-get update && sudo apt-get install libjson-perl -y
probiert.

Juhu...Der BOT läuft. Mal sehen ob ich den Rest auch noch hin bekomme..Danke fürs zuhören ;)

Wo bekomme ich die ID er User her?
Bekomme bisher keine Verbindung zustande.

Telegram-Ini:
define myfhemBot TelegramBot 121735045:AAGyBLABLABLABLABLABLABLABM14
attr myfhemBot cmdKeyword heyfhem
attr myfhemBot defaultPeer @Blabla
attr myfhemBot room System


Fhem reagiert nicht auf @Blabla ?
Muss man warten?

Gruss Gerd

Edit: cd zum neu erzeugen des Hilfe-Eintrags ergänzt

viegener

Schön, dass Du es selber lösen konntest.
Ich habe einen Hinweis auf die Abhänigkeit zur JSON-lib in die Doku für das Modul aufgenommen.

Um eine Nachricht zu senden, muss Du zuerst von dem Benutzer an den Bot eine Nachricht senden. Wenn die Kommunikation in der Richtung funktioniert sollte die userId (und Fullname und username) automatisch in dem Reding Contacts auftauchen.

Konntest Du erfolgreich eine Nachricht an Deinen Bot senden?

Johannes

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

Maista

Hallo Johannes,

wenn ich den BotFather korrekt verstanden habe muss ich erst ein mal Befehle definieren?

Aber vielleicht habe ich meinen Bot ja bei Telegram falsch definiert?

Der Name ist fhem
und Alias @myfhemBot

Wenn ich diverse Zeilen an mein Bot schicke werden auch zwei Hacken gesetzt.
Demnach sollte die Nachricht irgend wo angekommen sein?!

Kann man die Befehle an den BOT frei definieren?
Ist es egal ob mit Schrägstrich oder ohne?


Gruss, Gerd

viegener

Zitat von: Maista am 27 September 2015, 11:21:39
Hallo Johannes,

wenn ich den BotFather korrekt verstanden habe muss ich erst ein mal Befehle definieren?

Aber vielleicht habe ich meinen Bot ja bei Telegram falsch definiert?

Der Name ist fhem
und Alias @myfhemBot

Wenn ich diverse Zeilen an mein Bot schicke werden auch zwei Hacken gesetzt.
Demnach sollte die Nachricht irgend wo angekommen sein?!

Kann man die Befehle an den BOT frei definieren?
Ist es egal ob mit Schrägstrich oder ohne?


Gruss, Gerd

Hallo Gerd,
Nein, Du musst keine Befehle definieren. Das ist nur eine Möglichkeit, es ist aber nicht notwendig um mit dem Bot zu koomunizieren.

Es klingt so, als ob Du vielleicht das pollingtimeout nicht gesetzt hast. Dieses ist erforderlich, damit das Modul überhaupt neue Nachrichten abholt?

Siehe Kurzbeschreibung:
o Das Attribut pollingTimeout muss auf einen Wert > 0 gesetzt sein, sonst wird nichts empfangen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können