[#3] How to read Sensors | Philips Hue - C# Programming
How to read Sensors
Previous Post
In the last tutorial, I showed how to control the lights.
You can find it here: [#2] How to control Hue Lights | Philips Hue - C# Programming
Sensors
You will find a lot more than lights in the Philips Hue System, called sensors. This tutorial is limited to the Hue Motion Sensor and Hue Dimmer Switch because I don't own a Hue Tap Switch. I will focus on the motion sensor which has a built-in temperature sensor. I will show how to get the sensor data, parse it into an object and show the temperature.
Lets create the sensor template:
private const string SensorUrlTemplate = "http://{0}/api/{1}/{2}";
Now use the GetRequestToBridge from the last Tutorial:
string result = GetRequestToBridge(string.Format(SensorUrlTemplate, BridgeIP, Usercode, "sensors"));
As result, you will get all sensors from your hue system formatted as JSON. Every sensor has different properties so it's a little bit hard to parse this JSON. I created a helper class for parsing (http://json2csharp.com/) and modified it:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using HueTestForms.Enumerations;
namespace HueTestForms.Helpers
{
public partial class SensorHelper
{
public string ID { get; internal set; }
public SensorTypes SensorType { get; set; }
[JsonProperty("state")]
public SensorHelperHelperState State { get; set; }
[JsonProperty("config")]
public SensorHelperHelperConfig Config { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("type")]
public SensorTypes Type { get; set; }
[JsonProperty("modelid")]
public string Modelid { get; set; }
[JsonProperty("manufacturername")]
public string Manufacturername { get; set; }
[JsonProperty("swversion")]
public string Swversion { get; set; }
[JsonProperty("uniqueid")]
public string Uniqueid { get; set; }
[JsonProperty("recycle")]
public bool Recycle { get; set; }
[JsonProperty("swupdate")]
public SensorHelperHelperSwupdate Swupdate { get; set; }
}
public partial class SensorHelperHelperConfig
{
[JsonProperty("on")]
public bool On { get; set; }
[JsonProperty("configured")]
public bool Configured { get; set; }
[JsonProperty("sunriseoffset")]
public long Sunriseoffset { get; set; }
[JsonProperty("sunsetoffset")]
public long Sunsetoffset { get; set; }
[JsonProperty("reachable")]
public bool Reachable { get; set; }
[JsonProperty("battery")]
public long Battery { get; set; }
[JsonProperty("pending")]
public List<object> Pending { get; set; }
[JsonProperty("flag")]
public bool Flag { get; set; }
[JsonProperty("alert")]
public string Alert { get; set; }
[JsonProperty("ledindication")]
public bool Ledindication { get; set; }
[JsonProperty("usertest")]
public bool Usertest { get; set; }
[JsonProperty("sensitivity")]
public long? Sensitivity { get; set; }
[JsonProperty("sensitivitymax")]
public long? Sensitivitymax { get; set; }
[JsonProperty("tholddark")]
public long? Tholddark { get; set; }
[JsonProperty("tholdoffset")]
public long? Tholdoffset { get; set; }
}
public partial class SensorHelperHelperState
{
[JsonProperty("daylight")]
public object Daylight { get; set; }
[JsonProperty("lastupdated")]
public string Lastupdated { get; set; }
[JsonProperty("status")]
public long Status { get; set; }
[JsonProperty("buttonevent")]
public long Buttonevent { get; set; }
[JsonProperty("temperature")]
public double Temperature { get; set; }
[JsonProperty("presence")]
public bool Presence { get; set; }
[JsonProperty("lightlevel")]
public long Lightlevel { get; set; }
[JsonProperty("dark")]
public bool Dark { get; set; }
}
public partial class SensorHelperHelperSwupdate
{
[JsonProperty("state")]
public string State { get; set; }
[JsonProperty("lastinstall")]
public object Lastinstall { get; set; }
}
public static class SensorHelperHelperSerialize
{
public static string ToJson(this SensorHelper self) => JsonConvert.SerializeObject(self, SensorHelperHelperConverter.Settings);
}
public class SensorHelperHelperConverter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
};
}
}
As I mentioned in the beginning, I don't own a Hue tap switch so maybe the parsing will fail if you own one.
For the Type I added an enum:
public enum SensorTypes
{
Daylight,
CLIPGenericFlag,
ZLLSwitch,
CLIPGenericStatus,
ZLLTemperature,
ZLLPresence,
ZLLLightLevel,
}
For parsing:
public partial class SensorHelper
{
public static List<SensorHelper> FromJson(string json)
{
var dict = JsonConvert.DeserializeObject<Dictionary<string, SensorHelper>>(json, SensorHelperHelperConverter.Settings);
var result = new List<SensorHelper>();
foreach (var item in dict)
{
item.Value.ID = item.Key;
result.Add(item.Value);
}
return result;
}
}
I deserialize it to a dictonary>string, Sensorhelper> to keep the ID as Key. Afterwards I create a List of SensorHelper and add the ID to every object. I do this to have the ID in the object and don't have to handle with a dictonary.
Now it's easy to get the Temperature:
SensorList.Where(s => s.State.Temperature != 0).First().State.Temperature;
The temperature is stored as int so you have to add the comma!
If you have any questions do not hesitate to contact me per comment 😃
Geggi632
Leave [#3] How to read Sensors | Philips Hue - C# Programming to:
Read more #programming posts
Best Posts From Geggi632
We have not curated any of geggi632's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From Geggi632
- Angular Tutorial - building an InputMask directive [1/*]
- [#1] Learn how to Code - C# Beginner Tutorial
- [#3] How to read Sensors | Philips Hue - C# Programming
- [#2] Coffee Shop - Facility - Concept creation with the Steemit community!
- [#1] Coffee Shop - Concept creation with the Steem
- Elon Musk - Flamethrower
- [#2] How to control Hue Lights | Philips Hue - C# Programming
- [#1] How to connect to Hue Bridge | Philips Hue - C# Programming
- Upper Austria - Gmunden - photo series
- Bee on Lavender - Macro Shot [HQ]