Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

wthiess

Hallo Profis!

Ich habe nun Telegramm in Betrieb. Meldungen senden von Fhem ok.; SVG anfordern ok.; Favoriten um Fhem zu steuern ok.; Echt super Sache.
Jetzt habe ich hier von "Inline Keyboard" gelesen. Da ich keine Ahnung habe um was es da geht weis ich nicht ob ich sowas brauchen kann. Es hört sich cool an. Kann mir bitte jemand das auf "Nicht Programmierer-Deutsch" erklären.

lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

Prof. Dr. Peter Henning

Soso.
ZitatProgrammierer-Deutsch
>:( >:(

Da würde ich doch mal die Screenshots aus den vorigen Posts ansehen, die sagen mehr, als 1000 Worte.

LG

pah

dergeberl

@viegener
Danke, werde mir das am Wochenende mal anschauen.

Eine automatische "Bearbeitung" der CallbackData sollte jedenfalls optional sein. Ich persönlich mache über Notifys was bei mir auch sehr gut funktioniert.

Bei einer Automatischen Antwort auf die Callbacks sehe ich das genau so. Dort kann man einen Text mitschicken (z.b. "Licht wurde angeschalten") welchen ich in dem Notify setze. Diese Funktion geht dadurch dann verloren.

Evtl. würde sich sowas über Attribute einstellen lassen?

Viele Grüße
Max

Prof. Dr. Peter Henning

Schaltvorgänge können in FHEM eine ganze Weile dauern - z.B. wenn eine Keymatic mit AES-Signatur der Kommandos aufgefahren werden muss. Viele Dinge liefern überhaupt keine Rückmeldung (z.B. das Setzen irgendwelcher Attribute)

Insofern wäre es unsinnig, im Telegram-Client immer auf so etwas zu warten. Eine Bestätigungsmessage sollte ebenfalls asychhron herausgehen, und nicht direkt auf das Anklicken des virtuellen Keyboards.

Damit Fehler durch Nichtbeantwortung solcher Keyboard-Requests ausgeschlossen werden, sollte also die automatische Beantwortung der default sein. Meinetwegen gerne per Attribut abschaltbar - dann ist man selbst für die Rückmeldung verantwortlich.

LG

pah

viegener

Zitat von: dergeberl am 16 Dezember 2016, 16:57:15
@viegener
Danke, werde mir das am Wochenende mal anschauen.

Eine automatische "Bearbeitung" der CallbackData sollte jedenfalls optional sein. Ich persönlich mache über Notifys was bei mir auch sehr gut funktioniert.

Bei einer Automatischen Antwort auf die Callbacks sehe ich das genau so. Dort kann man einen Text mitschicken (z.b. "Licht wurde angeschalten") welchen ich in dem Notify setze. Diese Funktion geht dadurch dann verloren.

Evtl. würde sich sowas über Attribute einstellen lassen?

Viele Grüße
Max

Bin nicht sicher ob ich deinen Kommentar verstehe - Eine automatische Beantwortung ist momentan nicht vorgesehen, also kannst Du in dem Aufruf von answer Deinen text mitgeben (oder eben weglassen)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Prof. Dr. Peter Henning

Die habe ich aber in einer Modifikation eingebaut, siehe Post auf der vorigen Seite. Damit entfällt die Warterei, und der Client ist wieder frei. Weitere Abarbeitung in FHEM dann asynchron.

LG

pah

dergeberl

Ich habe das gerade nochmal getestet:
Wenn man keinen Callback schickt, wird lediglich der Ladebalken in dem Button angezeigt.
Der Client hängt nicht. Ich konnte trotzdem mich durch die Buttons Klicken.
Der Ladebalken verschwindet irgendwann wieder (callbacks laufen glaube ich nach ein paar Sekunden ab).

Ich gebe dir Recht das eine Automatische Beantwortung der Callbacks in manchen Situationen von Vorteil ist. Jedoch nicht immer  ;D

@viegener:
Das war auf den Post von Prof. Dr. Peter Henning bezogen :)


Viele Grüße
Max

viegener

#1042
Zitat von: Prof. Dr. Peter Henning am 16 Dezember 2016, 12:47:03
Ich lade es mal runter, hatte auch schon angefangen, an dem Modul herumzuspielen.

===> FHEM crash.

Manueller Neustart: Scheint zu laufen, auch mit "inline".

Problem noch: Wie bekommt man mehrere Buttons in eine Zeile ? Dazu sollte ab Zeile 1641 eine zweite Schleifenverschachtelung rein, also

Sonstige Dinge:

1. Neues undokumentiertes set _msg - dupliziert set msg ??
2. Tippfehler disbale in der Doku
3. Zeile 537 => Kommentar sollte nicht "location" lauten
4. Zeile 1643 =>  sollte lauten         my %oneKey = ( "text" => $keytext, "callback_data" => $keydata );   (keydata statt keytext)
5. Die beiden Kommandos "reply" und "answer" sind schwer auseinander zu halten, und "inline" ist etwas zu allgemein. Mein Vorschlag: "keyboard" statt "inline", "kbresponse" statt "answer".
6. Warum macht man eigentlich kein automatisches Response aus dem Modul heraus ? Wenn die externe Routine zum Abfangen eines Events nicht funktioniert, hängt der Client. Ich votiere für Asychronität: Automatische Respoinse in demMoment, wo Callbackdata gesetzt wurde bzw. ein FHEM-Kommando abgesandt wurde.

Also am Ende von ParseCallBack, außerhalb des BulkUpdate:

    #-- set result reading and answer call ansynchronously
    if( $data ){
      readingsSingleUpdate($hash, "callbackData", $data,1 );
      TelegramBot_Set($hash,$name,"answer ".$qid);
    }else{
      readingsSingleUpdate($hash, "callbackData", "",1  );       
    }


7. Ich habe noch in Zeile 1104 eingefügt


  $retMsg=""
    if( $retMsg eq "none");


um damit die ausführliche Meldung nach der Ausführung eines abgekürzten Kommandos unterdrücken zu können.


Hi Peter,
Danke fürs ausprobieren und Korrektur lesen!

- Absturz - Hätte ich wohl explizit warnen sollen, seit der vorletzten Version in github musste ich mehrere Signaturen ändern und da dies im Hintergrund durch polling aufgerufen wird, kracht es - Perl ist da etwas komisch - Also sollte man FHEM besser vorher runterfahren

- Mehrere Buttons in einer Zeile durch | getrennt - siehe auch Beispiel in der Commandref für msg

- _msg ist hinzugefüt, damit in der Liste der Sets in FHEMWeb das Kommando als erstes steht - Blöder Workaround um nicht answer als erstes zu haben (steht auch in der commandref)

- Korrekturen in makeKeyboard und Doku habe ich übernommen

- Bei der automatischen Antwort suche ich noch eine Möglichkeit für einen variablen text, der vom Benutzer beeinflusst werden kann
(Ich denke momentan ein Attribut zu definieren, in dem man einen Wert definiert der mit set-logic evaluiert wird, dann kann man dynamisch etwas auswerten (auch readings oder perl-code), einen fixen Wert angeben, oder gar nichts)

- ich habe die Befehle jetzt mal umbenannt, der Hinweis ist berechtigt, es ist nun queryInline und queryAnswer

Habe bisher nur die Korrekturen hochgeladen - die automatische Beantwortung steht noch aus
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Prof. Dr. Peter Henning

Ich habe auch schon über die alphabetische Sortierung der Kommandos geflucht ...

Kann man derzeit nur  beeinflussen, indem man bei set ? explizit ein paar Kommandos ausblendet

Ich suche noch nach einer Möglichkeit, bei einem Drücken auf einen virtuellen Key im Telegram-Client einen Parameter mitzugeben. Beispielsweise einen Item, der einer durch Telegram gesteuerten Einkaufsliste hinzugefügt wird.

LG

pah

viegener

Zitat von: Prof. Dr. Peter Henning am 16 Dezember 2016, 18:57:10
Ich habe auch schon über die alphabetische Sortierung der Kommandos geflucht ...

Kann man derzeit nur  beeinflussen, indem man bei set ? explizit ein paar Kommandos ausblendet

Ich suche noch nach einer Möglichkeit, bei einem Drücken auf einen virtuellen Key im Telegram-Client einen Parameter mitzugeben. Beispielsweise einen Item, der einer durch Telegram gesteuerten Einkaufsliste hinzugefügt wird.

LG

pah

Bin nicht sicher ob ich das mit dem Parameter zu dem virtuellen Key verstehe?
Also ein inline button und wenn der gedrückt wird, soll noch zusätzlich etwas vom Benutzer eingegeben werden?

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

viegener

Bin doch schneller als gedacht. Neue Version mit automatischen Beantwortung ist in github

- Es gibt ein Attribut queryAnswerText in dem kann man den Text für die Antwort hinterlegen. Dynamische Texte sind auch möglich, da der Inhalt des Attributs mit set-logik ausgewertet wird (also sind Readings und sogar perl-code möglich). Wenn das Attribut nicht gesetzt ist, findet KEINE automatische Beantwortung statt

- answer heisst jetzt queryAnswer und inline queryInline

Weiterhin frohes Testen (ich habe nur ganz rudimentär getestet  ;) )

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

