diff --git a/ThinkingHome.Plugins.Microclimate/MicroclimatePlugin.cs b/ThinkingHome.Plugins.Microclimate/MicroclimatePlugin.cs index ebbaf3a..5748c82 100644 --- a/ThinkingHome.Plugins.Microclimate/MicroclimatePlugin.cs +++ b/ThinkingHome.Plugins.Microclimate/MicroclimatePlugin.cs @@ -1,11 +1,10 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; -using NHibernate.Hql.Ast.ANTLR; using NHibernate.Linq; +using NHibernate.Mapping.ByCode; using ThinkingHome.Core.Plugins; +using ThinkingHome.Plugins.Listener.Api; +using ThinkingHome.Plugins.Listener.Attributes; using ThinkingHome.Plugins.Microclimate.Model; using ThinkingHome.Plugins.NooLite; @@ -14,11 +13,19 @@ namespace ThinkingHome.Plugins.Microclimate [Plugin] public class MicroclimatePlugin : PluginBase { + public override void InitDbModel(ModelMapper mapper) + { + mapper.Class(cfg => cfg.Table("Microclimate_TemperatureSensor")); + mapper.Class(cfg => cfg.Table("Microclimate_TemperatureData")); + } + [OnMicroclimateDataReceived] public void MicroclimateDataReceived(int channel, decimal temperature, int humidity) { var now = DateTime.Now; + Logger.Debug("microclimate data received: c={0}, t={1}, h={2}", channel, temperature, humidity); + using (var session = Context.OpenSession()) { var sensors = session @@ -26,10 +33,13 @@ public void MicroclimateDataReceived(int channel, decimal temperature, int humid .Where(s => s.Channel == channel) .ToList(); + Logger.Debug("{0} sensors was found", sensors.Count); + foreach (var sensor in sensors) { var data = new TemperatureData { + Id = Guid.NewGuid(), CurrentDate = now, Temperature = Convert.ToInt32(temperature), Humidity = humidity, @@ -42,5 +52,62 @@ public void MicroclimateDataReceived(int channel, decimal temperature, int humid session.Flush(); } } + + #region api + + [HttpCommand("/api/microclimate/sensors/add")] + public object AddSensor(HttpRequestParams request) + { + var channel = request.GetRequiredInt32("channel"); + var displayName = request.GetRequiredString("displayName"); + var showHumidity = request.GetRequiredBool("showHumidity"); + + Logger.Debug("add sensor: channel={0}; displayName={1}; showHumidity={2}", channel, displayName, showHumidity); + + using (var session = Context.OpenSession()) + { + var sensor = new TemperatureSensor + { + Id = Guid.NewGuid(), + Channel = channel, + DisplayName = displayName, + ShowHumidity = showHumidity + }; + + session.Save(sensor); + session.Flush(); + + return sensor.Id; + } + } + + [HttpCommand("/api/microclimate/data")] + public object GetSensorData(HttpRequestParams request) + { + var sensorId = request.GetRequiredGuid("sensorId"); + + using (var session = Context.OpenSession()) + { + var data = session.Query() + .Where(d => d.Sensor.Id == sensorId) + .OrderByDescending(d => d.CurrentDate) + .Take(20) + .ToList(); + + return data.Select(CreateModel).ToList(); + } + } + + private object CreateModel(TemperatureData arg) + { + return new + { + d = arg.CurrentDate, + t = arg.Temperature, + h = arg.Humidity + }; + } + + #endregion } } diff --git a/ThinkingHome.Plugins.Microclimate/ThinkingHome.Plugins.Microclimate.csproj b/ThinkingHome.Plugins.Microclimate/ThinkingHome.Plugins.Microclimate.csproj index 480761e..ec73640 100644 --- a/ThinkingHome.Plugins.Microclimate/ThinkingHome.Plugins.Microclimate.csproj +++ b/ThinkingHome.Plugins.Microclimate/ThinkingHome.Plugins.Microclimate.csproj @@ -39,7 +39,7 @@ False - ..\packages\Iesi.Collections.3.2.0.4000\lib\Net35\Iesi.Collections.dll + ..\packages\Iesi.Collections.4.0.0.4000\lib\net40\Iesi.Collections.dll False @@ -47,7 +47,7 @@ False - ..\packages\NHibernate.3.3.3.4001\lib\Net35\NHibernate.dll + ..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll False @@ -57,21 +57,41 @@ + + + False + ..\packages\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45\System.Net.Http.Formatting.dll + False + + + False + ..\packages\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45\System.Web.Http.dll + False + + + False + ..\packages\Microsoft.AspNet.WebApi.SelfHost.5.0.0\lib\net45\System.Web.Http.SelfHost.dll + False + - ..\packages\ThinkingHome.Core.Plugins.2.0.0.72\lib\net45\ThinkingHome.Core.Plugins.dll + ..\packages\ThinkingHome.Core.Plugins.2.0.0.74\lib\net45\ThinkingHome.Core.Plugins.dll False ..\packages\NooLiteDotNet.2.0.0.0\lib\net40\ThinkingHome.NooLite.dll False + + ..\packages\ThinkingHome.Plugins.Listener.2.0.0.74\lib\net45\ThinkingHome.Plugins.Listener.dll + False + - ..\packages\ThinkingHome.Plugins.NooLite.2.0.0.73\lib\net45\ThinkingHome.Plugins.NooLite.dll + ..\packages\ThinkingHome.Plugins.NooLite.2.0.0.74\lib\net45\ThinkingHome.Plugins.NooLite.dll False diff --git a/ThinkingHome.Plugins.Microclimate/packages.config b/ThinkingHome.Plugins.Microclimate/packages.config index 22a4da7..c46e14c 100644 --- a/ThinkingHome.Plugins.Microclimate/packages.config +++ b/ThinkingHome.Plugins.Microclimate/packages.config @@ -1,11 +1,15 @@  - + + + + - + - - + + + \ No newline at end of file