$VMAJOR.$VMINOR.$VBUILD"/ $EXEC/resources/index.html
+echo "Change Versionnumber in index.html"
+
cp $OUTPUT/config-example/* $CONFIG
chmod 644 $CONFIG/*
chmod 755 $CONFIG
-cp loramap-logrotate $LOGROTATE/loramap
+echo "Copy example-conf to $CONFIG."
+
+cp "logrotate-$DEBNAME" "$LOGROTATE/$DEBNAME.conf"
chmod 644 $LOGROTATE/*
+echo "Copy $DEBNAME.conf to $LOGROTATE."
+
dpkg-deb --build $ROOT
-mv $HOMEDIR/deb.deb ../../../Builds/"$ARCHT-loramap_$VMAJOR.$VMINOR-$VBUILD.deb"
-rm $HOMEDIR/deb -r
\ No newline at end of file
+
+echo "Build deb packet."
+
+
+TARGETFILE="$DEBNAME""_$VMAJOR.$VMINOR-$VBUILD.deb"
+mv $HOMEDIR/deb.deb "../../../Builds/$ARCHT-$TARGETFILE"
+
+echo "Move $ARCHT-$TARGETFILE to Builds."
+
+rm $HOMEDIR/deb -r
+
+echo "Remove $HOMEDIR/deb."
+
+echo "##[set-output name=debuilderfile;]$TARGETFILE"
+echo "##[set-output name=builddaterelease;]$(date +"%F_%H%M%S")"
\ No newline at end of file
diff --git a/Lora-Map/dpkg/postinst b/Lora-Map/dpkg/postinst
index 27417e8..29de190 100644
--- a/Lora-Map/dpkg/postinst
+++ b/Lora-Map/dpkg/postinst
@@ -1,9 +1,17 @@
#!/bin/bash
-systemctl enable loramap
+DEBNAME="loramap"
+
+systemctl enable $DEBNAME
systemctl daemon-reload
-if [ -f /tmp/loramap_service_runner ]; then
- service loramap start
- rm /tmp/loramap_service_runner
+touch /var/log/loramap.log
+chown loramapbot:loramapbot /var/log/loramap.log
+chmod 644 /var/log/loramap.log
+
+chown -R loramapbot:loramapbot /usr/local/bin/$DEBNAME
+
+if [ -f /tmp/$DEBNAME_service_runner ]; then
+ service $DEBNAME start
+ rm /tmp/$DEBNAME_service_runner
fi
\ No newline at end of file
diff --git a/Lora-Map/dpkg/preinst b/Lora-Map/dpkg/preinst
index 05a7907..ac749ec 100644
--- a/Lora-Map/dpkg/preinst
+++ b/Lora-Map/dpkg/preinst
@@ -1,2 +1,6 @@
#!/bin/bash
+useradd -M loramapbot
+usermod -L loramapbot
+groupadd loramapbot
+usermod -G loramapbot,adm loramapbot
\ No newline at end of file
diff --git a/Lora-Map/dpkg/prerm b/Lora-Map/dpkg/prerm
index 77d10d3..c26ba9f 100644
--- a/Lora-Map/dpkg/prerm
+++ b/Lora-Map/dpkg/prerm
@@ -1,7 +1,9 @@
#!/bin/bash
-if [[ $(systemctl is-active loramap || true) == "active" ]]
+DEBNAME="loramap"
+
+if [[ $(systemctl is-active $DEBNAME || true) == "active" ]]
then
- touch /tmp/loramap_service_runner
- service loramap stop
+ touch /tmp/$DEBNAME_service_runner
+ service $DEBNAME stop
fi
\ No newline at end of file
diff --git a/Lora-Map/dpkg/loramap.service b/Lora-Map/dpkg/service-loramap
similarity index 62%
rename from Lora-Map/dpkg/loramap.service
rename to Lora-Map/dpkg/service-loramap
index 203bcac..bc7f0fb 100644
--- a/Lora-Map/dpkg/loramap.service
+++ b/Lora-Map/dpkg/service-loramap
@@ -5,10 +5,12 @@ Description=Lora-Map
After=network-online.target
[Service]
-User=root
-Group=root
+User=loramapbot
+Group=loramapbot
WorkingDirectory=/usr/local/bin/loramap
-ExecStart=/usr/bin/mono /usr/local/bin/loramap/Lora-Map.exe
+PermissionsStartOnly=true
+ExecStartPre=setcap 'cap_net_bind_service=+ep' /usr/share/dotnet/dotnet
+ExecStart=/usr/bin/dotnet /usr/local/bin/loramap/Lora-Map.dll
KillMode=control-group
TimeoutStopSec=5
Restart=on-failure
diff --git a/Lora-Map/resources/admin/js/menu.js b/Lora-Map/resources/admin/js/menu.js
index 1a61b29..704d969 100644
--- a/Lora-Map/resources/admin/js/menu.js
+++ b/Lora-Map/resources/admin/js/menu.js
@@ -372,12 +372,19 @@ var Settings = {
if (typeof jsonsettings.CrwodDensity === "undefined") {
jsonsettings.CrwodDensity = [];
}
+ if (typeof jsonsettings.Counting === "undefined") {
+ jsonsettings.Counting = [];
+ }
+ if (typeof jsonsettings.Sensors === "undefined") {
+ jsonsettings.Sensors = [];
+ }
var html = "
Einstellungen
";
html += "
Startpunkt: Lat, Lon
";
html += "
";
html += "
Radius für das Grid um den Startpunkt: m
";
html += "
Fight Dedection Kameras:
" + this._renderFightDedection(jsonsettings.FightDedection) + "
";
html += "
Crowd Density Kameras:
" + this._renderCrowdDensity(jsonsettings.CrwodDensity) + "
";
+ html += "
Sensors:
" + this._renderSensorSettings(jsonsettings.Sensors) + "
";
html += "
";
document.getElementById("content").innerHTML = html + "
";
},
@@ -403,7 +410,7 @@ var Settings = {
var coord = coords[j].split(";");
polyjson[j] = { "Lat": this._filterFloat(coord[0]), "Lon": this._filterFloat(coord[1]) };
}
- fightjson[id] = { "Poly": polyjson };
+ fightjson[id] = { "Poly": polyjson, "Alias": rowsf[i].children[2].innerText, "Level": this._filterFloat(rowsf[i].children[3].innerText) };
}
ret.FightDedection = fightjson;
@@ -425,11 +432,32 @@ var Settings = {
}
crowdjson[id] = {
"Poly": polyjson,
- "Count": num
+ "Count": num,
+ "Alias": rowsc[i].children[3].innerText
};
}
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();
savesettings.onreadystatechange = function () {
if (savesettings.readyState === 4) {
@@ -442,11 +470,32 @@ var Settings = {
};
savesettings.open("POST", "/admin/set_json_settings", true);
savesettings.send(JSON.stringify(ret));
- },
+ },
+ _renderSensorSettings: function (json) {
+ var ret = "";
+ ret += "
";
+ ret += "ID | Alias | Koordinaten | Warn above | |
";
+
+ ret += "";
+ for (var id in json) {
+ ret += "" +
+ "" + id + " | " +
+ "" + json[id].Alias + " | " +
+ "" + json[id].Poly.Lat + ";" + json[id].Poly.Lon + " | " +
+ "" + json[id].Level + " | " +
+ "  | " +
+ "
";
+ }
+ ret += "";
+
+ ret += " | | | |  |
";
+ ret += "
";
+ return ret;
+ },
_renderFightDedection: function (json) {
var ret = "";
ret += "
";
- ret += "ID | Koordinaten | |
";
+ ret += "ID | Koordinaten | Alias | Alertlimit | |
";
ret += "";
for (var id in json) {
var coords = [];
@@ -456,18 +505,20 @@ var Settings = {
ret += "" +
"" + id + " | " +
"" + coords.join(" ") + " | " +
+ "" + json[id].Alias + " | " +
+ "" + json[id].Level + " | " +
"  | " +
"
";
}
ret += "";
- ret += " | |  |
";
+ ret += " | | | |  |
";
ret += "
";
return ret;
},
_renderCrowdDensity: function (json) {
var ret = "";
ret += "
";
- ret += "ID | Personenanzahl | Koordinaten | |
";
+ ret += "ID | Personenanzahl | Koordinaten | Alias | |
";
ret += "";
for (var id in json) {
var coords = [];
@@ -478,18 +529,30 @@ var Settings = {
"" + id + " | " +
"" + json[id].Count + " | " +
"" + coords.join(" ") + " | " +
+ "" + json[id].Alias + " | " +
"  | " +
"";
}
ret += "";
- ret += " | | |  |
";
+ ret += " | | | |  |
";
ret += "
";
return ret;
},
+ AddSensor: function () {
+ var newrow = document.createElement("tr");
+ newrow.innerHTML = "
| ";
+ newrow.innerHTML += "
| ";
+ newrow.innerHTML += "
| ";
+ newrow.innerHTML += "
| ";
+ newrow.innerHTML += "
 | ";
+ document.getElementById("sensortable").children[1].appendChild(newrow);
+ },
AddFight: function () {
var newrow = document.createElement("tr");
newrow.innerHTML = "
| ";
newrow.innerHTML += "
| ";
+ newrow.innerHTML += "
| ";
+ newrow.innerHTML += "
| ";
newrow.innerHTML += "
 | ";
document.getElementById("fighttable").children[1].appendChild(newrow);
},
@@ -498,12 +561,36 @@ var Settings = {
newrow.innerHTML = "
| ";
newrow.innerHTML += "
| ";
newrow.innerHTML += "
| ";
+ newrow.innerHTML += "
| ";
newrow.innerHTML += "
 | ";
document.getElementById("crowdtable").children[1].appendChild(newrow);
},
Abort: function (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 = "
" + el.children[0].children[0].value + " | " +
+ "
" + el.children[1].children[0].value + " | " +
+ "
" + coords + " | " +
+ "
" + this._filterFloat(el.children[3].children[0].value) + " | " +
+ "
 | ";
+ },
SaveRowfight: function (el) {
var coords = el.children[1].children[0].value.replace(/\n/gi, "
");
var coordscheck = coords.split("
");
@@ -519,13 +606,19 @@ var Settings = {
break;
}
}
+ 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\n50.6;7.9");
return;
}
el.innerHTML = "
" + el.children[0].children[0].value + " | " +
"
" + coords + " | " +
- "
 | ";
+ "
" + el.children[2].children[0].value + " | " +
+ "
" + this._filterFloat(el.children[3].children[0].value) + " | " +
+ "
 | ";
},
SaveRowdensity: function (el) {
var coords = el.children[2].children[0].value.replace(/\n/gi, "
");
@@ -553,7 +646,8 @@ var Settings = {
el.innerHTML = "
" + el.children[0].children[0].value + " | " +
"
" + el.children[1].children[0].value + " | " +
"
" + coords + " | " +
- "
 | ";
+ "
" + el.children[3].children[0].value + " | " +
+ "
 | ";
},
Delete: function (el) {
var answ = window.prompt("Wollen sie den Eintrag für \"" + el.firstChild.innerHTML + "\" wirklich löschen?", "");
@@ -561,15 +655,25 @@ var Settings = {
el.parentNode.removeChild(el);
}
},
+ EditSensor: function (el) {
+ el.innerHTML = "
| " +
+ "
| " +
+ "
| " +
+ "
| " +
+ "
 | ";
+ },
EditFight: function (el) {
el.innerHTML = "
| " +
"
| " +
+ "
| " +
+ "
| " +
"
 | ";
},
EditDensity: function (el) {
el.innerHTML = "
| " +
"
| " +
"
| " +
+ "
| " +
"
 | ";
},
_filterFloat: function (value) {
@@ -586,7 +690,6 @@ var ExImport = {
html += "
names.json (Namen und Icons)

";
html += "
";
html += "
settings.json (Settings of the Map)

";
-
html += "
";
document.getElementById("content").innerHTML = html;
document.getElementById("ex_names").value = jsonnames;
diff --git a/Lora-Map/resources/css/global.css b/Lora-Map/resources/css/global.css
index 57a9bff..09f193e 100644
--- a/Lora-Map/resources/css/global.css
+++ b/Lora-Map/resources/css/global.css
@@ -13,6 +13,7 @@
#bigmap .leaflet-map-pane .leaflet-marker-pane .snumber-icon {
font-weight: bold;
font-size: 5px;
+ white-space: nowrap;
}
#bigmap .leaflet-map-pane .leaflet-marker-pane .coord-icon {
font-size: 13px;
@@ -20,6 +21,28 @@
color: #ffffff;
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.alert {
+ border: 2px solid red;
+}
+#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;
+}
+#bigmap .leaflet-map-pane .leaflet-marker-pane .mapsensor.alert .wind {
+ color: red;
+}
/* Optional: Makes the sample page fill the window. */
html, body {
@@ -324,12 +347,14 @@ object {
font-size: 11px;
font-family: "Verdana";
padding: 3px;
+ display: inline-flex;
}
#overlays #cameracount .camera {
background-color: white;
border: rgba(0,0,0,0.3) solid 2px;
border-radius: 5px;
padding: 4px;
+ margin-right: 5px;
}
#overlays #cameracount .camera span {
display: block;
diff --git a/Lora-Map/resources/index.html b/Lora-Map/resources/index.html
index 90f4854..57ac1db 100644
--- a/Lora-Map/resources/index.html
+++ b/Lora-Map/resources/index.html
@@ -26,7 +26,7 @@