WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


ampoules_connectees_-_philips_hue_et_osram_ligthify

Ceci est une ancienne révision du document !


A PCRE internal error occured. This might be caused by a faulty plugin

====== Philips HUE et OSRAM Lightify ====== ===== OSRAM Lightify ===== ==== Installation ==== ==== FAQ ==== **Connexion au routeur WIFI impossible sous Android ?** J'ai rencontré des problèmes lors de la connexion de la passerelle et ma freebox. Un message m'indiqué toujours que le mot de passe WIFI était erroné. J'ai finalement dû utiliser mon Iphone pour pouvoir configurer la connexion WIFI **Mise à jour impossible de la passerelle ?** Lors de la première connexion à la passerelle, une mise à jour obligatoire est demandée. Cette mise à jour ne se faisait pas chez moi. La mise à jour a finalement fonctionné après avoir déconnecte la passerelle du WIFI de ma freebox et l'avoir reconnecté à mon téléphone utilisé en passerelle internet. La freebox bloque peut être des ports necessaires à la mise à jour. **Mise à jour impossible des ampoules ?** J'ai également rencontré des problèmes pour la mise à jour des ampoules. J'ai finalement utiliser l'application Iphone qui relance la mise à jour automatiquement en cas d’échec et laissé tourner. Au bout de 10ème tentative, l'ampoule a été mise à jour. ** Peut-on configurer une luminosité et un couleur par défaut au démarrage de l'ampoule ?** Oui, il faut pour cela utiliser la passerelle OSRAM et le logiciel OSRAM lightify, aller dans l'écran de réglage de la luminosité et de la couleur et cliquer sur l'interrupteur en haut à droite. L'application proposera d'enregistrer la paramétrage par défaut. Si vous souhaitez par la suite utiliser une passerelle Philips Hue, un reset de l'ampoule sera nécessaire et vous perdrez le paramétrage par défaut. Il n'est pas possible de reparamétrer par la suite avec la passerelle Philips HUE. ==== 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 ===== ==== FAQ ==== **Est-il possible de connecter des ampoules OSRAM Lightify sur une passerelle Philips Hue ?** Oui. Il vous faudra néanmoins un Hub OSRAM Lightify pour effectuer la mise à jour de vos ampoules. **Est-il possible de regler la couleur et la luminosité par défaut sur les ampoules Philips Hue ?** Non. D'après ce que j'ai pu lire, Philipps ne souhaite pas mettre en place cette fonctionnalité pour des questions de sécurité. En cas d'intervention d'un service d'urgence, l'allumage par défaut de l'ampoule doit être au maximum. 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 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 ==== <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>

ampoules_connectees_-_philips_hue_et_osram_ligthify.1520587259.txt.gz · Dernière modification: 2018/03/09 10:20 par 88.164.131.165