Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

Die aktuellen Version von 70_Telegram (0.7) und 50_TelegramBot (0.6) sind jetzt in Git verfügbar.
Ich habe diese auch an das erste Posting im Thread angehängt und dort jetzt auch beide Module erwähnt.

Ich plane in Zukunft eher TelegramBot weiterzuentwickeln, wenn ich nichts anderes höre. Aus meiner Sicht sind folgende Funktionen als nächste zu ergänzen:
- sendPhoto / sendPhotoTo
- erlaube Kommandos als Kurzzugriffe
- reply (erforderlich für Dialogfunktion)
- Dialogfunktion
- Emoticons (diese funktionieren momentan nicht, wobei das Problem auch auf telegram Seite zu liegen scheint Vermischung versch. Unicodes)

Natürlich könnt Ihr gerne weitere/andere Vorschläge machen

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

Maista

Hallo Johannes,

Zitato Das Attribut pollingTimeout muss auf einen Wert > 0 gesetzt sein, sonst wird nichts empfangen
Ah jetzt ja.....

Na so was aber auch  :o. Kaum macht man es Richtig.
Habe nun beim Polling etwas eingetragen (5) kam auch prompt auf alles was ich geschrieben hatte, eine Antwort  ;D

Danke erst einmal!  ::)

Thema BOT oder CLI, ich denke mal wenn die Funktion gleich ist, dürfte der BOT einfacher sein.
Es entfällt das installieren der CLI mit allen Problemen die man damit haben kann.

Danke noch mal für deine Arbeit.

Gruss, Gerd

UweH

Moin Moin,

nachdem ich mit der telegram-cli nicht klargekommen bin (Senden will trotz korrekter Rechte usw. nicht funktionieren, empfangen ging...), hab ich mich nun am Bot versucht. Nach diversen Hürden klappt's nun aber...schwitz. Daher plädiere ich für die Weiterentwicklung vom Bot.  ;)

Danke für die Mühe

Gruß
Uwe

Maista

Hallo Uwe

Gratulation  ;)

Ich hatte gestern versucht Johannes sein Bot anzusprechen.
Das wurde mir verweigert (zu Recht).
Mir war dann klar das ich auch schauen muss das nur eingetragene Nutzer den eigenen Bot nutzen dürfen.
Hierzu gibt es, dachte ich, cmdRestrictedPeer?!
Hier habe ich dann zwei Nutzer mit @ vorangestellt , eingetragen.
Diese Nutzer werden aber nun abgewiesen?
Habe ich die Funktion falsch verstanden?

Wer kann hier ein paar Beispiele für die Daus wie mich posten?

Wenn ich zusammen hängende Beispiele habe tu ich mich leichter die Funktionen zu verstehen und für meine Zwecke anzupassen.
Eventuell dann auch mit zu dokumentieren.

Mich würde z.B interessieren wie ich die Temperatur oder Feuchte eines DS2438 /DS18b20 per TelegramBot abfrage.

Gruss

Gerd

viegener

Zitat von: Maista am 28 September 2015, 20:03:49
Hallo Uwe

Gratulation  ;)

Ich hatte gestern versucht Johannes sein Bot anzusprechen.
Das wurde mir verweigert (zu Recht).
Mir war dann klar das ich auch schauen muss das nur eingetragene Nutzer den eigenen Bot nutzen dürfen.
Hierzu gibt es, dachte ich, cmdRestrictedPeer?!
Hier habe ich dann zwei Nutzer mit @ vorangestellt , eingetragen.
Diese Nutzer werden aber nun abgewiesen?
Habe ich die Funktion falsch verstanden?

Wer kann hier ein paar Beispiele für die Daus wie mich posten?

Wenn ich zusammen hängende Beispiele habe tu ich mich leichter die Funktionen zu verstehen und für meine Zwecke anzupassen.
Eventuell dann auch mit zu dokumentieren.

Mich würde z.B interessieren wie ich die Temperatur oder Feuchte eines DS2438 /DS18b20 per TelegramBot abfrage.

Gruss

Gerd

Hallo Gerd,
Sorry das ist noch ein Problem im Modul. Momentan werden bei cmdRestrictedpeer nur contact ids und keine Benutzernamen unterstützt. Sorry das greift die Doku der Implementierung wohl noch etwas vor  ;D.

Die contact ids lassen sich aber leicht aus dem contacts reading herauslesen.

