msgDialog: Instant Messaging als FHEM Interface

Begonnen von igami, 30 September 2017, 15:09:01

Vorheriges Thema - Nächstes Thema

binford6000

#780
Zitat von: Beta-User am 25 Januar 2023, 11:24:42
Eventuell musst du zwischendurch mal was anderes senden? (Ansonsten müßte die alte message ja noch vorhanden sein?)

Das hab ich bereits probiert. Sende ich zB
msg push hallo
kommt dann ein "SUCCESS". Schicke ich danach %me (Q) dann kommt sofort wieder
Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:


set TelegramBot reset war auch leider nicth von Erfolg gekrönt. Ich poste mal im TelegramBot Thread...

Zitat von: Beta-User am 25 Januar 2023, 11:24:42
Hmm, scheint mir kein originäres Problem von msgDialog zu sein, die Meldung würde ich in TelegramBot verorten (#2325).

Der Post #2325 im Telegram Thread hat aber so gar nichts mit meinem Thema zu tun oder?

EDIT: Beim Aufruf des Dialogs wird das Reading "sentMsgId" nicht geschrieben. Vermutlich ist das der Grund warum die Fehlermeldung auftaucht?

VG Sebastian

Beta-User

Zitat von: binford6000 am 25 Januar 2023, 12:09:01
Der Post #2325 im Telegram Thread hat aber so gar nichts mit meinem Thema zu tun oder?
Nein, gemeint war die Zeilennummer im 50_TelegramBot.pm ;D .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

#782
Zitat von: Beta-User am 25 Januar 2023, 12:14:20
Nein, gemeint war die Zeilennummer im 50_TelegramBot.pm ;D .

Ah OK  ;)

Wenn ich das Inline Keyboard ausschalte funktionieren die Dialoge wieder und sentMsgId wird wieder gesetzt. Also scheint dort was schief zu laufen. Im Prinzip ist es ja nur das Aktivieren/Deaktivieren dieses notifys:
.+:sentMsgId.+ {
  return unless($TYPE eq "TelegramBot");
  my $dev_hash = $defs{$NAME};
  my $sentMsgId = ReadingsVal($NAME,"sentMsgId","");
  my $sentMsgPeerId = ReadingsVal($NAME,"sentMsgPeerId","");
  my $contact = devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*");
  readingsSingleUpdate($dev_hash,"$contact\_sentMsgId",$sentMsgId,1);
}


...und dieses cmdAliases:
set .+ message (.|\n)+ AS {
  my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);
  my $TYPE = InternalVal($NAME, "TYPE", "");
  (my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);
 
  if($TYPE eq "TelegramBot" && $recipient){
    my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");
    my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");

    if($sentMsgId ne ""){
      fhem("set $NAME queryEditInline $sentMsgId $recipient $message");
    }
    else{
      fhem("set $NAME queryInline $recipient $message");
    }
  }
  else{
    fhem("set $EVENT");
  }
}


Beta-User

Hmm, bin grad nicht allzutief in dem Thema drin. Falls da eine Frage versteckt war, ob man was bestimmtes an msgDialog ändern kann: Bitte deutlicher schreiben :) ...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

Ja dann frag ich mal @Alle: Geht bei euch noch das Inline-Keyboard? 

viegener

Zitat von: binford6000 am 25 Januar 2023, 17:02:25
Ja dann frag ich mal @Alle: Geht bei euch noch das Inline-Keyboard?

Ja inline keyboards gehen bei mir noch ohne Probleme.

Da ich msgDialog nicht kenne kann ich wenig dazu sagen, was hier passiert. Auch den Hinweis auf Zeile 2325 im Telegrambot-Modul verstehe ich nicht, hier wird ja nur eine Fehlermeldung vom Telegramserver zurückgegeben.

Ich kannte diese Meldung bisher nicht, aber sie deutet doch recht klar auf das Problem hin: "Es wird wohl eine Message verändert, die von Telegram abgelehnt wird, da sie keine Veränderung darstellt". Zumindest ist das mein Verständnis und so ähnliches liefert auch Google zurück:

https://core.telegram.org/method/messages.editMessage

Also wäre es gut zu wissen/protokollieren, welche Nachrichten versendet wurden. Wenn sich dann rausstellt, dass eine Nachricht mit exakt demselben Inhalt als "edit" versucht wird zu verändern - Erklärung gefunden.
Im Prinzip wäre es dann wohl am besten beim Aufruf zu verhindern, dass eine unveränderte Nachricht per editMsg verändert wird

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

Beta-User

Zitat von: viegener am 25 Januar 2023, 23:43:39
Ja inline keyboards gehen bei mir noch ohne Probleme.
Habe das via Favoriten vorhin auch ausprobiert und hatte auch bei wiederholtem Aufruf des da hinterlegten Menüs keine Probleme.

