Browse Source

Move MQTT stuff in to component. Add shutdown for IComponent and add to implementations. Remove MQTT settings stuff out of core.

Robert Marshall 6 years ago
parent
commit
5ce9db1614

+ 2 - 3
HAServer.Components/HAServer.Components.csproj

@@ -30,9 +30,8 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
-      <Private>False</Private>
+    <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />

+ 5 - 2
HAServer.Components/SolarEvents.cs

@@ -48,8 +48,7 @@ namespace HAServer.Components {
 
 		private bool ParseDateForTimeZone(string dateTime, out DateTime time) {
 			time = new DateTime();
-			DateTimeOffset parsedDateLocal;
-			if (!DateTimeOffset.TryParse(dateTime, out parsedDateLocal))
+			if (!DateTimeOffset.TryParse(dateTime, out var parsedDateLocal))
 				return false;
 			time = TimeZoneInfo.ConvertTimeFromUtc(parsedDateLocal.DateTime, _timeZone);
 			return true;
@@ -87,5 +86,9 @@ namespace HAServer.Components {
 			_messageBus.AddSubscriber(this, "^time$");
 			GetSolarEventsForTheDay();
 		}
+
+		public void Shutdown() {
+			
+		}
 	}
 }

+ 3 - 3
HAServer.Components/Time.cs

@@ -17,12 +17,12 @@ namespace HAServer.Components {
 			_messageBus.PublishMessage("time", DateTime.Now.ToTimeString(), null);
 		}
 
-		public void Start() {
+		public void Initialise() {
 			_timer.Start();
 		}
 
-		public void Initialise() {
-			Start();
+		public void Shutdown() {
+			_timer.Stop();
 		}
 	}
 }

+ 1 - 1
HAServer.Components/packages.config

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net452" />
+  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net452" />
 </packages>

+ 4 - 2
HAServer.InfluxDB/InfluxDB.cs

@@ -24,9 +24,11 @@ namespace HAServer.InfluxDB {
 			_messageBus.AddSubscriber(this, _settingsProvider.Topic());
 		}
 
