Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

Esjay

Guten Abend zusammen.
Ich lasse mir Abends immer die Primetime Sendungen per Telegram schicken. Mir ist jetzt schon öfter aufgefallen, dass nach einem "&" der Text abgebrochen wird.
Bsp.

TV_Program: set TelegramBot message @#Home Heute Abend im TV\nARD=Tatort: Die Liebe, ein seltsames Spiel\nZDF=Ein Sommer auf Zypern\nRTL=Die 2 - Gottschalk & Jauch gegen ALLE: Das 80er Special - Das 80er Special\nSAT1=It's Showtime! Das Battle der Besten\nPro7=Kill The Boss 2\nVOX=Grill den Henssler: Unknown command Jauch, try help.

Das kommt dabei raus.

FhemServer:
Heute Abend im TV
ARD=Tatort: Die Liebe, ein seltsames Spiel
ZDF=Ein Sommer auf Zypern
RTL=Die 2 - Gottschalk &amp

Kann ich das i-wie abfangen?

Grüße

viegener

@Esjay: Ich denke Dein Problem ist nicht das &-Zeichen, sondern dass irgendwo das & in & umgewandelt wird und das ; ist bekanntermassen ein Befehlstrenner in fhem also wird der Befehl dort beendet.

Folgerichtig steht am Ende der Zeile auch "Unknown command Jauch,..." - den FHEM kennt Jauch nicht als Befehl.

Wenn Du nach HTML (also z.B. & nach und &) umwandelst musst Du noch dafür sorgen, dass ; verdoppelt werden

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

Esjay

Zitat von: viegener am 21 Mai 2017, 20:35:49
@Esjay: Ich denke Dein Problem ist nicht das &-Zeichen, sondern dass irgendwo das & in & umgewandelt wird und das ; ist bekanntermassen ein Befehlstrenner in fhem also wird der Befehl dort beendet.

Folgerichtig steht am Ende der Zeile auch "Unknown command Jauch,..." - den FHEM kennt Jauch nicht als Befehl.

Wenn Du nach HTML (also z.B. & nach und &) umwandelst musst Du noch dafür sorgen, dass ; verdoppelt werden

Ok,das macht Sinn. Ich habe gerade gesehen,das es im Reading  schon in  & umgewandelt wird.
Danke

viegener

Habe gerade eine neue Version in SVN eingecheckt, diese kommt auch ab morgen über update:

Wesentlich Änderung ist die Möglichkeit das Favoritenmenu/keyboard als inline keyboard darzustellen. Dazu gibt es das Attribut favoritesInline mit den Werten 1 und 0 --> 1 heisst natürlich inline keyboard

Ausserdem sind ein paar Fehlerkorrekturen und Fehlertoleranzen eingeflossen. So werden jetzt Doppelpunkte in inline keyboards erlaubt (nur der letzte wird als trenner verwendet)

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

Tomsc1984

Hallo,

ich habe eine Frage zum TelegramBot. Die Lösung liegt bestimmt nahe, nur sehe ich den Wald vor lauter Bäumen nicht.

Ich habe 3 User, die an den Bot Nachrichten schicken können. Als Beispiel den Spritpreis. Als Default Peer bin ich eingetragen.

Wenn jetzt User 2 die Nachricht Spritpreis sendet, bekommen ich ( User 1 bzw. Default peer ) die Antwort des Bots. Wie kann ich das hinbekommen das der Bot demjenigen antwortet, der auch mit ihm kommunziert hat? Trage ich alle User als defaultpeer ein, bekommen alle User die Antwort.

Vielen Dank für eure Hilfe.

Gruß Thomas

amenomade

Mir ist nicht klar, ob die Users Nachrichten senden, oder Fhem abfragen?

Allerdings sollte derjenige Benutzer die Antwort bekommen, der die Anfrage geschickt hat. Wenn defaultPeerCopy gesetzt ist, bekommt der defaultPeer zusätzlich auch eine Kopie.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

gent

Hi,

ist das eigentlich Normal, dass das TelegramBot Device dauernd auf "polling" steht?

Viele Grüße
fhem auf rPi3 mit USB boot und M2, cul866 (hm), homebridge, FlowerSens, Shelly, Harmony, WemosD1, Sonoff/Tasmota, grafana, mqtt/mosquitto

amenomade

Zitat von: gent am 29 Mai 2017, 18:19:34
ist das eigentlich Normal, dass das TelegramBot Device dauernd auf "polling" steht?

Ja, das ist normal.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

Zitat von: gent am 29 Mai 2017, 18:19:34
Hi,

ist das eigentlich Normal, dass das TelegramBot Device dauernd auf "polling" steht?

Viele Grüße

Spielst du täglich grüßt das Murmeltier!? ;)

https://forum.fhem.de/index.php/topic,38328.msg633973.html#msg633973

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)

Tomsc1984

Zitat von: amenomade am 29 Mai 2017, 17:01:13
Mir ist nicht klar, ob die Users Nachrichten senden, oder Fhem abfragen?

