From 06e57c4559661c136d1c4929208324f9f2844b7b Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Tue, 5 Dec 2017 23:10:52 +0000 Subject: [PATCH] [NF] Now possible to emulate F4G --- Zway/Devices/CommandClasses/Battery.cs | 2 +- Zway/Devices/CommandClasses/CentralScene.cs | 2 +- .../CommandClassSubs/Configurationsub.cs | 2 +- .../CommandClassSubs/MeterSub.cs | 2 +- .../CommandClassSubs/SensorMultilevelSub.cs | 2 +- .../CommandClassSubs/ThermostatSetPointSub.cs | 2 +- Zway/Devices/CommandClasses/Configuration.cs | 2 +- Zway/Devices/CommandClasses/Indicator.cs | 2 +- Zway/Devices/CommandClasses/Meter.cs | 2 +- .../CommandClasses/SensorMultilevel.cs | 2 +- Zway/Devices/CommandClasses/SwitchBinary.cs | 2 +- .../CommandClasses/SwitchMultilevel.cs | 2 +- Zway/Devices/CommandClasses/ThermostatMode.cs | 2 +- .../CommandClasses/ThermostatSetPoint.cs | 2 +- Zway/Devices/CommandClasses/Wakeup.cs | 2 +- Zway/Devices/Device.cs | 2 +- Zway/Devices/Instance.cs | 2 +- Zway/Events/DeviceUpdateEvent.cs | 22 ++++++++++++------ Zway/bin/Release/Zway.dll | Bin 48128 -> 48640 bytes 19 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Zway/Devices/CommandClasses/Battery.cs b/Zway/Devices/CommandClasses/Battery.cs index 9b18f83..54fb186 100644 --- a/Zway/Devices/CommandClasses/Battery.cs +++ b/Zway/Devices/CommandClasses/Battery.cs @@ -37,7 +37,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { Helper.WriteError("Kenne in "+this.Name+" ["+this.Id+"] "+ match.Groups[4].Value+" nicht!"); } if (success && this.CheckSetUpdateTime(json)) { - this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate, this)); } } diff --git a/Zway/Devices/CommandClasses/CentralScene.cs b/Zway/Devices/CommandClasses/CentralScene.cs index 74eea93..15535a3 100644 --- a/Zway/Devices/CommandClasses/CentralScene.cs +++ b/Zway/Devices/CommandClasses/CentralScene.cs @@ -31,7 +31,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { } else if (match.Groups[4].Value == ".data.keyAttribute") { if (json.Keys.Contains("value") && this.CheckSetUpdateTime(json)) { this.Key = Int32.Parse(json["value"].ToString()); - this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Scene, this.Key), this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Scene, this.Key), this.LastUpdate, this)); } } else { Helper.WriteError("Kenne in " + this.Name + " [" + this.Id + "] " + match.Groups[4].Value + " nicht!"); diff --git a/Zway/Devices/CommandClasses/CommandClassSubs/Configurationsub.cs b/Zway/Devices/CommandClasses/CommandClassSubs/Configurationsub.cs index b91b3d8..022f1f7 100644 --- a/Zway/Devices/CommandClasses/CommandClassSubs/Configurationsub.cs +++ b/Zway/Devices/CommandClasses/CommandClassSubs/Configurationsub.cs @@ -54,7 +54,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses.CommandClassSubs { this.CheckSetUpdateTime(json)) { this._level = Int64.Parse(json["val"]["value"].ToString()); this.Size = Int32.Parse(json["size"]["value"].ToString()); - this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Level, this.Size), this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Level, this.Size), this.LastUpdate, this)); } } diff --git a/Zway/Devices/CommandClasses/CommandClassSubs/MeterSub.cs b/Zway/Devices/CommandClasses/CommandClassSubs/MeterSub.cs index bfd0c0a..3527205 100644 --- a/Zway/Devices/CommandClasses/CommandClassSubs/MeterSub.cs +++ b/Zway/Devices/CommandClasses/CommandClassSubs/MeterSub.cs @@ -41,7 +41,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses.CommandClassSubs { this.Level = Single.Parse(json["val"]["value"].ToString()); this.Type = json["sensorTypeString"]["value"].ToString(); this.Scale = json["scaleString"]["value"].ToString(); - this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Type, this.Scale, this.Level), this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Type, this.Scale, this.Level), this.LastUpdate, this)); } } diff --git a/Zway/Devices/CommandClasses/CommandClassSubs/SensorMultilevelSub.cs b/Zway/Devices/CommandClasses/CommandClassSubs/SensorMultilevelSub.cs index e7b9a31..3aaa04a 100644 --- a/Zway/Devices/CommandClasses/CommandClassSubs/SensorMultilevelSub.cs +++ b/Zway/Devices/CommandClasses/CommandClassSubs/SensorMultilevelSub.cs @@ -37,7 +37,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses.CommandClassSubs { this.Level = Single.Parse(json["val"]["value"].ToString()); this.Type = json["sensorTypeString"]["value"].ToString(); this.Scale = json["scaleString"]["value"].ToString(); - this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Type, this.Scale, this.Level), this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Type, this.Scale, this.Level), this.LastUpdate, this)); } } diff --git a/Zway/Devices/CommandClasses/CommandClassSubs/ThermostatSetPointSub.cs b/Zway/Devices/CommandClasses/CommandClassSubs/ThermostatSetPointSub.cs index 7b1dc41..5702100 100644 --- a/Zway/Devices/CommandClasses/CommandClassSubs/ThermostatSetPointSub.cs +++ b/Zway/Devices/CommandClasses/CommandClassSubs/ThermostatSetPointSub.cs @@ -70,7 +70,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses.CommandClassSubs { 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)); + this.Update?.Invoke(this, new DeviceUpdateEvent(new Tuple(this.Type, this.Scale, this.Level, this.TempMin, this.TempMax, this.HasMinMax), this.LastUpdate, this)); } } diff --git a/Zway/Devices/CommandClasses/Configuration.cs b/Zway/Devices/CommandClasses/Configuration.cs index d4bdfcf..bc44751 100644 --- a/Zway/Devices/CommandClasses/Configuration.cs +++ b/Zway/Devices/CommandClasses/Configuration.cs @@ -24,7 +24,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { } private void DeviceUpdate(Object sender, DeviceUpdateEvent e) { - this.Update?.Invoke(sender, e); + this.Update?.Invoke(this, e); } private void InitComplex(JsonData json) { diff --git a/Zway/Devices/CommandClasses/Indicator.cs b/Zway/Devices/CommandClasses/Indicator.cs index b25ef32..b068258 100644 --- a/Zway/Devices/CommandClasses/Indicator.cs +++ b/Zway/Devices/CommandClasses/Indicator.cs @@ -36,7 +36,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { if(match.Groups[4].Value == ".data.stat") { if (json.Keys.Contains("value") && this.CheckSetUpdateTime(json)) { this._level = Int32.Parse(json["value"].ToString()) == 255; - this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate, this)); } } else { Helper.WriteError("Kenne in " + this.Name + " [" + this.Id + "] " + match.Groups[4].Value + " nicht!"); diff --git a/Zway/Devices/CommandClasses/Meter.cs b/Zway/Devices/CommandClasses/Meter.cs index f27f987..49cd895 100644 --- a/Zway/Devices/CommandClasses/Meter.cs +++ b/Zway/Devices/CommandClasses/Meter.cs @@ -26,7 +26,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { } private void DeviceUpdate(Object sender, DeviceUpdateEvent e) { - this.Update?.Invoke(sender, e); + this.Update?.Invoke(this, e); } internal override void SetUpdate(JsonData json, Match match) { diff --git a/Zway/Devices/CommandClasses/SensorMultilevel.cs b/Zway/Devices/CommandClasses/SensorMultilevel.cs index 0022d59..26df0da 100644 --- a/Zway/Devices/CommandClasses/SensorMultilevel.cs +++ b/Zway/Devices/CommandClasses/SensorMultilevel.cs @@ -26,7 +26,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { } private void DeviceUpdate(Object sender, DeviceUpdateEvent e) { - this.Update?.Invoke(sender, e); + this.Update?.Invoke(this, e); } internal override void SetUpdate(JsonData json, Match match) { diff --git a/Zway/Devices/CommandClasses/SwitchBinary.cs b/Zway/Devices/CommandClasses/SwitchBinary.cs index b3d195c..84465ed 100644 --- a/Zway/Devices/CommandClasses/SwitchBinary.cs +++ b/Zway/Devices/CommandClasses/SwitchBinary.cs @@ -31,7 +31,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { if(match.Groups[4].Value == ".data.level") { if (json.Keys.Contains("value") && json["value"].IsBoolean && this.CheckSetUpdateTime(json)) { this._level = (Boolean)json["value"]; - this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate, this)); } } else { Helper.WriteError("Kenne in " + this.Name + " [" + this.Id + "] " + match.Groups[4].Value + " nicht!"); diff --git a/Zway/Devices/CommandClasses/SwitchMultilevel.cs b/Zway/Devices/CommandClasses/SwitchMultilevel.cs index 3f3e571..525bc26 100644 --- a/Zway/Devices/CommandClasses/SwitchMultilevel.cs +++ b/Zway/Devices/CommandClasses/SwitchMultilevel.cs @@ -33,7 +33,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { if(match.Groups[4].Value == ".data.level") { if(json.Keys.Contains("value") && this.CheckSetUpdateTime(json)) { this._level = Int32.Parse(json["value"].ToString()); - this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate, this)); } } else if (match.Groups[4].Value == ".data.prevLevel") { } else { diff --git a/Zway/Devices/CommandClasses/ThermostatMode.cs b/Zway/Devices/CommandClasses/ThermostatMode.cs index 423a1bd..6362ac4 100644 --- a/Zway/Devices/CommandClasses/ThermostatMode.cs +++ b/Zway/Devices/CommandClasses/ThermostatMode.cs @@ -35,7 +35,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { if(match.Groups[4].Value == ".data.mode") { if(json.Keys.Contains("value") && this.CheckSetUpdateTime(json)) { this._level = Int32.Parse(json["value"].ToString()); - this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(this.Level, this.LastUpdate, this)); } } else { Helper.WriteError("Kenne in " + this.Name + " [" + this.Id + "] " + match.Groups[4].Value + " nicht!"); diff --git a/Zway/Devices/CommandClasses/ThermostatSetPoint.cs b/Zway/Devices/CommandClasses/ThermostatSetPoint.cs index d1080c4..1e38eac 100644 --- a/Zway/Devices/CommandClasses/ThermostatSetPoint.cs +++ b/Zway/Devices/CommandClasses/ThermostatSetPoint.cs @@ -25,7 +25,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { } private void DeviceUpdate(Object sender, DeviceUpdateEvent e) { - this.Update?.Invoke(sender, e); + this.Update?.Invoke(this, e); } internal override void SetUpdate(JsonData json, Match match) { diff --git a/Zway/Devices/CommandClasses/Wakeup.cs b/Zway/Devices/CommandClasses/Wakeup.cs index 9c2e77f..17ae0a0 100644 --- a/Zway/Devices/CommandClasses/Wakeup.cs +++ b/Zway/Devices/CommandClasses/Wakeup.cs @@ -113,7 +113,7 @@ namespace BlubbFish.IoT.Zway.Devices.CommandClasses { Helper.WriteError("Kenne in " + this.Name + " [" + this.Id + "] " + match.Groups[4].Value + " nicht!"); } if (success && this.CheckSetUpdateTime(json)) { - this.Update?.Invoke(this, new DeviceUpdateEvent(0, this.LastUpdate)); + this.Update?.Invoke(this, new DeviceUpdateEvent(0, this.LastUpdate, this)); } } diff --git a/Zway/Devices/Device.cs b/Zway/Devices/Device.cs index 3db3d91..be64774 100644 --- a/Zway/Devices/Device.cs +++ b/Zway/Devices/Device.cs @@ -47,7 +47,7 @@ namespace BlubbFish.IoT.Zway.Devices { } private void InstanceUpdate(Object sender, DeviceUpdateEvent e) { - this.Update?.Invoke(sender, e); + this.Update?.Invoke(this, e); } private void CreateInstances(JsonData json, HttpConnection http) { diff --git a/Zway/Devices/Instance.cs b/Zway/Devices/Instance.cs index 9e70fee..e796f82 100644 --- a/Zway/Devices/Instance.cs +++ b/Zway/Devices/Instance.cs @@ -38,7 +38,7 @@ namespace BlubbFish.IoT.Zway.Devices { } private void ClassUpdate(Object sender, DeviceUpdateEvent e) { - this.Update?.Invoke(sender, e); + this.Update?.Invoke(this, e); } private void CreateInstances(JsonData json, HttpConnection http) { diff --git a/Zway/Events/DeviceUpdateEvent.cs b/Zway/Events/DeviceUpdateEvent.cs index ab6f92d..a586143 100644 --- a/Zway/Events/DeviceUpdateEvent.cs +++ b/Zway/Events/DeviceUpdateEvent.cs @@ -10,38 +10,45 @@ namespace BlubbFish.IoT.Zway.Events { public DeviceUpdateEvent() { } - public DeviceUpdateEvent(Single value, DateTime time) { + public DeviceUpdateEvent(Single value, DateTime time, Object parent) { this.GetSingle = value; this.UpdateTime = time; + this.Parent = parent; } - public DeviceUpdateEvent(Boolean value, DateTime time) { + public DeviceUpdateEvent(Boolean value, DateTime time, Object parent) { this.GetBoolean = value; this.UpdateTime = time; + this.Parent = parent; } - public DeviceUpdateEvent(DateTime value, DateTime time) { + public DeviceUpdateEvent(DateTime value, DateTime time, Object parent) { this.GetDate = value; this.UpdateTime = time; + this.Parent = parent; } - public DeviceUpdateEvent(Tuple value, DateTime time) { + public DeviceUpdateEvent(Tuple value, DateTime time, Object parent) { this.GetStringStringSingleTuple = value; this.UpdateTime = time; + this.Parent = parent; } - public DeviceUpdateEvent(Tuple value, DateTime time) { + public DeviceUpdateEvent(Tuple value, DateTime time, Object parent) { this.GetStringStringSingleSingleSingleSingleBooleanTuple = value; this.UpdateTime = time; + this.Parent = parent; } - public DeviceUpdateEvent(Tuple value, DateTime time) { + public DeviceUpdateEvent(Tuple value, DateTime time, Object parent) { this.GetIntegerTuple = value; this.UpdateTime = time; + this.Parent = parent; } - public DeviceUpdateEvent(Tuple value, DateTime time) { + public DeviceUpdateEvent(Tuple value, DateTime time, Object parent) { this.GetLongIntegerTuple = value; this.UpdateTime = time; + this.Parent = parent; } public Single GetSingle { get; } @@ -50,6 +57,7 @@ namespace BlubbFish.IoT.Zway.Events { public Tuple GetStringStringSingleSingleSingleSingleBooleanTuple { get; } public Tuple GetLongIntegerTuple { get; } public DateTime UpdateTime { get; } + public Object Parent { get; private set; } public Boolean GetBoolean { get; } public Tuple GetIntegerTuple { get; } } diff --git a/Zway/bin/Release/Zway.dll b/Zway/bin/Release/Zway.dll index 07dcbdf597760856f550514144fdb5da765f0521..ba3f4680d07f945b48320e4e445764677431e47d 100644 GIT binary patch delta 18755 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 Q(V?o^f{%QuS}NWDA1|M7umAu6 literal 48128 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 Y|1h6}>fdXaJ@X$%