Skip to content

Commit

Permalink
Smart Start
Browse files Browse the repository at this point in the history
  • Loading branch information
marcus-j-davies committed Jun 26, 2024
1 parent 6b99e30 commit 13a1836
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 114 deletions.
94 changes: 0 additions & 94 deletions Visual Studio Projects/ZWaveJS.NET/ZWaveJS.NET/Controller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -934,62 +934,6 @@ private Task<CMDResult> _UnprovisionSmartStartNode(object dskOrNodeId)
return Result.Task;
}

// CHECKED
public Task<CMDResult> ProvisionSmartStartNode(QRProvisioningInformation ProvisioningInformation)
{
Guid ID = Guid.NewGuid();
TaskCompletionSource<CMDResult> Result = new TaskCompletionSource<CMDResult>();

if (_driver.Options != null && _driver.Options.MissingKeys(true, true))
{
CMDResult Res = new CMDResult(Enums.ErrorCodes.MissingKeys, "Missing Security Keys in Options", false);
Result.SetResult(Res);
return Result.Task;
}

if (_driver.Options != null && !_driver.Options.CheckKeyLength())
{
CMDResult Res = new CMDResult(Enums.ErrorCodes.InvalidkeyLength, "Invalid Key length. All Security Keys must be a 32 character hexadecimal string (representing 16 bytes)", false);
Result.SetResult(Res);
return Result.Task;
}

if (ProvisioningInformation.supportedProtocols.Contains(Protocols.ZWaveLongRange))
{
if (_driver.Options != null && _driver.Options.MissingLRKeys())
{
CMDResult Res = new CMDResult(Enums.ErrorCodes.MissingKeys, "Missing Security Keys in Options", false);
Result.SetResult(Res);
return Result.Task;
}


if (_driver.Options != null && !_driver.Options.CheckKeyLengthLR())
{
CMDResult Res = new CMDResult(Enums.ErrorCodes.InvalidkeyLength, "Invalid Key length. All Security Keys must be a 32 character hexadecimal string (representing 16 bytes)", false);
Result.SetResult(Res);
return Result.Task;
}
}

_driver.Callbacks.Add(ID, (JO) =>
{
CMDResult Res = new CMDResult(JO);
Result.SetResult(Res);
});

Dictionary<string, object> Request = new Dictionary<string, object>();

Request.Add("messageId", ID);
Request.Add("command", Enums.Commands.ProvisionSmartStartNode);
Request.Add("entry", ProvisioningInformation);

string RequestPL = Newtonsoft.Json.JsonConvert.SerializeObject(Request);
_driver.ClientWebSocket.SendInstant(RequestPL);

return Result.Task;
}

// CHECKED
public Task<CMDResult> ProvisionSmartStartNode(SmartStartProvisioningEntry ProvisioningInformation)
{
Expand Down Expand Up @@ -1046,44 +990,6 @@ public Task<CMDResult> ProvisionSmartStartNode(SmartStartProvisioningEntry Provi
return Result.Task;
}

// CHECKED
public Task<CMDResult> ProvisionSmartStartNode(string QRCode)
{
Guid ID = Guid.NewGuid();
TaskCompletionSource<CMDResult> Result = new TaskCompletionSource<CMDResult>();

if (_driver.Options != null && _driver.Options.MissingKeys(true, true))
{
CMDResult Res = new CMDResult(Enums.ErrorCodes.MissingKeys, "Missing Security Keys in Options", false);
Result.SetResult(Res);
return Result.Task;
}

if (_driver.Options != null && !_driver.Options.CheckKeyLength())
{
CMDResult Res = new CMDResult(Enums.ErrorCodes.InvalidkeyLength, "Invalid Key length. All Security Keys must be a 32 character hexadecimal string (representing 16 bytes)", false);
Result.SetResult(Res);
return Result.Task;
}

_driver.Callbacks.Add(ID, (JO) =>
{
CMDResult Res = new CMDResult(JO);
Result.SetResult(Res);
});

Dictionary<string, object> Request = new Dictionary<string, object>();

Request.Add("messageId", ID);
Request.Add("command", Enums.Commands.ProvisionSmartStartNode);
Request.Add("entry", QRCode);

string RequestPL = Newtonsoft.Json.JsonConvert.SerializeObject(Request);
_driver.ClientWebSocket.SendInstant(RequestPL);

return Result.Task;
}

// CHECKED
public Task<CMDResult> BeginExclusion(ExclusionOptions Options)
{
Expand Down
41 changes: 21 additions & 20 deletions Visual Studio Projects/ZWaveJS.NET/ZWaveJS.NET/Structures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Dynamic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using static ZWaveJS.NET.Enums;

Expand Down Expand Up @@ -168,45 +169,45 @@ public class SmartStartProvisioningEntry
{
internal SmartStartProvisioningEntry() { }

public SmartStartProvisioningEntry(string dsk, SecurityClass[] securityClasses, Protocols protocol = Protocols.ZWave)
public SmartStartProvisioningEntry(QRProvisioningInformation ProvisioningInformation, Protocols protocol = Protocols.ZWave, ProvisioningEntryStatus status = ProvisioningEntryStatus.Active)
{
if(!ProvisioningInformation.supportedProtocols.Contains(protocol))
{
throw new NotSupportedException("The provided protocol is not supported by this device.");
}

this.dsk = ProvisioningInformation.dsk;
this.securityClasses = ProvisioningInformation.securityClasses;
this.requestedSecurityClasses = ProvisioningInformation.securityClasses;
this.supportedProtocols = ProvisioningInformation.supportedProtocols;
this.protocol = protocol;
this.status = status;
}

public SmartStartProvisioningEntry(string dsk, SecurityClass[] securityClasses, Protocols protocol = Protocols.ZWave, ProvisioningEntryStatus status = ProvisioningEntryStatus.Active)
{
this.dsk = dsk;
this.securityClasses = securityClasses;
this.requestedSecurityClasses = securityClasses;
this.protocol = protocol;
this.status = status;
this.supportedProtocols = new Protocols[1] { protocol };
}

[Newtonsoft.Json.JsonProperty]
public ProvisioningEntryStatus status { get; internal set; }
public ProvisioningEntryStatus? status { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public string dsk { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public Protocols? protocol { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public Protocols[] supportedProtocols { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public SecurityClass[] securityClasses { get; internal set; }
public SecurityClass[] securityClasses { get; set; }
[Newtonsoft.Json.JsonProperty]
public SecurityClass[] requestedSecurityClasses { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int version { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int genericDeviceClass { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int specificDeviceClass { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int installerIconType { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int manufacturerId { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int productType { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int productId { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public decimal applicationVersion { get; internal set; }
[Newtonsoft.Json.JsonProperty]
public int nodeId { get; internal set; }
public int? nodeId { get; internal set; }
}

public class RebuildRoutesOptions
Expand Down

0 comments on commit 13a1836

Please sign in to comment.