using System; using System.Text.RegularExpressions; using BlubbFish.IoT.Zway.Events; using BlubbFish.IoT.Zway.Interfaces; using BlubbFish.IoT.Zway.lib; using LitJson; namespace BlubbFish.IoT.Zway.Devices.CommandClasses.CommandClassSubs { class Thermostatsetpointsub : CommandClassSub { private Single _level; public override event UpdatedValue Update; public Single Level { get { return this._level; } set { if (!this.HasMinMax || (this.HasMinMax && value >= this.TempMin && value <= this.TempMax)) { Single t = (Single)Math.Round(value * 2, MidpointRounding.AwayFromZero) / 2; this.http.GetVoid("ZWave.zway/Run/devices[" + this.DeviceId + "].instances[" + this.Instance + "].commandClasses[" + this.Commandclass + "].Set(" + this.SensorId + "," + t + ")"); } } } public String Scale { get; private set; } public Single TempMax { get; private set; } public Single TempMin { get; private set; } public Boolean HasMinMax { get; private set; } public String Type { get; private set; } public Thermostatsetpointsub(JsonData json, Tuple id, HttpConnection http, Boolean polling) : base(json, id, http, polling) { InitComplex(json); } private void InitComplex(JsonData json) { if (json.Keys.Contains("modeName") && json["modeName"].Keys.Contains("value") && json.Keys.Contains("val") && json["val"].Keys.Contains("value") && json.Keys.Contains("deviceScaleString") && json["deviceScaleString"].Keys.Contains("value")) { this.Type = json["modeName"]["value"].ToString(); this._level = Single.Parse(json["val"]["value"].ToString()); this.Scale = json["deviceScaleString"]["value"].ToString(); } if(json.Keys.Contains("min") && json["min"].Keys.Contains("value") && json.Keys.Contains("max") && json["max"].Keys.Contains("value")) { this.TempMin = Single.Parse(json["min"]["value"].ToString()); this.TempMax = Single.Parse(json["max"]["value"].ToString()); this.HasMinMax = true; } else { this.HasMinMax = false; } } internal override void SetUpdate(JsonData json, Match match) { Boolean ret = false; if (json.Keys.Contains("val") && json["val"].Keys.Contains("value") && json.Keys.Contains("deviceScaleString") && json["deviceScaleString"].Keys.Contains("value") && json.Keys.Contains("modeName") && json["modeName"].Keys.Contains("value")) { this._level = Single.Parse(json["val"]["value"].ToString()); this.Scale = json["deviceScaleString"]["value"].ToString(); this.Type = json["modeName"]["value"].ToString(); ret = true; } if (json.Keys.Contains("min") && json["val"].Keys.Contains("value") && json.Keys.Contains("max") && json["max"].Keys.Contains("value")) { this.TempMin = Single.Parse(json["min"]["value"].ToString()); this.TempMax = Single.Parse(json["max"]["value"].ToString()); this.HasMinMax = true; ret = true; } else { this.HasMinMax = false; } if (ret && this.CheckSetUpdateTime(json)) { this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Type, this.Scale, this.Level, this.TempMin, this.TempMax, this.HasMinMax), this.LastUpdate)); } } public override String ToString() { return "ThermostatSetPoint " + this.Name + " [" + this.Id + "]: " + this.Type + " " + this.Level + "" + this.Scale + " [" + this.TempMin + "," + this.TempMax + "," + this.HasMinMax + "]"; } internal override void Poll() { if (this.Polling) { this.http.GetVoid("ZWave.zway/Run/devices[" + this.DeviceId + "].instances[" + this.Instance + "].commandClasses[" + this.Commandclass + "].Get(" + this.SensorId + ")"); } } } }