Bonjour c’est encore moi,
J’ai créé un package pour la partie “scénario” de mon installation. Grosso modo au lancement je souscris à différent package et grâce à “PackageHost.StateObjectUpdated += (s, e) =>” je lance des actions selon les données mises à jour.
Dans une de ses actions, je veux récupérer un state object. Du coup j’ai rajouté naïvement :
PackageHost.StateObjectUpdated += (s, e) => { PackageHost.WriteInfo("{0}", e.StateObject.Value); }; PackageHost.RequestStateObjects(package: "Brain", name: Sujet);
Sauf que bien sûr ce code se met à jour quand les souscriptions du début sont utilisées. Du coup comment récupérer des states objects quand on a déjà des souscriptions en cours ?
Voici un bout de mon code :
PackageHost.StateObjectUpdated += (s, e) => { if (e.StateObject.PackageName == "Chambre-Sensor") { if(e.StateObject.Name == "Temperature") { PackageHost.CreateMessageProxy("Mysql").Insert("Temperature" as System.String, "'','" + e.StateObject.Value + "','2',NULL" as System.String); }else if(e.StateObject.Name == "Humidity") { PackageHost.CreateMessageProxy("Mysql").Insert("Humidity" as System.String, "'','" + e.StateObject.Value + "','2',NULL" as System.String); } else { PackageHost.CreateMessageProxy("Mysql").Insert("Luminosity" as System.String, "'','" + e.StateObject.DynamicValue.Lux + "','" + e.StateObject.DynamicValue.Broadband + "','" + e.StateObject.DynamicValue.IR + "','2',NULL" as System.String); } }else if (e.StateObject.PackageName == "Salon-Sensor") { if (e.StateObject.Name == "Temperature") { PackageHost.CreateMessageProxy("Mysql").Insert("Temperature" as System.String, "'','" + e.StateObject.Value + "','1',NULL" as System.String); } else if (e.StateObject.Name == "Humidity") { PackageHost.CreateMessageProxy("Mysql").Insert("Humidity" as System.String, "'','" + e.StateObject.Value + "','1',NULL" as System.String); } else { PackageHost.CreateMessageProxy("Mysql").Insert("Luminosity" as System.String, "'','" + e.StateObject.DynamicValue.Lux + "','" + e.StateObject.DynamicValue.Broadband + "','" + e.StateObject.DynamicValue.IR + "','1',NULL" as System.String); } } else if(e.StateObject.PackageName == "Cuisine-Sensor") { if (e.StateObject.Name == "Temperature") { PackageHost.CreateMessageProxy("Mysql").Insert("Temperature" as System.String, "'','" + e.StateObject.Value + "','3',NULL" as System.String); } else if (e.StateObject.Name == "Humidity") { PackageHost.CreateMessageProxy("Mysql").Insert("Humidity" as System.String, "'','" + e.StateObject.Value + "','3',NULL" as System.String); } else { PackageHost.CreateMessageProxy("Mysql").Insert("Luminosity" as System.String, "'','" + e.StateObject.DynamicValue.Lux + "','" + e.StateObject.DynamicValue.Broadband + "','" + e.StateObject.DynamicValue.IR + "','3',NULL" as System.String); } } else { foreach (dynamic hw in this.Email) { DateTime myDate1 = hw.Start; DateTime myDate2 = DateTime.Now; TimeSpan ts = myDate1 - myDate2; string Sujet = hw.Subject; PackageHost.StateObjectUpdated += (s1, e1) => { PackageHost.WriteInfo("{0}", e1.StateObject.Value); }; PackageHost.RequestStateObjects(package: "Brain", name: Sujet); Traffic(Sujet,hw.Location,ts.TotalMinutes); } } }; PackageHost.SubscribeStateObjects(sentinel: "ESP8266"); PackageHost.SubscribeStateObjects(package: "Exchange");
Merci, en espérant que j’ai bien expliqué.