Stromzähler AS1440 (Stadtwerke Osnabrück) auslesen

Wir haben vor ca. 2 Jahren unseren Neubau bezogen und sind seit dem auch mit einem digitalen Stromzähler gesegnet. Um genau zu sein, sogar mit zwei Exemplaren (Hausstrom & Wärmepumpe). Das Angebot der Stadtwerke Osnabrück, auf die Messwerte zurückzugreifen hat mich aber technisch (sehr altbackene Oberfläche SmartWeb und SmartCockpit) und preislich nicht angesprochen. Daher bin ich auf die Suche nach einer alternativen Lösung gegangen.

Hier der Zähler vom Anbieter Elmess. Die Stadtwerke Osnabrück setzen das gleiche Modell ein.

Da dies unter technikinteressierten Neuimmobilienbesitzern ein häufigeres Problem zu sein scheint, bin ich durch Björn Kaminski und Sören Gödde auf mein jetziges Lösungsszenario aufmerksam geworden. Grob besteht dies aus folgenden Ansätzen:

  • Raspberry PI
  • IR-USB Schnittstelle
  • Volkszaehler OpenSource Projekt
  • (Icinga & Grafana später ElasticSeach & Kibana)

Die Stadtwerke Osnabrück werden ab 2018 alle Haushalte in Osnabrück auf dieses Zählermodell (AS1440 von Elster) umstellen. Ich möchte an dieser Stelle daher meine Erkenntnisse teilen und eine schrittweise Anleitung zum permanenten Auslesen des Zählers bereitstellen.

Benötigte Hardware

Wer bei Null anfängt benötigt folgende Hardware:

Für die Montage der Hardware und des Raspberry PI findet man zahlreiche Anleitungen im Netz. In meinem Fall habe ich den Raspberry PI auch per LAN-Kabel in mein Netzwerk eingebunden. Somit entfiel die Konfiguration des WLAN und der Stromkasten ist sowieso in unmittelbarer Nähe zum Netzwerkschrank.

Die Komponenten werden wie folgt miteinander verbunden:

  • Netzwerkkabel zwischen Raspberry PI und Router
  • Lesekopf mit USB Kabel an einen USB-Port des Raspberry PI und an die passende Stelle am Stromzähler (Siehe Foto)
  • Vorbereitete SD-Karte (beschrieben mit dem Volkszähler Image, (siehe unten)) einstecken.
  • Strom anschließen.

Grundsystem installieren

Der einfachste Weg ist, das vorgefertigte Disk-Image vom Volkszähler-Projekt zu installieren. Eine detaillierte Anleitung dazu ist hier zu finden: https://wiki.volkszaehler.org/howto/raspberry_pi_image. Dort findet ihr auch den Link zum Download der aktuellen Version des Volkszaehler-Images. Diese Anleitung solltet ihr bis zu dem Punkt folgen, an dem ihr euch per SSH auf dem Raspberry PI einloggen könnt.

Das Anlegen der einzelnen Kanäle (Datenquellen) beschreibe ich hier speziell für den von den Stadtwerken eingesetzten AS1440:

Nutzung von Terminal / Putty zum Verbinden mit dem Raspberry PI:

ssh pi@IP_DES_RASPBERRYPI

Passwort lautet: raspberry

Im nächsten Schritt muss herausgefunden werden, unter welchem Port der IR-Lesekopf angesprochen werden kann. Dazu nutzen wir in der aktiven Session den folgenden Befehl:

dmesg |grep USB

In meinem Fall sieht das Ergebnis so aus:

In meinem Fall sind zwei Leseköpfe angeschlossen und werden daher auch beide gefunden. Der Port des ersten Lesekopfes ist /dev/ttyUSB0.

Im nächsten Schritt wollen wir den IR-Kopf entsprechend im System konfigurieren. Dazu legen wir einige Grundeinstellungen für die Schnittstelle fest:

sudo stty -F /dev/ttyUSB0 1:0:9a7:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

Mit diesem Befehl senden führen wir eine Grundkonfiguration des IR-Adapters durch und konfigurieren Dinge wie die Baudrate. Da dieser Schritt immer ausgeführt werden muss, bevor Messwerte ausgelesen werden können, fügen wir diesen Befehl zur Bootsequenz (Autostart) des Raspberry PI hinzu. Dazu legen wir uns eine entsprechende Datei im Verzeichnis /etc/init.d an:

sudo touch /etc/init.d/changeCommunication.sh
sudo echo '#!/bin/bash' >> /etc/init.d/changeCommunication.sh
sudo echo 'sudo stty -F /dev/ttyUSB0 1:0:9a7:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0' >> /etc/init.d/changeCommunication.sh
sudo chmod +x /etc/init.d/changeCommunication.sh

Test der Einstellungen

