Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

hartenthaler

Zitat von: viegener am 04 März 2017, 14:53:19
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.

Danke für Deine neue Version. Ich habe utf8Special auf 1 gesetzt, aber es hat sich nichts geändert. Das Problem scheint wirklich früher in der Kette zu liegen. Ich bleibe dran.
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: hartenthaler am 09 März 2017, 07:42:04
Danke für Deine neue Version. Ich habe utf8Special auf 1 gesetzt, aber es hat sich nichts geändert. Das Problem scheint wirklich früher in der Kette zu liegen. Ich bleibe dran.

Trotzdem danke für das feedback, dann vermute ich auch, dass die Texte bereits vorher einmal zuviel encodiert oder decodiert werden, lass mich wissen, wenn ich da helfen kann?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: klausw am 08 März 2017, 22:24:12
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?

Du kannst den Text ändern und ein leeres Keyboard senden, das würde über den Befehl "queryEditInline", dafür musst Du Dir allerdings irgendwo die msgId merken, die nach dem Senden Deiner Nachricht als Reading sentMsgId erscheint. Diese muss beim queryEditInline angegeben werden (sonst weiss telegram ja nicht was Du ändern willst). Da der Versand asynchron (non-blocking) erfolgt geht das Merken der msgId am ehesten über ein notify (Zum Beispiel den gesendeten Text in ein Dummy schreiben und ein notify anlegen, dass den gesendenten Text mit dem Inhalt des dummies vergleicht und dann die msgId in den Dummy setzt)


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

klausw

Zitat von: viegener am 09 März 2017, 14:20:33
Du kannst den Text ändern und ein leeres Keyboard senden, das würde über den Befehl "queryEditInline", dafür musst Du Dir allerdings irgendwo die msgId merken, die nach dem Senden Deiner Nachricht als Reading sentMsgId erscheint. Diese muss beim queryEditInline angegeben werden (sonst weiss telegram ja nicht was Du ändern willst). Da der Versand asynchron (non-blocking) erfolgt geht das Merken der msgId am ehesten über ein notify (Zum Beispiel den gesendeten Text in ein Dummy schreiben und ein notify anlegen, dass den gesendenten Text mit dem Inhalt des dummies vergleicht und dann die msgId in den Dummy setzt)
Den Button habe ich mit queryEditInline schon wegbekommen. Den Text kann ich ja auch ändern.  Das habe ich auch über ein notify gelöst.
Nur würde ich gern die komplette Nachricht löschen.
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

viegener

Zitat von: klausw am 09 März 2017, 16:44:05
Den Button habe ich mit queryEditInline schon wegbekommen. Den Text kann ich ja auch ändern.  Das habe ich auch über ein notify gelöst.
Nur würde ich gern die komplette Nachricht löschen.

Das Löschen von messages wird im telegramBot API nicht unterstützt
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

klausw

Zitat von: viegener am 09 März 2017, 22:25:49
Das Löschen von messages wird im telegramBot API nicht unterstützt
Ahso, verstehe. Schade, dann löse ich das anders
Danke!
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

asciidisco

@viegener Klarer Fall von "wer den kompletten Post ließt, ist klar im Vorteil". Nach nem Neustart läufts wieder. Danke.

Dank der utf8Special property kann der Telegram_Bot jetzt auch Nachrichten mit Umlauten versenden, zumindest wenn ich mit folgendem Kommando über das zentrale FHEM Eingabefeld gehe:

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

Leider sind, wenn ich aus meinen at oder notifies was versende die Umlaute nun genauso Kaputt, wie von @hartenthaler berichtet. Ich habe auch dort versucht, mit use utf8; oder use bytes; zu arbeiten,
aber keine Kombination war erfolgreich...

Als pragmatischer Mensch, und mit dem Wissen, das es aus dem FHEM Eingabefeld ja funktioniert, habe ich dann was ganz böses gemacht & mir mit der Nachricht quasi selbst vom Rücken in die Brust gestochen.
Und zwar senden meine at & notifies nun den Inhalt des Telegram Bots via telnet direkt von FHEM an FHEM...

*07:00:00 {
  use utf8;
  use Net::Telnet();
  my $tab = new Net::Telnet (Timeout => 50, Port => MEIN_TELNET_PORT, Binmode => 1);
  $infoString = "Däten mit Ümlauten aus meinem Nötify";
  $tab->open("127.0.0.1");
  $tab->print('{use utf8;; fhem("set fhem_remote_bot msg ' . $infoString . '")}');
}


Newlines & doppelte Anführunszeichen müssen hierbei natürlich escaped werden, und ja, es ist ganz schrecklich, aber es funktioniert...

TWART016

#1327
Hallo,

seit einigen Tagen kann ich keine Nachrichten mehr empfangen und senden:

sentMsgResult
NonBlockingGet: returned FAILED peer not found :User_Name


Beim Senden kommt folgender Fehler

FAILED peer not found :User_Name:



Gruß
TWART016

viegener

