Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

binford6000

ZitatEs gibt einen set Befehle (replaceContacts), da kann man den Inhalt des alten Readings aus dem Backup wieder setzen (ACHTUNG: Nicht über setreading sondern über set ... replaceContacts ...)

Moin,
mit replaceContacts hat es funktioniert. Den set-Befehl hab ich irgendwie übersehen...
Vielen Dank fürs Helfen!

VG Sebastian

binford6000

#2701
Hello again,
diesmal mit einem anderen Problemchen:
In https://forum.fhem.de/index.php/topic,77297.msg1259756.html#msg1259756 habe ich bereits geschrieben dass ich meine Dialoge nicht mehr aufrufen kann. Es passiert nichts und im TelegramBot steht die Fehlermeldung:
Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:


Der Dialog wird laut Log aber korrekt zusammengebaut und ausgeliefert.
Sämtliche Versuche mit

  • set fhembot msgDelete [fhembot:_sentMsgId]
  • set fhembot msgDelete [fhembot:sentMsgId] (wobei die leer ist?)
  • set fhembot reset
haben leider nicht zum Erfolg geführt. Normales senden mit zB
msg push blabla
funktioniert aber nach wie vor.

VG Sebastian

EDIT: Problem gelöst! Siehe geändertes notify im Wiki und den Beitrag von Beta-User im msgDialog-Thread:

viegener

Ich habe eine neue Version des Moduls eingechecked ins SVN

Darin gibt es ein neues Reading, dass den Zeitpunkt einer Nachricht, wie sie von telegram empfangen wurde angibt. Der Zeitstempel wird in lokaler Zeit in der Form eines Readingtimestamps im Inhalt angegeben. Dies kann auch dafür verwendet werden, um auf alte Nachrichten, die durch ein Problem nicht kurzfristig empfangen wurden nicht mehr zu reagieren.

Ausserdem sind noch ein paar Korrekturen in der neuen Version
Bei Problemen einfach melden.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Ruggy

Ich hatte vor ca. zwei Jahren TelegramBot eingerichtet.
Mir werden Bilder von einer Überwachungskamera an mein Handy mit Telegramm geschickt (nach dem Klingeln an der Haustüre).
Dies funktioniert bisher soweit ohne Probleme.

Ich habe jetzt vor, dass meine Bilder von der Überwachungskamera, zusätzlich noch an ein anderes Handy geschickt werden.
Für mein Vorhaben muss ich ja die Nachricht noch an einen anderen @Username (2. Handy) schicken und vorher auch dort Telegram installieren und einrichten.
Bzw. ich muss den 2. Kontakt in meine Readings angezeigt bekommen.

Jetzt ist mir aber aufgefallen, dass ich damals bei der ersten Einrichtung, ich es anscheinend nicht richtig eingerichtet habe. Anscheinend habe ich den Token nicht angegeben.

Zumindest wird im Device teleBot (mein TelegramBot) mit "RawDefinition" u.a. folgendes angezeigt:


defmod teleBot TelegramBot
attr teleBot allowUnknownContacts 0
attr teleBot defaultPeer MeinName
attr teleBot pollingTimeout 120
attr teleBot room Alarm


Unter Readings steht folgendes:

Contacts  1234567890:MeinName:

also ohne @Username

(1111111111 und MeinName habe ich fürs Forum abgeändert).
Außerdem ist die Zahl 1111111111 auch nicht die selbe Zahl, wie in meinen Token in der API steht, dort steht z.B. 2222222222.


Aber funktioniert hat es ja bisher trotzdem. Kann in beide Richtungen Nachrichten schicken.
Wie kann das sein?


Sollte ich jetzt das Device teleBot löschen und neu anlegen und diesmal mit dem token?
Kann ich den selben Namen "teleBot" wieder verwenden?

Also so wie in Wiki; hier das Beispiel aus Wiki:
define myTelegramBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw


Oder wird es danach zu Problemen führen und das bisherige (mit einem Handy) funktioniert auch nicht mehr?

Vielen Dank
Viele Grüße
Ruggy

viegener

Zitat von: Ruggy am 23 Februar 2023, 19:57:19
Ich hatte vor ca. zwei Jahren TelegramBot eingerichtet.
Mir werden Bilder von einer Überwachungskamera an mein Handy mit Telegramm geschickt (nach dem Klingeln an der Haustüre).
Dies funktioniert bisher soweit ohne Probleme.