Damit wir herausfinden können, ob unsere Einstellungen funktionieren. Öffnen wir eine eine zweite Termin-/Putty Session zum Raspberry PI. Auf der einen Session werden wir einen Befehl an den Stromzähler senden, um diesen aufzufordern uns Messwerte zu geben. Über die andere Session werden wir die Rückgabewerte des Stromzählers überwachen.

Dazu öffnen wir also zu unserer bereits bestehenden Session eine weiter. In der einen Session starten wir die Überwachung der Schnittstelle:

sudo cat /dev/ttyUSB0

In der anderen Session senden wir einen initialen Aufruf an den Stromzähler, um Messwerte zurückzugeben:

sudo echo -n -e '\x2F\x3F\x21\x0D\x0A' > /dev/ttyUSB0

Das Ergebnis sah in meinem Fall dann so aus:

Die Aufzählung der Werte ist identisch mit denen, die auch über das Display des Stromzählers ausgelesen werden können.

So, jetzt sind wir schon einmal ein gutes Stück weiter. Der Raspberry PI kann grundlegend Daten vom Stromzähler auslesen und der Volkszähler ist auch installiert. Im nächsten Schritt werden wir nun diese beiden Lösungen zusammenbringen, damit der Volkszähler durchgehend die Daten aus dem Zählwerk ausliest und speichert.

Konfiguration des Stromzählers im Volkszähler

Um dem Volkszähler zu sagen, welche Daten er wirklich speichern soll ist es sinnvoll sich auf die nötigen Werte zu beschränken. Ich habe in meinem Fall nur den jeweils aktuellen Verbrauch speichern wollen. Dieser läuft im Zählwerk unter der Adresse „1-1:1.8.0“ (Siehe Screenshot).

In einer Terminal-/Putty-Session stoppen wir den Volkszähler, um die Konfiguration anzupassen:

sudo systemctl stop vzlogger

In der Datei /etc/vzlogger.conf findet ihr eine Beispielkonfiguration mit Testdaten. Diese Konfiguration kann entweder erweitert oder überschrieben werden. Ich habe diese Datei überschreiben mit dem folgenden Inhalt und entsprechend die Einstellungen für de Adresse im Zählwerk als auch die USB-Schnittstelle berücksichtigt.

{
"retry": 0,
"daemon": true,
"verbosity": 0,
"log": "/var/log/vzlogger.log",
"local": {
"enabled": false,
"port": 8080,
"index": true,
"timeout": 0,
"buffer": 0
},
"meters": [
{
"enabled": true,
"allowskip": false,
"interval": -1,
"aggtime": -1,
"aggfixedinterval": false,
"channels": [
{
"uuid": "6836dd20-00d5-11e0-bab1-856ed5f959ae",
"identifier": "1-1:1.8.0",
"api": "volkszaehler",
"middleware": "http://localhost/middleware.php",
"aggmode": "none",
"duplicates": 0
}
],
"protocol": "d0",
"device": "/dev/ttyUSB0",
"dump_file": "",
"pullseq": "2F3F210D0A",
"ackseq": "auto",
"baudrate": 300,
"baudrate_read": 9600,
"baudrate_change_delay": 500,
"parity": "7e1",
"read_timeout": 100
}
]
}

Solltet ihr mehrere Messwerte Speichern wollen, müsst ihr entsprechend im JSON-File unter channels nach gleichem Schema weitere Messwerte hinzufügen.

Im Anschluss muss die neue ID dieser Messquelle noch in die Datenbank des Volkszählers eingetragen werden. Dazu nutzen wir den folgenden Befehl:

mysql --user=root --password=raspberry -e "INSERT INTO volkszaehler.entities VALUES ('','6836dd20-00d5-11e0-bab1-856ed5f959ae', 'electric meter', 'channel');"

Hierbei wird die entsprechende ID „6836dd20-00d5-11e0-bab1-856ed5f959ae“ aus der vzlogger.conf in die Datenbank eingetragen. Solltet ihr mehrere Messwerte ausgewählt haben, wandelt die ID in der JSON entsprechend ab und fügt diese dann jeweils in die Datenbank ein.

Im Anschluss starten wir den Volkszähler wieder:

sudo systemctl start vzlogger

Ausgabe des Messwertes im Volkszähler

Der Messwert wird ab sofort durch den Volkszähler ausgelesen und in der Datenbank gespeichert. Um diesen Wert nun im Volkszähler Webinterface anzeigen zu lassen, muss dies entsprechend in der Weboberfläche des Volkszählers konfiguriert werden.

Dazu muss ein entsprechender Kanal, hier privater Kanal, hinzugefügt werden.  Das ganze sieht dann so aus:

Bitte beachtet dabei, dass ihr die gleiche UUIDs wie zuvor verwendet.

Ab jetzt solltet ihr die Daten auslesen und über die Weboberfläche anzeigen können.

