Stromzähler mit S0-Impulsausgang an Raspberry Pi mit Volkszähler auswerten

Ich nutze seit geraumer Zeit das freies Smart Meter von Volkszähler, um meinen Stromverbrauch am Stromzähler grafisch zu erfassen. Ich habe als Stromzähler eine “moderne Messeinrichtung”, also einen Stromzähler mit SML Datenschnittstelle. Aber um diesen Zähler soll es heute gar nicht gehen. Interessieren soll uns heute ein einfach Wechselstromzähler mit einem Impulsausgang.

Der Impulsausgang wird in diesem Fall “S0”-Schnittstelle genannt und ist nicht mit der gleichnamigen S0-Schnittstelle von ISDN zu verwechseln. Im Prinzip handelt es sich um einen potentialfreien Schaltkontakt, der oft über einen Optokoppler ausgeführt ist, so auch in meinem Beispiel bei dem Wechselstromzähler Typ DDS5188. Dieser gibt wür jede “verbrauchte” Kilowattstunde 2000 Impulse aus, sprich einen Impuls pro 0,5 Wattstunden. Die Anbindung an Volkszähler, genauer gesagt den VZLogger hat mir einiges an grauen Haaren bereitet, denn ich wollte nicht die Impulse aufsummiert dargestellt haben, sondern live die verbrauchte Leistung darstellen.

Hardware-Setup

In den meisten Fällen haben die Zähler einen “S0+”- und einen “S0-“-Anschluss. Ich habe den “S0-“-Anschluss direkt auf Masse gelegt, wenn der Zähler einen Impuls ausgibt, wird der “S0+”-Anschluss also gegen Masse gezogen. Damit dieser sonst nicht in der Luft hängt, kann man am GPIO den Pullup-Widerstand aktivieren, oder man baut einen ein, wie im Schaltplan dargestellt. Wichtig: Die GPIO des Raspberry Pi sind nicht 5V-tolerant, man muss den Pullup also auf 3,3V legen!

Wechselstromzähler mit S0 Impulsausgang am Raspberry Pi Zero

Bei jedem Impuls des Zählers, also bei jeder “verbrauchten” halben Wattstunde bekommt der Raspberry Pi an GPIO 18 (Pin 12) nun also einen negativen Impuls von einigem Millisekunden. Nun gilt es, den vzlogger dafür zu konfigurieren.

Konfiguration des vzloggers

Die Konfiguration des vzloggers befindet sich in der Datei /etc/vzlogger.conf und muss mit root rechten bearbeitet werden. Es folgt eine erläuterte Beispiel-Konfiguration für den Zähler:

{
  "retry": 0,
  "verbosity": 3, //die SD-karte nicht zu sehr belasten...
  "log": "/var/log/vzlogger.log",
  "local": {  //Ich möchte auf lokal auf die Daten zugreifen, ohne push
    "enabled": true,
    "port": 8084,
    "index": true,
    "timeout": 0,
    "buffer": 0
  },
  "meters": [
  {
    "enabled": true,
    "allowskip": false,
    "aggtime": 0, //Die Daten werden nicht zusammengefasst
    "aggfixedinterval": false,
    "aggmode": "sum",
    "protocol": "s0", //S0-Impulse
    "gpio": 18, //Broadcom-Pin an dem der Impulsausgang hängt
    "mmap": "",
    "gpio_dir": -1,
    "configureGPIO": true, //vzlogger soll die GPIO für mich konfigurieren
    "resolution": 1, //hier könnte man die 2000 Impulse pro kWh eintragen
    "send_zero": false, //keine Nullen übertragen
    "channels": [
        {
          "uuid": "4307f540-dcb4-11eb-b124-5da08f82312d",
          "identifier": "Power", //DAS ist die wichtigste Stelle! Wer hier "Impulse" einträgt bekommt nicht die aktuelle Leistung
          "api": "volkszaehler",
          "middleware": "http://localhost/middleware.php",
          "timeout" : 10,
          "duplicates": 30
        }
    ]
  }
  ]
}

Das Ganze kann dann so aussehen:

Leistung dargestellt über die Zeit

Möchte man mehrere Zähler mit einem Raspberry Pi auslesen, so müssen mehrere “meters” in geschweiften Klammern angelegt werden. Leider auch dann, wenn man pro Phase einen S0-Ausgang hat.

Als kleinen Tipp am Ende kann ich noch die fertigen Images für den Raspberry Pi von Volkszähler empfehlen: https://wiki.volkszaehler.org/howto/raspberry_pi_image

pi-topCEED im Test

formfactorWas einem RaspberryPi meist fehlt ist ein Display. Viele Lösungen gibt es, doch die meisten sind ziemlich gebastelt – so wie ich das sehe. Glücklicherweise gibt es nun eine passable Lösung, die gut aussieht und trotzdem nicht vom basteln abhält: Den pi-topCEED.

Ich habe die Indigogo-Kampagne unterstützt und somit schon jetzt einen zum Testen hier. Also schnell meinen vorhandenen RaspberryPi 3 eingebaut und los geht es.