@TWART016: Beide Meldungen entstehen beim Senden und deuten daraufhin, dass die Kontakteliste irgendwie ein Problem hat. Kannst Du schauen, ob der Benutzer im Reading Contacts enthalten ist. Was passiert beim Empfangen? Erlaubst Du unbekannte Kontakte?

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

Maista

Meine Contacts waren neulich nach einem Update verschwunden.
Da kam die gleiche Meldung.

TWART016

Zitat von: viegener am 13 März 2017, 10:26:49
@TWART016: Beide Meldungen entstehen beim Senden und deuten daraufhin, dass die Kontakteliste irgendwie ein Problem hat. Kannst Du schauen, ob der Benutzer im Reading Contacts enthalten ist. Was passiert beim Empfangen? Erlaubst Du unbekannte Kontakte?
Zitat von: viegener am 13 März 2017, 10:26:49
@TWART016: Beide Meldungen entstehen beim Senden und deuten daraufhin, dass die Kontakteliste irgendwie ein Problem hat. Kannst Du schauen, ob der Benutzer im Reading Contacts enthalten ist. Was passiert beim Empfangen? Erlaubst Du unbekannte Kontakte?
Es gab kein Reading contacts.

Readings
PollingErrCount
0
2017-03-13 00:00:10
PollingLastError
NonBlockingGet timed out on read from <hidden> after 365s
2017-03-04 12:35:04
sentMsgId
2017-03-13 12:19:50
sentMsgPeerId
2017-03-13 12:19:50
sentMsgResult
NonBlockingGet: returned FAILED peer not found :User_Name:
2017-03-13 12:19:50



allowUnknownContacts habe ich auf 0, dass soll auch so sein. Das habe ich kurz auf 1 und dann wieder auf 0 geändert und jetzt geht es, weil das reading contacts wieder da ist.

Besten Dank. Vermutlich lag es bei mir auch am Update.

oniT

Hallo viegener,

Zitat von: viegener am 06 März 2017, 21:09:20
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

aber wenn ich über die Favoriten den Befehl zum Ausführen eines DOIF absetze, sollte doch nur der Absender der "Freigegeben" ist den Befehl auch ausführen. Somit kann auch nur der das DOIF triggern und entsprechend die angeforderte Nachricht zurück bekommen. Oder?

Beispiel Favoriten

[Aussentemperatur]=set dummy_telebot Aussentemperatur;
[Alle Rollos öffnen]=set dummy_telebot Alle Rollos öffnen;
[Alle Rollos schliessen]=set dummy_telebot Alle Rollos schliessen;


Beispiel DOIF

([dummy_telebot:"Aussentemperatur"])(set teleBot msg @[teleBot:msgPeerId] Die Aussentemperatur ist aktuell [dim_outdoor_temperature:state]°C)
DOELSEIF ([dummy_telebot:"Alle Rollos öffnen"])({rollos_oeffnen_we})
DOELSEIF ([dummy_telebot:"Alle Rollos schliessen"])({rollos_schliessen})
DOELSE (set teleBot msg @[teleBot:msgPeerId] Anfrage ist unbekannt!)


Danke,

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

@onitT: Ja, wenn die Kommandos innerhalb von FHEM ausgeführt werden wie bei Favoriten oder direkten Kommandos der Fall, dann greift cmdRestrictedPeer. Also auch in Deinem Fall. Ich verstehe aber nicht, wofür der dummy bzw. das DOIF benötigt werden?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: asciidisco am 10 März 2017, 16:17:07
@viegener Klarer Fall von "wer den kompletten Post ließt, ist klar im Vorteil". Nach nem Neustart läufts wieder. Danke.

Dank der utf8Special property kann der Telegram_Bot jetzt auch Nachrichten mit Umlauten versenden, zumindest wenn ich mit folgendem Kommando über das zentrale FHEM Eingabefeld gehe:

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

Leider sind, wenn ich aus meinen at oder notifies was versende die Umlaute nun genauso Kaputt, wie von @hartenthaler berichtet. Ich habe auch dort versucht, mit use utf8; oder use bytes; zu arbeiten,
aber keine Kombination war erfolgreich...


Es ist ja schonmal ein Fortschritt, dass die Nachrichten ankommen, ich habe aber in github nochmal eine neue Version eingecheckt, bei der utf8Special etwas anders arbeitet. Vielleicht kannst Du diese Version noch ausprobieren und berichten?

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

szoller

Habe in den letzten Tagen auc Probleme mit dem Telegram-Bot, habe schon seit längerem nichts mehr dran geändert (die Zeit...):

Zitat2017.03.13 13:24:23 3: TelegramBot_Callback TeleBot: resulted in :Callback returned error:Bad Request: message text must be encoded in UTF-8:: from SendIt
2017.03.13 13:24:23 3: TelegramBot_Callback TeleBot: Reached max retries (ret: Callback returned error:Bad Request: message text must be encoded in UTF-8:) for msg 10894285 : Die Temperatur im Schlafzimmer ist aktuell 13.3�C

Kann gut sein, dass da was verstellt ist, aber seit dem letzten Versuch, bei dem ichs probiert hatte und den Fehlermeldungen habe ich nichts geändert...