Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

stera

Hallo zusammen,

ich baue momentan eine Lösung auf, wo ein Raspberry mit Fhem über LTE an einem entfernten Standort ist. Hier möchte ich gerne soweit wie möglich Daten reduzieren, um einen kleinen Tarif zu nutzen. Für Nachrichten zum empfangen/senden und Fhem etwas zu steuern benutze ich Telegram. Funktioniert tadellos! Mir ist nur aufgefallen, dass die Verbindung zum Bot doch recht viele Daten verbraucht (ca. 20 MB) am Tag ohne den zu nutzen.

Was gibt es dort für Möglichkeiten, außer das Modul in gewissen Zeiten auf Disabled zu setzen?
Das Senden aus Fhem heraus ist mir am wichtigsten. Empfangen von Daten in Fhem, kann auf bestimmte Zeiten reduziert werden.

Vielen Dank für Eure Ideen.

Gruß,
SteRa









l2r

was passiert denn, wenn dein Tarif aufgebraucht ist? wird dann gedrosselt oder gekappt?

Falls nur gedrosselt wird wäre das ja alles halb so wild, da die Daten ja trotzdem durchgehen, wenn auch nicht so schnell.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

viegener

@stera: Die grösste (vermeidbare) Datenmenge beim Telegrambot entsteht wohl durch das Polling. Denn auch wenn keine Nachricht ansteht für den Empfang wird doch jedesmal einiges über die Leitung geschickt. Also würde ich im Zeitfenster wenn normalerweise keine Nachrichten anstehen das Intervall z.B. auf 1 h erhöhen. Wenn das Pollingintervall sonst auf 30 sec steht heisst das schonmal 99% der Daten pro Stunde gespart. Beim Senden kannst Du nur durch kleinere Nachrichten wirklich etwas reduzieren.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

stera

Ja genau das Suche ich.. Es geht auch gut, wenn man das Modul zwischenzeitlich auf disable stellt, aber die Funktion wäre noch schöner.. Nur wie kann ich den interval bzw. pollen auf 60min stellen? Attrb. steht leider dafür nicht zur Auswahl,nur der timeout oder habe ich was übersehen?

Danke und Gruß SteRa

viegener

Zitat von: stera am 10 September 2018, 16:53:34
Ja genau das Suche ich.. Es geht auch gut, wenn man das Modul zwischenzeitlich auf disable stellt, aber die Funktion wäre noch schöner.. Nur wie kann ich den interval bzw. pollen auf 60min stellen? Attrb. steht leider dafür nicht zur Auswahl,nur der timeout oder habe ich was übersehen?

Danke und Gruß SteRa

pollingTimeout ist schon das Attribut, dass hier das Intervall einstellt zu dem ein neuer longpoll stattfindet. Es gab früher eine Einschränkung, bei dem Telegram hier maximal sehr kleine Werte akzeptiert hat. Das ist irgendwann erweitert worden, ich kann Dir aber nicht sagen, ob wirklich 1h möglich ist.

Wenn das nicht reicht, wäre es vermutlich am besten zeitweise über einen Wert 0 das Polling auszuschalten. Senden geht dann weiterhin.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

fireball

Hi,

kann man eigentlich mit der GEOFENCY APP eigentlich auch über Telegram NAchrichten an FHEM schicken und damit was steuern?
Ich wollte die APP nicht direkt auf FHEM im Heimnetz freischalten.

VG
René

viegener

@fireball: Ich kenne leider die Geofency App nicht, deshalb gehört die Frage wohl vielleicht eher in den Geofency-Thread. Grundsätzlich kann durch das Telegram-Modul eigentlich alles in FHEM gesteuert werden. Es muss nur eine entsprechende Nachricht auf dem Telefon generiert werden. Ganz wichtig: Diese Nachricht darf nicht von einem Telegram-Bot gesendet werden, sonst sieht das Modul in FHEM sie nicht (Bots können nicht an Bots senden). Die Nachricht muss also von einem "normalen" Benutzeraccount kommen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

stera

Hallo,

mit der Geofancy App plus Telgram Plugin kannst du was ortsbedingt steuern. Das funktioniert. Allerdings habe ich mit einem S7 und Android 8. öfter das Problem, dass er immer nur das abwesend sendet und nicht wenn man innerhalb der Zone kommt. Dann muss manuell die App und das TelegramPlugin einmal geöffnet werden. Dann geht´s wieder für eine bestimmte Zeit.


@viegener:  Das mit langen polltimeout funktioniert leider nicht.. Die Zeit ist doch relativ kurz, wo er Nachrichten empfängt. Ich habe das nun so gelöst, dass ich den Bot abschalte und nur zur gewissen Zeit mal auf mache.. Das reicht mir.


