public InstanceHolder(HSPI HSPI, HSCF.Communication.ScsServices.Client.IScsServiceClient <IHSApplication> Client, HomeSeerAPI.IAppCallbackAPI ClientCallback, HomeSeerAPI.IHSApplication Host, string Name) { name = Name; hspi = HSPI; hspi.OurInstanceFriendlyName = name; ajaxName = name; if (name != "") { ajaxName = ":" + name; } client = Client; callback = ClientCallback; host = Host; Devices = GetDevices(this); modPage = new ModbusDevicePage("ModbusDevicePage", this); scrPage = new ScratchpadDevicePage("ScratchpadPage", this); modAjax = new MosbusAjaxReceivers(this); bacnetDevices = new BACnetDevices(BACnetDevices.BaseUrl, this); bacnetDataService = new BACnetDataService(BACnetDataService.BaseUrl, this); bacnetHomeSeerDevices = new BACnetHomeSeerDevices(BACnetHomeSeerDevices.BaseUrl, this); siidPage = new SIID_Page(Util.IFACE_NAME, this); //bacnetDevices = new BACnetDevices(BACnetDataService.BaseUrl + this.ajaxName.Replace(":", "_"), this); //bacnetDataService = new BACnetDataService(BACnetDataService.BaseUrl + this.ajaxName.Replace(":", "_"), this); //bacnetHomeSeerDevices = new BACnetHomeSeerDevices(BACnetHomeSeerDevices.BaseUrl + this.ajaxName.Replace(":", "_"), this); //CPU use is high, so try to minimize iterating through devices //Also minimize calls to and from the device's plugin extra data store. Keep parallel copy, maybe only update when change }
public SIIDDevice(SiidDevice SiidDev, InstanceHolder instance) : base(SiidDev, instance) { Instance = instance; Scheduler.Classes.DeviceClass Device = SiidDev.Device; var EDO = SiidDev.Extra; System.Collections.Specialized.NameValueCollection parts = HttpUtility.ParseQueryString(EDO.GetNamed("SSIDKey").ToString()); //Need to grab the key order from somewhere string[] Orderlist = null; switch (parts["Type"]) { case ("Modbus Gateway"): { Orderlist = ModbusMaster.Attributes; break; } case ("Modbus Device"): { Orderlist = ModbusDevice.Attributes; break; } case ("BACnet Device"): case ("BACnet Object"): { //Need to export everything that we would need in order to import. All of bacnetNodeData, essentially. //To this end, maybe it would be easiest to also store device-level stuff in object nodes - i.e. device IP address Orderlist = BACnetObject.Attributes; System.Collections.Specialized.NameValueCollection bacnetNodeData = BACnetDevices.ParseJsonString(parts["BACnetNodeData"]); // HttpUtility.ParseQueryString(parts["BACnetNodeData"]); foreach (var Ent in Orderlist) { listOfAttributes.Add(Ent); switch (Ent) { case "Type": Values[Ent] = parts[Ent]; break; case "NetworkIPAddress": Values[Ent] = bacnetNodeData["ip_address"]; break; case "DeviceIPAddress": Values[Ent] = bacnetNodeData["device_ip_address"]; break; case "DeviceUDPPort": Values[Ent] = bacnetNodeData["device_udp_port"]; break; case "DeviceInstance": Values[Ent] = bacnetNodeData["device_instance"]; break; case "ObjectType": Values[Ent] = bacnetNodeData["object_type_string"]; break; case "ObjectInstance": Values[Ent] = bacnetNodeData["object_instance"]; break; case "ObjectName": Values[Ent] = bacnetNodeData["object_name"]; break; case "PollInterval": Values[Ent] = bacnetNodeData["polling_interval"]; break; case "RawValue": case "ProcessedValue": Values[Ent] = parts[Ent]; break; } } return; //Orderlist = BACnetDevice.Attributes; //break; } case ("Scratchpad"): { Orderlist = ScratchpadDevice.Attributes; break; } } foreach (var Ent in Orderlist) { Values[Ent] = parts[Ent]; listOfAttributes.Add(Ent); } }