Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

Zitat von: igami am 03 Oktober 2017, 12:55:43
Ich hätte nicht gedacht, dass es bei den Clients solche Unterschiede gibt. Dann ist es wohl besser das raus zu lassen. Ist auch hier beschrieben.

Ja allerdings ist das Verhalten unter iOS noch bedenklicher, denn der Text nach dem newline fehlt einfach...
Also erstmal vertagen bis Telegram dafür eine Lösung bereitstellt.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Flipper92

Hallo zusammen,

ich hab mal angefangen nun mein Bot und auch das Menü anzupassen.
Ich würde gerne nun auf Inline umsteigen, jedoch finde ich da keine gute Anleitung.
Gibt es da zum Thema Inline eine Anleitung?

Ich bin auch über die Favoriten Inline gestolpert.
Dort hab ich jedoch das Problem das ich als Antwort "-" bekomme.
Nachricht in Telegram mit "cmdReturnEmptyResult = 1":
Wohnung:
TelegramBot FHEM -  Befehl: set Wohnzimmer.Schranklicht toggle: - Ergebnis:
OK


Nachricht in Telegram mit "cmdReturnEmptyResult = 0":
Wohnung:
-


RAW für TelegramBot:
defmod TelegramBot TelegramBot
attr TelegramBot allowUnknownContacts 0
attr TelegramBot cmdFavorites /S
attr TelegramBot cmdKeyword fhem
attr TelegramBot cmdRestrictedPeer 13*****14 19*****43 -19*****43
attr TelegramBot cmdReturnEmptyResult 0
attr TelegramBot disable 0
attr TelegramBot favorites /[-Fernseher an/aus] = set Wohnzimmer.TV.Steckdose toggle;;\
/[-Schranklicht an/aus] = set Wohnzimmer.Schranklicht toggle;;\
/[-Nachtlicht 3 Min] = set Schlafzimmer.Nachtlicht on-for-timer 180;;\
/[-Nachtlicht an/aus] = set Schlafzimmer.Nachtlicht toggle;;\
/[-Waschmaschine an/aus] = set Kueche.Waschmaschine toggle;;\
/[-Waschmaschine Timer] = set Waschmaschine.Timer 1;;\
/[-Laserdrucker an/aus] = set Steckdose.Laserdrucker toggle
attr TelegramBot favorites2Col 1
attr TelegramBot favoritesInline 1
attr TelegramBot pollingTimeout 120
attr TelegramBot utf8Special 1

viegener

@Flipper92 - das mit dem - ist momentan der einzige Weg mit inline keyboards (quasi eine leere Nachricht zu simulieren).
Ich könnte hier noch eine Variante einbauen, bei der die Nachricht gelöscht wird, aber momentan bleibt noch dieser rest übrig.

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

Flipper92

Zitat von: viegener am 03 Oktober 2017, 19:01:58
@Flipper92 - das mit dem - ist momentan der einzige Weg mit inline keyboards (quasi eine leere Nachricht zu simulieren).
Ich könnte hier noch eine Variante einbauen, bei der die Nachricht gelöscht wird, aber momentan bleibt noch dieser rest übrig.

Wenn es gelöscht wird, dann klappt mir die Favoritenliste dennoch zusammen oder?
Da ich manchmal mehr als eine Aktion in den Favs durchführen möchte ist das aktuell noch nicht so toll für mich.

Zur Not geht es halt wieder zur Tastatur. Bin ja schon froh das es überhaupt geht :-)

viegener

Zitat von: Flipper92 am 03 Oktober 2017, 19:53:01
Wenn es gelöscht wird, dann klappt mir die Favoritenliste dennoch zusammen oder?
Da ich manchmal mehr als eine Aktion in den Favs durchführen möchte ist das aktuell noch nicht so toll für mich.

Zur Not geht es halt wieder zur Tastatur. Bin ja schon froh das es überhaupt geht :-)

Ja, wenn die Nachricht gelöscht würde, gibt es keine Favoritenliste mehr, aber ein einfaches anklicken des vorherigen favoritenauswahlbefehls führt wieder zur Tastatur
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Esjay

Hallo Viegener,
folgendes Problem:
ich habe einen Doif mit dem ich mir ein Menü für meinen Staubsauger ausgeben lasse.

