예제 #1
0
        public override void AddOrUpdateHSDeviceProperties()
        {
            Console.WriteLine("FIXME: Adding HS Device control status");
//            hsDevice.MISC_Set(HS, Enums.dvMISC.NO_LOG);
            hsDevice.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES);

            hsDevice.set_Relationship(HS, Enums.eRelationship.Standalone);

            // Clear existing VSP
            HS.DeviceVSP_ClearAll(hsDevice.get_Ref(null), true);

            VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v.PairType               = VSVGPairs.VSVGPairType.SingleValue;
            v.Value                  = 0;
            v.Status                 = "Closed";
            v.Render                 = Enums.CAPIControlType.Button;
            v.Render_Location.Row    = 1;
            v.Render_Location.Column = 1;
            v.ControlUse             = ePairControlUse._Off;
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v);

            VSVGPairs.VSPair v2 = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v2.PairType               = VSVGPairs.VSVGPairType.SingleValue;
            v2.Value                  = 1;
            v2.Status                 = "Open";
            v2.Render                 = Enums.CAPIControlType.Button;
            v2.Render_Location.Row    = 1;
            v2.Render_Location.Column = 2;
            v2.ControlUse             = ePairControlUse._On;
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v2);

            SaveConfiguration();
        }
예제 #2
0
        private void _createColor(string label)
        {
            if (Color != 0)
            {
                return;
            }

            IHSApplication hs = _plugin.hs;

            int         hsRef  = hs.NewDeviceRef(label + " Color");
            DeviceClass device = (DeviceClass)hs.GetDeviceByRef(hsRef);

            device.set_Address(hs, GetSubDeviceAddress(SubDeviceType.Color));
            device.set_Interface(hs, _plugin.Name);
            device.set_InterfaceInstance(hs, _plugin.InstanceFriendlyName());
            device.set_Device_Type_String(hs, "LIFX Device Color");
            device.set_DeviceType_Set(hs, new DeviceTypeInfo_m.DeviceTypeInfo {
                Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In
            });

            // Create the buttons and slider
            VSVGPairs.VSPair colorPicker = new VSVGPairs.VSPair(ePairStatusControl.Both);
            colorPicker.PairType   = VSVGPairs.VSVGPairType.SingleValue;
            colorPicker.Render     = Enums.CAPIControlType.Color_Picker;
            colorPicker.ControlUse = ePairControlUse._ColorControl;

            hs.DeviceVSP_AddPair(hsRef, colorPicker);

            device.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

            hs.SetDeviceString(hsRef, "ffffff", false);

            Color = hsRef;
        }
        public Device AddButton(double value, string status, string graphicsPath = null, int renderLocationRow = 0, int renderLocationColumn = 0)
        {
            var renderLocation = new Enums.CAPIControlLocation()
            {
                Column = 0, Row = 0, ColumnSpan = 0
            };

            if (renderLocationRow > 0)
            {
                renderLocation.Row    = renderLocationRow;
                renderLocation.Column = renderLocationColumn;
            }

            var vsPair = new VSVGPairs.VSPair(ePairStatusControl.Both)
            {
                PairType        = VSVGPairs.VSVGPairType.SingleValue,
                Value           = value,
                Status          = status,
                Render_Location = renderLocation,
                Render          = Enums.CAPIControlType.Button,
                IncludeValues   = true
            };

            _hs.DeviceVSP_AddPair(Id, vsPair);

            if (graphicsPath != null)
            {
                AddStatusGraphicField((int)value, -1, graphicsPath);
            }

            return(this);
        }
예제 #4
0
        public override void AddOrUpdateHSDeviceProperties()
        {
            Console.WriteLine("FIXME: Adding HS Device control status");
//            hsDevice.MISC_Set(HS, Enums.dvMISC.NO_LOG);
            hsDevice.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES);

            hsDevice.set_Relationship(HS, Enums.eRelationship.Standalone);

            // Clear existing VSP
            HS.DeviceVSP_ClearAll(hsDevice.get_Ref(null), true);

            VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v.PairType = VSVGPairs.VSVGPairType.Range;
            var vg = new HomeSeerAPI.VSVGPairs.VGPair();

            vg.PairType = VSVGPairs.VSVGPairType.Range;
            //v.ControlStatus = ePairStatusControl.Status;
            //v.ControlUse = ePairControlUse.
            v.RangeStatusSuffix = " C";


            v.RangeStart          = -50;
            v.RangeEnd            = 100;
            v.RangeStatusDecimals = 2;

            vg.RangeStart = -50;
            vg.RangeEnd   = 100;
            vg.Graphic    = "/images/HomeSeer/status/Thermometer-50.png";

            v.Render = Enums.CAPIControlType.ValuesRange;

            hsDevice.MISC_Clear(HS, Enums.dvMISC.SHOW_VALUES); // Should be set or not ?
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v);
            HS.DeviceVGP_AddPair(hsDevice.get_Ref(null), vg);

/*
 *          VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
 *          v.PairType = VSVGPairs.VSVGPairType.SingleValue;
 *          v.Value = 0;
 *          v.Status = "Closed";
 *          v.Render = Enums.CAPIControlType.Button;
 *          v.Render_Location.Row = 1;
 *          v.Render_Location.Column = 1;
 *          v.ControlUse = ePairControlUse._Off;
 *          HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v);
 *
 *          VSVGPairs.VSPair v2 = new VSVGPairs.VSPair(ePairStatusControl.Status);
 *          v2.PairType = VSVGPairs.VSVGPairType.SingleValue;
 *          v2.Value = 1;
 *          v2.Status = "Open";
 *          v2.Render = Enums.CAPIControlType.Button;
 *          v2.Render_Location.Row = 1;
 *          v2.Render_Location.Column = 2;
 *          v2.ControlUse = ePairControlUse._On;
 *          HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v2);
 */
            SaveConfiguration();
        }
예제 #5
0
        public void MakeStewardVSP(int deviceID)
        {
            var Control = new VSVGPairs.VSPair(ePairStatusControl.Both);

            Control.PairType   = VSVGPairs.VSVGPairType.Range;
            Control.RangeStart = -100000;
            Control.RangeEnd   = 100000;
            Control.Render     = Enums.CAPIControlType.TextBox_Number;
            var IS = Instance.host.DeviceVSP_AddPair(deviceID, Control);
        }