Das Ergebnis im Stromkasten sieht heute so aus:

Raspberry PI erhält Strom und LAN von außerhalb des Stromkastens. Die beiden Zähler sind entsprechend per USB und dem IR-Kopf am Raspberry PI angeschlossen.

Nutzung der Messwerte für Drittsysteme

Ich habe in unserem Haus noch viele weitere Systeme, die mir Messwerte liefern. Da das Volkszähler-System erst später dazugekommen ist, habe ich mich entschieden die bestehenden Werte nicht in den Volkszähler einzubinden sondern die Daten des Volkszählers zu exportieren. Dazu habe ich mir ein entsprechendes PHP-Script geschrieben, welches ich per Cronjob aufrufe. Dieses stellt dann die jeweils aktuellen Messwerte per JSON zur Verfügung.  Das Script kann hier gefunden werden: https://github.com/np4me2k/np4me2k_homekit/blob/master/jsonexport.php

Die Daten werden zukünftig in eine Elastic Search Datenbank geschrieben und dann per Kibana visualisiert.

SSH-Verbindung über FritzBox bei IPv6 bei Kabel Deutschland

Ich habe mir daran nun eine ganze Zeit lang die Zähne ausgebissen und am Ende doch einen einfachen Weg gefunden diese Herausforderung zu lösen.

Ziel war es, den im internen Netzwerk stehenden Ubuntu-Server (alternative auch Raspberry PI) über das öffentliche Internet erreichen zu können. Das unter der Bedingung, dass wir anstatt eine öffentliche IPv4 Adresse nur noch eine IPv6 Adresse von Kabel Deutschland bekommen haben. Das macht die Angelegenheit noch ein wenig spannender.

  1. Registrierung und Konfiguration von MyFritz

Der erster Schritt ist die Registrierung bei MyFritz unter www.myfritz.net. Hier könnt ihr euch ganz normal einen Account erstellen. Im nächsten Schritt muss in der Fritzbox (http://fritz.box) der Verbindung zu MyFRITZ hergestellt werden. Das wird unter dem Punkt Internet > MyFRITZ erledigt. Als Ergebnis müsstet ihr unter https://www.myfritz.net/devicesOverview.xhtml eure Fritzbox aufgelistet sehen. Bei mir sieht das ganze wie folgt aus:

Bildschirmfoto_2016-05-16_um_13_16_59 Wie man sieht wird hier auch direkt erkannt, dass nur eine IPv6-Adresse verwendet wird. Wenn ihr nun auf die FRITZBox klickt seht ihr im oberen Abschnitt, dass euch durch AVM eine feste DNS-Auflösung eurer dynamischen IPv6-Adresse zur Verfügung gestellt wird.

Ein weiterer Vorteil dieser Konfiguration ist die Möglichket, nun auch über das Internet auf das Konfigurations-Interface zu kommen. Dies ist der Link, der oben direkt angegeben wird.

2. Konfiguration der MyFRITZ-Freigaben

Im Gegensatz zum klassischen Weg, verwendet man nicht die von der FRITZBox zur Verfügung gestellte „Portweiterleitung“ sondern die speziellen „MyFRITZ-Freigaben“. Da ich in meinem Fall zwei verschiedene Dienste meines Home-Servers über das Internet erreichbar machen möchte, habe ich hier entsprechend zwei Freigaben angelegt:

a) Port 80 für den Webserver

Bildschirmfoto_2016-05-16_um_10_46_27

b) Port 22 für SSH

Bildschirmfoto_2016-05-16_um_10_46_44

Bei der Auswahl des Netzwerkgerätes stehen automatisch alle im Netzwerk stehenden Systeme zur Auswahl. Wie man sieht, wird direkt und dem Punkt „MyFRITZ!-Adresse“ eine generierte DNS-Auflösung für dieses System angeboten. In meinem Fall ist dies http://mwo-proliant-microserver-gen8.IDENTFIKATOR.myfritz.net:80 und ssh://mwo-proliant-microserver-gen8.IDENTFIKATOR.myfritz.net:22. Nachdem diese beiden zur Verfügung stehen, kann über folgende Methoden getestet, bzw. sich mit dem System verbunden werden:

  • Ping des Systems per: ping6 mwo-proliant-microserver-gen8.IDENTFIKATOR.myfritz.net
  • Aufruf über den Browser per: http://mwo-proliant-microserver-gen8.IDENTFIKATOR.myfritz.net
  • SSH Verbindung (für IPv6) per: ssh -6 username@mwo-proliant-microserver-gen8.IDENTFIKATOR.myfritz.net

Bildschirmfoto_2016-05-16_um_10_46_11

