Ejemplo n.º 1
0
        private void OnNotification(ZWNotification notification)
        {
            var notification2 = new OpenZWaveNotification(_network, notification);

            if (_log)
            {
                _network.Log("controller notification: " + notification2.Type + ", " + notification2.NodeId);
            }

            EnqueueNotification(notification2);
        }
        public void Process(OpenZWaveNotification notification)
        {
            if (_network.HomeId == null)
            {
                _network.SetHomeId(notification.HomeId);
            }

            if (_network.HomeId != notification.HomeId)
            {
                throw new Exception("Unexpected Home ID");
            }

            Debug.WriteLine(notification.NodeId + "\t" + notification.Type + "\t" + notification.Event + "\t" + notification.Value.GetValue());

            //TODO: fill in other cases
            switch (notification.Type)
            {
            case NotificationType.AllNodesQueried:
                _network.Log("All nodes queried");
                break;

            case NotificationType.AllNodesQueriedSomeDead:
                _network.Log("All nodes queried, some dead");
                break;

            case NotificationType.AwakeNodesQueried:
                _network.Log("All awake nodes queried");
                break;

            case NotificationType.ButtonOff:
            case NotificationType.ButtonOn:
            case NotificationType.ControllerCommand:
            case NotificationType.CreateButton:
            case NotificationType.DeleteButton:
            case NotificationType.DriverFailed:
            case NotificationType.DriverReady:
            case NotificationType.DriverRemoved:
            case NotificationType.DriverReset:
            case NotificationType.EssentialNodeQueriesComplete:
            case NotificationType.Group:
                break;

            case NotificationType.NodeAdded:
                var newDevice = new OpenZWaveDevice(_network, _network.Manager, notification.NodeId);
                _network.AddDevice(newDevice);
                break;

            case NotificationType.NodeEvent:
                var device = notification.Device;

                HandleDeviceConnected(device, true);

                device.Event.Update(notification.Event);
                break;

            case NotificationType.NodeNaming:
                Nodification("node named", notification);
                break;

            case NotificationType.NodeNew:
                Nodification("new device", notification);
                break;

            case NotificationType.NodeProtocolInfo:
                Nodification("protocol info", notification);
                break;

            case NotificationType.NodeQueriesComplete:
                Nodification("queries complete", notification);
                break;

            case NotificationType.NodeRemoved:
                Nodification("removed", notification);
                break;

            case NotificationType.Notification:
                HandleDeviceConnected(notification.Device, false);
                break;

            case NotificationType.PollingDisabled:
                Nodification("polling disabled", notification);
                break;

            case NotificationType.PollingEnabled:
                Nodification("polling enabled", notification);
                break;

            case NotificationType.SceneEvent:
                break;

            case NotificationType.ValueAdded:
                notification.Device.Values.Add(notification.Value);
                HandleDeviceValueUpdated(notification.Device, notification.Value, ValueUpdateType.Add);
                break;

            case NotificationType.ValueRefreshed:
                HandleDeviceValueUpdated(notification.Device, notification.Value, ValueUpdateType.Refresh);
                break;

            case NotificationType.ValueChanged:
                HandleDeviceValueUpdated(notification.Device, notification.Value, ValueUpdateType.Change);
                break;

            case NotificationType.ValueRemoved:
                notification.Device.Values.Remove(notification.Value);
                HandleDeviceValueUpdated(notification.Device, notification.Value, ValueUpdateType.Remove);
                break;

            default:
                throw new Exception("Unexpected notification type " + notification.Type);
            }
        }