Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Ferrariszähler Lesekopf für Raspberry Pi
In vielen Haushalten wird ein Ferrariszähler vom Energieversorger eingesetzt. Auch bei Photovoltaikanlagen wurde / wird dieser als Einspeise- oder Summenzäler verbaut. Es sind zum Teil zwar auch S0 Ausgänge an den alten Ferrariszählern vorhanden, welche aber durch den Energieversorger verplombt wurden. Für einen Anschluss am Ferrariszähler S0 Ausgang muss daher ein Tecniker anrücken. (im Raum SHK schlägt dies mit 180€ zu Buche).
Mit dem Ferrariszähler- Lesekopf für Raspberry Pi kann die Drehscheibe abgetastet und die Anzahl der Durchläufe der Rot- Markierung ermittelt werden. Somit kann der Techniker- Einsatz gespart werden.
Ein Test System ist hier zu finden (Photovoltaik Summenzähler).
Features
- eine Leuchtdiodenanzeige, um den Lesekopf richtig auszurichten
- Potenziometer zur Justage der Empfindlichkeit des Lesekopfs
- Anschluss direkt am GPIO Port des Raspberry
- Erfassung bis zu 7 S0- Kanäle über den GPIO Port möglich
- durch doppelseitiges Klebeband jederzeit demontierbar
Die Java Aplikation kann auch für die Erfassung von LED Zähler Impulsen verwendet werden. → Doku Folgt!
Stromlaufplan
Die Grundschaltung wurde von hier abgeleitet. Das Leiterplattenlayout wurde mit Target 3001 (Conrad Edition) erstellt und dort gefertigt.
Bestückungsplan
Durch die Verwendung der traditionellen HMD Löttechnik kann die Leiterplattenbestückung ohne spezielle Werkzeug erfolgen.
Hier ist die Target3001 Datei welche nur mit der Kostenlosen Target Version von Conrad zu verwenden ist.
Stückliste
Im „Modul-Gehäuse ABS“ müssen eine Ausparungen für den CNY70 (Vorderseite), die LED, dem Spindeltrimmer und das Flachbandkabel hergestellt werden.
Software -> Anbindung an Volkszählermiddleware
Zur Datenerfassung wird eine Java Applikation, die mit Hilfe der pi4j Bibliotheken den GPIO Port überwacht, die Impulse über ein konfigurierbares Zeitintervall aufsummiert und an den lokalne VZ-Server sowie an einen externen Server überträgt.
Auf dem Rapberry muss die Java JRE installiert sein:
apt-get update && apt-get install openjdk-7-jre
Für die Installation von pi4j sind folgende Schritte nötig:
wget http://pi4j.googlecode.com/files/pi4j-0.0.5.deb
sudo dpkg -i pi4j-0.0.5.deb
Für Debuggin- Zwecke wird log4j benutzt. Dies ist zum Debugging im Java s0_logger implementiert und muss daher mit installiert werden:
wget http://mirror.derwebwolf.net/apache/logging/log4j/2.0.2/apache-log4j-2.0.2-bin.tar.gz
tar -xzf apache-log4j-2.0.2-bin.tar.gz && rm apache-log4j-2.0.2-bin.tar.gz
mv apache-log4j-2.0.2-bin/ /opt/log4j
Der Java s0_logger: Hier gibt es die compilierte Java Routine zum Abfragen der GPIO Ports.
mkdir /opt/s0_logger
wget hier kommt der Link zur Java Aplikation
ln -s /opt/log4j/log4j-1.2-api-2.0.2.jar /opt/log4j/log4j-api-2.0.2.jar /opt/log4j/log4j-core-2.0.2.jar /opt/s0_logger/
Es müssen noch zwei Konfigurationsdateien im Verzeichniss „/opt/s0_logger/“ angelegt werden:
config.properties
## SERVER eigener Volkszaehler Remote-Server !nicht localhost! serv.url=http:// serv.page=middleware.php/data/ serv.timeout=5600 ## Datenbank local, middleware Volkszaehler (Hier nur das Unterverzeichniss angeben) (http://localhost/"Unterverzeichniss") vz.page=volkszaehler.org/htdocs/middleware.php/data/ vz.timeout=5400 ## GPIO Zuordnung für Java Aplikation # PIN 11:Port 0 # PIN 12:Port 1 # PIN 13:Port 2 # PIN 15:Port 3 # PIN 16:Port 4 # PIN 18:Port 5 # PIN 22:Port 6 # PIN 7 :Port 7 ## Hier sind die auszulesenden GPIO Ports zu aktivieren; der Port 0-7, aktiv 1 / inaktiv 0 gpio.ports=1,0,0,0,0,0,0 ## S0 Bezeichungen s0.name=Verbraucher1, Verbraucher2, Verbraucher3, Verbraucher4, Verbraucher5, Verbraucher6, Verbraucher7 ##Hier sind die Impulse/kWh ein zu tragen s0.impulse=500,1000,1200,300,700,1500,900 ## S0 Volkszaehler UUID: Erzeugt über das Frontend des VZ, Typ S0-Impulse (z.B. Eklektrische Energie (S0-Impulse)) s0.uuid=XXX-XXX-XXX-XXX-XXX,XXX-XXX-XXX-XXX-XXX,XXX-XXX-XXX-XXX-XXX,XXX-XXX-XXX-XXX-XXX,XXX-XXX-XXX-XXX-XXX,XXX-XXX-XXX-XXX-XXX,XXX-XXX-XXX-XXX-XXX ## Intervall [s]: Intervall Akkumulierung, Datenübertragung s0.interval=30 ## Impulslänge [ms]: Mindestlänge S0-Impulse ## um Fehldetektionen des Ferraris Zähler zu verhindern muss hier eine minimale erforderliche Zeit in ms zwichen zwei Impulsen festgelegt werden. s0.duration=100
log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug"> <Properties> <Property name="log-path">logs</Property> </Properties> <Appenders> <RollingFile name="file-log" fileName="${log-path}/S0-Logger-info.log" filePattern="${log-path}/S0-LoggerX-info-%d{yyyy-MM-dd}.log"> <PatternLayout> <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies> </RollingFile> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="de.solarautonomie" level="info" additivity="false"> <appender-ref ref="file-log" level="info"/> </Logger> <Root level="info" additivity="false"> <appender-ref ref="console"/> </Root> </Loggers> </Configuration>
Zum automatischen starten kann folgender Script verwendet und über den Cronjob aufgerufen werden: startS0.sh
#!/bin/bash S0=$(pgrep -f "S0.jar" > /dev/null 2>&1 && echo "aktiv" || echo "inaktiv") if [ $S0 == inaktiv ]; then cd /opt/pi4j/lib/ java -Xmx64m -Djava.awt.headless=true -classpath .:classes:/opt/pi4j/lib/'*' -cp .:S0.jar:log4j-core-2.0.2.jar:pi4j-core.jar de.solarautonomie.classS0_Sensor >S0-startup-log 2>&1 & fi
Ausführbar machen:
chmod a+x startS0.sh
crontabe Beispiel
@reboot root (cd /Verzeichniss/wo/start/Script_liegt && ./startS0.sh)
GPIO Anschluss
Bilder