FHEM Forum

FHEM - Hardware => FRITZ!Box => Thema gestartet von: Prof. Dr. Peter Henning am 06 August 2025, 18:21:05

Titel: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 06 August 2025, 18:21:05
Wie angekündigt, hier die erste Version des Moduls 72_FBTAM.pm.

Installation ganz einfach
define <name> FBTAM <Devicename der Fritzbox> <Nummer des Anrufbeantworters 1..4>

Zeigt eine Liste der Anrufe, mit Buttons zum Löschen (funktioniert gut) und zum Download (funktioniert gut, Zielverzeichnis /opt/fhem/www/audio sollte existieren) und zum Versenden (funktioniert noch nicht)

Zur Funktion ist es nötig, mit "set ... username" und "set ... password" einen FritzBox-Account anzugeben.

LG

pah

ToDo-Liste
1. Versand per Mail und per Messenger, mindestens via Telegram, implementieren
2. Buttons konfigurierbar machen (Mail-Adresse bzw. Messenger)
3. Möglichkeit, das Modul unabhängig von einem FritzBox-Device zu machen. In dem Fall ist statt des Device-Namen die IP-Adresse anzugeben, und "set ... on/off"-Befehle die irgendwie remote wirken
4. Zielverzeichnis konfigurierbar machen


Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 06 August 2025, 19:23:21
Zitat von: Prof. Dr. Peter Henning am 06 August 2025, 18:21:05ToDo-Liste
und "set ... on/off"-Befehle die irgendwie remote wirken

Hallo,

on/off kannst Dir im FB Modul ansehen :
set <name> tam <number> <on|off>
Schaltet den Anrufbeantworter (Nummer 1, 2 ...) an oder aus. Der Anrufbeantworter muss zuvor auf der FRITZ!BOX eingerichtet werden.

Grüße Jörg

PS: Ich schaue morgen mal, wie man auch TAM Remote einrichten kann.
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 06 August 2025, 19:32:31
Zitat von: JoWiemann am 06 August 2025, 19:23:21on/off kannst Dir im FB Modul ansehen :
set <name> tam <number> <on|off>
Schaltet den Anrufbeantworter (Nummer 1, 2 ...) an oder aus. Der Anrufbeantworter muss zuvor auf der FRITZ!BOX eingerichtet werden.

Ist doch längst drin. Für mich ist es auch einfach, das an/ausschalten zu organisieren, wenn das FritzBox-Device auf einer anderen FHEM-Installation x.x.x.90 läuft, ich setze einfach
Zitatfhem90Cmd('set ... on/off')}
ab. Es gibt aber soap-calls für das an/ausschalten - die kann man auch ohne Fritzbox-Device absetzen.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 06 August 2025, 19:48:43
Hallo,

am Ende sind das im FB Modul auch alles nur SOAP Calls. War also nur als Umsetzungs-Idee gemeint.

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 07 August 2025, 05:54:59
Man könnte FBTAM natürlich auch so aufziehen wie 72_FBCALLMONITOR und 72_FBCALLLIST. Das erschien mir aber zuviel Aufwand, dafür hätte ich gar keine Zeit.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 10 August 2025, 18:06:19
So, hier die nächste Version. Das kommt jetzt mit einer JavaScript-Datei, die in /opt/fhem/www/pgm2 gespeichert werden sollte. Löschen, Versand per Messenger (z.B. Telegram) und Download funktionieren gut, Download jetzt natürlich non-blocking.

Da ich die Fritzbox nicht dazu bewegen konnte, einen CORS-Header zu produzieren, läuft der Download immer auf den FHEM-Server. Von dort aus kann man ihn natürlich holen - so etwa macht das bei mir ein DOIF, da mein Telegram-Bot auf einer anderen Maschine läuft.

Der Versand per Email ist derzeit noch funktionslos, da suche ich noch nach einem guten Trick.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 19 August 2025, 17:28:37
So, wir werden besser. Anbei die neueste Version.

Ich habe festgestellt, dass die gelieferten WAV-Dateien einfahc zu groß sind, um sie per Mail oder Messenger zu versenden.

Das Modul hat jetzt noch ein Attribut Wav2MP3Fun bekommen, mit dem ich nach dem Download eine Umwandlung in MP3 bewerkstelligen kann. Bei mir hat das den Wert
Zitatattr FritzBoxTAM Wav2MP3Fun system('ffmpeg -i INPUT OUTPUT')