+		public void Shutdown() {
+		}
+
 		public void ProcessMessage(string topic, string message) {
-			double numeric;
-			double.TryParse(message, out numeric);
+			double.TryParse(message, out var numeric);
 			var data = new LineProtocolPoint(_settingsProvider.Measurement(),
 											 new Dictionary<string, object> {{"value", message},{"valueNumeric", numeric}},
 											 new Dictionary<string, string> {{"topic", topic}});

+ 1 - 0
HAServer.Interfaces/Core/IComponent.cs

@@ -1,5 +1,6 @@
 namespace HAServer.Interfaces.Core {
 	public interface IComponent {
 		void Initialise();
+		void Shutdown();
 	}
 }

+ 60 - 0
HAServer.MQTT/HAServer.MQTT.csproj

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HAServer.MQTT</RootNamespace>
+    <AssemblyName>HAServer.MQTT</AssemblyName>
+    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\HAServer\bin\Debug\Components\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="M2Mqtt.Net, Version=4.3.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\M2Mqtt.4.3.0.0\lib\net45\M2Mqtt.Net.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ISettingsProviderInfluxDBExtensions.cs" />
+    <Compile Include="MqttManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HAServer.Interfaces\HAServer.Interfaces.csproj">
+      <Project>{7c70ee15-0a07-41d3-8d33-94c82a8ed299}</Project>
+      <Name>HAServer.Interfaces</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 21 - 0
HAServer.MQTT/ISettingsProviderInfluxDBExtensions.cs

@@ -0,0 +1,21 @@
+using HAServer.Interfaces.Core;
+
+namespace HAServer.MQTT {
+	public static class SettingsProviderMQTTExtensions {
+		public static string MqttHost(this ISettingsProvider provider) {
+			return provider.GetValue("mqttHost");
+		}
+
+		public static byte MqttQos(this ISettingsProvider provider) {
+			return byte.Parse(provider.GetValue("mqttQoS"));
+		}
+
+		public static bool MqttRetain(this ISettingsProvider provider) {
+			return bool.Parse(provider.GetValue("mqttRetain"));
+		}
+
+		public static string MqttBaseTopic(this ISettingsProvider provider) {
+			return provider.GetValue("mqttBaseTopic");
+		}
+	}
+}

+ 16 - 15
HAServer/Core/MqttManager.cs

@@ -1,26 +1,27 @@
-using System.Diagnostics.CodeAnalysis;
+using System;
+using System.Diagnostics.CodeAnalysis;
 using System.Text;
 using HAServer.Interfaces.Core;
 using uPLibrary.Networking.M2Mqtt;
 using uPLibrary.Networking.M2Mqtt.Messages;
 
-namespace HAServer.Core {
+namespace HAServer.MQTT {
 	[ExcludeFromCodeCoverage]
-	public class MqttManager : ISubscriber {
+	public class MqttManager : IComponent, ISubscriber {
 		private readonly MqttClient _client;
 		private readonly IMessageBus _messageBus;
 		private readonly bool _retain;
 		private readonly byte _qosLevel;
 
-		public MqttManager(IMessageBus messageBus, IMqttSettingsProvider settings) {
+		public MqttManager(IMessageBus messageBus, ISettingsProvider settings) {
 			_messageBus = messageBus;
-			_qosLevel = settings.MqttQos;
-			_retain = settings.MqttRetain;
-			_messageBus.AddSubscriber(this, $"{settings.MqttBaseTopic}/.*");
+			_qosLevel = settings.MqttQos();
+			_retain = settings.MqttRetain();
+			_messageBus.AddSubscriber(this, $"{settings.MqttBaseTopic()}/.*");
 
-			_client = new MqttClient(settings.MqttHost);
+			_client = new MqttClient(settings.MqttHost());
 			_client.MqttMsgPublishReceived += MessageRecieved;
-			_client.Subscribe(new[] { $"{settings.MqttBaseTopic}/#" }, new[] { _qosLevel });
+			_client.Subscribe(new[] { $"{settings.MqttBaseTopic()}/#" }, new[] { _qosLevel });
 		}
 
 		void MessageRecieved(object sender, MqttMsgPublishEventArgs e) {
@@ -28,16 +29,16 @@ namespace HAServer.Core {
 			_messageBus.PublishMessage(e.Topic, message, this);
 		}
 
-		public void Connect(string clientName) {
-			_client.Connect(clientName);
+		public void ProcessMessage(string topic, string message) {
+			_client.Publish(topic, Encoding.UTF8.GetBytes(message), _qosLevel, _retain);
 		}
 
-		public void Disconnect() {
-			_client.Disconnect();
+		public void Initialise() {
+			_client.Connect(Environment.MachineName);
 		}
 
-		public void ProcessMessage(string topic, string message) {
-			_client.Publish(topic, Encoding.UTF8.GetBytes(message), _qosLevel, _retain);
+		public void Shutdown() {
+			_client.Disconnect();
 		}
 	}
 }

+ 36 - 0
HAServer.MQTT/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HAServer.MQTT")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HAServer.MQTT")]
+[assembly: AssemblyCopyright("Copyright ©  2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0dbec250-2f50-4b05-a0a7-afcb041c9dba")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 4 - 0
HAServer.MQTT/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="M2Mqtt" version="4.3.0.0" targetFramework="net461" />
+</packages>

+ 19 - 0
HAServer.MQTT23/HAServer.MQTT23.csproj

@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <OutputPath>..\HAServer\bin\Debug\Components</OutputPath>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="M2Mqtt" Version="4.3.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\HAServer.Interfaces\HAServer.Interfaces.csproj" />
+  </ItemGroup>
+
+</Project>

+ 21 - 0
HAServer.MQTT23/ISettingsProviderInfluxDBExtensions.cs

@@ -0,0 +1,21 @@
+using HAServer.Interfaces.Core;
+
+namespace HAServer.MQTT {
+	public static class SettingsProviderMQTTExtensions {
+		public static string MqttHost(this ISettingsProvider provider) {
+			return provider.GetValue("mqttHost");
+		}
+
+		public static byte MqttQos(this ISettingsProvider provider) {
+			return byte.Parse(provider.GetValue("mqttQoS"));
+		}
+
+		public static bool MqttRetain(this ISettingsProvider provider) {
+			return bool.Parse(provider.GetValue("mqttRetain"));
+		}
+
+		public static string MqttBaseTopic(this ISettingsProvider provider) {
+			return provider.GetValue("mqttBaseTopic");
+		}
+	}
+}

+ 44 - 0
HAServer.MQTT23/MqttManager.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Text;
+using HAServer.Interfaces.Core;
+using uPLibrary.Networking.M2Mqtt;
+using uPLibrary.Networking.M2Mqtt.Messages;
+
+namespace HAServer.MQTT {
+	[ExcludeFromCodeCoverage]
+	public class MqttManager : IComponent, ISubscriber {
+		private readonly MqttClient _client;
+		private readonly IMessageBus _messageBus;
+		private readonly bool _retain;
+		private readonly byte _qosLevel;
+
+		public MqttManager(IMessageBus messageBus, ISettingsProvider settings) {
+			_messageBus = messageBus;
+			_qosLevel = settings.MqttQos();
+			_retain = settings.MqttRetain();
+			_messageBus.AddSubscriber(this, $"{settings.MqttBaseTopic()}/.*");
+
+			_client = new MqttClient(settings.MqttHost());
+			_client.MqttMsgPublishReceived += MessageRecieved;
+			_client.Subscribe(new[] { $"{settings.MqttBaseTopic()}/#" }, new[] { _qosLevel });
+		}
+
+		void MessageRecieved(object sender, MqttMsgPublishEventArgs e) {
+			var message = Encoding.UTF8.GetString(e.Message);
+			_messageBus.PublishMessage(e.Topic, message, this);
+		}
+
+		public void ProcessMessage(string topic, string message) {
+			_client.Publish(topic, Encoding.UTF8.GetBytes(message), _qosLevel, _retain);
+		}
+
+		public void Initialise() {
+			_client.Connect(Environment.MachineName);
+		}
+
+		public void Shutdown() {
+			_client.Disconnect();
+		}
+	}
+}

+ 15 - 2
HAServer.sln

@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.27428.2005
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HAServer", "HAServer\HAServer.csproj", "{4FE95D21-7B4B-4A1B-B5BB-CEBBED41189C}"
 EndProject
@@ -16,6 +16,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HAServer.Tests.Integration"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HAServer.InfluxDB", "HAServer.InfluxDB\HAServer.InfluxDB.csproj", "{CA0624EE-133A-4D2C-A9AD-88D2265C7485}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HAServer.MQTT", "HAServer.MQTT\HAServer.MQTT.csproj", "{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -80,8 +82,19 @@ Global
 		{CA0624EE-133A-4D2C-A9AD-88D2265C7485}.Release|Any CPU.Build.0 = Release|Any CPU
 		{CA0624EE-133A-4D2C-A9AD-88D2265C7485}.Release|x86.ActiveCfg = Release|Any CPU
 		{CA0624EE-133A-4D2C-A9AD-88D2265C7485}.Release|x86.Build.0 = Release|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Debug|x86.Build.0 = Debug|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Release|x86.ActiveCfg = Release|Any CPU
+		{0DBEC250-2F50-4B05-A0A7-AFCB041C9DBA}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {94C4F15E-0EEF-423A-9B22-8FE4FE46AF03}
+	EndGlobalSection
 EndGlobal

+ 0 - 41
HAServer/Core/ApplicationSettingsProvider.cs

@@ -10,42 +10,6 @@ namespace HAServer.Core {
 			_config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 		}
 
-		public string MqttHost {
-			get {
-				return GetValue("mqttHost");
-			}
-			set {
-				SetValue("mqttHost", value);
-			}
-		}
-
-		public byte MqttQos {
-			get {
-				return byte.Parse(GetValue("mqttQoS"));
-			}
-			set {
-				SetValue("mqttQoS", value);
-			}
-		}
-
-		public bool MqttRetain {
-			get {
-				return bool.Parse(GetValue("mqttRetain"));
-			}
-			set {
-				SetValue("mqttRetain", value);
-			}
-		}
-
-		public string MqttBaseTopic {
-			get {
-				return GetValue("mqttBaseTopic");
-			}
-			set {
-				SetValue("mqttBaseTopic", value);
-			}
-		}
-
 		public int WebUiPort {
 			get {
 				return int.Parse(GetValue("webUiPort"));
@@ -85,11 +49,6 @@ namespace HAServer.Core {
 		}
 
 		public void UpdateSettings(ISettingsData settingsData) {
-			MqttHost = settingsData.MqttHost;
-			MqttQos = settingsData.MqttQos;
-			MqttRetain = settingsData.MqttRetain;
-			MqttBaseTopic = settingsData.MqttBaseTopic;
-
 			WebUiPort = settingsData.WebUiPort;
 			WebUiPath = settingsData.WebUiPath;
 		}

+ 3 - 0
HAServer/Core/ComponentLoader.cs

@@ -26,6 +26,9 @@ namespace HAServer.Core {
 		public IEnumerable<T> Components => _components;
 
 		public void Load() {
+			if (!Directory.Exists(_componentDirectory))
+				return;
+
 			var files = Directory.GetFiles(_componentDirectory, SearchPattern).Select(Path.GetFullPath);
 			var assemblies = files.Select(Assembly.LoadFile).ToList();
 			var types = assemblies.SelectMany(assembly => assembly.GetExportedTypes());

+ 1 - 1
HAServer/Core/IApplicationSettingsProvider.cs

@@ -1,7 +1,7 @@
 using HAServer.Interfaces.Core;
 
 namespace HAServer.Core {
-	public interface IApplicationSettingsProvider:ISettingsProvider, IMqttSettingsProvider {
+	public interface IApplicationSettingsProvider:ISettingsProvider {
 		int WebUiPort { get; set; }
 		string WebUiPath { get; set; }
 		void UpdateSettings(ISettingsData settingsData);

+ 0 - 8
HAServer/Core/IMqttSettingsProvider.cs

@@ -1,8 +0,0 @@
-namespace HAServer.Core {
-	public interface IMqttSettingsProvider {
-		string MqttHost { get; set; }
-		byte MqttQos { get; set; }
-		bool MqttRetain { get; set; }
-		string MqttBaseTopic { get; set; }
-	}
-}

+ 0 - 4
HAServer/Core/ISettingsData.cs

@@ -1,9 +1,5 @@
 namespace HAServer.Core {
 	public interface ISettingsData {
-		string MqttHost { get; }
-		byte MqttQos { get; }
-		bool MqttRetain { get; }
-		string MqttBaseTopic { get; }
 		int WebUiPort { get; }
 		string WebUiPath { get; }
 	}

+ 2 - 8
HAServer/HAServer.csproj

@@ -44,14 +44,10 @@
     <ExternalConsole>true</ExternalConsole>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     <Reference Include="System" />
-    <Reference Include="M2Mqtt.Net">
-      <HintPath>..\packages\M2Mqtt.4.3.0.0\lib\net45\M2Mqtt.Net.dll</HintPath>
-    </Reference>
     <Reference Include="System.Configuration" />
     <Reference Include="System.Net" />
     <Reference Include="mscorlib" />
@@ -76,7 +72,6 @@
     <Compile Include="Core\ApplicationSettingsProvider.cs" />
     <Compile Include="Core\HttpGet.cs" />
     <Compile Include="Core\IApplicationSettingsProvider.cs" />
-    <Compile Include="Core\IMqttSettingsProvider.cs" />
     <Compile Include="Core\ISettingsData.cs" />
     <Compile Include="Core\Log.cs" />
     <Compile Include="Core\SettingNotFoundException.cs" />
@@ -110,7 +105,6 @@
     <Compile Include="WebServer\RequestHandlers\WebObjectHandler.cs" />
     <Compile Include="WebServer\WebSocketApi.cs" />
     <Compile Include="WebServer\WebUI.cs" />
-    <Compile Include="Core\MqttManager.cs" />
     <Compile Include="Core\MessageBus.cs" />
   </ItemGroup>
   <ItemGroup>

+ 8 - 13
HAServer/Program.cs

@@ -2,7 +2,6 @@
 using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Linq;
-using System.Security.Policy;
 using System.ServiceProcess;
 using HAServer.Core;
 using HAServer.Interfaces.Core;
@@ -11,9 +10,9 @@ using HAServer.WebServer;
 namespace HAServer {
 	[ExcludeFromCodeCoverage]
 	static class Program {
-		private static MqttManager _mqtt;
 		private static WebUI _webUi;
 		private static MessageBus _messageBus;
+		private static ComponentLoader<IComponent> _componentLoader;
 
 		public class Service:ServiceBase {
 			public Service() {
@@ -67,7 +66,6 @@ namespace HAServer {
 			var settingsProvider = new ApplicationSettingsProvider();
 			dependencyResolver.Register<ISettingsProvider>(settingsProvider);
 			dependencyResolver.Register<IApplicationSettingsProvider>(settingsProvider);
-			dependencyResolver.Register<IMqttSettingsProvider>(settingsProvider);
 			_messageBus = new MessageBus(dependencyResolver.Resolve<ILogProvider>());
 			dependencyResolver.Register<IMessageBus>(_messageBus);
 			dependencyResolver.Register<IFileGet>(new HttpGet());
@@ -87,24 +85,21 @@ namespace HAServer {
 							   : new TriggerConfig();
 			dependencyResolver.Register(triggers);
 
-			if (Directory.Exists("Components")) {
-				var loader = new ComponentLoader<IComponent>("Components", dependencyResolver);
-				loader.Load();
-				foreach (var component in loader.Components) {
-					component.Initialise();
-				}
+			_componentLoader = new ComponentLoader<IComponent>("Components", dependencyResolver);
+			_componentLoader.Load();
+			foreach (var component in _componentLoader.Components) {
+				component.Initialise();
 			}
 
-			_mqtt = dependencyResolver.CreateInstance<MqttManager>();
-			_mqtt.Connect(Environment.MachineName);
-
 			_webUi = dependencyResolver.CreateInstance<WebUI>();
 			_webUi.Start();
 		}
 
 		private static void Stop() {
 			_webUi.Stop();
-			_mqtt.Disconnect();
+			foreach (var component in _componentLoader.Components) {
+				component.Shutdown();
+			}
 		}
 
 	}

+ 1 - 9
HAServer/WebServer/DTO/SettingsData.cs

@@ -5,10 +5,6 @@ namespace HAServer.WebServer.DTO {
 	[ExcludeFromCodeCoverage]
 	public class SettingsDto : ISettingsData {
 		public SettingsDto(IApplicationSettingsProvider settingsProvider) {
-			MqttHost = settingsProvider.MqttHost;
-			MqttQos = settingsProvider.MqttQos;
-			MqttRetain = settingsProvider.MqttRetain;
-			MqttBaseTopic = settingsProvider.MqttBaseTopic;
 			WebUiPath = settingsProvider.WebUiPath;
 			WebUiPort = settingsProvider.WebUiPort;
 		}
@@ -16,11 +12,7 @@ namespace HAServer.WebServer.DTO {
 		public SettingsDto() {
 			
 		}
-
-		public string MqttHost { get; set; }
-		public byte MqttQos { get; set; }
-		public bool MqttRetain { get; set; }
-		public string MqttBaseTopic { get; set; }
+		
 		public int WebUiPort { get; set; }
 		public string WebUiPath { get; set; }
 	}

+ 0 - 25
HAServer/WebUI/views/settings.html

@@ -1,31 +1,6 @@
 <div class="cardGroup">
 	<div class="card">
 		<small class="info fullWidth">Changes to settings will apply on a server restart.</small>
-		<h2>MQTT</h2>
-		<table>
-			<tr>
-				<td><label for="mqttServer">Server</label></td>
-				<td><input id="mqttServer" ng-model="settings.MqttHost" /></td>
-			</tr>
-			<tr>
-				<td><label for="mqttQos">QoS</label></td>
-				<td>
-					<select id="mqttQos" ng-model="settings.MqttQos" convert-to-number>
-						<option value="0">At most once</option>
-						<option value="1">At least once</option>
-						<option value="2">Exactly once</option>
-					</select>
-				</td>
-			</tr>
-			<tr>
-				<td><label>Retain</label></td>
-				<td><toggle-switch on="settings.MqttRetain"></toggle-switch></td>
-			</tr>
-			<tr>
-				<td><label for="mqttBaseTopic">Base Topic</label></td>
-				<td><input id="mqttBaseTopic" ng-model="settings.MqttBaseTopic" /></td>
-			</tr>
-		</table>
 		<h2>Web UI</h2>
 		<small class="warning fullWidth">Only edit these settings if you're sure you want to!</small>
 		<table>

+ 1 - 2
HAServer/packages.config

@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="M2Mqtt" version="4.3.0.0" targetFramework="net461" />
   <package id="MediaTypeMap" version="2.1.0.0" targetFramework="net461" />
-  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net452" />
+  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net452" />
   <package id="WebSocketSharp-NonPreRelease" version="1.0.0" targetFramework="net461" />
 </packages>