Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

@asciidisco: OK 2 Erkenntnisse: Das Schreiben an Telegram läuft ohne Fehler durch, aber es kommt wohl keine Antwort vom Server (denn der Puffer ist noch leer) und das lässt vermuten, dass die Länge der gesendeten Daten falsch berechnet wird. Weil mal wieder die Anzahl der Zeichen und nicht die Anzahl der Bytes bestimmt wird.

Ich muss mir eine Lösung ausdenken, wie ich das verhindern kann und sicherstellen kann, dass die richtige Länge gesendet wird, bei anderen Installationen scheinen die bisherigen Vorkehrungen zu helfen, aber wohl bei Dir nicht.

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

viegener

Zitat von: Qwz80 am 27 Februar 2017, 11:38:02
Hi,

seit dem Update Heute läuft der SVG Versand leider gar nicht mehr. Fehler sind u.A.

ERROR evaluating my $NAME='Telegram';my $EVENT='msgText: Bad';my $EVTPART1='Bad';my $EVTPART0='msgText:';my $SELF='TelegramSVGsend3';my $TYPE='TelegramBot';{TelegramBot_ExecuteCommand($defs{"Telegram"}, 312456017, '{plotAsPng("SVG_FileLog_Luftfeuchtigkeit_3")}'); return;}: Not enough arguments for main::TelegramBot_ExecuteCommand at (eval 3568) line 1, near "'{plotAsPng("SVG_FileLog_Luftfeuchtigkeit_3")}')"

3: TelegramSVGsend3 return value: Not enough arguments for main::TelegramBot_ExecuteCommand at (eval 3568) line 1, near "'{plotAsPng("SVG_FileLog_Luftfeuchtigkeit_3")}')"




Ich nutze z.B sowas, was bis gestern lief

Telegram:msgText:.Schlafzimmer {TelegramBot_ExecuteCommand($defs{"Telegram"}, 312456017, '{plotAsPng("SVG_FileLog_Luftfeuchtigkeit_1")}'); return;}

Muss ich etwas an den Parametern ändern? Hatte alles nach der Anleitung gemacht https://waschto.eu/telegrambot-kommuniziere-mit-deiner-fhem-installation

Ja diese Anleitung nutzt leider eine interne Funktion des TelegramBot-Moduls, diese hat sich schon vor einiger Zeit verändetr, wie auch hier https://forum.fhem.de/index.php/topic,38328.msg559929.html#msg559929 schonmal gesagt.

Der Aufruf müsse wohl in etwa folgendermassen um eine weitere Angabe des Chats erweitert werden:

{TelegramBot_ExecuteCommand($defs{"Telegram"}, 312456017, undef, '{plotAsPng("SVG_DbLog_12")}');; return;;}


Aber Achtung: Es bleibt eine interne Funktion des Moduls, die sich auch in zukünftigen updates wieder ändern könnte.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Qwz80

Danke für die Infos. Dann lösche ich das SVG-Zeugs raus, war sowieso eher eine Spielerrei und nicht wichtig.

asciidisco

@viegener Alles klar, dann mach ich das halt vorerst mit Regex der die üblichen verdächtigen (ä in ae, ß in ss, etc.) umbenennt :D

Edit: Danke für die Hilfe

viegener

Zitat von: asciidisco am 27 Februar 2017, 14:26:49
@viegener Alles klar, dann mach ich das halt vorerst mit Regex der die üblichen verdächtigen (ä in ae, ß in ss, etc.) umbenennt :D

Edit: Danke für die Hilfe

Kein Problem - Ich habe mal für die nächste Version ein neues set-Komando eingebaut, so dass  man ein Kommando ausführen kann und das Ergebnis wird dann per telegram versendet:
(z.B. das Ergbnis von { plotAsPng('SVG_FileLog_HMT_lars_1') } als Image)

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

jkriegl

@gent Du bekommst das aktuelle Logfile mit
InternalVal("Logfile","currentlogfile","") -> ./log/fhem-2017-03-02.log
Kann damit das tägliche Logfile abholen.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

