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.

Prof. Dr. Peter Henning

Nein, das werde ich so nicht übernehmen.

LG

pah

Shadow3561

#33
Moin,
erst einmal vielen Dank für das Modul. Bei mir funktioniert es leider nicht (mehr).

Ich kann zwar sehen ob neue Nachrichten da sind, aber kann den AB nicht an/aus schalten und der Name vom AB wird auch nicht abgerufen.
Ein "getInfo" bringt folgendes
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:GetInfoResponse xmlns:u="urn:dslforum-org:service:X_AVM-DE_TAM:1">
<NewEnable>1</NewEnable>
<NewName>Anrufbeantworter</NewName>
<NewTAMRunning>1</NewTAMRunning>
<NewStick>2</NewStick>
<NewStatus>32768</NewStatus>
<NewCapacity>0</NewCapacity>
<NewMode>record_message</NewMode>
<NewRingSeconds>30</NewRingSeconds>
<NewPhoneNumbers></NewPhoneNumbers>
</u:GetInfoResponse>
</s:Body>
</s:Envelope>

Anbei ein list
Internals:
   DEF        FritzBox 1
   FBDev      FritzBox
   FUUID      6894c6e6-f33f-d66d-8327-fcfd2c0bb294f886
   FVERSION   72_FBTAM.pm:0.306680/2025-12-28
   INTERVAL   60
   NAME       FB_Anrufbeantworter
   NR         1626
   SID        51a44351e28cce49
   STATE      1
   TAM        1
   TYPE       FBTAM
   USERNAME   Daniel
   eventCount 82
   MessageList:
   READINGS:
     2025-12-29 17:03:57   fritzbox_ip     192.168.1.1
     2025-12-29 17:03:57   msg             Nachrichtenliste unverändert
     2025-12-29 17:03:57   tam_name        ?
     2025-12-29 17:03:57   tam_newMsg      0
     2025-12-29 17:03:57   tam_oldMsg      0
     2025-12-29 17:03:57   tam_state       0
Attributes:
   group      Telefon
   icon       volume-control-phone
   room       Server
   username   Daniel

Mit freundlichen Grüßen

EDIT:
Ich habe den Fehler(oder wie man das auch immer nennen mag) gefunden.
In der Fritz!Box ist nur 1 AB definiert. Dieser wird im Modul 72_FRITZBOX als tam0 angezeigt.
Ändere ich in dem FBTAM Modul in Zeile 85 den Teil in   return "[FBTAM] TAM number must be 1-4" unless $tamNr =~ /^[0-4]$/;
dann klappt alles. Name wird angezeigt und ich kann den AB an/aus schalten.

Prof. Dr. Peter Henning

Zitat von: Shadow3561 am 29 Dezember 2025, 17:06:31nicht (mehr).
Erstaunlich, und nicht ganz nachvollziehbar.

Die FritzBox kennt bis zu 4 AB. Diese werden in der FB-Oberfläche als 1-4 bezeichnet (tamNr) , intern aber als tam0 - tam3 (tamIndex). An diese Konvention hält sich auch das Modul, und daran habe ich nichts geändert. Siehe jeweils den Kommentar
#-- careful, tamIndex=tamNr-1Ich muss mir das morgen mal ansehen, vielleicht habe ich beim letzten Update irgendwo einen Fehler eingebaut.

LG

pah

PSI69

Moin zusammen,
ich habe mir das Modul inzwischen auch konfiguriert.
Internals:
   DEF        FritzBox 1
   FBDev      FritzBox
   FUUID      693fec8f-f33f-d09e-4adc-7e03dcb4a9e4ba03
   INTERVAL   60
   NAME       FritzBoxTAM
   NR         684
   SID        40bacfc397c6c89a
   STATE      Initialized
   TAM        1
   TYPE       FBTAM
   USERNAME   FHEM
   eventCount 418
   MessageList:
     Message:
       HASH(0x5555c0b98f68)
       HASH(0x5555c0fb07e0)
   READINGS:
     2025-12-30 07:00:49   fritzbox_ip     192.168.178.1
     2025-12-30 07:00:50   msg             Nachrichtenliste erfolgreich geladen
     2025-12-29 14:50:48   tam_msgmsg      Nachricht 0 von xxxx, xxxx am 07.09.24 um 09:34
     2025-12-30 07:00:49   tam_name        SPAM
     2025-12-30 07:00:49   tam_newMsg      0
     2025-12-30 07:00:49   tam_oldMsg      0
     2025-12-15 14:04:19   tam_recipients  \@xxxxxxxxx
     2025-12-30 07:00:49   tam_state       on
Attributes:
   MsgrFun    set TeleBot sendMedia REC FILE
   MsgrRecList \@xxxxxxxxx
   MsgrType   Telegram
   Wav2MP3Fun system('ffmpeg -loglevel error -y -i INPUT -metadata title=\"META\" OUTPUT')
   alias      FritzBox Anrufbeantworter Monitor
   room       Infrastruktur->Telefonie,Keller->Hausanschlussraum
   targetdir  /opt/fhem/cache/TAM
   username   FHEM
   verbose    5

Unter 'tam_name' wird bei mir der Name vom 'SPAM' AB angezeigt. Das ist der zweite konfigurierte an der Fritzbox. Die Nachrichten werden korrekt vom ersten AB angezeigt. ... das ist also nur Kosmetik.

Allerdings klappen 'downloadMsg 0' ...
2025.12.30 07:11:11 1: [FBTAM] FritzBoxTAM: Download failed for index 0 - no data received

... und Versenden mit 'sendMessengerMsg 0' nicht.
2025.12.30 07:11:48 1: PERL WARNING: Backslash found where operator expected at (eval 48910) line 1, near "sendMedia \"
2025.12.30 07:11:48 1: PERL WARNING: (Do you need to predeclare sendMedia?)
2025.12.30 07:11:49 1: [FBTAM] FritzBoxTAM: Download failed for index 0 - no data received

'tam_oldMsg' hat mit '0' allerdings auch nicht den korrekten Wert vom ersten AB, sondern den vom SPAM AB - der macht nur eine Ansage und legt auf. Ist das die Ursache vom download Fehler?

Der Aufruf von deleteMsg klappt.

Gruß Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

Prof. Dr. Peter Henning

#36
So, da hatte sich tatsächlich ein Fehler eingeschlichen - sorry dafür.
Ich habe den Fehler gefixt und das Modul eingecheckt, außerdem das Wiki sauber nachgezogen.
Bei mir funktioniert das alles ganz wunderbar, wer nicht das nächste Update abwarten möchte, kann sich das aus dem Repository holen.

Es gibt jetzt nur noch ein Problem: Das derzeit aktuelle FritzBox-Modul löscht offenbar von Zeit zu Zeit die Readings tam0(...) etc. komplett. In diesem Fall wird derzeit die Kopfzeile der Nachrichtenliste mit dem Namen "?" für den AB, sowie fehlenden Nachrichtenzahlen angezeigt. Offenbar gibt es hier einen Fehler im FRITZBOX-Modul. Wird an anderer Stelle diskutiert.

LG und Guten Rutsch

pah