Nötig ist natürlich eine abgespeckte Version des ffmpeg-Paketes, das automatisch diese Konversion macht. Dazu gibt es hier eine Anleitung: https://wiki.fhem.de/wiki/Minimales_ffmpeg

Ach ja, die Einbindung als Telegram-Keyboard funktioniert auch prima. So sieht das bei mir aus: Erst eine Übersicht der Nachrichten, wenn ich eine davon anklicke, die Auswahl "Abhören" oder "Löschen" (und natürlich wieder aufwärts im Menü). Und wenn ich "Abhören" anklicke, kommt sie als MP3 geflogen.

Ja, ich muss das alles noch sauber dokumentieren...

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 25 August 2025, 03:15:56
Es gibt eine Wiki-Seite zu diesem Modul: https://wiki.fhem.de/wiki/Modul_FBTAM

Das Modul ist in die FHEM-Distribution eingecheckt.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 10 September 2025, 15:24:58
Hallo pah,

ich hatte nicht mehr präsent, dass die FritzBox ja selber die auf dem AB hinterlasse Nachricht per E-Mail versenden kann. Ich hatte das mal ein gestellt aber lange keine AB Nachricht mehr gehabt. Gestern habe ich dann mal wieder eine E-Mail meiner FB mit angehängtem Audiofile bekommen.

Was ist dann Deine Idee hinter dem Versand per E-Mail? Per Messenger ist für mich nachvollziehbar.

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 10 September 2025, 15:57:47
Hallo pah,

komme erst jetzt dazu mich mit Deinem Modul zu beschäftigen. Im define können die TAM 1..4 ausgewählt werden. Die FB kennt allerdings die TAM 0..9.
Result of query = 'tam:settings/TAM/list(Name,Display,Active,NumNewMessages,NumOldMessages)'
----------------------------------------------------------------------
$VAR1 = {
          'sid' => '9e530fcf43407b17',
          'data' => {},
          'result' => [
                        {
                          'NumNewMessages' => '0',
                          'NumOldMessages' => '0',
                          '_node' => 'TAM0',
                          'Name' => 'AB Wohnbereich',
                          'Active' => '1',
                          'Display' => '1'
                        },
                        {
                          'Display' => '1',
                          'Active' => '1',
                          'Name' => "AB Unerw\x{c3}\x{bc}nscht",
                          '_node' => 'TAM1',
                          'NumNewMessages' => '0',
                          'NumOldMessages' => '0'
                        },
                        {
                          'NumNewMessages' => '0',
                          'NumOldMessages' => '0',
                          '_node' => 'TAM2',
                          'Active' => '0',
                          'Name' => '',
                          'Display' => '0'
                        },
                        {
                          'Display' => '0',
                          'Active' => '0',
                          'Name' => '',
                          '_node' => 'TAM3',
                          'NumOldMessages' => '0',
                          'NumNewMessages' => '0'
                        },
                        {
                          'Display' => '0',
                          'Active' => '0',
                          'Name' => '',
                          '_node' => 'TAM4',
                          'NumOldMessages' => '0',
                          'NumNewMessages' => '0'
                        },
                        {
                          'Display' => '0',
                          'Name' => 'AB Wohnbereich',
                          'Active' => '0',
                          '_node' => 'TAM5',
                          'NumOldMessages' => '0',
                          'NumNewMessages' => '0'
                        },
                        {
                          'NumOldMessages' => '0',
                          'NumNewMessages' => '0',
                          '_node' => 'TAM6',
                          'Name' => "AB Unerw\x{c3}\x{bc}nscht",
                          'Active' => '0',
                          'Display' => '0'
                        },
                        {
                          'Name' => '',
                          'Active' => '0',
                          'Display' => '0',
                          'NumNewMessages' => '0',
                          'NumOldMessages' => '0',
                          '_node' => 'TAM7'
                        },
                        {
                          'NumOldMessages' => '0',
                          'NumNewMessages' => '0',
                          '_node' => 'TAM8',
                          'Active' => '0',
                          'Name' => '',
                          'Display' => '0'
                        },
                        {
                          'Display' => '0',
                          'Active' => '0',
                          'Name' => '',
                          '_node' => 'TAM9',
                          'NumOldMessages' => '0',
                          'NumNewMessages' => '0'
                        }
                      ],
          'sidNew' => 0
        };

Im Modul 72_FRITZBOX.pm habe ich die Nummerierung von 1..10 auf 0..9 angepasst.

