Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

dustbln

Konnte leider keine Lösung finden und einen Workaround über das Auslesen von Readings fand ich unsauber. Das ist hier sicher quick&dirty, aber vielleicht wäre das eine sinnvolle Erweiterung?

--- FHEM/50_TelegramBot.pm.orig 2020-05-06 20:48:19.934236904 +0200
+++ FHEM/50_TelegramBot.pm      2020-08-12 00:06:05.300117719 +0200
@@ -1256,6 +1256,9 @@
           $ret = TelegramBot_SendIt( $hash, (($mchatnorm)?$mchatnorm:$mpeernorm), "-", undef, 10, $storedMgsId );
         }

+        # substitute placeholder for message peer id
+        $ecmd =~ s/PEERID/$mpeernorm/g;
+       
         $ecmd .= " ".$cmdAddition if ( $cmdAddition );
         return TelegramBot_ExecuteCommand( $hash, $mpeernorm, $mchatnorm, $ecmd, $needsResult, $storedMgsId );
       }


Jetzt kann ich nämlich einfach folgendes machen:

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

viegener

Zitat von: dustbln am 12 August 2020, 00:16:44
Konnte leider keine Lösung finden und einen Workaround über das Auslesen von Readings fand ich unsauber. Das ist hier sicher quick&dirty, aber vielleicht wäre das eine sinnvolle Erweiterung?

--- FHEM/50_TelegramBot.pm.orig 2020-05-06 20:48:19.934236904 +0200
+++ FHEM/50_TelegramBot.pm      2020-08-12 00:06:05.300117719 +0200
@@ -1256,6 +1256,9 @@
           $ret = TelegramBot_SendIt( $hash, (($mchatnorm)?$mchatnorm:$mpeernorm), "-", undef, 10, $storedMgsId );
         }

+        # substitute placeholder for message peer id
+        $ecmd =~ s/PEERID/$mpeernorm/g;
+       
         $ecmd .= " ".$cmdAddition if ( $cmdAddition );
         return TelegramBot_ExecuteCommand( $hash, $mpeernorm, $mchatnorm, $ecmd, $needsResult, $storedMgsId );
       }


Jetzt kann ich nämlich einfach folgendes machen:

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


Dasselbe Verhalten sollte sich heute schon recht einfach erreichen lassen:

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

Es lassen sich ja Readings in Favoriten verwenden (mit der üblichen set-Syntax) - in diesem Fall sind die Readings im Device auch schon gesetzt, so dass das funktionieren sollte
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

dustbln

Danke@viegener für die Info, das war mir so nicht bekannt. Wo ist das dokumentiert?

Ich finde es aber auch ehrlich gesagt bei einem Multiuser-Setup nicht so optimal, ein globales Reading dafür zu nehmen. Was ist, wenn zwei Nutzer (praktisch) zeitgleich ein Kommando senden? Wann steht welche ID im Reading? Daher fände ich tatsächlich eine eindeutige Lösung sauberer.

viegener

Zitat von: dustbln am 16 August 2020, 11:00:21
Danke@viegener für die Info, das war mir so nicht bekannt. Wo ist das dokumentiert?

Ich finde es aber auch ehrlich gesagt bei einem Multiuser-Setup nicht so optimal, ein globales Reading dafür zu nehmen. Was ist, wenn zwei Nutzer (praktisch) zeitgleich ein Kommando senden? Wann steht welche ID im Reading? Daher fände ich tatsächlich eine eindeutige Lösung sauberer.

Wie gesagt die logik ist nicht speziell für telegram sondern teil der normalen set-logik - findet sich in der commandref unter set

Zeitgleich ist ja in fhem nicht so wirklich der fall - auch hier wird ein empfangenes kommando sprich favorit mit befehl erstmal bearbeitet bevor der nächste bearbeitet wird. Damit ist das die saubere lösung - eine ersetzung mit eigener syntax und logik möchte ich ungerne schaffen. Die favoriten sind schon jetzt recht komplex - die set-logik ist standarf.