define doif_StartUp DOIF ([global:?INITIALIZED])
(attr XXBot disable 0)
(set XXBot message @StR Raspi: Fhem wurde neu gestartet!)
((defmod at_autocreate1_$SELF at +00:00:50 attr XXBot disable 1;; sleep 5;; save))
DOELSE


Gruß,
SteRa

fireball

Hi,

danke für die Antworten, ich hatte mittlerweile auch rausgefunden, dass ich noch dieses EgiGoZone Telegram Plugin benötigte.
Dann konnte ich die Testnachrichten aus dem Plugin senden und das hat funktioniert.

Aber dann ging es immernoch nicht wirklich, den Grund habe ich auch noch rausgefunden, in der EgiGoZone App muss man dann noch den Haken bei "Übermittlung an Plugins erlauben" setzen.

Nun funktioniert es.

VG und Danke!
René

majorshark

Zitat von: fireball am 23 September 2018, 17:28:59
Hi,

kann man eigentlich mit der GEOFENCY APP eigentlich auch über Telegram NAchrichten an FHEM schicken und damit was steuern?
Ich wollte die APP nicht direkt auf FHEM im Heimnetz freischalten.

VG
René

Ich benutze die Geofancy APP und bin sehr zufrieden damit. Den Webhook von Geofancy, also die Nachrichten an FHEM, lasse ich via https durch mein Reverse Proxy laufen. Der übernimmt dann auch die Authentifizierung.

Grüße
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

tagedieb

Hallo zusammen

Seit einiger Zeit erhalte ich keine telegram nachrichten mehr, ich habe jetzt viele tage im Forum und imWiki gelesen und probiert, jedoch ohne Erfolg, das ganze wieder herzustellen
Laut Telegram ist der letzte Eintrag der 10.September, leider finde ich aber in meiner Log keinen Hinweis an diesem Tag, wonach ich suchen muss

anbei mal list Device



Internals:
   FAILS      0
   NAME       Telegram0176
   NR         2271
   OLDFAILS   53
   OLD_POLLING 54
   POLLING    0
   SNAME      Telegram0176
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         Failed - see log file for details
   sentLastResult NonBlockingGet: returned FAILED peer not found :Falkenxxxx:
   sentMsgId 
   sentMsgOptions
   sentMsgPeer
   sentMsgPeerId
   sentMsgResult NonBlockingGet: returned FAILED peer not found :Falkenxxxx:
   AliasCmds:
     /          2
   Contacts:
   HU_DO_PARAMS:
     data       
     header     agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
     hideurl    1
     loglevel   4
     method     GET
     timeout    30
     url       
     hash:
   HU_UPD_PARAMS:
     NAME       
     addr       https://api.telegram.org:443
     auth       0
     buf       
     code       401
     compress   1
     conn       
     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
     httpheader HTTP/1.1 401 Unauthorized
Server: nginx/1.12.2
Date: Sun, 21 Oct 2018 13:43:51 GMT
Content-Type: application/json
Content-Length: 58
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
     hu_blocking 0
     hu_filecount 9
     hu_port    443
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     0
     path       /bot TOKENschlüsse/getUpdates?offset=0&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/botTokenschlüssel/getUpdates?offset=0&limit=5&timeout=120
     hash:
     sslargs:
   READINGS:
     2018-10-21 14:24:32   Contacts       
     2018-10-21 15:43:44   PollingErrCount 142
     2018-10-21 15:43:43   PollingLastError Callback returned error :Unauthorized:
     2018-10-06 13:46:20   msgChat         م_پ
     2018-10-06 13:46:20   msgChatId       172059451
     2018-10-06 13:46:20   msgFileId       
     2018-10-06 13:46:20   msgId           5501
     2018-10-06 13:46:20   msgPeer         م_پ
     2018-10-06 13:46:20   msgPeerId       172059451
     2018-10-06 13:46:20   msgReplyMsgId   
     2018-10-06 13:46:20   msgText         /start
     2018-10-06 13:46:20   prevMsgChat     م_پ
     2018-10-06 13:46:20   prevMsgFileId   
     2018-10-06 13:46:20   prevMsgId       5500
     2018-10-06 13:46:20   prevMsgPeer     م_پ
     2018-10-06 13:46:20   prevMsgPeerId   172059451
     2018-10-06 13:46:20   prevMsgReplyMsgId
     2018-10-06 13:46:20   prevMsgText     /start
     2018-10-06 13:46:20   replyId         م_پ
     2018-10-21 15:43:36   sentMsgId       
     2018-10-21 15:43:36   sentMsgPeerId   
     2018-10-21 15:43:36   sentMsgResult   NonBlockingGet: returned FAILED peer not found :Falkenxxxx:
   inlinechats:
   sentQueue:
Attributes:
   allowUnknownContacts 1
   cmdFavorites /menu
   cmdKeyword Heyfhem
   cmdReturnEmptyResult 0
   defaultPeer @Falkenxxxx
   favorites  /[abschliessen]=set Schloss lock;/ [Warmwasser aus]=set Buderus WaterDayTemp 30; /[warmwasser an]=set Buderus WaterDayTemp 50;/[Wohnzimmerlicht an]= set WZDeckenleuchte off; /[Wohnzimmerlicht aus]=set WZDeckenleuchte on
   pollingTimeout 120
   room       Telegram
   saveStateOnContactChange 1
   userReadings replyId:msgText.* {ReadingsVal($name, "msgChat", "") eq "" ? ReadingsVal($name, "msgPeerId", "") : (split(" ", ReadingsVal($name, "msgChat", ""), 2))[0]}
   verbose    5


Auszug aus LogDatei

2018.10.21 15:42:43 5: TelegramBot_Callback Telegram0176: called from Polling
2018.10.21 15:42:43 5: TelegramBot_Callback Telegram0176: data returned :{"ok":false,"error_code":401,"description":"Unauthorized"}:
2018.10.21 15:42:43 5: TelegramBot_Deepencode Telegram0176: encoded a String from :401: to :401:
2018.10.21 15:42:43 5: TelegramBot_Deepencode Telegram0176: encoded a String from :Unauthorized: to :Unauthorized:
2018.10.21 15:42:43 5: TelegramBot_Deepencode Telegram0176: encoded a String from :0: to :0:
2018.10.21 15:42:43 5: TelegramBot_Deepencode Telegram0176: found a HASH
2018.10.21 15:42:43 5: TelegramBot_Callback Telegram0176: after encoding
2018.10.21 15:42:43 5: TelegramBot_Callback Telegram0176: polling returned result? <undef>
2018.10.21 15:42:43 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:42:43 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:42:44 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:42:44 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:42:44 5: TelegramBot_UpdatePoll Telegram0176: called
2018.10.21 15:42:44 5: TelegramBot_UpdatePoll Telegram0176: got fails :52: wait 54 seconds
2018.10.21 15:42:44 4: TelegramBot_Callback Telegram0176: resulted in Callback returned error :Unauthorized: from Polling
2018.10.21 15:42:44 5: TelegramBot_Callback Telegram0176: - Ende > Control back to FHEM
2018.10.21 15:42:48 3: TempSZ: IF: unknown reading: Thermometer:temperatured
2018.10.21 15:43:05 1: Timeout for MilightBridge_DoPing reached, terminated process 6422
2018.10.21 15:43:05 3: BlockingCall for milight was aborted
2018.10.21 15:43:13 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:17 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:17 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:17 5: TelegramBot_Get Telegram0176: called
2018.10.21 15:43:36 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:36 4: TelegramBot_Set Telegram0176: Processing TelegramBot_Set( message )
2018.10.21 15:43:36 5: TelegramBot_Set Telegram0176: start send for cmd :message: and sendType :0:
2018.10.21 15:43:36 5: TelegramBot_SendIt Telegram0176: called
2018.10.21 15:43:36 5: TelegramBot_SendIt Telegram0176: try to send message to :Falkenxxxx: -:bla bla: - add :<undef>: - replyid :<undef>::    options ::
2018.10.21 15:43:36 4: TelegramBot_GetFullnameForContact # Contacts is <undef>
2018.10.21 15:43:36 3: TelegramBot_SendIt Telegram0176: Failed with :FAILED peer not found :Falkenxxxx::
2018.10.21 15:43:36 5: TelegramBot_Callback Telegram0176: called from SendIt
2018.10.21 15:43:36 3: TelegramBot_Callback Telegram0176: resulted in NonBlockingGet: returned FAILED peer not found :Falkenxxxx: from SendIt
2018.10.21 15:43:36 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:36 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:36 5: TelegramBot_Callback Telegram0176: - Ende > Control back to FHEM
2018.10.21 15:43:36 5: TelegramBot_Set Telegram0176: message failed with :FAILED peer not found :Falkenxxxx::
2018.10.21 15:43:38 5: TelegramBot_UpdatePoll Telegram0176: called
2018.10.21 15:43:38 5: TelegramBot_UpdatePoll Telegram0176: - Initiate non blocking polling - With callback set
2018.10.21 15:43:38 5: TelegramBot_readToken: Read Telegram API token from file
2018.10.21 15:43:38 4: TelegramBot_UpdatePoll Telegram0176: initiate polling with nonblockingGet with 120s
2018.10.21 15:43:38 5: TelegramBot_UpdatePoll Telegram0176: - Ende > next polling started
2018.10.21 15:43:43 5: TelegramBot_Callback Telegram0176: called from Polling
2018.10.21 15:43:43 5: TelegramBot_Callback Telegram0176: data returned :{"ok":false,"error_code":401,"description":"Unauthorized"}:
2018.10.21 15:43:43 5: TelegramBot_Deepencode Telegram0176: encoded a String from :Unauthorized: to :Unauthorized:
2018.10.21 15:43:43 5: TelegramBot_Deepencode Telegram0176: encoded a String from :401: to :401:
2018.10.21 15:43:43 5: TelegramBot_Deepencode Telegram0176: encoded a String from :0: to :0:
2018.10.21 15:43:43 5: TelegramBot_Deepencode Telegram0176: found a HASH
2018.10.21 15:43:43 5: TelegramBot_Callback Telegram0176: after encoding
2018.10.21 15:43:43 5: TelegramBot_Callback Telegram0176: polling returned result? <undef>
2018.10.21 15:43:44 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:44 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:44 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:44 5: TelegramBot_Set Telegram0176: called
2018.10.21 15:43:44 5: TelegramBot_UpdatePoll Telegram0176: called
2018.10.21 15:43:44 5: TelegramBot_UpdatePoll Telegram0176: got fails :53: wait 55 seconds
2018.10.21 15:43:44 4: TelegramBot_Callback Telegram0176: resulted in Callback returned error :Unauthorized: from Polling
2018.10.21 15:43:44 5: TelegramBot_Callback Telegram0176: - Ende > Control back to FHEM


