Der Listener, das unbekannte Wesen und andere Fortschritte

Zum Stand der Dinge.

Hier seht Ihr den aktuellen Fortschritt des Projekts.

2015-07-17-Architektur-SchaubildFür das Logging von Informationen habe ich mich für den defacto Standard Log4J entschieden.  Bislang gebe ich nur auf STD OUT statt in eine Datei, aber das ist (soweit ich gesehen habe) nur noch eine Konfigurationssache.

Den Bereich der extern ausgelagerten Konfiguration (Kasten: „Config“) habe ich ebenfalls gelöst. Ursprünglich hatte ich mir zunächst die Crunchify Lösung aus dem Internet angesehen mich dann aber doch nach einigem hin und her für eine eigene Lösung entschieden. Diese habe ich in dem Artikel Konfigurationsdateien beschrieben.

Mit der OBID Listener Komponente habe ich nun angefangen mit der Entwicklung. Leider stieß ich relativ schnell auf komische Efffekte. Hier habe ich auch schon eine Supportanfrage gestellt bin aber guter Dinge das mir da die FEIG ELECTRONIC GmbH auf die Sprünge helfen kann.

Die Türe mit dem PiFace Digital 2 öffnen

Meine Recherche war erfolgreich und ich konnte eine kleine Java Klasse erstellen mit der ich den OpenCollector Ausgang (OUT PIN 0) für 500 Millisekunden öffnen (also auf GND ziehen) kann.

Ursprünglich wollte ich mit der Klasse com.pi4j.device.piface.PiFace arbeiten, leider kommt aber Java nach Ausführung nicht wieder zurück.

Ein strace hat ergeben, dass Java auf die Beendigung eines Prozesses wartet. Die angegebene PID im strace war aber nicht mehr im system vorhanden, damit würde die Classe sich wohl nicht wieder beenden. Daher bin ich umgestiegen auf die etwas weiter unten liegende com.pi4j.io.gpio Klassen.

Und hier das Ergebnis:

// Importing Libraries
import com.pi4j.gpio.extension.piface.PiFaceGpioProvider;
import com.pi4j.gpio.extension.piface.PiFacePin;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.spi.SpiChannel;
import java.io.IOException;

/**
 * 
 * @author Michael Oberdorf
 * @version 0.100
 * Description:
 *   PiFaceOut is the class to control the PiFace Digital 2 Output Ports
 *   The Class uses the Pi4J GPIO interface instead of the device.piface class because
 *   the finalizing is defect there.
 *   The GpioController can be shutdown 
 *
 */
public class PiFaceOut {
    public static void main(String args[]) throws InterruptedException, IOException {
        // create gpio controller
        final GpioController gpio = GpioFactory.getInstance();

        // Trigger the Out PIN 00 for 500 milliseconds to open the entrance door
        openDoor(gpio, 500);

        // shut down the interface to clean up native heap from WiringPi
        gpio.shutdown();
    }
    
    /**
     * 
     * private method to trigger the digital output pin 0 to open the entrance door
     * @param gpio (GpioController)
     * @param time (int)
     * @throws IOException
     * @throws InterruptedException
     *
     */
    private static void openDoor(GpioController gpio, int time) throws IOException, InterruptedException {
        // create custom PiFace GPIO provider
        final PiFaceGpioProvider gpioProvider = new PiFaceGpioProvider(PiFaceGpioProvider.DEFAULT_ADDRESS, SpiChannel.CS0);

        // provision gpio output pins and make sure they are all LOW at startup
        GpioPinDigitalOutput myOutputs[] = {
                gpio.provisionDigitalOutputPin(gpioProvider, PiFacePin.OUTPUT_00)
        };

        // pull digital out pin to GND (OpenCollector)
        gpio.setState(true, myOutputs);
        // sleep for a while
        Thread.sleep(time);
        // close the digital out pin
        gpio.setState(false, myOutputs); 
    }
}

Raspberry PI B+

