In diesem Eintrag möchte ich euch die Finale Version meines Aufgabenteils vorstellen. Es geht um die initiale Konfiguration des Raspberry Pis.

Wenn der Nutzer das Gerät auspackt, muss er es zunächst nur an den Strom anschließen.
Danach sollte das folgende startup.sh Skript starten (der automatische Start funktioniert noch nicht, momentan muss es manuell gestartet werden).

startup.sh

#!/bin/bash
#

killall php
echo „Starte WLAN“
source /opt/wlan-setup.sh

#ueberpruefe ob erfolgreich mit WLAN verbunden wurde
wlan=$(iwconfig wlan0|grep „ESSID:off/any“)
substring=ESSID:off/any

if [ „${wlan/$substring}“ = „$my_string“ ] ; then
echo „WLAN verbunden“
#passende index.php laden
cp /srv/www/tuer/index.php /srv/www/index.php
nohup php -t /srv/www/ -S 0.0.0.0:80 &
python submqtt.py

else
echo „WLAN nicht verbunden“
echo „Starte WLAN Scan“
#erster WLAN Scan schlägt meistens fehl
iwlist wlan0 scan | grep ‚ESSID\|Encryption key‘ > /opt/wifis
iwlist wlan0 scan | grep ‚ESSID\|Encryption key‘ > /opt/wifis
#loesche Leerzeichen am Anfang der WLAN Datei
sed -i ’s/^ *//‘ /opt/wifis
#arbeite Wifis für den Webserver auf
sed s/“Encryption key:on“/“

Verschluesselt
„/g /opt/wifis > tmpwifis && mv tmpwifis wifis
sed s/“Encryption key:off“/“

Nicht verschluesselt
„/g /opt/wifis > tmpwifis && mv tmpwifis wifis
#starte AP Modus
source /opt/ap-setup.sh
echo „starte Webserver“
source /opt/wlanphp.sh
cp /srv/www/wlan/index.php /srv/www/index.php
php -t /srv/www -S 0.0.0.0:80
fi

Das Script ist gut kommentiert und beschrieben. Hauptaufgabe ist die Steuerung aller Komponenten. Zunächst versucht es eine Verbindung mit dem WLAN aufzubauen. Bei einem ersten Start ist jedoch noch keine WLAN-Konfiguration in der Datei wlan-config hinterlegt. Aus diesem Grund kann das Skript wlan-setup.sh keine Verbindung zum WLAN aufbauen. Das startup.sh Skript prüft, ob eine WLAN-Verbindung aufgebaut werden konnte. In diesem Fall ist dies negativ. Das startup.sh Skript scannt danach alle verfügbaren WLANs und schreibt diese in die Datei wlan-config. Anschließend wird ein Webserver mit der passenden Konfiguration (index.php) gestartet und mithilfe des Skripts ap-setup.sh der AP-Modus gestartet. Der User kann sich dann mit WLAN „DingDong“ Verbinden und über die IP- Adresse „10.0.0.1“ das WLAN konfigurieren. Diese IP-Adresse ist auf dem Raspberry Pi abgedruckt.

Nachfolgend werden die Skripte wlan-setup.sh und ap-setup.sh dargestellt.

wlan-setup.sh

#!/bin/bash
#

#Stoppe WLAN
echo „Debug: Stoppe WLAN“
ifdown wlan0
killall dnsmasq
killall wpa_supplicant

sleep 2

#wpa_supplicant wird konfiguriert
echo „Debug: /etc/wpa_supplicant.conf wird konfiguriert“

#WLAN konfiguration einbinden
source wlan-config

cat > /etc/wpa_supplicant.conf < /etc/network/interfaces <<EOF
#WLAN Konfiguration
# Loopback Device
auto lo
iface lo inet loopback

# Dynamische IP via DHCP
auto eth0
iface eth0 inet dhcp
post-up sleep 5; /sbin/ntpd -p pool.ntp.org
post-down killall ntpd

# WLAN
# Zugangsdaten stehen in der Datei /etc/wpa_supplicant.conf
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf
EOF

#starte WLAN
echo „Debug: Starte WLAN“
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
ifup wlan0

ap-setup.sh

#!/bin/bash
#
echo "Starte AP Modus"
#Stoppe WLAN
echo "Debug: Stoppe WLAN"
ifdown wlan0
killall dnsmasq
killall wpa_supplicant
killall udhcpc

wpastatus=$(ps -e | grep wpa_supplicant)
if [ „$wpastatus“ == „root“ ]
then
echo „ERROR: wpa_supplicant nocht nicht beendet!“
fi

sleep 2

#interfaces werden konfiguriert
echo „Debug: /etc/network/interfaces wird konfiguriert“
cat > /etc/network/interfaces < /etc/wpa_supplicant.conf <<EOF
#AP Konfiguration
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid=“DingDong“
mode=2
psk=“Seriennummer“
key_mgmt=WPA-PSK
}
EOF

echo „debug: ifup wlan0“
ifup wlan0

echo „Debug: Starte DHCP“
#debug: dnsmasq -d
dnsmasq

echo „Debug: Starte AP“
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

echo „neue IP fuer eth0“
udhcpc eth0

Nachdem der Nutzer das WLAN konfiguriert hat, startet der Raspberry Pi neu. Hier sollte nun wieder das startup.sh Skript automatisch starten (was es noch nicht tut). Danach wird wieder versucht eine WLAN-Verbindung aufzubauen. Da nun eine passende WLAN-Konfiguration vorhanden ist, gelingt dies auch. Anschließend lädt das startup.sh Skript eine passende Webserver-Konfiguration, damit der Benutzer die Zugangsdaten zum MQTT Server eintragen kann. Anschließend wird der Webserver gestartet. Danach startet das Python-Skript submqtt.py , welches für die MQTT-Kommunikation verantwortlich ist, jedoch aufgrund der mangelnden Konfiguration noch keine Verbindung zum Server aufbauen kann.

Nachdem der Benutzer die MQTT-Konfiguration eingetragen hat, wird diese in der Datei tuer-config gespeichert. Anschließend startet der Raspberry Pi neu. Da nun alles Konfiguriert ist, kann über das Python-Skript submqtt.py die Tür gesteuert werden. (Das startup.sh Skript muss trotzdem manuell gestartet werden, da das automatische starten beim Booten nicht funktioniert)

 

DingDong 8. Blockeintrag: Finale Version der Grundkonfiguration