Start add Feature Sensors on map
This commit is contained in:
parent
ec2500d72f
commit
da34f0566d
@ -50,6 +50,7 @@
|
|||||||
<Compile Include="Model\Admin\AdminSession.cs" />
|
<Compile Include="Model\Admin\AdminSession.cs" />
|
||||||
<Compile Include="Model\Camera.cs" />
|
<Compile Include="Model\Camera.cs" />
|
||||||
<Compile Include="Model\Crowd.cs" />
|
<Compile Include="Model\Crowd.cs" />
|
||||||
|
<Compile Include="Model\EnviromentData.cs" />
|
||||||
<Compile Include="Model\Fight.cs" />
|
<Compile Include="Model\Fight.cs" />
|
||||||
<Compile Include="Model\Marker.cs" />
|
<Compile Include="Model\Marker.cs" />
|
||||||
<Compile Include="Model\AlarmItem.cs" />
|
<Compile Include="Model\AlarmItem.cs" />
|
||||||
|
41
Lora-Map/Model/EnviromentData.cs
Normal file
41
Lora-Map/Model/EnviromentData.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
|
using LitJson;
|
||||||
|
|
||||||
|
namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
||||||
|
class EnviromentData {
|
||||||
|
public String Name { get; private set; }
|
||||||
|
public Double Rssi { get; private set; }
|
||||||
|
public Double Snr { get; private set; }
|
||||||
|
public Double Temperature { get; private set; }
|
||||||
|
public Double Humidity { get; private set; }
|
||||||
|
public Double Windspeed { get; private set; }
|
||||||
|
public DateTime Lorarecievedtime { get; private set; }
|
||||||
|
|
||||||
|
public EnviromentData(JsonData json) => this.Update(json);
|
||||||
|
|
||||||
|
public void Update(JsonData json) {
|
||||||
|
this.Name = GetId(json);
|
||||||
|
this.Rssi = json["Rssi"].IsInt ? (Int32)json["Rssi"] : (Double)json["Rssi"];
|
||||||
|
this.Snr = json["Snr"].IsInt ? (Int32)json["Snr"] : (Double)json["Snr"];
|
||||||
|
this.Temperature = json["Temperature"].IsInt ? (Int32)json["Temperature"] : (Double)json["Temperature"];
|
||||||
|
this.Humidity = json["Humidity"].IsInt ? (Int32)json["Humidity"] : (Double)json["Humidity"];
|
||||||
|
this.Windspeed = json["Windspeed"].IsInt ? (Int32)json["Windspeed"] : (Double)json["Windspeed"];
|
||||||
|
if(DateTime.TryParse((String)json["Receivedtime"], DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out DateTime updatetime)) {
|
||||||
|
this.Lorarecievedtime = updatetime.ToUniversalTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean CheckJson(JsonData json) =>
|
||||||
|
json.ContainsKey("Name") && json["Name"].IsString &&
|
||||||
|
json.ContainsKey("Rssi") && (json["Rssi"].IsDouble || json["Rssi"].IsInt) &&
|
||||||
|
json.ContainsKey("Snr") && (json["Snr"].IsDouble || json["Snr"].IsInt) &&
|
||||||
|
json.ContainsKey("Temperature") && (json["Temperature"].IsDouble || json["Temperature"].IsInt) &&
|
||||||
|
json.ContainsKey("Humidity") && (json["Humidity"].IsDouble || json["Humidity"].IsInt) &&
|
||||||
|
json.ContainsKey("Windspeed") && (json["Windspeed"].IsDouble || json["Windspeed"].IsInt) &&
|
||||||
|
json.ContainsKey("Receivedtime") && json["Receivedtime"].IsString;
|
||||||
|
|
||||||
|
public static String GetId(JsonData json) => (String)json["Name"];
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
public Dictionary<String, List<Dictionary<String, List<Double>>>> Grid { get; private set; }
|
public Dictionary<String, List<Dictionary<String, List<Double>>>> Grid { get; private set; }
|
||||||
public Dictionary<String, Fight> FightDedection { get; private set; }
|
public Dictionary<String, Fight> FightDedection { get; private set; }
|
||||||
public Dictionary<String, Density> DensityArea { get; private set; }
|
public Dictionary<String, Density> DensityArea { get; private set; }
|
||||||
|
public Dictionary<String, Sensor> Sensors { get; private set; }
|
||||||
|
|
||||||
public Settings() => this.ParseJson();
|
public Settings() => this.ParseJson();
|
||||||
|
|
||||||
@ -21,9 +22,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
|
|
||||||
private void ParseJson() {
|
private void ParseJson() {
|
||||||
JsonData json = JsonMapper.ToObject(File.ReadAllText("json/settings.json"));
|
JsonData json = JsonMapper.ToObject(File.ReadAllText("json/settings.json"));
|
||||||
if(json.ContainsKey("StartPos") && json["StartPos"].IsObject &&
|
if(json.ContainsKey("StartPos") && json["StartPos"].IsObject && json["StartPos"].ContainsKey("lat") && json["StartPos"]["lat"].IsDouble && json["StartPos"].ContainsKey("lon") && json["StartPos"]["lon"].IsDouble) {
|
||||||
json["StartPos"].ContainsKey("lat") && json["StartPos"]["lat"].IsDouble &&
|
|
||||||
json["StartPos"].ContainsKey("lon") && json["StartPos"]["lon"].IsDouble) {
|
|
||||||
this.Startloclat = (Double)json["StartPos"]["lat"];
|
this.Startloclat = (Double)json["StartPos"]["lat"];
|
||||||
this.Startloclon = (Double)json["StartPos"]["lon"];
|
this.Startloclon = (Double)json["StartPos"]["lon"];
|
||||||
} else {
|
} else {
|
||||||
@ -54,7 +53,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
fight.Polygon.Add(coords);
|
fight.Polygon.Add(coords);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (entry.Value.ContainsKey("Level") && (entry.Value["Level"].IsDouble)) {
|
if (entry.Value.ContainsKey("Level") && entry.Value["Level"].IsDouble) {
|
||||||
fight.Level = (Double)entry.Value["Level"];
|
fight.Level = (Double)entry.Value["Level"];
|
||||||
}
|
}
|
||||||
if (entry.Value.ContainsKey("Alias") && entry.Value["Alias"].IsString) {
|
if (entry.Value.ContainsKey("Alias") && entry.Value["Alias"].IsString) {
|
||||||
@ -90,6 +89,31 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
}
|
}
|
||||||
this.DensityArea = densitys;
|
this.DensityArea = densitys;
|
||||||
}
|
}
|
||||||
|
if(json.ContainsKey("Sensors") && json["Sensors"].IsObject) {
|
||||||
|
Dictionary<String, Sensor> sensors = new Dictionary<String, Sensor>();
|
||||||
|
foreach(KeyValuePair<String, JsonData> entry in json["Sensors"]) {
|
||||||
|
Sensor sensor = new Sensor {
|
||||||
|
Coordinates = new List<Double>()
|
||||||
|
};
|
||||||
|
if(entry.Value.ContainsKey("Poly") && entry.Value["Poly"].IsObject) {
|
||||||
|
JsonData coord = entry.Value["Poly"];
|
||||||
|
List<Double> coords = new List<Double>();
|
||||||
|
if(coord.ContainsKey("Lat") && coord["Lat"].IsDouble && coord.ContainsKey("Lon") && coord["Lon"].IsDouble) {
|
||||||
|
coords.Add((Double)coord["Lat"]);
|
||||||
|
coords.Add((Double)coord["Lon"]);
|
||||||
|
}
|
||||||
|
sensor.Coordinates = coords;
|
||||||
|
if(entry.Value.ContainsKey("Level") && (entry.Value["Level"].IsInt || entry.Value["Level"].IsDouble)) {
|
||||||
|
sensor.Level = entry.Value["Level"].IsInt ? (Int32)entry.Value["Level"] : (Double)entry.Value["Level"];
|
||||||
|
}
|
||||||
|
if(entry.Value.ContainsKey("Alias") && entry.Value["Alias"].IsString) {
|
||||||
|
sensor.Alias = (String)entry.Value["Alias"];
|
||||||
|
}
|
||||||
|
sensors.Add(entry.Key, sensor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.Sensors = sensors;
|
||||||
|
}
|
||||||
this.gridradius = json.ContainsKey("GridRadius") && json["GridRadius"].IsInt && this.Startloclat != 0 && this.Startloclon != 0 ? (Int32)json["GridRadius"] : 0;
|
this.gridradius = json.ContainsKey("GridRadius") && json["GridRadius"].IsInt && this.Startloclat != 0 && this.Startloclon != 0 ? (Int32)json["GridRadius"] : 0;
|
||||||
this.GenerateGrid();
|
this.GenerateGrid();
|
||||||
}
|
}
|
||||||
@ -185,5 +209,11 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
public Double Level { get; set; }
|
public Double Level { get; set; }
|
||||||
public String Alias { get; set; }
|
public String Alias { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct Sensor {
|
||||||
|
public List<Double> Coordinates { get; set; }
|
||||||
|
public Double Level { get; set; }
|
||||||
|
public String Alias { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
private readonly SortedDictionary<String, Camera> counter = new SortedDictionary<String, Camera>();
|
private readonly SortedDictionary<String, Camera> counter = new SortedDictionary<String, Camera>();
|
||||||
private readonly SortedDictionary<String, Crowd> density = new SortedDictionary<String, Crowd>();
|
private readonly SortedDictionary<String, Crowd> density = new SortedDictionary<String, Crowd>();
|
||||||
private readonly SortedDictionary<String, Fight> fights = new SortedDictionary<String, Fight>();
|
private readonly SortedDictionary<String, Fight> fights = new SortedDictionary<String, Fight>();
|
||||||
|
private readonly SortedDictionary<String, EnviromentData> sensors = new SortedDictionary<String, EnviromentData>();
|
||||||
private JsonData marker;
|
private JsonData marker;
|
||||||
private readonly Settings settings;
|
private readonly Settings settings;
|
||||||
private readonly WeatherWarnings weather;
|
private readonly WeatherWarnings weather;
|
||||||
@ -28,6 +29,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
private readonly Object lockFight = new Object();
|
private readonly Object lockFight = new Object();
|
||||||
private readonly Object lockCount = new Object();
|
private readonly Object lockCount = new Object();
|
||||||
private readonly Object lockDensy = new Object();
|
private readonly Object lockDensy = new Object();
|
||||||
|
private readonly Object lockSensor = new Object();
|
||||||
|
|
||||||
public Server(ADataBackend backend, Dictionary<String, String> settings, InIReader requests) : base(backend, settings, requests) {
|
public Server(ADataBackend backend, Dictionary<String, String> settings, InIReader requests) : base(backend, settings, requests) {
|
||||||
this.logger.SetPath(settings["loggingpath"]);
|
this.logger.SetPath(settings["loggingpath"]);
|
||||||
@ -105,8 +107,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
this.counter.Add(cameraid, new Camera(d));
|
this.counter.Add(cameraid, new Camera(d));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(((((String)mqtt.From).Contains("sfn/crowd_density_local") || ((String)mqtt.From).Contains("camera/crowd")) && Crowd.CheckJsonCrowdDensityLocal(d)) ||
|
} else if((((String)mqtt.From).Contains("sfn/crowd_density_local") || ((String)mqtt.From).Contains("camera/crowd")) && Crowd.CheckJsonCrowdDensityLocal(d) || ((String)mqtt.From).Contains("sfn/flow") && Crowd.CheckJsonFlow(d)) {
|
||||||
(((String)mqtt.From).Contains("sfn/flow") && Crowd.CheckJsonFlow(d))) {
|
|
||||||
String cameraid = Crowd.GetId(d);
|
String cameraid = Crowd.GetId(d);
|
||||||
lock(this.lockDensy) {
|
lock(this.lockDensy) {
|
||||||
if(this.density.ContainsKey(cameraid)) {
|
if(this.density.ContainsKey(cameraid)) {
|
||||||
@ -124,6 +125,16 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
this.fights.Add(cameraid, new Fight(d));
|
this.fights.Add(cameraid, new Fight(d));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if(((String)mqtt.From).Contains("lora/sensor") && EnviromentData.CheckJson(d)) {
|
||||||
|
String sensorid = EnviromentData.GetId(d);
|
||||||
|
lock(this.lockSensor) {
|
||||||
|
if(this.sensors.ContainsKey(sensorid)) {
|
||||||
|
this.sensors[sensorid].Update(d);
|
||||||
|
} else {
|
||||||
|
this.sensors.Add(sensorid, new EnviromentData(d));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Console.WriteLine("Umweltdaten erhalten!");
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Helper.WriteError("Backend_MessageIncomming(): "+e.Message + "\n\n" + e.StackTrace);
|
Helper.WriteError("Backend_MessageIncomming(): "+e.Message + "\n\n" + e.StackTrace);
|
||||||
@ -139,7 +150,8 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
{ "cameracount", this.counter },
|
{ "cameracount", this.counter },
|
||||||
{ "crowdcount", this.density },
|
{ "crowdcount", this.density },
|
||||||
{ "fightdedect", this.fights },
|
{ "fightdedect", this.fights },
|
||||||
{ "weatherwarnings", this.weather.Warnungen }
|
{ "weatherwarnings", this.weather.Warnungen },
|
||||||
|
{ "sensors", this.sensors }
|
||||||
}, cont);
|
}, cont);
|
||||||
} else if (cont.Request.Url.PathAndQuery.StartsWith("/get60000")) {
|
} else if (cont.Request.Url.PathAndQuery.StartsWith("/get60000")) {
|
||||||
return SendJsonResponse(new Dictionary<String, Object>() {
|
return SendJsonResponse(new Dictionary<String, Object>() {
|
||||||
@ -147,7 +159,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
}, cont);
|
}, cont);
|
||||||
} else if (cont.Request.Url.PathAndQuery.StartsWith("/getonce")) {
|
} else if (cont.Request.Url.PathAndQuery.StartsWith("/getonce")) {
|
||||||
return SendJsonResponse(new Dictionary<String, Object>() {
|
return SendJsonResponse(new Dictionary<String, Object>() {
|
||||||
{ "getlayer", this.FindMapLayer(cont.Request) },
|
{ "getlayer", this.FindMapLayer() },
|
||||||
{ "getgeo", JsonMapper.ToObject(File.ReadAllText("json/geo.json")) },
|
{ "getgeo", JsonMapper.ToObject(File.ReadAllText("json/geo.json")) },
|
||||||
{ "startup", this.settings }
|
{ "startup", this.settings }
|
||||||
}, cont);
|
}, cont);
|
||||||
@ -175,7 +187,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
return SendFileResponse(cont);
|
return SendFileResponse(cont);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<String, Dictionary<String, Object>> FindMapLayer(HttpListenerRequest request) {
|
private Dictionary<String, Dictionary<String, Object>> FindMapLayer() {
|
||||||
Dictionary<String, Dictionary<String, Object>> ret = new Dictionary<String, Dictionary<String, Object>> {
|
Dictionary<String, Dictionary<String, Object>> ret = new Dictionary<String, Dictionary<String, Object>> {
|
||||||
{ "online", new Dictionary<String, Object>() {
|
{ "online", new Dictionary<String, Object>() {
|
||||||
{ "title", "Online Map" },
|
{ "title", "Online Map" },
|
||||||
|
@ -375,12 +375,16 @@ var Settings = {
|
|||||||
if (typeof jsonsettings.Counting === "undefined") {
|
if (typeof jsonsettings.Counting === "undefined") {
|
||||||
jsonsettings.Counting = [];
|
jsonsettings.Counting = [];
|
||||||
}
|
}
|
||||||
|
if (typeof jsonsettings.Sensors === "undefined") {
|
||||||
|
jsonsettings.Sensors = [];
|
||||||
|
}
|
||||||
var html = "<div id='settingseditor'><div class='title'>Einstellungen</div>";
|
var html = "<div id='settingseditor'><div class='title'>Einstellungen</div>";
|
||||||
html += "<div class='startloc'>Startpunkt: <input value='" + jsonsettings.StartPos.lat + "' id='startlat'> Lat, <input value='" + jsonsettings.StartPos.lon + "' id='startlon'> Lon</div>";
|
html += "<div class='startloc'>Startpunkt: <input value='" + jsonsettings.StartPos.lat + "' id='startlat'> Lat, <input value='" + jsonsettings.StartPos.lon + "' id='startlon'> Lon</div>";
|
||||||
html += "<div class='wetterwarnings'>CellId's für DWD-Wetterwarnungen: <input value='" + jsonsettings.CellIds.join(";") + "' id='wetterids'> (Trennen durch \";\", <a href='https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.html'>cap_warncellids_csv</a>)</div>";
|
html += "<div class='wetterwarnings'>CellId's für DWD-Wetterwarnungen: <input value='" + jsonsettings.CellIds.join(";") + "' id='wetterids'> (Trennen durch \";\", <a href='https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.html'>cap_warncellids_csv</a>)</div>";
|
||||||
html += "<div class='gridradius'>Radius für das Grid um den Startpunkt: <input value='" + jsonsettings.GridRadius + "' id='gridrad'>m</div>";
|
html += "<div class='gridradius'>Radius für das Grid um den Startpunkt: <input value='" + jsonsettings.GridRadius + "' id='gridrad'>m</div>";
|
||||||
html += "<div class='fightdedection'>Fight Dedection Kameras: <br>" + this._renderFightDedection(jsonsettings.FightDedection) + "</div>";
|
html += "<div class='fightdedection'>Fight Dedection Kameras: <br>" + this._renderFightDedection(jsonsettings.FightDedection) + "</div>";
|
||||||
html += "<div class='crowddensity'>Crowd Density Kameras: <br>" + this._renderCrowdDensity(jsonsettings.CrwodDensity) + "</div>";
|
html += "<div class='crowddensity'>Crowd Density Kameras: <br>" + this._renderCrowdDensity(jsonsettings.CrwodDensity) + "</div>";
|
||||||
|
html += "<div class='sensorsettings'>Sensors: <br>" + this._renderSensorSettings(jsonsettings.Sensors) + "</div>";
|
||||||
html += "<div class='savesettings'><img src='../icons/general/save.png' onclick='Settings.Save()' class='pointer'></div>";
|
html += "<div class='savesettings'><img src='../icons/general/save.png' onclick='Settings.Save()' class='pointer'></div>";
|
||||||
document.getElementById("content").innerHTML = html + "</div>";
|
document.getElementById("content").innerHTML = html + "</div>";
|
||||||
},
|
},
|
||||||
@ -434,6 +438,26 @@ var Settings = {
|
|||||||
}
|
}
|
||||||
ret.CrwodDensity = crowdjson;
|
ret.CrwodDensity = crowdjson;
|
||||||
|
|
||||||
|
var rowss = document.getElementById("sensortable").children[1].children;
|
||||||
|
var sensorjson = {};
|
||||||
|
for (i = 0; i < rowss.length; i++) {
|
||||||
|
if (rowss[i].children[0].children.length === 1) {
|
||||||
|
alert("Bitte zuerst alle Zeilen speichern oder Löschen!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
id = rowss[i].children[0].innerText;
|
||||||
|
coord = rowss[i].children[2].innerHTML.split(";");
|
||||||
|
sensorjson[id] = {
|
||||||
|
"Poly": {
|
||||||
|
"Lat": this._filterFloat(coord[0]),
|
||||||
|
"Lon": this._filterFloat(coord[1])
|
||||||
|
},
|
||||||
|
"Level": this._filterFloat(rowss[i].children[3].innerText),
|
||||||
|
"Alias": rowss[i].children[1].innerText
|
||||||
|
};
|
||||||
|
}
|
||||||
|
ret.Sensors = sensorjson;
|
||||||
|
|
||||||
var savesettings = new XMLHttpRequest();
|
var savesettings = new XMLHttpRequest();
|
||||||
savesettings.onreadystatechange = function () {
|
savesettings.onreadystatechange = function () {
|
||||||
if (savesettings.readyState === 4) {
|
if (savesettings.readyState === 4) {
|
||||||
@ -447,6 +471,27 @@ var Settings = {
|
|||||||
savesettings.open("POST", "/admin/set_json_settings", true);
|
savesettings.open("POST", "/admin/set_json_settings", true);
|
||||||
savesettings.send(JSON.stringify(ret));
|
savesettings.send(JSON.stringify(ret));
|
||||||
},
|
},
|
||||||
|
_renderSensorSettings: function (json) {
|
||||||
|
var ret = "";
|
||||||
|
ret += "<table id='sensortable' class='settingstable'>";
|
||||||
|
ret += "<thead><tr><th width='150'>ID</th><th width='150'>Alias</th><th width='250'>Koordinaten</th><th width='150'>Warn above</th><th width='50'></th></tr></thead>";
|
||||||
|
|
||||||
|
ret += "<tbody>";
|
||||||
|
for (var id in json) {
|
||||||
|
ret += "<tr>" +
|
||||||
|
"<td>" + id + "</td>" +
|
||||||
|
"<td>" + json[id].Alias + "</td>" +
|
||||||
|
"<td>" + json[id].Poly.Lat + ";" + json[id].Poly.Lon + "</td>" +
|
||||||
|
"<td>" + json[id].Level + "</td>" +
|
||||||
|
"<td><img src='../icons/general/edit.png' onclick='Settings.EditSensor(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Delete(this.parentNode.parentNode)' class='pointer'></td>" +
|
||||||
|
"</tr>";
|
||||||
|
}
|
||||||
|
ret += "</tbody>";
|
||||||
|
|
||||||
|
ret += "<tfoot><tr><td></td><td></td><td></td><td></td><td><img src='../icons/general/add.png' onclick='Settings.AddSensor()' class='pointer'></td></tr></tfoot>";
|
||||||
|
ret += "</table>";
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
_renderFightDedection: function (json) {
|
_renderFightDedection: function (json) {
|
||||||
var ret = "";
|
var ret = "";
|
||||||
ret += "<table id='fighttable' class='settingstable'>";
|
ret += "<table id='fighttable' class='settingstable'>";
|
||||||
@ -493,12 +538,21 @@ var Settings = {
|
|||||||
ret += "</table>";
|
ret += "</table>";
|
||||||
return ret;
|
return ret;
|
||||||
},
|
},
|
||||||
|
AddSensor: function () {
|
||||||
|
var newrow = document.createElement("tr");
|
||||||
|
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
||||||
|
newrow.innerHTML += "<td><input style='width: 145px;'/></td>";
|
||||||
|
newrow.innerHTML += "<td><input style='width: 250px;'/></td>";
|
||||||
|
newrow.innerHTML += "<td><input style='width: 145px;'/></td>";
|
||||||
|
newrow.innerHTML += "<td><img src='../icons/general/save.png' onclick='Settings.SaveRowSensor(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Abort(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
|
document.getElementById("sensortable").children[1].appendChild(newrow);
|
||||||
|
},
|
||||||
AddFight: function () {
|
AddFight: function () {
|
||||||
var newrow = document.createElement("tr");
|
var newrow = document.createElement("tr");
|
||||||
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
||||||
newrow.innerHTML += "<td><textarea style='width: 240px;height: 60px;'></textarea></td>";
|
newrow.innerHTML += "<td><textarea style='width: 240px;height: 60px;'></textarea></td>";
|
||||||
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
newrow.innerHTML += "<td><input style='width: 145px;'/></td>";
|
||||||
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
newrow.innerHTML += "<td><input style='width: 145px;'/></td>";
|
||||||
newrow.innerHTML += "<td><img src='../icons/general/save.png' onclick='Settings.SaveRowfight(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Abort(this.parentNode.parentNode)' class='pointer'></td>";
|
newrow.innerHTML += "<td><img src='../icons/general/save.png' onclick='Settings.SaveRowfight(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Abort(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
document.getElementById("fighttable").children[1].appendChild(newrow);
|
document.getElementById("fighttable").children[1].appendChild(newrow);
|
||||||
},
|
},
|
||||||
@ -507,13 +561,36 @@ var Settings = {
|
|||||||
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
||||||
newrow.innerHTML += "<td><input style='width: 195px;'/></td>";
|
newrow.innerHTML += "<td><input style='width: 195px;'/></td>";
|
||||||
newrow.innerHTML += "<td><textarea style='width: 240px;height: 60px;'></textarea></td>";
|
newrow.innerHTML += "<td><textarea style='width: 240px;height: 60px;'></textarea></td>";
|
||||||
newrow.innerHTML = "<td><input style='width: 145px;'/></td>";
|
newrow.innerHTML += "<td><input style='width: 145px;'/></td>";
|
||||||
newrow.innerHTML += "<td><img src='../icons/general/save.png' onclick='Settings.SaveRowdensity(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Abort(this.parentNode.parentNode)' class='pointer'></td>";
|
newrow.innerHTML += "<td><img src='../icons/general/save.png' onclick='Settings.SaveRowdensity(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Abort(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
document.getElementById("crowdtable").children[1].appendChild(newrow);
|
document.getElementById("crowdtable").children[1].appendChild(newrow);
|
||||||
},
|
},
|
||||||
Abort: function (el) {
|
Abort: function (el) {
|
||||||
el.parentNode.removeChild(el);
|
el.parentNode.removeChild(el);
|
||||||
},
|
},
|
||||||
|
SaveRowSensor: function (el) {
|
||||||
|
var coords = el.children[2].children[0].value;
|
||||||
|
var coord = coords.split(";");
|
||||||
|
var fail = false;
|
||||||
|
if (coord.length !== 2) {
|
||||||
|
fail = true;
|
||||||
|
} else if (isNaN(this._filterFloat(coord[0])) || isNaN(this._filterFloat(coord[1]))) {
|
||||||
|
fail = true;
|
||||||
|
}
|
||||||
|
if (isNaN(this._filterFloat(el.children[3].children[0].value))) {
|
||||||
|
alert("Die Eingabe des Alertlevel erwartet einen Float");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (fail) {
|
||||||
|
alert("Die Eingabe der Koordinaten ist nicht Korrekt!\n\nBeispiel:\n50.7;7.8");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
el.innerHTML = "<td>" + el.children[0].children[0].value + "</td>" +
|
||||||
|
"<td>" + el.children[1].children[0].value + "</td>" +
|
||||||
|
"<td>" + coords + "</td>" +
|
||||||
|
"<td>" + this._filterFloat(el.children[3].children[0].value) + "</td>" +
|
||||||
|
"<td><img src='../icons/general/edit.png' onclick='Settings.EditSensor(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Delete(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
|
},
|
||||||
SaveRowfight: function (el) {
|
SaveRowfight: function (el) {
|
||||||
var coords = el.children[1].children[0].value.replace(/\n/gi, "<br>");
|
var coords = el.children[1].children[0].value.replace(/\n/gi, "<br>");
|
||||||
var coordscheck = coords.split("<br>");
|
var coordscheck = coords.split("<br>");
|
||||||
@ -541,7 +618,7 @@ var Settings = {
|
|||||||
"<td>" + coords + "</td>" +
|
"<td>" + coords + "</td>" +
|
||||||
"<td>" + el.children[2].children[0].value + "</td>" +
|
"<td>" + el.children[2].children[0].value + "</td>" +
|
||||||
"<td>" + this._filterFloat(el.children[3].children[0].value) + "</td>" +
|
"<td>" + this._filterFloat(el.children[3].children[0].value) + "</td>" +
|
||||||
"<td><img src='../icons/general/edit.png' onclick='Settings.EditFight(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.DeleteFight(this.parentNode.parentNode)' class='pointer'></td>";
|
"<td><img src='../icons/general/edit.png' onclick='Settings.EditFight(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Delete(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
},
|
},
|
||||||
SaveRowdensity: function (el) {
|
SaveRowdensity: function (el) {
|
||||||
var coords = el.children[2].children[0].value.replace(/\n/gi, "<br>");
|
var coords = el.children[2].children[0].value.replace(/\n/gi, "<br>");
|
||||||
@ -570,7 +647,7 @@ var Settings = {
|
|||||||
"<td>" + el.children[1].children[0].value + "</td>" +
|
"<td>" + el.children[1].children[0].value + "</td>" +
|
||||||
"<td>" + coords + "</td>" +
|
"<td>" + coords + "</td>" +
|
||||||
"<td>" + el.children[3].children[0].value + "</td>" +
|
"<td>" + el.children[3].children[0].value + "</td>" +
|
||||||
"<td><img src='../icons/general/edit.png' onclick='Settings.EditDensity(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.DeleteFight(this.parentNode.parentNode)' class='pointer'></td>";
|
"<td><img src='../icons/general/edit.png' onclick='Settings.EditDensity(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Delete(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
},
|
},
|
||||||
Delete: function (el) {
|
Delete: function (el) {
|
||||||
var answ = window.prompt("Wollen sie den Eintrag für \"" + el.firstChild.innerHTML + "\" wirklich löschen?", "");
|
var answ = window.prompt("Wollen sie den Eintrag für \"" + el.firstChild.innerHTML + "\" wirklich löschen?", "");
|
||||||
@ -578,6 +655,13 @@ var Settings = {
|
|||||||
el.parentNode.removeChild(el);
|
el.parentNode.removeChild(el);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
EditSensor: function (el) {
|
||||||
|
el.innerHTML = "<td><input style='width: 145px;' value='" + el.children[0].innerText + "'/></td>" +
|
||||||
|
"<td><input style='width: 145px;' value='" + el.children[1].innerText + "'/></td>" +
|
||||||
|
"<td><input style='width: 250px;' value='" + el.children[2].innerText + "'/></td>" +
|
||||||
|
"<td><input style='width: 145px;' value='" + el.children[3].innerText + "'/></td>" +
|
||||||
|
"<td><img src='../icons/general/save.png' onclick='Settings.SaveRowSensor(this.parentNode.parentNode)' class='pointer'> <img src='../icons/general/remove.png' onclick='Settings.Abort(this.parentNode.parentNode)' class='pointer'></td>";
|
||||||
|
},
|
||||||
EditFight: function (el) {
|
EditFight: function (el) {
|
||||||
el.innerHTML = "<td><input style='width: 145px;' value='" + el.children[0].innerText + "'/></td>" +
|
el.innerHTML = "<td><input style='width: 145px;' value='" + el.children[0].innerText + "'/></td>" +
|
||||||
"<td><textarea style='width: 240px;height: 60px;'>" + el.children[1].innerText + "</textarea></td>" +
|
"<td><textarea style='width: 240px;height: 60px;'>" + el.children[1].innerText + "</textarea></td>" +
|
||||||
|
@ -21,6 +21,22 @@
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
#bigmap .leaflet-map-pane .leaflet-marker-pane .mapsensor {
|
||||||
|
background-color: white;
|
||||||
|
border: 2px solid black;
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
#bigmap .leaflet-map-pane .leaflet-marker-pane .mapsensor span {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#bigmap .leaflet-map-pane .leaflet-marker-pane .mapsensor .name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#bigmap .leaflet-map-pane .leaflet-marker-pane .mapsensor .wind {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Optional: Makes the sample page fill the window. */
|
/* Optional: Makes the sample page fill the window. */
|
||||||
html, body {
|
html, body {
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
MarkerObject._ParseAJAXPanic(json["panic"]);
|
MarkerObject._ParseAJAXPanic(json["panic"]);
|
||||||
OverlayObject._ParseAJAXCount(json["cameracount"]);
|
OverlayObject._ParseAJAXCount(json["cameracount"]);
|
||||||
OverlayObject._ParseAJAXDensity(json["crowdcount"]);
|
OverlayObject._ParseAJAXDensity(json["crowdcount"]);
|
||||||
|
MarkerObject._ParseAJAXSensors(json["sensors"]);
|
||||||
MenuObject._ParseAJAXWeatherAlerts(json["weatherwarnings"]);
|
MenuObject._ParseAJAXWeatherAlerts(json["weatherwarnings"]);
|
||||||
MapObject._ParseAJAXFightDedection(json["fightdedect"]);
|
MapObject._ParseAJAXFightDedection(json["fightdedect"]);
|
||||||
MapObject._ParseAJAXDensity(json["crowdcount"]);
|
MapObject._ParseAJAXDensity(json["crowdcount"]);
|
||||||
@ -45,6 +46,7 @@
|
|||||||
MapObject._ParseAJAXGeo(json["getgeo"]);
|
MapObject._ParseAJAXGeo(json["getgeo"]);
|
||||||
MapObject._ParseAJAXSettings(json["startup"]);
|
MapObject._ParseAJAXSettings(json["startup"]);
|
||||||
OverlayObject._ParseAJAXSettings(json["startup"]);
|
OverlayObject._ParseAJAXSettings(json["startup"]);
|
||||||
|
MarkerObject._ParseAJAXSettings(json["startup"]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
getonce.open("GET", "/getonce", true);
|
getonce.open("GET", "/getonce", true);
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
PanicData: {},
|
PanicData: {},
|
||||||
LocationData: {},
|
LocationData: {},
|
||||||
VisibleMarkers: {},
|
VisibleMarkers: {},
|
||||||
|
_Sensors: {},
|
||||||
|
_SensorSettings: {},
|
||||||
Start: function () {
|
Start: function () {
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
@ -90,6 +92,36 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_ParseAJAXSensors: function (sensorjson) {
|
||||||
|
for (var sensorid in sensorjson) {
|
||||||
|
if (sensorjson.hasOwnProperty(sensorid)) {
|
||||||
|
if (this._SensorSettings.hasOwnProperty(sensorid)) {
|
||||||
|
var sensordata = sensorjson[sensorid];
|
||||||
|
var sensorsettings = this._SensorSettings[sensorid];
|
||||||
|
|
||||||
|
if (!this._Sensors.hasOwnProperty(sensorid)) { //Sensor is not drawn until now
|
||||||
|
var sensor = null;
|
||||||
|
var sensorIcon = L.divIcon({
|
||||||
|
className: 'sensoricon',
|
||||||
|
iconSize: [60, 120],
|
||||||
|
iconAnchor: [30, 60],
|
||||||
|
html: '<div class="mapsensor" id="MapSensor_id_' + sensorid + '"><span class="name">' + sensorsettings.Alias + '</span>' +
|
||||||
|
'<span class="temp">' + sensordata.Temperature + ' °C</span>' +
|
||||||
|
'<span class="wind">' + sensordata.Windspeed + ' m/s</span>' +
|
||||||
|
'<span class="hum">' + sensordata.Humidity + ' %rl</span></div>'
|
||||||
|
});
|
||||||
|
sensor = L.marker(sensorsettings.Coordinates, { 'title': sensorsettings.Alias, 'icon': sensorIcon });
|
||||||
|
this._Sensors[sensorid] = sensor.addTo(MapObject.Map);
|
||||||
|
} else { //Sensor refresh!
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ParseAJAXSettings: function(json) {
|
||||||
|
this._SensorSettings = json["Sensors"];
|
||||||
|
},
|
||||||
ChangeFilter: function (select) {
|
ChangeFilter: function (select) {
|
||||||
this.VisibleMarkers = {};
|
this.VisibleMarkers = {};
|
||||||
if (select.selectedOptions.length > 0) {
|
if (select.selectedOptions.length > 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user