steckbrief steuerkonsole rpi

 

                        PC_DIMMER_Server (Java-App für RaspberryPi) | RoomControl (Android-App als Quelltext)

Mit der hier vorgestellten Steuerung kann man mit einem RaspberryPi und dem PC_DIMMER RS232-Dimmerpack oder der RS232-RGBW-LED-Steuerung ohne weiteres Zubehör mittels Handy das Licht dimmen. Da sowohl das RS232-Dimmerpack als auch die RS232-RGBW-LED-Steuerung einen eigenen Dimmerkernel besitzt, kann man Ein- und Ausblendungen (also Szenensteuerungen mit sanften Übergängen) direkt ohne weiteres Zutun mit einem einzelnen Befehl ausführen. Zudem lässt sich der PC_DIMMER_Server auch in die Heim-Automatisierungssoftware FHEM integrieren (siehe Artikel PC_DIMMER meets FHEM).

 

Kurzinfos:

  • sehr flexible und komfortable Steuerung über Handy
  • bei vorhandenen Linux- und Android-Kenntnissen sehr leicht erweiterbar
  • an einem Wochenende fertigbar
  • RaspberryPi mit Java 8-Anwendung als Netzwerkserver (WLAN und/oder LAN)
  • Am RaspberryPi wird per interne UART-Schnittstelle ein RS232-PC_DIMMER-Dimmerpack angeschlossen
  • Eine Android-App verbindet sich mit dem Java-Server auf dem RaspberryPi, um das Licht zu steuern

 

Grundsätzliche Verbindung der Komponenten:

 RPi RS232 Dimmerpack

Hier einmal eine Schritt-Für-Schritt-Anleitung, mit der man an einem Wochenende das System einrichten können sollte:

 

  • Raspbian in der Minimalvariante herunterladen (Download) und mittels BalenaEtcher (Download) oder einem anderen Tool auf eine 8GB Mikro-SD-Karte flashen
  • RaspberryPi mit HDMI-Monitor und USB-Tastatur booten
  • Raspbian einrichten
    • sudo raspi-config (ggfs. Netzwerk einrichten, Tastaturlayout und Sprache setzen, I2C, HDMI oder andere Dinge einstellen)
    • sudo nano /etc/dhcpcd.conf (hier kann man am Ende ggfs. eth0 oder wlan0 auf statische IP-Adresse setzen - dies ist die modernere Variante im Vergleich zu /etc/network/interfaces)
  • wenn man einen USB-RS232-Wandler verwendet kann man direkt mit dem nächsten Schritt weitermachen (Anschluss ist dann meist: /dev/ttyUSB0)
  • sofern man aus Kostengründen den internen UART-Anschluss verwenden möchte (was eigentlich das sinnvollste ist), muss dieser noch aktiviert und das Bluetooth-Modul umkonfiguriert werden, da bei den neueren RaspberryPis (ab Version 3) das Bluetooth-Modul den echten Hardware-UART (/dev/ttyAMA0) verwendet und ohne weiteres zutun nur die emulierte minimal-UART /dev/ttyS0 zur Verfügung steht, womit aber keine stabilen höheren Baudraten möglich sind (weitere Infos hier):
    • sudo nano /boot/config.txt und folgende drei Zeilen am Ende einfügen, um Bluetooth abzuschalten und die Hardware-UART auf GPIO14 und 15 zu setzen:
      • enable_uart=1
      • dtoverlay=miniuart-bt
      • dtoverlay=disable-bt
    • ggfs. die Konsolenausgabe auf die UART deaktivieren: sudo nano /boot/cmdline.txt und den Befehl console=serial0,115200 entfernen
    • nun noch den Bluetooth-Modem-Treiber vollständig deaktivieren:
      • sudo systemctl disable hciuart
    • wenn man möchte, kann man die genutzten Pins an der Headerleiste noch in der /boot/config.txt ändern:
      • dtoverlay=uart0,txd0_pin=14|32|36 (default 14)
      • dtoverlay=uart0,rxd0_pin=15|33|37 (default 15)

Nun sollte die Hardware soweit fertig sein - es folgt die Software

 

 

