move Iot to Utils-IoT

This commit is contained in:
Philip Schell 2019-02-14 11:55:58 +01:00
parent be9a8b640b
commit 9f404f69a1
18 changed files with 572 additions and 572 deletions

View File

@ -1,55 +1,55 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.27004.2010 VisualStudioVersion = 15.0.27004.2010
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils-IoT", "IoT\Utils-IoT.csproj", "{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils-IoT", "IoT\Utils-IoT.csproj", "{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorDataMosquitto", "IoT\Connector\Data\Mosquitto\ConnectorDataMosquitto.csproj", "{39235FAD-BA9D-4B51-82FC-6969967BEAE9}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorDataMosquitto", "IoT\Connector\Data\Mosquitto\ConnectorDataMosquitto.csproj", "{39235FAD-BA9D-4B51-82FC-6969967BEAE9}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorDataMqtt", "IoT\Connector\Data\Mqtt\ConnectorDataMqtt.csproj", "{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorDataMqtt", "IoT\Connector\Data\Mqtt\ConnectorDataMqtt.csproj", "{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorUserTelegram", "IoT\Connector\User\Telegram\ConnectorUserTelegram.csproj", "{E66A57DD-858A-40E4-8A2F-BEA5129C31F7}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorUserTelegram", "IoT\Connector\User\Telegram\ConnectorUserTelegram.csproj", "{E66A57DD-858A-40E4-8A2F-BEA5129C31F7}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "litjson_4.7.1", "..\Librarys\litjson\litjson\litjson_4.7.1.csproj", "{91A14CD2-2940-4500-8193-56D37EDDDBAA}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "litjson_4.7.1", "..\Librarys\litjson\litjson\litjson_4.7.1.csproj", "{91A14CD2-2940-4500-8193-56D37EDDDBAA}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "M2Mqtt", "..\Librarys\mqtt\M2Mqtt\M2Mqtt.csproj", "{A11AEF5A-B246-4FE8-8330-06DB73CC8074}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "M2Mqtt", "..\Librarys\mqtt\M2Mqtt\M2Mqtt.csproj", "{A11AEF5A-B246-4FE8-8330-06DB73CC8074}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Debug|Any CPU.Build.0 = Debug|Any CPU {B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Release|Any CPU.ActiveCfg = Release|Any CPU {B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Release|Any CPU.Build.0 = Release|Any CPU {B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Release|Any CPU.Build.0 = Release|Any CPU
{39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Debug|Any CPU.Build.0 = Debug|Any CPU {39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Release|Any CPU.ActiveCfg = Release|Any CPU {39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Release|Any CPU.Build.0 = Release|Any CPU {39235FAD-BA9D-4B51-82FC-6969967BEAE9}.Release|Any CPU.Build.0 = Release|Any CPU
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Release|Any CPU.Build.0 = Release|Any CPU {EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Release|Any CPU.Build.0 = Release|Any CPU
{E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Release|Any CPU.Build.0 = Release|Any CPU {E66A57DD-858A-40E4-8A2F-BEA5129C31F7}.Release|Any CPU.Build.0 = Release|Any CPU
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {91A14CD2-2940-4500-8193-56D37EDDDBAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Debug|Any CPU.Build.0 = Debug|Any CPU {91A14CD2-2940-4500-8193-56D37EDDDBAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {91A14CD2-2940-4500-8193-56D37EDDDBAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Release|Any CPU.Build.0 = Release|Any CPU {91A14CD2-2940-4500-8193-56D37EDDDBAA}.Release|Any CPU.Build.0 = Release|Any CPU
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Debug|Any CPU.Build.0 = Debug|Any CPU {A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Release|Any CPU.ActiveCfg = Release|Any CPU {A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Release|Any CPU.Build.0 = Release|Any CPU {A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {844D8F60-6DE1-4C48-976D-F71450E9707B} SolutionGuid = {844D8F60-6DE1-4C48-976D-F71450E9707B}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -1,54 +1,54 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
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,
User User
} }
public event BackendMessage MessageIncomming; public event BackendMessage MessageIncomming;
public event BackendMessage MessageSending; public event BackendMessage MessageSending;
public delegate void BackendMessage(Object sender, BackendEvent e); public delegate void BackendMessage(Object sender, BackendEvent e);
protected Dictionary<String, String> settings; protected Dictionary<String, String> settings;
public abstract Boolean IsConnected { get; } public abstract Boolean IsConnected { get; }
public ABackend(Dictionary<String, String> settings) { public ABackend(Dictionary<String, String> settings) {
this.settings = settings; this.settings = settings;
} }
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();
Type t = null; Type t = null;
try { try {
t = Type.GetType(object_sensor, true); t = Type.GetType(object_sensor, true);
} catch (TypeLoadException) { } catch (TypeLoadException) {
Console.Error.WriteLine("Configuration: " + settings["type"] + " is not a " + ty.ToString() + "Backend"); Console.Error.WriteLine("Configuration: " + settings["type"] + " is not a " + ty.ToString() + "Backend");
return null; return null;
} catch (System.IO.FileNotFoundException) { } catch (System.IO.FileNotFoundException) {
Console.Error.WriteLine("Driver " + object_sensor + " could not load!"); Console.Error.WriteLine("Driver " + object_sensor + " could not load!");
return null; return null;
} }
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 });
} }
protected void NotifyClientIncomming(BackendEvent value) { protected void NotifyClientIncomming(BackendEvent value) {
this.MessageIncomming?.Invoke(this, value); this.MessageIncomming?.Invoke(this, value);
} }
protected void NotifyClientSending(BackendEvent value) { protected void NotifyClientSending(BackendEvent value) {
this.MessageSending?.Invoke(this, value); this.MessageSending?.Invoke(this, value);
} }
public abstract void Dispose(); public abstract void Dispose();
} }
} }

View File

@ -1,10 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.Connector { namespace BlubbFish.Utils.IoT.Connector {
public abstract class ADataBackend : ABackend { public abstract class ADataBackend : ABackend {
public ADataBackend(Dictionary<String, String> settings) : base(settings) { } public ADataBackend(Dictionary<String, String> settings) : base(settings) { }
public abstract void Send(String topic, String data); public abstract void Send(String topic, String data);
} }
} }

View File

@ -1,11 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.Connector { 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); public abstract void Send(String message, String[] buttons);
} }
} }

View File

@ -1,26 +1,26 @@
using System; using System;
namespace BlubbFish.Utils.IoT.Connector { namespace BlubbFish.Utils.IoT.Connector {
public class UserMessageEventArgs : EventArgs { public class UserMessageEventArgs : EventArgs {
public UserMessageEventArgs() : base() { } public UserMessageEventArgs() : base() { }
public UserMessageEventArgs(String message, Int64 UserId, DateTime date) { public UserMessageEventArgs(String message, Int64 UserId, DateTime date) {
this.UserId = UserId; this.UserId = UserId;
this.Message = message; this.Message = message;
this.Date = date; this.Date = date;
} }
public Int64 UserId { get; private set; } public Int64 UserId { get; private set; }
public String Message { get; private set; } public String Message { get; private set; }
public DateTime Date { get; private set; } public DateTime Date { get; private set; }
} }
public class MqttEventArgs : EventArgs { public class MqttEventArgs : EventArgs {
public MqttEventArgs() : base() { } public MqttEventArgs() : base() { }
public MqttEventArgs(String message, String topic) { public MqttEventArgs(String message, String topic) {
this.Topic = topic; this.Topic = topic;
this.Message = message; this.Message = message;
this.Date = DateTime.Now; this.Date = DateTime.Now;
} }
public String Topic { get; private set; } public String Topic { get; private set; }
public String Message { get; private set; } public String Message { get; private set; }
public DateTime Date { get; private set; } public DateTime Date { get; private set; }
} }
} }

View File

@ -1,22 +1,22 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace BlubbFish.Utils.IoT.Events { namespace BlubbFish.Utils.IoT.Events {
public class BackendEvent : EventArgs { public class BackendEvent : EventArgs {
public BackendEvent() : base() { } public BackendEvent() : base() { }
public BackendEvent(String message, Object from, DateTime date, String label) { public BackendEvent(String message, Object from, DateTime date, String label) {
this.From = from; this.From = from;
this.Message = message; this.Message = message;
this.Date = date; this.Date = date;
this.Label = label; this.Label = label;
} }
public Object From { get; private set; } public Object From { get; private set; }
public String Message { get; private set; } public String Message { get; private set; }
public DateTime Date { get; private set; } public DateTime Date { get; private set; }
public String Label { get; private set; } public String Label { get; private set; }
} }
} }

View File

@ -1,12 +1,12 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace BlubbFish.Utils.IoT.Events { namespace BlubbFish.Utils.IoT.Events {
public class DataEvent : BackendEvent { public class DataEvent : BackendEvent {
public DataEvent(String data) : base() { } public DataEvent(String data) : base() { }
public DataEvent(String message, String topic, DateTime date) : base(message, topic, date, "Data") { } public DataEvent(String message, String topic, DateTime date) : base(message, topic, date, "Data") { }
} }
} }

View File

@ -1,12 +1,12 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
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, Int64 UserId, DateTime date) : base(message, UserId, date, "User") { }
} }
} }

