Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

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

Panik

Hallo viegener,

ist es möglich, das mir ein Telegrambot-Device ein zeitaktuelles Reading zurückgibt,
was der Bot als Antwort gegeben hat.

Momentan ist es ja so, daß ich z.B. vom Smartphone aus einen Befehl sende und bekomme eine Antwort.
Diesen Text, der da links im Smartphone angezeigt wird hätte ich gern als Reading ...

Geht das ?

Panik
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

viegener

Zitat von: Panik am 25 November 2016, 16:47:40
Hallo viegener,

ist es möglich, das mir ein Telegrambot-Device ein zeitaktuelles Reading zurückgibt,
was der Bot als Antwort gegeben hat.

Momentan ist es ja so, daß ich z.B. vom Smartphone aus einen Befehl sende und bekomme eine Antwort.
Diesen Text, der da links im Smartphone angezeigt wird hätte ich gern als Reading ...

Geht das ?

Panik

Sorry, Panik, aber ich stehe auf dem Schlauch bei Deiner Anfrage. Mir ist nicht klar, welche Antwort Du als Reading sehen möchtest?

Ich vermute, Du meinst die letzte gesendete Nachricht? Wenn Ja, dann steht dieser Text als Internal sentMsgTextzur Verfügung. Der Wert kann abgerufen werden sobal die Readings zur gesendeten Nachricht gesetzt sind (Id und Result). Die Message nochmal als Reading zu speichern wollte ich eigentlich vermeiden.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Panik

Hallo viegener,

ich habe einen kommentierten Screenshot angehangen, welcher beschreibt, was ich meine. Bitte mal anschauen.

Mich interessiert der Text zur msgID 310

Hintergrund ist der Folgender:
Man findet im Internet viele Hinweise, wie man den Telegram-Befehl "sendMessage" verwendet - auch automatisiert!
Doch über

https://api.telegram.org/bot1xxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxx/sendMessage?chat_id=yyyyyyyyyy&text=Dieser Text kommt über https://api.telegram.org/bot12345:ABCDEF/sendMessage?chat_id=6789&text=usw


kann man nur nachbilden, wie ein Bot eine Nachricht sendet.
Aber ich kann die Seite "Mensch" nicht auf diese Art simulieren, wie es die Clientsoftware bzw. Telegram-Apps tun.
Nachrichten von Bot zu Bot werden in Telegram.api nicht unterstützt  :'(

Letztlich geht's mir darum, zu jeder fortlaufenden msgID den zugehörigen Text zu bekommen.
Ich hoffe, auf diese Weise in FHEM den Text auswerten zu können.

Panik
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

viegener

@Panik: Ich rätsele leider immer noch herum, was Du eigentlich erreichen willst.
Meine aktuelle Vermutung ist, dass Du Readings haben willst, die Messages beinhalten die von irgendjemandem, aber nicht dem TelegramBot in FHEM versendet wurden, durch Aufruf des sendMessage URLs. Also Nachrichten, die in der TelegramApp des Empfängers als vom Bot gesendet auftauchen, aber nicht über den bot in FHEM versendet wurden.

Was der Anwendungsfall dafür ist, ist mir ein Rätsel und leider ist das auch nicht möglich. Das Telegram Bot API bietet meines Wissens nach keine Möglichkeit Nachrichten die versendet wurden nachträglich wieder abzurufen. Das Bot-API von Telegram ist kein vollständiges Client-API und ein Bot ist auch kein normaler Benutzer.

Wenn Du beschreiben würdest, welches Problem Du eigentlich lösen willst, kann man überlegen wie das anzugehen wäre, wenn möglich.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Panik

@viegener

brauchst nicht rätseln ... ich erzähl:

Es wurde im Forum auch schon angefragt, aber leider kam keine verwertbare Aussage.

Ich habe (nach etlichen vergeblichen Versuchen) das in Frage kommende Bindeglied
zwischen der Android-App "Tasker" und FHEM (über Telegram-Api) beschrieben.
Daher habe ich nur die Kernfrage gestellt, auf die es m.E. ankommt.

Tasker ist eine sehr populäre App unter Android, die  auf verschiedenste Tasks
automatisch Aktionen ausführen kann.
Sie kann auch einen HTTP-Post an Telegram versenden, wie ich ihn oben angab.
Dies klappt erfolgreich. Nur leider kann dein Modul es nicht erkennen, verwerten und eine
Aktion in FHEM damit auslösen.

