protected override void Execute(ZwaveDevice device, Node node, ZwaveCommandQueue queue)
 {
     queue.AddDistinct("Get Alarm", async () =>
     {
         var result = await node.GetCommandClass<Alarm>().Get();
         HandleAlarmReport(result);
     });
 }
 protected override void Execute(ZwaveDevice device, Node node, ZwaveCommandQueue queue)
 {
     queue.AddDistinct("Get SensorMultiLevel", async () =>
     {
         var result = await node.GetCommandClass<SensorMultiLevel>().Get();
         HandleSensorMultiLevelReport(result);
     });
 }
        protected override void Handle(ZwaveDevice device, Node node, ZwaveCommandQueue queue, CancellationToken cancellationToken)
        {
            node.GetCommandClass<Alarm>().Changed += (s, e) =>
            {
                HandleAlarmReport(e.Report);
            };

            Start(TimeSpan.FromMinutes(10), device, node, queue, cancellationToken);
        }
        protected override void Handle(ZwaveDevice device, Node node, ZwaveCommandQueue queue, CancellationToken cancellationToken)
        {
            node.GetCommandClass<Meter>().Changed += (s, e) =>
            {
                HandleMeterReport(e.Report);
            };

            Start(_interval, device, node, queue, cancellationToken);
        }
 protected override void Handle(ZwaveDevice device, Node node, ZwaveCommandQueue queue, CancellationToken cancellationToken)
 {
     node.GetCommandClass<WakeUp>().Changed += (s, e) =>
     {
         if (e.Report.Awake)
         {
             queue.StartOrContinueWorker(isWakeUp: true);
         }
     };
 }
        protected override void Handle(ZwaveDevice device, Node node, ZwaveCommandQueue queue, CancellationToken cancellationToken)
        {
            node.GetCommandClass<SwitchBinary>().Changed += (s, e) =>
            {
                HandleSwitchBinaryReport(e.Report);
            };

            device.IsSwitchBinary = true;
            Start(TimeSpan.FromMinutes(30), device, node, queue, cancellationToken);
        }
 protected override void Execute(ZwaveDevice device, Node node, ZwaveCommandQueue queue)
 {
     foreach (AlarmType alarmType in Enum.GetValues(typeof(AlarmType)))
     {
         queue.AddDistinct("Get SensorAlarm " + alarmType, async () =>
         {
             var result = await node.GetCommandClass<SensorAlarm>().Get(alarmType);
             HandleSensorAlarmReport(result);
         });
     }
 }
 protected void Start(TimeSpan interval, ZwaveDevice device, Node node, ZwaveCommandQueue queue, CancellationToken cancellationToken)
 {
     Task.Run(async () =>
     {
         while (!_isDisposing)
         {
             await Task.Delay(interval, cancellationToken).ContinueWith(_ => { });
             Execute(device, node, queue);
         }
     });
 }
        protected override void Execute(ZwaveDevice device, Node node, ZwaveCommandQueue queue)
        {
            queue.AddDistinct("Get Meter", async () =>
            {
                if ((DateTime.UtcNow - _lastUpdate) < _interval)
                {
                    return;
                }

                var result = await node.GetCommandClass<Meter>().Get();
                HandleMeterReport(result);
            });
        }
 protected abstract void Handle(ZwaveDevice device, Node node, ZwaveCommandQueue queue, CancellationToken cancellationToken);
 protected abstract void Execute(ZwaveDevice device, Node node, ZwaveCommandQueue queue);