Da ich weder im Handy noch in der FHEM Telegram einstellung etwas geändert hatte, weiis ich keinen Ansatz, woher dieses Unauthorized herrühren kann

ich freue mich über jede Hilfestellung, da ich mit meinem Mini wissen, nicht mehr weiter komme

Vielen Dank im voraus

VG Tagedieb
FHEM 5.6 auf Cubitruck
CUL und Cul 868 und 2 HM LAN an Zbox
Remoteserver auf 2.Zboxi
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-SW1-FM,HM-LC-SW4-PCB,HM-LC-Sw1PBU-FM,HM-PB-2-WM55,HM-PB-6-WM55,HM-SCI-3-FM,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SC-2,HM-SEC-TIS,HM-WDS10-TH-O u.viele mehr
diverse IT Empfänger und LW3

DefanC

Hallo tagedieb,

ich würde als erstes mal diese Beiträge: "« Antwort #1950 am: 01 Juni 2018, 13:29:35 »"  ff.
https://forum.fhem.de/index.php/topic,38328.1950.html
lesen und prüfen, ob mir mein Bot überhaupt noch gehört. (->  Token überprüfen, ob vllt. ein Fremder eingedrungen ist? + Token ändern !unbedingt!)

Zu deiner eigenen Sicherheit würde ich meinen Post hier "Autor: tagedieb « am: Heute um 16:00:42 »" bearbeiten und sicherheitsrelevante :

<attr> <device> <allowUnknownContacts> / <cmdKeyword> / <favorites>    unkenntlich machen.

Vllt. hilft dir das schon weiter.   :)

mfG  Stefan

amenomade

Ja, und im BotFather Chat prüfen, dass die APIkey mit deinem "Tokenschlüssel" stimmt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

DefanC

@tagedieb,

ach ja und auf jeden Fall folgendes setzen:
attr <device> allowUnknownContacts 0

das hilft in Zukunft gegen Eindringlinge.   ;)

viegener

@tagedieb: Offensichtlich versucht jemand mit Deinem Bot zu reden. Das ist nicht unbedingt kritisch, denn die Bots sind ja bei Telegram über die Suche zu finden und jemand versucht rauszufinden, ob man mit Deinem Bot reden kann.

Im Listing scheint es aber so, dass Dein Attribut Contacts leer ist. Damit kann die Namensaufläsung für den defaultpeer nicht funktionieren.

Also am besten 2 Dinge tun:
1) Eine Nachricht an Deinen Bot senden von dem default peer account - damit sollte der Account wieder in Contacts erscheinen (und nach einem Save auch dort verbleiben)
2) Den Defaultpeer von Name (@...) auf die Contact ID umstellen (generell sollte eher mit IDs gearbeitet werden)

Warum die Kontakte leer sind, kann ich nicht sagen, das solltest Du beobachten.

Wenn das geht, gehört Dir der Bot auf jeden Fall noch und auch dasa Senden sollte gehen. Wenn es nicht geht, musst Du wie schon empfohlen, das token neu zu genereieren und im device ablegen.

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