예제 #6
0
        static internal bool Structure_Devices(Structures structure, string thermId, List <DeviceDataPoint> deviceList, bool createDevices)
        {
            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);
                if (id == thermId && name == "Structure")
                {
                    Update_StructureDevice(structure, ddPoint);
                    return(false);
                }
            }
            if (!createDevices)
            {
                Log("Missing Homeseer device: " + structure.name + " please click on the Create Homeseer devices button on the Nest plugin configuration page", LogType.LOG_TYPE_WARNING);
                return(false);
            }

            var dv    = GenericHomeSeerDevice("Structure", structure.name, thermId, false);
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);

            dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

            VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
            SPair          = new VSVGPairs.VSPair(ePairStatusControl.Both);
            SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
            SPair.Render   = Enums.CAPIControlType.Button;


            SPair.Value  = 0;
            SPair.Status = "Away";
            SPair.Render_Location.Row    = 1;
            SPair.Render_Location.Column = 2;
            hs.DeviceVSP_AddPair(dvRef, SPair);

            SPair.Value  = 1;
            SPair.Status = "Home";
            SPair.Render_Location.Row    = 1;
            SPair.Render_Location.Column = 2;
            hs.DeviceVSP_AddPair(dvRef, SPair);

            VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
            GPair.PairType   = VSVGPairs.VSVGPairType.Range;
            GPair.RangeStart = 0;
            GPair.RangeEnd   = 1;
            GPair.Graphic    = "/images/HomeSeer/contemporary/home.png";
            hs.DeviceVGP_AddPair(dvRef, GPair);

            return(true);
        }
        public Device AddStatusControlSingleField(double value, string status, string graphicsPath = null, bool button = false)
        {
            var vsPair = new VSVGPairs.VSPair(ePairStatusControl.Both)
            {
                PairType = VSVGPairs.VSVGPairType.SingleValue,
                Value    = value,
                Status   = status,
            };

            _hs.DeviceVSP_AddPair(Id, vsPair);

            return(this);
        }
예제 #8
0
        /// <summary>
        /// Create a new device and set the names for the status display.
        /// </summary>
        /// <param name="refId">The device reference identifier for HomeSeer.</param>
        /// <param name="name">The name for the device.</param>
        /// <returns>Scheduler.Classes.DeviceClass.</returns>
        private Scheduler.Classes.DeviceClass CreateDevice(out int refId, string name = "HikVision Camera")
        {
            Scheduler.Classes.DeviceClass dv = null;
            refId = hs.NewDeviceRef(name);
            if (refId > 0)
            {
                dv = (Scheduler.Classes.DeviceClass)hs.GetDeviceByRef(refId);
                dv.set_Address(hs, "Camera" + refId);
                dv.set_Device_Type_String(hs, "HikVision Camera Alarm");
                DeviceTypeInfo_m.DeviceTypeInfo DT = new DeviceTypeInfo_m.DeviceTypeInfo();
                DT.Device_API  = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Security;
                DT.Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Security.Zone_Interior;
                dv.set_DeviceType_Set(hs, DT);
                dv.set_Interface(hs, IFACE_NAME);
                dv.set_InterfaceInstance(hs, "");
                dv.set_Last_Change(hs, DateTime.Now);
                dv.set_Location(hs, "Camera");     // room
                dv.set_Location2(hs, "HikVision"); // floor

                VSVGPairs.VSPair Pair = new VSVGPairs.VSPair(HomeSeerAPI.ePairStatusControl.Status);
                Pair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                Pair.Value    = -1;
                Pair.Status   = "Unknown";
                Default_VS_Pairs_AddUpdateUtil(refId, Pair);

                Pair          = new VSVGPairs.VSPair(HomeSeerAPI.ePairStatusControl.Status);
                Pair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                Pair.Value    = 0;
                Pair.Status   = "No Motion";
                Default_VS_Pairs_AddUpdateUtil(refId, Pair);

                Pair          = new VSVGPairs.VSPair(HomeSeerAPI.ePairStatusControl.Status);
                Pair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                Pair.Value    = 1;
                Pair.Status   = "Motion";
                Default_VS_Pairs_AddUpdateUtil(refId, Pair);

                dv.MISC_Set(hs, Enums.dvMISC.STATUS_ONLY);
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);
                dv.set_Status_Support(hs, true);
            }

            return(dv);
        }
예제 #9
0
        public bool SetButtonState(int button, Boolean pressed)
        {
            String btnDeviceId = DeviceId + ":" + button;
            //    Console.WriteLine("Button {0} pressed: {1}", button, pressed);
            var btnDevice = Controller.getHSDevice(EnOceanController.EnOceanDeviceType.ChildDevice, btnDeviceId);

            buttonState[button] = pressed;
            if (btnDevice == null)
            {
                Console.WriteLine("No button device for btn {0} - creating");
                btnDevice = Controller.createHSDevice(hsDevice.get_Name(null) + " Button " + button, EnOceanController.EnOceanDeviceType.ChildDevice, btnDeviceId);
                btnDevice.set_Device_Type_String(HS, "EnOcean " + EnOceanController.EnOceanDeviceType.ChildDevice.ToString());
                btnDevice.set_Relationship(HS, Enums.eRelationship.Child);
                btnDevice.AssociatedDevice_Add(HS, hsDevice.get_Ref(null));
                hsDevice.AssociatedDevice_Add(HS, btnDevice.get_Ref(null));

                VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
                v.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                v.Value                  = 0;
                v.Status                 = "Released";
                v.Render                 = Enums.CAPIControlType.Button;
                v.Render_Location.Row    = 1;
                v.Render_Location.Column = 1;
                v.ControlUse             = ePairControlUse._Off;
                HS.DeviceVSP_AddPair(btnDevice.get_Ref(null), v);

                VSVGPairs.VSPair v2 = new VSVGPairs.VSPair(ePairStatusControl.Status);
                v2.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                v2.Value                  = 1;
                v2.Status                 = "Pressed";
                v2.Render                 = Enums.CAPIControlType.Button;
                v2.Render_Location.Row    = 1;
                v2.Render_Location.Column = 2;
                v2.ControlUse             = ePairControlUse._On;
                HS.DeviceVSP_AddPair(btnDevice.get_Ref(null), v2);

//                btnDevice.MISC_Set(HS, Enums.dvMISC.NO_LOG);
                btnDevice.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES);

                Controller.SaveConfiguration();
            }
            HS.SetDeviceValueByRef(btnDevice.get_Ref(null), pressed ? 1 : 0, true);
            return(true);
        }
        public Device AddStatusControlRangeField(int startValue, int endValue, string suffix, bool includeValues = true, string graphicsPath = null)
        {
            var vsPair = new VSVGPairs.VSPair(ePairStatusControl.Both)
            {
                PairType          = VSVGPairs.VSVGPairType.Range,
                RangeStart        = startValue,
                RangeEnd          = endValue,
                RangeStatusSuffix = suffix,
                IncludeValues     = includeValues,
            };

            _hs.DeviceVSP_AddPair(Id, vsPair);

            if (graphicsPath != null)
            {
                AddStatusGraphicField(startValue, endValue, graphicsPath);
            }
            return(this);
        }
        public Device AddDropdown(int startValue, int endValue, string suffix, string graphicsPath = null)
        {
            var vsPair = new VSVGPairs.VSPair(ePairStatusControl.Both)
            {
                PairType          = VSVGPairs.VSVGPairType.Range,
                RangeStart        = startValue,
                RangeEnd          = endValue,
                RangeStatusSuffix = suffix,
                Render            = Enums.CAPIControlType.ValuesRange
            };

            _hs.DeviceVSP_AddPair(Id, vsPair);

            if (graphicsPath != null)
            {
                AddStatusGraphicField(startValue, endValue, graphicsPath);
            }

            return(this);
        }