Der CEED kommt in einer wertigen Papp-Verpackung. Beigelegt werden ein Netzteil, die Display-Converter-Platine (bereits eingebaut) und ein Proto-Shield. Dieses kann an die Converter-Platine angeschlossen werden und ist damit direkt über ein Flachbandkabel mit den GPIO des Raspberry verbunden, welche auch nach außen geführt sind.

expansionPraktisch an dieser Stelle: 3V3, 5V und GND sind mehrfach vorhanden. Zusätzlich findet man SPDIF – welches wohl aus dem HDMI-Signal extrahiert wird.

Alle Platinen (Display, Proto und Pi) sind auf einer Magnet-Schiene angebracht und können, falls nötig, verschoben werden. Praktisch.

Das 14 Zoll Display und dessen Rahmen sind gut verarbeitet. Das Display ist hell und wenn man direkt darauf blickt gut ablesbar, die Farbqualität ist gut. Allerdings ist die Blickwinkelstabilität eine Kathastrophe. Hier hätte ich mir deutlich mehr erwartet. Horizontal ist alles gut. Aber vertikal reicht schon ein Winkel von etwas mehr als 10 Grad und das Bild wird entweder milchig oder schwarz wird plötzlich weiß. Für ein Produkt, welches im wesentlichen ein Display ist, ist das schon ein wenig armselig.

Etwas ausgeglichen wird dies durch den verstellbaren Ständer. Somit kann man den Stehwinkel anpassen, um oben genannte Probleme zu umgehen. Die Display-Platine bietet auch einen USB-Anschluss. Diese war eigentlich zur Stromversorgung des Pi gedacht, doch dies wird mit dem (auf dem Bild nicht angezeigten) Flachbandkabel gemacht. Doch da auch andere Kleinstcomputer genutzt werden können sollen, blieb dieser erhalten. Eine gute Sache.

Das Gehäuse mit Platinen und Display ohne Raspberry gibt es ab 70 Dollar – mit sind es knapp 100 Dollar. Zumindest war es so in der Kampagne. Jetzt liegt der Preis bei 100 Dollar ohne und 139 Dollar mit Raspberry. Es kommen aber noch Steuer hinzu.

Doch wo kaufen? Bisher: Nirgendwo in der EU, nur beim Hersteller in Asien direkt.

 

Raspberry Pi 3 – Gerüchte verhärten sich

Vor Kurzem berichtete ich über eine eventuelles Release des Raspberry Pi 3. Nun, die Gerüchte verdichten sich langsam. Bei der Amerikanischen Aufsichtsbehörde FCC sind Dokumente um den Einplatinencomputer aufgetaucht.

Wichtiger Faktor: Das FCC-Protokoll spricht von WLAN (b,g,n; 2,4GHz) und Bluetooth Low Energy. Wie ich damals schon gemutmaßt hatte, kommt das neue Modell also mit diversen Funk-Anbindungen. Endlich.

pi3
Quelle: https://fccid.io/document.php?id=2912424

Optisch fällt auf, dass die Status-LEDs ihren Platz verlassen haben, dort befindet sich nun die Keramik-Antenne.

Weitere Informationen findet man auf Reddit. Dort verlinkt ein User ein Foto einer Werbeanzeige vom Pi 3:

exuZy58[1] Dort finden sich folgende technische Details:

  • Bradcom BCM2837 CPU (4x 1,2 GHz)
  • 1GB RAM (wie bisher)
  • WLAN / Bluetooth per BCM43143
  • 26,38 Pfund (33,50€) Preis

Das kling meines Erachtens nach schon sehr gut. Weitere Infos Poste ich, sobald ich diese finde.

Freier Grafiktreiber für den Raspberry Pi rückt näher

Heute kam die Nachricht rein, dass der Linux-Treiberentwickler Eric Anholt von Intel zu Broadcom wechselt. Klingt erstmal unspektakulär, aber vor dem Hintergrund, dass Eric Anholt große Codebestandteile zu der Grafikbibliothek Mesa beisteuert, wird das Ganze schon interessant.

RaspberryPi

Denn seine Aufgabe wird sein, einen freien Grafiktreiber für den Pi zu entwickeln. Dabei möchte er ganz von vorn, also bei null beginnen. Das spricht meiner Meinung nach dafür, das es nochmal einen Performace-Boost gibt, da Overhead erst gar nicht zustande kommt. Nötig wird ein freier Treiber dadurch, dass die GPU des Pi mit einem Binär-Blob (Proprietäre Software) betrieben wird, die sich kaum in den Linux Kernel integrieren lässt. Viel Glück, Eric!

Freier Grafiktreiber für den RaspberryPi

Endlich ist es soweit! Ein freier Grafiktreiber für den Raspberry ist verfügbar. Momentan muss man dazu aber noch den Kernel selber compilieren:

SETTING UP THE DEVICE