Welcher TAM wird bei einem define .... 1 dann von Dir referenziert?

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 10 September 2025, 17:40:41
Ich fang mal hinten an:
- Die Nummerierung der AB in der Oberfläche der FB beginnt bei 1, die Indexzählung bei 0. Die "AB-Nummer" 1 ist also tam_0. Das können wir gerne beliebig anpassen.

- Ich dachte, es seien nur 4 ABs. Kein Problem, das auf 0..9 auszuweiten

- Versand per Mail direkt aus der FB geht immer nur an eine Adresse, und es werden WAV-Dateien versendet. Sind also gigantisch groß. Darum werden die bei mir nach dem Download in ein MP3 umgewandelt und dann versendet.

- Die FB prüft ja nicht, von wem die Nachrichten sind, bevor sie diese versendet. Mit diesem Modul hier kann ich einfach auswählen, welche ich sofort lösche und welche ich mir zusenden lasse. Das war mein Primärziel, weil bei mir auch die Haustür an den AB gekoppelt ist.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 10 September 2025, 18:55:11
Hallo pah,

vielen Dank für die Rückmeldung. Macht Sinn.

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Hardy62 am 04 Dezember 2025, 22:20:33
Zitat von: Prof. Dr. Peter Henning am 06 August 2025, 18:21:05Wie angekündigt, hier die erste Version des Moduls 72_FBTAM.pm.

Installation ganz einfach
define <name> FBTAM <Devicename der Fritzbox> <Nummer des Anrufbeantworters 1..4>

Zeigt eine Liste der Anrufe, mit Buttons zum Löschen (funktioniert gut) und zum Download (funktioniert gut, Zielverzeichnis /opt/fhem/www/audio sollte existieren) und zum Versenden (funktioniert noch nicht)

Zur Funktion ist es nötig, mit "set ... username" und "set ... password" einen FritzBox-Account anzugeben.

LG

pah

ToDo-Liste
1. Versand per Mail und per Messenger, mindestens via Telegram, implementieren
2. Buttons konfigurierbar machen (Mail-Adresse bzw. Messenger)
3. Möglichkeit, das Modul unabhängig von einem FritzBox-Device zu machen. In dem Fall ist statt des Device-Namen die IP-Adresse anzugeben, und "set ... on/off"-Befehle die irgendwie remote wirken
4. Zielverzeichnis konfigurierbar machen



Zitat von: Prof. Dr. Peter Henning am 10 August 2025, 18:06:19So, hier die nächste Version. Das kommt jetzt mit einer JavaScript-Datei, die in /opt/fhem/www/pgm2 gespeichert werden sollte. Löschen, Versand per Messenger (z.B. Telegram) und Download funktionieren gut, Download jetzt natürlich non-blocking.

Da ich die Fritzbox nicht dazu bewegen konnte, einen CORS-Header zu produzieren, läuft der Download immer auf den FHEM-Server. Von dort aus kann man ihn natürlich holen - so etwa macht das bei mir ein DOIF, da mein Telegram-Bot auf einer anderen Maschine läuft.

Der Versand per Email ist derzeit noch funktionslos, da suche ich noch nach einem guten Trick.

LG

pah

Hallo guten Abend, wo könnte ich mir bitte die Datei fbtam.js herunterladen?
Viele Grüße Hardy
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Hardy62 am 04 Dezember 2025, 22:33:40
Hallo guten Abend,
bekomme beim Versuch eines Downloads einer AB-Aufzeichnung diese Fehlermeldung:

  fhem?room=FritzBox line 291:
Uncaught ReferenceError: callTAMAction is not defined
Vermutl. fehlt mir noch die Datei fbtam.js. Wo könnte ich mir diese downloaden?
Viele Grüße Hardy
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gisbert am 05 Dezember 2025, 10:12:58
Zitat von: Hardy62 am 04 Dezember 2025, 22:33:40Vermutl. fehlt mir noch die Datei fbtam.js. Wo könnte ich mir diese downloaden?
Viele Grüße Hardy

Das frage ich mich gerade auch. Sie liegt jedenfalls nicht im Verzeichnis https://svn.fhem.de/fhem/trunk/fhem/www/pgm2/ (https://svn.fhem.de/fhem/trunk/fhem/www/pgm2/).
Weder im Wiki noch in der commandref habe ich einen Hinweis zum Download gefunden.

Viele Grüße Gisbert
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 05 Dezember 2025, 11:06:34
Hallo,

im Source wird sie jedenfalls unter: /fhem/pgm2/fbtam.js versucht zu laden.