예제 #12
0
        public Device AddButton(double value, string status, string graphicsPath = null)
        {
            var vsPair = new VSVGPairs.VSPair(ePairStatusControl.Both)
            {
                PairType = VSVGPairs.VSVGPairType.SingleValue,
                Value    = value,
                Status   = status,
                Render   = Enums.CAPIControlType.Button
            };



            _hs.DeviceVSP_AddPair(Id, vsPair);

            if (graphicsPath != null)
            {
                AddStatusGraphicField((int)value, -1, graphicsPath);
            }

            return(this);
        }
예제 #13
0
        private void _createTemperature(string label)
        {
            if (Temperature != 0)
            {
                return;
            }

            IHSApplication hs = _plugin.hs;

            int         hsRef  = hs.NewDeviceRef(label + " Color Temperature");
            DeviceClass device = (DeviceClass)hs.GetDeviceByRef(hsRef);

            device.set_Address(hs, GetSubDeviceAddress(SubDeviceType.Temperature));
            device.set_Interface(hs, _plugin.Name);
            device.set_InterfaceInstance(hs, _plugin.InstanceFriendlyName());
            device.set_Device_Type_String(hs, "LIFX Device Color Temperature");
            device.set_DeviceType_Set(hs, new DeviceTypeInfo_m.DeviceTypeInfo {
                Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In
            });

            VSVGPairs.VSPair temp = new VSVGPairs.VSPair(ePairStatusControl.Both);
            temp.PairType          = VSVGPairs.VSVGPairType.Range;
            temp.Render            = Enums.CAPIControlType.ValuesRangeSlider;
            temp.RangeStart        = 2500;
            temp.RangeEnd          = 9000;
            temp.RangeStatusSuffix = " K";

            hs.DeviceVSP_AddPair(hsRef, temp);

            device.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

            _plugin.IgnoreNextDeviceControl(hsRef);
            hs.SetDeviceValueByRef(hsRef, 3200, false);

            Temperature = hsRef;
        }
예제 #14
0
        static internal bool Remote_Devices(string tString, Thermostat thermostat, RemoteSensors remote, SensorCapabilities capability, List <DeviceDataPoint> deviceList, EcobeeConnection ecobee)
        {
            var sensorType = "";

            if (capability.type.Equals("temperature"))
            {
                sensorType = "Temperature";
            }
            if (capability.type.Equals("occupancy"))
            {
                sensorType = "Occupancy";
            }

            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);

                if (id == (thermostat.identifier + remote.code) && name == (sensorType + tString))
                {
                    Update_RemoteDevice(thermostat, capability, ddPoint, ecobee);
                    return(false);
                }
            }



            DeviceClass dv = new DeviceClass();

            dv = GenericHomeSeerDevice(dv, sensorType + tString, remote.name, thermostat.identifier + remote.code);
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);

            switch (name)
            {
            case "Temperature Sensor":
            {
                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                   = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType          = VSVGPairs.VSVGPairType.Range;
                SPair.RangeStart        = -500;
                SPair.RangeEnd          = 500;
                SPair.RangeStatusSuffix = " " + getTemperatureUnits(thermostat.settings.useCelsius);
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType   = VSVGPairs.VSVGPairType.Range;
                GPair.RangeStart = -500;
                GPair.RangeEnd   = 500;
                GPair.Graphic    = "/images/HomeSeer/contemporary/Thermometer-70.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);
                break;
            }

            case "Occupancy Sensor":
            {
                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair          = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Value    = 0;
                SPair.Status   = "Unoccupied";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 1;
                SPair.Status = "Occupied";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/away.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/home.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);
                break;
            }
            }

            return(true);
        }
예제 #15
0
        private static void Default_VS_Pairs_AddUpdateUtil(int dvRef, VSVGPairs.VSPair Pair)
        {
            if (Pair == null)
            {
                return;
            }
            if (dvRef < 1)
            {
                return;
            }
            if (!hs.DeviceExistsRef(dvRef))
            {
                return;
            }

            VSVGPairs.VSPair Existing = null;

            // The purpose of this procedure is to add the protected, default VS/VG pairs WITHOUT overwriting any user added
            //   pairs unless absolutely necessary (because they conflict).

            try
            {
                Existing = hs.DeviceVSP_Get(dvRef, Pair.Value, Pair.ControlStatus);
                //VSPairs.GetPairByValue(Pair.Value, Pair.ControlStatus)


                if (Existing != null)
                {
                    // This is unprotected, so it is a user's value/Status pair.
                    if (Existing.ControlStatus == HomeSeerAPI.ePairStatusControl.Both & Pair.ControlStatus != HomeSeerAPI.ePairStatusControl.Both)
                    {
                        // The existing one is for BOTH, so try changing it to the opposite of what we are adding and then add it.
                        if (Pair.ControlStatus == HomeSeerAPI.ePairStatusControl.Status)
                        {
                            if (!hs.DeviceVSP_ChangePair(dvRef, Existing, HomeSeerAPI.ePairStatusControl.Control))
                            {
                                hs.DeviceVSP_ClearBoth(dvRef, Pair.Value);
                                hs.DeviceVSP_AddPair(dvRef, Pair);
                            }
                            else
                            {
                                hs.DeviceVSP_AddPair(dvRef, Pair);
                            }
                        }
                        else
                        {
                            if (!hs.DeviceVSP_ChangePair(dvRef, Existing, HomeSeerAPI.ePairStatusControl.Status))
                            {
                                hs.DeviceVSP_ClearBoth(dvRef, Pair.Value);
                                hs.DeviceVSP_AddPair(dvRef, Pair);
                            }
                            else
                            {
                                hs.DeviceVSP_AddPair(dvRef, Pair);
                            }
                        }
                    }
                    else if (Existing.ControlStatus == HomeSeerAPI.ePairStatusControl.Control)
                    {
                        // There is an existing one that is STATUS or CONTROL - remove it if ours is protected.
                        hs.DeviceVSP_ClearControl(dvRef, Pair.Value);
                        hs.DeviceVSP_AddPair(dvRef, Pair);
                    }
                    else if (Existing.ControlStatus == HomeSeerAPI.ePairStatusControl.Status)
                    {
                        // There is an existing one that is STATUS or CONTROL - remove it if ours is protected.
                        hs.DeviceVSP_ClearStatus(dvRef, Pair.Value);
                        hs.DeviceVSP_AddPair(dvRef, Pair);
                    }
                }
                else
                {
                    // There is not a pair existing, so just add it.
                    hs.DeviceVSP_AddPair(dvRef, Pair);
                }
            }
            catch (Exception)
            {
            }
        }
