Ich hatte die Idee, die Anrufliste meiner Fritzbox automatisch herunterzuladen und hinsichtlich Anzahl der Anrufe auszuwerten.
Dazu habe ich mir mit KI-Hilfe dieses Bash-Script gebaut:
BOX="user:geheim@192.168.178.1"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INPUT="$SCRIPT_DIR/anrufliste.csv"
FINAL_OUT="$SCRIPT_DIR/count_sum.csv"
HTML_OUT="$SCRIPT_DIR/count_sum.html"
# Anrufliste laden von der Fritzbox
local CALLFILE="$SCRIPT_DIR/calls.csv"
rm -f "$CALLFILE" 2>/dev/null
php fb_tools.php "$BOX" anrufliste "$CALLFILE" -cm &>/dev/null
while IFS=';' read -r f1 f2 f3 f4 f5 f6 f7 f8; do
if [[ "$f3" == *"Anschluss:"* ]]; then
f3=$(echo "$f3" | cut -d':' -f2 | tr -d ' )')
[[ ! "$f4" =~ ^0 ]] && f4="0561$f4"
local such="$f1;$f2;$f3;$f4"
if ! grep -q "^$such" "$INPUT"; then
echo "$f1;$f2;$f3;$f4;$f5;$f6;$f7;$f8" >> "$INPUT"
done < <(tr -d '\r' < "$CALLFILE")
echo "$(date): Hinzugefügt: $added | Bearbeitet: $total"
local datei="vorwahlen.csv"
# Wenn der Suchbegriff mit "0" beginnt, nach Vorwahl suchen
if [[ "$suchbegriff" =~ ^0 ]]; then
# Vorwahl finden und Ort [PLZ] ausgeben
grep -m 1 "^$suchbegriff," "$datei" | cut -d',' -f2,3 | sed 's/\(.*\),\(.*\)/\1 [\2]/'
# Wenn der Suchbegriff keine Vorwahl ist, nach Ort suchen
grep -i -m 1 "$suchbegriff" "$datei" | cut -d',' -f2,3 | sed 's/\(.*\),\(.*\)/\1 [\2]/'
# Analyse + Summenbildung + Ort/Name
echo "Nummer;Eingehend;Ausgehend;Ort;Name;Summe;" > "$TEMP_OUT"
grep "^[io]" "$INPUT" | cut -d';' -f4 | sort -u | while read -r nr; do
local eingehend ausgehend sum name ort new_ort
eingehend=$(grep -c "^in;.*;$nr;" "$INPUT")
ausgehend=$(grep -c "^out;.*;$nr;" "$INPUT")
sum=$((eingehend + ausgehend))
lines=$(grep ";$nr;" "$INPUT")
name=$(echo "$lines" | cut -d';' -f3 | grep -v "^[0-9]" | grep -v "^$" | tail -1)
ort=$(echo "$lines" | cut -d';' -f5 | grep -v "^$" | tail -1)
if [[ "$nr" == 01* ]]; then
elif [[ -z "$ort" ]]; then
if [[ "$ort" != *"["* ]]; then
new_ort=$(such_ort "$ort")
[[ -n "$new_ort" ]] && ort="$new_ort"
echo "$nr;$eingehend;$ausgehend;$ort;$name;$sum;" >> "$TEMP_OUT"
tail -n +2 "$TEMP_OUT" | sort -t';' -k6,6nr
echo "<html lang=\"de\"><head><meta charset=\"UTF-8\"><title>Auswertung</title>"
body { font-family: sans-serif; padding: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ccc; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
tr:nth-child(even) { background-color: #f9f9f9; }
echo "<h1>Auswertung der Anrufliste</h1><table>"
for(i=1;i<=NF;i++) printf "<th>%s</th>", $i;
for(i=1;i<=NF;i++) printf "<td>%s</td>", $i;
echo "</table></body></html>"
echo " - CSV: $FINAL_OUT"
echo " - HTML: $HTML_OUT"
Alles anzeigen
Dieses erzeugt eine "count_sum.html" und "count_sum.csv" (Dateinamen können im Script angepasst werden).
Anleitung / Voraussetzungen:
1. Linux oder WSL mit installiertem php wird benötigt und ein Konsolen-Fenster zur Eingabe der Befehle etc. sowie ggf. ein Office-Programm
2. ein Verzeichnis (z.B. "A") erstellen und darein wechseln (cd ...)
3. die fb_tools von https://www.mengelke.de/Projekte/FritzBox-Tools sollten auch in dem Verzeichnis ("A") vorhanden sein (ansonsten Script anpassen)
4. das Script und eine vorwahlen.csv mit allen D-Vorwahlen (und Ortsname und einer PLZ) in Zeilen wie dieser "030,Berlin,10117" in diesem Verzeichnis ("A") speichern
4.1 Falls vorwahlen.csv ncht vorhanden, kann diese z.B so erzeugt werden:
4.1.1 Die Excel Datei von hier https://www.datenbörse.net/item/Liste_aller_Ortsvorwahlen_in_Deutschland_2021_Excel herunterladen
und im Verzeichnis ("A") als vorwahlen.xlsx speichern
4.1.2 vorwahlen.csv erzeugen:
libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)":44,34,76,1 --outdir . vorwahlen.xlsx
cat vorwahlen.csv | tr -d '"' > $tmp
5. Im Script in der Zeile mit "BOX=..." die FritzBox-Zugangsdaten anpassen:
"user:passwort@ip_adresse_der_box" bzw. ohne vorhandene User "passwort@ip_adresse_der_box"
und speichern
6. das Script laufen lassen z.B. durch "bash script_name"
7. die Datei count_sum.csv z.B. mit Libreoffice oder die Datei count_sum.html mit Browser öffnen.
Spalte Summe ist die Summe von ein- und ausgehend. Die Orte werden in der Form "Ort [eine_PLZ_des_Ortes]" gespeichert.
Ergebnis-Dateien sind nach Summe absteigend sortiert. Die Namen werden der Anruferliste entnommen.
hole_anrufliste() ist so gedacht, dass alle Anrufe zur Datei "anrufliste.csv" hinzugefügt werden, kann also auch separat zum Hinzufügen neuer Anrufe genutzt werden.
Beispiel Ergebnis-CSV:
Zitat
Nummer;Eingehend;Ausgehend;Ort;Name;Summe;
03031066005;0;17;Berlin [10117];Norisbank Telebanking;17;