72_FBTAM.pm für den FritzBox-Anrufbeantworter

Begonnen von Prof. Dr. Peter Henning, 06 August 2025, 18:21:05

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

#30
Zitat von: Gonzo am 28 Dezember 2025, 17:46:41MsgrRecList
Das ist ja auch nicht der Telegram-Befehl, sondern die Liste der Empfänger. Und natürlich muss da das Sonderzeichen @ escaped werden

ZitatAnscheinend kommt mein FHEM nicht mit dem direkten set TelegramBot Befehl bei MsgrFun zurecht, sondern benötigt das fhem('set TelegramBot ...') Konstrukt...?
Ah, OK, da habe ich einen Fehler in die Dokumentation eingebaut. Sorry, es muss in der Tat Perl-Code sein, nicht FHEM-Code.

Habe ich im Wiki ebenso wie in der CommandRef gefixt und eingecheckt.

LG

pah

Gonzo

Ok passt, dann hat sich das auch aufgeklärt.


Zitat von: Prof. Dr. Peter Henning am 28 Dezember 2025, 02:40:36Ich muss mal etwas herumprobieren, wie man das verhindern kann - das wird aber eine Weile dauern. Und zwar deshalb, weil bei mir der TelegramBot in einer anderen FHEM-Instanz läuft. Insofern: funktionierende lokale Anwendungen gerne hier posten.

Hierzu folgender Vorschlag als Anregung (meine Perl Kenntnisse sind nur sehr rudimentär, deshalb ist das mit Hilfe von ChatGPT entstanden - sollte das nicht erwünscht sein oder "Blödsinn" sein, dann nehme ich es wieder raus):

Zusammenfassung:
1. FBTAM_downloadMsg bekommt optional einen Callback
2. Callback wird am Ende des Nonblocking-Callbacks aufgerufen
3. FBTAM_sendMsgrMsg und FBTAM_sendEmailMsg verschieben das Senden in diesen Callback

Diff:
FBTAM_downloadMsg – Signatur erweitern
-sub FBTAM_downloadMsg {
-  my ($hash, $dlIndex) = @_;
+sub FBTAM_downloadMsg {
+  my ($hash, $dlIndex, $onComplete) = @_;

Callback am Ende des Nonblocking-Callbacks ausführen
     if( $cmd ){
       $cmd =~ s/INPUT/$target/;
       $cmd =~ s/OUTPUT/$target2/;
       $cmd =~ s/META/$msgmsg/;
       eval($cmd);
       Log 4, "[FBTAM] $name: Message with index $dlIndex converted to $target2";
       readingsSingleUpdate($hash, "msg", "Nachricht mit Index $dlIndex konvertiert nach $target2", 1);
       readingsSingleUpdate($hash,"tam_msgurl",$target2,1);
     }else{
       system('rm '.$target2);
     }
+
+    # ---- Callback: Download + Verarbeitung vollständig abgeschlossen
+    if (defined $onComplete && ref($onComplete) eq 'CODE') {
+      $onComplete->($hash);
+    }
   };

FBTAM_sendMsgrMsg Änderung (FBTAM_sendEmailMsg analog)
-  FBTAM_downloadMsg($hash,$dlIndex);
-  my $target  = ReadingsVal($name,"tam_msgurl","");
-  my $meta = ReadingsVal($name,"tam_msgmsg","");
-  my $cmd;
-  foreach my $rec (@mrl){
-    $cmd = $MsgrFun;
-    $cmd =~ s/REC/$rec/;
-    $cmd =~ s/META/$meta/;
-    $cmd =~ s/FILE/$target/;
-    eval($cmd);
-  }
+  FBTAM_downloadMsg($hash,$dlIndex, sub {
+    my ($hash) = @_;
+    my $target = ReadingsVal($name,"tam_msgurl","");
+    my $meta   = ReadingsVal($name,"tam_msgmsg","");
+    my $cmd;
+    foreach my $rec (@mrl){
+      $cmd = $MsgrFun;
+      $cmd =~ s/REC/$rec/;
+      $cmd =~ s/META/$meta/;
+      $cmd =~ s/FILE/$target/;
+      eval($cmd);
+    }
+  });

Zumindest bei mir werden mit den Änderungen jetzt die "gewünschten" Nachrichten versendet.