예제 #16
0
        static internal bool Camera_Devices(string cString, Camera camera, List <DeviceDataPoint> deviceList, bool createDevices)
        {
            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);
                if (id == camera.device_id && name == cString)
                {
                    Update_CameraDevice(camera, ddPoint);
                    return(false);
                }
            }
            if (!createDevices)
            {
                Log("Missing Homeseer device: " + cString + " please click on the Create Homeseer devices button on the Nest plugin configuration page", LogType.LOG_TYPE_WARNING);
                return(false);
            }

            var dv    = GenericHomeSeerDevice(cString, camera.name_long, camera.device_id, cString.Equals("Is Streaming"));
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);
            switch (name)
            {
            case "Is Streaming":
            {
                dv.set_Relationship(hs, Enums.eRelationship.Parent_Root);
                dv.set_Device_Type_String(hs, "Nest Root Camera");
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                        = new VSVGPairs.VSPair(ePairStatusControl.Both);
                SPair.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Render                 = Enums.CAPIControlType.Button;
                SPair.Value                  = 1;
                SPair.Status                 = "On";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 1;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 0;
                SPair.Status = "Off";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/on.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/off.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);
                break;
            }
            }

            //Update_CameraDevice(camera, dv, nest);


            return(true);
        }
예제 #17
0
        public bool SetButtonState(int button, Boolean pressed)
        {
            String btnDeviceId = DeviceId + ":" + button;
            //    Console.WriteLine("Button {0} pressed: {1}", button, pressed);
            var btnDevice = Controller.getHSDevice(EnOceanController.EnOceanDeviceType.ChildDevice, btnDeviceId);
            buttonState[button] = pressed;
            if (btnDevice == null)
            {
                Console.WriteLine("No button device for btn {0} - creating");
                btnDevice = Controller.createHSDevice(hsDevice.get_Name(null) + " Button " + button, EnOceanController.EnOceanDeviceType.ChildDevice, btnDeviceId);
                btnDevice.set_Device_Type_String(HS, "EnOcean " + EnOceanController.EnOceanDeviceType.ChildDevice.ToString());
                btnDevice.set_Relationship(HS, Enums.eRelationship.Child);
                btnDevice.AssociatedDevice_Add(HS, hsDevice.get_Ref(null));
                hsDevice.AssociatedDevice_Add(HS, btnDevice.get_Ref(null));

                VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
                v.PairType = VSVGPairs.VSVGPairType.SingleValue;
                v.Value = 0;
                v.Status = "Released";
                v.Render = Enums.CAPIControlType.Button;
                v.Render_Location.Row = 1;
                v.Render_Location.Column = 1;
                v.ControlUse = ePairControlUse._Off;
                HS.DeviceVSP_AddPair(btnDevice.get_Ref(null), v);

                VSVGPairs.VSPair v2 = new VSVGPairs.VSPair(ePairStatusControl.Status);
                v2.PairType = VSVGPairs.VSVGPairType.SingleValue;
                v2.Value = 1;
                v2.Status = "Pressed";
                v2.Render = Enums.CAPIControlType.Button;
                v2.Render_Location.Row = 1;
                v2.Render_Location.Column = 2;
                v2.ControlUse = ePairControlUse._On;
                HS.DeviceVSP_AddPair(btnDevice.get_Ref(null), v2);

            //                btnDevice.MISC_Set(HS, Enums.dvMISC.NO_LOG);
                btnDevice.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES);

                Controller.SaveConfiguration();
            }
            HS.SetDeviceValueByRef(btnDevice.get_Ref(null), pressed ? 1 : 0, true);
            return true;
        }