Vielleicht könnte man den anwendungsfall ins fhemwiki eintragen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

dustbln

Ah gut. Wenn das Abfragen des Readings zuverlässig korrekt funktioniert, dann passt das aus meiner Sicht. Wieder was gelernt!

Aufnahme in Wiki oder sogar Hinweis in Commandref wären vielleicht sinnvoll, ich habe mir selbst einen Wolf gesucht ohne auf die Idee zu kommen, dass set das bereits kann.

viegener

Zitat von: dustbln am 16 August 2020, 13:59:06
Ah gut. Wenn das Abfragen des Readings zuverlässig korrekt funktioniert, dann passt das aus meiner Sicht. Wieder was gelernt!

Aufnahme in Wiki oder sogar Hinweis in Commandref wären vielleicht sinnvoll, ich habe mir selbst einen Wolf gesucht ohne auf die Idee zu kommen, dass set das bereits kann.

Das wiki lebt sehr vom mitmachen, lass Dir einen account machen und beschreibe den anwendungsfall ich vi. Sicher es gibt leute die ähnliche ansätze brauchen und gerne die vorlage nutzen würden
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

dustbln

Mache ich gerne!

Noch ein anderer Punkt, den ich durch Zufall entdeckt habe: Bei den Favoriten ist es toll, dass ich den Favoriten noch Parameter anhängen kann. Beispiel:

/[Sprich]=set tts;

Dann kann ich in Telegram /favoritX Hallo test senden und das wird zu set tts Hallo test. Leider kann ich aber auch so etwas senden wie /favoritX ; set Festplatte alles_loeschen. Ich denke das Semikolon sollte hier escaped aber abgewandelt werden, zB:

$cmdAddition =~ s/;/ SEMICOLON /g if ( $cmdAddition );

(Hintergrund: Ich habe nur cmdFavorites gesetzt, damit aus Sicherheitsgründen nur vorgegebene Kommandos ausgeführt werden können)

viegener

Zitat von: dustbln am 18 August 2020, 00:18:22
Mache ich gerne!

Noch ein anderer Punkt, den ich durch Zufall entdeckt habe: Bei den Favoriten ist es toll, dass ich den Favoriten noch Parameter anhängen kann. Beispiel:

/[Sprich]=set tts;

Dann kann ich in Telegram /favoritX Hallo test senden und das wird zu set tts Hallo test. Leider kann ich aber auch so etwas senden wie /favoritX ; set Festplatte alles_loeschen. Ich denke das Semikolon sollte hier escaped aber abgewandelt werden, zB:

$cmdAddition =~ s/;/ SEMICOLON /g if ( $cmdAddition );

(Hintergrund: Ich habe nur cmdFavorites gesetzt, damit aus Sicherheitsgründen nur vorgegebene Kommandos ausgeführt werden können)

Valider Punkt, auch wenn das vielleicht genutzt wird, werde ich das abstellen. Semikolon wird durch Doppelsemikolon ersetzt, dann ist der hintere Teil immer auch innerhalb desselben Kommandos. - Ich habe dazu schon mal eine neue Version in github hinterlegt, diese unterstützt auch channels wenn man es explizit über das Attribut ermöglicht

Wichtige Anmerkung: Wenn man über Favorites die Ausführung von Befehlen ermöglicht, so lassen sich damit Kommandos direkt in FHEM ausführen. Das sollte man nur dann aktivieren, wenn man es wirklich braucht und weiss wem man dies ermöglicht und was damit gemacht werden kann.

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

viegener

Es gibt eine neue Version des TelegramBot im SVN. Darin sind enthalten sind einige auch hier schon erwähnte Änderungen und auch Bugfixes
- Es gibt einen Support für channels - dieser muss allerdings erst per attribut "allowChannels" freigeschaltet werden
- Damit sind channels auch in den Kontakten und für Befehle unterstützt, allerdings erlauben diese keine Identifikation des Senders!
- Einige Fixes sind zu den Keyboards eingeflossen, damit auch inline-Antowrten korrekt beantwortet werden
- Favoriten mit Semikolon abgetrennten Teilen werden jetzt maskiert (Doppelsemikolon)



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

