Skip to content

Blog

A New Home for My Open Source Projects: Embracing Codeberg

Codeberg Migration

More than 14 years ago, I migrated my 26 open source code project to GitHub. Back then GitHub was a fresh and modern platform pushing the boundaries of collaborative software development. Over the years, however, my perspective on GitHub has changed significantly.

I have recently migrated my by now 79 repositories from GitHub to Codeberg, a decision driven by several significant factors.

Freeing a Xiaomi Humidifier from the Cloud

Home Assistant Logo

I recently moved into a new apartment which I used as an opportunity to make our home a little smarter. As a big open source supporter I built my smart home platform with Home Assistant of course.

Unfortunately, there are still far too few products that are directly compatible with Home Assistant. Especially in the area of humidifiers where I only found products that rely on a proprietary app or cloud from the manufacturer. Something that I would like to avoid at all costs. For one thing, such dependence is a certain form of planned obsolescence, as the product becomes useless as soon as the app loses its compatibility with new smartphone operating system versions or the manufacturer’s cloud is no longer operated.


Therefore, it was important for me to find a smart humidifier that integrates directly with my Home Assistant setup. To achieve this goal, I identified two options:

  1. Add sensors / actuators to a classic humidifier to make it smart.
  2. Replace the firmware of a smart humidifier with my own source code.

I decided to use the second approach, because it required less effort, since I would have had to implement my own firmware anyway.

This blog has joined the Fediverse

ActivityPub Logo
ActivityPub Logo.

My blog noteblok.net has joined the Fediverse. You can follow my posts via this new handle: stv0g@noteblok.net.

This has been made possible by the Wordpress ActivityPub Plugin. With the ActivityPub plugin installed, the WordPress blog functions as a federated profile, along with profiles for each author. For example, my blog-wide profile can be found at @blog@noteblok.net. Authors like myself, on the other hand, would have their individual profiles at @stv0g@noteblok.net.

The integration allows following the blog from your own Fediverse platform and account like Mastodon. I return you can also react and comment to my blog posts via simply replying with your existing Fediverse account.

Fritz!DNS - An authoritative DNS server for AVM FRITZ!Box routers

Fritz!Box
Fritz!Box.

In my home network, I am using an AVM FRITZ!Box Cable 6690. It handles DHCP, DNS, Wifi and recently also interfaces my home network via WireGuard to my servers.


Just like the venerable Dnsmasq AVM’s FRITZ!OS uses hostnames learned from its DHCP leases and makes them resolvable via its internal DNS server.

Unfortunately, this feature in FRITZ!OS has some limitations:

  1. The name of the DNS Zone is hard coded to fritz.box and can not be adjusted. Hence, the resolvable names have the following schema: myhostname.fritz.box
  2. The internal DNS server only supports recursive DNS looks. It does not act as an authoritative DNS server. Hence the local zone can not be delegated.
  3. AXFR zone transfers are not supported.

My solution to these shortcomings is Fritz-DNS which:

  • Is a small tool written in the Go programming language.
  • Is a small authoritative DNS server which serves A / AAAA resource records for local hosts connected to an AVM Fritz Box home WiFi router.
  • Can be used in a hidden master configuration as it supports AXFR zone transfers.
  • Uses the custom extension (X_AVM-DE_GetHostListPath) of the TR-064 Hosts SOAP-API as documented here to retrieve a list of local hosts.
  • Supports the generation of AAAA (IPv6) resource records based on the hosts MAC addresses using 64-Bit Extended Unique Identifier (EUI-64) and a configured unique local address (ULA) prefix.
  • Does not yet support PTR resource records (to be implemented…)
  • Is licensed under the Apache 2.0 license

You can find Fritz-DNS at Codeberg: /stv0g/fritz-dns .

Here is a small figure illustrating the interaction of Fritz-DNS with the Fritz!Box and other DNS servers / clients:

Fritz!DNS Architecture
Fritz!DNS Architecture.
Terminal window
$ fritz-dns
Usage of fritz-dns
-ipv6-ula-prefix string
Fritz Box IPv6 ULA Prefix (default "fd00::/64")
-pass string
FritzBox password
-port int
Listen port (default 53)
-soa-expire duration
SOA expire value (default 744h0m0s)
-soa-mbox string
SOA mailbox value
-soa-minttl duration
SOA minimum TTL value (default 1h0m0s)
-soa-ns string
Authorative DNS server for the zone
-soa-refresh duration
SOA refresh value (default 2h0m0s)
-soa-retry duration
SOA retry value (default 1h0m0s)
-ttl duration
default TTL values for records (default 5m0s)
-url string
FritzBox URL (default "http://fritz.box/")
-user string
FritzBox username (default "admin")
-zone string
DNS Zone (default "fritz.box.")

Aachen wird Transparent!

Ich möchte Stadtpolitik in Aachen für alle verständlich machen. Mein aktuellstes Projekt aachen-transparent.de ermöglicht es, die öffentlichen Informationen aus dem städtischen Ratsinformationssystem modern und benutzerfreundlich aufzubereiten. Dazu habe ich das bereits existieren Open-Source Projekt Meine-Stadt-Transparent erweitert und für die Bedürfnisse in Aachen angepasst.

Screenshot von aachen-transparent.de
Screenshot von aachen-transparent.de.

Aachen Transparent ist ein Projekt, dass ich ehrenamtlich im Rahmen des Open Data Labs Aachen ins Leben gerufen habe. Es versucht einige der Unzulänglichkeiten des Ratsinformationssystems der Stadt Aachen zu umgehen. Dazu nutzt es dessen öffentliche OParl Schnittstelle um die dort hinterlegten Informationen über eine moderne Oberfläche zugänglich zu machen.