viegener

#1311
Zitat von: viegener am 27 Februar 2017, 11:58:18
@asciidisco: OK 2 Erkenntnisse: Das Schreiben an Telegram läuft ohne Fehler durch, aber es kommt wohl keine Antwort vom Server (denn der Puffer ist noch leer) und das lässt vermuten, dass die Länge der gesendeten Daten falsch berechnet wird. Weil mal wieder die Anzahl der Zeichen und nicht die Anzahl der Bytes bestimmt wird.

Ich muss mir eine Lösung ausdenken, wie ich das verhindern kann und sicherstellen kann, dass die richtige Länge gesendet wird, bei anderen Installationen scheinen die bisherigen Vorkehrungen zu helfen, aber wohl bei Dir nicht.

@asciidisco: ich würde gerne nochmal einen Versuch machen. Kannst Du mal folgendes Kommando bei Dir aus fhemweb absetzen?

{ use bytes;; fhem("set tbot msg äöü") }

und dann nochmal dieses

{ use utf8;; fhem("set tbot msg äöü") }

Vermutung: das erste könnte funktionieren, das zweite sollte genau das problematische Verhalten hervorrufen?

Achso: Ich habe gerade mal im github eine Version hochgeladen, die hoffentlich mit Deinem Fall umgehen sollte. Allerdings muss man dafür ein besonderes Attribut setzen also nach der Installation der Testversion und dem Neustart noch ein
set deintbotname utf8Special 1

Erst wenn ich Rückmeldung habe, ob das geht würde ich es hochladen ins SVN

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

viegener

Zitat von: hartenthaler am 26 Februar 2017, 18:49:22
Bei meinem Raspi mit Jessi lauten die Antworten ebenfalls 6, 3 und 12. Und ich habe keine Probleme mit Umlauten, wenn ich diese direkt über das Telegram-Device schicke.

Wenn ich aber über das TalkToMe/TalkToUser-Device (Chatbot) Nachrichten aus FHEM, wie etwas den Wetterbericht, über das Telegram-Device verschicke, dann werden die Umlaute zerstört und ein Text, der in FHEM korrekt aussieht, kommt beim Chat-Client dann so an:
Hier ist der aktuelle Wetterbericht für Berlin: Stark bewölkt.

Da ist irgendeine Codierung/Decodierung zuviel. Erstaunlich: das "ü" in "für Berlin" ist ok, das "ö" in "bewölkt" ist kaputt, was daher kommt, dass die Quellen für diese Teilstrings verschieden sind. Ich habe mal mitprotokolliert (von der Anfrage im Client "wie ist das wetter" bis zur Antwort durch meinen Chatbot) und bin der Meinung, dass der Fehler bereits in TalkToMe passiert und das Telegram-Device am Ergebnis unschuldig ist. Richtig?

Das ist aus dem log für mich schwer zu erkennen, da auch da perl mit seiner Art dazwischenfunkt und man nicht weiss ob nicht nochmal irgendwas umcodiert wird auf dem weg ins log...

Es wäre aber einen Versuch wert auch bei Dir mal die Version von oben dafür auszuprobieren und das Attribut utf8Special auf 1 zu setzen.



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

DS_Starter

#1313
Hallo miteinander,

aus bisher unerfindlichen Gründen funktioniert mein bislang super funktionierender Telegrambot seit gestern Nachmittag nicht mehr.
Es kann vom Fhem aus nichts mehr versendet werden.

In den Readings sentMsgResult und PollingLastError steht immer:

Callback returned no valid JSON: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/50_TelegramBot.pm line 1832.


Ein set reset endet mit Failure. Der PollingErrCount steht mittlerweile auf 119.

Ein verbose 5 zeigt bei einem simplen Sendeversuch einer Message "Test":


2017.03.06 07:37:44.519 3: TelegramBot_Callback teleBot: resulted in Callback returned no valid JSON: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/50_TelegramBot.pm line 1832.
  from SendIt
