From 3e7b8ae4a4bbd9031acead61a2c8e9618e4a0d3d Mon Sep 17 00:00:00 2001 From: Alex Dresko Date: Tue, 28 Feb 2017 14:46:33 -0500 Subject: [PATCH 1/4] Committing to track changes --- HSPI/HSPI.csproj | 1 + HSPI/HSPIBase2.cs | 649 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 650 insertions(+) create mode 100644 HSPI/HSPIBase2.cs diff --git a/HSPI/HSPI.csproj b/HSPI/HSPI.csproj index 9374ae2..98e479d 100644 --- a/HSPI/HSPI.csproj +++ b/HSPI/HSPI.csproj @@ -73,6 +73,7 @@ + diff --git a/HSPI/HSPIBase2.cs b/HSPI/HSPIBase2.cs new file mode 100644 index 0000000..2078b9f --- /dev/null +++ b/HSPI/HSPIBase2.cs @@ -0,0 +1,649 @@ +// Copyright (C) 2016 SRG Technology, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using HomeSeerAPI; +using HSCF.Communication.Scs.Communication.EndPoints.Tcp; +using HSCF.Communication.ScsServices.Client; + +namespace HSPI +{ + /// + /// Base class for HSPI plugin. + /// + /// A new class with the name HSPI should be derived from this base class. + /// + /// The namespace of the new class must be the same as the EXE filename (without extension). + /// This new class must be public, named HSPI, and be in the root of the namespace. + /// + /// + /// Adapted from C# sample generated by Marcus Szolkowski. + /// See thread "Really simple C# sample plugin available here!" http://board.homeseer.com/showthread.php?t=178122. + /// + /// + public class HSPIBase2 : HSPIBase + { + #region Homeseer interface variables + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Homeseer client interface + protected IScsServiceClient hsClient; + /// Homeseer callback client interface - not normally used + protected IScsServiceClient callbackClient; + /// Homeseer application interface + protected HomeSeerAPI.IHSApplication hs; + /// Homeseer callback interface + protected HomeSeerAPI.IAppCallbackAPI callback; + + /// Name for this plugin within Homeseer + protected string IFACE_NAME = "HspiTemplate"; + /// Name for the initialization file + protected string INI_File = "HspiTemplate.ini"; + /// Name for this instance. This plugin does not support multiple instances. + protected string INSTANCE_NAME = ""; + + /// Indication of whether to shutdown this plugin + internal bool Shutdown = false; + #endregion + + /// + /// Initializes a new instance of the class. + /// + public HSPIBase2() + { + // Can't do much here because this class gets loaded and then destroyed by Homeseer during initial discovery & reflection. + // Instead wait to be initialized during the Connect and InitIO methods, called by the console wrapper and homeseer respectively. + } + + #region Non plugin methods - Connection to Homeseer + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Connects to Homeseer at the specified server address and port. + /// This is called by the console wrapper. + /// + /// The server address. + /// The server port. + /// Error connecting homeseer SCS client + /// Error connecting callback SCS client + /// Error connecting homeseer to our plugin + public virtual void Connect(string serverAddress, int serverPort) + { + // Create our main connection to the homeseer TCP communication framework + // part 1 - hs object Proxy + try + { + hsClient = ScsServiceClientBuilder.CreateClient(new ScsTcpEndPoint(serverAddress, serverPort), this); + hsClient.Connect(); + hs = hsClient.ServiceProxy; + double APIVersion = hs.APIVersion; // just to make sure our connection is valid + } + catch (Exception ex) + { + throw new Exception("Error connecting homeseer SCS client: " + ex.Message, ex); + } + + // part 2 - callback object Proxy + try + { + callbackClient = ScsServiceClientBuilder.CreateClient(new ScsTcpEndPoint(serverAddress, serverPort), this); + callbackClient.Connect(); + callback = callbackClient.ServiceProxy; + double APIVersion = callback.APIVersion; // just to make sure our connection is valid + } + catch (Exception ex) + { + throw new Exception("Error connecting callback SCS client: " + ex.Message, ex); + } + + // Establish the reverse connection from homeseer back to our plugin + try + { + hs.Connect(IFACE_NAME, INSTANCE_NAME); + } + catch (Exception ex) + { + throw new Exception("Error connecting homeseer to our plugin: " + ex.Message, ex); + } + + } + + /// + /// Test our SCS client connection: is connected. + /// The console wrapper will call this periodically to check if there is a problem. + /// + /// true if connected; otherwise, false. + public virtual bool Connected + { + get + { + return hsClient.CommunicationState == HSCF.Communication.Scs.Communication.CommunicationStates.Connected; + } + } + #endregion + + #region Required Plugin Methods - Information & Initialisation + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Get the name of this plugin + public virtual string Name + { + get { return IFACE_NAME; } + } + + /// + /// Get the instance name of this plugin. Only valid if SupportsMultipleInstances is true. + /// Multiple instance are not supported by this plugin. + /// + /// System.String + public virtual string InstanceFriendlyName() + { + return INSTANCE_NAME; + } + + /// + /// HomeSeer may call this function at any time to get the status of the plug-in. + /// Normally the status is displayed on the Interfaces page. + /// intStatus field: OK, INFO, WARNING, CRITICAL, FATAL. + /// sStatus field: string. + /// + /// IPlugInAPI.strInterfaceStatus + /// + /// + public virtual IPlugInAPI.strInterfaceStatus InterfaceStatus() + { + IPlugInAPI.strInterfaceStatus s = new IPlugInAPI.strInterfaceStatus(); + s.intStatus = IPlugInAPI.enumInterfaceStatus.OK; + return s; + } + + /// + /// API's that this plugin supports. + /// This is a bit field. + /// All plugins must set CA_IO for I/O support. + /// Other values: CA_Security, CA_Thermostat, CA_Music, CA_SourceSwitch. + /// + /// System.Int32 + public virtual int Capabilities() + { + return (int)HomeSeerAPI.Enums.eCapabilities.CA_IO; + } + + /// + /// Plugin licensing mode: + /// 1 = plugin is not licensed, + /// 2 = plugin is licensed and user must purchase a license but there is a 30-day trial. + /// + /// System.Int32 + public virtual int AccessLevel() + { + return 1; + } + + /// Indicate if Homeseer should manage a COM port for the plugin. + /// true if COM port required; otherwise, false. + public virtual bool HSCOMPort + { + get { return false; } + } + + /// + /// Indicate if the plugin supports the ability to add devices through the Add Device link on the device utility page. + /// If true, a tab appears on the add device page that allows the user to configure specific options for the new device. + /// + public virtual bool SupportsAddDevice() + { + return false; + } + + /// + /// Indicate if the plugin allows for configuration of the devices via the device utility page. + /// This will allow you to generate some HTML controls that will be displayed to the user for modifying the device. + /// + public virtual bool SupportsConfigDevice() + { + return false; + } + + /// Indicate if the plugin manages all devices in the system. + public virtual bool SupportsConfigDeviceAll() + { + return false; + } + + /// + /// Indicate if the plugin supports multiple instances. + /// The plugin may be launched multiple times and will be passed a unique instance name as a command line parameter to the Main function. + /// + public virtual bool SupportsMultipleInstances() + { + return false; + } + + /// Indicate if plugin supports multiple instances using a single executable. + public virtual bool SupportsMultipleInstancesSingleEXE() + { + return false; + } + + /// + /// HSTouch uses the Generic Event callback in some music plug-ins so that it can be notified of when a song changes, + /// rather than having to repeatedly query the music plug-in for the current song status. + /// If this property is present (and returns True), especially in a Music plug-in, + /// then HSTouch (and other plug-ins) will know that your HSEvent procedure can handle generic callbacks. + /// + public virtual bool RaisesGenericCallbacks() + { + return false; + } + + /// + /// When you wish to have HomeSeer call back in to your plug-in or application when certain events happen in the system, + /// call the RegisterEventCB procedure and provide it with event you wish to monitor. + /// See RegisterEventCB for more information and an example and event types. + /// + public virtual void HSEvent(Enums.HSEvent EventType, object[] parameters) + { + } + + /// + /// Initialize the plugin and associated hardware/software, start any threads + /// + /// The COM port for the plugin if required. + /// Warning message or empty for success. + public virtual string InitIO(string port) + { + return ""; + } + + /// + /// If a device is owned by your plug-in (interface property set to the name of the plug-in) and the device's status_support property is set to True, + /// then this procedure will be called in your plug-in when the device's status is being polled, such as when the user clicks "Poll Devices" on the device status page. + /// Normally your plugin will automatically keep the status of its devices updated. + /// There may be situations where automatically updating devices is not possible or CPU intensive. + /// In these cases the plug-in may not keep the devices updated. HomeSeer may then call this function to force an update of a specific device. + /// This request is normally done when a user displays the status page, or a script runs and needs to be sure it has the latest status. + /// + /// Reference Id for the device + /// IPlugInAPI.PollResultInfo + public virtual IPlugInAPI.PollResultInfo PollDevice(int dvref) + { + IPlugInAPI.PollResultInfo pollResult = new IPlugInAPI.PollResultInfo(); + pollResult.Result = IPlugInAPI.enumPollResult.Device_Not_Found; + pollResult.Value = 0; + + return pollResult; + } + + /// + /// SetIOMulti is called by HomeSeer when a device that your plugin owns is controlled. + /// Your plugin owns a device when it's INTERFACE property is set to the name of your plugin. + /// + /// + /// This is a collection of CAPIControl objects, one object for each device that needs to be controlled. + /// Look at the ControlValue property to get the value that device needs to be set to. + /// + public virtual void SetIOMulti(List colSend) + { + // homeseer will inform us when the one of our devices has changed. Push that change through to the field. + } + + /// + /// Called when HomeSeer is not longer using the plugin. + /// This call will be made if a user disables a plugin from the interfaces configuration page and when HomeSeer is shut down. + /// + public virtual void ShutdownIO() + { + // let our console wrapper know we are finished + Shutdown = true; + } + #endregion + + #region Required Plugin Methods - Actions, Triggers & Conditions + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Called in your plugin by HomeSeer whenever the user uses the search function of HomeSeer, and your plugin is loaded and initialized. + /// Unlike ActionReferencesDevice and TriggerReferencesDevice, this search is not being specific to a device, + /// it is meant to find a match anywhere in the resources managed by your plugin. + /// This could include any textual field or object name that is utilized by the plugin. + /// + /// The search string. + /// if set to true then the search string is a regular expression. + /// Array of SearchReturn items describing what was found and where it was found. + public virtual SearchReturn[] Search(string SearchString, bool RegEx) + { + return null; + } + + /// + /// The HomeSeer events page has an option to set the editing mode to "Advanced Mode". + /// This is typically used to enable options that may only be of interest to advanced users or programmers. + /// The Set in this function is called when advanced mode is enabled. + /// Your plugin can also enable this mode if an advanced selection was saved and needs to be displayed. + /// + public virtual bool ActionAdvancedMode + { + get { return false; } + set { /* do nothing */ } + } + + /// Indicate if the plugin has any triggers. + public virtual bool HasTriggers + { + get { return false; } + } + + /// Number of triggers the plugin supports. + public virtual int TriggerCount + { + get { return 0; } + } + + /// + /// This function is called from the HomeSeer event page when an event is in edit mode. + /// Your plugin needs to return HTML controls so the user can make action selections. + /// Normally this is one of the HomeSeer jquery controls such as a clsJquery.jqueryCheckbox. + /// + /// A unique string that can be used with your HTML controls to identify the control. All controls need to have a unique ID. + /// Object that contains information about the action like current selections. + /// HTML controls that need to be displayed so the user can select the action parameters. + public virtual string ActionBuildUI(string sUnique, IPlugInAPI.strTrigActInfo ActInfo) + { + return ""; + } + + /// + /// Return TRUE if the given action is configured properly. + /// There may be times when a user can select invalid selections for the action and in this case you would return FALSE so HomeSeer will not allow the action to be saved. + /// + /// Object describing the action. + public virtual bool ActionConfigured(IPlugInAPI.strTrigActInfo ActInfo) + { + return true; + } + + /// The number of actions the plugin supports. + public virtual int ActionCount() + { + return 0; + } + + public virtual string ActionFormatUI(IPlugInAPI.strTrigActInfo ActInfo) + { + return ""; + } + + /// + /// When a user edits your event actions in the HomeSeer events, this function is called to process the selections. + /// + /// A collection of name value pairs that include the user's selections. + /// Object that contains information about the action. + /// Object that holds the parsed information for the action. HomeSeer will save this information for you in the database. + public virtual IPlugInAPI.strMultiReturn ActionProcessPostUI(NameValueCollection PostData, IPlugInAPI.strTrigActInfo TrigInfoIN) + { + return new IPlugInAPI.strMultiReturn(); + } + + /// Indicate if the given devices is referenced by the given action. + public virtual bool ActionReferencesDevice(IPlugInAPI.strTrigActInfo ActInfo, int dvRef) + { + return false; + } + + /// + /// Return the name of the action given an action number. The name of the action will be displayed in the HomeSeer events actions list. + /// + /// The number of the action. Each action is numbered, starting at 1. + /// Name of the action. + public virtual string get_ActionName(int ActionNumber) + { + return ""; + } + + /// + /// Set to true if the trigger is being used as a CONDITION. + /// Check this value in BuildUI and other procedures to change how the trigger is rendered if it is being used as a condition or a trigger. + /// + public virtual bool get_Condition(IPlugInAPI.strTrigActInfo TrigInfo) + { + return false; + } + + public virtual void set_Condition(IPlugInAPI.strTrigActInfo TrigInfo, bool Value) + { + } + + /// Indicate if the given trigger can also be used as a condition for the given grigger number. + public virtual bool get_HasConditions(int TriggerNumber) + { + return false; + } + + /// Return the HTML controls for a given trigger. + public virtual string TriggerBuildUI(string sUnique, IPlugInAPI.strTrigActInfo TrigInfo) + { + return ""; + } + + /// After the trigger has been configured, this function is called in your plugin to display the configured trigger. + /// Text that describes the given trigger. + public virtual string TriggerFormatUI(IPlugInAPI.strTrigActInfo TrigInfo) + { + return ""; + } + + /// + /// Process a post from the events web page when a user modifies any of the controls related to a plugin trigger. + /// After processing the user selctions, create and return a strMultiReturn object. + /// + public virtual IPlugInAPI.strMultiReturn TriggerProcessPostUI(NameValueCollection PostData, IPlugInAPI.strTrigActInfo TrigInfoIN) + { + return new IPlugInAPI.strMultiReturn(); + } + + /// Indicate if the given device is referenced by the given trigger. + public virtual bool TriggerReferencesDevice(IPlugInAPI.strTrigActInfo TrigInfo, int dvRef) + { + return false; + } + + /// + /// Although this appears as a function that would be called to determine if a trigger is true or not, it is not. + /// Triggers notify HomeSeer of trigger states using TriggerFire , but Triggers can also be conditions, and that is where this is used. + /// If this function is called, TrigInfo will contain the trigger information pertaining to a trigger used as a condition. + /// When a user's event is triggered and it has conditions, the conditions need to be evaluated immediately, + /// so there is not regularity with which this function may be called in your plugin. + /// It may be called as often as once per second or as infrequently as once in a blue moon. + /// + public virtual bool TriggerTrue(IPlugInAPI.strTrigActInfo TrigInfo) + { + return false; + } + + /// Return the number of sub triggers your plugin supports. + public virtual int get_SubTriggerCount(int TriggerNumber) + { + return 0; + } + + /// Return the text name of the sub trigger given its trugger number and sub trigger number. + public virtual string get_SubTriggerName(int TriggerNumber, int SubTriggerNumber) + { + return ""; + } + + /// Indicate if the given trigger is configured properly. + public virtual bool get_TriggerConfigured(IPlugInAPI.strTrigActInfo TrigInfo) + { + return true; + } + + /// Return the name of the given trigger based on the trigger number. + public virtual string get_TriggerName(int TriggerNumber) + { + return ""; + } + + /// + /// When an event is triggered, this function is called to carry out the selected action. + /// Use the ActInfo parameter to determine what action needs to be executed then execute this action. + /// + public virtual bool HandleAction(IPlugInAPI.strTrigActInfo ActInfo) + { + return false; + } + + /// + /// If your plugin is registered as a Speak proxy plugin, then when HomeSeer is asked to speak something, + /// it will pass the speak information to your plugin using this procedure. + /// When your plugin is ready to do the actual speaking, it should call SpeakProxy, + /// and pass the information that it got from this procedure to SpeakProxy. + /// It may be necessary or a feature of your plugin to modify the text being spoken or the host/instance list provided in the host parameter - this is acceptable. + /// + /// This is the device that is to be used for the speaking. + /// This is the text to be spoken, or if it is a WAV file to be played, then the characters ":\" will be found starting at position 2 of the string as playing a WAV file with the speak command in HomeSeer REQUIRES a fully qualified path and filename of the WAV file to play. + /// This parameter tells HomeSeer whether to continue processing commands immediately or to wait until the speak command is finished - pass this parameter unchanged to SpeakProxy. + /// This is a list of host:instances to speak or play the WAV file on. An empty string or a single asterisk (*) indicates all connected speaker clients on all hosts. Normally this parameter is passed to SpeakProxy unchanged. + public virtual void SpeakIn(int device, string text, bool wait, string host) + { + } + #endregion + + #region Required Plugin Methods - Web Interface + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// This function is available for the ease of converting older HS2 plugins, however, it is desirable to use the new clsPageBuilder class for all new development. + /// This function is called by HomeSeer from the form or class object that a web page was registered with using RegisterConfigLink. + /// You must have a GenPage procedure per web page that you register with HomeSeer. + /// This page is called when the user requests the web page with an HTTP Get command, which is the default operation when the browser requests a page. + /// + public virtual string GenPage(string link) + { + return ""; + } + + /// + /// When your plugin web page has form elements on it, and the form is submitted, this procedure is called to handle the HTTP "Put" request. + /// There must be one PagePut procedure in each plugin object or class that is registered as a web page in HomeSeer. + /// + public virtual string PagePut(string data) + { + return ""; + } + + /// + /// A complete page needs to be created and returned. + /// Web pages that use the clsPageBuilder class and registered with hs.RegisterLink and hs.RegisterConfigLink will then be called through this function. + /// + /// The name of the page as passed to the hs.RegisterLink function. + /// The name of logged in user. + /// The rights of the logged in user. + /// The query string. + public virtual string GetPagePlugin(string page, string user, int userRights, string queryString) + { + return ""; + } + + /// + /// When a user clicks on any controls on one of your web pages, this function is then called with the post data. You can then parse the data and process as needed. + /// + /// The name of the page as passed to the hs.RegisterLink function. + /// The post data. + /// The name of logged in user. + /// The rights of the logged in user. + /// Any serialized data that needs to be passed back to the web page, generated by the clsPageBuilder class. + public virtual string PostBackProc(string page, string data, string user, int userRights) + { + return ""; + } + + /// + /// If SupportsConfigDevice returns true, this function will be called when the device properties are displayed for your device. + /// The device properties is displayed from the Device Utility page. + /// This page displays a tab for each plugin that controls the device. + /// Normally, only one plugin will be associated with a single device. + /// If there is any configuration that needs to be set on the device, you can return any HTML that you would like displayed. + /// Normally this would be any jquery controls that allow customization of the device. + /// The returned HTML is just an HTML fragment and not a complete page. + /// + /// The device reference id. + /// The name of logged in user. + /// The rights of the logged in user. + /// True if this is a new device being created for the first time. + /// In this case, the device configuration dialog may present different information than when simply editing an existing device. + /// A string containing HTML to be displayed. Return an empty string if there is not configuration needed. + public virtual string ConfigDevice(int @ref, string user, int userRights, bool newDevice) + { + return ""; + } + + /// + /// This function is called when a user posts information from your plugin tab on the device utility page. + /// + /// The device reference id. + /// The post data. + /// The name of logged in user. + /// The rights of the logged in user. + /// Enums.ConfigDevicePostReturn. + public virtual Enums.ConfigDevicePostReturn ConfigDevicePost(int @ref, string data, string user, int userRights) + { + return Enums.ConfigDevicePostReturn.DoneAndCancel; + } + #endregion + + #region Required Plugin Methods - User defined functions + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Call a function in the plugin. + /// The name of the function to call. + /// An array of parameters to pass to the function. + public virtual object PluginFunction(string functionName, object[] parms) + { + return null; + } + + /// Get a property from the plugin. + /// The name of the property to access. + /// An array of parameters to pass to the function. + public virtual object PluginPropertyGet(string propertyName, object[] parms) + { + return null; + } + + /// Set a property of the plugin. + /// The name of the property to access. + /// The value to set the property. + public virtual void PluginPropertySet(string propertyName, object value) + { + } + #endregion + + #region Support functions + /// + /// Sets the device value. + /// + /// The device reference identifier. + /// The value/status of the device. + /// if set to true process triggers normally, otherwise only change the value. + public virtual void SetDeviceValue(int refId, double value, bool trigger = true) + { + hs.SetDeviceValueByRef(refId, value, trigger); + } + #endregion + } +} \ No newline at end of file From ad774793a4bba7a95c97517d5d774300434b1d37 Mon Sep 17 00:00:00 2001 From: Alex Dresko Date: Tue, 28 Feb 2017 15:27:13 -0500 Subject: [PATCH 2/4] Base class compiles --- HSPI/Connector.cs | 2 +- HSPI/HSPIBase.cs | 338 +++++++++++++++++- HSPI/HSPIBase2.cs | 549 +++++++----------------------- Templates/HSPIPluginA.Dev/HSPI.cs | 7 +- 4 files changed, 456 insertions(+), 440 deletions(-) diff --git a/HSPI/Connector.cs b/HSPI/Connector.cs index a14cef9..1a09153 100644 --- a/HSPI/Connector.cs +++ b/HSPI/Connector.cs @@ -6,7 +6,7 @@ namespace HSPI { public class Connector { - public static void Connect(string[] args) where TPlugin : HSPIBase, new() + public static void Connect(string[] args) where TPlugin : HspiBase, new() { var options = new Options(); if (Parser.Default.ParseArguments(args, options)) diff --git a/HSPI/HSPIBase.cs b/HSPI/HSPIBase.cs index 3adbc0a..ecc647b 100644 --- a/HSPI/HSPIBase.cs +++ b/HSPI/HSPIBase.cs @@ -9,7 +9,7 @@ namespace HSPI { // ReSharper disable once InconsistentNaming - public abstract class HSPIBase : IPlugInAPI + public abstract class HspiBase : IPlugInAPI { protected IAppCallbackAPI Callback; protected IScsServiceClient CallbackClient; @@ -17,71 +17,391 @@ public abstract class HSPIBase : IPlugInAPI protected IScsServiceClient HsClient; public bool Shutdown; + /// + /// Test our SCS client connection: is connected. + /// The console wrapper will call this periodically to check if there is a problem. + /// + /// true if connected; otherwise, false. public bool Connected => HsClient.CommunicationState == CommunicationStates.Connected; public string Name => GetName(); + + /// + /// Get the instance name of this plugin. Only valid if SupportsMultipleInstances is true. + /// Multiple instance are not supported by this plugin. + /// + /// System.String public abstract string InstanceFriendlyName(); + /// + /// API's that this plugin supports. + /// This is a bit field. + /// All plugins must set CA_IO for I/O support. + /// Other values: CA_Security, CA_Thermostat, CA_Music, CA_SourceSwitch. + /// + /// System.Int32 public abstract int Capabilities(); + + /// + /// Plugin licensing mode: + /// 1 = plugin is not licensed, + /// 2 = plugin is licensed and user must purchase a license but there is a 30-day trial. + /// + /// System.Int32 public abstract int AccessLevel(); + + /// + /// Indicate if the plugin supports multiple instances. + /// The plugin may be launched multiple times and will be passed a unique instance name as a command line parameter to + /// the Main function. + /// public abstract bool SupportsMultipleInstances(); + + /// Indicate if plugin supports multiple instances using a single executable. public abstract bool SupportsMultipleInstancesSingleEXE(); + + /// + /// Indicate if the plugin supports the ability to add devices through the Add Device link on the device utility page. + /// If true, a tab appears on the add device page that allows the user to configure specific options for the new + /// device. + /// public abstract bool SupportsAddDevice(); + + /// + /// HomeSeer may call this function at any time to get the status of the plug-in. + /// Normally the status is displayed on the Interfaces page. + /// intStatus field: OK, INFO, WARNING, CRITICAL, FATAL. + /// sStatus field: string. + /// + /// + /// IPlugInAPI.strInterfaceStatus + /// public abstract IPlugInAPI.strInterfaceStatus InterfaceStatus(); + + /// + /// When you wish to have HomeSeer call back in to your plug-in or application when certain events happen in the + /// system, + /// call the RegisterEventCB procedure and provide it with event you wish to monitor. + /// See RegisterEventCB for more information and an example and event types. + /// public abstract void HSEvent(Enums.HSEvent eventType, object[] parms); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// This function is available for the ease of converting older HS2 plugins, however, it is desirable to use the new + /// clsPageBuilder class for all new development. + /// This function is called by HomeSeer from the form or class object that a web page was registered with using + /// RegisterConfigLink. + /// You must have a GenPage procedure per web page that you register with HomeSeer. + /// This page is called when the user requests the web page with an HTTP Get command, which is the default operation + /// when the browser requests a page. + /// public abstract string GenPage(string link); + + /// + /// When your plugin web page has form elements on it, and the form is submitted, this procedure is called to handle + /// the HTTP "Put" request. + /// There must be one PagePut procedure in each plugin object or class that is registered as a web page in HomeSeer. + /// public abstract string PagePut(string data); + + /// + /// Called when HomeSeer is not longer using the plugin. + /// This call will be made if a user disables a plugin from the interfaces configuration page and when HomeSeer is shut + /// down. + /// public abstract void ShutdownIO(); + + /// + /// HSTouch uses the Generic Event callback in some music plug-ins so that it can be notified of when a song changes, + /// rather than having to repeatedly query the music plug-in for the current song status. + /// If this property is present (and returns True), especially in a Music plug-in, + /// then HSTouch (and other plug-ins) will know that your HSEvent procedure can handle generic callbacks. + /// public abstract bool RaisesGenericCallbacks(); + + /// + /// SetIOMulti is called by HomeSeer when a device that your plugin owns is controlled. + /// Your plugin owns a device when it's INTERFACE property is set to the name of your plugin. + /// + /// + /// This is a collection of CAPIControl objects, one object for each device that needs to be controlled. + /// Look at the ControlValue property to get the value that device needs to be set to. + /// public abstract void SetIOMulti(List colSend); + + /// + /// Initialize the plugin and associated hardware/software, start any threads + /// + /// The COM port for the plugin if required. + /// Warning message or empty for success. public abstract string InitIO(string port); + + /// + /// If a device is owned by your plug-in (interface property set to the name of the plug-in) and the device's + /// status_support property is set to True, + /// then this procedure will be called in your plug-in when the device's status is being polled, such as when the user + /// clicks "Poll Devices" on the device status page. + /// Normally your plugin will automatically keep the status of its devices updated. + /// There may be situations where automatically updating devices is not possible or CPU intensive. + /// In these cases the plug-in may not keep the devices updated. HomeSeer may then call this function to force an + /// update of a specific device. + /// This request is normally done when a user displays the status page, or a script runs and needs to be sure it has + /// the latest status. + /// + /// Reference Id for the device + /// IPlugInAPI.PollResultInfo public abstract IPlugInAPI.PollResultInfo PollDevice(int dvref); + + /// + /// Indicate if the plugin allows for configuration of the devices via the device utility page. + /// This will allow you to generate some HTML controls that will be displayed to the user for modifying the device. + /// public abstract bool SupportsConfigDevice(); + + /// Indicate if the plugin manages all devices in the system. public abstract bool SupportsConfigDeviceAll(); + + /// + /// This function is called when a user posts information from your plugin tab on the device utility page. + /// + /// The device reference id. + /// The post data. + /// The name of logged in user. + /// The rights of the logged in user. + /// Enums.ConfigDevicePostReturn. public abstract Enums.ConfigDevicePostReturn ConfigDevicePost(int @ref, string data, string user, int userRights); + + /// + /// If SupportsConfigDevice returns true, this function will be called when the device properties are displayed + /// for your device. + /// The device properties is displayed from the Device Utility page. + /// This page displays a tab for each plugin that controls the device. + /// Normally, only one plugin will be associated with a single device. + /// If there is any configuration that needs to be set on the device, you can return any HTML that you would like + /// displayed. + /// Normally this would be any jquery controls that allow customization of the device. + /// The returned HTML is just an HTML fragment and not a complete page. + /// + /// The device reference id. + /// The name of logged in user. + /// The rights of the logged in user. + /// + /// True if this is a new device being created for the first time. + /// In this case, the device configuration dialog may present different information than when simply editing an + /// existing device. + /// + /// A string containing HTML to be displayed. Return an empty string if there is not configuration needed. public abstract string ConfigDevice(int @ref, string user, int userRights, bool newDevice); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Called in your plugin by HomeSeer whenever the user uses the search function of HomeSeer, and your plugin is loaded + /// and initialized. + /// Unlike ActionReferencesDevice and TriggerReferencesDevice, this search is not being specific to a device, + /// it is meant to find a match anywhere in the resources managed by your plugin. + /// This could include any textual field or object name that is utilized by the plugin. + /// + /// The search string. + /// if set to true then the search string is a regular expression. + /// Array of SearchReturn items describing what was found and where it was found. public abstract SearchReturn[] Search(string searchString, bool regEx); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Call a function in the plugin. + /// The name of the function to call. + /// An array of parameters to pass to the function. public abstract object PluginFunction(string procName, object[] parms); + + /// Get a property from the plugin. + /// The name of the property to access. + /// An array of parameters to pass to the function. public abstract object PluginPropertyGet(string procName, object[] parms); + + /// Set a property of the plugin. + /// The name of the property to access. + /// The value to set the property. public abstract void PluginPropertySet(string procName, object value); - public abstract void SpeakIn(int device, string txt, bool w, string host); + + /// + /// If your plugin is registered as a Speak proxy plugin, then when HomeSeer is asked to speak something, + /// it will pass the speak information to your plugin using this procedure. + /// When your plugin is ready to do the actual speaking, it should call SpeakProxy, + /// and pass the information that it got from this procedure to SpeakProxy. + /// It may be necessary or a feature of your plugin to modify the text being spoken or the host/instance list provided + /// in the host parameter - this is acceptable. + /// + /// This is the device that is to be used for the speaking. + /// + /// This is the text to be spoken, or if it is a WAV file to be played, then the characters ":\" will be + /// found starting at position 2 of the string as playing a WAV file with the speak command in HomeSeer REQUIRES a + /// fully qualified path and filename of the WAV file to play. + /// + /// + /// This parameter tells HomeSeer whether to continue processing commands immediately or to wait until + /// the speak command is finished - pass this parameter unchanged to SpeakProxy. + /// + /// + /// This is a list of host:instances to speak or play the WAV file on. An empty string or a single + /// asterisk (*) indicates all connected speaker clients on all hosts. Normally this parameter is passed to SpeakProxy + /// unchanged. + /// + public abstract void SpeakIn(int device, string text, bool wait, string host); + + /// The number of actions the plugin supports. public abstract int ActionCount(); + + /// + /// Return TRUE if the given action is configured properly. + /// There may be times when a user can select invalid selections for the action and in this case you would return FALSE + /// so HomeSeer will not allow the action to be saved. + /// + /// Object describing the action. public abstract bool ActionConfigured(IPlugInAPI.strTrigActInfo actInfo); + + /// + /// This function is called from the HomeSeer event page when an event is in edit mode. + /// Your plugin needs to return HTML controls so the user can make action selections. + /// Normally this is one of the HomeSeer jquery controls such as a clsJquery.jqueryCheckbox. + /// + /// + /// A unique string that can be used with your HTML controls to identify the control. All controls + /// need to have a unique ID. + /// + /// Object that contains information about the action like current selections. + /// HTML controls that need to be displayed so the user can select the action parameters. public abstract string ActionBuildUI(string sUnique, IPlugInAPI.strTrigActInfo actInfo); + /// + /// When a user edits your event actions in the HomeSeer events, this function is called to process the selections. + /// + /// A collection of name value pairs that include the user's selections. + /// Object that contains information about the action. + /// + /// Object that holds the parsed information for the action. HomeSeer will save this information for you in the + /// database. + /// public abstract IPlugInAPI.strMultiReturn ActionProcessPostUI(NameValueCollection postData, IPlugInAPI.strTrigActInfo trigInfoIn); public abstract string ActionFormatUI(IPlugInAPI.strTrigActInfo actInfo); + + /// Indicate if the given devices is referenced by the given action. public abstract bool ActionReferencesDevice(IPlugInAPI.strTrigActInfo actInfo, int dvRef); + + /// + /// When an event is triggered, this function is called to carry out the selected action. + /// Use the ActInfo parameter to determine what action needs to be executed then execute this action. + /// public abstract bool HandleAction(IPlugInAPI.strTrigActInfo actInfo); + + /// Return the HTML controls for a given trigger. public abstract string TriggerBuildUI(string sUnique, IPlugInAPI.strTrigActInfo trigInfo); + /// + /// Process a post from the events web page when a user modifies any of the controls related to a plugin trigger. + /// After processing the user selctions, create and return a strMultiReturn object. + /// public abstract IPlugInAPI.strMultiReturn TriggerProcessPostUI(NameValueCollection postData, IPlugInAPI.strTrigActInfo trigInfoIn); + /// + /// After the trigger has been configured, this function is called in your plugin to display the configured + /// trigger. + /// + /// Text that describes the given trigger. public abstract string TriggerFormatUI(IPlugInAPI.strTrigActInfo trigInfo); + + /// + /// Although this appears as a function that would be called to determine if a trigger is true or not, it is not. + /// Triggers notify HomeSeer of trigger states using TriggerFire , but Triggers can also be conditions, and that is + /// where this is used. + /// If this function is called, TrigInfo will contain the trigger information pertaining to a trigger used as a + /// condition. + /// When a user's event is triggered and it has conditions, the conditions need to be evaluated immediately, + /// so there is not regularity with which this function may be called in your plugin. + /// It may be called as often as once per second or as infrequently as once in a blue moon. + /// public abstract bool TriggerTrue(IPlugInAPI.strTrigActInfo trigInfo); + + /// Indicate if the given device is referenced by the given trigger. public abstract bool TriggerReferencesDevice(IPlugInAPI.strTrigActInfo trigInfo, int dvRef); + + /// + /// A complete page needs to be created and returned. + /// Web pages that use the clsPageBuilder class and registered with hs.RegisterLink and hs.RegisterConfigLink will then + /// be called through this function. + /// + /// The name of the page as passed to the hs.RegisterLink function. + /// The name of logged in user. + /// The rights of the logged in user. + /// The query string. public abstract string GetPagePlugin(string page, string user, int userRights, string queryString); + + /// + /// When a user clicks on any controls on one of your web pages, this function is then called with the post data. You + /// can then parse the data and process as needed. + /// + /// The name of the page as passed to the hs.RegisterLink function. + /// The post data. + /// The name of logged in user. + /// The rights of the logged in user. + /// Any serialized data that needs to be passed back to the web page, generated by the clsPageBuilder class. public abstract string PostBackProc(string page, string data, string user, int userRights); public bool HSCOMPort => GetHscomPort(); + /// + /// Return the name of the action given an action number. The name of the action will be displayed in the HomeSeer + /// events actions list. + /// + /// The number of the action. Each action is numbered, starting at 1. + /// Name of the action. public abstract string get_ActionName(int actionNumber); + + /// Indicate if the given trigger can also be used as a condition for the given grigger number. public abstract bool get_HasConditions(int triggerNumber); + public bool HasTriggers => GetHasTriggers(); - protected abstract bool GetHasTriggers(); public int TriggerCount => GetTriggerCount(); + + /// + /// The HomeSeer events page has an option to set the editing mode to "Advanced Mode". + /// This is typically used to enable options that may only be of interest to advanced users or programmers. + /// The Set in this function is called when advanced mode is enabled. + /// Your plugin can also enable this mode if an advanced selection was saved and needs to be displayed. + /// public bool ActionAdvancedMode { get; set; } - protected abstract int GetTriggerCount(); + + /// Return the name of the given trigger based on the trigger number. public abstract string get_TriggerName(int triggerNumber); + + /// Return the number of sub triggers your plugin supports. public abstract int get_SubTriggerCount(int triggerNumber); + + /// Return the text name of the sub trigger given its trugger number and sub trigger number. public abstract string get_SubTriggerName(int triggerNumber, int subTriggerNumber); + + /// Indicate if the given trigger is configured properly. public abstract bool get_TriggerConfigured(IPlugInAPI.strTrigActInfo trigInfo); + + /// + /// Set to true if the trigger is being used as a CONDITION. + /// Check this value in BuildUI and other procedures to change how the trigger is rendered if it is being used as a + /// condition or a trigger. + /// public abstract bool get_Condition(IPlugInAPI.strTrigActInfo trigInfo); + public abstract void set_Condition(IPlugInAPI.strTrigActInfo trigInfo, bool value); + /// Indicate if the plugin has any triggers. + protected abstract bool GetHasTriggers(); + + /// Number of triggers the plugin supports. + protected abstract int GetTriggerCount(); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Get the name of this plugin protected abstract string GetName(); public void Connect(string serverAddress, int serverPort) @@ -132,6 +452,16 @@ public void Connect(string serverAddress, int serverPort) } } + /// Indicate if Homeseer should manage a COM port for the plugin. + /// true if COM port required; otherwise, false. protected abstract bool GetHscomPort(); + + /// + /// Sets the device value. + /// + /// The device reference identifier. + /// The value/status of the device. + /// if set to true process triggers normally, otherwise only change the value. + public abstract void SetDeviceValue(int refId, double value, bool trigger = true); } } \ No newline at end of file diff --git a/HSPI/HSPIBase2.cs b/HSPI/HSPIBase2.cs index 2078b9f..57c0c49 100644 --- a/HSPI/HSPIBase2.cs +++ b/HSPI/HSPIBase2.cs @@ -18,632 +18,313 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System; using System.Collections.Generic; using System.Collections.Specialized; using HomeSeerAPI; -using HSCF.Communication.Scs.Communication.EndPoints.Tcp; -using HSCF.Communication.ScsServices.Client; namespace HSPI { /// - /// Base class for HSPI plugin. - /// - /// A new class with the name HSPI should be derived from this base class. - /// - /// The namespace of the new class must be the same as the EXE filename (without extension). - /// This new class must be public, named HSPI, and be in the root of the namespace. - /// - /// - /// Adapted from C# sample generated by Marcus Szolkowski. - /// See thread "Really simple C# sample plugin available here!" http://board.homeseer.com/showthread.php?t=178122. + /// Base class for HSPI plugin. + /// + /// A new class with the name HSPI should be derived from this base class. + /// + /// + /// The namespace of the new class must be the same as the EXE filename (without extension). + /// + /// + /// This new class must be public, named HSPI, and be in the root of the namespace. + /// + /// + /// + /// Adapted from C# sample generated by Marcus Szolkowski. + /// See thread "Really simple C# sample plugin available here!" http://board.homeseer.com/showthread.php?t=178122. /// /// - public class HSPIBase2 : HSPIBase + public abstract class HspiBase2 : HspiBase { - #region Homeseer interface variables - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Homeseer client interface - protected IScsServiceClient hsClient; - /// Homeseer callback client interface - not normally used - protected IScsServiceClient callbackClient; - /// Homeseer application interface - protected HomeSeerAPI.IHSApplication hs; - /// Homeseer callback interface - protected HomeSeerAPI.IAppCallbackAPI callback; - - /// Name for this plugin within Homeseer - protected string IFACE_NAME = "HspiTemplate"; - /// Name for the initialization file - protected string INI_File = "HspiTemplate.ini"; - /// Name for this instance. This plugin does not support multiple instances. - protected string INSTANCE_NAME = ""; - - /// Indication of whether to shutdown this plugin - internal bool Shutdown = false; - #endregion - - /// - /// Initializes a new instance of the class. - /// - public HSPIBase2() - { - // Can't do much here because this class gets loaded and then destroyed by Homeseer during initial discovery & reflection. - // Instead wait to be initialized during the Connect and InitIO methods, called by the console wrapper and homeseer respectively. - } - - #region Non plugin methods - Connection to Homeseer - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// - /// Connects to Homeseer at the specified server address and port. - /// This is called by the console wrapper. - /// - /// The server address. - /// The server port. - /// Error connecting homeseer SCS client - /// Error connecting callback SCS client - /// Error connecting homeseer to our plugin - public virtual void Connect(string serverAddress, int serverPort) - { - // Create our main connection to the homeseer TCP communication framework - // part 1 - hs object Proxy - try - { - hsClient = ScsServiceClientBuilder.CreateClient(new ScsTcpEndPoint(serverAddress, serverPort), this); - hsClient.Connect(); - hs = hsClient.ServiceProxy; - double APIVersion = hs.APIVersion; // just to make sure our connection is valid - } - catch (Exception ex) - { - throw new Exception("Error connecting homeseer SCS client: " + ex.Message, ex); - } - - // part 2 - callback object Proxy - try - { - callbackClient = ScsServiceClientBuilder.CreateClient(new ScsTcpEndPoint(serverAddress, serverPort), this); - callbackClient.Connect(); - callback = callbackClient.ServiceProxy; - double APIVersion = callback.APIVersion; // just to make sure our connection is valid - } - catch (Exception ex) - { - throw new Exception("Error connecting callback SCS client: " + ex.Message, ex); - } - - // Establish the reverse connection from homeseer back to our plugin - try - { - hs.Connect(IFACE_NAME, INSTANCE_NAME); - } - catch (Exception ex) - { - throw new Exception("Error connecting homeseer to our plugin: " + ex.Message, ex); - } - - } - - /// - /// Test our SCS client connection: is connected. - /// The console wrapper will call this periodically to check if there is a problem. - /// - /// true if connected; otherwise, false. - public virtual bool Connected + public override IPlugInAPI.strInterfaceStatus InterfaceStatus() { - get + var s = new IPlugInAPI.strInterfaceStatus { - return hsClient.CommunicationState == HSCF.Communication.Scs.Communication.CommunicationStates.Connected; - } - } - #endregion - - #region Required Plugin Methods - Information & Initialisation - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Get the name of this plugin - public virtual string Name - { - get { return IFACE_NAME; } + intStatus = IPlugInAPI.enumInterfaceStatus.OK + }; + return s; } - /// - /// Get the instance name of this plugin. Only valid if SupportsMultipleInstances is true. - /// Multiple instance are not supported by this plugin. - /// - /// System.String - public virtual string InstanceFriendlyName() - { - return INSTANCE_NAME; - } - /// - /// HomeSeer may call this function at any time to get the status of the plug-in. - /// Normally the status is displayed on the Interfaces page. - /// intStatus field: OK, INFO, WARNING, CRITICAL, FATAL. - /// sStatus field: string. - /// - /// IPlugInAPI.strInterfaceStatus - /// - /// - public virtual IPlugInAPI.strInterfaceStatus InterfaceStatus() + public override int Capabilities() { - IPlugInAPI.strInterfaceStatus s = new IPlugInAPI.strInterfaceStatus(); - s.intStatus = IPlugInAPI.enumInterfaceStatus.OK; - return s; + return (int) Enums.eCapabilities.CA_IO; } - /// - /// API's that this plugin supports. - /// This is a bit field. - /// All plugins must set CA_IO for I/O support. - /// Other values: CA_Security, CA_Thermostat, CA_Music, CA_SourceSwitch. - /// - /// System.Int32 - public virtual int Capabilities() - { - return (int)HomeSeerAPI.Enums.eCapabilities.CA_IO; - } - /// - /// Plugin licensing mode: - /// 1 = plugin is not licensed, - /// 2 = plugin is licensed and user must purchase a license but there is a 30-day trial. - /// - /// System.Int32 - public virtual int AccessLevel() + public override int AccessLevel() { return 1; } - /// Indicate if Homeseer should manage a COM port for the plugin. - /// true if COM port required; otherwise, false. - public virtual bool HSCOMPort + + protected override bool GetHscomPort() { - get { return false; } + return true; } - /// - /// Indicate if the plugin supports the ability to add devices through the Add Device link on the device utility page. - /// If true, a tab appears on the add device page that allows the user to configure specific options for the new device. - /// - public virtual bool SupportsAddDevice() + + public override bool SupportsAddDevice() { return false; } - /// - /// Indicate if the plugin allows for configuration of the devices via the device utility page. - /// This will allow you to generate some HTML controls that will be displayed to the user for modifying the device. - /// - public virtual bool SupportsConfigDevice() + + public override bool SupportsConfigDevice() { return false; } - /// Indicate if the plugin manages all devices in the system. - public virtual bool SupportsConfigDeviceAll() + public override bool SupportsConfigDeviceAll() { return false; } - /// - /// Indicate if the plugin supports multiple instances. - /// The plugin may be launched multiple times and will be passed a unique instance name as a command line parameter to the Main function. - /// - public virtual bool SupportsMultipleInstances() + + public override bool SupportsMultipleInstances() { return false; } - /// Indicate if plugin supports multiple instances using a single executable. - public virtual bool SupportsMultipleInstancesSingleEXE() + public override bool SupportsMultipleInstancesSingleEXE() { return false; } - /// - /// HSTouch uses the Generic Event callback in some music plug-ins so that it can be notified of when a song changes, - /// rather than having to repeatedly query the music plug-in for the current song status. - /// If this property is present (and returns True), especially in a Music plug-in, - /// then HSTouch (and other plug-ins) will know that your HSEvent procedure can handle generic callbacks. - /// - public virtual bool RaisesGenericCallbacks() + + public override bool RaisesGenericCallbacks() { return false; } - /// - /// When you wish to have HomeSeer call back in to your plug-in or application when certain events happen in the system, - /// call the RegisterEventCB procedure and provide it with event you wish to monitor. - /// See RegisterEventCB for more information and an example and event types. - /// - public virtual void HSEvent(Enums.HSEvent EventType, object[] parameters) + + public override void HSEvent(Enums.HSEvent eventType, object[] parameters) { } - /// - /// Initialize the plugin and associated hardware/software, start any threads - /// - /// The COM port for the plugin if required. - /// Warning message or empty for success. - public virtual string InitIO(string port) + + public override string InitIO(string port) { return ""; } - /// - /// If a device is owned by your plug-in (interface property set to the name of the plug-in) and the device's status_support property is set to True, - /// then this procedure will be called in your plug-in when the device's status is being polled, such as when the user clicks "Poll Devices" on the device status page. - /// Normally your plugin will automatically keep the status of its devices updated. - /// There may be situations where automatically updating devices is not possible or CPU intensive. - /// In these cases the plug-in may not keep the devices updated. HomeSeer may then call this function to force an update of a specific device. - /// This request is normally done when a user displays the status page, or a script runs and needs to be sure it has the latest status. - /// - /// Reference Id for the device - /// IPlugInAPI.PollResultInfo - public virtual IPlugInAPI.PollResultInfo PollDevice(int dvref) + + public override IPlugInAPI.PollResultInfo PollDevice(int dvref) { - IPlugInAPI.PollResultInfo pollResult = new IPlugInAPI.PollResultInfo(); - pollResult.Result = IPlugInAPI.enumPollResult.Device_Not_Found; - pollResult.Value = 0; + var pollResult = new IPlugInAPI.PollResultInfo + { + Result = IPlugInAPI.enumPollResult.Device_Not_Found, + Value = 0 + }; return pollResult; } - /// - /// SetIOMulti is called by HomeSeer when a device that your plugin owns is controlled. - /// Your plugin owns a device when it's INTERFACE property is set to the name of your plugin. - /// - /// - /// This is a collection of CAPIControl objects, one object for each device that needs to be controlled. - /// Look at the ControlValue property to get the value that device needs to be set to. - /// - public virtual void SetIOMulti(List colSend) + protected override bool GetHasTriggers() { - // homeseer will inform us when the one of our devices has changed. Push that change through to the field. + return false; } - /// - /// Called when HomeSeer is not longer using the plugin. - /// This call will be made if a user disables a plugin from the interfaces configuration page and when HomeSeer is shut down. - /// - public virtual void ShutdownIO() + protected override int GetTriggerCount() { - // let our console wrapper know we are finished - Shutdown = true; - } - #endregion - - #region Required Plugin Methods - Actions, Triggers & Conditions - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// - /// Called in your plugin by HomeSeer whenever the user uses the search function of HomeSeer, and your plugin is loaded and initialized. - /// Unlike ActionReferencesDevice and TriggerReferencesDevice, this search is not being specific to a device, - /// it is meant to find a match anywhere in the resources managed by your plugin. - /// This could include any textual field or object name that is utilized by the plugin. - /// - /// The search string. - /// if set to true then the search string is a regular expression. - /// Array of SearchReturn items describing what was found and where it was found. - public virtual SearchReturn[] Search(string SearchString, bool RegEx) - { - return null; + return 0; } - /// - /// The HomeSeer events page has an option to set the editing mode to "Advanced Mode". - /// This is typically used to enable options that may only be of interest to advanced users or programmers. - /// The Set in this function is called when advanced mode is enabled. - /// Your plugin can also enable this mode if an advanced selection was saved and needs to be displayed. - /// - public virtual bool ActionAdvancedMode + public override void SetIOMulti(List colSend) { - get { return false; } - set { /* do nothing */ } + // homeseer will inform us when the one of our devices has changed. Push that change through to the field. } - /// Indicate if the plugin has any triggers. - public virtual bool HasTriggers + + public override void ShutdownIO() { - get { return false; } + // let our console wrapper know we are finished } - /// Number of triggers the plugin supports. - public virtual int TriggerCount + + public override SearchReturn[] Search(string searchString, bool regEx) { - get { return 0; } + return null; } - /// - /// This function is called from the HomeSeer event page when an event is in edit mode. - /// Your plugin needs to return HTML controls so the user can make action selections. - /// Normally this is one of the HomeSeer jquery controls such as a clsJquery.jqueryCheckbox. - /// - /// A unique string that can be used with your HTML controls to identify the control. All controls need to have a unique ID. - /// Object that contains information about the action like current selections. - /// HTML controls that need to be displayed so the user can select the action parameters. - public virtual string ActionBuildUI(string sUnique, IPlugInAPI.strTrigActInfo ActInfo) + + public override string ActionBuildUI(string sUnique, IPlugInAPI.strTrigActInfo actInfo) { return ""; } - /// - /// Return TRUE if the given action is configured properly. - /// There may be times when a user can select invalid selections for the action and in this case you would return FALSE so HomeSeer will not allow the action to be saved. - /// - /// Object describing the action. - public virtual bool ActionConfigured(IPlugInAPI.strTrigActInfo ActInfo) + + public override bool ActionConfigured(IPlugInAPI.strTrigActInfo actInfo) { return true; } - /// The number of actions the plugin supports. - public virtual int ActionCount() + public override int ActionCount() { return 0; } - public virtual string ActionFormatUI(IPlugInAPI.strTrigActInfo ActInfo) + public override string ActionFormatUI(IPlugInAPI.strTrigActInfo actInfo) { return ""; } - /// - /// When a user edits your event actions in the HomeSeer events, this function is called to process the selections. - /// - /// A collection of name value pairs that include the user's selections. - /// Object that contains information about the action. - /// Object that holds the parsed information for the action. HomeSeer will save this information for you in the database. - public virtual IPlugInAPI.strMultiReturn ActionProcessPostUI(NameValueCollection PostData, IPlugInAPI.strTrigActInfo TrigInfoIN) + + public override IPlugInAPI.strMultiReturn ActionProcessPostUI(NameValueCollection postData, + IPlugInAPI.strTrigActInfo trigInfoIn) { return new IPlugInAPI.strMultiReturn(); } - /// Indicate if the given devices is referenced by the given action. - public virtual bool ActionReferencesDevice(IPlugInAPI.strTrigActInfo ActInfo, int dvRef) + public override bool ActionReferencesDevice(IPlugInAPI.strTrigActInfo actInfo, int dvRef) { return false; } - /// - /// Return the name of the action given an action number. The name of the action will be displayed in the HomeSeer events actions list. - /// - /// The number of the action. Each action is numbered, starting at 1. - /// Name of the action. - public virtual string get_ActionName(int ActionNumber) + + public override string get_ActionName(int actionNumber) { return ""; } - /// - /// Set to true if the trigger is being used as a CONDITION. - /// Check this value in BuildUI and other procedures to change how the trigger is rendered if it is being used as a condition or a trigger. - /// - public virtual bool get_Condition(IPlugInAPI.strTrigActInfo TrigInfo) + + public override bool get_Condition(IPlugInAPI.strTrigActInfo trigInfo) { return false; } - public virtual void set_Condition(IPlugInAPI.strTrigActInfo TrigInfo, bool Value) + public override void set_Condition(IPlugInAPI.strTrigActInfo trigInfo, bool value) { } - /// Indicate if the given trigger can also be used as a condition for the given grigger number. - public virtual bool get_HasConditions(int TriggerNumber) + public override bool get_HasConditions(int triggerNumber) { return false; } - /// Return the HTML controls for a given trigger. - public virtual string TriggerBuildUI(string sUnique, IPlugInAPI.strTrigActInfo TrigInfo) + public override string TriggerBuildUI(string sUnique, IPlugInAPI.strTrigActInfo trigInfo) { return ""; } - /// After the trigger has been configured, this function is called in your plugin to display the configured trigger. - /// Text that describes the given trigger. - public virtual string TriggerFormatUI(IPlugInAPI.strTrigActInfo TrigInfo) + + public override string TriggerFormatUI(IPlugInAPI.strTrigActInfo trigInfo) { return ""; } - /// - /// Process a post from the events web page when a user modifies any of the controls related to a plugin trigger. - /// After processing the user selctions, create and return a strMultiReturn object. - /// - public virtual IPlugInAPI.strMultiReturn TriggerProcessPostUI(NameValueCollection PostData, IPlugInAPI.strTrigActInfo TrigInfoIN) + + public override IPlugInAPI.strMultiReturn TriggerProcessPostUI(NameValueCollection postData, + IPlugInAPI.strTrigActInfo trigInfoIn) { return new IPlugInAPI.strMultiReturn(); } - /// Indicate if the given device is referenced by the given trigger. - public virtual bool TriggerReferencesDevice(IPlugInAPI.strTrigActInfo TrigInfo, int dvRef) + public override bool TriggerReferencesDevice(IPlugInAPI.strTrigActInfo trigInfo, int dvRef) { return false; } - /// - /// Although this appears as a function that would be called to determine if a trigger is true or not, it is not. - /// Triggers notify HomeSeer of trigger states using TriggerFire , but Triggers can also be conditions, and that is where this is used. - /// If this function is called, TrigInfo will contain the trigger information pertaining to a trigger used as a condition. - /// When a user's event is triggered and it has conditions, the conditions need to be evaluated immediately, - /// so there is not regularity with which this function may be called in your plugin. - /// It may be called as often as once per second or as infrequently as once in a blue moon. - /// - public virtual bool TriggerTrue(IPlugInAPI.strTrigActInfo TrigInfo) + + public override bool TriggerTrue(IPlugInAPI.strTrigActInfo trigInfo) { return false; } - /// Return the number of sub triggers your plugin supports. - public virtual int get_SubTriggerCount(int TriggerNumber) + public override int get_SubTriggerCount(int triggerNumber) { return 0; } - /// Return the text name of the sub trigger given its trugger number and sub trigger number. - public virtual string get_SubTriggerName(int TriggerNumber, int SubTriggerNumber) + public override string get_SubTriggerName(int triggerNumber, int subTriggerNumber) { return ""; } - /// Indicate if the given trigger is configured properly. - public virtual bool get_TriggerConfigured(IPlugInAPI.strTrigActInfo TrigInfo) + public override bool get_TriggerConfigured(IPlugInAPI.strTrigActInfo trigInfo) { return true; } - /// Return the name of the given trigger based on the trigger number. - public virtual string get_TriggerName(int TriggerNumber) + public override string get_TriggerName(int triggerNumber) { return ""; } - /// - /// When an event is triggered, this function is called to carry out the selected action. - /// Use the ActInfo parameter to determine what action needs to be executed then execute this action. - /// - public virtual bool HandleAction(IPlugInAPI.strTrigActInfo ActInfo) + + public override bool HandleAction(IPlugInAPI.strTrigActInfo actInfo) { return false; } - /// - /// If your plugin is registered as a Speak proxy plugin, then when HomeSeer is asked to speak something, - /// it will pass the speak information to your plugin using this procedure. - /// When your plugin is ready to do the actual speaking, it should call SpeakProxy, - /// and pass the information that it got from this procedure to SpeakProxy. - /// It may be necessary or a feature of your plugin to modify the text being spoken or the host/instance list provided in the host parameter - this is acceptable. - /// - /// This is the device that is to be used for the speaking. - /// This is the text to be spoken, or if it is a WAV file to be played, then the characters ":\" will be found starting at position 2 of the string as playing a WAV file with the speak command in HomeSeer REQUIRES a fully qualified path and filename of the WAV file to play. - /// This parameter tells HomeSeer whether to continue processing commands immediately or to wait until the speak command is finished - pass this parameter unchanged to SpeakProxy. - /// This is a list of host:instances to speak or play the WAV file on. An empty string or a single asterisk (*) indicates all connected speaker clients on all hosts. Normally this parameter is passed to SpeakProxy unchanged. - public virtual void SpeakIn(int device, string text, bool wait, string host) - { - } - #endregion - - #region Required Plugin Methods - Web Interface - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// - /// This function is available for the ease of converting older HS2 plugins, however, it is desirable to use the new clsPageBuilder class for all new development. - /// This function is called by HomeSeer from the form or class object that a web page was registered with using RegisterConfigLink. - /// You must have a GenPage procedure per web page that you register with HomeSeer. - /// This page is called when the user requests the web page with an HTTP Get command, which is the default operation when the browser requests a page. - /// - public virtual string GenPage(string link) + public override void SpeakIn(int device, string text, bool wait, string host) + { + } + + + public override string GenPage(string link) { return ""; } - /// - /// When your plugin web page has form elements on it, and the form is submitted, this procedure is called to handle the HTTP "Put" request. - /// There must be one PagePut procedure in each plugin object or class that is registered as a web page in HomeSeer. - /// - public virtual string PagePut(string data) + + public override string PagePut(string data) { return ""; } - /// - /// A complete page needs to be created and returned. - /// Web pages that use the clsPageBuilder class and registered with hs.RegisterLink and hs.RegisterConfigLink will then be called through this function. - /// - /// The name of the page as passed to the hs.RegisterLink function. - /// The name of logged in user. - /// The rights of the logged in user. - /// The query string. - public virtual string GetPagePlugin(string page, string user, int userRights, string queryString) + + public override string GetPagePlugin(string page, string user, int userRights, string queryString) { return ""; } - /// - /// When a user clicks on any controls on one of your web pages, this function is then called with the post data. You can then parse the data and process as needed. - /// - /// The name of the page as passed to the hs.RegisterLink function. - /// The post data. - /// The name of logged in user. - /// The rights of the logged in user. - /// Any serialized data that needs to be passed back to the web page, generated by the clsPageBuilder class. - public virtual string PostBackProc(string page, string data, string user, int userRights) + + public override string PostBackProc(string page, string data, string user, int userRights) { return ""; } - /// - /// If SupportsConfigDevice returns true, this function will be called when the device properties are displayed for your device. - /// The device properties is displayed from the Device Utility page. - /// This page displays a tab for each plugin that controls the device. - /// Normally, only one plugin will be associated with a single device. - /// If there is any configuration that needs to be set on the device, you can return any HTML that you would like displayed. - /// Normally this would be any jquery controls that allow customization of the device. - /// The returned HTML is just an HTML fragment and not a complete page. - /// - /// The device reference id. - /// The name of logged in user. - /// The rights of the logged in user. - /// True if this is a new device being created for the first time. - /// In this case, the device configuration dialog may present different information than when simply editing an existing device. - /// A string containing HTML to be displayed. Return an empty string if there is not configuration needed. - public virtual string ConfigDevice(int @ref, string user, int userRights, bool newDevice) + + public override string ConfigDevice(int @ref, string user, int userRights, bool newDevice) { return ""; } - /// - /// This function is called when a user posts information from your plugin tab on the device utility page. - /// - /// The device reference id. - /// The post data. - /// The name of logged in user. - /// The rights of the logged in user. - /// Enums.ConfigDevicePostReturn. - public virtual Enums.ConfigDevicePostReturn ConfigDevicePost(int @ref, string data, string user, int userRights) + + public override Enums.ConfigDevicePostReturn ConfigDevicePost(int @ref, string data, string user, int userRights) { return Enums.ConfigDevicePostReturn.DoneAndCancel; } - #endregion - #region Required Plugin Methods - User defined functions - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Call a function in the plugin. - /// The name of the function to call. - /// An array of parameters to pass to the function. - public virtual object PluginFunction(string functionName, object[] parms) + + public override object PluginFunction(string functionName, object[] parms) { return null; } - /// Get a property from the plugin. - /// The name of the property to access. - /// An array of parameters to pass to the function. - public virtual object PluginPropertyGet(string propertyName, object[] parms) + + public override object PluginPropertyGet(string propertyName, object[] parms) { return null; } - /// Set a property of the plugin. - /// The name of the property to access. - /// The value to set the property. - public virtual void PluginPropertySet(string propertyName, object value) + + public override void PluginPropertySet(string propertyName, object value) { } - #endregion - #region Support functions - /// - /// Sets the device value. - /// - /// The device reference identifier. - /// The value/status of the device. - /// if set to true process triggers normally, otherwise only change the value. - public virtual void SetDeviceValue(int refId, double value, bool trigger = true) + + public override void SetDeviceValue(int refId, double value, bool trigger = true) { - hs.SetDeviceValueByRef(refId, value, trigger); + Hs.SetDeviceValueByRef(refId, value, trigger); } - #endregion } } \ No newline at end of file diff --git a/Templates/HSPIPluginA.Dev/HSPI.cs b/Templates/HSPIPluginA.Dev/HSPI.cs index 0d04301..491390e 100644 --- a/Templates/HSPIPluginA.Dev/HSPI.cs +++ b/Templates/HSPIPluginA.Dev/HSPI.cs @@ -7,7 +7,7 @@ namespace HSPIPluginA.Dev { // ReSharper disable once InconsistentNaming - public class HSPI : HSPIBase + public class HSPI : HspiBase { public override string InstanceFriendlyName() { @@ -281,5 +281,10 @@ protected override bool GetHscomPort() { return true; } + + public override void SetDeviceValue(int refId, double value, bool trigger = true) + { + + } } } \ No newline at end of file From 47f52bf1488cc732eca1877e0b1b014810a4ebc1 Mon Sep 17 00:00:00 2001 From: Alex Dresko Date: Tue, 28 Feb 2017 15:32:35 -0500 Subject: [PATCH 3/4] Adds PageBuilder --- HSPI/Class1.cs | 329 +++++++++++++++++++++++++++++++++++++++++++++++ HSPI/HSPI.csproj | 1 + 2 files changed, 330 insertions(+) create mode 100644 HSPI/Class1.cs diff --git a/HSPI/Class1.cs b/HSPI/Class1.cs new file mode 100644 index 0000000..98d575c --- /dev/null +++ b/HSPI/Class1.cs @@ -0,0 +1,329 @@ +// Copyright (C) 2016 SRG Technology, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System.Collections.Specialized; +using Scheduler; + +namespace HSPI +{ + /// + /// This class adds some common support functions for creating the web pages used by HomeSeer plugins. + /// + /// For each control there are three functions: + /// + /// + /// Build: Used to initially create the control in the web page. + /// + /// + /// Update: Used to modify the control in an existing web page. + /// + /// + /// Form: Not normally call externally but could be useful in special circumstances. + /// + /// + /// + /// + public class PageBuilder : PageBuilderAndMenu.clsPageBuilder + { + /// + /// + /// The name used by HomeSeer when referencing this particular page. + public PageBuilder(string pagename) : base(pagename) + { + } + + /// + /// Build a button for a web page. + /// + /// The text on the button. + /// The name used to create the references for the button. + /// if set to true [enabled]. + /// The text to insert in the web page to create the button. + protected string BuildButton(string text, string name, bool enabled = true) + { + return "
" + FormButton(name, text, enabled: enabled) + "
"; + } + + /// + /// Update a button on a web page that was created with a DIV tag. + /// + /// The text on the button. + /// The name used to create the references for the button. + /// if set to true [enabled]. + protected void UpdateButton(string text, string name, bool enabled = true) + { + divToUpdate.Add(name + "_div", FormButton(name, text, enabled: enabled)); + } + + /// + /// Return the string required to create a web page button. + /// + protected string FormButton(string name, string label = "Submit", bool submitForm = true, + string imagePathNormal = "", string imagePathPressed = "", string toolTip = "", + bool enabled = true, string style = "") + { + var b = new clsJQuery.jqButton(name, label, PageName, submitForm) + { + id = "o" + name, + imagePathNormal = imagePathNormal + }; + b.imagePathPressed = imagePathPressed == "" ? b.imagePathNormal : imagePathPressed; + b.toolTip = toolTip; + b.enabled = enabled; + b.style = style; + + var button = b.Build(); + button = button.Replace("\r\n", "").Trim(); + return button; + } + + /// + /// Build a label for a web page. + /// + /// The text for the label. + /// The name used to create the references for the label. + /// The text to insert in the web page to create the label. + protected string BuildLabel(string name, string msg = "") + { + return "
" + FormLabel(name, msg) + "
"; + } + + /// + /// Update a label on a web page that was created with a DIV tag. + /// + /// The text for the label. + /// The name used to create the references for the label. + protected void UpdateLabel(string name, string msg = "") + { + divToUpdate.Add(name + "_div", FormLabel(name, msg)); + } + + /// + /// Return the string required to create a web page label. + /// + protected string FormLabel(string name, string message = "", bool visible = true) + { + string content; + if (visible) + content = message + ""; + else + content = ""; + return content; + } + + /// + /// Build a text entry box for a web page. + /// + /// The default text for the text box. + /// The name used to create the references for the text box. + /// if set to true allow the text to be edited. + /// The text to insert in the web page to create the text box. + protected string BuildTextBox(string name, string text = "", bool allowEdit = true) + { + return "
" + HtmlTextBox(name, text, 20, allowEdit) + "
"; + } + + /// + /// Update a text box on a web page that was created with a DIV tag. + /// + /// The text for the text box. + /// The name used to create the references for the text box. + /// if set to true allow the text to be edited. + protected void UpdateTextBox(string name, string text = "", bool allowEdit = true) + { + divToUpdate.Add(name + "_div", HtmlTextBox(name, text, 20, allowEdit)); + } + + /// + /// Return the string required to create a web page text box. + /// + protected string HtmlTextBox(string name, string defaultText, int size, bool allowEdit = true) + { + var style = ""; + var sReadOnly = ""; + + if (!allowEdit) + { + style = "color:#F5F5F5; background-color:#C0C0C0;"; + sReadOnly = "readonly='readonly'"; + } + + return ""; + } + + /// + /// Build a check box for a web page. + /// + /// The name used to create the references for the text box. + /// if set to true [checked]. + /// The text to insert in the web page to create the check box. + protected string BuildCheckBox(string name, bool Checked = false) + { + return "
" + FormCheckBox(name, Checked) + "
"; + } + + /// + /// Update a check box on a web page that was created with a DIV tag. + /// + /// The name used to create the references for the text box. + /// if set to true [checked]. + protected void UpdateCheckBox(string name, bool Checked = false) + { + divToUpdate.Add(name + "_div", FormCheckBox(name, Checked)); + } + + /// + /// Return the string required to create a web page check box. + /// + protected string FormCheckBox(string name, bool Checked = false, bool autoPostBack = true, + bool submitForm = true) + { + var cb = new clsJQuery.jqCheckBox(name, "", PageName, autoPostBack, submitForm) + { + id = "o" + name, + @checked = Checked + }; + return cb.Build(); + } + + /// + /// Build a list box for a web page. + /// + /// The name used to create the references for the list box. + /// Data value pairs used to populate the list box. + /// Index of the item to be selected. + /// Name of the value to be selected. + /// Width of the list box + /// if set to true [enabled]. Doesn't seem to work. + /// The text to insert in the web page to create the list box. + protected string BuildListBox(string name, ref NameValueCollection options, int selected = -1, + string selectedValue = "", int width = 150, bool enabled = true) + { + return "
" + + FormListBox(name, ref options, selected, selectedValue, width, enabled) + "
"; + } + + /// + /// Update a list box for a web page that was created with a DIV tag. + /// + /// The name used to create the references for the list box. + /// Data value pairs used to populate the list box. + /// Index of the item to be selected. + /// Name of the value to be selected. + /// Width of the list box + /// if set to true [enabled]. Doesn't seem to work. + protected void UpdateListBox(string name, ref NameValueCollection options, int selected = -1, + string selectedValue = "", int width = 150, bool enabled = true) + { + divToUpdate.Add(name + "_div", FormListBox(name, ref options, selected, selectedValue, width, enabled)); + } + + /// + /// Return the string required to create a web page list box. + /// + protected string FormListBox(string name, ref NameValueCollection options, int selected = -1, + string selectedValue = "", int width = 150, bool enabled = true) + { + var lb = new clsJQuery.jqListBox(name, PageName); + + lb.items.Clear(); + lb.id = "o" + name; + lb.style = "width: " + width + "px;"; + lb.enabled = enabled; + + if (options != null) + { + for (var i = 0; i < options.Count; i++) + { + if (selected == -1 && selectedValue == options.GetKey(i)) + selected = i; + lb.items.Add(options.GetKey(i)); + } + if (selected >= 0) + lb.SelectedValue = options.GetKey(selected); + } + + return lb.Build(); + } + + /// + /// Build a drop list for a web page. + /// + /// The name used to create the references for the list box. + /// Data value pairs used to populate the list box. + /// Index of the item to be selected. + /// Name of the value to be selected. + /// The text to insert in the web page to create the drop list. + protected string BuildDropList(string name, ref NameValueCollection options, int selected = -1, + string selectedValue = "") + { + return "
" + + FormDropDown(name, ref options, selected, selectedValue: selectedValue) + "
"; + } + + /// + /// Update a drop list for a web page that was created with a DIV tag. + /// + /// The name used to create the references for the list box. + /// Data value pairs used to populate the list box. + /// Index of the item to be selected. + /// Name of the value to be selected. + protected void UpdateDropList(string name, ref NameValueCollection options, int selected = -1, + string selectedValue = "") + { + divToUpdate.Add(name + "_div", FormDropDown(name, ref options, selected, selectedValue: selectedValue)); + } + + /// + /// Return the string required to create a web page drop list. + /// + protected string FormDropDown(string name, ref NameValueCollection options, int selected, int width = 150, + bool submitForm = true, bool addBlankRow = false, + bool autoPostback = true, string tooltip = "", bool enabled = true, string ddMsg = "", + string selectedValue = "") + { + var dd = new clsJQuery.jqDropList(name, PageName, submitForm) + { + selectedItemIndex = -1, + id = "o" + name, + autoPostBack = autoPostback, + toolTip = tooltip, + style = "width: " + width + "px;", + enabled = enabled + }; + + + //Add a blank area to the top of the list + if (addBlankRow) + dd.AddItem(ddMsg, "", false); + + if (options != null) + for (var i = 0; i < options.Count; i++) + { + var sel = i == selected || options.Get(i) == selectedValue; + + dd.AddItem(options.GetKey(i), options.Get(i), sel); + } + + return dd.Build(); + } + } +} \ No newline at end of file diff --git a/HSPI/HSPI.csproj b/HSPI/HSPI.csproj index 98e479d..fd9a64f 100644 --- a/HSPI/HSPI.csproj +++ b/HSPI/HSPI.csproj @@ -73,6 +73,7 @@
+ From 9ba52ef38708dec096620162fff51066af4e9a3a Mon Sep 17 00:00:00 2001 From: Alex Dresko Date: Tue, 28 Feb 2017 15:53:54 -0500 Subject: [PATCH 4/4] Template for HSPIPluginB --- HSPI.sln | 14 +++ HSPI/HSPIBase2.cs | 4 + Templates/HSPIPluginB.Dev/App.config | 6 + Templates/HSPIPluginB.Dev/HSPI.cs | 15 +++ .../HSPIPluginB.Dev/HSPIPluginB.Dev.csproj | 67 ++++++++++ Templates/HSPIPluginB.Dev/Program.cs | 13 ++ .../Properties/AssemblyInfo.cs | 36 ++++++ Templates/HSPIPluginB/App.config | 6 + Templates/HSPIPluginB/AssemblyInfo.cs | 36 ++++++ Templates/HSPIPluginB/HS-Button_400x400.ico | Bin 0 -> 370070 bytes Templates/HSPIPluginB/HSPI.cs | 13 ++ Templates/HSPIPluginB/HSPIPluginB.csproj | 116 ++++++++++++++++++ Templates/HSPIPluginB/HSPIPluginB.vstemplate | 36 ++++++ Templates/HSPIPluginB/Program.cs | 12 ++ Templates/HSPIPluginB/ProjectTemplate.csproj | 67 ++++++++++ .../HSPIPluginB/Properties/AssemblyInfo.cs | 36 ++++++ .../HomeSeerTemplates.csproj | 7 ++ .../Packages/HSPI.1.0.0.nupkg | Bin 12208 -> 17332 bytes .../source.extension.vsixmanifest | 1 + 19 files changed, 485 insertions(+) create mode 100644 Templates/HSPIPluginB.Dev/App.config create mode 100644 Templates/HSPIPluginB.Dev/HSPI.cs create mode 100644 Templates/HSPIPluginB.Dev/HSPIPluginB.Dev.csproj create mode 100644 Templates/HSPIPluginB.Dev/Program.cs create mode 100644 Templates/HSPIPluginB.Dev/Properties/AssemblyInfo.cs create mode 100644 Templates/HSPIPluginB/App.config create mode 100644 Templates/HSPIPluginB/AssemblyInfo.cs create mode 100644 Templates/HSPIPluginB/HS-Button_400x400.ico create mode 100644 Templates/HSPIPluginB/HSPI.cs create mode 100644 Templates/HSPIPluginB/HSPIPluginB.csproj create mode 100644 Templates/HSPIPluginB/HSPIPluginB.vstemplate create mode 100644 Templates/HSPIPluginB/Program.cs create mode 100644 Templates/HSPIPluginB/ProjectTemplate.csproj create mode 100644 Templates/HSPIPluginB/Properties/AssemblyInfo.cs diff --git a/HSPI.sln b/HSPI.sln index 8163030..2c00e99 100644 --- a/HSPI.sln +++ b/HSPI.sln @@ -18,6 +18,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HSPIPluginA", "Templates\HS EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HSPIPluginA.Dev", "Templates\HSPIPluginA.Dev\HSPIPluginA.Dev.csproj", "{CAA3F9D3-4647-48DE-8BA7-32AC317B046D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HSPIPluginB.Dev", "Templates\HSPIPluginB.Dev\HSPIPluginB.Dev.csproj", "{8F609EDB-0CFF-4B67-A7ED-265331C90F91}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HSPIPluginB", "Templates\HSPIPluginB\HSPIPluginB.csproj", "{B00BD583-D633-4CA1-B66C-EA78BC906023}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -40,6 +44,14 @@ Global {CAA3F9D3-4647-48DE-8BA7-32AC317B046D}.Debug|Any CPU.Build.0 = Debug|Any CPU {CAA3F9D3-4647-48DE-8BA7-32AC317B046D}.Release|Any CPU.ActiveCfg = Release|Any CPU {CAA3F9D3-4647-48DE-8BA7-32AC317B046D}.Release|Any CPU.Build.0 = Release|Any CPU + {8F609EDB-0CFF-4B67-A7ED-265331C90F91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F609EDB-0CFF-4B67-A7ED-265331C90F91}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F609EDB-0CFF-4B67-A7ED-265331C90F91}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F609EDB-0CFF-4B67-A7ED-265331C90F91}.Release|Any CPU.Build.0 = Release|Any CPU + {B00BD583-D633-4CA1-B66C-EA78BC906023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B00BD583-D633-4CA1-B66C-EA78BC906023}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B00BD583-D633-4CA1-B66C-EA78BC906023}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B00BD583-D633-4CA1-B66C-EA78BC906023}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -48,5 +60,7 @@ Global {B2550542-2064-4520-B79F-9A3685D6A0CE} = {85A80E33-7B0C-4913-A709-F98A7F32829A} {56725C85-3A26-4FA9-9CE4-CACDDEFF9603} = {85A80E33-7B0C-4913-A709-F98A7F32829A} {CAA3F9D3-4647-48DE-8BA7-32AC317B046D} = {85A80E33-7B0C-4913-A709-F98A7F32829A} + {8F609EDB-0CFF-4B67-A7ED-265331C90F91} = {85A80E33-7B0C-4913-A709-F98A7F32829A} + {B00BD583-D633-4CA1-B66C-EA78BC906023} = {85A80E33-7B0C-4913-A709-F98A7F32829A} EndGlobalSection EndGlobal diff --git a/HSPI/HSPIBase2.cs b/HSPI/HSPIBase2.cs index 57c0c49..690ee5e 100644 --- a/HSPI/HSPIBase2.cs +++ b/HSPI/HSPIBase2.cs @@ -52,6 +52,10 @@ public override IPlugInAPI.strInterfaceStatus InterfaceStatus() return s; } + public override string InstanceFriendlyName() + { + return string.Empty; + } public override int Capabilities() { diff --git a/Templates/HSPIPluginB.Dev/App.config b/Templates/HSPIPluginB.Dev/App.config new file mode 100644 index 0000000..731f6de --- /dev/null +++ b/Templates/HSPIPluginB.Dev/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Templates/HSPIPluginB.Dev/HSPI.cs b/Templates/HSPIPluginB.Dev/HSPI.cs new file mode 100644 index 0000000..ba56ecd --- /dev/null +++ b/Templates/HSPIPluginB.Dev/HSPI.cs @@ -0,0 +1,15 @@ +using HSPI; + +//TODO: namespace $safeprojectname$ +namespace HSPIPluginB.Dev +{ + // ReSharper disable once InconsistentNaming + public class HSPI : HspiBase2 + { + protected override string GetName() + { + //TODO: return "$projectname$"; + return "HSPIPluginB.Dev"; + } + } +} \ No newline at end of file diff --git a/Templates/HSPIPluginB.Dev/HSPIPluginB.Dev.csproj b/Templates/HSPIPluginB.Dev/HSPIPluginB.Dev.csproj new file mode 100644 index 0000000..51f85a1 --- /dev/null +++ b/Templates/HSPIPluginB.Dev/HSPIPluginB.Dev.csproj @@ -0,0 +1,67 @@ + + + + + Debug + AnyCPU + {8F609EDB-0CFF-4B67-A7ED-265331C90F91} + Exe + Properties + HSPIPluginB.Dev + HSPIPluginB.Dev + v4.6.1 + 512 + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + {5A16BE5F-4498-4AF1-9C59-3DB79662EBD7} + HSPI + + + + + \ No newline at end of file diff --git a/Templates/HSPIPluginB.Dev/Program.cs b/Templates/HSPIPluginB.Dev/Program.cs new file mode 100644 index 0000000..0e4cc51 --- /dev/null +++ b/Templates/HSPIPluginB.Dev/Program.cs @@ -0,0 +1,13 @@ +using HSPI; + +//TODO: namespace $safeprojectname$ +namespace HSPIPluginB.Dev +{ + internal class Program + { + private static void Main(string[] args) + { + Connector.Connect(args); + } + } +} \ No newline at end of file diff --git a/Templates/HSPIPluginB.Dev/Properties/AssemblyInfo.cs b/Templates/HSPIPluginB.Dev/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c390750 --- /dev/null +++ b/Templates/HSPIPluginB.Dev/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("HSPIPluginB.Dev")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("HSPIPluginB.Dev")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8f609edb-0cff-4b67-a7ed-265331c90f91")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Templates/HSPIPluginB/App.config b/Templates/HSPIPluginB/App.config new file mode 100644 index 0000000..731f6de --- /dev/null +++ b/Templates/HSPIPluginB/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Templates/HSPIPluginB/AssemblyInfo.cs b/Templates/HSPIPluginB/AssemblyInfo.cs new file mode 100644 index 0000000..a0edcb6 --- /dev/null +++ b/Templates/HSPIPluginB/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$projectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("$registeredorganization$")] +[assembly: AssemblyProduct("$projectname$")] +[assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("$guid1$")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Templates/HSPIPluginB/HS-Button_400x400.ico b/Templates/HSPIPluginB/HS-Button_400x400.ico new file mode 100644 index 0000000000000000000000000000000000000000..aa724b00d5fc8567b4ce7420981cdb2c43080cd7 GIT binary patch literal 370070 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 Cg9!xy literal 0 HcmV?d00001 diff --git a/Templates/HSPIPluginB/HSPI.cs b/Templates/HSPIPluginB/HSPI.cs new file mode 100644 index 0000000..189c76a --- /dev/null +++ b/Templates/HSPIPluginB/HSPI.cs @@ -0,0 +1,13 @@ +using HSPI; + +namespace $safeprojectname$ +{ + // ReSharper disable once InconsistentNaming + public class HSPI : HspiBase2 + { + protected override string GetName() + { + return "$projectname$"; + } + } +} \ No newline at end of file diff --git a/Templates/HSPIPluginB/HSPIPluginB.csproj b/Templates/HSPIPluginB/HSPIPluginB.csproj new file mode 100644 index 0000000..122fb60 --- /dev/null +++ b/Templates/HSPIPluginB/HSPIPluginB.csproj @@ -0,0 +1,116 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + 14.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + Debug + AnyCPU + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {B00BD583-D633-4CA1-B66C-EA78BC906023} + Library + Properties + HSPIPluginB + HSPIPluginB + v4.6.1 + 512 + false + false + false + false + false + false + false + false + false + false + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + + + + + + + + + + + + + + + + Designer + + + + + HomeSeer + + + + + + + + False + Microsoft .NET Framework 4.6.1 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + + \ No newline at end of file diff --git a/Templates/HSPIPluginB/HSPIPluginB.vstemplate b/Templates/HSPIPluginB/HSPIPluginB.vstemplate new file mode 100644 index 0000000..8cfdd16 --- /dev/null +++ b/Templates/HSPIPluginB/HSPIPluginB.vstemplate @@ -0,0 +1,36 @@ + + + + HSPIPluginB + HomeSeer HSPIPluginB project template + HS-Button_400x400.ico + CSharp + HomeSeer + 2.0 + 1000 + b29d6906-f776-41fb-8f3a-af155e56c912 + true + HSPIPluginB + true + 2 + + + + AssemblyInfo.cs + HSPI.cs + Program.cs + App.config + + + + NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + NuGet.VisualStudio.TemplateWizard + + + + + + + + + \ No newline at end of file diff --git a/Templates/HSPIPluginB/Program.cs b/Templates/HSPIPluginB/Program.cs new file mode 100644 index 0000000..044f684 --- /dev/null +++ b/Templates/HSPIPluginB/Program.cs @@ -0,0 +1,12 @@ +using HSPI; + +namespace $safeprojectname$ +{ + internal class Program + { + private static void Main(string[] args) + { + Connector.Connect(args); + } + } +} \ No newline at end of file diff --git a/Templates/HSPIPluginB/ProjectTemplate.csproj b/Templates/HSPIPluginB/ProjectTemplate.csproj new file mode 100644 index 0000000..e5c9b30 --- /dev/null +++ b/Templates/HSPIPluginB/ProjectTemplate.csproj @@ -0,0 +1,67 @@ + + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + $guid1$ + Exe + Properties + $safeprojectname$ + $safeprojectname$ + v$targetframeworkversion$ + 512 + true + x86 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + $if$ ($targetframeworkversion$ >= 3.5) + + + + $endif$ + $if$ ($targetframeworkversion$ >= 4.0) + + $endif$ + + + + + + + + + + + + + + + + diff --git a/Templates/HSPIPluginB/Properties/AssemblyInfo.cs b/Templates/HSPIPluginB/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3990bb3 --- /dev/null +++ b/Templates/HSPIPluginB/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("HSPIPluginB")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Alex Dresko")] +[assembly: AssemblyProduct("HSPIPluginB")] +[assembly: AssemblyCopyright("Copyright © Alex Dresko 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b00bd583-d633-4ca1-b66c-ea78bc906023")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Templates/HomeSeerTemplates/HomeSeerTemplates.csproj b/Templates/HomeSeerTemplates/HomeSeerTemplates.csproj index 21cae26..befb7ab 100644 --- a/Templates/HomeSeerTemplates/HomeSeerTemplates.csproj +++ b/Templates/HomeSeerTemplates/HomeSeerTemplates.csproj @@ -77,6 +77,13 @@ false TemplateProjectOutputGroup%3b + + {B00BD583-D633-4CA1-B66C-EA78BC906023} + HSPIPluginB + ProjectTemplates + false + TemplateProjectOutputGroup%3b + diff --git a/Templates/HomeSeerTemplates/Packages/HSPI.1.0.0.nupkg b/Templates/HomeSeerTemplates/Packages/HSPI.1.0.0.nupkg index 32a3fe6e39d896304e6b8a686f9973519e584e11..3c1b182ddafb5751e001f143c2a6892ccbc5b4f7 100644 GIT binary patch literal 17332 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 +