Das wird auch bald gefixt, allerdings kämpfe ich noch mit dem Versenden von Fotos, denn das ist doch sehr viel aufwändiger als gedacht, momentan lassen sich nur kleine Bilder übertragen...
Doku kommt dann auch und und und und...
Gruss,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Maista

Hallo Johannes

Nachdem ich dein Post gelesen hatte, habe ich heute morgen noch vorm Arbeit fahren die User Nummer eingetragen.
Damit hat es dann funktioniert :P
Im Geschäft angekommen, funktionierte dann nur heyfhem help. List wurde ignoriert? !

Nach der Arbeit probierte ich wieder. Um18:01 kam noch eine Antwort.
Um 19:33  nicht mehr.

Habe dann rereadcfg eingegeben und es wurden danach die anfragen alle an den Client geschickt.

Habe ich das pollingTimeout mit "5" falsch gewählt?

Im logfile häufen sich die Meldungen wegen Telegram. Timeouts und anderes.

Soll ich dies hier posten?

Gruß Gerd

viegener

Hallo Gerd,
das timeout mit 5 ist relativ kurz (allerdings ist wohl 20 das Maximum beim telegram bot api).

Das Zusammenspiel von fhem und telegram bot läuft noch nicht sehr rund, ich sehe bei mir auch regelmässig Verbindungsabbrüche und timeouts. Ein grosser Teil ist sicher unkritisch, denn dann repariert sich die Verbindung normalerweise wieder.

Es gibt auch eine Möglichkeit mit
set <telegrambotdevice> reset
das Modul wieder zurückzusetzen, dass das polling neu startet (und auch die Internals zurücksetzt). Das ist allerdings nur eine temporäre Lösung.

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

Maista

Hallo Johannes,

hier auf Seite 8 schreibst Du das man mit

heyfhem list myTelegrambot

die Daten bekommt.

Das habe ich gerade probiert.

Als Antwort kommt auf

/heyfhem list myfhemBot

allerdings nichts. Nur zwei Haken.

Im Event-Monitor habe ich gesehen das die Daten erzeugt werden.
Aber scheinbar ist die Ausgabe zu gross/lang für irgend einen Server auf den Weg zu mir  :o

Zitat
Auszug aus der letzten Zeile. Darüber steht die Ausgabe von List myfhemBot
....
NAME addr https://api.telegram.org:443 buf HTTP/1.1 414 Request-URI Too Large Server: nginx/1.9.1 Date: Wed, 30 Sep 2015 16:11:07 GMT Content-Type: text/html Content-Length: 192 Connection: close
....
Und viele weitere Meldungen.

Wenn gewünscht, kann ich Dir das komplette Log schicken.
Hab die Monitorausgabe in ein Editor kopiert.
Die Log-Zeilen sind 127kb gross!

Eine frage,
auf Git gibt es ein neueres Bot-Modul von Dir.
Und ein zweites (HttpUtils.pm) ist dazu gekommen.
Muss das mit installiert werden?
Da dies bei mir schon vorhanden ist, habe ich es nicht drüber kopiert.

Gruss,
Gerd

viegener

Zitat von: Maista am 30 September 2015, 18:45:09
hier auf Seite 8 schreibst Du das man mit

heyfhem list myTelegrambot

die Daten bekommt.

Das habe ich gerade probiert.

Als Antwort kommt auf

/heyfhem list myfhemBot

allerdings nichts. Nur zwei Haken.

Im Event-Monitor habe ich gesehen das die Daten erzeugt werden.
Aber scheinbar ist die Ausgabe zu gross/lang für irgend einen Server auf den Weg zu mir  :o

Wenn gewünscht, kann ich Dir das komplette Log schicken.
Hab die Monitorausgabe in ein Editor kopiert.
Die Log-Zeilen sind 127kb gross!

Eine frage,
auf Git gibt es ein neueres Bot-Modul von Dir.
Und ein zweites (HttpUtils.pm) ist dazu gekommen.
Muss das mit installiert werden?
Da dies bei mir schon vorhanden ist, habe ich es nicht drüber kopiert.

Gruss,
Gerd

Genau, diese Art von Abfragen funktioniert nur bis zu bestimmter Länge (bei messages wohl < 2kB)
Ein ähnliches Problem hindert mich momentan an der Übertragung von Photos, denn auch hier funktionieren Photos mit bis 10k problemlos (auf meinem raspberry) aber Dateien mit 30KB gehen ncht.

