Aare Display

Aare Display: Fertig gebaut

2006 habe ich auf eBay einen digitalen Wecker günstig ersteigert. Die blaue Digitalanzeige darin war allerdings dermassen hell, dass an Schlaf nicht zu denken war. Also wanderte der Wecker in meine Bastelkiste und verblieb dort etwa ein Jahrzehnt.

Vor 4 Jahren kam ich auf die Idee, mir daraus eine Aare-Temperaturanzeige für den Schreibtisch zu basteln. Die Daten holt sich das Gerät via WLAN selbständig aus dem Internet, zur Stromversorgung reicht ein einfaches USB-Netzteil.

Lötarbeiten auf dem Balkon

Vergangenen Corona-Lockdown im April 2020 stellte ich das Projekt endlich fertig. Den Code und das Schema gibt es auf GitHub: cstuder/AareDisplay.

Seit langer Zeit hatte ich dafür wieder einen Lötkolben angefasst und zum ersten Mal überhaupt habe ich ein Elektronikprojekt von Anfang bis zum Schluss durchgezogen. Gelernt habe ich viel, hier einige Gedanken:

  • Das Ökosystem rund um die ESP8266 ist toll: Bibliotheken, Support, Blogbeiträge, YouTube-Tutorials. Jedes Problem das ich hatte, hat schon jemand vor mir gelöst.
  • Die ESP8266- und ESP32-Mikrokontroller machen Spass (Eingebautes WLAN, genügend Speicherplatz, diverse Schnittstellen) und sind günstig (Ab SFr. 3.-, Development Boards sind ab SFr. 9.- erhältlich).
  • Die ausführlichen Vorarbeiten haben sich gelohnt: Der Prototyp auf dem Breadboard, danach das Übertragen des Schemas zu KiCad. Dazwischen fleissiges dokumentieren in meinem Entwickler-Tagebuch.
  • Die Aare.guru-API hat sich bewährt: HTTP-Zugang ohne TLS, die leichten Methoden und neu wäre sogar direkter Text-Output möglich. Damit wäre der mitkompilierte JSON-Parser hinfällig.
  • Zu meiner absoluten Freude funktioniert das Aare Display schon monatelang wunderbar stabil.

Kurzer Werbeblock: Anstelle monatelanger Lieferzeiten aus China habe ich lieber etwas mehr bezahlt und mir Teile & Werkzeug prompt von der lokalen Bastelgarage liefern lassen.

Nahaufnahme Sieben-Segment-Anzeige mit Multiplexer
Die Lötstellen sehen akzeptabel aus. Ein bisschen stolz bin ich schon.

Einen äusserst interessanten Aspekt des Projektes fand ich ganz zu Beginn: Als ich den Digitalwecker auseinandernahm, interessierte ich mich für die verbauten Komponenten und habe diese etwas gegoogelt. Gefunden habe ich einen Digitalen-Wecker-Komplettlösung-Chip namens UTCLM8560. Als Softwareentwickler welcher praktisch ausschliesslich mit General Purpose-Prozessoren hantiert, war ich fasziniert von derartiger Hardware welche ein fixfertiges Produkt antreibt.

Kein Wunder hat der Hersteller des Original-Weckers hunderte von Uhren im Angebot: Das Problem ist gelöst, nur das Design wird noch endlos variiert.

UniversMCS Hausverkabelung auf 1 Gbit upgraden

Erst nach einigen Jahren in der aktuellen Wohnung habe ich bemerkt, dass unsere interne Hausverkabelung vom Typ UniversMCS nur auf 100mbit läuft. Selbst WLAN ist schneller als das und meine Glasfaser-Internetanbindung konnte ich so bei Weitem nicht ausreizen.

Etwas irritiert über den Umstand, dass jemand im Jahr 2012 nur 100mbit-fähige Kabel verlegt, habe ich mich beim Hersteller Zidatech gemeldet. Die Antwort folgte prompt und ausführlich: Die Einschränkung entsteht durch die kombinierten Telefon- und LAN-Steckdosen. Die Lösung ist das Gigabit-Modul 100.040.751 Selbsteinbau. Kostenpunkt ca. 22.- SFr.

WLAN-Accesspoint mit Hausverkabelung verbunden

Der Einbau war sehr einfach und funktionierte auf Anhieb. Entgegen der Herstellerangaben auf der Webseite unterstützt das Gigabit-Modul auch Power-Over-Ethernet (PoE).

(Die kleinen Freuden am Leben: Kurze Netzwerkkabel. Ich habe mir gleich ein halbes Dutzend bestellt um sie in meinem Serverrack einzusetzen. An dieser Stelle muss ich vielleicht erwähnen, dass mein Serverrack aus einer Ikea-Kartonschachtel besteht.)

