Skip to content

Commit

Permalink
- db mapping;
Browse files Browse the repository at this point in the history
- simple http api;
  • Loading branch information
dima117 committed Oct 12, 2014
1 parent 9323e64 commit 7f16f81
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 12 deletions.
75 changes: 71 additions & 4 deletions 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;

Expand All @@ -14,22 +13,33 @@ namespace ThinkingHome.Plugins.Microclimate
[Plugin]
public class MicroclimatePlugin : PluginBase
{
public override void InitDbModel(ModelMapper mapper)
{
mapper.Class<TemperatureSensor>(cfg => cfg.Table("Microclimate_TemperatureSensor"));
mapper.Class<TemperatureData>(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
.Query<TemperatureSensor>()
.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,
Expand All @@ -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<TemperatureData>()
.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
}
}
Expand Up @@ -39,15 +39,15 @@
<Private>False</Private>
</Reference>
<Reference Include="Iesi.Collections">
<HintPath>..\packages\Iesi.Collections.3.2.0.4000\lib\Net35\Iesi.Collections.dll</HintPath>
<HintPath>..\packages\Iesi.Collections.4.0.0.4000\lib\net40\Iesi.Collections.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="NHibernate">
<HintPath>..\packages\NHibernate.3.3.3.4001\lib\Net35\NHibernate.dll</HintPath>
<HintPath>..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="NLog">
Expand All @@ -57,21 +57,41 @@
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Formatting, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45\System.Net.Http.Formatting.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45\System.Web.Http.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Web.Http.SelfHost, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.SelfHost.5.0.0\lib\net45\System.Web.Http.SelfHost.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="ThinkingHome.Core.Plugins">
<HintPath>..\packages\ThinkingHome.Core.Plugins.2.0.0.72\lib\net45\ThinkingHome.Core.Plugins.dll</HintPath>
<HintPath>..\packages\ThinkingHome.Core.Plugins.2.0.0.74\lib\net45\ThinkingHome.Core.Plugins.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="ThinkingHome.NooLite">
<HintPath>..\packages\NooLiteDotNet.2.0.0.0\lib\net40\ThinkingHome.NooLite.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="ThinkingHome.Plugins.Listener">
<HintPath>..\packages\ThinkingHome.Plugins.Listener.2.0.0.74\lib\net45\ThinkingHome.Plugins.Listener.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="ThinkingHome.Plugins.NooLite">
<HintPath>..\packages\ThinkingHome.Plugins.NooLite.2.0.0.73\lib\net45\ThinkingHome.Plugins.NooLite.dll</HintPath>
<HintPath>..\packages\ThinkingHome.Plugins.NooLite.2.0.0.74\lib\net45\ThinkingHome.Plugins.NooLite.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
Expand Down
12 changes: 8 additions & 4 deletions ThinkingHome.Plugins.Microclimate/packages.config
@@ -1,11 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ECM7Migrator" version="2.8.0.0" targetFramework="net45" />
<package id="Iesi.Collections" version="3.2.0.4000" targetFramework="net45" />
<package id="Iesi.Collections" version="4.0.0.4000" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.SelfHost" version="5.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
<package id="NHibernate" version="3.3.3.4001" targetFramework="net45" />
<package id="NHibernate" version="4.0.1.4000" targetFramework="net45" />
<package id="NLog" version="2.0.1.2" targetFramework="net45" />
<package id="NooLiteDotNet" version="2.0.0.0" targetFramework="net45" />
<package id="ThinkingHome.Core.Plugins" version="2.0.0.72" targetFramework="net45" />
<package id="ThinkingHome.Plugins.NooLite" version="2.0.0.73" targetFramework="net45" />
<package id="ThinkingHome.Core.Plugins" version="2.0.0.74" targetFramework="net45" />
<package id="ThinkingHome.Plugins.Listener" version="2.0.0.74" targetFramework="net45" />
<package id="ThinkingHome.Plugins.NooLite" version="2.0.0.74" targetFramework="net45" />
</packages>

0 comments on commit 7f16f81

Please sign in to comment.