Da hat pah noch etwas zu tun.

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 06 Dezember 2025, 08:02:14
Hmmm, ich dachte eigentlich, sie sei eingecheckt...
Keine Ahnung, warum das nicht passiert ist.

Muss ich im Laufe des Tages nachholen, hier ist sie separat.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Hardy62 am 06 Dezember 2025, 10:18:00
Dankeschön! :)
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gisbert am 06 Dezember 2025, 10:24:18
Hallo pah,

mit der Datei fbtam.js funktioniert dein Modul - vielen Dank.

Ich hätte allerdings eine Bitte. Der Platz auf Handys ist zu klein für eine optisch ansprechende Darstellung - es finden Umbrüche innerhalb von Worten statt anstelle einer Darstellung innerhalb der gleichen Zeile, z.B. bei Index oder der geschwärzten Telefonnummer (s. angehängtes Bild). Ich fände es schöner, wenn die Umbrüche nicht stattfinden, dafür aber wie bei ReadingsGroups die Darstellung rechts fortgesetzt wird. Dafür muss man dann freilich den Bildschirm scrollen.

Viele Grüße Gisbert
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 06 Dezember 2025, 12:20:55
So, fehlende fbtam.js ist im Repository.

@Gisbert: Einfach die CSS-Datei anpassen, das muss nicht in den Code.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: TomLee am 06 Dezember 2025, 12:27:37
Hilft doch aber nix, wenn der Pfad im Modul weiterhin nicht korrekt angegeben ist...
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 06 Dezember 2025, 12:34:48
Ah, ok. Jetzt sehe ich den Fehler. Behebe ich nachher.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 06 Dezember 2025, 12:54:31
Zitat von: Prof. Dr. Peter Henning am 06 Dezember 2025, 12:34:48Ah, ok. Jetzt sehe ich den Fehler. Behebe ich nachher.

Hallo pah,

könntest Du dabei auch den verbose Level für den Log Eintrag ,,leere Nachrichtenliste" von 2 auf 3 anheben. Danke Dir.

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Hardy62 am 06 Dezember 2025, 13:31:22
Hallo pah,
damit komme ich jetzt schon ein wenig weiter - Vielen Dank !
Im Moment scheitere ich allerdings noch an der "Wav2MP3Fun" ...
Die müsste ich doch bestimmt in meine "99_myUtils.pm" einreihen - oder ?
Wo könnte ich bitte diese hernehmen?
VlG Hardy

