All pastes #176686 Raw Edit

Trucs

public text v1 · immutable
#176686 ·published 2006-09-19 21:38 UTC
rendered paste body
using VB = Microsoft.VisualBasic;
using System.Text;
[Serializable()]
public class HSPI : MarshalByRefObject
{
	/*
    ' sample plug-in for HomeSeer
    ' this control will interface between HomeSeer and a custom
    ' device supporting X10, IR, or I/O
    ' after this control is registered, the new device will appear
    ' in the interfaces tab in HomeSeer and the user may select it
*/

    bool AlreadyDisplayedError;
    internal Timers.Timer Timer1;
    internal Timers.Timer IRTimer;
	//capabilites of device (this OCX) (bits)
    const short CA_X10 = 1;
    const short CA_IR = 2;
    const short CA_IO = 4;
    const short CA_THERM = 16;
    const short CA_MUSIC = 32;
    /*callback constants
    ' see the HS docs and Appendix A for information on HS callbacks*/
    const short EV_TYPE_X10 = 1;
    const short EV_TYPE_LOG = 2;
    const short EV_TYPE_STATUS_CHANGE = 4;
    const short EV_TYPE_AUDIO = 8;
    const short EV_TYPE_X10_TRANSMIT = 16;
    const short EV_TYPE_CONFIG_CHANGE = 32;
    const short EV_TYPE_STRING_CHANGE = 64;

    private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        DeviceTrigger("Family Room", "Motion");
    }
    
#Region "    Common Plug-In Interface Procedures    "

    /*' ********************************** Common Interface ****************************
    '
    ' All plug-ins must support these methods and properties

    ' return capabilities of this device*/
    public int Capabilities()
    {
	    //tell HS we support all interfaces
        Capabilities = CA_X10 | CA_IR | CA_IO;
    }

    /*' return the name of your X10 device
    ' this name will appear in the HS interfaces tab*/
    public string Name {
        get {
            return IFACE_NAME;
        }
    }
    
    /*HomeSeer will call this function to register a callback object
    ' If events are needed (for things like IR matching, X10 events, etc.), call back
    ' to HomeSeer using this function.*/
    public void RegisterCallback(ref object frm)
    {
	    /*' call back into HS and get a reference to the HomeSeer ActiveX interface
        ' this can be used make calls back into HS like hs.SetDeviceStatus, etc.
        ' The callback object is a different interface reserved for plug-ins.
        */
        callback = frm;
        hs = frm.GetHSIface;
        if (hs == null) {
            MsgBox("Unable to access HS interface", MsgBoxStyle.Critical);
        } else {
            hs.WriteLog("Sample Plug-in Info", "Register callback completed");
            InterfaceVersion = hs.InterfaceVersion;
            hs.WriteLog("Sample Plug-in Info", "Application path: " + hs.GetAppPath);
        }
    }

    public short InterfaceStatus()
    {
	    /*return status of interface
    ' see Module1.bas for constants*/
        InterfaceStatus = ERR_NONE;
    }

    /*return the access level for this plugin
    ' 1=everyone can access, no protection
    ' 2=level 2 plugin. Level 2 license required to run this plugin
    */
    public short AccessLevel()
    {
        AccessLevel = 1;
    }

    /*This indicates to HS that we are ready for HomeSeer 2.0 in areas such as
    '   SetIOEx instead of SetIO*/
    public bool SupportsHS2 {
        get {
            return true;
        }
    }

#End Region

#Region "    SetIOEx - Device Command Handler    "

    /*' This function is called when an action on a device is to be executed.
    ' If a device's status is set to ON or OFF, or its value changes, this function is called
    ' note that this will be called for ALL I/O devices. You must check and make sure that
    ' the housecode value belongs to you. When your control is initialized, allocate a free
    ' housecode and save it in the registry. Restore it whenever you are initialized*/
    public void SetIOEx(object dv, string housecode, string devicecode, short command, short brightness, short data1, short data2, string voice_command, string host)
    {
        bool bOurs = false;
        if (!(dv == null)) {
            if (dv.interface.trim == IFACE_NAME) {
                bOurs = true;
                hs.WriteLog(IFACE_NAME, "SetIOEx called for " + dv.location + " " + dv.location2 + " " + dv.name);
            } else {
return;
            }
        }
        if (!(bOurs)) {
            if (gBaseCode.ToUpper != housecode.Trim.ToUpper) {
return;
            }
        }
        hs.WriteLog(IFACE_NAME, "SetIOEx for " + housecode + devicecode + ", Cmd=" + command.ToString + ", Brt=" + brightness.ToString + ", D1/D2=" + data1.ToString + "/" + data2.ToString + ", Vcmd=" + voice_command + ", Host=" + host);
    }

    
  #End Region

#Region "    HSEvent - HomeSeer Event Callback Handler    "  
    public void HSEvent(ref object[][0] parms)
    {
        if (System.Convert.ToInt32(parms(0)) == EV_TYPE_STATUS_CHANGE) {
            hs.WriteLog(IFACE_NAME, "Status change " + parms(2) + parms(1) + " Command: " + System.Convert.ToString(parms(3)));
        } else if (System.Convert.ToInt32(parms(0)) == EV_TYPE_AUDIO) {
            if (parms(1)) {
                hs.WriteLog(IFACE_NAME, "Audio is started");
            } else {
                hs.WriteLog(IFACE_NAME, "Audio has stopped");
            }
        } else if (System.Convert.ToInt32(parms(0)) == EV_TYPE_STRING_CHANGE) {
            hs.WriteLog(IFACE_NAME, "String change event for " + System.Convert.ToString(parms(1)) + " to string:" + System.Convert.ToString(parms(2)));
        }
    }
#End Region

#Region "    X-10 Plug-In Related Procedures    "

    /*' ********************************** X10 Interface ****************************
    '
    ' X10 interface

    ' called when HS shuts down
    ' release any memory or free any ports here*/
    public void ShutDownX10()
    {
	  //Do something...
        IRTimer.Enabled = false;
        Timer1.Enabled = false;
        WebLink1 = null;
	  //then indicate that it has been shut down:
        gX10Enabled = false;
    }

    /*init function, called when HS starts up
    ' return error string or empty string if ok*/
    public string InitX10(ref int port)
    {
        string s = "";
        // TODO: NotImplemented statement: ICSharpCode.SharpRefactory.Parser.AST.VB.OnErrorStatement
        if (gIREnabled | gIOEnabled | gX10Enabled) {
            return "";
        }
        s = InitHW(port);
        if (s.Trim == "") InitCommon();
		  
        gX10Enabled = true;
        return s;
    }

    /*
    send an X10 command over the powerline
    ' the command should be queued as this function can be called
    ' many times. Queuing is optional
    '
    ' data1 and data2 are the two extended bytes for the X10 Extended command*/
    public void Exec(ref object dv, ref string housecode, ref string devicecode, ref short command, ref short brightness, ref short data1, ref short data2)
    {
        hs.WriteLog(IFACE_NAME, "Exec called for " + housecode + devicecode);
    }

    /*send an X10 command over the powerline and do not return until command
    ' is actually sent
    '
    ' data1 and data2 are the two extended bytes for the X10 Extended command
    '*/
    public void ExecWait(ref object dv, ref string housecode, ref string devicecode, ref short command, ref short brightness, ref short data1, ref short data2)
    {
        hs.WriteLog(IFACE_NAME, "ExecWait called for " + housecode + devicecode);
    }
}