예제 #18
0
        static internal bool Thermostat_Devices(string tString, Thermostat thermostat, List <DeviceDataPoint> deviceList, EcobeeConnection ecobee)
        {
            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);
                if (id == thermostat.identifier && name == tString)
                {
                    Update_ThermostatDevice(thermostat, ddPoint, ecobee);
                    return(false);
                }
            }

            DeviceClass dv = new DeviceClass();

            dv = GenericHomeSeerDevice(dv, tString, thermostat.name, thermostat.identifier);
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);
            switch (name)
            {
            case "Root":
            {
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API  = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Root;
                dv.set_DeviceType_Set(hs, dt); dv.set_Relationship(hs, Enums.eRelationship.Parent_Root);
                dv.MISC_Set(hs, Enums.dvMISC.STATUS_ONLY);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair          = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Value    = 0;
                SPair.Status   = "Thermostat Root";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/ok.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "HVAC Mode":
            {
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Mode_Set;
                dt.Device_SubType = 0;
                dv.set_DeviceType_Set(hs, dt);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                        = new VSVGPairs.VSPair(ePairStatusControl.Both);
                SPair.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Render                 = Enums.CAPIControlType.Button;
                SPair.Value                  = 0;
                SPair.Status                 = "Off";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 1;
                SPair.ControlUse             = ePairControlUse._ThermModeOff;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/modeoff.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                SPair.Value  = 1;
                SPair.Status = "Auto";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                SPair.ControlUse             = ePairControlUse._ThermModeAuto;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/auto-mode.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                SPair.Value  = 2;
                SPair.Status = "Cool";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                SPair.ControlUse             = ePairControlUse._ThermModeCool;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 2;
                GPair.Graphic   = "/images/HomeSeer/contemporary/cooling.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                SPair.Value  = 3;
                SPair.Status = "Heat";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                SPair.ControlUse             = ePairControlUse._ThermModeHeat;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 3;
                GPair.Graphic   = "/images/HomeSeer/contemporary/heating.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Fan Mode":
            {
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Fan_Mode_Set;
                dt.Device_SubType = 0;
                dv.set_DeviceType_Set(hs, dt);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                        = new VSVGPairs.VSPair(ePairStatusControl.Both);
                SPair.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Render                 = Enums.CAPIControlType.Button;
                SPair.Value                  = 0;
                SPair.Status                 = "Off";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 1;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/fan-state-off.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                SPair.Value  = 1;
                SPair.Status = "On";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                SPair.ControlUse             = ePairControlUse._ThermFanOn;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/fan-on.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                SPair.Value  = 2;
                SPair.Status = "Auto";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                SPair.ControlUse             = ePairControlUse._ThermFanAuto;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 2;
                GPair.Graphic   = "/images/HomeSeer/contemporary/fan-auto.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);
                break;
            }

            case "Deadband":
            case "Target Temperature High":
            case "Target Temperature Low":
            case "Ambient Temperature":
            {
                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                   = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType          = VSVGPairs.VSVGPairType.Range;
                SPair.RangeStart        = -150;
                SPair.RangeEnd          = 100;
                SPair.RangeStatusSuffix = " °" + VSVGPairs.VSPair.ScaleReplace;
                SPair.HasScale          = true;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                if (name.Equals("Target Temperature High") || name.Equals("Target Temperature Low"))
                {
                    dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

                    SPair                        = new VSVGPairs.VSPair(HomeSeerAPI.ePairStatusControl.Control);
                    SPair.PairType               = VSVGPairs.VSVGPairType.Range;
                    SPair.Render                 = Enums.CAPIControlType.TextBox_Number;
                    SPair.Render_Location.Row    = 1;
                    SPair.Render_Location.Column = 1;
                    SPair.Status                 = "Enter target:";
                    SPair.RangeStart             = 0;
                    SPair.RangeEnd               = 100;
                    if (name.Equals("Target Temperature Low"))
                    {
                        SPair.ControlUse = ePairControlUse._HeatSetPoint;
                        DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                        dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                        dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Setpoint;
                        dt.Device_SubType = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceSubType_Setpoint.Heating_1;
                        dv.set_DeviceType_Set(hs, dt);
                    }
                    else if (name.Equals("Target Temperature High"))
                    {
                        SPair.ControlUse = ePairControlUse._CoolSetPoint;

                        DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                        dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                        dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Setpoint;
                        dt.Device_SubType = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceSubType_Setpoint.Cooling_1;
                        dv.set_DeviceType_Set(hs, dt);
                    }
                    hs.DeviceVSP_AddPair(dvRef, SPair);
                }
                else if (name.Equals("Ambient Temperature"))
                {
                    DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                    dt.Device_API  = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                    dt.Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Temperature;
                    dv.set_DeviceType_Set(hs, dt);
                }

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType   = VSVGPairs.VSVGPairType.Range;
                GPair.RangeStart = -100;
                GPair.RangeEnd   = 150;
                GPair.Graphic    = "/images/HomeSeer/contemporary/Thermometer-70.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Current Program":
            {
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair          = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Value    = 0;
                SPair.Status   = "Hold";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 1;
                SPair.Status = "Demand Response";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 2;
                SPair.Status = "Sensor";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 3;
                SPair.Status = "Switch Occupancy";
                hs.DeviceVSP_AddPair(dvRef, SPair);
                SPair.Value  = 4;
                SPair.Status = "Vacation";
                hs.DeviceVSP_AddPair(dvRef, SPair);
                SPair.Value  = 5;
                SPair.Status = "Quick Save";
                hs.DeviceVSP_AddPair(dvRef, SPair);
                SPair.Value  = 6;
                SPair.Status = "Today";
                hs.DeviceVSP_AddPair(dvRef, SPair);
                SPair.Value  = 7;
                SPair.Status = "Template";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType   = VSVGPairs.VSVGPairType.Range;
                GPair.RangeStart = 0;
                GPair.RangeEnd   = 4;
                GPair.Graphic    = "/images/HomeSeer/contemporary/home.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "HVAC Status":
            case "Fan Status":
            case "Cool Range":
            case "Heat Range":
            {
                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Graphic  = "/images/HomeSeer/contemporary/alarmheartbeat.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Humidity":
            {
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Temperature;
                dt.Device_SubType = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceSubType_Temperature.Humidity;
                dv.set_DeviceType_Set(hs, dt);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                   = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType          = VSVGPairs.VSVGPairType.Range;
                SPair.RangeStart        = 0;
                SPair.RangeEnd          = 100;
                SPair.RangeStatusSuffix = " %";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType   = VSVGPairs.VSVGPairType.Range;
                GPair.RangeStart = 0;
                GPair.RangeEnd   = 100;
                GPair.Graphic    = "/images/HomeSeer/contemporary/water.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Occupancy":
            {
                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair          = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Value    = 0;
                SPair.Status   = "Unoccupied";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 1;
                SPair.Status = "Occupied";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 2;
                SPair.Status = "No Event";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/away.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/home.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 2;
                GPair.Graphic   = "/images/HomeSeer/contemporary/userclosing.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }
            }

            return(true);
        }
예제 #19
0
        static internal bool Structure_Devices(Structures structure, string thermId, List <DeviceDataPoint> deviceList)
        {
            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);
                if (id == thermId && name == "Structure")
                {
                    Update_StructureDevice(structure, ddPoint);
                    return(false);
                }
            }

            DeviceClass dv = new DeviceClass();

            dv = GenericHomeSeerDevice(dv, "Structure", structure.name, thermId, false);
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);

            dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

            VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
            SPair          = new VSVGPairs.VSPair(ePairStatusControl.Both);
            SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
            SPair.Render   = Enums.CAPIControlType.Button;

            /*SPair.Value = 0;
             * SPair.Status = "User Program";
             * SPair.Render_Location.Row = 1;
             * SPair.Render_Location.Column = 1;
             * hs.DeviceVSP_AddPair(dvRef, SPair);
             *
             * SPair.Value = 1;
             * SPair.Status = "Away-Auto";
             * SPair.Render_Location.Row = 1;
             * SPair.Render_Location.Column = 2;
             * hs.DeviceVSP_AddPair(dvRef, SPair);*/

            SPair.Value  = 0;
            SPair.Status = "Away";
            SPair.Render_Location.Row    = 1;
            SPair.Render_Location.Column = 2;
            hs.DeviceVSP_AddPair(dvRef, SPair);

            SPair.Value  = 1;
            SPair.Status = "Home";
            SPair.Render_Location.Row    = 1;
            SPair.Render_Location.Column = 2;
            hs.DeviceVSP_AddPair(dvRef, SPair);

            VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
            GPair.PairType   = VSVGPairs.VSVGPairType.Range;
            GPair.RangeStart = 0;
            GPair.RangeEnd   = 1;
            GPair.Graphic    = "/images/HomeSeer/contemporary/home.png";
            hs.DeviceVGP_AddPair(dvRef, GPair);

            return(true);
        }
예제 #20
0
        public override void AddOrUpdateHSDeviceProperties()
        {
            Console.WriteLine("FIXME: Adding HS Device control status");
            //            hsDevice.MISC_Set(HS, Enums.dvMISC.NO_LOG);
            hsDevice.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES);

            hsDevice.set_Relationship(HS, Enums.eRelationship.Standalone);

            // Clear existing VSP
            HS.DeviceVSP_ClearAll(hsDevice.get_Ref(null), true);

            VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v.PairType = VSVGPairs.VSVGPairType.Range;
            var vg = new HomeSeerAPI.VSVGPairs.VGPair();
            vg.PairType = VSVGPairs.VSVGPairType.Range;
            //v.ControlStatus = ePairStatusControl.Status;
            //v.ControlUse = ePairControlUse.
            v.RangeStatusSuffix = " C";

            v.RangeStart = -50;
            v.RangeEnd = 100;
            v.RangeStatusDecimals = 2;

            vg.RangeStart = -50;
            vg.RangeEnd = 100;
            vg.Graphic = "/images/HomeSeer/status/Thermometer-50.png";

            v.Render = Enums.CAPIControlType.ValuesRange;

            hsDevice.MISC_Clear(HS, Enums.dvMISC.SHOW_VALUES); // Should be set or not ?
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v);
            HS.DeviceVGP_AddPair(hsDevice.get_Ref(null), vg);

            /*
            VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v.PairType = VSVGPairs.VSVGPairType.SingleValue;
            v.Value = 0;
            v.Status = "Closed";
            v.Render = Enums.CAPIControlType.Button;
            v.Render_Location.Row = 1;
            v.Render_Location.Column = 1;
            v.ControlUse = ePairControlUse._Off;
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v);

            VSVGPairs.VSPair v2 = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v2.PairType = VSVGPairs.VSVGPairType.SingleValue;
            v2.Value = 1;
            v2.Status = "Open";
            v2.Render = Enums.CAPIControlType.Button;
            v2.Render_Location.Row = 1;
            v2.Render_Location.Column = 2;
            v2.ControlUse = ePairControlUse._On;
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v2);
            */
            SaveConfiguration();
        }
예제 #21
0
        public override void AddOrUpdateHSDeviceProperties()
        {
            Console.WriteLine("FIXME: Adding HS Device control status");
            //            hsDevice.MISC_Set(HS, Enums.dvMISC.NO_LOG);
            hsDevice.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES);

            hsDevice.set_Relationship(HS, Enums.eRelationship.Standalone);

            // Clear existing VSP
            HS.DeviceVSP_ClearAll(hsDevice.get_Ref(null), true);

            VSVGPairs.VSPair v = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v.PairType = VSVGPairs.VSVGPairType.SingleValue;
            v.Value = 0;
            v.Status = "Closed";
            v.Render = Enums.CAPIControlType.Button;
            v.Render_Location.Row = 1;
            v.Render_Location.Column = 1;
            v.ControlUse = ePairControlUse._Off;
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v);

            VSVGPairs.VSPair v2 = new VSVGPairs.VSPair(ePairStatusControl.Status);
            v2.PairType = VSVGPairs.VSVGPairType.SingleValue;
            v2.Value = 1;
            v2.Status = "Open";
            v2.Render = Enums.CAPIControlType.Button;
            v2.Render_Location.Row = 1;
            v2.Render_Location.Column = 2;
            v2.ControlUse = ePairControlUse._On;
            HS.DeviceVSP_AddPair(hsDevice.get_Ref(null), v2);

            SaveConfiguration();
        }
