Raspberry mit S0 und Interrupts
Ein Auslöser mich überhaupt mit der Thematik um den RasPi zu beschäftigen war der Einbau von Stromzählern bei Net at Work, die eine S0-Schnittstelle haben, d.h. die für jede Wattstunde einmal einen Kontakt verbinden. Sicher gibt es diverse kommerzielle Anbieter von S0-Zählern, die die Schaltungen aufaddieren und irgendwie verfügbar machen.
Kommerzielle Zähler mit Ethernet
Wer also nicht selbst bauen will, kann hier schon mal schauen.
- webControl Server Basic -
überwachen und Schalten per
Webbrowser (149€)
http://www.digitale-elektronik.de/shopsystem/product_info.php?cPath=203_204&products_id=347
zzgl. Netzteil für Hutschiene (24V) - MFC 8800-LAN ca. 190€ (ohne Gehäuse)
http://www.reichelt.de/?ARTICLE=69332
8 Eingänge und Ausgänge, davon zwei Eingänge als Zähler - W&T Web-Count 6x Digital
(473,62€)
http://www.wut.de/e-57652-ww-dade-000.php - S0 Impuls-Logger (ca. 450€)
http://www.emuag.ch/d_sites/products_d/S0-Impuls-Logger_d.html - Poseidon 2250: SNMP
monitoring & data logger (ca.
640€)
http://www.hw-group.com/products/poseidon/poseidon_2250_en.html - IPswitch-S0-mini ISG ca. 80€
12V Netzteil erforderlich
http://www.sms-guard.org/downloads/IPswitch-S0-mini-Anleitung.pdf
Sehr günstige Lösung, die auch SNMP spricht. - IPswitch-E-LAN Adapter, 8xS0
mit WLAN
http://www.sms-guard.org/downloads/IPswitch-E-WLAN-Anleitung.pdf - Volkszähler.org:
5x-S0-Hutschienencontroller
(Selbstbau)
http://wiki.volkszaehler.org/hardware/controllers/hutschienencontroller_v2
http://wiki.volkszaehler.org/hardware/controllers/5x-s0-hutschienencontroller_bauanleitung
Die meisten dieser Geräte werden auf die Hutschiene moniert und brauchen ggfls. noch eine Stromversorgung und natürlich ein LAN-Kabel.
Selbstbau ist Trumpf
Sie haben aber auch schon gesehen, dass ein RasPi viele Eingänge hat und samt Netzteil und Gehäuse und WLAN-Adapter günstiger ist als alle kommerziellen Geräte. Allerdings müssen Sie dann selbst bauen, programmieren und anschließen.
Beachten Sie, dass die Arbeiten an Starkstrom nur Fachpersonal durchführen darf. Selbst wenn sie "nur" an den S0-Anschluss eines Zwischenzählers gehen, sollten sie kein Laie sein.
Der RasPi hat, wie ich auf GPIO beschrieben habe, sehr viele digitalen Eingänge, die einfach die Impulse lesen könnten. Und da die meisten S0-Eingänge von Zählen per Optokoppler schon galvanisch getrennt sind, könnte man einfach einen Widerstand und etwas Draht nehmen.
Basically the S0 interface is really only an
open collector switch that switches a number of
times pr kwh. connect it to one of the Pi's GPIO pins and
add a pull up resistor to 3V3. If you use GPIO 0
or 1 this already has a pull up resistor fitted.
You also need to connect the ground of your
meter to the ground of the Pi
Quelle:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=44&t=9415
Weiterhin müsste ein Programm ja auf eine PegelÄnderung reagieren oder regelmäßig die GPIO-Pins abpollen und hoffen keinen Takt zu übersehen
Each GPIO can interrupt,
high/low/rise/fall/change.[5][6] There is
currently no support für GPIO interrupts in the
official kernel, however a patch exists,
requiring compilation of modified source tree.[7]
The 'Raspbian "wheezy"' [8] version that is
currently recommended für starters already
includes GPIO interrupts.
Quelle:
http://elinux.org/Rpi_Low-level_peripherals#GPIO_hardware_hacking
Allerdings ist diese Aussage mit Interrupts wohl schon obsolet, wie ich auf Raspberry - GPIO gezeigt habe.
Aber das direkte Lesen hat natürlich die Einschränkung, dass die Impulse nur gezählt werden, wenn das Programm auch aktiv ist und der "Stand" müsste ja auch irgendwo gespeichert werden. Eine SD-Karte ist zwar vorhanden aber auch nur für eine gewisse Menge von Schreiboperationen geeignet. Jede einzelne Wattstunde würde ich nicht als Datei auf eine SD-Karte schreiben wollen.
Vorverarbeitung
Daher ist es aus vielerlei Hinsicht interessant, die Zählimpulse vorher zu verarbeiten: So kann ein 1-Wire Zählerbaustein oder andere PICs mit viel weniger Strom arbeiten, die Zählerstände aufaddieren und diese über eine leistungsfähigere Schnittstelle zur Verfügung stellen. Zudem sollten Sie schon eine elektrische Anpassung (Schutz und Entprellung) vorsehen. Aber auch hier gibt es schon fertige Module für die RasPi-Plattform:
- SD0 - 4xS0 Anschluss für Raspberry
(69€)
http://busware.de/tiki-index.php?page=SD0
https://de-de.facebook.com/busware
Vorkompiliert ist nur der "Volkszähler" Firmware aber mit WinAVR kann die volle Firmware sehr schnell selbst kompiliert werden. - RaspberryPi-Erweiterung
http://wiki.volkszaehler.org/hardware/controllers/raspberry_pi_erweiterung
6xS0, 1x 1Wire, - CCTools: I2C-CNT2 HS
(Zählerbaustein)
http://www.kriwanek.de/c-control-pro/komponenten/129-cctools-i2c-cnt2-hs-zaehlerbaustein.html - 1-Wire Dual S0 Zählermodul (49€ Hutschiene)
http://www.eservice-online.de/1-Wire-Bus/1-Wire-Fertigmodule/Digital-Ein-und-Ausgang-Analog-Eingang-Zaehler/Dual-S0-Zaehler-fuer-1-Wire-Bus.html
Interessant ist insbesondere der 1Wire Sensor, der auf dem Zählerbaustein DS2423 (http://www.maximintegrated.com/datasheet/index.mvp/id/2912) aufsetzt. Leider wird genau der Baustein nicht mehr hergestellt und Restbestände sind entsprechend teuer! Aber dafür gibt es andere findige Bastler, die das mit einem AVRTiny mal schnell nachbauen: (http://forum.fhem.de/index.php?t=msg&goto=63018&rid=0#msg_63018)
SMS-Guard: 1wire-USB-Master
Von der Firma SMS-Guard gibt es mittlerweile eine USB-Lösung die mit einem RasPI-Projekt von zwei Stromzählern S0-Eingänge abfragen kann und zudem eine 1-Wire-Schnittstelle anbietet.
Siehe dazu auch EAC 1Wire/S0-Stick
Der Vorteil dieser Lösung gegenüber einer direkten Nutzung der GPIO-Pins ist, dass der verwendete Prozessor und die S0-Zählung unabhängig vom RasPI selbst ist. Laut Hersteller "zählt" das Modul auch, wenn einfach nur eine Stromversorgung vorhanden ist. Damit ist die Zählung deutlich zuverlässiger als die Verarbeitung von Interrupt. Über den 1-Wire-Bus können sogar noch bis zu 64 weitere Sensoren (Zähler, Temperatur, Feuchtigkeit) etc. angeschlossen werden. Das ganze ist für einen Listenpreis von unter 25€ eine durchaus interessante Option
- 1Wire USB Master
http://www.sms-guard.org/downloads/1wire-USB-Master.pdf
Übrigens gibt es mit dem "IPswitch-S0-mini ISG" für ca. 80€ eine Box, die 3-S0-zählt aber per Ethernet angeschlossen wird und SNMP spricht. Damit lässt sich dann natürlich die Messwert-Erfassung im Schaltschrank durchführen, während der RasPI oder ein anderes System woanders steht. Zudem hat man so eine weitere galvanische Trennung durch den Switch.
- IPswitch-S0-mini ISG
http://www.sms-guard.org/downloads/IPswitch-S0-mini-Anleitung.pdf - IPswitche - Fragen und
Antworten
http://www.sms-guard.org/dfuaips.htm - SNMP
http://sms-guard.org/downloads/app-ips-protokoll-snmp.pdf
Busware SD0
Interessant ist natürlich, wenn jemand ein fertiges Modul verkauft, welches sogar schon die Vorverarbeitung macht. Das SD0 (http://www.busware.de/tiki-index.php?page=SD0 ) von BusWare kommt dem recht nahe, da es 4 elektrisch gesicherte SO-Eingänge hat, die aber nicht auf den RasPi auflaufen, sondern von einem kleinen ATmega 1284c abgefragt werden.
Das kleine Board liest aber nicht nur S0 aus, sondern hat optional noch eine RTC und der GoldCAP stützt als Überbrückung (ca. 12h) mit, damit der Zähler weiter läuft. Die erforderliche Firmware für den "Volkszähler dazu gibt es kostenfrei. Allerdings ist diese relativ "dumm" und gibt wohl nur die Impulse weiter.
Achtung
Der GPIO-Stecker links auf dem Bild muss
"rückseitig" aufgesteckt werden. Der Stecker vom
RaspI kommt dann von unten durch die Platine
nach oben. Die Platine hat entsprechende löcher und dann gehen die Anschlüsse auch wirklich aus
dem RasPi-Gehäuse raus.
Firmware für SD0
http://busware.googlecode.com/svn/trunk/SD0/Firmware_VZ/vzfeeder/main.hex
Auf http://www.s0control.de/ gibt es sogar eine passende Software für das Auslesen und Visualisierung mit dem Raspi. Aber mit ein bisschen Geschick schaffen Sie das auch allein mit folgenden Schritten:
- WinAVR von
http://winavr.sourceforge.net
herunterladen und installieren
Das Default Setup addiert das Programmverzeichnis im Pfad, so dass Sie den "Make" später einfach starten können. Wenn Sie aber andere EntwicklungsUmgebungen mit "make.exe" nutzen, kann das stören. - Tortoise Client (optional)
Wenn Sie nicht alle Dateien aus der Quelle manuell herunterladen wollen, dann ist ein lokal installierter SVN-Client eine einfache Möglichkeiten die aktuelle Version auszuchecken. - Source herunterladen
Auf http://code.google.com/p/busware/source/browse/trunk/SD0#SD0%2FFirmware_common die aktuelle Version aller Dateien in ein eigens angelegtes Verzeichnis (z.B. C:\SD0) herunterladen - Datei Kompilieren
Dazu öffnen Sie eine CMD-Box, wechseln nach C:\SD0, und geben dann einfach "MAKE" ein. Über den Suchpfad findet Windows die WinAVR-Programme, kompiliert die C-Dateien und erstellt ein HEX-File "main.hex"
Diese HEX-Datei können Sie nun auf den SD0 brennen lassen.
Die Firmware bleibt auch nach dem Ausschalten erhalten. Aber sie müssen erst die GPIO17/27-Pins richtig schalten, damit der Atmel auch "bootet"
Die Kommunikation zwischen dem RasPi und dem SD0 erfolgt über den seriellen Anschluss und entsprechende Steuerbefehle. Die lassen sich aus der ebenfalls als Source vorliegenden Datei (http://code.google.com/p/busware/source/browse/trunk/SD0/Firmware_VZ/serial.c) auslesen. Der kleine Atmel liest den seriellen Port byteweise aus, bis ein CHR(13) auftaucht. Das erste Zeichen im Buffer gibt die Aktion vor
- . (Punkt)
Ausgabe der Eingabe, quasi ein "Echo" - v oder V
Ausgabe der Version - l oder L
Ausgabe des Status von PinB - x oder X
Reboot des Atmel - ?
Rückgabe des "unverstandenen" Zeichens
Erst die "Firmware_common" aus http://code.google.com/p/busware/source/browse/trunk/SD0/?r=72#SD0%2FFirmware_common erlaubt folgende weitere Funktionen
- a oder A
Liefert alle vier Kanäle - c
Liefert die Uhrzeit - C
Vergangene Zeit in ms - t oder T gefolgt von einer
Ziffer 0-3
Liefert den Count des angegebenen Kanals - p oder P gefolgt von einer
Ziffer 0-3
Liefert die Periode des angegebenen Kanals - r oder R gefolgt von einer
Ziffer 0-3 oder Buchstabe a-d
Liefert den kompletten Datensatz dieses Kanals mit Counter, Mittelwerte, Min, Max etc.
Ein "R" setzt die Statistiken der gemessenen Periode zurück aber nur, wenn seit der letzten Messung und dem aktuellen Aufruf keine weiteren Ereignisse aufgelaufen ist.
Die genaue Funktion können Sie im Sourcefile auf http://busware.googlecode.com/svn/trunk/SD0/Firmware_common/serial.c selbst nachschauen. Diese Firmware liegt aber nicht als HEX-File vor und muss von ihnen also selbst kompiliert werden. Dazu müssen Sie aber nur die Quellen herunterladen und z.B. mit WinAVR (http://sourceforge.net/projects/winavr/files/) kompilieren
Achtung:
Wenn Sie die Dateien von code.google.com
herunter laden, sollten Sie das "Raw"-File
rechts wählen oder gleich z.B. per Tortoise aus
dem
Subversion Repository laden.
- KNX Userforum: Raspberry und
SD0
http://knx-User-forum.de/knx-eib-forum/24918-raspberry-und-sd0.html - Kampis Elektroecke: Der USART
http://kampis-elektroecke.de/?page_id=1682
Projekte
Ich denke ich werde nicht mehr selbst hier aktiv. Es gibt schon entsprechende Projekte
- Stromzähler mit
S0-Schnittstelle vom Raspberry
Pi auswerten
http://blog.webernetz.net/2014/10/13/stromzahler-mit-s0-schnittstelle-vom-raspberry-pi-auswerten/ - S0-Stromzähler am
RaspberryPi
http://www.skrue.de/wp/?p=41
Weitere Links
- SMA ENERGY METER
http://www.sma.de/produkte/monitoring-systems/sma-energy-meter.html
Achtung RJ-45 Anschluss ist 10/100MBit Speedwire, also ein Feldbus und kein Ethernet