Der neue (alte) Raspberry PI B+ ist nun da und für den Anderen habe ich auch schon einen Abnehmer gefunden.
Das PIFace Digital 2 habe ich dieses mal gleich aufgesteckt, von der PI USV habe ich leider noch nichts gehört.
Das Raspbian Image ist ja das selbe, daher konnte ich ohne Downloads gleich wieder starten den Server zu konfigurieren.
Die Libraries der Feig GmbH waren auch schnell in /usr/lib  untergebracht inklusive der Symlinks. Der erste Test war auch erfolgreich. Die Libraries liesen sich mit Java initialisieren.
Apropos Java, hier muss ich gleich noch schauen ob es da auch was für das PiFace gibt.
URLs die ich zu dem Thema gefunden habe:
Das klingt schon mal interessant und muss ich mir demnächst mal noch näher ansehen.

Neue Serverplatform

Nachdem ich den Raspberry PI 2 B nicht mit den Libs der Firma FEIG verheiraten konnte, hab ich meinen Raspberry PI B ausprobiert, und es hat alles auf anhieb funktioniert. Was mich nun zu dem Entschluß gebracht hat den PI 2 aufzugeben.

Um die restlicher Peripherie behalten zu können, habe ich nun einen Raspberry PI B+ bestellt. Damit wird auch die bestellte USV (auf die warte ich noch immer) und das PiFace Digital 2 arbeiten (so hoffe ich zumindest).

Vieleicht habe ich sogar Glück und das Hutschienengehäuße passt zum B+. Jedenfalls gibt es im Netz genügend Gehäuse die bei beiden funktionieren.

Der Firma FEIG habe ich jedoch positives Feedback gegeben und warte nun auf die Rechnung damit der Leser endlich mein Eigen wird 🙂

Server Platform und generelle Infrastruktur

Also, nachdem der Kartentyp klar war, sind 3 Dinge zu klären

  1. ein passender RFID Leser der im Außenbereich einzusetzen ist
  2. das Protokoll bzw. der Anschluß mit dem ich mit dem Leser kommunizieren kann. Zur Auswahl stehen Serial, USB, Bluetooth und Ethernet.
  3. Die Server Platform

Alle 3 Dinge müssen passen und gut zusammenspielen.

Was das Protokoll angeht, Bluetooth fand ich zu unsicher, USB hat Probleme bei langen Kabellängen. Also bleibt Serial und Ethernet.
Da die Türe leider früher kam als erwartet, hatte ich weder Serverplatform noch RFID Leser gewählt, daher habe ich mich mich Ethernet entschieden.

Zum einen erschien es mir am flexibelsten, denn im Ernstfall kann ich auch ein Adernpaar für eine Serielle Verbindung zweckentfremden, zum anderen hatte ich noch genug Ethernet Kabel zu Hause.

Um mal einen Anfang zu finden habe ich mich nun für einen Raspberry entschieden. Der is ja auch so hip derzeit.

Nur wo betreibe ich den? Also am besten ist es den doch gleich im Sicherungskasten unterzubringen.

Und ich habe tatsächlich ein Hutschienen Gehäuse gefunden.

Die Serverplatform ist nun ein Hutschienengehäuse, ein Raspbery PI2 und ein Hutschienen Traffo. Das kam alles schnell an und ich konnte den auch gleich in Betrieb nehmen (mal mit Handy Ladenetzteil auf meinem Schreibtisch),

2 Dinge waren noch zusätzlich zu klären:

  1. Was machen bei einem Stromausfall
  2. Wie steuere ich die Türe an

Für den ersten Punkt habe ich mich für die PI USV+ von CW2.com entschienden, auf die Auslieferung warte ich derzeit.

Für den zweiten Punkt gäbe es entweder eine Billige Lösung in der ich mich in Elektronik einlernen muss oder eine vorgefertigte Lösung. Ich habe mich für letzteres entschieden, etwas gegoogelt und dann das PiFace Digital 2 Borad gekauft das ich schon zu Hause liegen habe. Das Board bietet sowohl 2 Relais (für die man zusätzlich 5V spannung benötigt) als auch diverse digitale Ausgänge.

Nach einigen Mails mit meinem Schwager und der Messung der Kontakte an der Haustüre (4V, 3mA) versuche ich wohl zunächst die digitalen Open Collector Ausgänge zu nutzen. Sollte theoretisch funktionieren wenn ich den positiven Draht auf den digitalen Ausgang hänge und den negativen auf GND. Nun, mal abwarten ob ich mir damit das Board zerschieße oder ich richtig überlegt habe.