Allerdings sollte derjenige Benutzer die Antwort bekommen, der die Anfrage geschickt hat. Wenn defaultPeerCopy gesetzt ist, bekommt der defaultPeer zusätzlich auch eine Kopie.

Der Benutzer bekommt aber keine Antwort.   muss ich evtl. den Befehl anders setzten?  Ich habe "send" genommen.

MadMax-FHEM

Du kannst bei jedem Senden (soweit ich die "send-, message, ... -Befehle" überflogen hab) einen (oder mehrere) Peer mitgeben.
Tust du das nicht, bekommt nur der defaultPeer die Nachricht...

Zitat
message|msg|_msg|send [ @<peer1> ... @<peerN> ] [ (<keyrow1>) ... (<keyrowN>) ] <text>
Sends the given message to the given peer or if peer(s) is ommitted currently defined default peer user. Each peer given needs to be always prefixed with a '@'. Peers can be specified as contact ids, full names (with underscore instead of space), usernames (prefixed with another @) or chat names (also known as groups in telegram groups must be prefixed with #). Multiple peers are to be separated by space

Auslesen kannst du wer die letzte (aktuelle) Nachricht geschickt hast mittels:

ReadingsVal("TeleBot", "msgPeer", "na")
ReadingsVal("TeleBot", "msgPeerId", "na")

(mache ich um zu prüfen, ob die Nachricht überhaupt von einem "bekannten Sender" stammt)

Zitat
msgPeer <text>
The sender name of the last received message (either full name or if not available @username)
msgPeerId <text>
The sender id of the last received message

Nachzulesen hier:

https://fhem.de/commandref.html#TelegramBot

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)

Xguide

Hallo zusammen,

ich habe gestern 50_TelegrammBot aktualisiert und bekomme seit dem folgende Meldungen ins Log:


2017.05.29 16:42:44 1: PERL WARNING: Use of uninitialized value $sepoptions in substitution (s///) at /opt/fhem//FHEM/50_TelegramBot.pm line 1565.


Muss ich irgendetwas an meinen "sends" ändern wenn ich an zwei Teilnehmer schicke? Die Einzelnen scheinen problemlos zu gehen.
Ich nutze ein Leerzeichen als Trenner und nutze die unter Contacts eingetragenen Namen:

  fhem "set telegramBot message \@contact1 \@contact2 Hallo Welt"


Das führt dann wie oben beschrieben zu:


2017.05.30 09:34:33 1: PERL WARNING: Use of uninitialized value $sepoptions in substitution (s///) at /opt/fhem//FHEM/50_TelegramBot.pm line 1565.
2017.05.30 09:34:33 1: stacktrace:
2017.05.30 09:34:33 1:     main::__ANON__                      called by /opt/fhem//FHEM/50_TelegramBot.pm (1565)
2017.05.30 09:34:33 1:     main::TelegramBot_SendIt            called by /opt/fhem//FHEM/50_TelegramBot.pm (553)
2017.05.30 09:34:33 1:     main::TelegramBot_Set               called by fhem.pl (3407)
2017.05.30 09:34:33 1:     main::CallFn                        called by fhem.pl (1728)
2017.05.30 09:34:33 1:     main::DoSet                         called by fhem.pl (1761)
2017.05.30 09:34:33 1:     main::CommandSet                    called by fhem.pl (1157)
2017.05.30 09:34:33 1:     main::AnalyzeCommand                called by fhem.pl (1021)
2017.05.30 09:34:33 1:     main::AnalyzeCommandChain           called by /opt/fhem//FHEM/01_FHEMWEB.pm (2470)
2017.05.30 09:34:33 1:     main::FW_fC                         called by /opt/fhem//FHEM/01_FHEMWEB.pm (901)
2017.05.30 09:34:33 1:     main::FW_answerCall                 called by /opt/fhem//FHEM/01_FHEMWEB.pm (544)
2017.05.30 09:34:34 1:     main::FW_Read                       called by fhem.pl (3412)
2017.05.30 09:34:34 1:     main::CallFn                        called by fhem.pl (686)


Version: 50_TelegramBot.pm         14370 2017-05-25 16:09:28Z viegener

Danke für Eure Hilfe und viele Grüße,

Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

JoWiemann

Hallo,

das ist im Code nicht ganz plausibel:

Übergeben werden die Optionen durch:

  my ( $peers, $msg, $addPar, $isMedia, $replyid, $options, $retryCount) = @args;

dann kommt irgendwann:

    my $sepoptions =~ s/-msgid-//;

was so keinen Sinn ergibt. Eher dann so:

   $options =~ s/-msgid-//;

und weiter mit:

    TelegramBot_SendIt( $hash, $peers, $msg, $addPar, $isMedia, undef, $options );

Grüße Jörg

PS: Habe ich so bei mir geändert und Fehler ist weg. Senden funktioniert.


Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Xguide

Hallo Jörg,

danke für den Ansatz.
Habe es jetzt auch so implementiert und getestet - funktioniert!

Danke und viele Grüße,

Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

viegener

@Xguide, JoWiemann: Sorry ich mache heute noch einen Fix - bitte morgen updaten die Korrektur von oben funktioniert leider nur beim normalen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können