Viel Erfolg beim selbst ausprobieren! Bitte beachtet, dass euer Internes System damit für diese Dienste frei im Internet Verfügbar ist. Damit entstehen ganz neue Anforderungen, was Sicherheitsmaßnahmen auf dem System angeht. Das System sollte also softwareseitig stets aktuell gehalten werden und entsprechende Konfigurationen der Firewall durchgeführt werden. Ich habe bspw. fail2ban installiert, um einen bruteforce Angriff auf die Shell zu erschweren.

Facebook World Hack Berlin

Gestern war ich mit meinem Kollegen Daniel Ceballos auf dem Facebook World Hack Berlin. Wir waren vor allem wegen dem basecom Produkt Location App dort, um hier einige Fragen beantwortet zu bekommen. Von Angesicht zu Angesicht bekommt man natürlich weit aus besseren Support, als über jedes Kontaktformular.

Als nette Nebenerscheinung habe ich noch ein kleines Interview für die Welt Kompakt gegeben, dass heute auch direkt erschienen ist. Wenn ich einen Auszug habe, werde ich den auch noch einmal veröffentlichen.

Weitere Details zum Facebook World Hack Berlin, wird Daniel in den kommenden Tagen im Blog der basecom veröffentlichen.

Danke akamai: Mac wacht immer wieder aus Ruhezustand auf

KonsolenauszugHeute habe ich mir endlich einmal die Zeit genommen und bin einem Problem mit meinem Mac auf den Grund gegangen. Schon seit längerem bleibt dieser nicht mehr im Ruhezustand, wenn ich diesen starte. Sobald ich diesen aktiviere, kann ich bis drei zählen und schwubs ist alles wieder so wie vorher. Gerade was den Stromverbrauch angeht sehr ärgerlich.

Heute habe ich durch Zufall in meiner Mac Konsole (findet man unter den Dienstprogrammen) folgendes entdecket:

02.06.11 11:46:47 com.apple.launchd.peruser.501[191] (com.akamai.client.plist) Throttling respawn: Will start in 10 seconds
02.06.11 11:46:57 com.apple.launchd.peruser.501[191] (com.akamai.client.plist[2048]) Bug: launchd_core_logic.c:4139 (24498):13
02.06.11 11:46:57 com.apple.launchd.peruser.501[191] (com.akamai.client.plist[2048]) posix_spawn(„/Applications/Akamai/loader.pl“, …): No such file or directory
02.06.11 11:46:57 com.apple.launchd.peruser.501[191] (com.akamai.client.plist[2048]) Exited with exit code: 1

Dies wiederholte sich dann auch brav wie es dort steht alle 10 Sekunden wieder von vorne und die ganze Konsole war voll davon. Da war also der Übeltäter, aber was will diese tolle Datei von Akamai überhaupt? Nach ein wenig Recherche habe ich dann hier gefunden: http://osxdaily.com/2010/10/07/uninstall-akamai-download-manager-and-com-akamai-client-plist/. Damit hat das ganze dann auch wunderbar funktioniert. Wer es also einfach loswerden will, sollte in der Konsole einfach die folgenden Commandos eingeben:

/Applications/Akamai/admintool uninstall -force

Dies hatte bei mir noch nicht zum gewünschten Erfolg geführt, aber die folgende dafür um so besser:

rm ~/Library/LaunchAgents/com.akamai.client.plist

Einen Reboot später war der Spuk dann vorbei und mein Mac darf sich Nachts nun auch wieder richtig ausruhen.

Was macht man nicht alles am Vatertag 😉

Starcraft 2 beta key auf der CeBit ergattern


Blizzard Key Turnier auf der Cebit 2010
Blizzard Key Turnier auf der Cebit 2010

Wir waren gestern auf der CeBit und dort unter anderem auch in Halle 23. In dieser Halle findet die ESL Pro Series statt und es geht dort sehr laut her. Wer will kann dort am Blizzard-Stand Starcraft 2 anspielen. Da die Betakeys für die vor kurzem gestartete Betaversion ja noch sehr rah sind besteht hier sogar die Möglichkeit, einen eigenen Key zu erspielen Täglich finden um 12:00 und 16:00 jeweils ein 8 Personenen Turnier statt. Bis auf das Finale wird Single Elemination gespielt (Verlierer scheidet aus, Gewinner kommt eine Runde weiter) und im Finale dann ein „best of three“. Wer mitmachen möchte, sollte sich früh genug anmelden, denn es gibt halt nur 8 Plätze.

Mein Bruder Julian Wortmann hatte das Glück am Turnier teilnehmen zu können und hat sogar gewonnen! Die Gewinner werden die Woche über gesammelt und erhalten im Anschluss den Key von Blizzard per E-Mail. Das Turnier war bis auf das Finale für ihn keine schwierige Angelegenheit, da er schon vorher bei einem Freund der einen Key besitzt einige Spiele machen konnte und somit den anderen Turnierteilnehmern klar im Vorteil war.