예제 #22
0
        private void _createBrightness(string label)
        {
            if (Brightness != 0)
            {
                return;
            }

            IHSApplication hs = _plugin.hs;

            int         hsRef  = hs.NewDeviceRef(label + " Brightness");
            DeviceClass device = (DeviceClass)hs.GetDeviceByRef(hsRef);

            device.set_Address(hs, GetSubDeviceAddress(SubDeviceType.Brightness));
            device.set_Interface(hs, _plugin.Name);
            device.set_InterfaceInstance(hs, _plugin.InstanceFriendlyName());
            device.set_Device_Type_String(hs, "LIFX Device Brightness");
            device.set_DeviceType_Set(hs, new DeviceTypeInfo_m.DeviceTypeInfo {
                Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In
            });

            // Create the buttons and slider
            VSVGPairs.VSPair offBtn = new VSVGPairs.VSPair(ePairStatusControl.Both);
            offBtn.PairType        = VSVGPairs.VSVGPairType.SingleValue;
            offBtn.Render          = Enums.CAPIControlType.Button;
            offBtn.Status          = "Off";
            offBtn.ControlUse      = ePairControlUse._Off;
            offBtn.Value           = 0;
            offBtn.Render_Location = new Enums.CAPIControlLocation {
                Column = 1,
                Row    = 1,
            };

            VSVGPairs.VSPair onBtn = new VSVGPairs.VSPair(ePairStatusControl.Both);
            onBtn.PairType        = VSVGPairs.VSVGPairType.SingleValue;
            onBtn.Render          = Enums.CAPIControlType.Button;
            onBtn.Status          = "On";
            onBtn.ControlUse      = ePairControlUse._On;
            onBtn.Value           = 99;
            onBtn.Render_Location = new Enums.CAPIControlLocation {
                Column = 2,
                Row    = 1,
            };

            VSVGPairs.VSPair lastBtn = new VSVGPairs.VSPair(ePairStatusControl.Control);
            lastBtn.PairType        = VSVGPairs.VSVGPairType.SingleValue;
            lastBtn.Render          = Enums.CAPIControlType.Button;
            lastBtn.Status          = "Last";
            lastBtn.ControlUse      = ePairControlUse._On_Alternate;
            lastBtn.Value           = 255;
            lastBtn.Render_Location = new Enums.CAPIControlLocation {
                Column = 4,
                Row    = 1,
            };

            VSVGPairs.VSPair dim = new VSVGPairs.VSPair(ePairStatusControl.Both);
            dim.PairType          = VSVGPairs.VSVGPairType.Range;
            dim.Render            = Enums.CAPIControlType.ValuesRangeSlider;
            dim.RangeStart        = 1;
            dim.RangeEnd          = 98;
            dim.RangeStatusPrefix = "Dim ";
            dim.RangeStatusSuffix = "%";
            dim.ControlUse        = ePairControlUse._Dim;
            dim.Render_Location   = new Enums.CAPIControlLocation {
                Column     = 1,
                Row        = 2,
                ColumnSpan = 3,
            };

            hs.DeviceVSP_AddPair(hsRef, offBtn);
            hs.DeviceVSP_AddPair(hsRef, onBtn);
            hs.DeviceVSP_AddPair(hsRef, lastBtn);
            hs.DeviceVSP_AddPair(hsRef, dim);

            device.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);
            device.MISC_Set(hs, Enums.dvMISC.IS_LIGHT);

            _plugin.IgnoreNextDeviceControl(hsRef);
            hs.SetDeviceValueByRef(hsRef, 0, false);

            Brightness = hsRef;
        }
