WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


ampoules_connectees_-_philips_hue_et_osram_ligthify

Philips HUE et OSRAM Lightify

Comparatif

Philips Hue

Avantages Inconvénients
Fiable Coût
API forme de l'ampoule
Les équipements associés (1)

(1) Philips propose un super petit capteur de présence qui intégré plusieurs capteurs (Présence, lumière et température) et dont les valeurs peuvent être récupéré directement via l'API. Il est donc possible de se faire un système d'alarme (Détection de présence) ou mesurer la température de chaque pièce.

OSRAM Lightify

Avantages Inconvénients
Coût Installation laborieuse / Bug d'association avec l'application Android ou IOS
API Fiabilité / Une ampoule HS après 1 an d'utilisation
Possibilité de mémoriser un réglage par défaut (1)

(1) Il est possible de programmer un réglage par défaut de chaque ampoule. Les ampoules sont souvent branchées sur des interrupteurs classiques. Donc dès qu'on appuie sur l'interrupteur, l'ampoule redémarre à 0 et l'ancien état n'est pas mémoriser. L’intérêt de ce paramétrage c'est qu'on peut définir un réglage par défaut et définir une luminosité faible pour une chambre et ainsi éviter l'éblouissement quand on se lève la nuit.

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#

Récupération d'un ticket

|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;
|Class OsramToken
    public class OsramToken
    {
        public string userId { get; set; }
        public string securityToken { get; set; }
    }
|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;
        }
    }

Récupération de la liste des équipements

|Devices
List<OsramDevice> Devices = OsramController.GetDevicesList(textBoxToken.Text);
|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; }
 
    }

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

|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());
 
        }

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
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; }
    }
        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;
            }
        }
Allume ou éteint une ampoule
        /// <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;
        }
ampoules_connectees_-_philips_hue_et_osram_ligthify.txt · Dernière modification: 2018/03/09 10:40 par 88.164.131.165