Genau deshalb hast Du ein httputils gesehen, da habe ich gestern Nacht meinen Zwischenstand eingechecked, den werde ich aber Rudi sobald es stabil ist zur Verfügung stellen.

Also zu Deinen Fragen. Ja Grössenbeschränkungen sind bekannt und werden mit einem neuen HTTPUtils demnächst auch lösbar sein. Die aktuelle httputils-Version ist definitiv noch experimentell. Also brauche ich dazu den logfile wohl nicht.

Ich werde mal versuchen heute abend eine Version zu erstellen, die zumindest bei messages auch mehr als die ca. 2kB erlaubt.




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

viegener

So anbei nun eine erweiterte Version fon 50_TelegramBot   V0.7, die neben einer ganzen Reihe von Stabilisierung folgende Neuigkeiten enthält.

1) sendPhoto / sendPhotoTo
Versenden von Bildern durch Angabe des Dateinamens.
Achtung: Dateien sind in der Grösse (raspberry ca 30k) beschränkt, nur wenn man das neue HTTPUtils Modul aus meinem github Projekt verwendet, lassen sich auch grössere Dateien verschicken (Ich habe bis 1MB getestet)

2) Grössere Messages und Kommando-Antworten bis ca. 30k unterstützt.
Bisherige Beschänkung von weniger als 2kB entfällt

3) Mehrere Kommandos zum Senden von Nachrichten oder Fotos gleichzeitig werden jetzt über eine Warteschlangen nacheinanderabgearbeitet

4) Es sollte jetzt durchgägngig möglich sein neben user ids auch usernames (@username) zu verwenden. Empfehlung ist bei wichtigen Einstellungen (cmdRestrictedPeer) aber user ids zu verwenden, da dies vermutlich fälschungssicherer ist.

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

Maista

Hallo Johannes,

habe probiert ein Bild (~35kB)zu verschicken.

HTTPUtils habe ich dein neues eingespielt.

Im Hilfe-Text steht noch die Info zum Telegram-CLI.
Dort heisst es
Zitat
sendPhoto <file> [<caption>]
Sends a photo to the default peer. File is specifying a filename and path that is local to the directory in which telegram-cli process is started. So this might be a path on the remote host where telegram-cli is running and therefore not local to fhem

Was ist "caption" ? Und wo muss das Bild stehen?

Hatte es nach
/opt/fhem/FHEM/
kopiert aber passiert nichts.

Im Log steht nur dies hier:
Zitat2015-10-01 19:31:30 TelegramBot myfhemBot sendPhoto /opt/fhem/FHEM/Freut_sich.jpg

Internals zeigt das hier an
ZitatsentMsgText Photo: /opt/fhem/FHEM/Freut_sich.jpg

Wenn ich den Pfad nicht mit übergebe kommt eine Fehlermeldung.
ZitatFAILED file :Freut_sich.jpg: not found or empty

Soweit erst mal.

Danke und schönen Abend

Gerd

viegener

Zitat von: Maista am 01 Oktober 2015, 19:47:47
Hallo Johannes,

habe probiert ein Bild (~35kB)zu verschicken.

HTTPUtils habe ich dein neues eingespielt.

Im Hilfe-Text steht noch die Info zum Telegram-CLI.
Dort heisst es
Was ist "caption" ? Und wo muss das Bild stehen?

Hatte es nach
/opt/fhem/FHEM/
kopiert aber passiert nichts.

Im Log steht nur dies hier:
Internals zeigt das hier an
Wenn ich den Pfad nicht mit übergebe kommt eine Fehlermeldung.
Soweit erst mal.

Danke und schönen Abend

Gerd

Hallo Gerd,
OK, das mit dem Hilfetext muss ich noch anpassen, Danke für den Hinweis!
(Caption, wäre eine Bildbeschreibung/-unterschrift). Diese wird noch nicht unterstützt.

Hast Du mal versucht ein kleineres Bild zu versenden? -- > Klappt das?

Wenn auch da keine Rückmeldung kommt, kannst Du beim Modul mal das Attribut "verbose" auf den Wert 4 setzen und dann nochmals probieren? Ich würde mir dann gerne den log anschauen.

Achso, nur zur Sicherheit:
- Du hast natürlich nach Einspielen von beiden Modulen entweder den Server neu gestartet oder ein reload für die beiden Module ausgelöst?
- Versenden von Text funktioniert noch?

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