Ich habe jetzt vor, dass meine Bilder von der Überwachungskamera, zusätzlich noch an ein anderes Handy geschickt werden.
Für mein Vorhaben muss ich ja die Nachricht noch an einen anderen @Username (2. Handy) schicken und vorher auch dort Telegram installieren und einrichten.
Bzw. ich muss den 2. Kontakt in meine Readings angezeigt bekommen.

Jetzt ist mir aber aufgefallen, dass ich damals bei der ersten Einrichtung, ich es anscheinend nicht richtig eingerichtet habe. Anscheinend habe ich den Token nicht angegeben.

Zumindest wird im Device teleBot (mein TelegramBot) mit "RawDefinition" u.a. folgendes angezeigt:


defmod teleBot TelegramBot
attr teleBot allowUnknownContacts 0
attr teleBot defaultPeer MeinName
attr teleBot pollingTimeout 120
attr teleBot room Alarm


Unter Readings steht folgendes:

Contacts  1234567890:MeinName:

also ohne @Username

(1111111111 und MeinName habe ich fürs Forum abgeändert).
Außerdem ist die Zahl 1111111111 auch nicht die selbe Zahl, wie in meinen Token in der API steht, dort steht z.B. 2222222222.


Aber funktioniert hat es ja bisher trotzdem. Kann in beide Richtungen Nachrichten schicken.
Wie kann das sein?


Sollte ich jetzt das Device teleBot löschen und neu anlegen und diesmal mit dem token?
Kann ich den selben Namen "teleBot" wieder verwenden?

Also so wie in Wiki; hier das Beispiel aus Wiki:
define myTelegramBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw


Oder wird es danach zu Problemen führen und das bisherige (mit einem Handy) funktioniert auch nicht mehr?

Vielen Dank
Viele Grüße
Ruggy

Das token steht grundsätzlich nicht im Bot selber sondern wird separat abgelegt. Da Senden und Empfangen geht ist Dein token offensichtlich valide.

Das Token hat nichts mit der Adresse / ID eines contacts zu tun.

Wenn Du einen neuen Benutzer in den Contacts haben wilst, muss dieser den Bot in Telegram anschreiben. Damit er in den Contacts auftaucht, muss aber (kurzzeitig) allowUnknownContacts auf 1 gesetzt werden.

Dann solltest Du den Kontakt auch anschreiben können.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Ruggy

Danke.

Ja, senden und empfangen geht.
Habe nur in einem Video über die Einrichtung von telegram gesehen, dass dort bei den internals bei URL der token mit steht. Das URL habe ich gar nicht.
Aber es funktioniert ja.

Zitat von: viegener am 23 Februar 2023, 23:01:39
Wenn Du einen neuen Benutzer in den Contacts haben wilst, muss dieser den Bot in Telegram anschreiben.

Da ist dann mein Bot gemeint, welcher unter Internals bei "me" steht? @meinName_bot?

Muß ich dann im 2. Handy einen Neuen Kontakt mit diesem @meinName_bot anlegen und an diesen eine Nachricht schicken?

viegener

Zitat von: Ruggy am 24 Februar 2023, 15:09:31
Danke.

Ja, senden und empfangen geht.
Habe nur in einem Video über die Einrichtung von telegram gesehen, dass dort bei den internals bei URL der token mit steht. Das URL habe ich gar nicht.
Aber es funktioniert ja.

Da ist dann mein Bot gemeint, welcher unter Internals bei "me" steht? @meinName_bot?

Muß ich dann im 2. Handy einen Neuen Kontakt mit diesem @meinName_bot anlegen und an diesen eine Nachricht schicken?

Nein Du solltest den Bot nach Namen oder @... Name suchen und dann einen chat damit starten - danach ist das ein ganz normaler chat in der Liste in Telegram
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Parador

Hallo Zusammen,
ich nutze den TelegramBot gerne und intensiv, DANKE für die viele Arbeit. Oft nutze ich den Bot zusammen mit msgDialog und auch mit Clients am Smartphone und Desktop. Ich bin deshalb nicht ganz sicher wo meine Frage hingehört und beginne jetzt mal hier....

