Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

DD

Danke!

Für alle die hier auch noch mal suchen, das ist die Lösung:

\@.....

Telegram:msgText.* {
    if ($EVTPART1 eq 'Licht') {
        if ($EVENT =~ 'an') {
            fhem("set Wz_Wohnzimmer on");
            fhem("set WZ_Fensterlicht on");
            fhem("set Telegram message \@Vorname_Name Licht an");
        }

DD

Hi,

auch auf die Gefahr dass das hier schon einmal besprochen wurde (ich habe nichts gefunden), stelle ich die Frage hier noch mal:

Wie kann ich die Antwort auf eine Telegramm Anfrage an den Absender zurück senden?
Der Absender wird ja als "msgChat:" ausgegeben.

Gruß
Tobi


viegener

Zitat von: DD am 29 Oktober 2017, 13:05:55
Hi,

auch auf die Gefahr dass das hier schon einmal besprochen wurde (ich habe nichts gefunden), stelle ich die Frage hier noch mal:

Wie kann ich die Antwort auf eine Telegramm Anfrage an den Absender zurück senden?
Der Absender wird ja als "msgChat:" ausgegeben.

Gruß
Tobi


Das kommt ein bisschen darauf an was Du genau willst - wenn ich die Frage zumindest richtig verstanden habe

a) Du willst die Antwort genau an Benutzer @x senden, der Deinem Bot eine nachricht gesendet hat auf die Du reagierst dann verwendest Du für die Antwort den Inhalt von Reading msgPeerId - Antowrt landet immer im persönlichen Chat des Benutzers mit dem Bot

b) Du willst die Antwort an den Chat zurücksenden, wenn der Benutzer @x die Anfrage im Chat gesendet hat, dann verwendest Du das reading msgChatId.

Das Senden der Nachricht erfolgt dann z.B. aus perl mit:

fhem('set telegrambot @'.$replyid." <Deine Nachricht> ");

Wenn in $replyid die gespeicherte chat oder peerid steht

...ID ist günstiger, da damit das Problem gleichnamiger Benutzer umgangen wird

Grundsätzlich gibt es noch mehr Varianten

Im Prinzip ist aber die Frage, was Du machen willst und warum favoriten etc nicht helfen, denn hier musst Du Dich selbst um die Sicherheit kümmern!



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

DD

Hi,

a) passt.
In einem notify habe ich verschiedene Statusmeldungen, Lichtsteuerungen, etc. hinterlegt. Wer die nutzt, soll die Antwort erhalten.

Ich muss aber gestehen dass ich wohl etwas noch nicht verstanden habe.
In den Readings sehe ich zum Beispiel den aktuellen Chat Partner "sentMsgPeer". Du schreibst ich soll ".$replyid." nutzen. Muss ich diesen erst irgendwo beschreiben?

Tobi


viegener

Zitat von: DD am 29 Oktober 2017, 13:51:41
Hi,

a) passt.
In einem notify habe ich verschiedene Statusmeldungen, Lichtsteuerungen, etc. hinterlegt. Wer die nutzt, soll die Antwort erhalten.

Ich muss aber gestehen dass ich wohl etwas noch nicht verstanden habe.
In den Readings sehe ich zum Beispiel den aktuellen Chat Partner "sentMsgPeer". Du schreibst ich soll ".$replyid." nutzen. Muss ich diesen erst irgendwo beschreiben?

Tobi
/quote]

Nein nicht beschreiben, aber schon irgendwo ablegen.

Da Du nicht schreibst wie Du antworten willst, hatte ich angenommen, dass Du irgendwo eine perl-Routine (FHEM basiert auf perl) hast, die die Antwort senden soll und die gestartet wird, wenn eine bestimmte Nachricht empfangen wird.

In dieser perl-Routine würdest Du den Empfänger in der perl-Variable $replyid ablegen. Das war kein vollständiger Code!

Wie gesagt ohne Informationen ist den schwierig zu helfen, denn aus DOIF und notify geht es wieder anders, aber ohne Hintergrund klappt die Antowrt nicht
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DD

o.k.

Im notify habe ich folgenden Code zur Zeit drin stehen.
Damit geht der Status immer an den selben:

Telegram:msgText.* {
    if ($EVTPART1 eq 'xLicht') {
        if ($EVENT =~ 'an') {
            fhem("set WZ_Fensterlicht on");
            fhem("set Telegram message \@Name_Vorname Fenster Licht ist an");
        }
        elsif ($EVENT =~ 'aus') {
            fhem("set WZ_Fensterlicht off");
            fhem("set Telegram message \@Name_Vorname Fenster Licht ist aus");
        }
    }


Nun möchte ich "\@Name_Vorname " so ersetzen dass immer der letzte Absender die Antwort erhält

igami

Ich möchte an dieser Stelle noch Mal für das msgDialog Modul werben
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

@DD: Verwende entweder msgDialog oder Favoriten im TelegramBot, da bekommst Du das auch sicher hin, denn sonst kann jeder bei Dir das Licht oder sonstiges einschalten.

Wenn Du das partout nicht willst, dann solltest Du in Deinem Code einfach ReadingsVal verwenden.

In Deinem Code also:


Telegram:msgText.* {
    if ($EVTPART1 eq 'xLicht') {
        my $replyID = '\@'.ReadingVal("Telegram", "msgPeerId ", <deine defaultID>);
        if ($EVENT =~ 'an') {
            fhem("set WZ_Fensterlicht on");
            fhem("set Telegram message ".$replyID." Fenster Licht ist an");
        }
        elsif ($EVENT =~ 'aus') {
            fhem("set WZ_Fensterlicht off");
            fhem("set Telegram message ".$replyID." Fenster Licht ist aus");
        }
    }
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DD


viegener

Zitat von: DD am 29 Oktober 2017, 16:45:43
Hey, Super

Danke!

Tobi

Gern geschehen, aber da Du Dich bisher dazu nicht geäussert hast - weisst Du was Du da tust? Wenn das nicht abgesichert ist, kann bei Dir jeder von aussen schalten!!! Und es gibt in Telegram genügend Leute die alle Bots ausprobieren!

Ich habe das Gefühl, Du bist Dir nicht im klaren darüber, dass Du gerade aussen einen Lichtschalter anbringst, der von jedem betätigt werden kann...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DD

Doch, bin ich.
Ich bin im Moment auch nur am experimentieren.

Ich mache zum Schluss auch alles wieder zu!  :)

DD

Noch mal eine Frage:

Ich möchte eine Kameraaufnahme über notify versenden.
Das Bild wird aufgenommen wenn die Klingel betätigt wird - das funktioniert!

Nun soll der Versand erfolgen:

K_Klingel:sensor:.closed

{fhem("set Telegram message \@Vorname_Name Jemand hat an der Haustüre geklingelt");; \
           fhem("set Telegram message \@Vorname_Name sendImage /opt/fhem/www/images/Kamera_Hof_snapshot.jpg");;
}


Leider wird nun nicht das Bild verschickt sondern der Pfad:
ZitatNachricht:
sendImage /opt/fhem/www/images/Kamera_Hof_snapshot.jpg

Was habe ich vergessen?

viegener

@DD Du versuchst 2 Befehle auf einmal zu machen message und sendimage sind getrennte Befehle
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DD

ich habe es auch schon in der Komandozeile bzw. ohne die erste Textnachricht versucht. Es kommt immer nur der Link

viegener

Oh je - wie gesagt es sind zwei Befehle / sendImage ist ein eigener Befehl / message wäre ein anderer


fhem("set Telegram sendImage \@Vorname_Name /opt/fhem/www/images/Kamera_Hof_snapshot.jpg")


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