You will need:

  • a Raspberry Pi, preferably a 512MB version, with the latest Raspbian
  • a network connection
  • a monitor capable of displaying 1080p
  • an SD card, at least 8GB (10GB is recommended)

We need plenty of space to build the kernel. Compiling will take around 12 hours, so it is helpful to overclock the Pi for this task. We also require the latest firmware, and the necessary packages we’re going to use to build the code.

Note: We’re going to use gcc 4.7, as the code generated is 10% faster than with 4.6. 4.8 is 10% faster still, but this is not available on Raspbian. If you cross-compile you can get better frame times.

Enter the raspi-config utility with:

sudo raspi-config

Expand the filesystem, set the overclock to at least medium (900 MHz), and reboot. Now perform an update with:

sudo rpi-update

and reboot again. We need to install several packages. Enter the following command to do this:

sudo apt-get -y install gcc make bc screen ncurses-dev g++-4.7 libsdl1.2-dev

FETCHING THE SOFTWARE

Enter the following commands to retrieve the necessary software from GitHub:

git clone --depth=1 https://github.com/raspberrypi/linux.git
git clone https://github.com/simonjhall/challenge
git clone https://github.com/simonjhall/dma
git clone https://github.com/raspberrypi/quake3.git

BUILDING THE KERNEL

This will take around 10 hours with all kernel modules. Pruning the modules to the bare minimum can improve compile times if you wish. Enter the following commands:

cd linux
git apply ~/challenge/kernel/patch.diff
zcat /proc/config.gz > .config
make oldconfig
make menuconfig

Enter “general setup”, select “local version”, enter the string “simon” and then exit to the main menu and save. Now build the kernel with:

make ARCH=arm

INSTALLING THE KERNEL

Enter the following commands to install the new kernel:

sudo make ARCH=arm modules_install
sudo cp arch/arm/boot/Image /boot/kernel_simon.img
sudo su
echo kernel=kernel_simon.img >> /boot/config.txt
echo gpu_mem=128 >> /boot/config.txt
reboot

When the devices comes back up, verify that the new kernel is loaded with the following command:

uname -a

You should see something similar to this:

Linux raspberrypi 3.10.33simon+ #1 PREEMPT Sat Mar 22 09:49:59 UTC 2014 armv6l x

BUILDING THE REST

Enter the following commands to build the rest of the software:

cd ~/quake3
git apply ~/challenge/quake/patch.diff
./build.sh
cd ~/dma
cp ~/challenge/kernel/module/dmaer.c .
make
./install.sh

Next, verify that the module has installed with this command:

tail /var/log/kern.log

You should see something similar to this:

Mar 23 15:22:45 raspberrypi kernel: [ 20.814750] smsc95xx 1-1.1:1.0 eth0:lin1
Mar 23 15:22:45 raspberrypi kernel: [ 21.376702] bcm2835-cpufreq: switching td
Mar 23 15:22:45 raspberrypi kernel: [ 21.376710] bcm2835-cpufreq: switching td
Mar 23 15:22:46 raspberrypi kernel: [ 24.472575] Adding 102396k swap on /var/S
Mar 23 15:25:02 raspberrypi kernel: [ 143.984835] 20c00000 f2c00000 deadbeef
Mar 23 15:25:02 raspberrypi kernel: [ 143.984866] major device number 248
Mar 23 15:25:02 raspberrypi kernel: [ 143.984890] vma list size 12, page list 6
Mar 23 15:25:02 raspberrypi kernel: [ 143.984909] allocated dma channel 4(f208
Mar 23 15:25:02 raspberrypi kernel: [ 143.985242] qpu ENABLED
Mar 23 15:25:02 raspberrypi kernel: [ 143.985264] V3D identify test: V3D versi2

Now enter the following commands:

cd ~/challenge/source
make
sudo make install

SETTING UP THE GAME

First of all you must ensure that you have the Quake 3 Arena data files on your Pi. You require the ‘point release’ pak files installed. There are various ways to do this but you could either transfer them from another machine with SCP, or copy them across on a USB stick. Copy the files into a folder called ‘baseq3′. This should now contain pak files numbered from 0 to 8 (eg pak1.pk3).

Next, enter the following commands:

sudo mkdir /root/.q3a
sudo mv baseq3/ /root/.q3a/
cd ~/quake3/build/release-linux-arm/
sudo mknod char_dev c 100 0
sudo cp ~/challenge/quake/demo.cfg /root/.q3a/baseq3/

RUNNING THE GAME

Enter the game folder with the following command:

cd ~/quake3/build/release-linux-arm/

Run the game using this command:

sudo ./ioquake3.arm +exec demo

If you wish to play the game after a reboot, you must run the following commands to re-load the necessary files:

cd ~/dma
./install.sh

Ich werde das Ganze demnächst auf deutsch anbieten – momentan probiere ich es aber noch selbst aus – was ja bekanntlich etwas dauern kann, auf dem Pi. Cross-compiling werde ich dann auch noch anschneiden… Viel Spaß euch mit Quake 3 und dem Pi!

7462_full