Wenn ich mein Zauberwort für den msgDialog sende und mein Auswahlmenü zu sehen bekomme, kann ich am Client mit dem ich sende perfekt damit arbeiten. Oft ist es aber so, dass am anderen Client also z.B. am Desktop, das Auswahlmenü weiter in der ersten Position stehen bleibt und auch nicht verschwindet, wenn der Befehl abgearbeitet ist. Da der Dialog aber schon beeendet ist, kann ich dann auch keine zweite Reaktion auslösen (was gut ist). Besser wäre aber, wenn der Dialog auf beiden Clients durchlaufen/beendet wird.

Ist das nun etwas, was nur bei mir auftritt, oder haben das mehrere? und ist es eher etwas von msgDialog, oder doch eher TelegramBot?

Danke für Euere Unterstützung schon jetzt....

Ruggy

@viegener

Sorry, aber ich muss mich nochmal zu meinem "Problem" melden, bzgl. einem weiteren Handy an FHEM anmelden.
Bin erst dazugekommen es zu testen und stelle mich trotzdem zu doof an. (habe auch das System mit dem Botfather nicht ganz verstanden)

Ich habe am ersten Handy den Bot-Namen z.B. FHEM_HandyEins und kann mit diesem auch mit FHEM kommunizieren und auch umgekehrt.
In FHEM steht unter Contacts z.B. 1234567890:MeinName: (MeinName ist der Name, wie ich in Telegramm heiße)

Ich habe nun am zweiten Handy den Botfather gestartet und dort ebenfalls einen Bot-Namen eingerichet z.B. FHEM_HandyZwei.

Ich muss doch jetzt eine Nachricht von FHEM an FHEM_HandyZwei schicken oder umgekehrt?
Bzw. wie mache ich das?



Ruggy

Wenn ich jetzt z.B. von FHEM aus folgenden Befehl sende (die Namen sind den tatsächlichen angepasst)

set teleBot message @FHEM_HandyZwei test
wird folgendes angezeigt

FAILED peer not found :FHEM_HandyZwei:
Der Fehler wird ebenfalls angezeigt, wenn ich an mein erstes Handy schicke, mit dem bisher alle funktioniert z.B.

set teleBot message @FHEM_HandyEins test

Ruggy

Habe es jetzt zumindest geschafft, dass in Contacts der zweite Kontakt drinnen steht.

Kann bzw. wie kann ich im Attribut defaultPeer den zweiten Kontakt hinzufügen?

Haben es schon mit "," oder "@" versucht, mal mit mal ohne Abstand.
Oder kann hier nur ein Kontakt aufgeführt werden?


Anmerkung:
Nachdem ich den oberen Text geschrieben hatte, habe ich es mit einen Leerzeichen zwischen den Kontaktnamen probiert. Damit hat es funktioniert.

Maista

Zitat von: Ruggy am 26 März 2023, 00:29:30Kann bzw. wie kann ich im Attribut defaultPeer den zweiten Kontakt hinzufügen?

Ich vermute mal gar nicht.
In der Hilfe steht nichts davon das hier mehr als ein Name eingetragen werden kann.
An defaultPeer gehen alle Systemmeldungen. Z.B. wenn einer ohne Berechtigung den Bot anspricht.

Gruss Gerd

viegener

Zitat von: Ruggy am 26 März 2023, 00:29:30Habe es jetzt zumindest geschafft, dass in Contacts der zweite Kontakt drinnen steht.

Kann bzw. wie kann ich im Attribut defaultPeer den zweiten Kontakt hinzufügen?

Haben es schon mit "," oder "@" versucht, mal mit mal ohne Abstand.
Oder kann hier nur ein Kontakt aufgeführt werden?


Anmerkung:
Nachdem ich den oberen Text geschrieben hatte, habe ich es mit einen Leerzeichen zwischen den Kontaktnamen probiert. Damit hat es funktioniert.

Eine andere Möglichkeit mehrere Kontakte als defaultPeer einzutragen ist in Telegram eine Gruppe mit diesen Teilnehmern anzulegen und dann die Gruppe als defaultpeer einzutragen. Dazu muss die Gruppe aber auch vom bot erreichbar sein, das erfordert aber ein bisschen Umwege.

