Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

speex

Hi, ich würde hier gerne noch mal anschließen da ich nun ein ähnliches Problem habe seit wenigen Tagen.

Zitat von: stefanovic88 am 02 Juli 2020, 17:25:45
Hallo zusammen,

ich nutze den Telegram Bot nun schon seit einiger Zeit zum Schicken von Bildern vor der Haustüre wenn jemand klingelt.
Nun hat das ganze hervorragend funktioniert, bis gestern Abend. Seit heute geht das nicht mehr und ich sehe immer im Log folgendes:

2020.07.02 17:02:52 3: TelegramBot_Callback zz: resulted in NonBlockingGet timed out on read from <hidden> after 30s from SendIt
2020.07.02 17:02:52 3: TelegramBot_Callback zz: Reached max retries (ret: NonBlockingGet timed out on read from <hidden> after 30s) for msg -[id] : /opt/fhem/www/snapshots/InstarHaustuere_snapshot.jpg

Daraufhin habe ich mal versucht FHEM zu updaten , neustarten, hat aber nicht geholfen.

Zitat von: viegener am 02 Juli 2020, 20:27:29
Wie gross sind denn die Bilder - sind diese unterschiedlich gross (gibt es nur Probleme bei grossen Bildern ?)

Relative Pfade sollten schon gehen aber kommt eben drauf an relativ zu was...

Ich denke mit UTF8 sollte das hier eher nichts zu tun haben.

Generell immer die Frage was hat sich geändert oder was könnte sich geändert haben also auch externe Einflüsse.


Ich habe seit einer unbestimmten Zeit zusätzlich noch folgende Fehler :
TelegramBot teleBot sentMsgResult: NonBlockingGet: returned gethostbyname api.telegram.org failed
TelegramBot teleBot PollingErrCount: 231


Senden/Empfangen funktioniert nicht/ oder nur sporadisch mal.

Ich habe jüngst im FritzBox Router DNS over TLS aktiviert und könnte mir zusammen reimen dass es hier einen Zusammenhang gibt weitere Änderungen gab es soweit nicht.
Ich werde DNS over TLS nun Testweise in einem Fallback Modus betreiben und berichten ob es daran lag.

MadMax-FHEM

Du musst halt prüfen, ob die jeweiligen DNS-Server auch TLS unterstützen...

Hast du fest eingetragene!?

z.B. 1.1.1.1 etc. oder nimmst du die des Providers!?

Evtl. gibt dir der Provider halt mal DNS Server die das nicht unterstützen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

speex

Ich habe die von Cloudflare (1.1.1.1, 1.0.0.1) und zusätzlich noch die von Google (8.8.4.4, 8.8.8.8) fest eingetragen.

Leider bringt auch der DNS over TLS Fallback Modus bisher keine Besserung womit ich meine Router Änderung (DoT Aktivierung) fürs erste ausschließe.

Leider nach wie vor ungewollte Sendepause bei meinem Telegram Bot. :)

Dann habe ich gerade mal ein set teleBot reset abgesetzt mit folgendem Fehler-Ergebnis: TelegramBot_DoUrlCommand teleBot: FAILED http access returned error :https://api.telegram.org/<MEINBOT>/getMe: Can't connect(1) to https://api.telegram.org:443: IO::Socket::INET: Bad hostname 'api.telegram.org:443':

Wenn ich api.telegram.org anpinge läuft das ohne Probleme von meinem Laptop, ich stehe irgendwie im Regen. Hat jemand ne Idee?

rudolfkoenig

Ist "attr global dnsServer" gesetzt? Wenn ja auf was?

Bitte Folgendes einmal nach "attr global dnsServer 8.8.8.8" und einmal nach "deleteattr global dnsServer" ausfuehren:
Zitat{ HttpUtils_gethostbyname({timeout=>4}, "api.telegram.org", 1,sub(){my($h,$e,$a)=@_;; Log 1, $e ? "ERR:$e": ("IP:".ip2str($a)) }) }
und das Ergebnis aus dem FHEM-Log hier berichten.

