From 997a0508531a2c9bd7374a1cc2d443942ce01f99 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Fri, 31 May 2019 13:08:13 +0200 Subject: [PATCH] [1.8.3] Update to changed ConnectorDataMqtt and remove Scral from code, because its an own project now, that uses the mqtt-backend --- Lora-Bot/Lora-Bot.csproj | 4 - Lora-Bot/Moduls/Mqtt.cs | 19 +-- Lora-Bot/Moduls/Scral.cs | 170 --------------------- Lora-Bot/Moduls/Txtout.cs | 4 +- Lora-Bot/Program.cs | 11 +- Lora-Bot/Properties/AssemblyInfo.cs | 15 +- Lora-Bot/config-example/scral.conf.example | 13 -- 7 files changed, 16 insertions(+), 220 deletions(-) delete mode 100644 Lora-Bot/Moduls/Scral.cs delete mode 100644 Lora-Bot/config-example/scral.conf.example diff --git a/Lora-Bot/Lora-Bot.csproj b/Lora-Bot/Lora-Bot.csproj index 93ea996..c0c2211 100644 --- a/Lora-Bot/Lora-Bot.csproj +++ b/Lora-Bot/Lora-Bot.csproj @@ -44,7 +44,6 @@ - @@ -80,9 +79,6 @@ - - PreserveNewest - PreserveNewest diff --git a/Lora-Bot/Moduls/Mqtt.cs b/Lora-Bot/Moduls/Mqtt.cs index 45ed165..6fcb0dd 100644 --- a/Lora-Bot/Moduls/Mqtt.cs +++ b/Lora-Bot/Moduls/Mqtt.cs @@ -8,27 +8,10 @@ namespace Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls { class Mqtt : Mqtt { - private Boolean mqttconnect = false; - public override event ModulEvent Update; public Mqtt(LoraController lib, InIReader settings) : base(lib, settings) { } - protected override void Connect() { - this.mqtt = ABackend.GetInstance(this.config["settings"], ABackend.BackendType.Data); - Console.WriteLine("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Mqtt.Connect"); - this.mqttconnect = true; - } - - protected override void Disconnect() { - this.mqttconnect = false; - if (this.mqtt != null) { - this.mqtt.Dispose(); - } - this.mqtt = null; - Console.WriteLine("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Mqtt.Disconnect"); - } - public override void EventLibSetter() { this.library.DataUpdate += this.HandleLibUpdate; this.library.PanicUpdate += this.HandleLibUpdate; @@ -37,7 +20,7 @@ public override void EventLibSetter() { protected override void LibUpadteThread(Object state) { try { - if (this.mqttconnect) { + if (this.mqtt.IsConnected) { if(state.GetType().HasInterface(typeof(IMqtt))) { IMqtt sensor = state as IMqtt; ((ADataBackend)this.mqtt).Send("lora/" + sensor.MqttTopic(), sensor.ToJson()); diff --git a/Lora-Bot/Moduls/Scral.cs b/Lora-Bot/Moduls/Scral.cs deleted file mode 100644 index d0ef6f0..0000000 --- a/Lora-Bot/Moduls/Scral.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Text; -using BlubbFish.Utils; -using BlubbFish.Utils.IoT.Bots.Moduls; -using Fraunhofer.Fit.Iot.Lora; -using Fraunhofer.Fit.Iot.Lora.Events; -using LitJson; - -namespace Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls { - public class Scral : AModul { - private readonly List nodes = new List(); - public override event ModulEvent Update; - private readonly Object getLock = new Object(); - private readonly Boolean authRequired; - private readonly String auth; - - public Scral(LoraController lib, InIReader settings) : base(lib, settings) { - if (!this.config.ContainsKey("general")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: Config section [general] not exist"); - } - if (!this.config["general"].ContainsKey("server")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [general] value server not exist"); - } - if (!this.config["general"].ContainsKey("user") && !this.config["general"].ContainsKey("pass")) { - this.authRequired = false; - } else if (!this.config["general"].ContainsKey("user")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [general] value user not exist"); - } else if (!this.config["general"].ContainsKey("pass")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [general] value pass not exist"); - } else { - this.auth = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(this.config["general"]["user"] + ":" + this.config["general"]["pass"])); - this.authRequired = true; - } - if (!this.config.ContainsKey("update")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: Config section [update] not exist"); - } - if (!this.config["update"].ContainsKey("addr")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [update] value addr not exist"); - } - if (!this.config["update"].ContainsKey("method")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [update] value method not exist"); - } - if (!this.config.ContainsKey("register")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: Config section [register] not exist"); - } - if (!this.config["register"].ContainsKey("addr")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [register] value addr not exist"); - } - if (!this.config["register"].ContainsKey("method")) { - throw new ArgumentException("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral: In config section [register] value method not exist"); - } - - } - - public override void EventLibSetter() { - this.library.DataUpdate += this.HandleLibUpdate; - } - - protected override void LibUpadteThread(Object state) { - try { - if (state is DataUpdateEvent data) { - if (!this.nodes.Contains(data.Name)) { - this.SendRegister(data); - this.nodes.Add(data.Name); - } - this.SendUpdate(data); - } - } catch (Exception e) { - Helper.WriteError("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral.LibUpadteThread: " + e.Message); - } - } - - private void SendUpdate(DataUpdateEvent data) { - if (data.Gps.Fix) { - Dictionary d = new Dictionary { - { "type", "uwb" }, - { "tagId", data.Name }, - { "timestamp", DateTime.Now.ToString("o") }, - { "lat", data.Gps.Latitude }, - { "lon", data.Gps.Longitude }, - { "bearing", data.Rssi }, - { "herr", data.Gps.Hdop }, - { "battery_level", data.Snr } - }; - try { - String addr = this.config["update"]["addr"]; - if (Enum.TryParse(this.config["update"]["method"], true, out RequestMethod meth)) { - this.RequestString(addr, JsonMapper.ToJson(d), false, meth); - this.Update?.Invoke(this, new BlubbFish.Utils.IoT.Bots.Events.ModulEventArgs(addr, meth.ToString(), JsonMapper.ToJson(d), "SCRAL")); - } - } catch (Exception e) { - Helper.WriteError("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral.SendUpdate: " + e.Message); - this.SendRegister(data); - } - } - } - - private void SendRegister(DataUpdateEvent data) { - Dictionary d = new Dictionary { - { "device", "wearable" }, - { "sensor", "tag" }, - { "type", "uwb" }, - { "tagId", data.Name }, - { "timestamp", DateTime.Now.ToString("o") }, - { "unitOfMeasurements", "meters" }, - { "observationType", "propietary" }, - { "state", "active" } - }; - try { - String addr = this.config["register"]["addr"]; - if (Enum.TryParse(this.config["register"]["method"], true, out RequestMethod meth)) { - this.RequestString(addr, JsonMapper.ToJson(d), false, meth); - this.Update?.Invoke(this, new BlubbFish.Utils.IoT.Bots.Events.ModulEventArgs(addr, meth.ToString(), JsonMapper.ToJson(d), "SCRAL")); - } - } catch (Exception e) { - Helper.WriteError("Fraunhofer.Fit.IoT.Bots.LoraBot.Moduls.Scral.SendRegister: " + e.Message); - } - } - - public override void Dispose() { } - - protected override void UpdateConfig() { } - - #region HTTP Request - private String RequestString(String address, String json = "", Boolean withoutput = true, RequestMethod method = RequestMethod.GET) { - String ret = null; - lock (this.getLock) { - HttpWebRequest request = WebRequest.CreateHttp(this.config["general"]["server"] + address); - request.Timeout = 2000; - if (this.authRequired) { - request.Headers.Add(HttpRequestHeader.Authorization, this.auth); - } - if (method == RequestMethod.POST || method == RequestMethod.PUT) { - Byte[] requestdata = Encoding.ASCII.GetBytes(json); - request.ContentLength = requestdata.Length; - request.Method = method.ToString(); - request.ContentType = "application/json"; - using (Stream stream = request.GetRequestStream()) { - stream.Write(requestdata, 0, requestdata.Length); - } - } - try { - using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { - if (response.StatusCode == HttpStatusCode.Unauthorized) { - Console.Error.WriteLine("Benutzer oder Passwort falsch!"); - throw new Exception("Benutzer oder Passwort falsch!"); - } - if (withoutput) { - StreamReader reader = new StreamReader(response.GetResponseStream()); - ret = reader.ReadToEnd(); - } - } - } catch (Exception e) { - throw new WebException("Error while uploading to Scal. Resource: \"" + this.config["general"]["server"] + address + "\" Method: " + method + " Data: " + json + " Fehler: " + e.Message); - } - } - return ret; - } - - private enum RequestMethod { - GET, - POST, - PUT - } - #endregion - } -} diff --git a/Lora-Bot/Moduls/Txtout.cs b/Lora-Bot/Moduls/Txtout.cs index b1aad76..5787584 100644 --- a/Lora-Bot/Moduls/Txtout.cs +++ b/Lora-Bot/Moduls/Txtout.cs @@ -24,9 +24,7 @@ public Txtout(LoraController lib, InIReader settings) : base(lib, settings) { } - public override void EventLibSetter() { - this.library.DataUpdate += this.HandleLibUpdate; - } + public override void EventLibSetter() => this.library.DataUpdate += this.HandleLibUpdate; protected override void LibUpadteThread(Object state) { try { diff --git a/Lora-Bot/Program.cs b/Lora-Bot/Program.cs index 8a19fbb..921db1d 100644 --- a/Lora-Bot/Program.cs +++ b/Lora-Bot/Program.cs @@ -29,6 +29,7 @@ public Program(String[] args) { this.ModulEvents(); lora.DataUpdate += this.LoraDataUpdate; lora.StatusUpdate += this.LoraStatusUpdate; + lora.PanicUpdate += this.LoraPanicUpdate; this.WaitForShutdown(); Console.WriteLine("after wait"); this.ModulDispose(); @@ -47,13 +48,11 @@ public Program(String[] args) { } } - private void LoraStatusUpdate(Object sender, StatusUpdateEvent e) { - Console.WriteLine("-> Lora-Status: " + e.ToString()); - } + private void LoraPanicUpdate(Object sender, PanicUpdateEvent e) => Console.WriteLine("-> Lora-Panic: " + e.ToString()); - private void LoraDataUpdate(Object sender, DataUpdateEvent e) { - Console.WriteLine("-> Lora-Data: " + e.ToString()); - } + private void LoraStatusUpdate(Object sender, StatusUpdateEvent e) => Console.WriteLine("-> Lora-Status: " + e.ToString()); + + private void LoraDataUpdate(Object sender, DataUpdateEvent e) => Console.WriteLine("-> Lora-Data: " + e.ToString()); } } diff --git a/Lora-Bot/Properties/AssemblyInfo.cs b/Lora-Bot/Properties/AssemblyInfo.cs index 17f640f..8fce479 100644 --- a/Lora-Bot/Properties/AssemblyInfo.cs +++ b/Lora-Bot/Properties/AssemblyInfo.cs @@ -1,17 +1,19 @@ using System.Reflection; +using System.Resources; using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die einer Assembly zugeordnet sind. [assembly: AssemblyTitle("Lora-Bot")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyDescription("Program that runs on a device and process the Lora traffic from the Lora library")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("Fraunhofer FIT")] [assembly: AssemblyProduct("Lora-Bot")] -[assembly: AssemblyCopyright("Copyright © 2018 - 22.04.2019")] -[assembly: AssemblyTrademark("")] +[assembly: AssemblyCopyright("Copyright © 2018 - 31.05.2019")] +[assembly: AssemblyTrademark("Fraunhofer FIT, BlubbFish")] [assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("de-DE")] // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von @@ -31,8 +33,8 @@ // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.8.2")] -[assembly: AssemblyFileVersion("1.8.2")] +[assembly: AssemblyVersion("1.8.3")] +[assembly: AssemblyFileVersion("1.8.3")] /* * 1.1.0 Update Scral addresses * 1.2.0 Run Module Events in threads so that one Module can not block others, TXTOut now appends to the logfile @@ -51,4 +53,5 @@ * 1.8.0 Add field that indicates when the last gps position was recieved, change all times to UTC * 1.8.1 Add Hostname to MQTT, so you can see from witch device the data is recieved * 1.8.2 Bugfix, create also an event for sending normal loradata when update panic + * 1.8.3 Update to changed ConnectorDataMqtt and remove Scral from code, because its an own project now, that uses the mqtt-backend */ diff --git a/Lora-Bot/config-example/scral.conf.example b/Lora-Bot/config-example/scral.conf.example deleted file mode 100644 index 63d4d9c..0000000 --- a/Lora-Bot/config-example/scral.conf.example +++ /dev/null @@ -1,13 +0,0 @@ -[modul] -config=private - -[general] -server=https://portal.monica-cloud.eu/ - -[update] -addr=scral/puetz/dexels/wearable/localization -method=put - -[register] -addr=scral/puetz/dexels/wearable -method=post