Oh sorry für die blöde Frage!
ich hab die Zeile abgeändert aus dem Wiki: (dann funktioniert's)

vorher:
attr FritzBoxTAM Wav2MP3Fun system('ffmpeg -loglevel error -y -i INPUT -metadata title=\"META\" OUTPUT')

nachher:
attr FritzBoxTAM Wav2MP3Fun system ("ffmpeg -loglevel error -y -i INPUT -metadata title=\"META\" OUTPUT")

Fingerzeig:  statt einfachem Hochkomma ==> doppeltes Hochkomma !
                   


Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 06 Dezember 2025, 15:13:03
@Hardy62: Nicht doch. Bei mir hat das Attribut Wav2MP3Fun den Wert
system('ffmpeg -y -i INPUT -metadata title=\"METADATA\" OUTPUT')Funktioniert problemlos, natürlich muss ffmpeg installiert sein.

Zitat von: JoWiemann am 06 Dezember 2025, 12:54:31könntest Du dabei auch den verbose Level für den Log Eintrag ,,leere Nachrichtenliste" von 2 auf 3 anheben. Danke Dir.
Hmm. Im ganzen Modul gibt es kein "Log 2", und in Zeile 571 habe ich
Log 4, "[FBTAM] $name: empty message list";Was genau meinst Du?

LG

pah

Edir: Ich checke das jetzt mit der Fehlerkorrektur für den Pfad ein - das mit dem Log ist noch nicht geklärt
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Hardy62 am 06 Dezember 2025, 15:20:41
Hallo pah,

bei mir hat nicht funktioniert:       system(' .... ') 
bei mir war die Lösung:               system(" .... ")
ffmpeg ist bei mir installiert und hat auch von der cmd-line funktioniert.

Das neue Modul gefällt mir sehr gut und ich hab' auch ...irgendwie drauf gewartet und heute zum Nikolaus ... ging es in Erfüllung!
Herzlichen Dank dafür!!
VlG Hardy
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: JoWiemann am 09 Dezember 2025, 12:28:11
Hallo pah,

den Log-Eintrag finde ich auch nicht mehr. War wohl in einer der ersten Versionen. Sorry für den Aufwand.

Grüße Jörg
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gonzo am 26 Dezember 2025, 23:44:01
Danke, so ein Modul habe ich schon lange gesucht!

Das Holen der Nachrichten funktioniert auch, allerdings habe ich Schwierigkeiten mit dem Versand über Telegram.
1. benötige ich auch wie Hardy62 doppelte Hochkomma beim ffmpeg Befehl. Dann funktioniert es aber zuverlässig.
2. Das senden über sendMessengerMsg oder per Button an der jeweiligen Nachricht schlägt fehl:
2025.12.26 16:47:46 1: PERL WARNING: Backslash found where operator expected at (eval 60647) line 1, near "sendMedia \"
List:
define FritzBoxAB FBTAM FritzBox 1
attr FritzBoxAB MsgrFun set FHEMBot sendMedia REC FILE
attr FritzBoxAB MsgrRecList \@3553xxx
attr FritzBoxAB MsgrType Telegram
attr FritzBoxAB Wav2MP3Fun system ("ffmpeg -loglevel error -y -i INPUT -metadata title=\"META\" OUTPUT")
attr FritzBoxAB room System
attr FritzBoxAB targetdir /opt/fhem/www/audio
attr FritzBoxAB username fritzxxx
#  READINGS:
#    2025-12-26 17:00:30  fritzbox_ip    1xxx
#    2025-12-26 17:00:30  msg            Nachrichtenliste erfolgreich geladen
#    2025-12-26 16:47:45  tam_msgmsg      Nachricht 22 von xxx am 30.03.25 um 10:42
#    2025-12-26 16:47:48  tam_msgurl      /opt/fhem/www/audio/fbtam1_msg22.mp3
#    2025-12-26 17:00:30  tam_name        Anrufbeantworter
#    2025-12-26 17:00:30  tam_newMsg      0
#    2025-12-26 17:00:30  tam_oldMsg      24
#    2025-12-26 16:47:45  tam_recipients  @3553xxx
#    2025-12-26 17:00:30  tam_state      on


EDIT:
Diese Variante funktioniert bei mir (expliziter FHEM Befehl und "@" nicht escapen)
attr FritzBoxAB MsgrFun fhem('set FHEMBot sendMedia REC FILE')
attr FritzBoxAB MsgrRecList @3553xxx
Allerdings bekomme ich die "vorherige" Nachricht gesendet, also das was im Reading tam_msgurl vorher drin stand (bzw. zum Zeitpunkt des Buttonclicks), und nicht die Nachricht die eigentlich angefordert war. Das Senden erfolgt anscheinend vor der MP3 Umwandlung und dem Aktualisieren von tam_msgurl.
Oder ist da ein Nebeneffekt meines Workarounds?
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 28 Dezember 2025, 02:40:36
Ich wundere mich etwas, denn weder im Wiki, noch in der CommandRef steht etwas von \" beim Telegram-Befehl.
Aus dem Wiki, wörtlich:
Zitatattr FritzBoxTAM MsgrFun set TelegramBot sendMedia REC FILE

Und ja, der Workaround sorgt für das verfrühte Senden der "alten" Nachricht.

Ich 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.

LG

pah



Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gonzo am 28 Dezember 2025, 17:46:41
Hallo pah,

Zitat von: Prof. Dr. Peter Henning am 28 Dezember 2025, 02:40:36Aus dem Wiki, wörtlich:
Zitatattr FritzBoxTAM MsgrFun set TelegramBot sendMedia REC FILE

so hatte ich es auch zuerst (erfolglos) versucht, siehe meine Definition oben (der "\" kommt von MsgrRecList - gemäß Wiki):
attr FritzBoxAB MsgrFun set FHEMBot sendMedia REC FILE
attr FritzBoxAB MsgrRecList \@3553xxx

Lasse ich den Backslash hier weg, wird die Fehlermeldung zu
1: PERL WARNING: Array found where operator expected at (eval 58220) line 1, near "sendMedia @3553xxx"

Anscheinend kommt mein FHEM nicht mit dem direkten set TelegramBot Befehl bei MsgrFun zurecht, sondern benötigt das fhem('set TelegramBot ...') Konstrukt...?
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 28 Dezember 2025, 18:51:38
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
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gonzo am 28 Dezember 2025, 23:22:32
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.
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 29 Dezember 2025, 14:50:09
Nein, das werde ich so nicht übernehmen.

LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Shadow3561 am 29 Dezember 2025, 17:06:31
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.
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 29 Dezember 2025, 21:23:29
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
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: PSI69 am 30 Dezember 2025, 07:22:54
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
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 30 Dezember 2025, 11:07:46
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
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gonzo am 30 Dezember 2025, 13:15:18
Zitat von: PSI69 am 30 Dezember 2025, 07:22:542025.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
siehe Diskussion weiter oben bzw. im aktualisierten Wikieintrag, MsgrFun erwartet Perl Code:
attr FritzBoxTAM MsgrFun fhem('set TelegramBot sendMedia REC FILE')
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: PSI69 am 30 Dezember 2025, 15:28:04
Zitat von: Gonzo am 30 Dezember 2025, 13:15:18siehe Diskussion weiter oben bzw. im aktualisierten Wikieintrag, MsgrFun erwartet Perl Code:
Code Auswählen Erweitern
attr FritzBoxTAM MsgrFun fhem('set TelegramBot sendMedia REC FILE')
... überlesen/übersehen - Danke!
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: elektron-bbs am 02 Januar 2026, 21:11:34
Bei mir haben sich noch mehrere Probleme mit dem Modul aufgetan, die ich versucht habe, zu beheben.

Vermisst habe ich Attribute, wie z.B. "event-on-change-reading" usw. Ich habe deshalb die AttrList erweitert um "$readingFnAttributes":
  $hash->{AttrList} = "interval targetdir username TTSFun TTSDev MsgrType MsgrFun MsgrRecList MailFun MailRecList Wav2MP3Fun $readingFnAttributes";

Außerdem wird das Attribut "interval" nicht ausgewertet. Ich habe deshalb die Zeile
  my $next = gettimeofday() + ($hash->{INTERVAL} || 60);
geändert in:
  my $next = gettimeofday() + AttrVal($name, 'interval', 60);
Das Schreiben in den hash kann damit entfallen.
  $hash->{INTERVAL}  = AttrVal($name, 'interval', 60);

Des weiteren kommt es beim Download von Nachrichten zu Fehlermeldungen im Log wie diese hier:
rm: das Entfernen von '/opt/fhem/www/audio/fbtam1_msg1.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
Im Quellcode findet sich folgender Kommentar:
    #-- change into MP3 if function is defined, otherwise delete existing file
Sollte nicht eher die WAV-Datei gelöscht werden, wenn erfolgreich in MP3 konvertiert wurde?
Ich habe deshalb den folgenden Abschnitt
      readingsSingleUpdate($hash,"tam_msgurl",$target2,1);
    }else{
      system('rm '.$target2);
    }
geändert in:
      readingsSingleUpdate($hash,"tam_msgurl",$target2,1);
      system('rm '.$target);
    }

