Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

Frank_Huber

Habe 4 fhem Instanzen.
Bei 3 von 4 ist im Telegram bot der cmdsend NICHT vorhanden.
Bei einem geht es...
Raspbian und fhem sind Tagesaktuell von heute.
Auch das Telegram Modul ist identisch.

Jmd ne Idee?

Thx
Frank

viegener

Zitat von: Frank_Huber am 04 April 2017, 22:15:46
Habe 4 fhem Instanzen.
Bei 3 von 4 ist im Telegram bot der cmdsend NICHT vorhanden.
Bei einem geht es...
Raspbian und fhem sind Tagesaktuell von heute.
Auch das Telegram Modul ist identisch.

Jmd ne Idee?

Thx
Frank

Was meinst Du mit cmdsend - ist nicht vorhanden - sprich in FHEMWeb wird es nicht im Dropdown angeboten oder es gibt eine Fehlermeldung beim Aufruf?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Frank_Huber

#1367

viegener

@Frank_Huber: Sind die Server durchgestartet worden und tritt das Problem unter verschiedenen Browsern auf (cache gelöscht etc)?
Wenn die TelegramBot-Dateien identisch sind, dann muss es an etwas anderem liegen. Bist Du sicher, dass diese identisch sind (grösse etc)? Ich habe in den Kommentaren irrtümlich zweimal die Revision 2.2 genutzt -> am besten vergleichst Du den Eintrag $ID

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

Frank_Huber

#1369
Zitat von: viegener am 05 April 2017, 10:41:31
@Frank_Huber: Sind die Server durchgestartet worden und tritt das Problem unter verschiedenen Browsern auf (cache gelöscht etc)?
Wenn die TelegramBot-Dateien identisch sind, dann muss es an etwas anderem liegen. Bist Du sicher, dass diese identisch sind (grösse etc)? Ich habe in den Kommentaren irrtümlich zweimal die Revision 2.2 genutzt -> am besten vergleichst Du den Eintrag $ID

tritt auf verschiedenen Rehnern auf. und er kennt die Befehle auch nicht. Hab den in nem notify mit drin.
Den Browsercache schließe ich damit aus.

funktioniert: 50_TelegramBot.pm   13824 2017-03-27 20:48:32Z viegener
funktioniert nicht: 50_TelegramBot.pm  13824 2017-03-27 20:48:32Z viegener
komplett identisch.

letzter komplett Reboot der server is erst paar Tage her.

EDIT: Telegram Device löschen und neu anlegen bringt auch nix. (Code Import)

EDIT2: vielleicht hilft es, wenn ich über die FHEM Kommandozeile den Befehl eingebe bekomme ich folgendes zurück:
TelegramBot_Set: Unknown argument cmdSend, choose one of sendMedia sendPhoto sendVoice send _msg sendDocument replaceContacts queryInline reply sendLocation queryAnswer message msg reset zDebug msgForceReply token queryEditInline sendImage msgEdit

