Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

Dia81

Zitat von: andies am 23 April 2019, 09:29:57
Ich wusste gar nicht, dass man da auch nette Icons senden kann. Gibst du die einfach ein? Codiert? Wo kann man da was nachlesen?


Gesendet von iPad mit Tapatalk Pro
In der Wiki zu Telegram ist betreffend Emoji ein link. Auf der Seite nur copy und paste in Code .

viegener

#2086
Zitat von: Dia81 am 22 April 2019, 22:21:03
So kam heute zum testen. Leider funktioniert dies nicht :(

Habe besipeilweise folgenden Code nach deinem Rat geändert:

define teleBot11 notify teleBot:queryData:.Ⓜ set teleBot queryAnswer [teleBot:queryID] (✔|🏡|🛫|❌) (Ⓜ⚠|Ⓜ☀) (🔝) Ⓜ <b>Modus </b>;; set teleBot queryAnswer [teleBot:queryID] Ⓜ <b>{(ReadingsVal("Automatikmodus","state",0))}</b> ⚠ <b>{(ReadingsVal("Ueberwachungsmodus","state",0))}</b> ☀ <b>{(ReadingsVal("Beschattung","state",0))}</b>

Wenn ich jetzt auf Ⓜ drücke erscheint das untermenü nicht im Chatverlauf sondern taucht nur kurz am oberen Rand auf.
Das aber immerhin nur einmal... :)

Siehe Foto...