2017.03.06 07:37:54.799 3: TelegramBot_Callback teleBot: resulted in Callback returned no valid JSON: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/50_TelegramBot.pm line 1832.
  from SendIt
2017.03.06 07:38:06.289 4: TelegramBot_Set teleBot: called
2017.03.06 07:38:06.289 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( ? )
2017.03.06 07:38:21.638 4: TelegramBot_Set teleBot: called
2017.03.06 07:38:21.638 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( message )
2017.03.06 07:38:21.639 5: TelegramBot_Set teleBot: start send for cmd :message: and sendType :0:
2017.03.06 07:38:21.639 5: TelegramBot_SendIt teleBot: called
2017.03.06 07:38:21.639 4: TelegramBot_SendIt teleBot: add send to queue :@<Empfänger>: -:Test: - :<undef>:
2017.03.06 07:38:21.639 5: TelegramBot_Set teleBot: message done succesful:
2017.03.06 07:38:21.669 4: TelegramBot_Set teleBot: called
2017.03.06 07:38:21.669 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( ? )
2017.03.06 07:38:21.670 4: TelegramBot_Set teleBot: called
2017.03.06 07:38:21.670 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( ? )
2017.03.06 07:38:21.670 5: TelegramBot_Get teleBot: called
2017.03.06 07:38:21.670 5: TelegramBot_Get teleBot: Processing TelegramBot_Get( ? )
2017.03.06 07:38:22.010 4: TelegramBot_Set teleBot: called
2017.03.06 07:38:22.010 4: TelegramBot_Set teleBot: Processing TelegramBot_Set( ? )
2017.03.06 07:38:34.604 5: TelegramBot_Attr teleBot: called
2017.03.06 07:38:34.605 5: TelegramBot_Attr teleBot: set  on verbose to 3


Ich hatte erst an ein Problem bei Dienstanbieter geglaubt aber da das Problem heute früh weiterhin besteht muss die Lösung wohl an anderer Stelle gesucht werden.
Bräuchte ein paar Tipps zur Vorgehensweise wie ich der Sache auf die Spur kommen kann.

Edit: Es funktioniert wieder. Ich musste das define mit dem Token wiederholen. Danach lief wieder alles. Warum es zu diesem Zustand gekommen ist habe ich allerdings nicht herausgefunden.

viele Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

viegener

Ich kann Dir nicht sagen, warum der define wiederholt werden musste, aber gestern gab es sowohl bei Telegram als auch bei Namensauflösung (Telekom?) Probleme, die sich bei mir und anderen Infrastrukturen folgendermassen geäussert haben
- Fehler bei der Namensauflösung (bei mir konnte versch. Servernamen nicht nur telegram nicht aufgelöst werden)
- Verzögerung bei der Nachrichtenzustellung (das hat zum Teil Dialoge behindert)
- Serverüberlastung --> dann liefert telegram manchmal HTML-Fehlermeldungen zurück --> das war bei Dir das Problem und passt auch dazu, dass der reset nicht ging

Heute vormittag war bei mir alles wieder einigermassen normal

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

oniT

Zitat von: viegener am 24 Februar 2017, 10:32:44

Bei dem DOIF von oniT findet keine Berechtigungsorüfung statt. Im Normalfall kann dann jeder Deinem FHEM Kommandos schicken, bei Temperaturen mag das nicht kritisch sein, aber sobald wirklich Kommandos ausgeführt werden...


Hallo viegener,

stimmt, das habe ich nicht gewusst. Ich dachte dass eine Antwort nur die Anfragenden erhalten welche auch unter dem Attribute cmdRestrictedPeer aufgeführt sind. Schade.

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

viegener

Zitat von: oniT am 06 März 2017, 20:51:37
Hallo viegener,

stimmt, das habe ich nicht gewusst. Ich dachte dass eine Antwort nur die Anfragenden erhalten welche auch unter dem Attribute cmdRestrictedPeer aufgeführt sind. Schade.

Gruß
Tino

