Wenn ein Kismet-Server auf dem Raspberry Pi läuft, muss der Server sauber rauf und runter gefahren werden, sonst werden die *NETXML Dateien wegen einem fehlenden sync nicht vollständig auf die SD-Karte geschrieben. Das Problem ist aber, wie kann der Raspberry Pi eingerichtet werden, so das der gpsd und Kismet automatisch hoch und auch sauber wieder runter fahren, ohne das ein Bildschirm bzw. Konsole angeschlossen wird? Und wie kann vom GPS Empfänger die Systemzeit gesetzt werden, da der Raspberry Pi ja keine Systemuhr hat und es beim WarWalking kein Internet mit NTP gibt ?
Die Lösung des Problems wird in dieser Anleitung beschrieben.
Wir brauchen ein Script zum automatischen hochfahren und ein Script das auf einen Tastendruck wartet.
Also zuerst ein autostart Verzeichnis erstellen und die drei unten angegebenen Scripte in der neuesten Version laden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mkdir autostart cd autostart wget https://github.com/IT-Berater/tw-scripte/blob/master/start-gps.sh wget https://github.com/IT-Berater/tw-scripte/blob/master/warte.py wget https://github.com/IT-Berater/tw-scripte/blob/master/an-warte.py # Scripte ausführbar machen chmod +x start-gps.sh chmod +x warte.py chmod +x an-warte.py # in crontab einfügen crontab -e # einfügen am Ende der Zeile und speichern @reboot /root/autostart/start-gps.sh & # Test reboot |
Das automatisch starten über crontab habe ich hier schon mal beschrieben .
Hier das start-gps.sh
Script welches per crontab
automatisch nach dem anschalten des Raspberry Pis startet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#!/bin/bash # # Dies start-gps.hs Script soll alles starten was für das wardrive nötig ist. # # 14.02.15 Thomas Wenzlaff # # 1. gpsd starten # 2. LED an und warten auf Tastendruck # 3. Zeit von GPSD ermittelt und setzen # 4. Kismet Server starten # 5. Warten auf Tastendruck warten.py # 6. LED blinken # 7. Kismet sauber runterfahren # 8. gpsd runterfahren # 9. System runterfahren # # (C) 2015 Thomas Wenzlaff http://www.wenzlaff.de # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see {http://www.gnu.org/licenses/}. # ############################################################################## echo 'Starte start-gps.sh Script ...' /usr/bin/pkill gpsd /usr/bin/pkill kismet_server echo 'Starte gpsd Dämon im Hintergrund ...' /etc/init.d/gpsd start echo 'gpsd gestartet' echo 'Warte bis GPS bereit ...' /usr/bin/gpspipe -l -w -n 10 | grep -qm 1 '"mode":3' echo 'Parse die aktuelle UTC Zeit von gpsd Ausgabe ...' UTCDATE=`/usr/bin/gpspipe -w -n 10 | grep -m 1 "TPV" | sed -r 's/.*"time":"([^"]*)".*/\1/' | sed -e 's/^\(.\{10\}\)T\(.\{8\}\).*/\1 \2/'` echo 'Die Zeit von gpsd:' echo $UTCDATE echo 'Setzt die aktuelle Systemzeit des Raspberry Pi' /bin/date -u --set="$UTCDATE" echo 'an-warte.py starten ...' /root/autostart/an-warte.py echo 'an-warte.py beendet, weiter ...' echo 'Starte den Kismet Server im Hintergrund ...' kismet_server --daemonize echo 'Kismet Server gestartet' echo 'warte.py starten' echo 'Warte auf längeren Tastendruck bis die LED blinkt, zum sauberen runterfahren des Raspberry Pi ...' /root/autostart/warte.py echo 'warte.py beendet' echo 'Warte bis der Kismet Server runtergefahren ist ...' /usr/bin/pkill kismet_server # warten bis Kismet seine Dateien gespeichert hat /usr/bin/pgrep kismet while [ $? = 0 ] do /bin/sleep 1 /usr/bin/pgrep kismet done echo 'OK, der Kismet Server ist sauber beendet.' echo 'System sauber runterfahren ...' /usr/bin/pkill gpsd /bin/sleep 5 echo 'Starte nun shutdown now. Der Raspberry Pi kann gleich von der Stromversorgung getrennt werden.' sudo shutdown now |
Das warte.py
Script wartet auf einen Tastendruck und blinkt dann 10 mal und beendet sich.
Der Taster ist an Pin 11 und die LED an Pin 7 mit einem oder zwei Vorwiederständen angeschlossen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#!/usr/bin/python # coding=ISO-8859-1 # warte.py Script # # Thomas Wenzlaff (c) 2015 www.wenzlaff.info # # Dieses Script wartet bis die Taste einmal gedrückt wird und dann # wird als Bestätigung die LED 10 mal blinken. # # (C) 2015 Thomas Wenzlaff http://www.wenzlaff.de # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see {http://www.gnu.org/licenses/}. # ############################################################################## import RPi.GPIO as GPIO import time SCHALTER = 11 LED = 7 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(LED, GPIO.OUT) GPIO.setup(SCHALTER, GPIO.IN, pull_up_down=GPIO.PUD_UP) def blink( anzahl ): "Methode blinkt so oft wie anzahl" i = 0 while (i < anzahl): GPIO.output(LED, True) time.sleep(0.1) GPIO.output(LED, False) time.sleep(0.1) i = i + 1 print "Start warte.py um %s Warte nun auf Tastendruck..." % time.ctime() while True: input_state = GPIO.input(SCHALTER) time.sleep(2) if input_state == False: print "Taste wurde gedrückt" print "10 mal blinken ..." blink(10) break print "Das warten.py Script ist nun um %s zu Ende" % time.ctime() |
Und das an-warte.py Script, welches die LED anschaltet und auf einen kurzen Tastendruck wartet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/usr/bin/python # coding=ISO-8859-1 # an-warte.py Scrip # # Thomas Wenzlaff (c) 2015 www.wenzlaff.info # # Dieses Script schaltet die LED an und wartet bis die Taste einmal gedrückt wird # dann geht die LED aus. # # (C) 2015 Thomas Wenzlaff http://www.wenzlaff.de # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see {http://www.gnu.org/licenses/}. # ############################################################################## import RPi.GPIO as GPIO import time SCHALTER = 11 LED = 7 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(LED, GPIO.OUT) GPIO.setup(SCHALTER, GPIO.IN, pull_up_down=GPIO.PUD_UP) print "Start an-warte.py um %s Warte nun auf Tastendruck ..." % time.ctime() GPIO.output(LED, True) time.sleep(0.1) while True: input_state = GPIO.input(SCHALTER) time.sleep(1) if input_state == False: print "Taste wurde gedrückt" break GPIO.output(LED, False) time.sleep(0.1) print "Das an-warten.py Script ist nun um %s zu Ende" % time.ctime() |
Das ganze läuft nun so ab:
- 1. den Raspberry Pi mit Accu-Strom versorgen
- 2. der rPi läuft hoch und das
start-gps.sh
Script startet - 3. es wird der GPSD gestartet und die Uhrzeit gesetzt, dann geht die LED an
- 4. will man nun das Wardriving starten, einfach kurz die Taste drücken, die LED geht zur Bestätigung aus
- 5. und gehen … und laufen … und fahren … Kismet zeichnet auf… Wardriving
- 6. nun wollen wir die Aufzeichnung beenden, wir drücken den Taster solange, biss die LED anfängt zu blinken
- 7. wenn das blinken aufhört, kännen wir den rPi ausschalten oder aber mit dem Reset Taster wieder neu Starten und alles geht wieder mit 2 weiter
Wer noch Details wissen will, einfach ein Kommentar und ein Like 😉 hinterlassen.