Compare commits
6
Commits
73674548e3
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8348185272 | ||
|
|
a5894ceeb7 | ||
|
|
759842b528 | ||
|
|
2e6f2f464b | ||
|
|
a2e5ca6c7e | ||
|
|
870d8d065b |
@@ -0,0 +1,33 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 1.3.0 - 2022-01-15 - Netcore default
|
||||||
|
### New Features
|
||||||
|
* Netcore is now default
|
||||||
|
* ABackend thows exeption if loading failed
|
||||||
|
### Bugfixes
|
||||||
|
### Changes
|
||||||
|
* Make ref for github in readme
|
||||||
|
* Refactoring
|
||||||
|
* Codingstyles
|
||||||
|
|
||||||
|
## 1.2.0 - 2019-12.01 - Refactoring
|
||||||
|
### New Features
|
||||||
|
* Add netcore
|
||||||
|
* ABackend now return null if type is not loadable
|
||||||
|
### Bugfixes
|
||||||
|
### Changes
|
||||||
|
* Refactoring
|
||||||
|
|
||||||
|
## 1.1.0 - 2019-05-29 - Readme
|
||||||
|
### New Features
|
||||||
|
* Add Readme, Contribution and Licence
|
||||||
|
### Bugfixes
|
||||||
|
### Changes
|
||||||
|
* Coding Styles
|
||||||
|
|
||||||
|
## 1.0.0.0 - 2019-02-14 - Init
|
||||||
|
### New Features
|
||||||
|
* First Version
|
||||||
|
### Bugfixes
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
# BlubbFish.Utils.IoT (Utils-IoT)
|
# BlubbFish.Utils.IoT (Utils-IoT)
|
||||||
Library contains utils for Iot
|
Library contains utils for Iot
|
||||||
|
|
||||||
## Linking to
|
Maybe you find this Repo on Github. This is a mirror from [here](https://git.blubbfish.net/vs_utils/Utils-IoT).
|
||||||
### External
|
|
||||||
* [litjson](http://git.blubbfish.net/vs_librarys/litjson)
|
|
||||||
|
|
||||||
|
## Linking to
|
||||||
### Internal
|
### Internal
|
||||||
* [Utils](http://git.blubbfish.net/vs_utils/Utils)
|
* BlubbFish.Utils ([Utils](http://git.blubbfish.net/vs_utils/Utils))
|
||||||
|
|
||||||
|
### External
|
||||||
|
* litjson ([Used Fork](https://github.com/blubbfish/litjson), [Original](https://github.com/LitJSON/litjson))
|
||||||
@@ -1,11 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
using BlubbFish.Utils.IoT.Events;
|
using BlubbFish.Utils.IoT.Events;
|
||||||
|
|
||||||
namespace BlubbFish.Utils.IoT.Connector {
|
namespace BlubbFish.Utils.IoT.Connector {
|
||||||
public abstract class ABackend {
|
public abstract class ABackend {
|
||||||
public enum BackendType {
|
public enum BackendType {
|
||||||
Data,
|
Data,
|
||||||
|
Db,
|
||||||
|
Storage,
|
||||||
User
|
User
|
||||||
}
|
}
|
||||||
public event BackendMessage MessageIncomming;
|
public event BackendMessage MessageIncomming;
|
||||||
@@ -18,24 +22,45 @@ namespace BlubbFish.Utils.IoT.Connector {
|
|||||||
|
|
||||||
public ABackend(Dictionary<String, String> settings) => this.settings = settings;
|
public ABackend(Dictionary<String, String> settings) => this.settings = settings;
|
||||||
|
|
||||||
|
|
||||||
|
public static ABackend GetInstance(Dictionary<String, String> settings) {
|
||||||
|
if(settings.Count == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return GetInstance(settings, (BackendType)Enum.Parse(typeof(BackendType), settings["backendtype"]));
|
||||||
|
} catch(Exception e) {
|
||||||
|
throw new Exception("Something bad Happend while Loading Connector without type: " + e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ABackend GetStorageInstance(Dictionary<String, String> settings, List<Type> types) {
|
||||||
|
if(settings.Count == 0 || types.Count != 1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String object_sensor = "BlubbFish.Utils.IoT.Connector.Storage." + settings["type"].ToUpperLower() + "`"+types.Count+"["+ String.Join(",", new List<String>(types.Select(x => "["+x.FullName + "," + x.Assembly.FullName+"]"))) + "], " + "ConnectorStorage" + settings["type"].ToUpperLower();
|
||||||
|
return LoadInstance(object_sensor, settings, "Storage");
|
||||||
|
}
|
||||||
|
|
||||||
public static ABackend GetInstance(Dictionary<String, String> settings, BackendType ty) {
|
public static ABackend GetInstance(Dictionary<String, String> settings, BackendType ty) {
|
||||||
if (settings.Count == 0) {
|
if (settings.Count == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
String object_sensor = "BlubbFish.Utils.IoT.Connector." + ty.ToString() + "." + settings["type"].ToUpperLower() + ", " + "Connector" + ty.ToString() + settings["type"].ToUpperLower();
|
String object_sensor = "BlubbFish.Utils.IoT.Connector." + ty.ToString() + "." + settings["type"].ToUpperLower() + ", " + "Connector" + ty.ToString() + settings["type"].ToUpperLower();
|
||||||
|
return LoadInstance(object_sensor, settings, ty.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ABackend LoadInstance(String object_sensor, Dictionary<String, String> settings, String backendtype) {
|
||||||
try {
|
try {
|
||||||
Type t = Type.GetType(object_sensor, true);
|
Type t = Type.GetType(object_sensor, true);
|
||||||
return (ABackend)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>) }).Invoke(new Object[] { settings });
|
return (ABackend)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>) }).Invoke(new Object[] { settings });
|
||||||
} catch (TypeLoadException) {
|
} catch(TypeLoadException) {
|
||||||
Console.Error.WriteLine("Configuration: " + settings["type"] + " is not a " + ty.ToString() + "Backend");
|
throw new TypeLoadException("Configuration: " + settings["type"] + " is not a " + backendtype + "Backend");
|
||||||
return null;
|
} catch(System.IO.FileNotFoundException) {
|
||||||
} catch (System.IO.FileNotFoundException) {
|
throw new DllNotFoundException("Driver " + object_sensor + " could not load!");
|
||||||
Console.Error.WriteLine("Driver " + object_sensor + " could not load!");
|
} catch(Exception e) {
|
||||||
return null;
|
throw new Exception("Something bad Happend while Loading Connector: " + e.Message);
|
||||||
} catch (Exception e) {
|
|
||||||
Console.Error.WriteLine("Something bad Happend while Loading Connectior: "+e.Message);
|
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void NotifyClientIncomming(BackendEvent value) => this.MessageIncomming?.Invoke(this, value);
|
protected void NotifyClientIncomming(BackendEvent value) => this.MessageIncomming?.Invoke(this, value);
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace BlubbFish.Utils.IoT.Connector {
|
||||||
|
public abstract class ADbBackend : ABackend {
|
||||||
|
public ADbBackend(Dictionary<String, String> settings) : base(settings) { }
|
||||||
|
|
||||||
|
public abstract T LoadSingleRow<T>(String query, Dictionary<String, Object> param) where T : new();
|
||||||
|
|
||||||
|
public abstract List<T> LoadMultiRows<T>(String query, Dictionary<String, Object> param) where T : new();
|
||||||
|
|
||||||
|
public abstract Int32 Insert(String query, Dictionary<String, Object> param);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace BlubbFish.Utils.IoT.Connector {
|
||||||
|
public abstract class AStorageBackend<O> : ABackend {
|
||||||
|
public AStorageBackend(Dictionary<String, String> settings) : base(settings) { }
|
||||||
|
|
||||||
|
public abstract Dictionary<String, O> Get() ;
|
||||||
|
|
||||||
|
public abstract O Get(String key);
|
||||||
|
|
||||||
|
public abstract Boolean Put(O param, String key);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,5 @@ namespace BlubbFish.Utils.IoT.Connector {
|
|||||||
public abstract class AUserBackend : ABackend {
|
public abstract class AUserBackend : ABackend {
|
||||||
public AUserBackend(Dictionary<String, String> settings) : base(settings) {}
|
public AUserBackend(Dictionary<String, String> settings) : base(settings) {}
|
||||||
public abstract void Send(String message);
|
public abstract void Send(String message);
|
||||||
public abstract void Send(String message, String[] buttons);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace BlubbFish.Utils.IoT.Events {
|
||||||
|
public class GpsEvent : BackendEvent {
|
||||||
|
#region mandatory field
|
||||||
|
public Double BatteryLevel {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public Boolean CorrectInterface {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public LoraDataGps Gps {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public String Hash {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public String Name {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region optional field
|
||||||
|
public DateTime Receivedtime {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public Double Rssi {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public Double Snr {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public class LoraDataGps {
|
||||||
|
#region mandatory field
|
||||||
|
public Double Latitude {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public Double Longitude {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public Boolean Fix {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public Double Height {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region optional field
|
||||||
|
public Double Hdop {
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,6 @@
|
|||||||
namespace BlubbFish.Utils.IoT.Events {
|
namespace BlubbFish.Utils.IoT.Events {
|
||||||
public class UserEvent : BackendEvent {
|
public class UserEvent : BackendEvent {
|
||||||
public UserEvent() : base() { }
|
public UserEvent() : base() { }
|
||||||
public UserEvent(String message, Int64 UserId, DateTime date) : base(message, UserId, date, "User") { }
|
public UserEvent(String message, Tuple<Int64, String, Int64, String> UserId, DateTime date) : base(message, UserId, date, "User") { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
using BlubbFish.Utils.IoT.Connector;
|
using BlubbFish.Utils.IoT.Connector;
|
||||||
using BlubbFish.Utils.IoT.Events;
|
using BlubbFish.Utils.IoT.Events;
|
||||||
|
|
||||||
@@ -51,31 +52,33 @@ namespace BlubbFish.Utils.IoT.JsonSensor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static AJsonSensor GetInstance(Dictionary<String, ABackend> backends, Dictionary<String, String> settings, String name) {
|
public static AJsonSensor GetInstance(Dictionary<String, ABackend> backends, Dictionary<String, String> settings, String name) {
|
||||||
String object_sensor = "BlubbFish.Utils.IoT.JsonSensor." + Char.ToUpper(settings["type"][0]) + settings["type"].Substring(1).ToLower();
|
|
||||||
Type t;
|
|
||||||
try {
|
|
||||||
t = Type.GetType(object_sensor, true);
|
|
||||||
} catch(TypeLoadException) {
|
|
||||||
throw new ArgumentException("Sensor: " + object_sensor + " is not a Sensor");
|
|
||||||
}
|
|
||||||
if(!settings.ContainsKey("backend") || !backends.ContainsKey(settings["backend"])) {
|
if(!settings.ContainsKey("backend") || !backends.ContainsKey(settings["backend"])) {
|
||||||
throw new ArgumentException("Backend not specified!");
|
throw new ArgumentException("Backend not specified!");
|
||||||
}
|
}
|
||||||
return (AJsonSensor)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>), typeof(String), typeof(ABackend) }).Invoke(new Object[] { settings, name, backends[settings["backend"]] });
|
String object_sensor = "BlubbFish.Utils.IoT.JsonSensor." + settings["type"].ToUpperLower();
|
||||||
|
try {
|
||||||
|
Type t = Type.GetType(object_sensor, true);
|
||||||
|
return (AJsonSensor)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>), typeof(String), typeof(ABackend) }).Invoke(new Object[] { settings, name, backends[settings["backend"]] });
|
||||||
|
} catch(TypeLoadException) {
|
||||||
|
throw new ArgumentException("Sensor: " + object_sensor + " is not a Sensor");
|
||||||
|
} catch(Exception e) {
|
||||||
|
Helper.WriteError("Something went wrong! " + e.Message);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Poll() {
|
protected virtual void Poll() {
|
||||||
if(this.pollcount++ >= this.Polling) {
|
if(this.pollcount++ >= this.Polling) {
|
||||||
this.pollcount = 1;
|
this.pollcount = 1;
|
||||||
if (this.backend is ADataBackend) {
|
if (this.backend is ADataBackend databackend) {
|
||||||
((ADataBackend)this.backend).Send(this.topic + "/get", "");
|
databackend.Send(this.topic + "/get", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SetBool(Boolean v) {
|
public virtual void SetBool(Boolean v) {
|
||||||
if (this.backend is ADataBackend) {
|
if (this.backend is ADataBackend databackend) {
|
||||||
((ADataBackend)this.backend).Send(this.topic + "/set", v ? "on" : "off");
|
databackend.Send(this.topic + "/set", v ? "on" : "off");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace BlubbFish.Utils.IoT.JsonSensor {
|
|||||||
public Pir(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) => this.Datatypes = Types.Bool;
|
public Pir(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) => this.Datatypes = Types.Bool;
|
||||||
|
|
||||||
protected override Boolean UpdateValue(BackendEvent e) {
|
protected override Boolean UpdateValue(BackendEvent e) {
|
||||||
this.GetBool = (e.Message.ToLower() == "on") ? true : false;
|
this.GetBool = e.Message.ToLower() == "on";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace BlubbFish.Utils.IoT.JsonSensor {
|
|||||||
public Switch(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) => this.Datatypes = Types.Bool;
|
public Switch(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) => this.Datatypes = Types.Bool;
|
||||||
|
|
||||||
protected override Boolean UpdateValue(BackendEvent e) {
|
protected override Boolean UpdateValue(BackendEvent e) {
|
||||||
this.GetBool = (e.Message.ToLower() == "on") ? true : false;
|
this.GetBool = e.Message.ToLower() == "on";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,25 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<RootNamespace>BlubbFish.Utils.IoT</RootNamespace>
|
<RootNamespace>BlubbFish.Utils.IoT</RootNamespace>
|
||||||
<AssemblyName>Utils-IoT</AssemblyName>
|
<AssemblyName>Utils-IoT</AssemblyName>
|
||||||
<AssemblyVersion>1.0.0</AssemblyVersion>
|
|
||||||
<NeutralLanguage>de-DE</NeutralLanguage>
|
<NeutralLanguage>de-DE</NeutralLanguage>
|
||||||
<PackageReleaseNotes>1.0.0 Init</PackageReleaseNotes>
|
<PackageReleaseNotes>
|
||||||
<Copyright>Copyright © BlubbFish 2017 - 24.11.2019</Copyright>
|
1.3.0 Netcore default
|
||||||
|
1.2.0 Refactoring
|
||||||
|
1.1.0 Readme
|
||||||
|
1.0.0.0 Init
|
||||||
|
</PackageReleaseNotes>
|
||||||
|
<Copyright>Copyright © BlubbFish 2017 - 15.01.2022</Copyright>
|
||||||
<Description>Provides classes for iot development</Description>
|
<Description>Provides classes for iot development</Description>
|
||||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||||
<Company>BlubbFish</Company>
|
<Company>BlubbFish</Company>
|
||||||
<Authors>BlubbFish</Authors>
|
<Authors>BlubbFish</Authors>
|
||||||
<FileVersion>1.0.0</FileVersion>
|
|
||||||
<PackageProjectUrl>http://git.blubbfish.net/vs_utils/Utils-IoT</PackageProjectUrl>
|
<PackageProjectUrl>http://git.blubbfish.net/vs_utils/Utils-IoT</PackageProjectUrl>
|
||||||
<RepositoryUrl>http://git.blubbfish.net/vs_utils/Utils-IoT.git</RepositoryUrl>
|
<RepositoryUrl>http://git.blubbfish.net/vs_utils/Utils-IoT.git</RepositoryUrl>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<Version>1.0.0</Version>
|
<Version>1.3.0</Version>
|
||||||
<PackageId>IoT.Utils.BlubbFish</PackageId>
|
<PackageId>IoT.Utils.BlubbFish</PackageId>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user