View File

@ -1,19 +1,19 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace BlubbFish.Utils.IoT { namespace BlubbFish.Utils.IoT {
static class Helper { static class Helper {
internal static String ToUpperLower(this String s) { internal static String ToUpperLower(this String s) {
if (s.Length == 0) { if (s.Length == 0) {
return ""; return "";
} }
if (s.Length == 1) { if (s.Length == 1) {
return s.ToUpper(); return s.ToUpper();
} }
return s[0].ToString().ToUpper() + s.Substring(1).ToLower(); return s[0].ToString().ToUpper() + s.Substring(1).ToLower();
} }
} }
} }

View File

@ -1,129 +1,129 @@
using System; using System;
using System.Collections.Generic; 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;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
public abstract class AJsonSensor : IDisposable { public abstract class AJsonSensor : IDisposable {
protected String topic; protected String topic;
protected Int32 pollcount; protected Int32 pollcount;
protected Dictionary<String, String> settings; protected Dictionary<String, String> settings;
protected ABackend backend; protected ABackend backend;
private Thread pollingThread; private Thread pollingThread;
private Boolean pollEnabled = false; private Boolean pollEnabled = false;
public AJsonSensor(Dictionary<String, String> settings, String name, ABackend backend) { public AJsonSensor(Dictionary<String, String> settings, String name, ABackend backend) {
this.GetBool = true; this.GetBool = true;
this.GetFloat = 0.0f; this.GetFloat = 0.0f;
this.GetInt = 0; this.GetInt = 0;
this.topic = (settings.Keys.Contains("topic")) ? settings["topic"] : ""; this.topic = (settings.Keys.Contains("topic")) ? settings["topic"] : "";
this.settings = settings; this.settings = settings;
this.Title = (settings.Keys.Contains("title")) ? settings["title"] : ""; this.Title = (settings.Keys.Contains("title")) ? settings["title"] : "";
this.Name = name; this.Name = name;
this.backend = backend; this.backend = backend;
this.backend.MessageIncomming += this.IncommingMqttMessage; this.backend.MessageIncomming += this.IncommingMqttMessage;
if (settings.Keys.Contains("polling")) { if (settings.Keys.Contains("polling")) {
this.pollEnabled = true; this.pollEnabled = true;
this.Polling = Int32.Parse(settings["polling"]); this.Polling = Int32.Parse(settings["polling"]);
this.pollcount = this.Polling; this.pollcount = this.Polling;
this.pollingThread = new Thread(this.SensorPolling); this.pollingThread = new Thread(this.SensorPolling);
this.pollingThread.Start(); this.pollingThread.Start();
} }
} }
private void SensorPolling() { private void SensorPolling() {
while(this.pollEnabled) { while(this.pollEnabled) {
Thread.Sleep(1000); Thread.Sleep(1000);
this.Poll(); this.Poll();
} }
} }
private void IncommingMqttMessage(Object sender, BackendEvent e) { private void IncommingMqttMessage(Object sender, BackendEvent e) {
if(Regex.Match(e.From.ToString(), this.topic).Success) { if(Regex.Match(e.From.ToString(), this.topic).Success) {
if (this.UpdateValue(e)) { if (this.UpdateValue(e)) {
this.Timestamp = DateTime.Now; this.Timestamp = DateTime.Now;
this.Update?.Invoke(this, e); this.Update?.Invoke(this, e);
} }
} }
} }
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(); String object_sensor = "BlubbFish.Utils.IoT.JsonSensor." + Char.ToUpper(settings["type"][0]) + settings["type"].Substring(1).ToLower();
Type t = null; Type t = null;
try { try {
t = Type.GetType(object_sensor, true); t = Type.GetType(object_sensor, true);
} catch(TypeLoadException) { } catch(TypeLoadException) {
throw new ArgumentException("Sensor: " + object_sensor + " is not a Sensor"); 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"]] }); return (AJsonSensor)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>), typeof(String), typeof(ABackend) }).Invoke(new Object[] { settings, name, backends[settings["backend"]] });
} }
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) {
((ADataBackend)this.backend).Send(this.topic + "/get", ""); ((ADataBackend)this.backend).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) {
((ADataBackend)this.backend).Send(this.topic + "/set", v ? "on" : "off"); ((ADataBackend)this.backend).Send(this.topic + "/set", v ? "on" : "off");
} }
} }
protected abstract Boolean UpdateValue(BackendEvent e); protected abstract Boolean UpdateValue(BackendEvent e);
public Single GetFloat { get; protected set; } public Single GetFloat { get; protected set; }
public Boolean GetBool { get; protected set; } public Boolean GetBool { get; protected set; }
public Int32 GetInt { get; protected set; } public Int32 GetInt { get; protected set; }
public Types Datatypes { get; protected set; } public Types Datatypes { get; protected set; }
public DateTime Timestamp { get; protected set; } public DateTime Timestamp { get; protected set; }
public Int32 Polling { get; private set; } public Int32 Polling { get; private set; }
public String Title { get; protected set; } public String Title { get; protected set; }
public String Name { get; internal set; } public String Name { get; internal set; }
public enum Types { public enum Types {
Bool, Bool,
Int, Int,
Float Float
} }
public delegate void UpdatedValue(Object sender, EventArgs e); public delegate void UpdatedValue(Object sender, EventArgs e);
public event UpdatedValue Update; public event UpdatedValue Update;
#region IDisposable Support #region IDisposable Support
private Boolean disposedValue = false; private Boolean disposedValue = false;
protected virtual void Dispose(Boolean disposing) { protected virtual void Dispose(Boolean disposing) {
if(!this.disposedValue) { if(!this.disposedValue) {
if(disposing) { if(disposing) {
this.pollEnabled = false; this.pollEnabled = false;
if (this.pollingThread != null && this.pollingThread.ThreadState == ThreadState.Running) { if (this.pollingThread != null && this.pollingThread.ThreadState == ThreadState.Running) {
this.pollingThread.Abort(); this.pollingThread.Abort();
while (this.pollingThread.ThreadState != ThreadState.Aborted) { } while (this.pollingThread.ThreadState != ThreadState.Aborted) { }
} }
this.backend.MessageIncomming -= this.IncommingMqttMessage; this.backend.MessageIncomming -= this.IncommingMqttMessage;
} }
this.settings = null; this.settings = null;
this.pollingThread = null; this.pollingThread = null;
this.disposedValue = true; this.disposedValue = true;
} }
} }
~AJsonSensor() { ~AJsonSensor() {
Dispose(false); Dispose(false);
} }
public void Dispose() { public void Dispose() {
Dispose(true); Dispose(true);
GC.SuppressFinalize(this); GC.SuppressFinalize(this);
} }
#endregion #endregion
} }
} }

