diff options
Diffstat (limited to 'modules')
-rwxr-xr-x | modules/freifunk/root/etc/init.d/freifunk | 4 | ||||
-rwxr-xr-x | modules/freifunk/root/usr/sbin/ff_mapupdate | 49 |
2 files changed, 53 insertions, 0 deletions
diff --git a/modules/freifunk/root/etc/init.d/freifunk b/modules/freifunk/root/etc/init.d/freifunk index d90e3ff5e..3a668b11f 100755 --- a/modules/freifunk/root/etc/init.d/freifunk +++ b/modules/freifunk/root/etc/init.d/freifunk @@ -23,6 +23,10 @@ boot() { echo "0 */4 * * * /usr/sbin/ff_rdate" >> /etc/crontabs/root } + grep -q '/usr/sbin/ff_mapupdate' /etc/crontabs/root || { + echo "17 * * * * /usr/sbin/ff_mapupdate >> /etc/crontabs/root + } + [ -f /etc/rc.local ] && . /etc/rc.local [ -d /etc/rc.local.d ] && { for file in /etc/rc.local.d/*; do diff --git a/modules/freifunk/root/usr/sbin/ff_mapupdate b/modules/freifunk/root/usr/sbin/ff_mapupdate new file mode 100755 index 000000000..132546c6b --- /dev/null +++ b/modules/freifunk/root/usr/sbin/ff_mapupdate @@ -0,0 +1,49 @@ +#!/usr/bin/lua + +local uci = require "luci.model.uci" +local x = uci.cursor() + +local update_url = "http://www.layereight.de/freifunkmap.php?update=%.15f,%.15f&olsrip=%s¬e=%s&robot=%s" +local update_all = ( arg[1] and arg[1] == "all" ) and true or false + +local file +x:foreach("olsrd", "LoadPlugin", function(s) + if s.library == "olsrd_nameservice.so.0.3" then + file = io.open(s.latlon_file) + end +end) + +if file then + local ln + local count = 0 + while true do + ln = file:read("*l") + if not ln then break end + if update_all and ln:match("^Node%(") then + local ip, lat, lon, note = ln:match("Node%('(%S+)',([%d%.]+),([%d%.]+),%d+,'%S+','(%S+)'%)") + lat = tonumber(lat) + lon = tonumber(lon) + + if ip and lat ~= 0.0 and lon ~= 0.0 and note then + note = note:gsub("[^%w%-%.]+", "_") + os.execute("wget -qO/dev/null %q" % string.format(update_url, lat, lon, ip, note, "luci-massupdate")) + count = count + 1 + end + + elseif ln:match("^Self%(") then + local ip, lat, lon, note = ln:match("Self%('(%S+)',([%d%.]+),([%d%.]+),%d+,'%S+','(%S+)'%)") + lat = tonumber(lat) + lot = tonumber(lon) + + if ip and lat ~= 0.0 and lon ~= 0.0 and note then + note = note:gsub("[^%w%-%.]+", "_") + os.execute("wget -qO/dev/null %q" % string.format(update_url, lat, lon, ip, note, "luci-selfupdate")) + count = count + 1 + end + end + end + + os.execute("logger -t 'mapupdate' 'Updated %d entries in freifunk map'" % count) + + file:close() +end |