Wiki - Freifunk Pinneberg

Freies WLAN im Kreis Pinneberg

Benutzer-Werkzeuge

Webseiten-Werkzeuge


alarmsystem

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
alarmsystem [01.01.2018 09:56] – angelegt havelockalarmsystem [20.01.2018 21:01] (aktuell) – [Software] havelock
Zeile 1: Zeile 1:
 ====== Bewegungsalarmsystem ====== ====== 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:<code>
 +ip link set down dev client0
 +ip link set up dev client0
 +</code>
  
 Dieses System ist natürlich immer im Zusammenhang mit anderen Sicherungssystemen zu sehen. Dieses System ist natürlich immer im Zusammenhang mit anderen Sicherungssystemen zu sehen.
  
-Feststellen ob ein Fahrzeugvon seinem Parkplatz bewegt wird.+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. Dazu können Freifunkknoten verwendet werden.
  
Zeile 10: Zeile 21:
  
 Wie funktioniert das?  Wie funktioniert das? 
-  * Der Knoten im Gebäude früft, ob die Verbindung (Link) zum Fahrzeugknoten vorhanden ist +  * Der Knoten im Gebäude prüft, ob die Verbindung (Link) zum Fahrzeugknoten vorhanden ist 
-  * Wenn das letzte Signal ein bestimmtes Alter überschritten hat, wird davon ausgegangen, daß das Fahrzeug bewegt wurde oder der Knoten kompromittiert+    * Micron-Job ''neighbourwatch'' in ''/usr/lib/micron.d'', wird einmal je Minute ausgeführt 
-    * Jetzt kann man durch ei +    * 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<code> 
 +ssh alarmuser@server.ffpi ./alarm.sh 
 +</code> 
 +      * Damit Dropbear eine Verbindung aufbauen kannwird 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 
 +<file lua neighbourwatch.lua> 
 +#!/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 
 +</file> 
 + 
 +Der Cronjob der das Überwachungsscript regelmäßig aufruft 
 +<file conf /usr/lib/micron.d/neighbourwatch> 
 +* * * * * /root/neighbourwatch.lua 
 +</file> 
 + 
 +Alarmierung momentan per mail 
 +<file bash alarmmail.sh> 
 +#!/bin/bash 
 +mail -s "Alarm: Fahrzeugbewegung" mustermann@example.com << EOF 
 +Alarm! 
 +Das Fahrzeug /Mein Auto/ wird gerade bewegt. 
 +EOF 
 +</file> 
 + 
 +Dynamische Steuerung des Client-WLANs im Fahrzeug. 
 + 
 +Erster Entwurf: 
 +<file lua meshcheck.lua> 
 +#!/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 
 +</file> 
alarmsystem.1514796974.txt.gz · Zuletzt geändert: 01.01.2018 09:56 von havelock