Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

Hallo Arthur,
da ich das 70_Telegram_modul nicht weiterentwickle würde ich empfehlen trotzdem auf mein 50_TelegramBot-Modul zu wechseln.

Ich würde Dich auch unterstützen rauszufinden warum es nicht geht, normalerweise ist die Einrichtung des Bots sogar einfacher als telegram-cli.

Zu Deinem Problem:

Hast Du cmdKeyword gesetzt (auf welchen Wert)?
cmdalias macht eigentlich keinen Sinn, wenn Du cmdKeyword richtig gesetzt hast.



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

arthur_dent_2015

Beim senden mit dem Bot bekomme ich die Fehlermeldung Callback returned error:[Error]: Forbidden: can't write to chat with deleted user:

Telegram-cli einzurichten ist so schwer nun auch nicht. cmdKeyword steht auf dofhem. Gesendeter command sieht also so aus: dofhem set schalter1 on
Ergebnis:   lastmessage [18:03] xxxxxx xxxxxxxxxxx >>> dofhem set schalter1 on

schalter1 steht auf verbose 5 und sollte jetzt wenigstens einen Eintrag im Log haben, besser noch auf on stehen.

viegener

Die Bot-Medlung sagt, dass Telegram (nicht das Modul) den übergebenen Benutzer für gelöscht hält. Kann es sein, dass hier ein altes Account verwendet wird, wie gibst Du den Benutzer an (Id oder name) --> Problem Namen sind nicht eindeutig --> siehe Liste der kontakte unter Contacts

Vielleicht sicherstellen, dass der richtige Kontakt verwendet wird im Zweifel nochmals set replaceContacts verwenden.

Bezüglich 70_Telegram - setze mal Deinen Telegram device auf Verbose 5, mit dem Logfile sollte sich dann feststellen lassen, was nicht geht.

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

arthur_dent_2015

Kann man die beiden Module nicht zusammenführen und unabhängig von der Schnittstelle machen? Über attr interface BOT oder CLI setzen, das wäre richtig cool..
Beide accounts habe ich am 23.12. eingerichtet. Die Nachrichten an den Bot werden auch als gelesen gekennzeichnet.

Hier der Auszug aus meinem Log:

2015.12.25 12:47:40 5: Telegram_Set myTelegram: called
2015.12.25 12:47:40 5: Telegram_Set myTelegram: Processing Telegram_Set( ? )
2015.12.25 12:47:40 5: Telegram_Get myTelegram: called
2015.12.25 12:47:40 5: Telegram_Get myTelegram: Processing Telegram_Get( ? )
2015.12.25 12:49:02 5: Telegram_Read myTelegram: called with noIo defined:
2015.12.25 12:49:02 5: Telegram_Read myTelegram: New read :ANSWER 64
User Arthur Dent online (was online [2015/12/25 12:54:01])

:
2015.12.25 12:49:02 5: Telegram_Read myTelegram: Full buffer :ANSWER 64
User Arthur Dent online (was online [2015/12/25 12:54:01])

:
2015.12.25 12:49:02 5: Telegram_Read myTelegram: parsed a message :User Arthur Dent online (was online [2015/12/25 12:54:01]):
2015.12.25 12:49:11 5: Telegram_Read myTelegram: called with noIo defined:
2015.12.25 12:49:11 5: Telegram_Read myTelegram: New read :ANSWER 32
User Arthur Dent is typing

:
2015.12.25 12:49:11 5: Telegram_Read myTelegram: Full buffer :ANSWER 32
User Arthur Dent is typing

:
2015.12.25 12:49:11 5: Telegram_Read myTelegram: parsed a message :User Arthur Dent is typing:
2015.12.25 12:49:17 5: Telegram_Read myTelegram: called with noIo defined:
2015.12.25 12:49:17 5: Telegram_Read myTelegram: New read :ANSWER 32
User Arthur Dent is typing

:
2015.12.25 12:49:17 5: Telegram_Read myTelegram: Full buffer :ANSWER 32
User Arthur Dent is typing

