summaryrefslogtreecommitdiffhomepage
path: root/modules/freifunk/luasrc
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-05-27 12:23:39 +0000
committerSteven Barth <steven@midlink.org>2008-05-27 12:23:39 +0000
commitd35a620e9f5665a94967f4bd02c93581a1dd7e00 (patch)
treecbe7a9b9fe71e40d850c649361c87608d56ea48b /modules/freifunk/luasrc
parent5df565faba5eb0c26a7ce0e2d6e9092bf71cb1e8 (diff)
commit 4f6198094cf4134179d1f9c9fa8f79759a27c87e
Author: Felix Fietkau <nbd@openwrt.org> Date: Tue May 27 13:56:12 2008 +0200 rename src/ to luasrc/
Diffstat (limited to 'modules/freifunk/luasrc')
-rw-r--r--modules/freifunk/luasrc/controller/freifunk/freifunk.lua68
-rw-r--r--modules/freifunk/luasrc/controller/freifunk/luciinfo.lua45
-rw-r--r--modules/freifunk/luasrc/controller/freifunk/olsr.lua164
-rw-r--r--modules/freifunk/luasrc/i18n/admin_index_contact.en11
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/contact.lua18
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua19
-rw-r--r--modules/freifunk/luasrc/view/freifunk-olsr/error_olsr.htm6
-rw-r--r--modules/freifunk/luasrc/view/freifunk-olsr/hna.htm17
-rw-r--r--modules/freifunk/luasrc/view/freifunk-olsr/index.htm43
-rw-r--r--modules/freifunk/luasrc/view/freifunk-olsr/mid.htm17
-rw-r--r--modules/freifunk/luasrc/view/freifunk-olsr/routes.htm36
-rw-r--r--modules/freifunk/luasrc/view/freifunk-olsr/topology.htm23
-rw-r--r--modules/freifunk/luasrc/view/freifunk/contact.htm13
-rw-r--r--modules/freifunk/luasrc/view/freifunk/index.htm11
-rw-r--r--modules/freifunk/luasrc/view/public_status/index.htm77
-rw-r--r--modules/freifunk/luasrc/view/public_status/iwscan.htm38
-rw-r--r--modules/freifunk/luasrc/view/public_status/routes.htm28
17 files changed, 634 insertions, 0 deletions
diff --git a/modules/freifunk/luasrc/controller/freifunk/freifunk.lua b/modules/freifunk/luasrc/controller/freifunk/freifunk.lua
new file mode 100644
index 000000000..104f6cdfc
--- /dev/null
+++ b/modules/freifunk/luasrc/controller/freifunk/freifunk.lua
@@ -0,0 +1,68 @@
+module("luci.controller.freifunk.freifunk", package.seeall)
+
+function index()
+ local page = node()
+ page.target = alias("freifunk")
+
+ local page = node("freifunk")
+ page.title = "Freifunk"
+ page.target = alias("freifunk", "index")
+ page.order = 5
+ page.setuser = "nobody"
+ page.setgroup = "nogroup"
+
+ local page = node("freifunk", "index")
+ page.target = template("freifunk/index")
+ page.title = "Übersicht"
+ page.order = 10
+
+ local page = node("freifunk", "index", "contact")
+ page.target = template("freifunk/contact")
+ page.title = "Kontakt"
+
+
+ local page = node("freifunk", "status")
+ page.target = action_status
+ page.title = "Status"
+ page.order = 20
+ page.setuser = false
+ page.setgroup = false
+
+ local page = node("freifunk", "status", "routes")
+ page.target = template("public_status/routes")
+ page.title = "Routingtabelle"
+ page.order = 10
+
+ local page = node("freifunk", "status", "iwscan")
+ page.target = template("public_status/iwscan")
+ page.title = "WLAN-Scan"
+ page.order = 20
+
+ local page = node("admin", "index", "freifunk")
+ page.target = cbi("freifunk/freifunk")
+ page.title = "Freifunk"
+ page.order = 30
+
+ local page = node("admin", "index", "contact")
+ page.target = cbi("freifunk/contact")
+ page.title = "Kontakt"
+ page.order = 40
+end
+
+function action_status()
+ local data = {}
+
+ data.s, data.m, data.r = luci.sys.sysinfo()
+
+ data.wifi = luci.sys.wifi.getiwconfig()
+
+ data.routes = {}
+ for i, r in pairs(luci.sys.net.routes()) do
+ if r.Destination == "00000000" then
+ table.insert(data.routes, r)
+ end
+ end
+
+
+ luci.template.render("public_status/index", data)
+end \ No newline at end of file
diff --git a/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua b/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua
new file mode 100644
index 000000000..aabab19a1
--- /dev/null
+++ b/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua
@@ -0,0 +1,45 @@
+module("luci.controller.freifunk.luciinfo", package.seeall)
+
+function index()
+ node("freifunk", "luciinfo").target = action_index
+end
+
+function action_index()
+ local uci = luci.model.uci.StateSession()
+
+ luci.http.prepare_content("text/plain")
+
+ -- General
+ print("luciinfo.api=1")
+ print("luciinfo.version=" .. tostring(require("luci").__version__))
+
+ -- Sysinfo
+ local s, m, r = luci.sys.sysinfo()
+ local dr = luci.sys.net.defaultroute()
+ dr = dr and luci.sys.net.hexip4(dr.Gateway) or ""
+ local l1, l5, l15 = luci.sys.loadavg()
+
+ print("sysinfo.system=" .. sanitize(s))
+ print("sysinfo.cpu=" .. sanitize(m))
+ print("sysinfo.ram=" .. sanitize(r))
+ print("sysinfo.hostname=" .. sanitize(luci.sys.hostname()))
+ print("sysinfo.load1=" .. tostring(l1))
+ print("sysinfo.load5=" .. tostring(l5))
+ print("sysinfo.load15=" .. tostring(l15))
+ print("sysinfo.defaultgw=" .. dr)
+
+
+ -- Freifunk
+ local ff = uci:sections("freifunk") or {}
+ for k, v in pairs(ff) do
+ for i, j in pairs(v) do
+ if i:sub(1, 1) ~= "." then
+ print("freifunk." .. k .. "." .. i .. "=" .. j)
+ end
+ end
+ end
+end
+
+function sanitize(val)
+ return val:gsub("\n", "\t")
+end \ No newline at end of file
diff --git a/modules/freifunk/luasrc/controller/freifunk/olsr.lua b/modules/freifunk/luasrc/controller/freifunk/olsr.lua
new file mode 100644
index 000000000..29858fc0e
--- /dev/null
+++ b/modules/freifunk/luasrc/controller/freifunk/olsr.lua
@@ -0,0 +1,164 @@
+module("luci.controller.freifunk.olsr", package.seeall)
+require("luci.sys")
+
+function index()
+ local page = node("freifunk", "olsr")
+ page.target = action_index
+ page.title = "OLSR"
+ page.order = 30
+
+ local page = node("freifunk", "olsr", "routes")
+ page.target = action_routes
+ page.title = "Routen"
+ page.order = 10
+
+ local page = node("freifunk", "olsr", "topology")
+ page.target = action_topology
+ page.title = "Topologie"
+ page.order = 20
+
+ local page = node("freifunk", "olsr", "hna")
+ page.target = action_hna
+ page.title = "HNA"
+ page.order = 30
+
+ local page = node("freifunk", "olsr", "mid")
+ page.target = action_mid
+ page.title = "MID"
+ page.order = 50
+end
+
+function action_index()
+ local data = fetch_txtinfo("links")
+
+ if not data or not data.Links then
+ luci.template.render("freifunk-olsr/error_olsr")
+ return nil
+ end
+
+ local function compare(a, b)
+ if tonumber(a.ETX) == 0 then
+ return false
+ end
+
+ if tonumber(b.ETX) == 0 then
+ return true
+ end
+
+ return tonumber(a.ETX) < tonumber(b.ETX)
+ end
+
+ table.sort(data.Links, compare)
+
+ luci.template.render("freifunk-olsr/index", {links=data.Links})
+end
+
+function action_routes()
+ local data = fetch_txtinfo("routes")
+
+ if not data or not data.Routes then
+ luci.template.render("freifunk-olsr/error_olsr")
+ return nil
+ end
+
+ local function compare(a, b)
+ if tonumber(a.ETX) == 0 then
+ return false
+ end
+
+ if tonumber(b.ETX) == 0 then
+ return true
+ end
+
+ return tonumber(a.ETX) < tonumber(b.ETX)
+ end
+
+ table.sort(data.Routes, compare)
+
+ luci.template.render("freifunk-olsr/routes", {routes=data.Routes})
+end
+
+function action_topology()
+ local data = fetch_txtinfo("topology")
+
+ if not data or not data.Topology then
+ luci.template.render("freifunk-olsr/error_olsr")
+ return nil
+ end
+
+ local function compare(a, b)
+ return a["Destination IP"] < b["Destination IP"]
+ end
+
+ table.sort(data.Topology, compare)
+
+ luci.template.render("freifunk-olsr/topology", {routes=data.Topology})
+end
+
+function action_hna()
+ local data = fetch_txtinfo("hna")
+
+ if not data or not data.HNA then
+ luci.template.render("freifunk-olsr/error_olsr")
+ return nil
+ end
+
+ local function compare(a, b)
+ return a.Network < b.Network
+ end
+
+ table.sort(data.HNA, compare)
+
+ luci.template.render("freifunk-olsr/hna", {routes=data.HNA})
+end
+
+function action_mid()
+ local data = fetch_txtinfo("mid")
+
+ if not data or not data.MID then
+ luci.template.render("freifunk-olsr/error_olsr")
+ return nil
+ end
+
+ local function compare(a, b)
+ return a.IP < b.IP
+ end
+
+ table.sort(data.MID, compare)
+
+ luci.template.render("freifunk-olsr/mid", {mids=data.MID})
+end
+
+
+-- Internal
+function fetch_txtinfo(otable)
+ otable = otable or ""
+ local rawdata = luci.sys.httpget("http://127.0.0.1:2006/"..otable)
+
+ if #rawdata == 0 then
+ return nil
+ end
+
+ local data = {}
+
+ local tables = luci.util.split(luci.util.trim(rawdata), "\n\n")
+
+
+ for i, tbl in ipairs(tables) do
+ local lines = luci.util.split(tbl, "\n")
+ local name = table.remove(lines, 1):sub(8)
+ local keys = luci.util.split(table.remove(lines, 1), "\t")
+
+ data[name] = {}
+
+ for j, line in ipairs(lines) do
+ local fields = luci.util.split(line, "\t")
+ data[name][j] = {}
+ for k, key in pairs(keys) do
+ data[name][j][key] = fields[k]
+ end
+ end
+ end
+
+ return data
+end \ No newline at end of file
diff --git a/modules/freifunk/luasrc/i18n/admin_index_contact.en b/modules/freifunk/luasrc/i18n/admin_index_contact.en
new file mode 100644
index 000000000..e2402e91f
--- /dev/null
+++ b/modules/freifunk/luasrc/i18n/admin_index_contact.en
@@ -0,0 +1,11 @@
+contact1 = [[This information will be available on the public contact page.
+As stated in the Picopeering Agreement you should at least enter your e-mail address.
+To display your router on any topography map, please enter your geographical coordinates or at least
+your street and house number in the location field.]]
+nickname = "Nickname"
+mail1 = "This field is essential!"
+phone = "Phone"
+location = "Location"
+coord = "Coordinates"
+coord1 = "Latitude;Longitude (e.g. 51.5;12.9)"
+note = "Note" \ No newline at end of file
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua b/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua
new file mode 100644
index 000000000..66a1ec4bd
--- /dev/null
+++ b/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua
@@ -0,0 +1,18 @@
+-- Todo: Translate
+m = Map("freifunk", translate("contact", "Kontakt"), translate("contact1", [[Diese Daten sind
+auf der öffentlichen Kontaktseite sichtbar. Bitte gib an, wie man dich am besten kontaktieren kann.
+Diese Informationen sollten nach der Picopeering Vereinbarung mindestens deine E-Mail-Adresse enthalten.
+Damit dein Knoten durch Topographieprogramme erfasst werden kann, gib bitte deine Geokoordinaten oder
+zumindest deine Straße und Hausnummer unter Standort an.]]))
+
+c = m:section(NamedSection, "contact", "public")
+
+c:option(Value, "nickname", translate("nickname", "Pseudonym"))
+c:option(Value, "name", translate("name", "Name"))
+c:option(Value, "mail", translate("mail", "E-Mail"), translate("mail1", "Bitte unbedingt angeben!"))
+c:option(Value, "phone", translate("phone", "Telefon"))
+c:option(Value, "location", translate("location", "Standort"))
+c:option(Value, "geo", translate("coord", "Koordinaten"), translate("coord1", "Bitte als Breite;Länge (z.B: 51.5;12.9) angeben"))
+c:option(Value, "note", translate("note", "Notiz"))
+
+return m \ No newline at end of file
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua b/modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua
new file mode 100644
index 000000000..fe9e285b4
--- /dev/null
+++ b/modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua
@@ -0,0 +1,19 @@
+-- Todo: Translate
+m = Map("freifunk", "Freifunk")
+
+c = m:section(NamedSection, "community", "public", "Gemeinschaft", [[Dies sind die Grundeinstellungen
+für die lokale Freifunkgemeinschaft. Diese Werte wirken sich NICHT auf die Konfiguration
+des Routers aus, sondern definieren nur die Vorgaben für den Freifunkassistenten.]])
+c:option(Value, "name", "Gemeinschaft")
+c:option(Value, "homepage", "Webseite")
+c:option(Value, "essid", "ESSID")
+c:option(Value, "bssid", "BSSID")
+c:option(Value, "channel", "Funkkanal")
+c:option(Value, "realm", "Realm")
+c:option(Value, "net", "Adressbereich")
+c:option(Value, "mask", "Netzmaske")
+c:option(Value, "dns", "DNS-Server")
+c:option(Value, "dhcp", "DHCP-Bereich")
+c:option(Value, "dhcpmask", "DHCP-Maske")
+
+return m \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk-olsr/error_olsr.htm b/modules/freifunk/luasrc/view/freifunk-olsr/error_olsr.htm
new file mode 100644
index 000000000..25426f50d
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk-olsr/error_olsr.htm
@@ -0,0 +1,6 @@
+<%+header%>
+<h1><%:olsr OLSR%></h1>
+<p class="error"><%:olsrerror1 Es konnte keine Verbindung zum OLSR-Daemon hergestellt werden!%></p>
+<p><%:olsrerror2 Um die Statusinformationen abfragen zu können muss der OLSR-Daemon gestartet
+und das Plugin "txtinfo" geladen sein.%></p>
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk-olsr/hna.htm b/modules/freifunk/luasrc/view/freifunk-olsr/hna.htm
new file mode 100644
index 000000000..c13369f42
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk-olsr/hna.htm
@@ -0,0 +1,17 @@
+<%+header%>
+<h1><%:olsrhna OLSR-HNA%></h1>
+<br />
+<table cellspacing="0" cellpadding="6">
+<tr>
+<th><%:destination Ziel%></th>
+<th><%:gateway Gateway%></th>
+</tr>
+<% for k, route in ipairs(routes) do %>
+<tr>
+<td><%=route.Network%>/<%=route.Netmask%></td>
+<td><a href="http://<%=route.Gateway%>"><%=route.Gateway%></a></td>
+</tr>
+<% end %>
+</table>
+<br />
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk-olsr/index.htm b/modules/freifunk/luasrc/view/freifunk-olsr/index.htm
new file mode 100644
index 000000000..0633d1f45
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk-olsr/index.htm
@@ -0,0 +1,43 @@
+<%+header%>
+<h1><%:olsrlinks OLSR-Verbindungen%></h1>
+<p><%:olsrlinks1 Übersicht über aktuell bestehende OLSR-Verbindungen%></p>
+<br />
+<table cellspacing="0" cellpadding="6">
+<tr>
+<th><%:destination Ziel%></th>
+<th><%:local Lokal%></th>
+<th>LQ</th>
+<th>NLQ</th>
+<th>ETX</th>
+</tr>
+<% for k, link in ipairs(links) do
+ local color = "#bb3333"
+
+ link.ETX = tonumber(link.ETX)
+ if link.ETX == 0 then
+ color = "#bb3333"
+ elseif link.ETX < 4 then
+ color = "#00cc00"
+ elseif link.ETX < 10 then
+ color = "#ffcb05"
+ elseif link.ETX < 100 then
+ color = "#ff6600"
+ end
+%>
+<tr>
+<td><a href="http://<%=link["remote IP"]%>"><%=link["remote IP"]%></a></td>
+<td><%=link["Local IP"]%></td>
+<td><%=link.LinkQuality%></td>
+<td><%=link.NLQ%></td>
+<td style="background-color:<%=color%>"><%=link.ETX%></td>
+</tr>
+<% end %>
+</table>
+<br />
+<h3><%:legend Legende%>:</h3>
+<ul>
+<li><strong>LQ: </strong><%:lq1 Erfolgsquote gesendeter Pakete%></li>
+<li><strong>NLQ: </strong><%:nlq1 Erfolgsquote empfangener Pakete%></li>
+<li><strong>ETX: </strong><%:etx1 Zu erwartende Sendeversuche pro Paket%></li>
+</ul>
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk-olsr/mid.htm b/modules/freifunk/luasrc/view/freifunk-olsr/mid.htm
new file mode 100644
index 000000000..6553237ea
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk-olsr/mid.htm
@@ -0,0 +1,17 @@
+<%+header%>
+<h1><%:olsrmid OLSR-MID%></h1>
+<br />
+<table cellspacing="0" cellpadding="6">
+<tr>
+<th><%:node Knoten%></th>
+<th><%:aliases Aliasse%></th>
+</tr>
+<% for k, mid in ipairs(mids) do %>
+<tr>
+<td><a href="http://<%=mid.IP%>"><%=mid.IP%></a></td>
+<td><%=mid.Aliases%></td>
+</tr>
+<% end %>
+</table>
+<br />
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk-olsr/routes.htm b/modules/freifunk/luasrc/view/freifunk-olsr/routes.htm
new file mode 100644
index 000000000..f3a0fd336
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk-olsr/routes.htm
@@ -0,0 +1,36 @@
+<%+header%>
+<h1><%:olsrlinks OLSR-Routen%></h1>
+<br />
+<table cellspacing="0" cellpadding="6">
+<tr>
+<th><%:destination Ziel%></th>
+<th><%:gateway Gateway%></th>
+<th><%:interface Schnittstelle%></th>
+<th><%:metric Metrik%></th>
+<th>ETX</th>
+</tr>
+<% for k, route in ipairs(routes) do
+ local color = "#bb3333"
+
+ route.ETX = tonumber(route.ETX)
+ if route.ETX == 0 then
+ color = "#bb3333"
+ elseif route.ETX < 4 then
+ color = "#00cc00"
+ elseif route.ETX < 10 then
+ color = "#ffcb05"
+ elseif route.ETX < 100 then
+ color = "#ff6600"
+ end
+%>
+<tr>
+<td><%=route.Destination%></td>
+<td><%=route.Gateway%></td>
+<td><%=route.Interface%></td>
+<td><%=route.Metric%></td>
+<td style="background-color:<%=color%>"><%=route.ETX%></td>
+</tr>
+<% end %>
+</table>
+<br />
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk-olsr/topology.htm b/modules/freifunk/luasrc/view/freifunk-olsr/topology.htm
new file mode 100644
index 000000000..c622026d4
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk-olsr/topology.htm
@@ -0,0 +1,23 @@
+<%+header%>
+<h1><%:olsrtopo OLSR-Topologie%></h1>
+<br />
+<table cellspacing="0" cellpadding="6">
+<tr>
+<th><%:destination Ziel%></th>
+<th><%:lasthop Letzter Router%></th>
+<th>LQ</th>
+<th>ILQ</th>
+<th>ETX</th>
+</tr>
+<% for k, route in ipairs(routes) do %>
+<tr>
+<td><a href="http://<%=route["Destination IP"]%>"><%=route["Destination IP"]%></a></td>
+<td><a href="http://<%=route["Last hop IP"]%>"><%=route["Last hop IP"]%></a></td>
+<td><%=route.LQ%></td>
+<td><%=route.ILQ%></td>
+<td><%=route.ETX%></td>
+</tr>
+<% end %>
+</table>
+<br />
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk/contact.htm b/modules/freifunk/luasrc/view/freifunk/contact.htm
new file mode 100644
index 000000000..c240916db
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk/contact.htm
@@ -0,0 +1,13 @@
+<%+header%>
+<% local contact = luci.model.uci.sections("freifunk").contact %>
+<h1><%:contact Kontakt%></h1>
+<table cellspacing="0" cellpadding="6">
+ <tr><th><%:nickname Pseudonym%>:</th><td><%=contact.nickname%></td></tr>
+ <tr><th><%:name Name%>:</th><td><%=contact.name%></td></tr>
+ <tr><th><%:mail E-Mail%>:</th><td><%=contact.mail%></td></tr>
+ <tr><th><%:phone Telefon%>:</th><td><%=contact.phone%></td></tr>
+ <tr><th><%:location Standort%>:</th><td><%=contact.location%></td></tr>
+ <tr><th><%:geocoord Geokoordinaten%>:</th><td><%=contact.geo%></td></tr>
+ <tr><th><%:note Notiz%>:</th><td><%=contact.note%></td></tr>
+</table>
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/freifunk/index.htm b/modules/freifunk/luasrc/view/freifunk/index.htm
new file mode 100644
index 000000000..c5ee17b10
--- /dev/null
+++ b/modules/freifunk/luasrc/view/freifunk/index.htm
@@ -0,0 +1,11 @@
+<%+header%>
+<% local ff = luci.model.uci.sections("freifunk") %>
+<h1><%:hellonet Hallo und willkommen im Netz von%> <%=ff.community.name%>!</h1>
+<p><%:public1 Wir sind eine Initiative zur Schaffung eines freien, offenen und unabhängigen Funknetzwerks auf WLAN-Basis.%><br />
+<%:public2 Dies ist der Zugangspunkt %><%=luci.sys.hostname()%>. <%:public3 Er wird betrieben von %>
+<a href="<%=controller%>/public/index/contact"><%=ff.contact.nickname%></a>.</p>
+<p><%:public4 Weitere Informationen zur globalen Freifunkinitiative findest du unter%> <a href="http://freifunk.net">Freifunk.net</a>.<br />
+<%:public5 Hast du Interesse an diesem Projekt, dann wende dich an deine lokale Gemeinschaft%> <a href="<%=ff.community.homepage%>"><%=ff.community.name%></a>.</p>
+<p><strong><%:note Hinweis%></strong>: <%:public6 Der Internetzugang über das experimentelle Freifunknetz ist an technische und organisatorische Bedingungen geknüpft und deshalb möglicherweise
+nicht (immer) gewährleistet.%></p>
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/public_status/index.htm b/modules/freifunk/luasrc/view/public_status/index.htm
new file mode 100644
index 000000000..653baf984
--- /dev/null
+++ b/modules/freifunk/luasrc/view/public_status/index.htm
@@ -0,0 +1,77 @@
+<%+header%>
+<h1><%:status Status%></h1>
+<h2><%:system System%></h2>
+
+<br />
+<table cellspacing="0" cellpadding="6" class="smalltext">
+<tr>
+<th><%:system_type Systemtyp%>:</th>
+<td><%=s%></td>
+</tr>
+<tr>
+<th><%:cpu Prozessor%>:</th>
+<td><%=m%></td>
+</tr>
+<tr>
+<th><%:ram Hauptspeicher%>:</th>
+<td><%=r%></td>
+</tr>
+</table>
+<br /><br />
+
+<h2><%:wifi Drahtlos%></h2>
+<br />
+<table cellspacing="0" cellpadding="6" class="smalltext">
+<tr>
+<th><%:name Name%></th>
+<th><%:protocol Protokoll%></th>
+<th><%:frequency Frequenz%></th>
+<th><%:power Leistung%></th>
+<th><%:bitrate Bitrate%></th>
+<th><%:rts RTS%></th>
+<th><%:frag Frag.%></th>
+<th><%:link Verb.%></th>
+<th><%:signal Signal%></th>
+<th><%:noise Rausch%></th>
+</tr>
+<%for k, v in pairs(luci.sys.wifi.getiwconfig()) do
+%>
+<tr>
+<td rowspan="2"><%=k%></td>
+<td><%=v[1]%></td>
+<td><%=v.Frequency%></td>
+<td><%=v["Tx-Power"]%></td>
+<td><%=v["Bit Rate"]%></td>
+<td><%=v["RTS thr"]%></td>
+<td><%=v["Fragment thr"]%></td>
+<td><%=v["Link Quality"]%></td>
+<td><%=v["Signal level"]%></td>
+<td><%=v["Noise level"]%></td>
+</tr>
+<tr>
+<td colspan="4"><strong>ESSID: </strong><%=v.ESSID%></td>
+<td colspan="5"><strong>BSSID: </strong><%=(v.Cell or v["Access Point"])%></td>
+</tr>
+<%end%>
+</table>
+<br />
+<br />
+<h2><%:defroutes Standardrouten%></h2>
+<br />
+<table cellspacing="0" cellpadding="6" class="smalltext">
+<tr>
+<th><%:gateway Gateway%></th>
+<th><%:metric Metrik%></th>
+<th><%:iface Schnittstelle%></th>
+</tr>
+<%
+for i, rt in pairs(routes) do
+%>
+<tr>
+<td><%=luci.sys.net.hexip4(rt.Gateway)%></th>
+<td><%=rt.Metric%></th>
+<td><%=rt.Iface%></th>
+</tr>
+<% end %>
+</table>
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/public_status/iwscan.htm b/modules/freifunk/luasrc/view/public_status/iwscan.htm
new file mode 100644
index 000000000..adba2d23e
--- /dev/null
+++ b/modules/freifunk/luasrc/view/public_status/iwscan.htm
@@ -0,0 +1,38 @@
+<%+header%>
+<h1><%:iwscan WLAN-Scan%></h1>
+<p><%:iwscan1 Drahtlosnetzwerke in der lokalen Umgebung des Routers:%></p>
+
+<br />
+<table cellspacing="0" cellpadding="6" class="smalltext">
+<tr>
+<th><%:interface Schnittstelle%></th>
+<th><%:essid ESSID%></th>
+<th><%:bssid BSSID%></th>
+<th><%:mode Modus%></th>
+<th><%:channel Kanal%></th>
+<th><%:encr Vers.%></th>
+<th><%:link Verb.%></th>
+<th><%:signal Signal%></th>
+<th><%:noise Rausch%></th>
+</tr>
+<%for iface, cells in pairs(luci.sys.wifi.iwscan()) do
+ for i, cell in ipairs(cells) do
+%>
+<tr>
+<td><%=iface%></td>
+<td><%=cell.ESSID%></td>
+<td><%=cell.Address%></td>
+<td><%=cell.Mode%></td>
+<td><%=(cell.Channel or cell.Frequency or "")%></td>
+<td><%=cell["Encryption key"]%></td>
+<td><%=cell.Quality%></td>
+<td><%=cell["Signal level"]%></td>
+<td><%=cell["Noise level"]%></td>
+</tr>
+<%
+ end
+end
+%>
+</table>
+<br />
+<%+footer%> \ No newline at end of file
diff --git a/modules/freifunk/luasrc/view/public_status/routes.htm b/modules/freifunk/luasrc/view/public_status/routes.htm
new file mode 100644
index 000000000..382b8290f
--- /dev/null
+++ b/modules/freifunk/luasrc/view/public_status/routes.htm
@@ -0,0 +1,28 @@
+<%+header%>
+<h1><%:routes Routen%></h1>
+
+<br />
+<table cellspacing="0" cellpadding="6" class="smalltext">
+<tr>
+<th><%:target Ziel%></th>
+<th><%:netmask Netzmaske%></th>
+<th><%:gateway Gateway%></th>
+<th><%:metric Metrik%></th>
+<th><%:iface Schnittstelle%></th>
+</tr>
+<%
+local routes = luci.sys.net.routes()
+
+for i, r in pairs(routes) do
+%>
+<tr>
+<td><%=luci.sys.net.hexip4(r.Destination)%></td>
+<td><%=luci.sys.net.hexip4(r.Mask)%></td>
+<td><%=luci.sys.net.hexip4(r.Gateway)%></td>
+<td><%=r.Metric%></td>
+<td><%=r.Iface%></td>
+</tr>
+<% end %>
+</table>
+<br />
+<%+footer%> \ No newline at end of file