Java 11 wird von Pi4J für die RS232-Kommunikation wohl noch nicht komplett unterstützt. Deshalb nutze ich persönlich Java 8, weshalb man etwas mehr Aufwand betreiben muss:

  • Manueller Download von Java 8 (32-Bit hflt-Variante) von der offiziellen Oracle-Website (Download)
  • Kopieren der *.tar.gz-Datei auf den RaspberryPi (am einfachsten über einen USB-Stick oder über ein gemountetes Netzwerklaufwerk). Ein Netzwerklaufwerk kann man wie folgt mounten:
    • Installieren der cifs-tools für Windows-Netzwerke: sudo apt update && sudo apt install cifs-tools
    • Mountpoint einrichten: sudo mkdir /mnt/netdrive
    • fstab einstellen: sudo nano /etc/fstab
      • //192.168.0.xxx/UNTERVERZEICHNIS /mnt/netdrive cifs credentials=/etc/auth,uid=1000,gid=1000,vers=2.1,noserverino 0 0
    • Zugangsdaten einstellen: sudo nano /etc/auth
      • Username=BENUTZERNAME
      • Password=PASSWORT
    • Mounten: sudo mount /mnt/netdrive
  • Entpackender gepackten Datei:
    • tar -xvzf jdk-8u211-linux-arm32-vfp-hflt.tar.gz
  • gesamtes entpacktes Verzeichnis nach /opt/ verschieben:
    • sudo mv jdk1.8.0_211 /opt/
  • Nun für Raspbian einen Link einrichten, damit man Java vernünftig nutzen kann:
    • sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_211/bin/javac 1
    • sudo update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_211/bin/java 1
    • sudo update-alternatives --config javac
    • sudo update-alternatives --config java
  • nun kann man testen, ob Java auch funktioniert:
    • java -version

 

  • Installation der Java-Library rxtx: sudo apt-get install librxtx-java
  • Download des Java-Servers: PC_DIMMER_Server_Java.zip
  • entpacken mit unzip PC_DIMMER_Server_Java.zip
  • mit nano settings.json kann man UART-Port, Baudrate und Netzwerkport einstellen
  • Man kann aus dem Unterverzeichnis "dist" direkt die Software starten: java -jar PC_DIMMER_Server.jar
  • leider wird der Port /dev/ttyAMA0 nicht direkt unterstützt, da die verwendete UART-Komponente eigentlich /dev/ttyUSB... erwartet. Mittels folgendem Befehl kann man /dev/ttyAMA0 direkt forcieren:
    java -Dgnu.io.rxtxSerialPorts=/dev/ttyAMA0 -jar PC_DIMMER_Server.jar
  • Sofern ein Fehler bzgl. der rxtx-Lib angezeigt wird, den Aufruf des Java-Programms um folgenden Teil ergänzen: -Djava.library.path=/usr/lib/jni:
    java -Djava.library.path=/usr/lib/jni -Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0 -jar PC_DIMMER_Server.jar

 

Die Software kann mittels der kostenlosen Software NetBeans IDE oder jeder anderen Java-IDE (z.B. Eclipse) bearbeitet und kompiliert werden, da sie auch im Quelltext vorliegt (im Unterordner src\pc_dimmer_server)

 

Hat man auf den Pi über eine SSH-Verbindung zugegriffen, wird das Java-Programm üblicherweise nach Beenden der SSH-Verbindung ebenfalls beendet. Entweder nutzt man das Tool "screen", um Programme außerhalb des Kontext der SSH-Verbindung zu starten, oder man lässt den PC_DIMMER_Server als Service laufen. Hierzu legt man als erstes ein kleines Start-Script an:

sudo nano /opt/PC_DIMMER_Server/pcdimmer.sh

#!/bin/sh
sudo java -Djava.library.path=/usr/lib/jni -Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0 -jar /opt/PC_DIMMER_Server/dist/PC_DIMMER_Server.jar

Anschließend noch mit "sudo chmod +x /opt/PC_DIMMER_Server/pcdimmer.sh" die Datei ausführbar machen. Nun kann man dieses Bash-Script als Service anlegen:

# pcdimmer-server / eigenen Service einrichten
sudo nano /etc/systemd/system/pcdimmer-server.service

##### den Inhalt einfügen ####
[Unit]
Description=PC_DIMMER_Server

[Service]
User=pi
# Eine mögliche Konfigurationsdatei könnte hier eingetragen werden

# path zum Arbeitsverzeichnis
WorkingDirectory=/opt/PC_DIMMER_Server

# hier wird der path zur bash Datei, die den eigentlichen script-Aufruf beinhaltet
# Die Datei heisst hier "pcdimmer.sh"
ExecStart=/opt/PC_DIMMER_Server/pcdimmer.sh

SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
#### Ende #####################

 

Nachfolgende Befehle können nun für den Service verwendet werden:

# systemctl neu starten
sudo systemctl enable pcdimmer-server.service
sudo systemctl daemon-reload
sudo systemctl start pcdimmer-server.service
sudo systemctl status pcdimmer-server.service

 

Der PC_DIMMER_Server bietet über einen TCP-Port eine Telnet-Schnittstelle, die man sehr einfach testen kann. Hierzu muss lediglich folgender Befehl eingegeben werden:

telnet IP.ADRESSE.DES.SERVERS 10014

Anschließend kann man bereits einige Befehle eingeben. Nachfolgenden finden Sie die wichtigsten Befehle mit einigen Beispielen:

Abrufen von Kanalwerten:

# abrufen aller Kanalwerte / eines einzelnen Kanals als DMX-Angaben (0...255)

C?

C5?

# abrufen aller Kanalwerte / eines einzelnen Kanals in Prozent (0...100)

P?

P5?

Abrufen eines bestimmten Kanals als RGB-HEX-Werte:

RGB1?

 

Kanalwerte kann man dann ebenfalls entweder als DMX-Werte, Prozentwerte oder HEX-Werte übertragen:

# Setzen von DMX-Werten für mehrere Kanäle:

C1:15>64in5000ms;C2:44>64in5000ms;C8:66>32in3000ms;

# Setzen von Prozentwerten für mehrere Kanäle

P1:-1>25in5000ms;P2:-1>25in5000ms;P8:-1>12in3000ms;

# Setzen von RGB-Werten ab Kanal 5:

RGB5:FFBB99in1000ms

 

Die Telnetverbindung kann mit STRG+ + und "quit" wieder beendet werden.

 

Nachdem nun der Server auf dem RaspberryPi gestartet wurde, muss man nun noch die RoomControl-App vorbereiten, kompilieren und auf dem Android-Gerät installieren

  • Installation von Android Studio Version 3.5.3 oder neuer (Download)
  • Download der RoomControl-Android-App: RoomControl_Android.zip
  • Entpacken und danach mit Android Studio öffnen (eine Weile warten, bis Gradle und die Updates fertig sind)
  • im Projekt-Browser folgende Datei öffnen: app > java > de.phoenixstudios.roomcontrol > MainActivity
    • in Zeile 83 muss die IP-Adresse des RaspberryPi manuell eingetragen werden
    • ab Zeile 528 kann man die fünf vorgesehenen Szenen bearbeiten
  • anschließend im Projekt-Browser folgende Datei öffnen: app > res > layout > activity_main.xml
    • hier kann man das Design der App an die eigenen Bedürfnisse anpassen (Beschriftungen, etc.)
  • Nachdem die gewünschten Änderungen fertig sind, muss die APK-Datei noch erstellt werden: Hauptmenü > Build > Generate Signed Bundle / APK

 

Nach Erstellen der APK kann diese auf das Android-Gerät übertragen werden und als "App aus unbekannter Quelle" direkt installiert werden. Direkt nach dem Start der App verbindet sich diese mit dem RaspberryPi und man kann die einzelnen Kanäle einstellen.

 

Nützlicher Hinweis zur Dimmerpack-Platine:

Man kann natürlich ein eigenes RS232-Dimmerpack aufbauen, jedoch macht es sinn, die bereits vorhandenen Dimmerpack-Platinen des DMX512-Dimmerpacks zu verwenden, die hier als Gerber-Dateien angeboten werden. Mit den folgenden Anpassungen kann man dann den RaspberryPi mit dieser Platine verbinden:

  • zunächst muss die RS232-Dimmerpack-Firmware geflasht werden. Man findet sie unter den Download hier auf der Website oder hier: PC_DIMMER_RS232_Firmware_v2.4_all.zip
  • Das DMX512-Dimmerpack verwendet einen 8MHz Quarz, um das DMX512-Signal zu empfangen. Wir nutzen allerdings hier die üblichen 115,2kBaud von RS232, sodass ein 7,3728MHz Quarz verwendet werden sollte. Möchte man den 8MHz behalten, kann man maximal 38,4kBaud verwenden!
  • Der RaspberryPi muss dann noch mit einem SN75176-Baustein mit einer RS485-Schnittstelle ausgerüstet werden

 

Nun kann man den RaspberryPi direkt mit der DMX512-Dimmerpack-Hardware verbinden, die aber die Firmware des RS232-Dimmerpacks laufen lässt. Auf diese Weise vereinfacht sich die Software auf Seiten des RaspberryPis auf ein Minimum.

 

Viel Spaß mit eurer Beleuchtungsanlage für einen Hobbyraum oder das Wohnzimmer.