Das def sieht so aus:
(["^TelegramBot$:^queryData: Roberta.Start$"])
(set Roberta start)

DOELSEIF
(["^TelegramBot$:^queryData: Roberta.Stopp$"])
(set Roberta stop)

DOELSEIF
(["^TelegramBot$:^queryData: Roberta.Laden$"])
(set Roberta charge)

DOELSEIF
(["^TelegramBot$:^queryData: Roberta.Status$"])
(set TelegramBot msg @#Roberta Hier ein paar Infos : \nBatterie Level = [Roberta:batteryLevel]% \nState = [Roberta:state] \nLetzte Reinigung = [Roberta:history_0])

DOELSEIF
([Roberta:state] eq "Docked")
(set TelegramBot msg @#Roberta Letzte Reinigung =\n[Roberta:history_0]\nBattery Level = [Roberta:batteryLevel]%\nIch lade mich jetzt wieder auf)

DOELSEIF
([Roberta:state] eq "Cleaning")
(set TelegramBot msg @#Roberta Ich fahre jetzt los, und melde mich wenn ich fertig bin)

DOELSEIF
([Roberta:error] ne "none")
(set TelegramBot queryInline @#Roberta (Roberta Start) (Roberta Stopp) (Roberta Laden) (Roberta Status) Ich habe einen Fehler. Er lautet [Roberta:error_code] Hier mögliche Kommandos)

DOELSEIF
(["^TelegramBot$:^msgText: M$"] and ["^TelegramBot$:^msgChat: #Roberta$"])
(set TelegramBot queryInline @#Roberta (Roberta Start) (Roberta Stopp) (Roberta Laden) (Roberta Status) (Roberta Saugstufe) Hier das Menü für Roberta)

DOELSEIF
([Haus:state] eq "absent")(set Roberta start)

DOELSEIF
(["^TelegramBot$:^queryData: Roberta.Saugstufe$"])
(set TelegramBot queryInline @#Roberta (90|80|70|60|50) (40|30|20|10|0) Mögliche Saugstufen)

DOELSEIF
([TelegramBot:"^queryData:..*$"])
{
my $var = ReadingsVal("TelegramBot", "msgChat", "");
my $var1 = ReadingsNum("TelegramBot", "queryData", "");
if($var eq "#Roberta" && $var1 <= 100){
fhem "set Roberta fan_power $var1";}
}


Wenn nun dieser Teil eintrifft:

(["^TelegramBot$:^queryData: Roberta.Saugstufe$"])
(set TelegramBot queryInline @#Roberta (90|80|70|60|50) (40|30|20|10|0) Mögliche Saugstufen)


und ich nun die Auswahl treffe (sei es 90 oder 80 etc.)

erhalte ich im Event-Monitor nur

2017-10-06 22:07:49 readingsProxy TelegramSensor 20
2017-10-06 22:07:49 readingsProxy TelegramSensor2 20
2017-10-06 22:07:49 TelegramBot TelegramBot queryID: 673649127870307661
2017-10-06 22:07:49 TelegramBot TelegramBot queryPeer: Stephan
2017-10-06 22:07:49 TelegramBot TelegramBot queryPeerId: 156846160
2017-10-06 22:07:49 TelegramBot TelegramBot queryData: 20
2017-10-06 22:07:49 TelegramBot TelegramBot queryReplyMsgId: 3730


Mir fehlt da das triggern von
2017-10-06 22:08:48 TelegramBot TelegramBot msgChat: #Roberta

um die letzte Bedingung zu erfüllen.

Siehst du da einen Denkfehler meinerseits, oder ist das so gewollt?

Grüße


viegener

@Esjay: Die Antworten auf queryInline buttons sind im Sinne von telegram keine wirklich messages, deshalb werden auch andere Daten übertragen. Um die Antwort eindeutig identifizieren zu können ist der data-Teil gedacht. Den könntest Du ja entsprechend eindeutig wählen.

Deshalb gibt es auch einen komplett getrennten set von readings für die queryInline-Antworten

Die nicht-inline keyboards verhalten sich da anders und senden normale Messages, allerdings entsprechen diese Nachrichten immer dem Text auf denKeyboardbuttons.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Esjay

Zitat von: viegener am 06 Oktober 2017, 23:10:55
@Esjay: Die Antworten auf queryInline buttons sind im Sinne von telegram keine wirklich messages, deshalb werden auch andere Daten übertragen. Um die Antwort eindeutig identifizieren zu können ist der data-Teil gedacht. Den könntest Du ja entsprechend eindeutig wählen.

Deshalb gibt es auch einen komplett getrennten set von readings für die queryInline-Antworten

Die nicht-inline keyboards verhalten sich da anders und senden normale Messages, allerdings entsprechen diese Nachrichten immer dem Text auf denKeyboardbuttons.

Dank dir für die Erklärung zu so später Stunde.

Grüße

blenni

Hallo,

bei mir läuft der TelegramBot mittlerweile und benachrichtigt mich z.B. auch über eine fertige Waschmaschine.

Jetzt würde ich mir noch gerne die Mülltermine zuschicken lassen. Allerdings habe ich folgendes Problem:

In der 99_myUtils.pm habe ich zum Test folgende Funktion:

sub Abfall_telegram(){
  fhem("set telegram message @42xxxxxxx Test");
}


Über
define test at *22:46 { Abfall_telegram() }
will ich mir eine Test-Nachricht schicken lassen, was aber zu folgender Ausgabe im log führt:

2017.10.21 22:46:00 3: set telegram message  Test : TelegramBot_Set: Command message, without explicit peer requires defaultPeer being set
2017.10.21 22:46:00 3: test: TelegramBot_Set: Command message, without explicit peer requires defaultPeer being set


Allerdings gebe ich ja über die PeerId einen expliziten Empfänger an - oder verstehe ich etwas falsch? Der Befehl set telegram message @42xxxxxxx Test direkt in FHEM eingegeben verschickt die Nachricht korrekt.

Könnt ihr mir weiterhelfen?

Danke und viele Grüße

viegener

@blenni: Gefühlt wurde diese Frage wohl schon 1000-mal beantwortet, aber hier trotzdem nochmal in kurzform:

@ hat eine Spezialfunktion in perl, deshalb entweder den Text in einfache Anführungszeichen oder mit \ escapen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Apollon

Hallo,

ich versuche vergeblich TelegramBot einzurichten.

Was habe ich bisher getan:
1. Auf dem Handy Telegram installiert, eine neuen bot angelegt. Einen Token habe ich erhalten.
2. In fhem das TelegramBot-Device mit dem neuen Token angelegt.

Hier tritt nun das Problem auf. Der Token wird nicht übernommen. Ich bin davon ausgegangen, dass ich den Token falsch eingetragen habe. Auch nach mehrmaliger Kontrolle durch 4 Augen wird er nicht übernommen. Ich habe dann den bot wieder gelöscht und einen neuen angelegt. Doch mit dem neuen Token funktioniert es ebenfalls nicht. Ich habe leider keinen ähnlichen Fall gefunden.

Hat jemand eine Idee wo das Problem liegt bzw. was ich falsch gemacht habe.

Gruß
Apollon

MadMax-FHEM

Was heißt nicht übernommen?

Was steht im Log?

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)

Apollon

Im log steht: 2017.10.24 09:36:11 3: TelegramBot_Undef Telegram: called
Mehr steht nicht im log zu Telegram.

"Nicht übernommen" heißt, dass das Reading Token nicht erscheint und Def nach der Seitenaktualisierung wieder leer ist.

MadMax-FHEM

Ein wenig mehr Log vorher/nachher wäre evtl. nicht verkehrt...

Ebenso die Verwendung von code-Tags ('#' im "Menü") für Postings von Logs/lists etc.

Stelle doch mal Log auf verbose 5 (global oder nur beim Telegram)...

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)

Apollon

Bis vor wenigen Minuten stand nichts weiter im Log. Nun sieht urplötzlich das Device (Internals und Readings) ganz anders aus, obwohl ich seit Stunden nicht mehr geändert habe (außer fhem-Neustarts). Im Log geht jetzt die Post ab. Es erscheint auch das Reading msgText mit der letzten Nachricht. Im Listing sehe ich nun auch den Token.

Ich habe keine Ahnung was nun passiert ist. Ob nun alles in Ordnung ist, kann ich noch nicht sagen.

Ich werde jetzt versuchen, das Device so einzustellen, dass ich auf meinem Handy Pushnachrichten bekomme.

Vielen Dank für die Hilfestellung.

Gruß
Apollon