:
2015.12.25 12:49:17 5: Telegram_Read myTelegram: parsed a message :User Arthur Dent is typing:
2015.12.25 12:49:21 5: Telegram_Read myTelegram: called with noIo defined:
2015.12.25 12:49:21 5: Telegram_Read myTelegram: New read :ANSWER 54
[12:49]  Arthur Dent >>> dofhem set Schalter1 on

:
2015.12.25 12:49:21 5: Telegram_Read myTelegram: Full buffer :ANSWER 54
[12:49]  Arthur Dent >>> dofhem set Schalter1 on

:
2015.12.25 12:49:21 5: Telegram_Read myTelegram: parsed a message :[12:49]  Arthur Dent >>> dofhem set Schalter1 on:

2015.12.25 12:49:50 5: Telegram_Read myTelegram: called with noIo defined:
2015.12.25 12:49:50 5: Telegram_Read myTelegram: New read :ANSWER 65
User Arthur Dent offline (was online [2015/12/25 12:49:29])

:
2015.12.25 12:49:50 5: Telegram_Read myTelegram: Full buffer :ANSWER 65
User Arthur Dent offline (was online [2015/12/25 12:49:29])

:
2015.12.25 12:49:50 5: Telegram_Read myTelegram: parsed a message :User Arthur Dent offline (was online [2015/12/25 12:49:29]):


der list vom Schalter1

Internals:
   00         f0
   CFGFN      ./FHEM/fhem_IT.cfg
   DEF        FFF00FFF0F FF F0
   IODev      CUL0
   NAME       Schalter1
   NR         181
   STATE      off
   STILLDONETIME 0
   TYPE       IT
   XMIT       fff00fff0f
   XMITdimdown 00
   XMITdimup  00
   XMITon     ff
   Code:
     1          fff00fff0f
   Readings:
     2015-12-02 13:20:21   protocol        V1
     2015-12-25 05:00:09   state           off
Attributes:
   IODev      CUL0
   event-on-change-reading state
   model      itswitch
   room       IT
   verbose    5


und vom myTelegram:


Internals:
   DEF        4711
   DeviceName localhost:4711
   FD         59
   NAME       myTelegram
   NR         2689
   PARTIAL
   Port       4711
   Protocol   telnet
   REMAINING
   STATE      opened
   TYPE       Telegram
   lastmessage User Arthur Dent offline (was online [2015/12/25 12:51:05])
   Readings:
     2015-12-25 06:07:49   state           opened
Attributes:
   cmdKeyword dofhem
   defaultPeer Arthur_Dent
   event-on-update-reading lastmessage
   room       Telegram
   verbose    5

viegener

Zitat von: arthur_dent_2015 am 25 Dezember 2015, 13:10:47
Kann man die beiden Module nicht zusammenführen und unabhängig von der Schnittstelle machen? Über attr interface BOT oder CLI setzen, das wäre richtig cool..
Beide accounts habe ich am 23.12. eingerichtet. Die Nachrichten an den Bot werden auch als gelesen gekennzeichnet.




Sorry aber das mit dem Zusammenführen ist so nicht wirklich sinnvoll, momentan sind ca 10% des Codes geteilt und beide Module arbeiten völlig anders (Im Bot-Modul steckt die ganze Logik des -CLI drin, damit ist der Ablauf völlig richtig). Vielleicht hinkt der Vergleich aber ein Schraubenzieher und eine Zange sind beide Werkzeug aber lassen sich nicht gut vereinheitlichen (auch nicht beim Leatherman)  ;)

Also Dein telegram funktioniert so gar nicht, es sind ja keinerlei Readings enthalten, ergo wird die Message gar nicht wirklich empfangen.
Vermutung, Du startest CLI nicht mit den notwendigen Optionen (Ich vermute mindestens -N fehlt), dazu bitte in der COmmandref nachlesen.