Wesentlich schwieriger war es, als Privatperson an dieses Einzelteil zu kommen: Der Hersteller verkauft es nur an Distributoren, die Distributoren nur an Elektrofachleute. Und der einzige Fachhändler in meiner Region mit Zidatech im Angebot, hat nach meinen ersten Mails und Telefonaten nicht mehr reagiert.

Glücklicherweise habe ich die Firma Elektro Zollinger gefunden, welche das Modul extra für mich in ihren Onlineshop aufgenommen haben.

Fazit: LAN beschleunigt, WLAN erweitert, einem sommerlichen Home Office auf dem Balkon steht nichts mehr im Wege.

20 Jahre Existenz.ch

Vor etwas über 20 Jahren sass ich in einem PC-Raum an der EPFL und war auf der Suche nach einem coolen eigenen Domänennamen. Sehr angetan von David Cronenbergs Film eXistenZ versuchte ich existenz.ch zu registrieren. Enttäuscht musste ich feststellen dass ein Institut für Existenzforschung diese bereits besetzt hatte.

Exakt heute vor 20 Jahren, am 21. Januar 2001 sass ich abermals in einem PC-Raum an der EPFL (Damals waren Laptops noch unüblich. Ich glaube mein erstes iBook hatte ich erst im Herbst 2001 oder Frühling 2002 gekauft.) Aus reiner Langeweile überprüfte ich erneut den Eintrag und siehe da: Das Institut für Existenzforschung hatte sich aufgelöst, die Domäne war frei.

Zwei Minuten später habe ich die Domäne registriert und benutze sie seither für persönlichen Belange. Insbesondere als eMail-Adressen-Domäne hat sie sich bewährt: Im Hintergrund habe ich bereits mehrfach den Email-Provider gewechselt ohne die Adresse selber ändern zu müssen. Letztes Jahr konnte ich so problemlos von Gmail zu Fastmail migrieren.

Fun Facts:

  • 2001 kosteten Schweizer Domänen noch SFr. 80.- zur Registration, und danach SFr. 48.- pro Jahr.
  • Die Switch hat damals alle Schweizer und Liechtensteiner Domänen selber verkauft. Weil sie aber als gemeinnützige Stiftung keinen Gewinn machen durfte, musste sie aufgrund des Internetbooms konstant die Preise senken. Ab 2015 musste sie den lukrativen Handel ganz an private Firmen abgeben. Heute kostet eine Schweizer Domäne noch etwa SFr. 15.- pro Jahr.
  • Ab diesem Jahr (1. Januar 2021) sind die Adressen der Domänenbesitzer*innnen bei einer WHOIS-Abfrage in der Schweizer Registry nicht mehr sichtbar. Wer meine private Postadresse wissen will, muss jetzt halt einfach mich fragen.

PHP-Package: temporal-shelf

Das dritte Packet aus dem aktuellen Refactoring von api.existenz.ch ist temporal-shelf.

Die kleine Utility-Klasse erlaubt es Dateien in ein Archiv zu kopieren, in einer Jahr/Monat/Tag-Struktur abgelegt und versehen mit einem Zeitstempel.

Beispiel: daten.txt wird kopiert nach /archiv/2020/11/09/1604953664_daten.txt.

Spannendes Detail: Mit dem Package vfsStream kann ein virtuelles Dateisystem im Speicher erstellt werden, in welchem bequem und ohne Seiteneffekt die Unittests ablaufen.

Aare.guru- & Existenz-API Newsletter 2020

Den folgenden Text habe ich am 15. Oktober 2020 an die API-Newsletter-Liste verschickt. Trag dich in den Newsletter ein um auf dem Laufenden zu bleiben.

Christian

Eine denkwürdige Badesaison ist zu Ende gegangen: Bis spät in den September war die Aare für Normalsterbliche bebadbar. Neue Wörter in unserem Wortschatz. Das Virus brauchen wir gar nicht erst zu erwähnen. 

Was wir diesen Sommer getan haben

  • Wir hatten keine grösseren Ausfälle zu verzeichnen, die APIs liefen stabil. Im Hochsommer gibt es jeweils knapp 5 Millionen Zugriffe pro Monat, selbst im Oktober kommen täglich noch um die 50’000 Requests rein.
  • Die Dokumentationen sind hübscher geworden. Und mit OpenAPI/Swagger-Definitionen auch praktischer:

https://aareguru.existenz.ch & https://api.existenz.ch

  • Für Integrationen in IoT-Dings und Wearables und anderen Geräten mit wenig Rechenpower gibt es beim Aare.guru neu einen values-Parameter welcher ausgewählte Werte als Text zurück liefert. Nachwievor ist die API auch per HTTP erreichbar.
  • Neue Daten in der Aare.guru-API: Koordinaten der Messstationen sowie den Temperatur-Text im Kurzformat (text_short / temperature_text_short, weniger als 15 Zeichen).
  • Aare.guru-API-Responses werden standardmässig mit einer Cachezeit von 120 Sekunden zurückgegeben. Vielleicht stillt das etwas den Datenhunger einiger Integrationen. 