View File

@ -1,34 +1,34 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using BlubbFish.Utils.IoT.Connector; using BlubbFish.Utils.IoT.Connector;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
using LitJson; using LitJson;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
class Bosmon : AJsonSensor { class Bosmon : AJsonSensor {
public Bosmon(Dictionary<String, String> settings, String name, ABackend backend) : base(settings, name, backend) { public Bosmon(Dictionary<String, String> settings, String name, ABackend backend) : base(settings, name, backend) {
} }
public String Ric { get; private set; } public String Ric { get; private set; }
public String Message { get; private set; } public String Message { get; private set; }
public String Func { get; private set; } public String Func { get; private set; }
public DateTime Time { get; private set; } public DateTime Time { get; private set; }
protected override Boolean UpdateValue(BackendEvent e) { protected override Boolean UpdateValue(BackendEvent e) {
try { try {
JsonData json = JsonMapper.ToObject(e.Message); JsonData json = JsonMapper.ToObject(e.Message);
if(json.ContainsKey("TYPE_POCSAG")) { if(json.ContainsKey("TYPE_POCSAG")) {
if(this.settings["rics"].Split(';').ToList().Contains(json["Address"].ToString())) { if(this.settings["rics"].Split(';').ToList().Contains(json["Address"].ToString())) {
this.Ric = json["Address"].ToString(); this.Ric = json["Address"].ToString();
this.Message = json["Msg"].ToString(); this.Message = json["Msg"].ToString();
this.Func = json["Func"].ToString(); this.Func = json["Func"].ToString();
this.Time = new DateTime(Int64.Parse(json["Timestamp"].ToString())); this.Time = new DateTime(Int64.Parse(json["Timestamp"].ToString()));
return true; return true;
} }
} }
} catch(Exception) { } } catch(Exception) { }
return false; return false;
} }
} }
} }

