Setup des Systems

In diesem Kapitel wird beschrieben, wie man das System aufsetzen kann

System Basissetup

Ich habe auf dem Raspberry Pi ein Arch Linux installiert. Eine gute Anleitung dazu findet man hier: archlinuxarm.org. Es ist wichtig darauf zu achten, dass Ihr das 32bit Image installiert. Außerdem benötigt Ihr Python 3 und solltet die Arduino IDE installieren.

Arduino flashen

Aus Gründen der Bequemlichkeit und der Kompatibilität mit vim, den ich als Texteditor verwende nutze ich das Makefile aus diesem Projekt. Man clont das Repo, wie in meinem Fall unter ~/.arduino_mk und kann dann ein Makefile im Ordner mit dem Sketch verwenden. Dazu könnt Ihr einfach mein Makefile entsprechend auf eure Orderstruktur anpassen.

ARDUINO_DIR = /usr/share/arduino
BOARD_TAG = mega2560
include $(HOME)/.arduino_mk/Arduino.mk

Das ARDUINO_DIR gibt an, wo die IDE zu finden ist. Die include Zeile inkludiert das Makefile aus dem oben erwähnten Git Repo. Anschließend könnt Ihr mit drei Befehlen das Flashen des Arduinos steuern:

# Kompilieren des Codes
make

# Hochladen des Codes auf den Arduino
make upload

# Seriellen Monitor starten
make monitor

Und weil ich tippfaul bin habe ich mir alias Einträge in meinem profil hinterlegt: m, mu und mm.

Python Koppler als systemd Dienst

Der Python Koppler kann als systemd Dienst installiert werden, sodass man ihn beim Start des Pi’s bequem automatisch starten lassen kann. Dazu habe ich im Ordner python ein service file inkludiert.

[Unit]
Description=dARts.py E-Dart Kopplungs service
After=multi-user.target

[Service]
Type=simple
WorkingDirectory=/home/patrick/projects/dARts/python
ExecStart=/usr/bin/python3 /home/patrick/projects/dARts/python/dARts.py

[Install]
WantedBy=multi-user.target

Wichtig ist, dass Ihr die Pfadangaben an eure Orderstruktur anpasst. Dann kopiert Ihr die Datei nach /home/<euer Benutzername>/.config/systemd/user/dARts.service. So wird der Service als Benutzerservice zur Verfügung gestellt.

Anschließend könnt Ihr den Service wie jeden systemd Service nutzen:

# Service starten:
systemctl --user start dARts.service

# Service stoppen:
systemctl --user stop dARts.service

# Autostart bei boot:
systemctl --user enable dARts.service

Hostapd und Dnsmasq als WLAN Access Point

Den Pi habe ich zum WLAN-Hotspot gemacht. So kann eine Spielergruppe einfach ein Anzeigegerät für den Dart-O-Mat 3000 per WLAN einbuchen. Auch das Smartphone kann so als Game Controller einfach genutzt werden. Ich nutze dazu hostapd. Um IP Adressen und DNS kümmert sich bei mir Dnsmasq. Damit die Geräte nach dem Einwählen direkt umgeleitet werden (Captive Portal, wie zum Beispiel im Hotel) wird nginx eingesetzt. Eine gute Anleitung, wie man das einrichtet findet man beispielsweise hier.

Für mich haben folgende Konfigurationseinstellungen funktioniert.

hostapd

Die Datei kommt nach /etc/hostapd/hostapd.conf

interface=wlan0
ssid=dARts
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0

Der Inhalt von /etc/default/hostapd sollte so aussehen:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

dnsmasq

Die Datei kommt nach /etc/dnsmasq.conf

bogus-priv
server=/darts/10.41.18.20
local=/darts/
address=/#/10.41.18.20
interface=wlan0
domain=localnet
dhcp-range=10.41.18.50,10.41.18.200,24h
dhcp-option=3,10.41.18.20
dhcp-option=6,10.41.18.20
dhcp-authoritative

nginx

Die Datei kommt nach /etc/nginx/nginx.conf

#user html;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    include /etc/nginx/sites-enabled/*;

}

Und die Datei kommt nach /etc/nginx/sites-available/hotspot.conf

server {
    # Listening on IP Address.
    # This is the website iptables redirects to
    listen       80 default_server;
    root         /usr/share/nginx/html/portal;

    # For others
    location / {
        return 302 http://dart-o-mat-3000.darts/;
    }
 }


server {
     listen       80;
     server_name  dart-o-mat-3000.darts;
     root         /usr/share/nginx/html/portal;

     location / {
         try_files $uri $uri/ /index.html;
     }
}

Die Hotspotseite wird aktiviert, indem man die Datei mit einem Symlink nach sites-enabled verlinkt:

ln -s /etc/nginx/sites-available/hotspot.conf /etc/nginx/sites-enabled/hotspot.conf

/etc/hosts

In der /etc/hosts sollte noch folgender Eintrag unten angefügt werden.

10.41.18.20   dart-o-mat-3000.darts

Autostarts

Wenn die Dienste alle korrekt laufen kann man sie mit den folgenden Befehlen noch zum Autostart hinzufügen:

sudo systemctl enable hostapd
sudo systemctl enable dnsmasq
sudo systemctl enable nginx