====== Bewegungsalarmsystem ====== TODO Das hier ist noch in der Erprobungsphase Noch implementieren * Konfiguration über ''uci'' bzw. ''/etc/config'' * Freifunk-Clientnetzwerk im Fahrzeugknoten deaktivieren, wenn kein Link zu einem anderen Freifunkknoten besteht. Befehle dafür: ip link set down dev client0 ip link set up dev client0 Dieses System ist natürlich immer im Zusammenhang mit anderen Sicherungssystemen zu sehen. Voraussetzung ist, daß im Fahrzeug eine permanente Stromversorgung sichergestellt ist. Feststellen ob ein Fahrzeug von seinem Parkplatz bewegt wird. Dazu können Freifunkknoten verwendet werden. * Ein Knoten wird im Fahrzeug plaziert * Ein weiterer Knoten übernimmt die Überwachung des Fahrzeugknotens Wie funktioniert das? * Der Knoten im Gebäude prüft, ob die Verbindung (Link) zum Fahrzeugknoten vorhanden ist * Micron-Job ''neighbourwatch'' in ''/usr/lib/micron.d'', wird einmal je Minute ausgeführt * Script ''neighbourwatch.lua'' prüft das Alter des Links zur MAC des Fahrzeugknotens uns setzt eine Semaphor-Datei ''/tmp/alarmcounter'', damit wird sichergestellt, daß bei jedem verschwinden nur ein Alarm ausgelöst wird * Wenn das letzte Signal ein bestimmtes Alter überschritten hat und die Semaphor-Datei nicht vorhanden ist, wird die Alarmierung gestartet * Es wird eine SSH-Verbindung zu einem Server im Freifunknetz hergestellt und dort ein Alarmprogramm gestartet ssh alarmuser@server.ffpi ./alarm.sh * Damit Dropbear eine Verbindung aufbauen kann, wird ein Schlüsselpaar benötigt. Es gibt dafür das Programm ''dropbearkey'' * Der Alarmserver ist notwendig, da der Freifunkknoten nur Dienste im Freifunk-Netz ansprechen kann, d.h. alles was im lokalen Subnet ist. Die Alarmierung benötigt aber meistens erweiterte Funktionen, wie z.B. Internetzugriff um eine Mail zu versenden. * Es wäre auch denkbar, einen kleinen Alarmcomputer (Raspberry) im Freifunk-Netz zu haben, der mehr kann, als ein /normaler/ Freifunkknoten * Kommt das Fahrzeug zurück auf seinen Platz, wird die Alarmierung zurückgesetzt, so daß bei einem weiteren Entfernen erneut ein Alarm ausgelöst wird. Damit muß man das System nicht manuell aktivieren. ===== Hardware ===== * GL-iNet 6416A im Fahrzeug * Stromversorgung über einen Zigarettenanzünder-USB-Adapter * Sehr klein * Am USB-Anschluß kann ein GPS-Stick angeschlossen werden * WR841N/ND im Fenster ===== Software ===== Das Link-Überwachungsprogramm #!/usr/bin/lua function file_exists(name) local f=io.open(name,"r") if f~=nil then io.close(f) return true else return false end end function watch_mac(mac) command = "batctl n | grep -i " .. mac .. " | tr -s ' ' | cut -d' ' -f4" local handle = io.popen(command) local result = handle:read("*a") handle:close() return result:match("(.-)%s*$") end counterfile = "/var/run/alarmcounter" lastseen = watch_mac("a2:1b:3a:0b:3e:72") age_seconds = tonumber(lastseen:sub(1, -2)) or 1000 if age_seconds > 30 then if not file_exists(counterfile) then file = io.open(counterfile, "w") file:write("1") file:close() command = "ssh alarmuser@srv01.ffpi ./alarmmail.sh" local handle = io.popen(command) local result = handle:read("*a") handle:close() end else if file_exists(counterfile) then os.remove(counterfile) end end Der Cronjob der das Überwachungsscript regelmäßig aufruft * * * * * /root/neighbourwatch.lua Alarmierung momentan per mail #!/bin/bash mail -s "Alarm: Fahrzeugbewegung" mustermann@example.com << EOF Alarm! Das Fahrzeug /Mein Auto/ wird gerade bewegt. EOF Dynamische Steuerung des Client-WLANs im Fahrzeug. Erster Entwurf: #!/usr/bin/lua function neighbourcount() local handle = io.popen("batctl n | grep ibss0 | wc -l") local result = handle:read("*a") handle:close() return result end function ifstate() local file = io.open("/sys/class/net/client0/operstate", "r") local result = file:read("*l") file:close() return result end state = ifstate() if neighbourcount() == 0 then if state == "up" then os.execute("ip link set down dev client0") end else if state == "down" then os.execute("ip link set up dev client0") end end