예제 #23
0
        static internal bool Camera_Devices(string cString, Camera camera, List <DeviceDataPoint> deviceList)
        {
            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);
                if (id == camera.device_id && name == cString)
                {
                    Update_CameraDevice(camera, ddPoint);
                    return(false);
                }
            }

            DeviceClass dv = new DeviceClass();

            dv = GenericHomeSeerDevice(dv, cString, camera.name_long, camera.device_id, cString.Equals("Is Streaming"));
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);
            switch (name)
            {
            case "Is Streaming":
            {
                dv.set_Relationship(hs, Enums.eRelationship.Parent_Root);
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                        = new VSVGPairs.VSPair(ePairStatusControl.Both);
                SPair.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Render                 = Enums.CAPIControlType.Button;
                SPair.Value                  = 1;
                SPair.Status                 = "On";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 1;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 0;
                SPair.Status = "Off";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/on.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/off.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);
                break;
            }
            }

            //Update_CameraDevice(camera, dv, nest);


            return(true);
        }
예제 #24
0
        static internal bool Thermostat_Devices(string tString, Thermostat thermostat, Structures structure, List <DeviceDataPoint> deviceList, bool createDevices)
        {
            string name;
            string id;

            foreach (var ddPoint in deviceList)
            {
                id = GetDeviceKeys(ddPoint.device, out name);
                if (id == thermostat.device_id && name == tString)
                {
                    Update_ThermostatDevice(thermostat, structure, ddPoint);
                    return(false);
                }
            }
            if (!createDevices)
            {
                Log("Missing Homeseer device: " + tString + " please click on the Create Homeseer devices button on the Nest plugin configuration page", LogType.LOG_TYPE_WARNING);
                return(false);
            }

            var dv    = GenericHomeSeerDevice(tString, thermostat.name_long, thermostat.device_id, tString.Equals("Is Online"));
            var dvRef = dv.get_Ref(hs);

            id = GetDeviceKeys(dv, out name);
            switch (name)
            {
            case "Is Online":
            {
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API  = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Root;
                dv.set_DeviceType_Set(hs, dt);
                dv.set_Relationship(hs, Enums.eRelationship.Parent_Root);
                dv.set_Device_Type_String(hs, "Nest Root Thermostat");
                dv.MISC_Set(hs, Enums.dvMISC.STATUS_ONLY);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair          = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Value    = 1;
                SPair.Status   = "Online";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 0;
                SPair.Status = "Offline";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/ok.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/off.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "HVAC Mode":
            {
                dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Mode_Set;
                dt.Device_SubType = 0;
                dv.set_DeviceType_Set(hs, dt);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                        = new VSVGPairs.VSPair(ePairStatusControl.Both);
                SPair.PairType               = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Render                 = Enums.CAPIControlType.Button;
                SPair.Value                  = 0;
                SPair.Status                 = "Off";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 1;
                SPair.ControlUse             = ePairControlUse._ThermModeOff;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/off.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                if (thermostat.can_cool == true && thermostat.can_heat == true)
                {
                    SPair.Value  = 1;
                    SPair.Status = "Auto";
                    SPair.Render_Location.Row    = 1;
                    SPair.Render_Location.Column = 2;
                    SPair.ControlUse             = ePairControlUse._ThermModeAuto;
                    hs.DeviceVSP_AddPair(dvRef, SPair);

                    GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                    GPair.Set_Value = 1;
                    GPair.Graphic   = "/images/HomeSeer/contemporary/auto-mode.png";
                    hs.DeviceVGP_AddPair(dvRef, GPair);
                }

                if (thermostat.can_cool == true)
                {
                    SPair.Value  = 2;
                    SPair.Status = "Cool";
                    SPair.Render_Location.Row    = 1;
                    SPair.Render_Location.Column = 2;
                    SPair.ControlUse             = ePairControlUse._ThermModeCool;
                    hs.DeviceVSP_AddPair(dvRef, SPair);

                    GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                    GPair.Set_Value = 2;
                    GPair.Graphic   = "/images/HomeSeer/contemporary/cooling.png";
                    hs.DeviceVGP_AddPair(dvRef, GPair);
                }

                if (thermostat.can_heat == true)
                {
                    SPair.Value  = 3;
                    SPair.Status = "Heat";
                    SPair.Render_Location.Row    = 1;
                    SPair.Render_Location.Column = 2;
                    SPair.ControlUse             = ePairControlUse._ThermModeHeat;
                    hs.DeviceVSP_AddPair(dvRef, SPair);

                    GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                    GPair.Set_Value = 3;
                    GPair.Graphic   = "/images/HomeSeer/contemporary/heating.png";
                    hs.DeviceVGP_AddPair(dvRef, GPair);
                }

                SPair.Value  = 4;
                SPair.Status = "Eco";
                SPair.Render_Location.Row    = 1;
                SPair.Render_Location.Column = 2;
                SPair.ControlUse             = ePairControlUse.Not_Specified;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 4;
                GPair.Graphic   = "/images/HomeSeer/contemporary/custom-color.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);
                break;
            }

            case "Target Temperature":
            case "Target Temperature High":
            case "Target Temperature Low":
            case "Ambient Temperature":
            {
                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                   = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType          = VSVGPairs.VSVGPairType.Range;
                SPair.RangeStart        = -100;
                SPair.RangeEnd          = 150;
                SPair.RangeStatusSuffix = " °" + VSVGPairs.VSPair.ScaleReplace;
                SPair.HasScale          = true;
                hs.DeviceVSP_AddPair(dvRef, SPair);

                if (name.Equals("Target Temperature") || name.Equals("Target Temperature High") || name.Equals("Target Temperature Low"))
                {
                    dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES);

                    SPair                        = new VSVGPairs.VSPair(HomeSeerAPI.ePairStatusControl.Control);
                    SPair.PairType               = VSVGPairs.VSVGPairType.Range;
                    SPair.Render                 = Enums.CAPIControlType.TextBox_Number;
                    SPair.Render_Location.Row    = 1;
                    SPair.Render_Location.Column = 1;
                    SPair.Status                 = "Enter target:";
                    SPair.RangeStart             = 0;
                    SPair.RangeEnd               = 100;
                    if (name.Equals("Target Temperature Low"))
                    {
                        SPair.ControlUse = ePairControlUse._HeatSetPoint;
                        DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                        dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                        dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Setpoint;
                        dt.Device_SubType = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceSubType_Setpoint.Heating_1;
                        dv.set_DeviceType_Set(hs, dt);
                    }
                    else if (name.Equals("Target Temperature High"))
                    {
                        SPair.ControlUse = ePairControlUse._CoolSetPoint;
                        DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                        dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                        dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Setpoint;
                        dt.Device_SubType = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceSubType_Setpoint.Cooling_1;
                        dv.set_DeviceType_Set(hs, dt);
                    }
                    hs.DeviceVSP_AddPair(dvRef, SPair);
                }
                else if (name.Equals("Ambient Temperature"))
                {
                    DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                    dt.Device_API  = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                    dt.Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Temperature;
                    dv.set_DeviceType_Set(hs, dt);
                }

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType   = VSVGPairs.VSVGPairType.Range;
                GPair.RangeStart = -100;
                GPair.RangeEnd   = 150;
                GPair.Graphic    = "/images/HomeSeer/contemporary/thermometer-70.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Status":
            {
                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Graphic  = "/images/HomeSeer/contemporary/alarmheartbeat.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Humidity":
            {
                DeviceTypeInfo_m.DeviceTypeInfo dt = new DeviceTypeInfo_m.DeviceTypeInfo();
                dt.Device_API     = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Thermostat;
                dt.Device_Type    = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceType_Thermostat.Temperature;
                dt.Device_SubType = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceSubType_Temperature.Humidity;
                dv.set_DeviceType_Set(hs, dt);

                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair                   = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType          = VSVGPairs.VSVGPairType.Range;
                SPair.RangeStart        = 0;
                SPair.RangeEnd          = 100;
                SPair.RangeStatusSuffix = " %";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType   = VSVGPairs.VSVGPairType.Range;
                GPair.RangeStart = 0;
                GPair.RangeEnd   = 100;
                GPair.Graphic    = "/images/HomeSeer/contemporary/water.gif";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }

            case "Battery Health":
            {
                VSVGPairs.VSPair SPair = default(VSVGPairs.VSPair);
                SPair          = new VSVGPairs.VSPair(ePairStatusControl.Status);
                SPair.PairType = VSVGPairs.VSVGPairType.SingleValue;
                SPair.Value    = 1;
                SPair.Status   = "Ok";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                SPair.Value  = 0;
                SPair.Status = "Battery Low";
                hs.DeviceVSP_AddPair(dvRef, SPair);

                VSVGPairs.VGPair GPair = new VSVGPairs.VGPair();
                GPair.PairType  = VSVGPairs.VSVGPairType.SingleValue;
                GPair.Set_Value = 1;
                GPair.Graphic   = "/images/HomeSeer/contemporary/battery_100.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                GPair.Set_Value = 0;
                GPair.Graphic   = "/images/HomeSeer/contemporary/battery_25.png";
                hs.DeviceVGP_AddPair(dvRef, GPair);

                break;
            }
            }

            //Update_ThermostatDevice(thermostat, structure, dv, nest);


            return(true);
        }
예제 #25
0
        /// <summary>
        /// Add the protected, default VS/VG pairs WITHOUT overwriting any user added pairs unless absolutely necessary (because they conflict).
        /// </summary>
        /// <param name="refId">The device reference identifier for HomeSeer.</param>
        /// <param name="Pair">The value/status pair.</param>
        private void Default_VS_Pairs_AddUpdateUtil(int refId, VSVGPairs.VSPair Pair)
        {
            if ((Pair == null) || (refId < 1) || (!hs.DeviceExistsRef(refId)))
            {
                return;
            }

            try
            {
                VSVGPairs.VSPair Existing = hs.DeviceVSP_Get(refId, Pair.Value, Pair.ControlStatus);
                if (Existing != null)
                {
                    // This is unprotected, so it is a user's value/ status pair.
                    if ((Existing.ControlStatus == HomeSeerAPI.ePairStatusControl.Both) && (Pair.ControlStatus != HomeSeerAPI.ePairStatusControl.Both))
                    {
                        // The existing one is for BOTH, so try changing it to the opposite of what we are adding and then add it.
                        if (Pair.ControlStatus == HomeSeerAPI.ePairStatusControl.Status)
                        {
                            if (!hs.DeviceVSP_ChangePair(refId, Existing, HomeSeerAPI.ePairStatusControl.Control))
                            {
                                hs.DeviceVSP_ClearBoth(refId, Pair.Value);
                                hs.DeviceVSP_AddPair(refId, Pair);
                            }
                            else
                            {
                                hs.DeviceVSP_AddPair(refId, Pair);
                            }
                        }
                        else
                        {
                            if (!hs.DeviceVSP_ChangePair(refId, Existing, HomeSeerAPI.ePairStatusControl.Status))
                            {
                                hs.DeviceVSP_ClearBoth(refId, Pair.Value);
                                hs.DeviceVSP_AddPair(refId, Pair);
                            }
                            else
                            {
                                hs.DeviceVSP_AddPair(refId, Pair);
                            }
                        }
                    }
                    else if (Existing.ControlStatus == HomeSeerAPI.ePairStatusControl.Control)
                    {
                        // There is an existing one that is STATUS or CONTROL - remove it if ours is protected.
                        hs.DeviceVSP_ClearControl(refId, Pair.Value);
                        hs.DeviceVSP_AddPair(refId, Pair);
                    }
                    else if (Existing.ControlStatus == HomeSeerAPI.ePairStatusControl.Status)
                    {
                        // There is an existing one that is STATUS or CONTROL - remove it if ours is protected.
                        hs.DeviceVSP_ClearStatus(refId, Pair.Value);
                        hs.DeviceVSP_AddPair(refId, Pair);
                    }
                }
                else
                {
                    // There is not a pair existing, so just add it.
                    hs.DeviceVSP_AddPair(refId, Pair);
                }
            }
            catch (Exception)
            {
            }
        }