Die Lösung mit mehreren peers im Attribut durch Leerzeichen getrennt habe ich so nie getestet
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

RalfRog

Hallo ich habe ein Problem mit dem Aufruf des TelegramBot

Gibt es  eine Idee woran es liegen könnte, dass es Probleme gibt (geben kann) in einer Sub den TelegramBot aufzurufen:
    => fhem("set teleBot message @#UserName LogCheck: $Variable1 Text  $Variable2",1);

Ich nutze im Prinzip den gleichen Aufruf in per AT aufgefufenen Subs der 99_myUtils - das klappt bisher anstandslos.

Im Problemfall wird vom Modul 72_FRITZBOX.pm bei Aufruf "get log" eine im Modul fest codierte Sub in 99_myUtils aufgerufen:
    => (myUtilsFritzLogExPost($$$))
aus der heraus dann der TelegramBot aufgerufen wird aber nicht durch läuft.

  • Folgendes sagt mir das Log mit verbose 5

Aufruf in der Kommandozeile im Webinterface von FHEM => "set teleBot message @#UserName LogCheck:" produziert:
2023.03.25 19:47:50.490 5: TelegramBot_Set teleBot: called
2023.03.25 19:47:50.491 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( message )
2023.03.25 19:47:50.491 5: TelegramBot_Set teleBot: start send for cmd :message: and sendType :0:
2023.03.25 19:47:50.492 5: TelegramBot_SendIt teleBot: called
2023.03.25 19:47:50.492 5: TelegramBot_SendIt teleBot: try to send message to :#UserName: -:LogCheck:: - add :<undef>: - replyid :<undef>::    options ::
2023.03.25 19:47:50.493 4: TelegramBot_GetFullnameForContact # Contacts is -123456789::#UserName:
2023.03.25 19:47:50.494 4: TelegramBot_GetFullnameForContact # name is #UserName
2023.03.25 19:47:50.494 5: TelegramBot_readToken: Read Telegram API token from file
2023.03.25 19:47:50.497 4: TelegramBot_SendIt parseMode 0
2023.03.25 19:47:50.498 4: TelegramBot_SendIt teleBot: Message for sending :--TelegramBot_boundary-x0123
Content-Disposition: form-data; name="chat_id"

-123456789
--TelegramBot_boundary-x0123
Content-Disposition: form-data; name="text"

LogCheck:
--TelegramBot_boundary-x0123--:
2023.03.25 19:47:50.498 4: TelegramBot_SendIt teleBot: timeout for sent :30:
2023.03.25 19:47:50.502 5: TelegramBot_Set teleBot: message done succesful:
2023.03.25 19:47:50.505 5: TelegramBot_Set teleBot: called
2023.03.25 19:47:50.508 5: TelegramBot_Set teleBot: called
2023.03.25 19:47:50.687 5: TelegramBot_Callback teleBot: called from SendIt
2023.03.25 19:47:50.688 5: TelegramBot_Callback teleBot: data returned :{"ok":true,"result":{"message_id":7128,"from":{"id":987654321,"is_bot":true,"first_name":"Yxxx_Zxxx","username":"Yxxx_Zxxx_bot"},"chat":{"id":-123456789,"title":"UserName","type":"group","all_members_are_administrators":true},"date":1234560011,"text":"LogCheck:"}}:
2023.03.25 19:47:50.689 5: TelegramBot_Deepencode teleBot: encoded a String from :1: to :1:
2023.03.25 19:47:50.690 5: TelegramBot_Deepencode teleBot: encoded a String from :Yxxx_Zxxx: to :Yxxx_Zxxx:
2023.03.25 19:47:50.690 5: TelegramBot_Deepencode teleBot: encoded a String from :1: to :1:
2023.03.25 19:47:50.691 5: TelegramBot_Deepencode teleBot: encoded a String from :987654321: to :987654321:
2023.03.25 19:47:50.691 5: TelegramBot_Deepencode teleBot: encoded a String from :Yxxx_Zxxx_bot: to :Yxxx_Zxxx_bot:
2023.03.25 19:47:50.692 5: TelegramBot_Deepencode teleBot: found a HASH
2023.03.25 19:47:50.692 5: TelegramBot_Deepencode teleBot: encoded a String from :1234560011: to :1234560011:
2023.03.25 19:47:50.693 5: TelegramBot_Deepencode teleBot: encoded a String from :-123456789: to :-123456789:
2023.03.25 19:47:50.693 5: TelegramBot_Deepencode teleBot: encoded a String from :group: to :group:
2023.03.25 19:47:50.693 5: TelegramBot_Deepencode teleBot: encoded a String from :UserName: to :UserName:
2023.03.25 19:47:50.694 5: TelegramBot_Deepencode teleBot: encoded a String from :1: to :1:
2023.03.25 19:47:50.694 5: TelegramBot_Deepencode teleBot: found a HASH
2023.03.25 19:47:50.695 5: TelegramBot_Deepencode teleBot: encoded a String from :7128: to :7128:
2023.03.25 19:47:50.695 5: TelegramBot_Deepencode teleBot: encoded a String from :LogCheck:: to :LogCheck::
2023.03.25 19:47:50.695 5: TelegramBot_Deepencode teleBot: found a HASH
2023.03.25 19:47:50.696 5: TelegramBot_Deepencode teleBot: found a HASH
2023.03.25 19:47:50.696 5: TelegramBot_Callback teleBot: after encoding
2023.03.25 19:47:50.697 5: TelegramBot_Callback teleBot: resulted in SUCCESS from SendIt
2023.03.25 19:47:50.701 5: TelegramBot_Set teleBot: called
2023.03.25 19:47:50.704 5: TelegramBot_Set teleBot: called
2023.03.25 19:47:50.707 5: TelegramBot_Callback teleBot: - Ende > Control back to FHEM
Das sieht vernünftig aus und die Meldung kommt an.