Maista

#132
Hallo Johannes
Ich habe rereadcfg gemacht.
Hiffe das ist das gleiche?
Scheinbar nicht. Hab nun das Modul mit reload geladen.
Nun stehen im log Fehler. Die Android copy&paste Funktion ist nervig
Bekomme nicht alles markiert.
Hier der Anfang
Zitatm line 29.
2015.10.01 22:37:32 3: TelegramBot_Set myfhemBot: called
2015.10.01 22:37:32 3: TelegramBot_Set myfhemBot: Processing TelegramBot_Set( ? )
2015.10.01 22:37:38 3: TelegramBot_Set myfhemBot: called
2015.10.01 22:37:38 3: TelegramBot_Set myfhemBot: Processing TelegramBot_Set( ? )
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Initialize redefined at ./FHEM/50_TelegramBot.pm line 200.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Define redefined at ./FHEM/50_TelegramBot.pm line 222.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Undef redefined at ./FHEM/50_TelegramBot.pm line 270.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_State redefined at ./FHEM/50_TelegramBot.pm line 295.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Set redefined at ./FHEM/50_TelegramBot.pm line 311.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Get redefined at ./FHEM/50_TelegramBot.pm line 435.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Attr redefined at ./FHEM/50_TelegramBot.pm line 485.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_ReadHandleCommand redefined at ./FHEM/50_TelegramBot.pm line 548.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_SendIt redefined at ./FHEM/50_TelegramBot.pm line 641.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_UpdatePoll redefined at ./FHEM/50_TelegramBot.pm line 786.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_Callback redefined at ./FHEM/50_TelegramBot.pm line 846.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_ParseMsg redefined at ./FHEM/50_TelegramBot.pm line 972.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_DoUrlCommand redefined at ./FHEM/50_TelegramBot.pm line 1047.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_GetIdForPeer redefined at ./FHEM/50_TelegramBot.pm line 1106.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_GetContactInfoForContact redefined at ./FHEM/50_TelegramBot.pm line 1146.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_GetFullnameForContact redefined at ./FHEM/50_TelegramBot.pm line 1158.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_IsKnownContact redefined at ./FHEM/50_TelegramBot.pm line 1181.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_CalcContactsHash redefined at ./FHEM/50_TelegramBot.pm line 1198.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_InternalContactsFromReading redefined at ./FHEM/50_TelegramBot.pm line 1243.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_ContactUpdate redefined at ./FHEM/50_TelegramBot.pm line 1251.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_userObjectToString redefined at ./FHEM/50_TelegramBot.pm line 1280.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_BinaryFileRead redefined at ./FHEM/50_TelegramBot.pm line 1311.
2015.10.01 22:38:31 1: PERL WARNING: Subroutine TelegramBot_BinaryFileWrite redefined at ./FHEM/50_TelegramBot.pm line 1333.
2015.10.01 22:38:32 1: PERL WARNING: Subroutine TelegramBot_Setup redefin.....



Text versenden geht noch. Bild kommt keins an.

Freitag abend wollten wir ins Kino. Eventuell dann erst am Samstag meh /opt/fhem/FHEM/Freut_sich.jpgr zeit.
Lieg schon im Bett.
Gute Nacht

Gerd

viegener

Hallo Gerd,
Nein, rereadcfg ist nicht dasselbe, denn dabei wird nur die Konfiguration neu egelesen (also Deine Devices/States), aber normalerweise werden veränderte Perl-module nicht nachgelesen. Es gibt meines Wissens nur die Möglichkeit reload <modulname> um das im laufenden Betrieb zu tun. Aber Achtung: Die sauberere Lösung ist den Server per shutdown restart neu zu starten.

Also der Logteil ist leider nur der Teil, der automatisch beim reload entsteht, da ja die ganzen Methoden neu geladen und damit neu definiert werden. Ausserdem ist das auch nur der reload teil für telegrambot und nicht httputils.

Interessant wäre zu sehen, was beim senden eines Bildes passiert.
Gruss,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Habe soeben nochmals eine aktualisierte Version in github hochgeladen, da es u.U. vorkommen konnte, dass fhem beim start des telegram bots abstürzt. (Danke an HolyMoly für den github issue).

Neueste Version ist auch im ersten Post angehängt (ohne httputils).
Gruss,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können