fritzhugo123

Hallo,

ich suche nach einer Lösung für folgendes Problem:
Ich habe nun im Telegram via Fhem ein Menü für Favoriten konfiguriert.
Nun bin ich nicht alleine, der diese Favoriten nutzt.
Und die gleichen Favoriten für mehrere Benutzer macht keinen Sinn.
Gibt es die Möglichkeit Favoriten benutzerabhängig zu konfigurieren, oder einzelne Favoriten auszublenden?

Gruß, Matthias

speex

Weiß jemand warum die Antwort bei favorites immer doppelt kommt, auch wenn ich einen Befehl über das cmdKeyword absetze erhalte ich die Antwort immer doppelt.

Wenn ich eine Nachricht zb. per Notify absetze bekomme ich sie nur einmal.

Habe auch im Forum einen Thread gefunden wo beschrieben wird das man cmdReturnEmptyResult auf 0 setzen soll, allerdings war dieses attribut schon in der Vergangenheit bei mir gesetzt.

viegener

Zitat von: fritzhugo123 am 04 September 2020, 18:42:11
Hallo,

ich suche nach einer Lösung für folgendes Problem:
Ich habe nun im Telegram via Fhem ein Menü für Favoriten konfiguriert.
Nun bin ich nicht alleine, der diese Favoriten nutzt.
Und die gleichen Favoriten für mehrere Benutzer macht keinen Sinn.
Gibt es die Möglichkeit Favoriten benutzerabhängig zu konfigurieren, oder einzelne Favoriten auszublenden?

Gruß, Matthias

Nein unterschiedliche Favoriten nach Benutzer sind nicht im Bot selber möglich - es ist aber machbar in den Befehlen selbst je nach Benutzer unterschiedliche Kommandos auszulösen. Oder natürlich über andere Befehle ganz andere Menus aufzubauen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: speex am 05 September 2020, 15:57:28
Weiß jemand warum die Antwort bei favorites immer doppelt kommt, auch wenn ich einen Befehl über das cmdKeyword absetze erhalte ich die Antwort immer doppelt.

Wenn ich eine Nachricht zb. per Notify absetze bekomme ich sie nur einmal.

Habe auch im Forum einen Thread gefunden wo beschrieben wird das man cmdReturnEmptyResult auf 0 setzen soll, allerdings war dieses attribut schon in der Vergangenheit bei mir gesetzt.

Gib doch mal Beispiele, welche Favoriten betroffen sind.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

speex

Vielleicht habe ich mich unglücklich ausgedrückt bei allen vom Mobilgerät abgesetzten commands mit Rückantwort wie z.B. list hmdorsensor state bekomme ich die Antwort doppelt.

Also es betrifft nicht konkret die favorites an sich das ist nur einer der favorite commands.

Ein favorite der früher mal funktioniert hat und inzwischen nicht mehr
/cam[Eingang Foto] get IPCam image;
Erzeugt einen Fehler auch dieser z.B. kommt doppelt.

viegener

Zitat von: speex am 06 September 2020, 18:42:55
Vielleicht habe ich mich unglücklich ausgedrückt bei allen vom Mobilgerät abgesetzten commands mit Rückantwort wie z.B. list hmdorsensor state bekomme ich die Antwort doppelt.

Also es betrifft nicht konkret die favorites an sich das ist nur einer der favorite commands.

Ein favorite der früher mal funktioniert hat und inzwischen nicht mehr
/cam[Eingang Foto] get IPCam image;
Erzeugt einen Fehler auch dieser z.B. kommt doppelt.

Noch ein paar Fragen:
- Was hast Du geändert?
- Kommen zweimal identische Nachrichten oder unterscheiden sich diese?
- Kannst Du mal ein list auf dem device hier posten (bitte anonymisieren/kritische Daten wir Kontake/peers/etc entfernen)

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