Die HTML-Buttons "Löschen" und "Download" führen zu folgender Fehlermeldung:
2026.01.02 15:08:43 3: FHEMWEB WEB CSRF error:  ne csrf_120122450752236 for client WEB_192.168.178.43_37442 / command set FritzBox_7590_TAM downloadMsg 1. For details see the csrfToken FHEMWEB attribute.
Im Javascript fbtam.js wird zwar der csrfToken geholt, aber nicht in der url verarbeitet. Mit folgender Änderung von
    let url = "/fhem?XHR=1&cmd=set%20" + device + "%20" + action + "%20" + index;
in
    let url = "/fhem?XHR=1&cmd=set%20" + device + "%20" + action + "%20" + index + "&fwcsrf=" + csrfToken;
funktioniert das jetzt.
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Prof. Dr. Peter Henning am 03 Januar 2026, 10:40:05
Danke fürs Testen und die Hinweise.

Werde wahrscheinlich Einiges übernehmen, aber das hier nicht:

ZitatSollte nicht eher die WAV-Datei gelöscht werden, wenn erfolgreich in MP3 konvertiert wurde?

Nein, es kann ja durchaus sein, dass die WAV-Datei weiter verwendet werden soll. Und das Löschen der MP3-Datei sollte verhindern, dass dann eine Karteileiche existiert. Da werde ich noch einmal überlegen.



LG

pah
Titel: Aw: 72_FBTAM.pm für den FritzBox-Anrufbeantworter
Beitrag von: Gonzo am 17 Januar 2026, 22:36:06
Zur Konvertierung von WAV in MP3 wäre LAME noch eine Option, das ist schlanker als ffmpeg

sudo apt-get install lame libmp3lame0

Der Aufruf bzw. die Funktion ist dann wie folgt
attr <device> Wav2MP3Fun system ("lame --quiet --tt \"META\" INPUT OUTPUT")