Gleicher Aufruf in der 99_myUtil => "set teleBot message @#UserName LogCheck:"
Anmerkung die Sub "myUtilsFritzLogExPost($$$)" in der 99_myUtils wird aus dem Modul Fritzbox angesprungen. Sie ist dort generisch im Code hinterlegt:
2023.03.25 20:08:20.882 5: TelegramBot_Set teleBot: called
2023.03.25 20:08:20.883 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( message )
2023.03.25 20:08:20.884 5: TelegramBot_Set teleBot: start send for cmd :message: and sendType :0:
2023.03.25 20:08:20.884 5: TelegramBot_SendIt teleBot: called
2023.03.25 20:08:20.885 5: TelegramBot_SendIt teleBot: try to send message to :#UserName: -:Filter abgeprueft nun Hash auswerten: - add :<undef>: - replyid :<undef>::    options ::
2023.03.25 20:08:20.886 4: TelegramBot_GetFullnameForContact # Contacts is -987654321::#UserName:
2023.03.25 20:08:20.886 4: TelegramBot_GetFullnameForContact # name is #UserName
2023.03.25 20:08:20.887 5: TelegramBot_readToken: Read Telegram API token from file
2023.03.25 20:08:20.890 4: TelegramBot_SendIt parseMode 0
2023.03.25 20:08:20.891 4: TelegramBot_SendIt teleBot: Message for sending :--TelegramBot_boundary-x0123
Content-Disposition: form-data; name="chat_id"

-987654321
--TelegramBot_boundary-x0123
Content-Disposition: form-data; name="text"

Filter abgeprueft nun Hash auswerten
--TelegramBot_boundary-x0123--:
2023.03.25 20:08:20.892 4: TelegramBot_SendIt teleBot: timeout for sent :30:
2023.03.25 20:08:20.896 5: TelegramBot_Set teleBot: message done succesful:
2023.03.25 20:08:20.901 5: TelegramBot_Set teleBot: called
2023.03.25 20:08:20.905 5: TelegramBot_Set teleBot: called
Das stibt bevor es zu Ende ist ::) Der Schritt "TelegramBot_Callback teleBot: called from SendIt" fehlt


Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

binford6000

Zitat
ZitatGibt es  eine Idee woran es liegen könnte, dass es Probleme gibt (geben kann) in einer Sub den TelegramBot aufzurufen:
    => fhem("set teleBot message @#UserName LogCheck: $Variable1 Text  $Variable2",1);
Du musst Sonderzeichen wie @ in Perl-Code escapen:

fhem("set teleBot message \@#UserName LogCheck: $Variable1 Text  $Variable2",1);