cmdRestrictedPeer  - greift nur bei den innerhalb vom Modul eingebauten Kommandofunktionen (favorites etc) - ansonsten gilt wenn die Nachricht in den Readings auftaucht und Du darauf mit DOIF etc reagierst, dann wird das nicht verhindert (und wäre auch nicht möglich, denn DOIF oder ähnliches wissen ja nichts davon was da geschickt wurde und von wem
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

asciidisco

@viegener Sorry, ich kam erst heute dazu die neue Version zu testen. Wenn ich die Datei von deinem master branch einspiele (https://raw.githubusercontent.com/viegener/Telegram-fhem/master/50_TelegramBot.pm), bekomme ich beim Reload des Moduls folgende Fehlermeldungen:

Too many arguments for main::TelegramBot_ExecuteCommand at ./FHEM/50_TelegramBot.pm line 956, near "$needsResult )"
Too many arguments for main::TelegramBot_ExecuteCommand at ./FHEM/50_TelegramBot.pm line 1069, near "$cmd )"
Too many arguments for main::TelegramBot_ReadHandleCommand at ./FHEM/50_TelegramBot.pm line 1240, near "$mtext )"
Too many arguments for main::TelegramBot_SentLastCommand at ./FHEM/50_TelegramBot.pm line 1250, near "$cmd )"
Too many arguments for main::TelegramBot_SentFavorites at ./FHEM/50_TelegramBot.pm line 1260, near "$mid )"
Too many arguments for main::TelegramBot_ExecuteCommand at ./FHEM/50_TelegramBot.pm line 1275, near "$cmd )"
Too many arguments for main::Telegram_HandleCommandInMessages at ./FHEM/50_TelegramBot.pm line 2248, near "$mid ) "


Natürlich funktioniert es dann auch nicht ;)
Hast du das in einer anderen Installation schon mal gesehen? Ich bin noch auf dem letzten 5.7er Release von FHEM, schätze aber mal, das hat nichts damit zu tun.

viegener

Zitat von: asciidisco am 08 März 2017, 13:37:49
@viegener Sorry, ich kam erst heute dazu die neue Version zu testen. Wenn ich die Datei von deinem master branch einspiele (https://raw.githubusercontent.com/viegener/Telegram-fhem/master/50_TelegramBot.pm), bekomme ich beim Reload des Moduls folgende Fehlermeldungen:

Too many arguments for main::TelegramBot_ExecuteCommand at ./FHEM/50_TelegramBot.pm line 956, near "$needsResult )"
Too many arguments for main::TelegramBot_ExecuteCommand at ./FHEM/50_TelegramBot.pm line 1069, near "$cmd )"
Too many arguments for main::TelegramBot_ReadHandleCommand at ./FHEM/50_TelegramBot.pm line 1240, near "$mtext )"
Too many arguments for main::TelegramBot_SentLastCommand at ./FHEM/50_TelegramBot.pm line 1250, near "$cmd )"
Too many arguments for main::TelegramBot_SentFavorites at ./FHEM/50_TelegramBot.pm line 1260, near "$mid )"
Too many arguments for main::TelegramBot_ExecuteCommand at ./FHEM/50_TelegramBot.pm line 1275, near "$cmd )"
Too many arguments for main::Telegram_HandleCommandInMessages at ./FHEM/50_TelegramBot.pm line 2248, near "$mid ) "


Natürlich funktioniert es dann auch nicht ;)
Hast du das in einer anderen Installation schon mal gesehen? Ich bin noch auf dem letzten 5.7er Release von FHEM, schätze aber mal, das hat nichts damit zu tun.

Hast Du einen Restart gemacht?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

klausw

Ich nutze derzeit erfolgreich queryInline um nach einem Update einen Button zum Neustart einzublenden.
Dank Rudis Modifikation am at Modul lässt sich FHEM über ein notify neu starten.
Ich würde den Button nebst Text gern löschen nachdem der Reboot Vorgang ausgelöst wurde (ändern funktioniert ja)
Ist das Möglich/Implementierbar?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280