From 69bfaebcfe9d3e1a6c550d8e1bf770ffa619ab06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Warin?= Date: Mon, 27 Aug 2018 09:55:39 +0200 Subject: [PATCH] Adding the House Mode (Get & Set) --- VeraNet/Objects/VeraHouseMode.cs | 21 +++++++++ VeraNet/Properties/AssemblyInfo.cs | 2 +- VeraNet/VeraController.cs | 69 ++++++++++++++++++++++++------ VeraNet/VeraEventArgs.cs | 26 ++++++++++- VeraNet/VeraNet.csproj | 1 + 5 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 VeraNet/Objects/VeraHouseMode.cs diff --git a/VeraNet/Objects/VeraHouseMode.cs b/VeraNet/Objects/VeraHouseMode.cs new file mode 100644 index 0000000..4f2dd8b --- /dev/null +++ b/VeraNet/Objects/VeraHouseMode.cs @@ -0,0 +1,21 @@ +// ----------------------------------------------------------------------- +// +// Copyright 2018 - Sebastien.warin.fr +// +// Sebastien Warin +// ----------------------------------------------------------------------- + +namespace VeraNet.Objects +{ + /// + /// Represent the House's mode + /// + public enum VeraHouseMode + { + None = 0, + Home = 1, + Away = 2, + Night = 3, + Vacation = 4 + } +} \ No newline at end of file diff --git a/VeraNet/Properties/AssemblyInfo.cs b/VeraNet/Properties/AssemblyInfo.cs index 0580dcd..b371333 100644 --- a/VeraNet/Properties/AssemblyInfo.cs +++ b/VeraNet/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Sebastien.warin.fr")] [assembly: AssemblyProduct("VeraNet")] -[assembly: AssemblyCopyright("Copyright © 2012 Sebastien.warin.fr")] +[assembly: AssemblyCopyright("Copyright © 2012-2018 Sebastien.warin.fr")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/VeraNet/VeraController.cs b/VeraNet/VeraController.cs index 8ba06af..1687c4f 100644 --- a/VeraNet/VeraController.cs +++ b/VeraNet/VeraController.cs @@ -22,6 +22,7 @@ namespace VeraNet /// /// Represent the Vera controller /// + /// public class VeraController : IDisposable { private const int REQUEST_INTERVAL_PAUSE_MS = 100; @@ -53,6 +54,10 @@ public class VeraController : IDisposable /// Occurs when scene is updated. /// public event EventHandler SceneUpdated; + /// + /// Occurs when the house mode is changed. + /// + public event EventHandler HouseModeChanged; /// /// Gets a value indicating whether this controller is listening for changes. @@ -89,28 +94,28 @@ public class VeraController : IDisposable /// /// The Vera serial number. /// - public string SerialNumber { get; set; } + public string SerialNumber { get; private set; } /// /// Gets or sets the Vera device version. /// /// /// The Vera device version. /// - public string Version { get; set; } + public string Version { get; private set; } /// /// Gets or sets the Vera model. /// /// /// The Vera model. /// - public string Model { get; set; } + public string Model { get; private set; } /// /// Gets or sets the temperature unit. /// /// /// The temperature unit. /// - public string TemperatureUnit { get; set; } + public string TemperatureUnit { get; private set; } /// /// Gets or sets the last update. @@ -118,7 +123,7 @@ public class VeraController : IDisposable /// /// The last update. /// - public DateTime LastUpdate { get; set; } + public DateTime LastUpdate { get; private set; } /// /// Gets the current load time. /// @@ -139,14 +144,21 @@ public class VeraController : IDisposable /// /// The state of the current. /// - public VeraState CurrentState { get; set; } + public VeraState CurrentState { get; private set; } /// /// Gets or sets the current comment. /// /// /// The current comment. /// - public string CurrentComment { get; set; } + public string CurrentComment { get; private set; } + /// + /// Gets or sets the house's mode. + /// + /// + /// The house's mode. + /// + public VeraHouseMode HouseMode { get; private set; } /// /// Gets the sections. @@ -312,7 +324,7 @@ public void WaitForFullRequest() throw new Exception("Unable to perform a full request when the listener is running. Call StopListener() before !"); } } - + internal string GetWebResponse(string uri, bool throwException = false) { try @@ -349,6 +361,7 @@ private void RequestVeraWorker() try { this.RequestVera(); + this.RequestHouseMode(); errorCount = 0; Thread.Sleep(REQUEST_INTERVAL_PAUSE_MS); } @@ -370,6 +383,32 @@ private void RequestVeraWorker() } } + /// + /// Requests the current house mode. + /// + /// + public VeraHouseMode RequestHouseMode() + { + VeraHouseMode houseMode = (VeraHouseMode)Convert.ToInt32(this.GetWebResponse(this.ConnectionInfo.ToString() + "/data_request?id=variableget&Variable=Mode")); + if (houseMode != this.HouseMode) + { + var eventArgs = new HouseModeChangedEventArgs { NewMode = houseMode, OldMode = this.HouseMode }; + this.HouseMode = houseMode; + this.HouseModeChanged?.Invoke(this, eventArgs); + } + return houseMode; + } + + /// + /// Sets the house mode. + /// + /// The house mode. + /// + public bool SetHouseMode(VeraHouseMode houseMode) + { + return this.GetWebResponse(this.ConnectionInfo.ToString() + "/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=SetHouseMode&Mode=" + ((int)houseMode).ToString()).Contains("OK"); + } + private void RequestVera() { // Generate URI and get HTTP response content @@ -422,7 +461,7 @@ private void RequestVera() } if (jsonResponse.ContainsKey("state")) { - this.CurrentState = StateUtils.GetStateFromCode(Convert.ToInt32(jsonResponse["state"])); + this.CurrentState = StateUtils.GetStateFromCode(Convert.ToInt32(jsonResponse["state"]));; } if (jsonResponse.ContainsKey("comment")) { @@ -436,6 +475,13 @@ private void RequestVera() { this.CurrentDataVersion = Convert.ToInt64(jsonResponse["dataversion"]); } + if (jsonResponse.ContainsKey("mode")) + { + this.HouseMode = (VeraHouseMode)Convert.ToInt32(jsonResponse["mode"]); + } + + // Update OK + this.LastUpdate = DateTime.Now; // Raise DataReceived event if (this.DataReceived != null) @@ -448,11 +494,8 @@ private void RequestVera() RawData = strResponse }); } - - // Update OK - this.LastUpdate = DateTime.Now; } - + private void LoadVeraObjects(Dictionary jsonValues, string jsonKey, ObservableCollection listToLoad, Func, TObject> createObject = null) where TObject : VeraBaseObject, new() { if (jsonValues.ContainsKey(jsonKey)) diff --git a/VeraNet/VeraEventArgs.cs b/VeraNet/VeraEventArgs.cs index 950e485..63dbb00 100644 --- a/VeraNet/VeraEventArgs.cs +++ b/VeraNet/VeraEventArgs.cs @@ -57,9 +57,31 @@ public SceneUpdatedEventArgs(Scene scene) } /// - /// Provides data when an error occcured. + /// Provides data when the house mode changes /// - public class VeraErrorOccurredEventArgs : EventArgs + /// + public class HouseModeChangedEventArgs : EventArgs + { + /// + /// Gets or sets the new mode. + /// + /// + /// The new mode. + /// + public VeraHouseMode NewMode { get; set; } + /// + /// Gets or sets the old mode. + /// + /// + /// The old mode. + /// + public VeraHouseMode OldMode { get; set; } + } + + /// + /// Provides data when an error occcured. + /// + public class VeraErrorOccurredEventArgs : EventArgs { /// /// Gets or sets the exception. diff --git a/VeraNet/VeraNet.csproj b/VeraNet/VeraNet.csproj index 1720b3d..e8df693 100644 --- a/VeraNet/VeraNet.csproj +++ b/VeraNet/VeraNet.csproj @@ -56,6 +56,7 @@ +