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:24] 88.164.131.165 [Exemple application C#] |
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 31: | Ligne 31: | ||
La documentation de l'API : https://eu.lightify-api.org/ | 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 === | === Récupération d'un ticket === | ||
Ligne 154: | Ligne 156: | ||
} | } | ||
</code> | </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 170: | 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> |