Andere Ideen? Muss dorch irgendwie ansteuerbar sein. Warum auch immer diese "mehrfach"-Meldungen aufeinmal auftauchen :((


Vielleicht habe ich das nicht gut genug erklärt. Auf den Tastendruck muss zwingend ein queryAnswer erfolgen (dies ist aber kein normaler Messagesend, sondern nur eine Bestätigung, dass die Anfrage eingegangen ist). Also den queryAnswer zusätzlich und nicht mehrfach. Danach kann es weitergehen entweder mit neuem queryInline oder queryEditInline

Und nochmal die Mehrfachmeldungen hängen genau mit dem Punkt zusammen, dass Du die Bestätigung (also queryAnswer) nicht versendest, denn diese ist zwingend erforderlich und war so im Bot-API auch dokumentiert. Vermutlich hat Telegram eine Änderung gemacht, dass die Meldungen wiederholt werden, bis die Bestätigung kommt.

Es gibt aber auch noch das Attribut queryAnswerText , damit kannst Du die Antowrt auch automatisch generieren lassen.




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

Dia81

Zitat von: viegener am 23 April 2019, 16:08:24

Vielleicht habe ich das nicht gut genug erklärt. Auf den Tastendruck muss zwingend ein queryAnswer erfolgen (dies ist aber kein normaler Messagesend, sondern nur eine Bestätigung, dass die Anfrage eingegangen ist). Also den queryAnswer zusätzlich und nicht mehrfach. Danach kann es weitergehen entweder mit neuem queryInline oder queryEditInline

Und nochmal die Mehrfachmeldungen hängen genau mit dem Punkt zusammen, dass Du die Bestätigung (also queryAnswer) nicht versendest, denn diese ist zwingend erforderlich und war so im Bot-API auch dokumentiert. Vermutlich hat Telegram eine Änderung gemacht, dass die Meldungen wiederholt werden, bis die Bestätigung kommt.

Es gibt aber auch noch das Attribut queryAnswerText , damit kannst Du die Antowrt auch automatisch generieren lassen.
Vielen Dank aber ganz ehrlich ich kapier es nicht. Hast du Evtl ein Beispiel?

viegener

Zitat von: Dia81 am 23 April 2019, 16:37:44
Vielen Dank aber ganz ehrlich ich kapier es nicht. Hast du Evtl ein Beispiel?

Ist eigentlich ganz einfach, Du hattest mal folgenden Code gepostet:

define teleBot110 notify teleBot:queryData:.BrunnenH set Fritz_Steckdose_Aussen toggle;;set teleBot send @[teleBot:queryPeer] ...;;sleep 10;; set teleBot send @[teleBot:queryPeer] Brunnen jetzt <b>{(ReadingsVal ("Fritz_Steckdose_Aussen","state",0))}</b>

Daraus mach doch erstmal (ohne das jetzt ausprobiert zu haben)

define teleBot110 notify teleBot:queryData:.BrunnenH set teleBot queryAnswer [teleBot:queryID] ;; set Fritz_Steckdose_Aussen toggle;;set teleBot send @[teleBot:queryPeer] ...;;sleep 10;; set teleBot send @[teleBot:queryPeer] Brunnen jetzt <b>{(ReadingsVal ("Fritz_Steckdose_Aussen","state",0))}</b>

Also nur den queryAnswer-Befehl hinzufügen.

Wenn Du dann das vorherige Menu in einem zweiten Schritt verändern willst, dann ist es etwas komplizierter. Aber vielleicht erstmal das testen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Dia81

Zitat von: viegener am 23 April 2019, 16:46:21
Ist eigentlich ganz einfach, Du hattest mal folgenden Code gepostet:

define teleBot110 notify teleBot:queryData:.BrunnenH set Fritz_Steckdose_Aussen toggle;;set teleBot send @[teleBot:queryPeer] ...;;sleep 10;; set teleBot send @[teleBot:queryPeer] Brunnen jetzt <b>{(ReadingsVal ("Fritz_Steckdose_Aussen","state",0))}</b>

Daraus mach doch erstmal (ohne das jetzt ausprobiert zu haben)

define teleBot110 notify teleBot:queryData:.BrunnenH set teleBot queryAnswer [teleBot:queryID] ;; set Fritz_Steckdose_Aussen toggle;;set teleBot send @[teleBot:queryPeer] ...;;sleep 10;; set teleBot send @[teleBot:queryPeer] Brunnen jetzt <b>{(ReadingsVal ("Fritz_Steckdose_Aussen","state",0))}</b>

Also nur den queryAnswer-Befehl hinzufügen.

Wenn Du dann das vorherige Menu in einem zweiten Schritt verändern willst, dann ist es etwas komplizierter. Aber vielleicht erstmal das testen.

geändert und funktioniert :) kommt nur einmal und wie von vorher gewohnt! soweit so gut, jetzt frag ich mich wie das beim Menü > Untermenü funktionieren soll ?

[edit]

habe jetzt ÜBERALL "set teleBot queryAnswer [teleBot:queryID]" vorgesetzt, auch vor die Untermenüs die dann mit "inline" folgen. SCheint nach den ersten Versuchen zu funktionieren.. in aller Vorsicht..

andies

Zitat von: Dia81 am 23 April 2019, 13:42:20
In der Wiki zu Telegram ist betreffend Emoji ein link. Auf der Seite nur copy und paste in Code .
Danke, gefunden. Das ist wirklich einfach. Für diejenigen, die wissen wollen, wie man die inline-keyboards erzeugt, hier noch ein Link. Vielleicht schaffe ich das, dies ins Wiki einzutragen
https://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

pula

Hi,

ich setze den Telegram-Bot schon seit Jahren ein - funktioniert super, vielen Dank!
Jetzt hab ich allerdings ein Problemchen:
Ich lasse mir auf Anfrage die aktuellen Spritpreise "meiner" Tankstellen zukommen und zwar in dem Format Preis - Name der Tanke - Datum der letzten Aktualisierung.
Den String dazu bastle ich in der myUtils zusammen und lasse ihn auch loggen.
Ich hab zur besseren Lesbarkeit die Namen der Tankstellen mit Leerzeichen (oder testweise auch mit Underscores) rechts gepadded.
Im Log schaut das wunderbar aus, aber Telegram schneidet sowohl die Leerzeichen als auch die Underscores (hier ist es ein wenig besser) heraus. Ich hab schon versucht, den String vor dem Senden mit iso-8859-1 zu encoden, das hat leider auch nicht geholfen.
Weiss jemand, wie man Telegram abgewöhnen kann, Leerzeichen auszublenden? Ich hoffe, die Frage wurde nicht schon gestellt...

Cheers,
Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

amenomade

Kann man deinen Sendbefhel bzw. die myUtils Routine bitte sehen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

pula

Klar, gerne.
Ist nicht besonders schön (man könnte da sicher einiges eleganter lösen) - funktioniert aber soweit - bis auf das mit dem bündigen ausgeben...

my $devspec = "dSpritpreis_.*";
my @spritlist = devspec2array($devspec);
my %tankstellen;
foreach (@spritlist) {
my $preis=ReadingsVal($_, "state", "0");
my $lastupdate = ReadingsTimestamp($_, "state", "0");
my $tankstelle = substr $_, 12;
$lastupdate = substr $lastupdate, 0, 16;
my $month = substr $lastupdate, 5,2;
my $day = substr $lastupdate, 8,2;
my $time = substr $lastupdate, 11, 5;
$lastupdate = $day . "." . $month . " " . $time;
$tankstellen{$tankstelle}{"preis"} = $preis;
$tankstellen{$tankstelle}{"update"} = $lastupdate;
}
$status = "";
foreach my $key (    #
sort { $tankstellen{$a}->{"preis"} cmp $tankstellen{$b}->{"preis"} }    #
keys %tankstellen
)
{
my $value = $tankstellen{$key};
while (length($key)<14) { $key = $key . " "; };
$status .= $value->{"preis"} . " " . $key . " (" . $value->{"update"} . ")\n";
}
Log 1, "sprit: $status";
$status = encode("iso-8859-1", $status);
fhem "set telegram message \@" . $sender . " " . $status;
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

viegener

Zitat von: pula am 02 Mai 2019, 00:36:54
Hi,

ich setze den Telegram-Bot schon seit Jahren ein - funktioniert super, vielen Dank!
Jetzt hab ich allerdings ein Problemchen:
Ich lasse mir auf Anfrage die aktuellen Spritpreise "meiner" Tankstellen zukommen und zwar in dem Format Preis - Name der Tanke - Datum der letzten Aktualisierung.
Den String dazu bastle ich in der myUtils zusammen und lasse ihn auch loggen.
Ich hab zur besseren Lesbarkeit die Namen der Tankstellen mit Leerzeichen (oder testweise auch mit Underscores) rechts gepadded.
Im Log schaut das wunderbar aus, aber Telegram schneidet sowohl die Leerzeichen als auch die Underscores (hier ist es ein wenig besser) heraus. Ich hab schon versucht, den String vor dem Senden mit iso-8859-1 zu encoden, das hat leider auch nicht geholfen.
Weiss jemand, wie man Telegram abgewöhnen kann, Leerzeichen auszublenden? Ich hoffe, die Frage wurde nicht schon gestellt...

Cheers,
Pula

In diesem Fall ist Telegram sogar ziemlich unschuldig, denn das Problem liegt eher darin, dass in FHEm die parameter zu einem set-Befehl bekommen an einem Leerzeichen (oder mehreren) aufgetrennt werden. Danach setze ich die Teile wieder mit nur einem Leerzeichen zusammen, da die Information über die Trennzeichen nicht mehr vorhanden ist. Das ist auch nicht so einfach umzustellen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

pula

Zitat von: viegener am 02 Mai 2019, 21:14:31
In diesem Fall ist Telegram sogar ziemlich unschuldig, denn das Problem liegt eher darin, dass in FHEm die parameter zu einem set-Befehl bekommen an einem Leerzeichen (oder mehreren) aufgetrennt werden. Danach setze ich die Teile wieder mit nur einem Leerzeichen zusammen, da die Information über die Trennzeichen nicht mehr vorhanden ist. Das ist auch nicht so einfach umzustellen.

Hmm... verstehe. Aber auch, als ich die Leerzeichen durch underscores ersetzt habe (weil ich genau so etwas vermutet hatte), hats nicht ganz gepasst. Wäre es eine Möglichkeit, die Leerzeichen zu escapen?
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

viegener

Zitat von: pula am 02 Mai 2019, 21:21:07
Hmm... verstehe. Aber auch, als ich die Leerzeichen durch underscores ersetzt habe (weil ich genau so etwas vermutet hatte), hats nicht ganz gepasst. Wäre es eine Möglichkeit, die Leerzeichen zu escapen?

Ich habe mal in github eine Testversion eingechecked, bei der man statt Leerzeichen auch \s verwenden kann. Das kannst Du ausprobieren.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

pula

Danke sehr. Tut jetzt grundsätzlich.
Leider benutzt telegram keinen fixed font - daher schauts immer noch bescheiden aus.
Aber wenn mans aus telegram in einen editor mit fixed font kopiert, passt es.
Weisst Du zufällig, ob Telegram auch Tab zur Formatierung unterstützt? Das wäre evtl noch eine Möglichkeit?!
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

viegener

Zitat von: pula am 02 Mai 2019, 22:23:34
Weisst Du zufällig, ob Telegram auch Tab zur Formatierung unterstützt? Das wäre evtl noch eine Möglichkeit?!

Ich habe zumindest eine Untertsützung für \t eingebaut, aber inzwischen scheint daraus ein einzelnes Leerzeichen bei Telegram zu werden. Ich meine mich zu erinnern, dass \x09 (tabulator ascii zeichen) früher funktioniert hat, jetzt konnte ich das aber nicht mehr erreichen. Hast Du mal mit den verschiedenen Formen von parseModeSend ausprobiert? Es gibt ja auch eine minimale HTML-unterstützung.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

@pula: Die Syntax für markdown und HTML sind übrigens hier erklärt:
https://core.telegram.org/bots/api#formatting-options und die Verwendung im Modul ist in der Commandref erklärt
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können