Was wir im Winter so treiben

  • Auf der Existenz-API ist jeweils nur ein Teil der historischen Daten verfügbar (30-90 Tage), das wird wahrscheinlich so bleiben. Allerdings möchte ich unser gesamtes Datenarchiv öffentlich anbieten, voraussichtlich in einer InfluxDB, sobald deren Version 2 released ist. Dann wird’s dann auch ein Grafana zum drin Rumspielen geben.

Soll es schneller gehen? Unterstütz uns mit dem Konsumieren von Konsumgütern in unserem Konsum.

PHP-Package: parse-swissmetnet

Im Rahmen eines Code-Refactoring (auch Refaktorisierung, Refaktorierung oder Restrukturierung) habe ich nach Jahrzehnten von PHP-Coden mein erstes Composer-Package geschrieben und publiziert: cstuder/parse-swissmetnet.

Es dekodiert Daten und Metadaten aus dem automatischen Wettermessenetz der MeteoSchweiz, welche auf dem Opendata.swiss-Portal publiziert sind.

Besonders Freude habe ich an den neuen GitHub-Actions welche die beiliegenden Unittests bei jedem Push automatisch durchführen.

Aare.guru in der macOS-Menubar

Screenshot der Menubar

Aare.guru überall!

Für die Browser Firefox und Google Chrome habe ich bereits Browser-Plugins geschrieben, welche dir die aktuelle Aare-Temperatur jederzeit auf den Desktop holen. Für Safari ist die Sache leider komplizierter und nicht so einfach möglich.

Dafür gibt es ab sofort für macOS das offizielle Aare.guru-Bitbar-Plugin, welches bei dir in der Menuzeile residiert.

Guten Schwumm!

Lektionen aus Advent Of Code 2019 mit Java 13

Advent Of Code 2019 Fortschritt

Bei der diesjährigen Advend Of Code-Herausforderung kam ich 12 Tage weit bis der Vor-Weihnachtsrummel Überhand nahm. Das ist eine neue persönliche Bestleistung, danke auch an Bruder R. für den Ansporn.

Ich habe als Programmiersprache Java 13 eingesetzt. Maven und JUnit, sowie die Java-Entwicklungsumgebung von Visual Studio Code haben mich dabei hervorragend unterstützt.

Eine Spezialität von Advent Of Code ist dass jede Aufgabe in zwei Teilen gestellt wird: Erst nach dem erfolgreichen Lösen des ersten Teiles erfährt man die restlichen Anforderungen.

Zusätzlich gabe es auch dieses Jahr eine Meta-Aufgabe: Das Schreiben einer einfachen virtuellen Maschine über mehrere Tage hinweg.

Schreib dein Annahmen als Kommentar in den Code

Gerade die Zwei-Teilung der Aufgaben macht es wichtig, alle getroffenen Annahmen im Code entsprechend zu dokumentieren.

Wer hingegen schon im ersten Teil versucht allen möglichen neuen Anforderungen des zweiten Teils zu antizipieren, wird vielen unnützen Code schreiben. Der einfachere Ansatz ist es sich an die aktuelle Aufgabe zu halten. Erst wenn die neuen Spezifikationen bekannt sind, ist es Zeit die getroffenen Annahmen zu überprüfen.

Unittesting beruhigt

Die virtuelle Maschine welche in den ersten 10 Tagen entsteht wird mit jedem Tag komplizierter. Da beruhigt es ungemein alle Beispiele (und vorangegangene Aufgaben) als Unittests für die aktuelle Implementation zu einer Testsuite zusammengefügt zu haben.

Java 13 ist angenehm

Mit jeder neuen Java-Version kommen mehr praktische Features in der Sprache an. Die 13 macht deutlich mehr Spass als alles was vor Version 8 war.

(Natürlich eignen sich für Advent Of Code dynamische Sprachen wie Python oder Ruby was die Implementationsgeschwindigkeit angeht noch immer tausendmal besser…)

Ich freue mich bereits auf nächstes Jahr und bin schon gespannt, welche Sprache ich nächsten Dezember wählen werde.

Neue Dokumentation für api.existenz.ch

Meine APIs für diverse OpenData-Daten haben in den letzten Wochen eine aktualisierte Dokumentation im OpenAPI V3-Standard (Aka. Swagger) erhalten: https://api.existenz.ch/docs/apiv1

Zusätzlich verlinkt von der API-Startseite ist ein Newsletter mit unregelmässigen Updates zum Zustand der API.

Ich freue ich immer über eine Nachricht wenn dir die Daten von Nutzen sind.