static internal DeviceClass GenericHomeSeerDevice(DeviceClass dv, string dvName, string dvName_long, string device_id) { int dvRef; Log("Creating Device: " + dvName_long + " " + dvName, LogType.LOG_TYPE_INFO); var DT = new DeviceTypeInfo_m.DeviceTypeInfo(); DT.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; if (dvName.Contains("Root")) { DT.Device_Type = 99; } hs.NewDeviceRef(dvName_long + " " + dvName); dvRef = hs.GetDeviceRefByName(dvName_long + " " + dvName); dv = (DeviceClass)hs.GetDeviceByRef(dvRef); dv.set_Address(hs, ""); SetDeviceKeys(dv, device_id, dvName); //dv.set_Code(hs, device_id + "-" + dvName_long + "-" + dvName); dv.set_Location(hs, "Thermostat"); dv.set_Location2(hs, "Ecobee"); dv.set_Interface(hs, IFACE_NAME); dv.set_Status_Support(hs, true); dv.set_Can_Dim(hs, false); dv.MISC_Set(hs, Enums.dvMISC.NO_LOG); dv.set_DeviceType_Set(hs, DT); dv.set_Relationship(hs, Enums.eRelationship.Child); return(dv); }
/// <summary> /// Creates the HS device. /// </summary> /// <param name="parent">The data for parent of device.</param> /// <param name="rootDeviceData">The root device data.</param> /// <param name="deviceData">The device data.</param> /// <returns>New Device</returns> private DeviceClass CreateDevice([AllowNull] DeviceClass parent, [AllowNull] RootDeviceData rootDeviceData, DeviceDataBase deviceData) { if (rootDeviceData != null) { LogDebug(Invariant($"Creating {deviceData.Name} under {rootDeviceData.Name}")); } else { LogDebug(Invariant($"Creating Root {deviceData.Name}")); } DeviceClass device = null; int refId = HS.NewDeviceRef(rootDeviceData != null ? Invariant($"{rootDeviceData.Name} {deviceData.Name}") : deviceData.Name); if (refId > 0) { device = (DeviceClass)HS.GetDeviceByRef(refId); string address = rootDeviceData != null?CreateChildAddress(rootDeviceData.Name, deviceData.Name) : deviceData.Name; device.set_Address(HS, address); device.set_Device_Type_String(HS, deviceData.HSDeviceTypeString); var deviceType = new DeviceTypeInfo_m.DeviceTypeInfo(); deviceType.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; deviceType.Device_Type = deviceData.HSDeviceType; device.set_DeviceType_Set(HS, deviceType); device.set_Interface(HS, Name); device.set_InterfaceInstance(HS, string.Empty); device.set_Last_Change(HS, DateTime.Now); device.set_Location(HS, Name); var pairs = deviceData.StatusPairs; foreach (var pair in pairs) { HS.DeviceVSP_AddPair(refId, pair); } var gPairs = deviceData.GraphicsPairs; foreach (var gpair in gPairs) { HS.DeviceVGP_AddPair(refId, gpair); } device.MISC_Set(HS, Enums.dvMISC.STATUS_ONLY); device.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES); device.MISC_Clear(HS, Enums.dvMISC.AUTO_VOICE_COMMAND); device.MISC_Clear(HS, Enums.dvMISC.SET_DOES_NOT_CHANGE_LAST_CHANGE); device.set_Status_Support(HS, false); if (parent != null) { parent.set_Relationship(HS, Enums.eRelationship.Parent_Root); device.set_Relationship(HS, Enums.eRelationship.Child); device.AssociatedDevice_Add(HS, parent.get_Ref(HS)); parent.AssociatedDevice_Add(HS, device.get_Ref(HS)); } deviceData.SetInitialData(HS, device); } return(device); }
public void Create(string name, bool force) { string addr = "AK_" + name; deviceHS = controller.GetHSDeviceByAddress(addr, out bool created, create: true, name: name); RefId = deviceHS.get_Ref(null); if (created) { DeviceTypeInfo_m.DeviceTypeInfo DT = new DeviceTypeInfo_m.DeviceTypeInfo(); DT.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Security; DT.Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; deviceHS.set_DeviceType_Set(hs, DT); deviceHS.set_InterfaceInstance(hs, ""); deviceHS.set_Status_Support(hs, false);//Set to True if the devices can be polled, false if not deviceHS.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES); deviceHS.MISC_Set(hs, Enums.dvMISC.NO_LOG); Interface = controller.plugin.Name; Type = "Virtual"; Address = addr; //Location = "EnOcean"; //Location2 = "EnOcean"; //LastChange = DateTime.Now; } controller.UsedDevices[RefId] = this; }
public string MakeNewRule() { var dv = Instance.host.NewDeviceRef("R"); Scheduler.Classes.DeviceClass newDevice = (Scheduler.Classes.DeviceClass)Instance.host.GetDeviceByRef(dv); newDevice.set_InterfaceInstance(Instance.host, Instance.name); newDevice.set_Name(Instance.host, "Type Meter Calc " + dv); //newDevice.set_Location2(Instance.host, "ScratchpadRule"); newDevice.set_Location(Instance.host, "Utilities"); newDevice.set_Location2(Instance.host, "Calcs"); //newDevice.set_Interface(Instance.host, "Modbus Configuration");//Put here the registered name of the page for what we want in the Modbus tab!!! So easy! newDevice.set_Interface(Instance.host, Util.IFACE_NAME); //Needed to link device to plugin, so the tab calls back to the correct hardcoded homeseer function //newDevice.set_InterfaceInstance()'' SET INTERFACE INSTANCE newDevice.set_Relationship(Instance.host, Enums.eRelationship.Not_Set); newDevice.MISC_Set(Instance.host, Enums.dvMISC.NO_LOG); newDevice.MISC_Set(Instance.host, Enums.dvMISC.SHOW_VALUES); // newDevice.MISC_Set(Instance.host, Enums.dvMISC.HIDDEN); HomeSeerAPI.PlugExtraData.clsPlugExtraData EDO = new PlugExtraData.clsPlugExtraData(); // EDO = newDevice.get_PlugExtraData_Get(Instance.host); string ruleString = makeNewRules(); string userNote = newDevice.get_UserNote(Instance.host); userNote = userNote.Split("PLUGIN EXTRA DATA:".ToCharArray())[0]; userNote += "PLUGIN EXTRA DATA:" + ruleString.ToString(); newDevice.set_UserNote(Instance.host, userNote); EDO.AddNamed("SSIDKey", ruleString); newDevice.set_PlugExtraData_Set(Instance.host, EDO); // newDevice.set_Device_Type_String(Instance.host, makeNewModbusGateway()); var DevINFO = new DeviceTypeInfo_m.DeviceTypeInfo(); DevINFO.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; newDevice.set_DeviceType_Set(Instance.host, DevINFO); Instance.Devices.Add(new SiidDevice(Instance, newDevice)); MakeStewardVSP(dv); return("refresh"); }
public bool Create(string name, bool force, string type = "Virtual", eDeviceAPI Device_API = eDeviceAPI.Plug_In, int Device_Type = (int)eDeviceAPI.Plug_In, int Device_SubType = 0, string Device_SubType_Description = "" ) { string addr = ADDR_PREFIX + name; deviceHS = controller.GetHSDeviceByAddress(addr, out bool created, create: true, name: name); RefId = deviceHS.get_Ref(null); if (created) { DeviceTypeInfo_m.DeviceTypeInfo DT = new DeviceTypeInfo_m.DeviceTypeInfo() { Device_API = Device_API, Device_Type = Device_Type, Device_SubType = Device_SubType, Device_SubType_Description = Device_SubType_Description }; deviceHS.set_DeviceType_Set(hs, DT); deviceHS.set_InterfaceInstance(hs, ""); deviceHS.set_Status_Support(hs, false);//Set to True if the devices can be polled, false if not deviceHS.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES | Enums.dvMISC.NO_LOG); deviceHS.MISC_Clear(hs, Enums.dvMISC.AUTO_VOICE_COMMAND); Interface = controller.plugin.Name; Type = type; Address = addr; //Location = "EnOcean"; //Location2 = "EnOcean"; //LastChange = DateTime.Now; } controller.UsedDevices[RefId] = this; return(created); }
/// <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); }
public Scheduler.Classes.DeviceClass createHSDevice(String Name, EnOceanDeviceType type, String id = "") { var devRefId = HS.NewDeviceRef(Name); var newDev = (Scheduler.Classes.DeviceClass)HS.GetDeviceByRef(devRefId); var DT = new DeviceTypeInfo_m.DeviceTypeInfo(); DT.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; DT.Device_Type = 33; DT.Device_SubType = (int)type; newDev.set_DeviceType_Set(HS, DT); newDev.set_Address(HS, id); newDev.set_Interface(HS, Constants.PLUGIN_STRING_NAME); newDev.set_InterfaceInstance(HS, ""); newDev.set_Last_Change(HS, DateTime.Now); newDev.set_Location(HS, "EnOcean"); newDev.set_Location2(HS, "EnOcean"); return(newDev); }
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); }
public Scheduler.Classes.DeviceClass createHSDevice(String Name, EnOceanDeviceType type, String id = "") { var devRefId = HS.NewDeviceRef(Name); var newDev = (Scheduler.Classes.DeviceClass)HS.GetDeviceByRef(devRefId); var DT = new DeviceTypeInfo_m.DeviceTypeInfo(); DT.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; DT.Device_Type = 33; DT.Device_SubType = (int)type; newDev.set_DeviceType_Set(HS, DT); newDev.set_Address(HS, id); newDev.set_Interface(HS, Constants.PLUGIN_STRING_NAME); newDev.set_InterfaceInstance(HS, ""); newDev.set_Last_Change(HS, DateTime.Now); newDev.set_Location(HS, "EnOcean"); newDev.set_Location2(HS, "EnOcean"); return newDev; }
/// <summary> /// Creates the HS device. /// </summary> /// <param name="optionalParentRefId">The optional parent reference identifier.</param> /// <param name="name">The name of device</param> /// <param name="deviceAddress">The device address.</param> /// <param name="deviceData">The device data.</param> /// <returns> /// New Device /// </returns> private DeviceClass CreateDevice(int?optionalParentRefId, string name, string deviceAddress, DeviceDataBase deviceData) { Trace.TraceInformation(Invariant($"Creating Device with Address:{deviceAddress}")); DeviceClass device = null; int refId = HS.NewDeviceRef(name); if (refId > 0) { device = (DeviceClass)HS.GetDeviceByRef(refId); string address = deviceAddress; device.set_Address(HS, address); device.set_Device_Type_String(HS, deviceData.HSDeviceTypeString); var deviceType = new DeviceTypeInfo_m.DeviceTypeInfo { Device_API = deviceData.DeviceAPI, Device_Type = deviceData.HSDeviceType }; device.set_DeviceType_Set(HS, deviceType); device.set_Interface(HS, PluginData.PlugInName); device.set_InterfaceInstance(HS, string.Empty); device.set_Last_Change(HS, DateTime.Now); device.set_Location(HS, PluginData.PlugInName); device.MISC_Set(HS, Enums.dvMISC.SHOW_VALUES); if (deviceData.StatusDevice) { device.MISC_Set(HS, Enums.dvMISC.STATUS_ONLY); device.MISC_Clear(HS, Enums.dvMISC.AUTO_VOICE_COMMAND); device.MISC_Clear(HS, Enums.dvMISC.SET_DOES_NOT_CHANGE_LAST_CHANGE); device.set_Status_Support(HS, true); } else { device.MISC_Set(HS, Enums.dvMISC.SET_DOES_NOT_CHANGE_LAST_CHANGE); device.MISC_Set(HS, Enums.dvMISC.AUTO_VOICE_COMMAND); device.set_Status_Support(HS, false); } var pairs = deviceData.StatusPairs; foreach (var pair in pairs) { HS.DeviceVSP_AddPair(refId, pair); } var gPairs = deviceData.GraphicsPairs; foreach (var gpair in gPairs) { HS.DeviceVGP_AddPair(refId, gpair); } DeviceClass parent = null; if (optionalParentRefId.HasValue) { parent = (DeviceClass)HS.GetDeviceByRef(optionalParentRefId.Value); } if (parent != null) { parent.set_Relationship(HS, Enums.eRelationship.Parent_Root); device.set_Relationship(HS, Enums.eRelationship.Child); device.AssociatedDevice_Add(HS, parent.get_Ref(HS)); parent.AssociatedDevice_Add(HS, device.get_Ref(HS)); } deviceData.SetOnDeviceCreateData(HS, CameraSettings, refId); } return(device); }
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); }
private int CreateBasicDevice() { try { //Creating a brand new device, and get the actual device from the device reference var fullName = Location + GetName() + Location2 + GetName() + Name + Unique; var dv = (DeviceClass)_hs.GetDeviceByRef(_hs.NewDeviceRef(fullName)); var dvRef = dv.get_Ref(_hs); //Setting the type to plugin device var typeInfo = new DeviceTypeInfo_m.DeviceTypeInfo { Device_Type = (int)DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In, Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In, Device_SubType_Description = Name }; dv.set_DeviceType_Set(_hs, typeInfo); var pluginExtraData = new PlugExtraData.clsPlugExtraData(); //var pluginExtraData = new PlugExtraData.clsPlugExtraData(); if (PEDStorage.Count > 0) { //PED storage got something foreach (KeyValuePair <string, string> pair in PEDStorage) { Console.WriteLine("Found PED"); pluginExtraData.AddNamed(pair.Key.ToString(), pair.Value.ToString()); } } dv.set_PlugExtraData_Set(_hs, pluginExtraData); dv.set_Interface(_hs, GetName()); //Don't change this, or the device won't be associated with your plugin dv.set_InterfaceInstance(_hs, InstanceFriendlyName()); //Don't change this, or the device won't be associated with that particular instance dv.set_Device_Type_String(_hs, Name); dv.set_Can_Dim(_hs, false); //Setting the name and locations dv.set_Name(_hs, Name); dv.set_Location(_hs, Location); dv.set_Location2(_hs, Location2); //Misc options dv.set_Status_Support(_hs, true); //Set to True if the devices can be polled, False if not. (See PollDevice in hspi.vb) dv.MISC_Set(_hs, Enums.dvMISC.SHOW_VALUES); //If not set, device control options will not be displayed. //dv.MISC_Set(_hs, Enums.dvMISC.NO_LOG); //As default, we don't want to Log every device value change to the Log //Committing to the database, clear value-status-pairs and graphic-status pairs _hs.SaveEventsDevices(); _hs.DeviceVSP_ClearAll(dvRef, true); _hs.DeviceVGP_ClearAll(dvRef, true); Id = dvRef; return(dvRef); //Return the reference } catch (Exception ex) { throw new Exception("Error creating basic device: " + ex.Message, ex); } }
public string addSubrule(string data) { //Make a new rule, but make it in service to an existing rule: var dv = Instance.host.NewDeviceRef("R"); Scheduler.Classes.DeviceClass newDevice = (Scheduler.Classes.DeviceClass)Instance.host.GetDeviceByRef(dv); newDevice.set_InterfaceInstance(Instance.host, Instance.name); newDevice.set_Name(Instance.host, "Type Meter Rate" + dv); // newDevice.set_Location2(Instance.host, "ScratchpadSubRule"); newDevice.set_Location(Instance.host, "Utilities"); newDevice.set_Location2(Instance.host, "Rates"); //newDevice.set_Interface(Instance.host, "Modbus Configuration");//Put here the registered name of the page for what we want in the Modbus tab!!! So easy! newDevice.set_Interface(Instance.host, Util.IFACE_NAME); //Needed to link device to plugin, so the tab calls back to the correct hardcoded homeseer function //newDevice.set_InterfaceInstance()'' SET INTERFACE INSTANCE newDevice.set_Relationship(Instance.host, Enums.eRelationship.Not_Set); newDevice.MISC_Set(Instance.host, Enums.dvMISC.NO_LOG); newDevice.MISC_Set(Instance.host, Enums.dvMISC.SHOW_VALUES); // newDevice.MISC_Set(Instance.host, Enums.dvMISC.HIDDEN); HomeSeerAPI.PlugExtraData.clsPlugExtraData EDO = new PlugExtraData.clsPlugExtraData(); // EDO = newDevice.get_PlugExtraData_Get(Instance.host); string ruleString = makeNewRules(); string userNote = newDevice.get_UserNote(Instance.host); userNote = userNote.Split("PLUGIN EXTRA DATA:".ToCharArray())[0]; userNote += "PLUGIN EXTRA DATA:" + ruleString.ToString(); newDevice.set_UserNote(Instance.host, userNote); EDO.AddNamed("SSIDKey", ruleString); newDevice.set_PlugExtraData_Set(Instance.host, EDO); // newDevice.set_Device_Type_String(Instance.host, makeNewModbusGateway()); var DevINFO = new DeviceTypeInfo_m.DeviceTypeInfo(); DevINFO.Device_API = DeviceTypeInfo_m.DeviceTypeInfo.eDeviceAPI.Plug_In; newDevice.set_DeviceType_Set(Instance.host, DevINFO); Instance.Devices.Add(new SiidDevice(Instance, newDevice)); MakeStewardVSP(dv); StringBuilder stb = new StringBuilder(); var page = this; string GatewayID = data.Split("_".ToCharArray())[1]; SiidDevice GateWay = SiidDevice.GetFromListByID(Instance.Devices, Convert.ToInt32(GatewayID)); Scheduler.Classes.DeviceClass Gateway = GateWay.Device; //Should keep in gateway a list of devices Gateway.AssociatedDevice_Add(Instance.host, dv); //This is totally working actually return("refresh"); stb.Append("<meta http-equiv=\"refresh\" content = \"0; URL='/deviceutility?ref=" + dv + "&edit=1'\" />"); // stb.Append("<a id = 'LALA' href='/deviceutility?ref=" + dv + "&edit=1'/><script>LALA.click()</script> "); page.AddBody(stb.ToString()); return(page.BuildPage()); }