vollständiger LIST:
Internals:
   CFGFN
   FAILS      0
   NAME       TelegramBot
   NR         6812
   OLD_POLLING 163
   POLLING    163
   SNAME      TelegramBot
   STATE      Polling
   TYPE       TelegramBot
   UPDATER    0
   WAIT       0
   me         315013284:Huber-fhem-og:@Huber_fhem_og_bot
   sentLastResult NonBlockingGet: returned FAILED file :{: not found or empty
   sentMsgId
   sentMsgPeer Frank_Huber
   sentMsgPeerId XXXXXXXXX
   sentMsgResult NonBlockingGet: returned FAILED file :{: not found or empty
   sentMsgText Image: { - plotAsPng('Plot_Temp_OG') }
   Contacts:
     XXXXXXXXX  XXXXXXXXX:Frank_Huber:
   Hu_do_params:
     NAME
     addr       https://api.telegram.org:443
     boundary   TelegramBot_boundary-x0123
     buf
     code       200
     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.10.0

Date: Wed, 05 Apr 2017 08:52:13 GMT

Content-Type: application/json

Content-Length: 236

Connection: close

Access-Control-Allow-Origin: *

Access-Control-Allow-Methods: GET, POST, OPTIONS

Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection

Strict-Transport-Security: max-age=31536000; includeSubdomains
     hu_blocking 0
     hu_filecount 1
     hu_portSfx
     loglevel   4
     method     POST
     path       /XXXXXXXXXXX/sendMessage
     protocol   https
     redirects  0
     timeout    30
     url        https://api.telegram.org/XXXXXXXXXX/sendPhoto
     Hash:
     Sslargs:
   Hu_upd_params:
     FD         5
     NAME
     addr       https://api.telegram.org:443
     buf
     code       200
     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 162
     hu_portSfx
     isPolling  update
     loglevel   4
     method     GET
     offset     0
     path       /XXXXXXXXXXXX/getUpdates?offset=0&limit=5&timeout=120
     protocol   https
     redirects  0
     timeout    245
     url        https://api.telegram.org/XXXXXXXXXXXX/getUpdates?offset=0&limit=5&timeout=120
     Hash:
     Sslargs:
   Helper:
     Dblog:
       Sentmsgid:
         Logdb:
           TIME       1491382333.56201
           VALUE      16
       Sentmsgpeerid:
         Logdb:
           TIME       1491383335.80742
           VALUE      156517845
       Sentmsgresult:
         Logdb:
           TIME       1491383335.80742
           VALUE      NonBlockingGet: returned FAILED file :{: not found or empty
       State:
         Logdb:
           TIME       1491383335.80742
           VALUE      sentMsgId:
   Readings:
     2017-01-11 10:05:16   Contacts        XXXXXXXXX:Frank_Huber:
     2017-04-05 00:00:17   PollingErrCount 0
     2017-04-04 06:02:43   PollingLastError NonBlockingGet: returned api.telegram.org: Die Wartezeit für die Verbindung ist abgelaufen
     2017-01-11 10:05:16   msgChat
     2017-01-11 10:05:16   msgFileId
     2017-01-11 10:05:16   msgId           3
     2017-01-11 10:05:16   msgPeer         Frank_Huber
     2017-01-11 10:05:16   msgPeerId       XXXXXXXXX
     2017-01-11 10:05:16   msgText         T
     2017-04-05 11:08:55   sentMsgId
     2017-04-05 11:08:55   sentMsgPeerId   XXXXXXXXX
     2017-04-05 11:08:55   sentMsgResult   NonBlockingGet: returned FAILED file :{: not found or empty
   sentQueue:
Attributes:
   defaultPeer Frank_Huber
   pollingTimeout 120
   room       Kommunikation,SYSTEM

andies

Zitat von: viegener am 21 März 2017, 16:25:40
Ja ist in der aktuellen github-Version enthalten, kommt also auch demnächst als update über SVN, ich war sowieso gerade an den Favoriten
Sind zweispaltige Favoriten jetzt schon in dem "normalen" update enthalten? (Ich habe keine spezielle git-Version installiert.)
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

hokascha

Ich habe das Modul heute auch mal in Betrieb genommen, funktioniert gut, vielen Dank!

Ich möchte es ermöglichen, dass ich auf bestimmte Statusmeldungen, die FHEM via Telegram ausliefert, reagieren kann. Eine Statusmeldung könnte z.B. sein: "Morgen wird der Restmüll abgeholt". Und die Antwort könnte sein "später erinnern" oder "verstanden". Auf die beiden Antworten soll FHEM dann reagieren, sprich es solle FHEM-Kommandos abgesetzt werden. Ich habe das jetzt so gelöst:


attr Bot favorites /[muell_off]=set Muellwecker off;/[muell_on]=set Muellwecker on


Und eine Nachricht geht so raus:


set Bot msg @@xxxxx (verstanden) (spaeter erinnern) Morgen wird der Restmüll abgeholt


Klar, beim tippen auf die eine der Antworten geht nur der jeweilige Text raus. Wie kann ich denn jetzt erreichen, dass beim Tippen auf "verstanden" das /muell_off Favorite ausgeführt wird? Oder allgemeiner gesprochen, wie kann ich beliebig beschrifteten Antwort-Buttons bestimmte FHEM-Aktionen zuweisen?

Ma_Bo

Du könntest z.B. mit einem DOIF auf den eingehenden Text reagieren und schauen, was als letztes vom TelegramBot versendet wurde, dann kannst du entsprechende Kommandos ausführen.

Grobes Beispiel:
ein userReading beim TelegramBot, damit man sieht, was zuletzt gesendet wurde:

attr TelegramBot userReadings sentMsg_Text {InternalVal("TelegramBot","sentMsgText","none");;}

Dann ein DOIF zum reagieren

define Test_DOIF DOIF ([?TelegramBot:sentMsg_Text] =~ "Restmüll abgeholt" and [TelegramBot:msgText] eq "verstanden")(set Muellwecker off) DOELSEIF ([?TelegramBot:sentMsg_Text] =~ "Restmüll abgeholt" and [TelegramBot:msgText] eq "später erinnern")(set Muellwecker wiederholen) DOELSE
attr Test_DOIF do always
attr Test_DOIF wait 1:1:1
attr Test_DOIF checkReadingEvent 1


Code nicht getestet, dient nur als Beispiel !!!

####Edit1

Zur Sicherheit evtl. noch einbauen, von wem die Nachricht kommt und nur diese akzeptieren.

define Test_DOIF DOIF ([?TelegramBot:sentMsg_Text] =~ "Restmüll abgeholt" and [?TelegramBot:msgPeer] eq "DEIN_NAME" and [TelegramBot:msgText] eq "verstanden")(set Muellwecker off) DOELSEIF ([?TelegramBot:sentMsg_Text] =~ "Restmüll abgeholt" and [?TelegramBot:msgPeer] eq "DEIN_NAME" and [TelegramBot:msgText] eq "später erinnern")(set Muellwecker wiederholen) DOELSE
attr Test_DOIF do always
attr Test_DOIF wait 1:1:1
attr Test_DOIF checkReadingEvent 1
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

hokascha

#1373
Besten Dank, funktioniert!

Edit:
Wobei man natürlich sagen muss, dass es nur so lange funktioniert, wie zwischendurch nicht schon andere Nachrichten gesendet werden. Besser wäre es schon, wenn der auszuführende Befehl dem Telegram-Modul bzw. direkt dem anzuzeigenden Button mitgegeben würde. Womöglich lässt sich doch sowas wie von mir ursprünglich angedacht realisieren? Also sowas wie


set Bot msg @@xxxxx (/short1=verstanden) (/short2=spaeter erinnern) Morgen wird der Restmüll abgeholt

viegener

@Frank_Huber: Mir gehen bald die Ideen aus - was passiert, wenn Du auf dem nicht funktionierenden Rechner ein reload 50_TelegramBot.pm machst und danach nochmal auf die TelegramBot-Detailseite gehst --> oder das cmdSend direkt als Kommando versendest?

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

Ma_Bo

Zitat von: hokascha am 06 April 2017, 16:26:36
Besten Dank, funktioniert!

Edit:
Wobei man natürlich sagen muss, dass es nur so lange funktioniert, wie zwischendurch nicht schon andere Nachrichten gesendet werden. Besser wäre es schon, wenn der auszuführende Befehl dem Telegram-Modul bzw. direkt dem anzuzeigenden Button mitgegeben würde. Womöglich lässt sich doch sowas wie von mir ursprünglich angedacht realisieren? Also sowas wie


set Bot msg @@xxxxx (/short1=verstanden) (/short2=spaeter erinnern) Morgen wird der Restmüll abgeholt


Einfach so als Idee:

Dann mach es doch anders, für Restmüll verstanden machst du "/001 verstanden" und für Restmüll später erinnern "/002 später erinnern", dann für Gelber Müll verstanden "/003 verstanden" und für später "/004 später wiederholen"

damit kannst du dann im DOIF reagieren:

define Test_DOIF DOIF ([?TelegramBot:msgPeer] eq "DEIN_NAME" and [TelegramBot:msgText] eq "/001 verstanden")(set Muellwecker off) DOELSEIF ([?TelegramBot:msgPeer] eq "DEIN_NAME" and [TelegramBot:msgText] eq "/002 später erinnern")(set Muellwecker wiederholen) DOELSEIF ([?TelegramBot:msgPeer] eq "DEIN_NAME" and [TelegramBot:msgText] eq "/003 verstanden")(set GelberMuellwecker off) DOELSEIF ([?TelegramBot:msgPeer] eq "DEIN_NAME" and [TelegramBot:msgText] eq "/004 später erinnern")(set GelberMuellwecker wiederholen)
attr Test_DOIF do always
attr Test_DOIF wait 1:1:1
attr Test_DOIF checkReadingEvent 1


Oder anstelle von "/001 verstanden" usw. machst du als Antwort einfach "Muellwecker verstanden" "Muellwecker wiederholen" und "GelberMuellwecker verstanden" "GelberMuellwecker weiderholen"

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

hokascha

Zitat von: Ma_Bo am 06 April 2017, 17:16:27
Einfach so als Idee:

Dann mach es doch anders, für Restmüll verstanden machst du "/001 verstanden" und für Restmüll später erinnern "/002 später erinnern", dann für Gelber Müll verstanden "/003 verstanden" und für später "/004 später wiederholen"

...

Oder anstelle von "/001 verstanden" usw. machst du als Antwort einfach "Muellwecker verstanden" "Muellwecker wiederholen" und "GelberMuellwecker verstanden" "GelberMuellwecker weiderholen"

Ja, das ginge natürlich. Wäre aber auch nur ein Workaround und man müsste eindeutige Button-Beschriftungen für die unterschiedlichen Aktionen haben. Machbar, aber nicht so richtig cool ;-) Danke für den Tipp in jedem Fall!

Ma_Bo

Kein Problem, sind halt die Ideen um es jetzt direkt hinzubekommen.

Klar wäre es schön, wenn man deine Idee direkt ins Modul bekäme, soweit dies möglich ist.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Frank_Huber

Zitat von: viegener am 06 April 2017, 16:53:00
@Frank_Huber: Mir gehen bald die Ideen aus - was passiert, wenn Du auf dem nicht funktionierenden Rechner ein reload 50_TelegramBot.pm machst und danach nochmal auf die TelegramBot-Detailseite gehst --> oder das cmdSend direkt als Kommando versendest?

Danke! Das hats gelöst!
Jetzt ist alles wie es sein soll.

Grüße
Frank

viegener

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