A tool to monitor the uplink status of AVM FRITZ!Box Cable and DSL based routers.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Johannes Findeisen 021977513d Cleanups. Code seems to work nice like it is... 4 months ago
log added logging 1 year ago
.gitignore Cleanups 4 months ago
.gitmodules switched from sqlite to mysql. support for sqlite will coma back at some time. removed local installed submodule libraries. need to be installed on the system using pip or package manager 1 year ago
LICENSE added license 1 year ago
README.md Readme update. 4 months ago
config.example.json Removed SQLite support at all. Will only support MariaDB/MySQL from now on. 4 months ago
uplink Cleanups. Code seems to work nice like it is... 4 months ago
uplink.sql Database creation fixed. 4 months ago


uplink - is not some program expecting uplinks to work!

This README file is not up to date! It will be fixed soon to explain the installation and the usage of uplink.

uplink is a tool to monitor the uplink status of AVM FRITZ!Box Cable and DSL based routers. It uses the TR-064 protocol over UPnP.


For now I can say that uplink can monitor the status of you FRITZ!Box uplinks. It can log to a file and writes results to a MariaDB/MySQL database. With some editing of the code you can you use SQLite too but this feature is not active at the moment. This will change in the future. I switched to MariaDB because I run uplink on a RaspberryPi and are evaluating results on my workstation. I am working on a Gtk+ frontend to generate statistics…


  • Git (only for installing from Git repository)
  • Python3 (running for me using 3.7.3 on Raspbian 10 and 3.8.5 on Arch Linux)
  • fritzconnection >= 1.3.4
  • pymysql >= 0.10.1

Just install the 3rd party dependencies using pip install $PACKAGE or your OS package manager


git clone https://git.unixpeople.org/hanez/uplink.git
cd uplink
cp config.example.json config.json


Edit config.json to your needs.


  • interval: The polling interval
  • database: Path to sqlite3 Database
  • uplinks: List of devices you want to poll
    • provider: Custom name of the uplink provider
    • ip: The IP of the router device
    • password: The password of the router device


"interval": 60,
"database_type": "mysql",
"database":  "uplink",
"database_host": "",
"database_user": "USER",
"database_password": "PASSWORD",
"cron": false,
"daemon": false,
    "uplinks": [
        { "provider": "Cable Provider", "ip": "", "password": "1234" },
        { "provider": "DSL Provider", "ip": "", "password": "1234" }

Create Database

sqlite3 uplink.sqlite3 < uplink.sql


./uplink ./config.json


./uplink --help

View collected data

I actually use “DBeaver” for taking a look at the data uplink is collecting.

There will be a Gtk+ frontend to uplink at some time but this project is at a very early stage of development, so I want to write the collector first. Even support for other SQL databases is in planning in conjunction with the Gtk+ frontend. I use MariaDB only because I can move fast-forward.

TODO (in no particular order)

  • A lot… :)
  • Make all config vars as ARGS and vice versa. ARGS have higher priority. Chain: default -> config -> ARGS.
  • Parallelize queries using threads to improve performance; Does not work using SQLite because of exclusive access to the database DONE
  • SQL server backend; MariaDB/MySQL? DONE
  • Bring back SQLite support
  • Switch to ORM (peewee?) to support PostgreSQL, MySQL and SQLite.
  • Gtk+ frontend connecting to the database or loading a local copy of a SQLite file. wxGlade?
  • A cron mode to not let uplink run in an endless loop to be scheduled and executed by cron. DONE
  • A daemon mode to be a real UNIX daemon. For now, it’s just sleep() based.
  • Always keep platform independence in mind but not if uplink looses nice features on Linux.