Inhaltsverzeichnis

Bewegungsalarmsystem

TODO Das hier ist noch in der Erprobungsphase

Noch implementieren

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.

Wie funktioniert das?

Hardware

Software

Das Link-Überwachungsprogramm

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

Der Cronjob der das Überwachungsscript regelmäßig aufruft

/usr/lib/micron.d/neighbourwatch
* * * * * /root/neighbourwatch.lua

Alarmierung momentan per mail

alarmmail.sh
#!/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:

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