Meine gewünschte Aktion:
Wenn ich in den "Dunstkreis" meiner heimatlichen Netzzellen komme,
soll FHEM meine Temperatur der Wohnung auf Wunschtemperatur einstellen (oder WLAN einschalten)
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

hartenthaler

Und warum verwendest Du dazu nicht Geofancy?

Oder warum kann nicht tasker eine html-Seite direkt auf dem fhem-Server-aufrufen statt über Telegram zu gehen? Über pushbullet kann man übrigens auch mit fhem kommunizieren und Kommandos schicken.

Klar, ggf. muss fhem von außen erreichbar sein, etwa über einen VPN-Zugang.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

viegener

Zitat von: Panik am 26 November 2016, 13:35:31
Sie kann auch einen HTTP-Post an Telegram versenden, wie ich ihn oben angab.
Dies klappt erfolgreich. Nur leider kann dein Modul es nicht erkennen, verwerten und eine
Aktion in FHEM damit auslösen.


Ja, das Problem ist wie oben beschrieben, dass diese Einschränkung durch das TelegramBot-API entsteht und es deshalb keine Lösung für den TelegramBot in FHEM geben kann, solange Telegram das API nicht ändert oder eine Möglichkeit schafft das Bots untereinander Nachrichten verschicken können.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Masterfunk

Hallo,

ich möchte gerne ein an den TelegramBot gesendetes Bild in ftui darstellen.
Das funktioniert auch, wenn ich den Wert "fileUrl" benutze (Habe mir dazu ein entsprechendes Userreading angelegt.

Das Problem ist nun, das die "fileUrl" automatisch neu erzeugt wird, wenn ein neues Bild gesendet wird.

Habe es mit folgendem notify versucht, geht aber nicht:

TelegramBot:msgFileId get TelegramBot urlForFile $EVENT

Hat jemand eine Tip für mich?

Danke und Gruß
Detlef

DeeSPe

Was macht denn das userReading und was soll das notify genau machen?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Masterfunk

Zitat von: DeeSPe am 26 November 2016, 23:02:12
Was macht denn das userReading und was soll das notify genau machen?

Gruß
Dan

Das userreading macht aus dem "Internal" ein "Reading" :

fileUrl {InternalVal ($name,"fileUrl",0)}

Das notify soll den Befehl zum erstellen der fileurl ausführen:

get TelegramBot urlForFile <msgFileId>

DeeSPe

Habe eben mal ein userReading erstellt welches direkt das letzte Bild (jpg,jpeg,png) im Reading lastPhoto anzeigt.

attr  TB userReadings lastPhoto:msgFileId.* {"<html><img src=\"".InternalVal($name,"fileUrl","")."\"></html>" if (InternalVal($name,"fileUrl","") =~ /(jpg|jpeg|png)$/)}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Zitat von: DeeSPe am 26 November 2016, 23:14:43
Habe eben mal ein userReading erstellt welches direkt das letzte Bild (jpg,jpeg,png) im Reading lastPhoto anzeigt.

attr  TB userReadings lastPhoto:msgFileId.* {"<html><img src=\"".InternalVal($name,"fileUrl","")."\"></html>" if (InternalVal($name,"fileUrl","") =~ /(jpg|jpeg|png)$/)}

Gruß
Dan

Sorry, da hat ja noch was gefehlt:
attr TB userReadings lastPhoto:msgFileId.* {my $url=fhem "get $name urlForFile ".ReadingsVal($name,"msgFileId",""); "<html><img src=\"$url\" width=480></html>" if ($url =~ /(jpg|jpeg|png)$/)}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Masterfunk

Die "abgespeckte" Variante ist genau das was ich brauche:

fileUrl:msgFileId.* {my $url=fhem "get $name urlForFile ".ReadingsVal($name,"msgFileId","")}

Vielen Dank!

DeeSPe

Zitat von: Masterfunk am 26 November 2016, 23:29:54
Die "abgespeckte" Variante ist genau das was ich brauche:

fileUrl:msgFileId.* {my $url=fhem "get $name urlForFile ".ReadingsVal($name,"msgFileId","")}

Vielen Dank!

Na siehst Du! 8)

Mit meiner Version des userReadings könnte man sich mit einem readingsHistory mehrere der letzten Bilder anzeigen lassen:
define rh_TB_lastPhoto readingsHistory TB:lastPhoto.*

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe