Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

derchrome

Hallo zusammen,
kurze Frage:
Wenn ich meine Festnetznummer im Format +49 eingebe, dann kommt immer eine Fehlermeldung incorrect phone number. Mit einer Handynummer funktioniert es. Hat jemand eine Idee woran das liegen könnte?

viegener

Zitat von: derchrome am 14 Januar 2016, 21:56:21
Hallo zusammen,
kurze Frage:
Wenn ich meine Festnetznummer im Format +49 eingebe, dann kommt immer eine Fehlermeldung incorrect phone number. Mit einer Handynummer funktioniert es. Hat jemand eine Idee woran das liegen könnte?

Kannst Du erklären, wo Du die Telefonnummer eingibst?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

e3xtreme

Zitat von: viegener am 14 Januar 2016, 00:51:48
Vielleicht brauchst Du keine Schleife/sleep, wenn ich in der Commandref von IPCAM schaue, sieht es so aus, als ob IPCAM nach speichern des / der Bilder einen event schickt, denn Du als trigger für das versenden per telegram versenden könntest. Hier das Beispiel aus der commandref von IPCAM:

Hallo danke für den Tipp, klappt zwar jetzt so wie es soll, jedoch muss man auf der Klingel gefühlt um einiges länger drauf bleiben, dass es überhaupt klingelt, kann es sein, dass er da einen Befehl wegschmeißt, weil er grad zwei notifies ausführen möchte??

Bitte hier Antworten, habe einen neuen Thread eröffnet :-)

http://forum.fhem.de/index.php/topic,47359.0.html

derchrome

Zitat von: viegener am 14 Januar 2016, 22:17:49
Kannst Du erklären, wo Du die Telefonnummer eingibst?
Ich war jetzt über SSH verbunden und hab den Client über "bin/telegram-cli -k tg-server.pub" (Anleitung aus dem Wiki) gestartet. Und dann kommt die Abfrage.

viegener

OK, die Meldung kommt vermutlich von telegram selbst, ist das eine VOIP-Nummer, bei denen gibt es wohl bestimmte Bereiche, die telegram ablehnt. Mit meiner eigenen Festnetznummer ging es.

Generell: Nur das TelegramBot-Modul wird weiter gepflegt, das Telegram-Modul, dass die Installation von telegram-cli und eine Telefonnummer voraussetzt läuft zwar momentan stabil, ich würde aber empfehlen das bot-Modul zu verwenden. Dieses hat inzwischen auch deutlich mehr Funktionen.

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

derchrome

#410
Dann werde ich das mal ausprobieren, danke!
Wie bekomme ich den anderen Client wieder deinstalliert?

viegener

Das Modul 70_Telegram wirst Du am einfachsten wieder los in dem Du alle Devices die diesen Type verwenden entfernst und dann die Datei 70_Telegram.pm auch löscht. Danach fhem neustarten und prüfen ob es Fehler im Log wg. des Moduls gibt.

telegram-cli wird man danach wieder los, in dem man sicherstellt, das der Prozess nicht mehr läuft und dann das Verzeichnis komplett entfernt. Solange man nicht zusätzliche Schritte (wie z.B. ein service/daemon skript zu erstellen o.ä.) sollte dann auch der Client weg sein.

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

Heinz1973

Zitat von: viegener am 07 Januar 2016, 17:49:39
Danke für die Blumen  ;)

Ja eine solche Möglichkeit gibt es über die favorites. Damit kann man nicht nur einzelne favoriten definieren die über nummern angesprochen werden können sondern auch alias commands genauso wie Du es Dir vorstellst. Schau mal die Attribute favorites, speziell den Absatz über alias commands in der commandref an.

Ich helfe gerne weiter, wenn Du dazu weitere Fragen hast.


Johannes

Ok, habs über Google irgendwo den Hinweis gefunden, jedoch nicht auf der fhem wiki Seite http://www.fhemwiki.de/wiki/TelegramBot
Hier wäre noch ein Beispiel super, das man einfach rauskopieren kann, das hätte mir Zeit erspart. Funktioniert einwandfrei.

viegener

Zitat von: Heinz1973 am 17 Januar 2016, 22:29:43
Ok, habs über Google irgendwo den Hinweis gefunden, jedoch nicht auf der fhem wiki Seite http://www.fhemwiki.de/wiki/TelegramBot
Hier wäre noch ein Beispiel super, das man einfach rauskopieren kann, das hätte mir Zeit erspart. Funktioniert einwandfrei.

Kann man gerne machen, ich komme leider momentan einfach nicht dazu Code, Commandref und wiki weiterzupflegen (FHEM ist ja auch zum mitmachen  ;) )

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

JoeALLb

Ich würde gerne eine Voicemessage, die ich an den Telegrambot schicke, über meine Lautsprecher ausgeben. GGf. möchte ich über die Message sogar steuern, in welchem Raum die Message wiedergegeben werden soll. Dazu müsste ich dort einfach eine MP3 bekanntgeben.
Gibt es dazu eine Idee, wo ich anfangen könnte?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

viegener

Zitat von: JoeALLb am 18 Januar 2016, 09:16:31
Ich würde gerne eine Voicemessage, die ich an den Telegrambot schicke, über meine Lautsprecher ausgeben. GGf. möchte ich über die Message sogar steuern, in welchem Raum die Message wiedergegeben werden soll. Dazu müsste ich dort einfach eine MP3 bekanntgeben.
Gibt es dazu eine Idee, wo ich anfangen könnte?

Bisher leider gar nicht, da der Bot bisher Multimedia zwar verschicken kann, aber empfangene Bilder/Audio/Dokumente werden noch nicht vollständig behandelt und heruntergeladen. Das steht auf meiner Todo, aber bisher habe ich noch keinen Use case dazu gehabt. Ich kann mir das in den nächsten Tagen anschauen.

Vorschlag: In einem ersten Schritt werden die Nachrichten vom Bot angenommen und es gibt ein zusätzliches Reading in dem ein URL zum herunterladen steckt. Dadurch wird vermieden, dass Bandbreite zum Herunterladen (und Speicherplatz lokal) nur verwendet wird, wenn die Datei auch erwünscht ist. Allerdings steckt dann im URL auch das Authtoken für den Bot mit drin, so ist die Schnittstelle von telegram aufgebaut.

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

JoeALLb

Zitat von: viegener am 18 Januar 2016, 11:40:15
Vorschlag: In einem ersten Schritt werden die Nachrichten vom Bot angenommen und es gibt ein zusätzliches Reading in dem ein URL zum herunterladen steckt. Dadurch wird vermieden, dass Bandbreite zum Herunterladen (und Speicherplatz lokal) nur verwendet wird, wenn die Datei auch erwünscht ist. Allerdings steckt dann im URL auch das Authtoken für den Bot mit drin, so ist die Schnittstelle von telegram aufgebaut.

Das wäre toll. Den Rest dazu kann ich dann selbst übernehmen (denke ich...)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

viegener

Zitat von: JoeALLb am 18 Januar 2016, 14:14:32
Das wäre toll. Den Rest dazu kann ich dann selbst übernehmen (denke ich...)

OK, habe gerade eine erste Version in github hochgeladen (also noch nicht über update verfügbar):

Die Nachrichten werden jetzt vom Bot angenommen und es wird ein zusätzliches Reading msgFileId mit der ID der Datei erzeugt.
In msgText wird angegeben welche Art Multimediafile heruntergeladen werden kann (z.T. auch mit Grösse/Bildunterschrift/Mimetype). Der Inhalt beginnt immer mit "received ", also z.B.:
received photo # Size: 264323

Um daraus dann einen URL für das Herunterladen zu erzeugen, muss man allerdings noch einen get-Befehl ausführen, um sich von telegram den URL zu einer Datei liefern zu lassen. Als Parameter wird hier der inhalt von msgFileId übergeben.

get telegrambot urlForFile DuacxG4Yo6gVwu9pxazZPJqELgyoABHgOPu2hwuvVLjMB

Ich musste das so bauen, da die URLs nur temporär gültig sind, während die FileIds auch langfristig gültig sind. Also sollte das get Command direkt vor dem Herunterladen aufgerufen werden. Dazu kann die fileId auch zwischengespeichert werden.

Achso es können nicht nur Photos, sondern auch Voicemessages, Videos, Audio und allgemeine Dokumente empfangen werden.
Vorschlag: In einem ersten Schritt werden die Nachrichten vom Bot angenommen und es gibt ein zusätzliches Reading in dem ein URL zum herunterladen steckt. Dadurch wird vermieden, dass Bandbreite zum Herunterladen (und Speicherplatz lokal) nur verwendet wird, wenn die Datei auch erwünscht ist. Allerdings steckt dann im URL auch das Authtoken für den Bot mit drin, so ist die Schnittstelle von telegram aufgebaut.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

ulli

Ich habe inzwischen alles gut am Laufen mit dem Telegram Modul.

Nun habe ich einen Chat erstellt mit zwei Benutzern und diesen Chat als defaultPeer angegeben.
Wenn ich jetzt den Bot direkt anschreibe (also nicht über den Chat) dann antwortet der Bot immer im Chat (also dem defaultPeer)
Kann man es irgendwie einstellen im Modul das der Bot dem Antwortet von dem er "gefragt" wird?

Reinerlein

Hallo Johannes,

ich bin seit Gestern auch Benutzer des Moduls. Danke für die hervorragende Arbeit...

Ich hätte jetzt einen zusätzlichen Anwendungsfall:
Als Antwort auf eine Command-Anfrage per Telegram-App ein Bild/Plot erhalten.
Konkret geht es um Plots, die ich auf eine Anfrage hin erhalten möchte.

Ich hatte mal kurz in den Code geschaut, und denke, dass es relativ einfach umzusetzen wäre:
- Ein neuer sendImage-Befehl, der keinen Dateinamen erhält, sondern direkt den Datenstrom, der gesendet werden soll
- Eine Erweiterung der Prozedur HandleCommand, die erkennt, ob das Ergebnis des Kommandos ein Bild ist, und dann den neuen sendImage-Befehl aufruft. Das Prüfen kann man z.B. mit einem regulären Ausdruck auf dem Ergebnis von AnalyzeCommand machen:
if ($ret =~ m/^\x89PNG\r\n\x1a\n/) {
# Hier das PNG als Stream direkt versenden
}


Damit könnte man dann so Anweisungen versenden wie

ok fhem { plotAsPng('weblink_aussen_Temperatur') }
und würde als Antwort direkt den Plot erhalten.

Das ganze kann/sollte man natürlich/vielleicht um die anderen möglichen Bildtypen erweitern, falls noch andere use cases existieren...

Meinst du das wäre von deiner Seite aus möglich?

Danke schon mal für deine Reaktion...

Grüße
Reiner