wthiess

#1046
Hallo @dergeberl

ZitatFür Die Logik habe ich ein Notify angelegt welches die CallBackDatas auswertet (hier ein kleiner Auszug):
In dem einen if muss die eigene Telegram ID hinterlegt werden um eine Prüfung des Absenders durchzuführen.
Code: [Auswählen]
Telegram:callbackID:.* { 
   my $callbackid = ReadingsVal("Telegram", "callbackID", 0);
   my $sender = ReadingsVal("Telegram", "callbackpeerID", 0);
........................................
   
{answerCallback($callbackid, $callantwort)}
}
}

Das mit dem Notify schaffe ich nicht. Bitte um Hilfe. Wo und wie schreibe ich das.

Ich hab folgende in der Fhem.cfg geschrieben
define teleBotx notify Telegram:callbackID:.* { 
my $callbackid = ReadingsVal("Telegram", "callb.................


da kommt nur
Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command if, try help. Unknown command if, try help. Global symbol "$sender" requires explicit package name at (eval 9074) line 1, <$fh> line 1188. Unknown command }elsif, try help. Unknown command if($calldata, try help. Unknown command fhem("set, try help. Unknown command $callantwort="Wohnzimmer, try help. Unknown command }elsif($calldata, try help. Unknown command fhem("set, try help. Unknown command $callantwort="Systemair, try help. Unknown command }elsif($calldata, try help. Unknown comman..........................

Und wie komm  ich dann zu den Buttons?


Bitte um Hilfe
lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

dergeberl

@wthiess
Ich glaube in der fhem.cfg müssen neue Zeilen maskiert werden.

Ich würde über die Weboberfläche das notify initial anlegen und da den Code einfügen.
Initial:
define teleBox notify Telegram:callbackID:.* {}

Dann den notify aufrufen, auf DEF klicken und den Rest einfügen.

Viele Grüße
Max

wthiess

Hallo Max!

Habe ich grad gemacht. Jetzt kommt keine Meldung. Aber wie bekomme ich jetzt die Buttons ins Telegramm.
Gibt es ein bestimmtes Kommando?

lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

dergeberl

Wenn du es wie in meinem Post gemacht hast, kannst du den Befehl für das Senden von Buttons auch über die Weboberfläche absetzen also:
{setTelegramInlineKeyboard(SENDERID, "Nachrichten ", "Hauptmenü-hauptmenue")}

Alternativ zum Beispiel über ein notify welches auf die Nachrichten reagiert die Telegram empfängt.

Viele Grüße
Max