Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
ampoules_connectees_-_philips_hue_et_osram_ligthify [2016/11/12 00:14] 88.164.131.165 [FAQ] |
ampoules_connectees_-_philips_hue_et_osram_ligthify [2018/03/09 10:24] 88.164.131.165 [Récupération de la liste des ampoules] |
||
---|---|---|---|
Ligne 30: | Ligne 30: | ||
==== Exemple application C# ==== | ==== Exemple application C# ==== | ||
- | + | La documentation de l'API : https://eu.lightify-api.org/ | |
+ | Inspiré du code : https://github.com/patrick-dmxc/OsramLightify/blob/master/OsramLightify/Osram/Lightify/OsramController.cs | ||
+ | Class pour le decodage JSON : http://www.newtonsoft.com/json | ||
+ | |||
+ | === Récupération d'un ticket === | ||
+ | <code csharp |Ticket> | ||
+ | //Le Token n'est valable que 15mn | ||
+ | //user : le nom d'utilisateur de votre compte Osram | ||
+ | //pass : votre mot de pass .... | ||
+ | //serialnum : Le numéro de série qui apparait sur la passerelle OSR0xxxxxxx (Ne pas indiquer ce qui trouve apres le "-" | ||
+ | OsramToken token = OsramController.GetOsramToken("user", "pass", "serialnum"); | ||
+ | |||
+ | textBoxToken.Text = token.securityToken; | ||
+ | textBoxUserID.Text = token.userId; | ||
+ | </code> | ||
+ | |||
+ | <code csharp |Class OsramToken> | ||
+ | public class OsramToken | ||
+ | { | ||
+ | public string userId { get; set; } | ||
+ | public string securityToken { get; set; } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <code csharp |Class OsramController> | ||
+ | public class OsramController | ||
+ | { | ||
+ | public static OsramToken GetOsramToken(string username, string password, string serialNumber) | ||
+ | { | ||
+ | string payload = "{\"username\" : \"" + username + "\",\"password\" : \"" + password + "\",\"serialNumber\" : \"" + serialNumber + "\"}"; | ||
+ | string url = "https://eu.lightify-api.org/lightify/services/session"; | ||
+ | var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); | ||
+ | httpWebRequest.UserAgent = "Lightify/1.0.5 CFNetwork/711.1.16 Darwin/14.0.0"; | ||
+ | httpWebRequest.Method = "POST"; | ||
+ | httpWebRequest.ContentType = "application/json"; | ||
+ | |||
+ | using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) | ||
+ | { | ||
+ | |||
+ | |||
+ | streamWriter.Write(payload); | ||
+ | streamWriter.Flush(); | ||
+ | streamWriter.Close(); | ||
+ | } | ||
+ | OsramToken os = new OsramToken(); | ||
+ | var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); | ||
+ | using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) | ||
+ | { | ||
+ | var result = streamReader.ReadToEnd(); | ||
+ | os = JsonConvert.DeserializeObject<OsramToken>(result); | ||
+ | |||
+ | } | ||
+ | |||
+ | return os; | ||
+ | } | ||
+ | |||
+ | public static List<OsramDevice> GetDevicesList(string token) | ||
+ | { | ||
+ | List<OsramDevice> Devices = new List<OsramDevice>(); | ||
+ | |||
+ | string url = "https://eu.lightify-api.org/lightify/services/devices"; | ||
+ | var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); | ||
+ | httpWebRequest.UserAgent = "Lightify/1.0.5 CFNetwork/711.1.16 Darwin/14.0.0"; | ||
+ | httpWebRequest.Method = "GET"; | ||
+ | httpWebRequest.ContentType = "application/json"; | ||
+ | httpWebRequest.Headers.Add("authorization",token); | ||
+ | |||
+ | var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); | ||
+ | using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) | ||
+ | { | ||
+ | var result = streamReader.ReadToEnd(); | ||
+ | Devices = JsonConvert.DeserializeObject<List<OsramDevice>>(result); | ||
+ | } | ||
+ | |||
+ | return Devices; | ||
+ | } | ||
+ | |||
+ | public static string SenCommand(string token, string cmd) | ||
+ | { | ||
+ | string result = ""; | ||
+ | |||
+ | string url = "https://eu.lightify-api.org/lightify/services/"+cmd; | ||
+ | var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); | ||
+ | httpWebRequest.UserAgent = "Lightify/1.0.5 CFNetwork/711.1.16 Darwin/14.0.0"; | ||
+ | httpWebRequest.Method = "GET"; | ||
+ | httpWebRequest.ContentType = "application/json"; | ||
+ | httpWebRequest.Headers.Add("authorization", token); | ||
+ | |||
+ | var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); | ||
+ | using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) | ||
+ | { | ||
+ | result = streamReader.ReadToEnd(); | ||
+ | } | ||
+ | |||
+ | return result; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === Récupération de la liste des équipements === | ||
+ | |||
+ | <code csharp |Devices> | ||
+ | List<OsramDevice> Devices = OsramController.GetDevicesList(textBoxToken.Text); | ||
+ | </code> | ||
+ | |||
+ | <code csharp |Class Devices> | ||
+ | public class OsramDevice | ||
+ | { | ||
+ | public int deviceId { get; set; } | ||
+ | public string deviceType { get; set; } | ||
+ | public string manufacturer { get; set; } | ||
+ | public string modelName { get; set; } | ||
+ | public string name { get; set; } | ||
+ | public List<int> groupList { get; set; } | ||
+ | public List<string> bmpClusters { get; set; } | ||
+ | public bool online { get; set; } | ||
+ | public bool on { get; set; } | ||
+ | public float brightnessLevel { get; set; } | ||
+ | public float hue { get; set; } | ||
+ | public float saturation { get; set; } | ||
+ | public int temperature { get; set; } | ||
+ | public string firmwareVersion { get; set; } | ||
+ | public string color { get; set; } | ||
+ | |||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === Envoi de commandes à un équipement === | ||
+ | Toutes les commandes doivent faire référence à un ID d'équipement récupéré avec la liste des devices | ||
+ | |||
+ | <code csharp |Class Devices> | ||
+ | private void buttonTurnOff_Click(object sender, EventArgs e) | ||
+ | { | ||
+ | string result = OsramController.SenCommand(textBoxToken.Text, "device/set?idx=" + textBoxDeviceID.Text + "&time=" + numericUpDownTime.Value.ToString() + "&onoff=0"); | ||
+ | } | ||
+ | |||
+ | private void buttonTurnOn_Click(object sender, EventArgs e) | ||
+ | { | ||
+ | string result = OsramController.SenCommand(textBoxToken.Text, "device/set?idx=" + textBoxDeviceID.Text + "&level=" + (numericUpDownLevel.Value / 100).ToString().Replace(",", ".") + "&time=" + numericUpDownTime.Value.ToString() + "&onoff=1"); | ||
+ | } | ||
+ | |||
+ | private void buttonChangeColor_Click(object sender, EventArgs e) | ||
+ | { | ||
+ | string color = labelColor.Text.Replace("#", ""); | ||
+ | string result = OsramController.SenCommand(textBoxToken.Text, "device/set?idx=" + textBoxDeviceID.Text + "&time=" + numericUpDownTime.Value.ToString() + "&color="+labelColor.Text.Replace("#","")); | ||
+ | } | ||
+ | |||
+ | private void buttonChangeLevel_Click(object sender, EventArgs e) | ||
+ | { | ||
+ | string result = OsramController.SenCommand(textBoxToken.Text, "device/set?idx=" + textBoxDeviceID.Text + "&level=" + (numericUpDownLevel.Value / 100).ToString().Replace(",", ".") + "&time=" + numericUpDownTime.Value.ToString()); | ||
+ | } | ||
+ | |||
+ | private void buttonChangeTemperature_Click(object sender, EventArgs e) | ||
+ | { | ||
+ | string result = OsramController.SenCommand(textBoxToken.Text, "device/set?idx=" + textBoxDeviceID.Text + "&time=" + numericUpDownTime.Value.ToString() + "&ctemp="+numericUpDownTemperature.Value.ToString()); | ||
+ | |||
+ | } | ||
+ | </code> | ||
+ | {{::osram_lightify_csharp.jpg?700|}} | ||
===== Philips HUE ===== | ===== Philips HUE ===== | ||
Ligne 48: | Ligne 206: | ||
OSRAM a intégré cette possibilité sur sa gamme ligthify avec un simple message d'avertissement indiquant qu'il n'est pas conseillé d'avoir une luminosité inférieure à 20% | OSRAM a intégré cette possibilité sur sa gamme ligthify avec un simple message d'avertissement indiquant qu'il n'est pas conseillé d'avoir une luminosité inférieure à 20% | ||
+ | === Exemple application C# === | ||
+ | |||
+ | == Récupération de la liste des ampoules == | ||
+ | <code code csharp |HueDevice> | ||
+ | public class HueDevice | ||
+ | { | ||
+ | public int deviceId { get; set; } | ||
+ | public string deviceType { get; set; } | ||
+ | public string name { get; set; } | ||
+ | public bool online { get; set; } | ||
+ | public int bri { get; set; } | ||
+ | public string alert { get; set; } | ||
+ | public bool reachable { get; set; } | ||
+ | public string type { get; set; } | ||
+ | public string modelid { get; set; } | ||
+ | public string manufacturername { get; set; } | ||
+ | public string uniqueid { get; set; } | ||
+ | public string swversion { get; set; } | ||
+ | } | ||
+ | </code> | ||
+ | <code csharp> | ||
+ | public List<HueDevice> GetDevicesList() | ||
+ | { | ||
+ | Devices = new List<HueDevice>(); | ||
+ | |||
+ | string url = @"http://" + ip + "/api/" + username + "/lights"; | ||
+ | var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); | ||
+ | httpWebRequest.Method = "GET"; | ||
+ | httpWebRequest.ContentType = "application/json"; | ||
+ | var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); | ||
+ | using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) | ||
+ | { | ||
+ | var result = streamReader.ReadToEnd(); | ||
+ | dynamic response = JsonConvert.DeserializeObject(result); | ||
+ | |||
+ | foreach (var item in response) | ||
+ | { | ||
+ | string id = item.Name; | ||
+ | bool on = false; | ||
+ | int bri = 0; | ||
+ | string alert = ""; | ||
+ | bool reachable = false; | ||
+ | string type = ""; | ||
+ | string name = ""; | ||
+ | string modelid = ""; | ||
+ | string manufacturername = ""; | ||
+ | string uniqueid= ""; | ||
+ | string swversion= ""; | ||
+ | foreach (var parameters in item) | ||
+ | { | ||
+ | if (parameters.state != null) | ||
+ | { | ||
+ | if (parameters.state.on != null) | ||
+ | on = (bool)parameters.state.on; | ||
+ | if (parameters.state.bri != null) | ||
+ | bri = (int)parameters.state.bri; | ||
+ | if (parameters.state.none != null) | ||
+ | alert = (string)parameters.state.alert; | ||
+ | if (parameters.state.reachable != null) | ||
+ | reachable = (bool)parameters.state.reachable; | ||
+ | } | ||
+ | |||
+ | if (parameters.type != null) | ||
+ | type = (string)parameters.type; | ||
+ | if (parameters.name != null) | ||
+ | name = (string)parameters.name; | ||
+ | if (parameters.modelid != null) | ||
+ | modelid = (string)parameters.modelid; | ||
+ | if (parameters.manufacturername != null) | ||
+ | manufacturername = (string)parameters.manufacturername; | ||
+ | if (parameters.uniqueid != null) | ||
+ | uniqueid = (string)parameters.uniqueid; | ||
+ | if (parameters.swversion != null) | ||
+ | swversion = (string)parameters.swversion; | ||
+ | } | ||
+ | |||
+ | Hue.HueDevice Lumiere = new HueDevice(); | ||
+ | Lumiere.deviceId = Convert.ToInt32(id); | ||
+ | Lumiere.name = name; | ||
+ | Lumiere.online = reachable; | ||
+ | Lumiere.bri = bri; | ||
+ | Lumiere.alert = alert; | ||
+ | Lumiere.reachable = reachable; | ||
+ | Lumiere.type = type; | ||
+ | Lumiere.modelid = modelid; | ||
+ | Lumiere.manufacturername = manufacturername; | ||
+ | Lumiere.uniqueid = uniqueid; | ||
+ | Lumiere.swversion = swversion; | ||
+ | |||
+ | Devices.Add(Lumiere); | ||
+ | } | ||
+ | return Devices; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | ==Allume ou éteint une ampoule == | ||
+ | <code csharp> | ||
+ | /// <summary> | ||
+ | /// Allume ou éteint l'ampoule avec l'id spécifié | ||
+ | /// </summary> | ||
+ | /// <param name="id"></param> | ||
+ | /// <param name="state"></param> | ||
+ | internal bool SetState(string id, int state) | ||
+ | { | ||
+ | try | ||
+ | { | ||
+ | string data; | ||
+ | if (state == 1) | ||
+ | data = "{ \"on\":true}"; | ||
+ | else | ||
+ | data = "{ \"on\":false}"; | ||
+ | |||
+ | byte[] bytes; | ||
+ | bytes = System.Text.Encoding.UTF8.GetBytes(data); | ||
+ | string url = @"http://" + ip + "/api/" + username + "/lights/" + id + "/state"; | ||
+ | var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); | ||
+ | httpWebRequest.Method = "PUT"; | ||
+ | httpWebRequest.ContentType = "application/json"; | ||
+ | httpWebRequest.ContentLength = bytes.Length; | ||
+ | Stream requestStream = httpWebRequest.GetRequestStream(); | ||
+ | requestStream.Write(bytes, 0, bytes.Length); | ||
+ | requestStream.Close(); | ||
+ | |||
+ | var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); | ||
+ | using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) | ||
+ | { | ||
+ | var result = streamReader.ReadToEnd(); | ||
+ | dynamic response = JsonConvert.DeserializeObject(result); | ||
+ | } | ||
+ | } | ||
+ | catch (Exception ex) | ||
+ | { | ||
+ | return false; | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
+ | </code> |