View File

@ -1,21 +1,21 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using BlubbFish.Utils.IoT.Connector; using BlubbFish.Utils.IoT.Connector;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
class Luminanz : AJsonSensor { class Luminanz : AJsonSensor {
public Luminanz(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) { public Luminanz(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) {
this.GetBool = true; this.GetBool = true;
this.GetFloat = 0.0f; this.GetFloat = 0.0f;
this.GetInt = 0; this.GetInt = 0;
this.Datatypes = Types.Int; this.Datatypes = Types.Int;
} }
protected override Boolean UpdateValue(BackendEvent e) { protected override Boolean UpdateValue(BackendEvent e) {
this.GetInt = Int32.Parse(e.Message, new CultureInfo("en-US")); this.GetInt = Int32.Parse(e.Message, new CultureInfo("en-US"));
return true; return true;
} }
} }
} }

View File

@ -1,17 +1,17 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using BlubbFish.Utils.IoT.Connector; using BlubbFish.Utils.IoT.Connector;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
class Pir : AJsonSensor { class Pir : AJsonSensor {
public Pir(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) { public Pir(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) {
this.Datatypes = Types.Bool; 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") ? true : false;
return true; return true;
} }
} }
} }

View File

@ -1,21 +1,21 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using BlubbFish.Utils.IoT.Connector; using BlubbFish.Utils.IoT.Connector;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
class Power : AJsonSensor { class Power : AJsonSensor {
public Power(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) { public Power(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) {
this.GetBool = true; this.GetBool = true;
this.GetFloat = 0.0f; this.GetFloat = 0.0f;
this.GetInt = 0; this.GetInt = 0;
this.Datatypes = Types.Float; this.Datatypes = Types.Float;
} }
protected override Boolean UpdateValue(BackendEvent e) { protected override Boolean UpdateValue(BackendEvent e) {
this.GetFloat = Single.Parse(e.Message, new CultureInfo("en-US")); this.GetFloat = Single.Parse(e.Message, new CultureInfo("en-US"));
return true; return true;
} }
} }
} }