ich verstehe aber immer noch nicht was Du beim Bot machst, Du schreibst von 2 Accounts? Also gibt es einen gelöschten und einen aktiven? Wenn ja, dann musst Du doch nur die ID des aktiven Accounts angeben (das müsste sich durch Ausprobieren doch leicht erreichen lassen)?

Wie gesagt ich plane keine Weiterentwicklung von 70_Telegram

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

arthur_dent_2015

-N war die Lösung, Danke!!!!  :) copy & paste sollte verboten werden ;)

Eigentlich waren es sogar 3 accounts, Android, CLI und BOT. Inzwischen läuft auch der BOT. Es lag an der ID (kleine Kritik, die Doku ist da nicht sehr hilfreich was die ID ist und woher man sie bekommt). Aber es gibt ja G***** und mit der richtigen Frage kommt man dann auch irgendwann an Ziel. Jetzt funktioniernen bei mir beide Module so wie sie sollen.

Zugegeben, 10% gemeinsamer code sind nicht sooooo viel. Wenn Du aber die CLI nachprogrammiert hast müssten doch die Internals and Readings weitgehend gleich sein. Es wird halt nur ne andere Schnittstelle aufgerufen. Mal sind es die Routinen die mit dem BOT kommunizieren, mal die mit der CLI. Die Leute die die CLI Version im Einsatz haben wären Dir sicherlich sehr dankbar wenn sie von der Weiterentwicklung nicht abgeschnitten wären.

Wie auch immer Du Dich entscheidest, großes Kompliment für Deine Arbeit!!!

Danke & Gruß
Arthur

P.S. muss ich beim BOT allowunknowncontacts auf 1 oder 0 setzen wenn ich dem BOT nur mit meinem account kommunizieren lassen will?

viegener

Zitat von: arthur_dent_2015 am 25 Dezember 2015, 20:15:09
-N war die Lösung, Danke!!!!  :) copy & paste sollte verboten werden ;)

Eigentlich waren es sogar 3 accounts, Android, CLI und BOT. Inzwischen läuft auch der BOT. Es lag an der ID (kleine Kritik, die Doku ist da nicht sehr hilfreich was die ID ist und woher man sie bekommt). Aber es gibt ja G***** und mit der richtigen Frage kommt man dann auch irgendwann an Ziel. Jetzt funktioniernen bei mir beide Module so wie sie sollen.

Zugegeben, 10% gemeinsamer code sind nicht sooooo viel. Wenn Du aber die CLI nachprogrammiert hast müssten doch die Internals and Readings weitgehend gleich sein. Es wird halt nur ne andere Schnittstelle aufgerufen. Mal sind es die Routinen die mit dem BOT kommunizieren, mal die mit der CLI. Die Leute die die CLI Version im Einsatz haben wären Dir sicherlich sehr dankbar wenn sie von der Weiterentwicklung nicht abgeschnitten wären.

Wie auch immer Du Dich entscheidest, großes Kompliment für Deine Arbeit!!!

Danke & Gruß
Arthur

P.S. muss ich beim BOT allowunknowncontacts auf 1 oder 0 setzen wenn ich dem BOT nur mit meinem account kommunizieren lassen will?

Schön, dass es geht.

OK, die Doku schaue ich mir nochmal an.

Das mit dem CLI nachprogrammiert war eher symbolisch gemeint. Im TelegramBot steckt die direkte Kommunikation mit Telegram.org, die CLI abwickelt, allerdings benutzen TelegramBot und CLI komplett verschiedene APIs und Mechanismen. Ich hatte die Vereinheitlichung anfangs auch angedacht, musste aber erkennen, dass es zuviele Unterschiede gibt und das sehr viele ifs bedeuten würde, die den Code fehleranfällig machen und schwer wartbar.

Ja - allowUnknownContacts ist ein Beispiel für eine ungeschickte Benennung. On/Off-Attribute sollten eigentlich immer positiv benannt sein. Also bei 1 werden auch unbekannte Kontakte erlaubt also musst Du 0 verwenden.

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

