======Ferrariszähler Lesekopf für Raspberry Pi====== {{ :hardware:controllers:ferraris_rpi:alte_ferrariszaehler.jpg?nolink&200|}} In vielen Haushalten wird ein Ferrariszähler vom Energieversorger eingesetzt. Auch bei Photovoltaikanlagen wurde / wird dieser als Einspeise- oder Summenzähler 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 Techniker 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 [[http://volkszaehler.solarautonomie.de/frontend/?uuid=30d92400-a7c4-11e3-8460-e1409057da36|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 8 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- / S0-Zähler Impulsen verwendet werden. -> Doku folgt! ===== Stromlaufplan ===== Die Grundschaltung wurde von [[http://www.hobbyheizer.de/index.php/haussteuerung/stromzaehler|hier]] abgeleitet. Das Leiterplattenlayout wurde mit Target 3001 (Conrad Edition) erstellt und dort gefertigt. {{ :hardware:controllers:ferraris_rpi:schaltplan_ferraris_rpi.jpg?450 |}} ===== Bestückungsplan ===== Durch die Verwendung der traditionellen HMD Löttechnik kann die Leiterplattenbestückung ohne spezielles Werkzeug erfolgen. {{:hardware:controllers:ferraris_rpi:leiterplatte_ferraris_rpi.jpg?200|}}{{:hardware:controllers:ferraris_rpi:leiterplatte_bestueckt_oben.jpg?200|}}{{:hardware:controllers:ferraris_rpi:leiterplatte_bestueckt_unten.jpg?200|}} Ursprünglich vorgesehen war eine RJ12 Stecker und eine RJ12 6P6C Buchse. Aus Kostengründen und der Montagevereinfachung wurde dies jedoch beim fertigen Lesekopf weggelassen. Dies ist aber weiterhin auf der Platine vorgesehen. Hier ist die Target3001 Datei hinterlegt, welche nur mit der kostenlosen Target Version von Conrad zu verwenden ist. {{:hardware:controllers:ferraris_rpi:ferraris_zaehler_sensor_v02.t3000.tar.gz|}} {{:hardware:controllers:ferraris_rpi:61182c_gerbers.zip|}} ===== Stückliste ===== ^ **Position** ^ **Schalplanbezeichnung** ^ **Beschreibung** ^ **Stück** ^ **Völkner Best Nr.** ^ **Preis** ^ **Farnell Best Nr.** ^ **Preis** ^ | 1 | R1 | Metallschichtwiderstand 0,25W 1% 1Ok (bei Abnahme 100 Stück) | 1 | W76567 | 0,03€ | 2329855 | 0,02€ | | 2 | R2 / R4 | Metallschichtwiderstand 0,25W 1% 180r (bei Abnahme 100 Stück ) | 2 | W 76744 | 0,03€ | 2329818 | 0,02€ | | 3 | R3 | Metallschichtwiderstand 0,25W 1% 22k (bei Abnahme 100 Stück) | 1 | W76256 | 0,02€ | 2329910 | 0,02 | | 4 | C1 | Elko axial 1 µ F 35V | 1 | W45777 | 0,43€ | 1165430 | 0,77€ | | 5 | R5 | Spindeltrimmer 25k (Einsteller Oben) | 1 | W5 1657 | 1,44€ | 2329327 | 2,31€ | | 6 | D1 | LED 3mm Low -Current Rot | 1 | Q13006 | 0,19€ | 1142512 | 0,31€ | | 7 | X1 | Opto-Reflexkoppler CNY 70 | 1 | Q61519 | 1,23€ | 1470063 | 1,23€ | | 8 | IC2 | Optokoppler Vishay CNY 17-1 DIP 6 Ausführung Phototransistor/Single | 1 | Q17589 | 0,5€ | 1852714 | 0,21€ | | 9 | IC1 | Operationsverstärker Texas Instruments TLC271CP\\ GehäuseartDIP-8 Ausfü hru ng | 1 | Q39651 | 0,86€ | 1103011 | 0,84€ | | 10 | - | Modul-Gehäuse ABS Schwarz 54 x 37 x 21 Strapubox | 1 | S55511 | 1,76€ | | | | 12 | - | Flachband -Telefonleitung 4 x 0.09 mm x 1m | 2 | X70890 | 0,84€ | 1202608 | 0,65€ | | 15 | - | RICHCO - PST-4-01 - DRUCKABSTANDSHALTER TEARDROP (Packung\\ mit 25 Stück ) | 4 | - | | 1675883 | 0,26€ | | ** ** **Zwischensumme**|||||7,33€| | 6,64€ | | 16 | | Grundplatine (Preis bei Mindestabnahmemenge Conrad Leiterplattenservice 10 Stück) | | | 11,00€ | | 11,00€ | | 17 | | Pfostenstecke für GPIO Port | | | | | | 18 | | Klebeband | | | | | | Stand : 11 .09 .20 14 || **Endsumme**||| 18,33€ | | 17,64€ | Im "Modul-Gehäuse ABS" müssen Ausparungen für den CNY70 (Vorderseite), die LED, den Spindeltrimmer und das Flachbandkabel vorgesehen werden. ===== Software -> Anbindung an Volkszählermiddleware mit Java Applikation===== Zur Datenerfassung wird eine Java-Applikation eingesetzt, die mit Hilfe der [[http://pi4j.com/|pi4j]] Bibliotheken den GPIO Port ereignisgesteuert überwacht, die Impulse über ein konfigurierbares Zeitintervall aufsummiert und an den lokalen VZ-Server sowie an einen externen Server überträgt. Auf dem Raspberry muss die Java JRE installiert sein: apt-get update && apt-get install openjdk-7-jre ---- \\ Für die Installation von [[http://pi4j.com/|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 Debugging-Zwecke wird [[http://logging.apache.org/log4j/|log4j]] benutzt. Dies ist 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: {{:hardware:controllers:ferraris_rpi:s0.jar.zip|Hier (v2.9.1 22.09.14)}} gibt es die compilierte Java Routine zum Abfragen der GPIO Ports. mkdir /opt/s0_logger cd /opt/s0_logger wget http://wiki.volkszaehler.org/_media/hardware/controllers/ferraris_rpi/s0.jar.zip unzip s0.jar.zip 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/pi4j/lib/pi4j-core.jar /opt/s0_logger/ ---- \\ Es müssen noch zwei Konfigurationsdateien im Verzeichniss "/opt/s0_logger/" angelegt werden: {{:hardware:controllers:ferraris_rpi:config.properties.zip|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 ##Hier sind die Impulse/kWh ein zu tragen s0.impulse=500,1000,1200,300,700,1500,900 #maximale Leistungen auf den Kanälen für Plausibilisierung in kW s0.P_max=5.0,10,10,10,10,10,10,10 ## 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 \\ {{:hardware:controllers:ferraris_rpi:log4j2.xml.zip| log4j2.xml}} logs [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n Mittels Log-Level „info“ können die Programmschritte im Einzelnen überwacht werden; per „error“ kann das auf Fehlermeldungen reduziert werden. ---- \\ Zum automatischen Starten kann folgendes Script verwendet und über den Cronjob aufgerufen werden:\\ \\ {{:hardware:controllers:ferraris_rpi:starts0.sh.zip|startS0.sh}} #!/bin/bash S0=$(pgrep -f "S0.jar" > /dev/null 2>&1 && echo "aktiv" || echo "inaktiv") if [ $S0 == inaktiv ]; then java -Xmx64m -Djava.awt.headless=true -cp .:S0.jar:pi4j-core.jar:log4j-1.2-api-2.0.2.jar:log4j-api-2.0.2.jar:log4j-core-2.0.2.jar de.solarautonomie.classS0_Sensor >S0-startup-log 2>&1 & fi Also Startscript, log4j2.xml, config.properties und S0.jar liegen alle im gleichen Verzeichnis (/opt/s0_logger/). Ausführbar machen: chmod a+x startS0.sh crontab Beispiel @reboot root (cd /Verzeichniss/wo/start/Script_liegt && ./startS0.sh) ===== GPIO Anschluss ===== Der Ferrariszähler Lesekopf benötig eine Versorgungsspannung von 5V. Daher ist es nötig, den RJ12 Buchsenkontakt 2 mit dem PIN 2 der GPIO-Leiste zu Verbinden (+5V). Der RJ12 Buchsenkontakt 4 muss mit dem PIN 6 der GPIO-Leiste verbunden werden (Ground). Die CNY17 Ausgänge, RJ12 Buchsenkontakte 3 und 5, sind mit dem gewünschten GPIO-Port zu Verbinden. Wobei zu beachten ist, dass der RJ12 Buchsenkontakt 3 an das +3V Signal anzuschliesen ist und der RJ12 Buchsenkontakt 5 an einen der folgenden GPIO-Ports (=Ground): {{:hardware:controllers:ferraris_rpi:basic-gpio-layout.png?300 |}} ^ GPIO Header ^ GPIO Kanal\\ s0_logger ^ | 11 | 1 | | 12 | 2 | | 13 | 3 | | 15 | 4 | | 16 | 5 | | 18 | 6 | | 22 | 7 | | 7 | 8 | {{:hardware:controllers:ferraris_rpi:gpio-pins.jpg?300 |}} ^ RJ12 Buchse ^ GPIO Header ^ Ader\\ Flachbandkabel ^ | 1 | - | - | | 2 | +5V (2 / 4) | gelb | | 3 | +3V (1 / 17) | grün | | 4 | Ground (6 / 9 /\\ 14 / 20 / 25) | rot | | 5 | GPIO Kanal\\ s0_logger | braun | | 6 | - | - | {{:hardware:controllers:ferraris_rpi:leiterplatte_rj12_ferraris_rpi.jpg?150 |}} Bild anklicken und vergrößern\\ um PIN Belegung zu sehen! ===== Montage am Zähler ===== Hier muss noch eine Beschreibung rein wie die Montage am Zähler erfolgt! ===== Bilder ===== {{:hardware:controllers:ferraris_rpi:ferraris_lesekopf_rpi_01.jpg?nolink&300|}} {{:hardware:controllers:ferraris_rpi:ferraris_lesekopf_rpi_03.jpg?nolink&300|}} \\ {{:hardware:controllers:ferraris_rpi:ferraris_lesekopf_rpi_02.jpg?nolink&300|}} {{:hardware:controllers:ferraris_rpi:ferraris_lesekopf_rpi_04.jpg?nolink&300|}} \\ {{:hardware:controllers:ferraris_rpi:lesekopf_an_zaehler.jpg?250|}}