Zitat
Da ich msgDialog nicht kenne kann ich wenig dazu sagen, was hier passiert. Auch den Hinweis auf Zeile 2325 im Telegrambot-Modul verstehe ich nicht, hier wird ja nur eine Fehlermeldung vom Telegramserver zurückgegeben.
msgDialog verwendet intern den "msg"-Befehl und kann darüber mit ROOMMATES vorstrukturierte Dialoge führen. Anders gesagt: es hat nur lose was mit TelegramBot zu tun, das ist halt vermutlich nur die am häufigsten anzutreffende Gegenstelle... Der Hinweis war nur so gemeint, dass das die Stelle ist, die den Logeintrag erzeugt.

Zitat
Ich kannte diese Meldung bisher nicht, aber sie deutet doch recht klar auf das Problem hin: "Es wird wohl eine Message verändert, die von Telegram abgelehnt wird, da sie keine Veränderung darstellt". Zumindest ist das mein Verständnis und so ähnliches liefert auch Google zurück:

https://core.telegram.org/method/messages.editMessage
Danke für die Fundstelle, so ähnlich hätte ich das auch interpretiert.

Zitat
Also wäre es gut zu wissen/protokollieren, welche Nachrichten versendet wurden. Wenn sich dann rausstellt, dass eine Nachricht mit exakt demselben Inhalt als "edit" versucht wird zu verändern - Erklärung gefunden.
Im Prinzip wäre es dann wohl am besten beim Aufruf zu verhindern, dass eine unveränderte Nachricht per editMsg verändert wird
Das Problem scheint also das queryEditInline im cmdAlias zu sein. An der Stelle müßte man sich merken, wer grade welche Fassung des Inline-Keyboards hat, oder? Und dann ggf. eine andere Funktion aufzurufen, um das Inline-Keyboard anzuzeigen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

ZitatDas Problem scheint also das queryEditInline im cmdAlias zu sein.
Ja genau. Mit queryInline werden die Dialoge ja wenigstens als Text ausgeliefert.

ZitatAn der Stelle müsste man sich merken, wer grade welche Fassung des Inline-Keyboards hat, oder?
Sollte das nicht das notify "sentMsgIdByPeerId.n" erledigen?
.+:sentMsgId.+ {
  return unless($TYPE eq "TelegramBot");
  my $dev_hash = $defs{$NAME};
  my $sentMsgId = ReadingsVal($NAME,"sentMsgId","");
  my $sentMsgPeerId = ReadingsVal($NAME,"sentMsgPeerId","");
  my $contact = devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*");
  readingsSingleUpdate($dev_hash,"$contact\_sentMsgId",$sentMsgId,1);
}

Es sollte die sentMsgId per Peer in <peerId>_<msgId> im TelegramBot speichern.
Macht es bei mir aber nicht. Das Reading bleibt unangetastet obwohl das notify auslöst.
sentMsgId wird nur gesetzt wenn ich normal was sende, nicht aber wenn ein Dialog sendet.

Beta-User

#788
Hmm, die Notation von diesem notify ist aber auch komisch. devspec2array() liefert - Überraschung - ein array zurück; das wird aber in deinem Code gar nicht und im Wiki anders berücksichtigt. Versuch mal das, das sollte sauberer sein:

.+:sentMsgId.+ {
  return if $TYPE ne 'TelegramBot';
  my $sentMsgId = ReadingsVal($NAME,'sentMsgId','');
  my $sentMsgPeerId = ReadingsVal($NAME,'sentMsgPeerId','');
  my $contact = shift devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*") // return;
  readingsSingleUpdate($defs{$NAME},"$contact\_sentMsgId",$sentMsgId,1);
  return;
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

Experimental shift on scalar is now forbidden at (eval 12656) line 5, near ") //"


Computer sagt nein   ::) :o

Beta-User

..dann halt vielleicht so:
my $contact = (devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*"))[0] // return;
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

Danke Beta-User, damit funktioniert es wieder!

Beta-User

Thx, hab's im Wiki auch angepaßt, bitte kurz drüberschauen ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

Leider zu früh gefreut  :-\

Heute erscheint der Fehler erneut:

  • sentMsgId wird nicht gesetzt
  • Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:

Merkwürdig dass das Ändern des notifys kurzzeitig für Abhilfe gesorgt hat...
Habe auch mal versucht den Bot neu zu starten - aber auch ohne Erfolg.

GammaTwin

Zitat von: GammaTwin am 22 Januar 2023, 08:19:38
Grüße,

mir ist etwas unschönes passiert - aber auch interessant :)

Folgendes ist passiert:
- Der Telegram-Bot war in einem Menu, in dem sich Dinge schalten lassen - z.B Licht. Dort sind mehrere Lampen.
- Gleichzeitig war FHEM down
- Ich habe Licht geschalten, erst eins, dann ein weiteres. Passiert ist natürlich nicht. Die zu sendenden Texte standen aber da (logisch)
- Als ich FHEM wieder gestartet habe, wurden die Befehle abgearbeitet - Lichter gehen an :)

Das ist aber unschön. Wenn dies bei der Haustür passiert. Öffnung nach Stunden, vielleicht niemand da  :o

Daher meine Frage: kann ich in FHEM erkennen, wann die Nachricht in Telegram gesendet wurde? Ich habe kein Reading gefunden.

Grüße,

ich wollte nochmal fragen, ob irgendwer eine Idee hat.