View File

@ -1,17 +1,17 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using BlubbFish.Utils.IoT.Connector; using BlubbFish.Utils.IoT.Connector;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
class Switch : AJsonSensor { class Switch : AJsonSensor {
public Switch(Dictionary<System.String, System.String> settings, String name, ADataBackend backend) : base(settings, name, backend) { public Switch(Dictionary<System.String, System.String> settings, String name, ADataBackend backend) : base(settings, name, backend) {
this.Datatypes = Types.Bool; 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") ? true : false;
return true; return true;
} }
} }
} }

View File

@ -1,21 +1,21 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using BlubbFish.Utils.IoT.Connector; using BlubbFish.Utils.IoT.Connector;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.JsonSensor { namespace BlubbFish.Utils.IoT.JsonSensor {
class Temperatur : AJsonSensor { class Temperatur : AJsonSensor {
public Temperatur(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) { public Temperatur(Dictionary<String, String> settings, String name, ADataBackend backend) : base(settings, name, backend) {
this.GetBool = true; this.GetBool = true;
this.GetFloat = 0.0f; this.GetFloat = 0.0f;
this.GetInt = 0; this.GetInt = 0;
this.Datatypes = Types.Float; this.Datatypes = Types.Float;
} }
protected override Boolean UpdateValue(BackendEvent e) { protected override Boolean UpdateValue(BackendEvent e) {
this.GetFloat = Single.Parse(e.Message, new CultureInfo("en-US")); this.GetFloat = Single.Parse(e.Message, new CultureInfo("en-US"));
return true; return true;
} }
} }
} }