Maista

Hallo zusammen,

schöne Bastel-Feiertage erst einmal  ;)

Ich habe nun wieder einige Dinge gelesen und bin zwei Schritte weiter gekommen.

Ich habe mir eine 99_myUtils.pm wie im Wiki http://www.fhemwiki.de/wiki/99_myUtils_anlegen beschrieben, erzeugt.

Hier habe ich nun u.a. folgendes eingefügt (Funktioniert sogar)  :)


sub SendPic
{
fhem("get Cam2 image");
fhem("set myTGBot message Achtung!\n Das Bild ist eventuel alt!\n Erneut anfordern um ein Aktuelles zu bekommen!");
fhem("set myTGBot sendImage ./www/snapshots/Cam2_snapshot.jpg");
}


Wie bekomme ich Zeilenumbrüche hin? Das Perl-Übliche
Zitat\n
wird nicht ausgeführt.
Sind das andere Zeichen die ein CRLF erzeugen?
In einem vorhergehenden Post http://forum.fhem.de/index.php/topic,38328.msg335792/topicseen.html#msg335792 war dies schon mal ein Thema.

Obige drei Zeilen holen von einer Maginon IPC-10 per WLAN ein Bild, speichert es ab.
Zufällig langt nun die Zeitverzögerung durch den folgenden Text um anschließend doch noch das Aktuelle Bild zu schicken.
Dies geschieht in der dritten Zeile.

Danke und schönes WE.

Gerd

viegener

#368
Probier mal einfache Anführungszeichen wie folgt:


fhem('set myTGBot message Achtung!\n Das Bild ist eventuel alt!\n Erneut anfordern um ein Aktuelles zu bekommen!');


Hintergrund, Du willst das \n nicht beim Aufruf der fhem-Funktion auflösen sondern erst innerhalb vom telegramBot, das wird durch die einfachen Anführungszeichen (quotes) erreicht.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Maista

Hui,
schneller Support ;)


fhem('set myTGBot message Achtung!\n Das Bild ist eventuel alt!\n Erneut anfordern um ein Aktuelles zu bekommen!');


Das erste einfache Anführungszeichen fehlt im Beispiel.
So funktioniert es aber nun!

Klasse!

Danke Johannes.

Gruss Gerd

viegener

Zitat von: Maista am 25 Dezember 2015, 22:34:20
Hui,
schneller Support ;)


fhem('set myTGBot message Achtung!\n Das Bild ist eventuel alt!\n Erneut anfordern um ein Aktuelles zu bekommen!');


Das erste einfache Anführungszeichen fehlt im Beispiel.
So funktioniert es aber nun!

Klasse!

Danke Johannes.

Gruss Gerd

Oops Ja manchmal sollte ich nochmal lesen was ich schreibe  ;)
(ich habe es korrigiert, Danke)

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

arthur_dent_2015

okay, dann macht das wohl wirklich keinen Sinn  :(
Gilt 0 auch für cmdRestrictedPeer? der wird default auf 1 gesetzt.

viegener

Zitat von: arthur_dent_2015 am 25 Dezember 2015, 22:58:43
okay, dann macht das wohl wirklich keinen Sinn  :(
Gilt 0 auch für cmdRestrictedPeer? der wird default auf 1 gesetzt.

Nein, wie in der commandref beschrieben, werden in cmdRestrictedPeer eine Liste von peers (am besten als contact ids) angegeben (Das mit dem Default 1 kann ich bei mir nicht nachvollziehen)

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

arthur_dent_2015

sorry, Mistverständniss... ich war beim CLI, der wird default auf 1 gesetzt.

viegener

Ich habe gerade nochmals die neueste Version in github hochgeladen.

Damit ist es jetzt möglich auch voiceMessages (sendVoice) und beliebige Medienfiles (sendMedia oder sendDocument) zu versenden.
Ausserdem ihabe ich noch ein paar Fehler bei den alias-namen in favortien beseitig.

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