Bei mir kommt ohne dnsServer
Zitat2020.07.22 22:19:53.958 1: IP:149.154.167.220
bzw. nach "attr global dnsServer 8.8.8.8":
Zitat2020.07.22 22:20:11.151 1: IP:[2001:67c:4e8:f004::9]

speex

Das dnsServer Attribut war bisher nicht gesetzt.

Ergebnis nach "attr global dnsServer 1.1.1.1":
2020.07.22 23:53:54 1: IP:149.154.167.220

Ergebnis nach "deleteattr global dnsServer" also ohne DNS Server:
2020.07.22 23:56:53 1: ERR:gethostbyname api.telegram.org failed

In jedem Fall klappt die Auflösung nach setzen von "attr global dnsServer" wieder und ich habe reichlich Telegram-Bot Nachrichten erhalten.

Was mich jetzt allerdings noch wundert ist das unsere Ausgaben sich noch unterscheiden. :)

Danke für die Hilfe!

EDIT: Ich habe den DNS over TLS Fallback Modus wieder ausgeschaltet daran könnten die unterschiedlichen ausgaben liegen.

rudolfkoenig

#2480
Die Unterschiede:
- ohne dnsServer: bei mir funktioniert die Namensafloesung auf dem FHEM-Server (d.h. OS-Ebene), bei Dir nicht. Achtung: nicht alle FHEM Module verwenden fuer die Namensaufloesug HttpUtils (s.u), d.h. ich wuerde es versuchen zu fixen. Keine Ahnung, wie.
- mit dnsServer: hier wird die FHEM-Implementation fuer Namensaufloesung verwendet. Bonus: es ist nicht blockierend. Warum Du hier eine IPV4 und ich eine IPV6 Adresse zurueckkriege, kann ich noch nicht erklaeren.

viegener

Zitat von: rudolfkoenig am 23 Juli 2020, 08:36:19
- mit dnsServer: hier wird die FHEM-Implementation fuer Namensaufloesung verwendet. Bonus: es ist nicht blockierend. Warum Du hier eine IPV4 und ich eine IPV6 Adresse zurueckkriege, kann ich noch nicht erklaeren.

@speex: Da wäre die Frage ob bei Dir im Router IPV6 überhaupt aktiviert ist (im router / fritzbox als auch auf dem Raspberry)? Wenn nicht (wie zum Beispiel bei mir im Router - weil es nachwievor Schwierigkeiten mit VPN gibt), wäre das eine recht einfache Erklärung.

In fhem bekomme ich ebenfalls die V4-Adresse bei Verwendung von 8.8.8.8 als dnsServer in FHEM


api.telegram.org has IPv6 address 2001:67c:4e8:f004::9
api.telegram.org has address 149.154.167.220



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

rudolfkoenig

Die FHEM interne Namensaufloesung fragt zuerst nach eine IPV6 Adresse, falls man "attr global useInet6" gesetzt hat.