View File

@ -1,36 +1,36 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden // Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind. // die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("IoT")] [assembly: AssemblyTitle("IoT")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("IoT")] [assembly: AssemblyProduct("IoT")]
[assembly: AssemblyCopyright("Copyright © 2017")] [assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly // 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 // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("b870e4d5-6806-4a0b-b233-8907eedc5afc")] [assembly: Guid("b870e4d5-6806-4a0b-b233-8907eedc5afc")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
// //
// Hauptversion // Hauptversion
// Nebenversion // Nebenversion
// Buildnummer // Buildnummer
// Revision // Revision
// //
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben: // indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,60 +1,60 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}</ProjectGuid> <ProjectGuid>{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}</ProjectGuid>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BlubbFish.Utils.IoT</RootNamespace> <RootNamespace>BlubbFish.Utils.IoT</RootNamespace>
<AssemblyName>Utils-IoT</AssemblyName> <AssemblyName>Utils-IoT</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath> <OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Connector\ABackend.cs" /> <Compile Include="Connector\ABackend.cs" />
<Compile Include="Connector\ADataBackend.cs" /> <Compile Include="Connector\ADataBackend.cs" />
<Compile Include="Connector\AUserBackend.cs" /> <Compile Include="Connector\AUserBackend.cs" />
<Compile Include="Events\BackendEvent.cs" /> <Compile Include="Events\BackendEvent.cs" />
<Compile Include="Events\DataEvent.cs" /> <Compile Include="Events\DataEvent.cs" />
<Compile Include="Events\UserEvent.cs" /> <Compile Include="Events\UserEvent.cs" />
<Compile Include="Helper.cs" /> <Compile Include="Helper.cs" />
<Compile Include="JsonSensor\Bosmon.cs" /> <Compile Include="JsonSensor\Bosmon.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="JsonSensor\AJsonSensor.cs" /> <Compile Include="JsonSensor\AJsonSensor.cs" />
<Compile Include="JsonSensor\Luminanz.cs" /> <Compile Include="JsonSensor\Luminanz.cs" />
<Compile Include="JsonSensor\Pir.cs" /> <Compile Include="JsonSensor\Pir.cs" />
<Compile Include="JsonSensor\Power.cs" /> <Compile Include="JsonSensor\Power.cs" />
<Compile Include="JsonSensor\Switch.cs" /> <Compile Include="JsonSensor\Switch.cs" />
<Compile Include="JsonSensor\Temperatur.cs" /> <Compile Include="JsonSensor\Temperatur.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Librarys\litjson\litjson\litjson_4.7.1.csproj"> <ProjectReference Include="..\..\Librarys\litjson\litjson\litjson_4.7.1.csproj">
<Project>{91a14cd2-2940-4500-8193-56d37edddbaa}</Project> <Project>{91a14cd2-2940-4500-8193-56d37edddbaa}</Project>
<Name>litjson_4.7.1</Name> <Name>litjson_4.7.1</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>