zwaveupnpbridgeform.cs

来自「zwave 无线通讯协议 PC controller 控制器源码」· CS 代码 · 共 1,362 行 · 第 1/5 页

CS
1,362
字号
                    ClosePort();
                    ZWaveSaveToFile();
                    foreach (ZensysBridgedDevice zenDev in UPnPdownDeviceList)
                    {
                        ZWaveUPnPDeviceStop(zenDev);
                        ZWaveNodes.Remove(zenDev.NodeId);
                        UPnPdownDeviceList.Remove(zenDev);
                    }
                    /* Remove all devices */
                    if (components != null)
                    {
                        components.Dispose();
                    }
                }
                base.Dispose(disposing);
            }
            catch (Exception)
            {
            }
        }


        #region UPnP
        private void ZensysUPnPAddDevice(ZensysUPnPDevice device)
        {
            try
            {
                UPnPdownDeviceList.Add(device);
                if (device.NodeId != 0)
                {
                    ((ZWaveNode)ZWaveNodes[device.NodeId]).Dev = device;
                    ((ZWaveNode)ZWaveNodes[device.NodeId]).Type = (byte)device.DeviceZWaveType;
                }
            }
            catch (Exception e)
            {
                mainLog.Write("ZensysUPnPAddDevice: Exception - " + e.Message);
            }
        }


        private void ZWaveUPnPDeviceStart(ZensysUPnPDevice device)
        {
            string[] itemString = new string[5];
            itemString[0] = device.NodeId.ToString("000");
            switch (device.DeviceZWaveType)
            {
                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_BINARY:
                    itemString[1] = "Binary Switch";
                    itemString[2] = "BinaryLight";
                    itemString[3] = device.Device.FriendlyName;
                    break;

                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_MULTILEVEL:
                    itemString[1] = "Multilevel Switch";
                    itemString[2] = "BinaryLight";
                    itemString[3] = device.Device.FriendlyName;
                    break;

                default:
                    itemString[1] = "Unknown";
                    itemString[2] = "Unknown";
                    itemString[3] = device.Device.FriendlyName;
                    break;
            }
            itemString[4] = (device.BridgeType == ZensysUPnPDevice.ZWaveBridgeTypes.UPnP) ? "Down" : "Up";
            ListViewItem item = new ListViewItem(itemString);
            item.Tag = device;
            /* Update device list */
            listViewDeviceList.Items.Add(item);
            /* Start device */
            device.Start();
            statusBarMain.Panels[2].Text = " Bridged Devices : " + listViewDeviceList.Items.Count.ToString("");
            foreach (ListViewItem lvitem in listViewZWaveNodes.Items)
            {
                if ((lvitem.Tag != null) && ((device == lvitem.Tag) || (((ZensysBridgedDevice)lvitem.Tag).NodeId == device.NodeId)))
                {
                    lvitem.SubItems[3].Text = device.BridgeType.ToString("g");
                    switch (device.BridgeType)
                    {
                        case ZensysBridgedDevice.ZWaveBridgeTypes.UPnP:
                            break;

                        case ZensysBridgedDevice.ZWaveBridgeTypes.UPnP2ZWave:
                            lvitem.Tag = device;
                            break;

                        default:
                            break;
                    }
                    break;
                }
            }
        }


        private void ZWaveUPnPDeviceStart(ZensysUPnPAvRendererDevice zStore)
        {
            string[] itemString = new string[5];
            itemString[0] = zStore.NodeId.ToString("000");
            Node node = applicationLayer.GetNode(zStore.NodeId);

            switch ((ZensysBridgedDevice.ZWaveDeviceTypes)node.Generic)
            {
                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_BINARY:
                    itemString[1] = "Binary Switch";
                    itemString[2] = zStore.DeviceUPnPType.ToString();
                    itemString[3] = (zStore.Device as Intel.UPNP.UPnPDevice).FriendlyName;
                    break;

                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_MULTILEVEL:
                    itemString[1] = "Multilevel Switch";
                    itemString[2] = zStore.DeviceUPnPType.ToString();
                    itemString[3] = (zStore.Device as Intel.UPNP.UPnPDevice).FriendlyName;
                    break;

                default:
                    itemString[1] = "Unknown";
                    itemString[2] = zStore.DeviceUPnPType.ToString();
                    itemString[3] = zStore.Device.FriendlyName;
                    break;
            }
            itemString[4] = "Up";
            ListViewItem item = new ListViewItem(itemString);
            item.Tag = zStore;
            /* Update device list */
            listViewDeviceList.Items.Add(item);
            /* Start device */
            zStore.Start();
            statusBarMain.Panels[2].Text = " Bridged Devices : " + listViewDeviceList.Items.Count.ToString("");
            foreach (ListViewItem lvitem in listViewZWaveNodes.Items)
            {
                try
                {
                    if (((lvitem.Tag != null) && (zStore == lvitem.Tag)) || (lvitem.Text == zStore.NodeId.ToString("000")))
                    {
                        lvitem.SubItems[3].Text = zStore.BridgeType.ToString("g");
                        switch (zStore.BridgeType)
                        {
                            case ZensysBridgedDevice.ZWaveBridgeTypes.UPnP:
                                break;

                            case ZensysBridgedDevice.ZWaveBridgeTypes.UPnP2ZWave:
                                lvitem.Tag = zStore;
                                break;

                            default:
                                break;
                        }
                        break;
                    }
                }
                catch (Exception)
                {
                }
            }
        }


        public void ZWaveUPnPDeviceStop(ZensysBridgedDevice dev)
        {
            if (dev != null)
            {
                foreach (ListViewItem item in listViewDeviceList.Items)
                {
                    if (dev == item.Tag)
                    {
                        listViewDeviceList.Items.Remove(item);
                        break;
                    }
                }
                dev.Stop();
                foreach (ListViewItem item in listViewZWaveNodes.Items)
                {
                    if (dev == item.Tag)
                    {
                        if (ZWaveNodes.ContainsKey(dev.NodeId))
                        {
                            try
                            {
                                Node nid = applicationLayer.GetNode(dev.NodeId);
                                if (nid != null)
                                {
                                    if (nid.IsVirtual)
                                    {
                                        item.SubItems[3].Text = "idle up";
                                        break;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                mainLog.Write("Exception_ ZWaveUPnPDeviceStop (" + dev.NodeId + ") " + ex.Message);
                            }
                        }
                        item.SubItems[3].Text = "idle down";
                        break;
                    }
                }
            }
            statusBarMain.Panels[2].Text = " Bridged Devices : " + listViewDeviceList.Items.Count.ToString("");
        }


        private ZensysUPnPDevice ZensysUPnPAddRootDevice(ZensysBridgedDevice.ZWaveDeviceTypes deviceType, string friendlyName, byte Id, ZensysBridgedDevice.ZWaveBridgeDeviceState state)
        {
            device = null;
            switch (deviceType)
            {
                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_BINARY: /* It is a Binary Light device... */
                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_MULTILEVEL: /* It is a Multilevel Light device... */
                    {
                        /* Create new Light device */
                        device = new ZensysUPnPLightDevice(deviceType, friendlyName, Id, mainLog);
                        ((ZensysUPnPLightDevice)device).bridgeSubscriberEvent += new ZensysBridgedDevice.BridgeEvent_SubscriberHandler(ZensysBridge_subscriberEvent);
                        device.State = state;
                        break;
                    }

                default:
                    mainLog.Write("Unknown Z-Wave Device Type " + deviceType.ToString());
                    return (ZensysUPnPDevice)null;
            }
            if (device != null)
            {
                ZensysUPnPAddDevice(device);

                /* Start it */
                if (device.State == ZensysBridgedDevice.ZWaveBridgeDeviceState.Started)
                {
                    ZWaveUPnPDeviceStart(device);
                }
            }
            return device;
        }
        #endregion UPnP



        private void ZensysAddDevice(byte node, byte nodeType, bool down, bool bridgeIt)
        {
            string nameStr;
            Node nodeInf = applicationLayer.GetNode(node);
            if (nodeInf == null)
            {
                return;
            }
            if (nodeType == 0)
            {
                nodeType = nodeInf.Generic;
            }
            device = null;
            if (ZWaveNodes.ContainsKey(node))
            {
                if (((ZWaveNode)ZWaveNodes[node]).Dev != null)
                {
                    ((ZWaveNode)ZWaveNodes[node]).DevBridge.Stop();
                }
                ZWaveNodes.Remove(node);
            }
            ZWaveNodes.Add(node, new ZWaveNode(node, nodeType, null, nodeInf.IsVirtual));

            switch ((ZensysBridgedDevice.ZWaveDeviceTypes)nodeType)
            {
                case ZensysBridgedDevice.ZWaveDeviceTypes.SWITCH_BINARY:
                    {
                        nameStr = "Binary Light " + node.ToString("000") + " (" + labelHomeID.Text + ", " + labelNodeID.Text + ")";
                        if (down)
                        {
                            device = ZensysUPnPAddRootDevice((ZensysBridgedDevice.ZWaveDeviceTypes)nodeType, nameStr, node, (bridgeIt) ? ZensysBridgedDevice.ZWaveBridgeDeviceState.Started : ZensysBridgedDevice.ZWaveBridgeDeviceState.Stopped);
                        }
                        break;
                    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?