Ich habe das in dem gezeigten Aufruf mit 1 (Parameter #3) vorbelegt, und da die Routine den DNS-Server direkt fragt, sollten die Einstellungen im Router oder OS  irrelevant sein. Da wir aber unterschiedliche Werte zurueckkriegen, muss ich irgendetwas uebersehen.

viegener

Zitat von: rudolfkoenig am 23 Juli 2020, 10:32:32
Die FHEM interne Namensaufloesung fragt zuerst nach eine IPV6 Adresse, falls man "attr global useInet6" gesetzt hat.

Ich habe das in dem gezeigten Aufruf mit 1 (Parameter #3) vorbelegt, und da die Routine den DNS-Server direkt fragt, sollten die Einstellungen im Router oder OS  irrelevant sein. Da wir aber unterschiedliche Werte zurueckkriegen, muss ich irgendetwas uebersehen.

Das könnte daran liegen, dass die Abfrage vom Telegrammodul im Hintergrund weiter passiert - also kommt bei diesem Aufruf

{ HttpUtils_gethostbyname({timeout=>4}, "api.telegram.org", 1,sub(){my($h,$e,$a)=@_;; Log 1, $e ? "ERR:$e": ("IP:".ip2str($a)) }) }

Der gecachte Eintrag zurück, denn TTL ist bei mir zwischen 60 und 290 und damit vermutlich grösser als das polling timeout. Mit anderen Worten der Aufruf liefert das Ergebnis der letzten Anfrage durch das TelegramModul zurück und nicht die von Dir mit ipv6 vorbelegte Anfrage.

Also der Unterschied ist, bei Dir läuft kein telegram Modul und damit kein polling und Deine Anfrage liefert ipv6 zurück bei mir und bei speex (vermutlich) liefert es den letzten gecachten Eintrag aus HU_dnsCache zurück der nicht explizit zuerst nach IPV6 (also AAAA) fragt.

Ich habe das bei mir überprüft - polling abschalten - 5 minuten warten - Anfrage von Dir aufrufen und Voila:

2020.07.23 11:39:02.471 1: IP:[2001:67c:4e8:f004::9]


(Allerdings muss man beim Wiedereinschalten des pollings aufpassen, denn bei mir geht die FHEM-Instanz direkt danach auf die Bretter:

2020.07.23 11:39:02.471 1: IP:[2001:67c:4e8:f004::9]
Can't locate object method "new" via package "IO::Socket::INET6" at FHEM/HttpUtils.pm line 409.


Aber das hätte ich ja erwarten können...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Aber zurück zum eigentlichen Problem von speex:

- DNS Anfragen nach api.telegram.org funktionieren auf dem Rechner von speex nicht (stabil)
- Als Workaround oder Lösung sollte sich das über setzen von global dnsServer umgehen lassen

Aber eigentlich ist das Problem, warum die Namensauflösung auf dem Rechner nicht geht - das sollte nicht so bleiben...
@speex - kannst Du auf dem Rechner in der shell oder kommandozeile mal ganz simpel

Zitatping api.telegram.org

ausführen?

Ist da irgendwie pihole oder ähnliches noch im Spiel?



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

speex

Entschuldigt die verspätete Antwort.

Nein betreibe auch kein Pi Hole oder derartiges.

Ping von meinem Laptop:
ping api.telegram.org
PING api.telegram.org (149.154.167.220): 56 data bytes
64 bytes from 149.154.167.220: icmp_seq=0 ttl=50 time=43.477 ms
64 bytes from 149.154.167.220: icmp_seq=1 ttl=50 time=33.723 ms
64 bytes from 149.154.167.220: icmp_seq=2 ttl=50 time=31.402 ms
64 bytes from 149.154.167.220: icmp_seq=3 ttl=50 time=40.184 ms
64 bytes from 149.154.167.220: icmp_seq=4 ttl=50 time=37.689 ms
^C
--- api.telegram.org ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 31.402/37.295/43.477/4.341 ms
➜  ~


Ping vom FHEM-Server an telegram.org:
ping api.telegram.org
PING api.telegram.org(2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9)) 56 data bytes
64 bytes from 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9): icmp_seq=1 ttl=53 time=26.5 ms
64 bytes from 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9): icmp_seq=2 ttl=53 time=21.8 ms
64 bytes from 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9): icmp_seq=3 ttl=53 time=17.6 ms
64 bytes from 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9): icmp_seq=4 ttl=53 time=18.3 ms
64 bytes from 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9): icmp_seq=5 ttl=53 time=18.0 ms
^C
--- api.telegram.org ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 17.668/20.515/26.586/3.390 ms


Soweit läuft der Telegram Bot bisher, ohne Aussetzer.

Ich schätze ich muss mir meine IPv6 Settings noch mal zu Gemüte führen und schauen ob da etwas krumm ist.

andies

