Refactoring Alarmitem, becuase its only a bit different from PositionItem, so use oop
This commit is contained in:
parent
88003a17bb
commit
0a60a82b8c
@ -1,81 +1,32 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using LitJson;
|
using LitJson;
|
||||||
|
|
||||||
namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
||||||
class AlarmItem {
|
public class AlarmItem : PositionItem {
|
||||||
public Double Rssi { get; private set; }
|
|
||||||
public Double Snr { get; private set; }
|
|
||||||
public DateTime Lorarecievedtime { get; private set; }
|
|
||||||
public DateTime Recievedtime { get; private set; }
|
|
||||||
public Double Latitude { get; private set; }
|
|
||||||
public Double Longitude { get; private set; }
|
|
||||||
public UTMData UTM { get; private set; }
|
|
||||||
public Double Hdop { get; private set; }
|
|
||||||
public Boolean Fix { get; private set; }
|
|
||||||
public Double Height { get; private set; }
|
|
||||||
public List<DateTime> ButtonPressed => this.buttonhistory.Keys.ToList();
|
|
||||||
|
|
||||||
private readonly SortedDictionary<DateTime, String> buttonhistory = new SortedDictionary<DateTime, String>();
|
private readonly SortedDictionary<DateTime, String> buttonhistory = new SortedDictionary<DateTime, String>();
|
||||||
|
|
||||||
public AlarmItem(JsonData json) => this.Update(json);
|
public List<DateTime> ButtonPressed => this.buttonhistory.Keys.ToList();
|
||||||
|
|
||||||
public void Update(JsonData json) {
|
public AlarmItem(JsonData json) : base(json, null) {
|
||||||
this.Rssi = json["Rssi"].IsInt ? (Int32)json["Rssi"] : (Double)json["Rssi"];
|
|
||||||
this.Snr = json["Snr"].IsInt ? (Int32)json["Snr"] : (Double)json["Snr"];
|
|
||||||
if (DateTime.TryParse((String)json["Receivedtime"], DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out DateTime updatetime)) {
|
|
||||||
this.Lorarecievedtime = updatetime.ToUniversalTime();
|
|
||||||
}
|
}
|
||||||
this.Recievedtime = DateTime.UtcNow;
|
|
||||||
this.Latitude = json["Gps"]["Latitude"].IsInt ? (Int32)json["Gps"]["Latitude"] : (Double)json["Gps"]["Latitude"];
|
public override void Update(JsonData json) {
|
||||||
this.Longitude = json["Gps"]["Longitude"].IsInt ? (Int32)json["Gps"]["Longitude"] : (Double)json["Gps"]["Longitude"];
|
base.Update(json);
|
||||||
this.Fix = (Boolean)json["Gps"]["Fix"];
|
|
||||||
if (!this.Fix) {
|
|
||||||
this.Latitude = json["Gps"]["LastLatitude"].IsInt ? (Int32)json["Gps"]["LastLatitude"] : (Double)json["Gps"]["LastLatitude"];
|
|
||||||
this.Longitude = json["Gps"]["LastLongitude"].IsInt ? (Int32)json["Gps"]["LastLongitude"] : (Double)json["Gps"]["LastLongitude"];
|
|
||||||
}
|
|
||||||
this.UTM = new UTMData(this.Latitude, this.Longitude);
|
|
||||||
this.Hdop = json["Gps"]["Hdop"].IsInt ? (Int32)json["Gps"]["Hdop"] : (Double)json["Gps"]["Hdop"];
|
|
||||||
this.Height = json["Gps"]["Height"].IsInt ? (Int32)json["Gps"]["Height"] : (Double)json["Gps"]["Height"];
|
|
||||||
this.SetHistory(json);
|
this.SetHistory(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetHistory(JsonData json) {
|
private void SetHistory(JsonData json) {
|
||||||
String key = json["BatteryLevel"].ToString();
|
if(json.ContainsKey("Hash") && json["Hash"].IsString) {
|
||||||
key += "_" + json["Calculatedcrc"].ToString();
|
String key = json["Hash"].ToString();
|
||||||
key += "_" + json["Gps"]["Hdop"].ToString();
|
|
||||||
key += "_" + json["Gps"]["Height"].ToString();
|
|
||||||
key += "_" + json["Gps"]["Fix"].ToString();
|
|
||||||
key += "_" + json["Gps"]["LastLatitude"].ToString();
|
|
||||||
key += "_" + json["Gps"]["LastLongitude"].ToString();
|
|
||||||
key += "_" + json["Gps"]["Time"].ToString();
|
|
||||||
if(!this.buttonhistory.ContainsValue(key)) {
|
if(!this.buttonhistory.ContainsValue(key)) {
|
||||||
this.buttonhistory.Add(DateTime.UtcNow, key);
|
this.buttonhistory.Add(DateTime.UtcNow, key);
|
||||||
if(this.buttonhistory.Count > 10) {
|
if(this.buttonhistory.Count > 10) {
|
||||||
this.buttonhistory.Remove(this.buttonhistory.Keys.ToList().First());
|
_ = this.buttonhistory.Remove(this.buttonhistory.Keys.ToList().First());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String GetId(JsonData json) => (String)json["Name"];
|
|
||||||
|
|
||||||
public static Boolean CheckJson(JsonData json) =>
|
|
||||||
json.ContainsKey("Rssi") && (json["Rssi"].IsDouble || json["Rssi"].IsInt)
|
|
||||||
&& json.ContainsKey("Snr") && (json["Snr"].IsDouble || json["Snr"].IsInt)
|
|
||||||
&& json.ContainsKey("Receivedtime") && json["Receivedtime"].IsString
|
|
||||||
&& json.ContainsKey("BatteryLevel") && (json["BatteryLevel"].IsDouble || json["BatteryLevel"].IsInt)
|
|
||||||
&& json.ContainsKey("Gps") && json["Gps"].IsObject
|
|
||||||
&& json["Gps"].ContainsKey("Latitude") && (json["Gps"]["Latitude"].IsDouble || json["Gps"]["Latitude"].IsInt)
|
|
||||||
&& json["Gps"].ContainsKey("Longitude") && (json["Gps"]["Longitude"].IsDouble || json["Gps"]["Longitude"].IsInt)
|
|
||||||
&& json["Gps"].ContainsKey("LastLatitude") && (json["Gps"]["LastLatitude"].IsDouble || json["Gps"]["LastLatitude"].IsInt)
|
|
||||||
&& json["Gps"].ContainsKey("LastLongitude") && (json["Gps"]["LastLongitude"].IsDouble || json["Gps"]["LastLongitude"].IsInt)
|
|
||||||
&& json["Gps"].ContainsKey("LastGPSPos") && json["Gps"]["LastGPSPos"].IsString
|
|
||||||
&& json["Gps"].ContainsKey("Hdop") && (json["Gps"]["Hdop"].IsDouble || json["Gps"]["Hdop"].IsInt)
|
|
||||||
&& json["Gps"].ContainsKey("Fix") && json["Gps"]["Fix"].IsBoolean
|
|
||||||
&& json["Gps"].ContainsKey("Height") && (json["Gps"]["Height"].IsDouble || json["Gps"]["Height"].IsInt)
|
|
||||||
&& json.ContainsKey("Name") && json["Name"].IsString &&
|
|
||||||
json.ContainsKey("Calculatedcrc") && json["Calculatedcrc"].IsInt;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,7 @@ using System.Globalization;
|
|||||||
using LitJson;
|
using LitJson;
|
||||||
|
|
||||||
namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
||||||
class PositionItem {
|
public class PositionItem {
|
||||||
private Double _lastLat = 0;
|
private Double _lastLat = 0;
|
||||||
private Double _lastLon = 0;
|
private Double _lastLon = 0;
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateMarker(JsonData marker, String id) {
|
public void UpdateMarker(JsonData marker, String id) {
|
||||||
if(marker.ContainsKey(id)) {
|
if(marker != null && marker.ContainsKey(id)) {
|
||||||
this.Name = marker[id].ContainsKey("name") && marker[id]["name"].IsString ? (String)marker[id]["name"] : id;
|
this.Name = marker[id].ContainsKey("name") && marker[id]["name"].IsString ? (String)marker[id]["name"] : id;
|
||||||
this.Icon = marker[id].ContainsKey("marker.svg") && marker[id]["marker.svg"].IsObject ? Marker.ParseMarkerConfig(marker[id]["marker.svg"], this.Name) : marker[id].ContainsKey("icon") && marker[id]["icon"].IsString ? (String)marker[id]["icon"] : null;
|
this.Icon = marker[id].ContainsKey("marker.svg") && marker[id]["marker.svg"].IsObject ? Marker.ParseMarkerConfig(marker[id]["marker.svg"], this.Name) : marker[id].ContainsKey("icon") && marker[id]["icon"].IsString ? (String)marker[id]["icon"] : null;
|
||||||
this.Group = marker[id].ContainsKey("Group") && marker[id]["Group"].IsString ? (String)marker[id]["Group"] : "no";
|
this.Group = marker[id].ContainsKey("Group") && marker[id]["Group"].IsString ? (String)marker[id]["Group"] : "no";
|
||||||
@ -51,7 +51,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model {
|
|||||||
|
|
||||||
public static String GetId(JsonData json) => (String)json["Name"];
|
public static String GetId(JsonData json) => (String)json["Name"];
|
||||||
|
|
||||||
public void Update(JsonData json) {
|
public virtual void Update(JsonData json) {
|
||||||
this.Rssi = json.ContainsKey("Rssi") && (json["Rssi"].IsDouble || json["Rssi"].IsInt) && Double.TryParse(json["Rssi"].ToString(), out Double rssi) ? rssi : 0;
|
this.Rssi = json.ContainsKey("Rssi") && (json["Rssi"].IsDouble || json["Rssi"].IsInt) && Double.TryParse(json["Rssi"].ToString(), out Double rssi) ? rssi : 0;
|
||||||
this.Snr = json.ContainsKey("Snr") && (json["Snr"].IsDouble || json["Snr"].IsInt) && Double.TryParse(json["Snr"].ToString(), out Double snr) ? snr : 0;
|
this.Snr = json.ContainsKey("Snr") && (json["Snr"].IsDouble || json["Snr"].IsInt) && Double.TryParse(json["Snr"].ToString(), out Double snr) ? snr : 0;
|
||||||
this.Lorarecievedtime = json.ContainsKey("Receivedtime") && json["Receivedtime"].IsString && DateTime.TryParse((String)json["Receivedtime"], DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out DateTime updatetime) ? updatetime.ToUniversalTime() : DateTime.UtcNow;
|
this.Lorarecievedtime = json.ContainsKey("Receivedtime") && json["Receivedtime"].IsString && DateTime.TryParse((String)json["Receivedtime"], DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out DateTime updatetime) ? updatetime.ToUniversalTime() : DateTime.UtcNow;
|
||||||
|
@ -71,7 +71,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
protected override void Backend_MessageIncomming(Object sender, BackendEvent mqtt) {
|
protected override void Backend_MessageIncomming(Object sender, BackendEvent mqtt) {
|
||||||
try {
|
try {
|
||||||
JsonData d = JsonMapper.ToObject(mqtt.Message);
|
JsonData d = JsonMapper.ToObject(mqtt.Message);
|
||||||
if(PositionItem.CheckJson(d) && ((String)mqtt.From).Contains("lora/data")) {
|
if(((String)mqtt.From).Contains("lora/data") && PositionItem.CheckJson(d)) {
|
||||||
String name = PositionItem.GetId(d);
|
String name = PositionItem.GetId(d);
|
||||||
lock(this.lockData) {
|
lock(this.lockData) {
|
||||||
if(this.positions.ContainsKey(name)) {
|
if(this.positions.ContainsKey(name)) {
|
||||||
@ -81,8 +81,8 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console.WriteLine("Koordinate erhalten!");
|
Console.WriteLine("Koordinate erhalten!");
|
||||||
} else if(AlarmItem.CheckJson(d) && ((String)mqtt.From).Contains("lora/panic")) {
|
} else if(((String)mqtt.From).Contains("lora/panic") && PositionItem.CheckJson(d)) {
|
||||||
String name = AlarmItem.GetId(d);
|
String name = PositionItem.GetId(d);
|
||||||
lock(this.lockPanic) {
|
lock(this.lockPanic) {
|
||||||
if(this.alarms.ContainsKey(name)) {
|
if(this.alarms.ContainsKey(name)) {
|
||||||
this.alarms[name].Update(d);
|
this.alarms[name].Update(d);
|
||||||
@ -98,7 +98,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console.WriteLine("PANIC erhalten!");
|
Console.WriteLine("PANIC erhalten!");
|
||||||
} else if(Camera.CheckJson(d) && ((String)mqtt.From).Contains("camera/count")) {
|
} else if(((String)mqtt.From).Contains("camera/count") && Camera.CheckJson(d)) {
|
||||||
String cameraid = Camera.GetId(d);
|
String cameraid = Camera.GetId(d);
|
||||||
lock(this.lockCount) {
|
lock(this.lockCount) {
|
||||||
if(this.counter.ContainsKey(cameraid)) {
|
if(this.counter.ContainsKey(cameraid)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user