Ich sehe mich ausserstande, die 160 Seiten durchzuschauen, ob mein Fehler schonmal bemerkt wurde (im Wiki steht nichts). Ich kann keine Nachrichten von Telegram empfangen, nur senden. Sieht jemand, woran das liegen könnte:
ernals:
   FAILS      0
   FUUID      5e244bdc-f33f-1115-a17f-dfb470f6ef653cf2
   FVERSION   50_TelegramBot.pm:?-s21652/2020-04-12
   NAME       TelegramBot
   NR         55
   OLD_POLLING 42
   POLLING    42
   SNAME      TelegramBot
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         XXXXXXXXXX:FHEM:@xxxxxxxxxxxxxxxxx
   offset_id  AAAAAAAAAA
   sentLastResult SUCCESS
   sentMsgId 
   sentMsgOptions
   sentMsgPeer
   sentMsgPeerId XXXXXXXXX
   sentMsgResult SUCCESS
   sentMsgText
   AliasCmds:
   Contacts:
   HU_DO_PARAMS:
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     boundary   TelegramBot_boundary-x0123
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl <hidden>
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
     hideurl    1
     host       api.telegram.org
     httpheader HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Fri, 31 Jul 2020 20:56:00 GMT
Content-Type: application/json
Content-Length: 25
Connection: close
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
     hu_blocking 0
     hu_filecount 183
     hu_port    443
     hu_portSfx
     loglevel   4
     method     POST
     path       /bot1111111111111:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/deleteMessage
     protocol   https
     redirects  0
     timeout    30
     url        https://api.telegram.org/bot11111111111:AAAAAAAAAAAAAAAAAAAAAAAA/deleteMessage
     args:
       123456789
       
       undef
       20
       12760
       undef
       1
     hash:
     sslargs:
   HU_UPD_PARAMS:
     FD         18
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     buf       
     code       200
     compress   1
     displayurl <hidden>
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
     hideurl    1
     host       api.telegram.org
     hu_blocking 0
     hu_filecount 22481
     hu_port    443
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     111111111
     path       /botXXXXXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/getUpdates?offset=111111111&limit=5&timeout=60
     protocol   https
     redirects  0
     timeout    125
     url        https://api.telegram.org/botXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/getUpdates?offset=111111118&limit=5&timeout=60
     hash:
     sslargs:
   READINGS:
     2020-07-31 00:00:42   PollingErrCount 0
     2020-07-07 12:07:27   PollingLastError NonBlockingGet: returned api.telegram.org: Die Wartezeit f�r die Verbindung ist abgelaufen (110)
     2020-07-31 22:56:00   sentMsgId       
     2020-07-31 22:56:00   sentMsgPeerId   XXXXXXXX
     2020-07-31 22:56:00   sentMsgResult   SUCCESS
   inlinechats:
   sentQueue:
Attributes:
   FhemBot_ReceiveCustomPeer XXXXXXX YYYYYYY
   FhemBot_ReceiveRestrictedPeer 1
   allowUnknownContacts 0
   cmdFavorites /kurz
   cmdKeyword cmnd
   cmdRestrictedPeer XXXXXXXX YYYYYYYYY
   cmdReturnEmptyResult 0
   defaultPeer XXXXXXXXXX
   defaultPeerCopy 1
   favorites  /[Tor zu]=set Tor Zu
   favoritesInline 1
   group      intern
   parseModeSend 1_Markdown
   pollingTimeout 60
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Zitat von: amenomade am 31 Juli 2020, 23:23:19
Kein Contacts Reading, und allowUnknownContacts  = 0
Danke, hat geklappt. Ich werde mal versuchen etwas ins Wiki zu schreiben.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

dustbln

Hi!

Ich habe folgende Herausforderung: Ich nutze den TelegramBot-Modul mit mehreren Benutzern (Contacts) und möchte gerne bei den Favorites so etwas realisieren wie

/[Überwachungskamera Video]=set TB sendMedia cam.mp4;

Dabei soll nur der Benutzer das Video bekommen, der auch angefragt hat, nicht der DefaultPeer. Wie setze ich das um?

Danke euch! Stefan