ControlThink Forums

Share ideas. Get peer support. Meet new friends.
Welcome to ControlThink Forums Sign in | Join | Help
in Search

Why can't I get events??

Last post 04-06-2010 8:56 AM by enrjwil2. 2 replies.
Page 1 of 1 (3 items)
Sort Posts: Previous Next
  • 01-16-2010 2:40 PM

    Why can't I get events??

    Hi,

     I'm really hoping someone can help me here, I've looked through the forums but I'm lost...

    I have a plugin module which I can turn on/off no problem through a windows form using the SDK version 1.3.0.23, but I've tried many ways to raise an event when I manually turn on/off the device.  I have setup the event handler but it never gets used!

    I see things about groups/associations/syncenabled etc - I can't even use the syncenabled (is this my problem?).  My ThinkStick teasingly flashes when I manually turn on/off the device so I know it's being sent; I just can't seem to grab the bugger!

    I just want to set up a few devices and handle events when they occur - I'm I missing something?  Please help if you can, it'll be appreciated.

    Jamie.

    Filed under: ,
  • 01-19-2010 11:42 PM In reply to

    • alfie
    • Top 25 Contributor
    • Joined on 08-17-2006
    • Memphis TN
    • Posts 64

    Re: Why can't I get events??

    It all depends on which module you are using.  If it's a Vizia, you should be able to get the events...if it's an Intermatic, you'll have to resort to polling the device.

  • 04-06-2010 8:56 AM In reply to

    Re: Why can't I get events??

     Hi Alfie,

     Can you help with the following code please?

    I can seem to get any events and think it is to do with the code (I'm new at coding and seem to be struggling a little).

    This is the Form code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using ControlThink.ZWave;
    using ControlThink;

    namespace SensorNetwrok
    {
        public partial class Form1 : Form
        {
            private ControlThink.ZWave.ZWaveController primaryController = new ControlThink.ZWave.ZWaveController();

            Controller ctrl = new Controller();
            EventProcessor eventProcessor = new EventProcessor();
            SMS sms = new SMS();

            public Form1()
            {
                InitializeComponent();

                primaryController.LevelChanged += new ZWaveController.LevelChangedEventHandler(eventProcessor.primaryController_LevelChanged);
                primaryController.ControllerNotResponding += new EventHandler(eventProcessor.primaryController_ControllerNotResponding);
                primaryController.SynchronizingObject = this;
            }

            #region config tab


            private void updateUI(bool connected)
            {
                if (connected)
                {
                    btnConnectDisconnect.Text = "Disconnect";
                }
                else
                {
                    btnConnectDisconnect.Text = "Connect";
                    lblHomeID.Text = "###";
                    lblNodeID.Text = "###";
                }

                gBoxSensorType.Enabled = connected;
                btnRemoveDevices.Enabled = connected;
                btnAllOn.Enabled = connected;
                btnAllOff.Enabled = connected;
                btnResetUSB.Enabled = connected;
                btnGetNetworkConfig.Enabled = connected;
                ddlSelectNode.Enabled = connected;
                btnNodeOnOff.Enabled = connected;
            }

            private void btnConnectDisconnect_Click(object sender, EventArgs e)
            {
                bool isConnected = false;

                if (btnConnectDisconnect.Text.ToString() == "Connect")
                {
                    isConnected = ctrl.connect(this);

                    if (isConnected)
                    {
                        lblHomeID.Text = ctrl.getHomeID().ToString();
                    }
                    else
                    {
                        lblHomeID.Text = "###";
                    }
                }
                else
                {
                    ctrl.disconnect();
                }

                updateUI(isConnected);
            }

            private void btnAddDevice_Click(object sender, EventArgs e)
            {
                string sensorType = string.Empty;

                if (radioAddAlarm.Checked)
                {
                    sensorType = "Alarm";
                }
                else if (radioAddTemp.Checked)
                {
                    sensorType = "Temp";
                }
                else if (radioAddSmoke.Checked)
                {
                    sensorType = "Smoke";
                }
                else
                {
                    sensorType = "Water";
                }

                bool nodeAdded = ctrl.addDevice(this);
                if (nodeAdded)
                {
                    lblNodeID.Text = ctrl.getNodeID().ToString();
                    ctrl.setSensorType(sensorType, Convert.ToInt16(lblNodeID.Text));
                }
            }

            private void btnRemoveDevices_Click(object sender, EventArgs e)
            {
                //ControlThink.ZWave.Devices.ZWaveDevice device = EventProcessor.getDevice();
                bool deviceRemoved = ctrl.removeDevice(this);
                if (deviceRemoved)
                {
                    lblNodeID.Text = ctrl.getNodeID().ToString();
                }
            }

            private void btnGetNetworkConfig_Click(object sender, EventArgs e)
            {
                bool updated = ctrl.updateNetworkConfig();

                //Update the display to show the action status
                if (updated)
                {
                    lblConfigStatus.Text = "Update Successful!";
                }
                else
                {
                    lblConfigStatus.Text = "Update Failed!";
                }
            }

            private void btnResetUSB_Click(object sender, EventArgs e)
            {
                bool ResetUSB = ctrl.resetUSB();
                if (ResetUSB)
                {
                    ddlSelectNode.Items.Clear();
                    btnNodeOnOff.Text = "On/Off";
                }
                else
                {
                    //Update display
                }
            }

            private void btnAllOn_Click(object sender, EventArgs e)
            {
                ctrl.allOn();
                if (btnNodeOnOff.Text != "On/Off")
                {
                    btnNodeOnOff.Text = "Off";
                }
            }

            private void btnAllOff_Click(object sender, EventArgs e)
            {
                ctrl.allOff();
                if (btnNodeOnOff.Text != "On/Off")
                {
                    btnNodeOnOff.Text = "On";
                }
            }

            private void ddlSelectNode_SelectedIndexChanged(object sender, EventArgs e)
            {
                byte selectedNode = Convert.ToByte(ddlSelectNode.SelectedItem.ToString());

                //Determine if the selected node is on or off
                bool nodeState = ctrl.getSelectedNodeState(selectedNode);
                if (nodeState)
                {
                    btnNodeOnOff.Text = "Off";
                }
                else
                {
                    btnNodeOnOff.Text = "On";
                }
            }

            private void btnNodeOnOff_Click(object sender, EventArgs e)
            {
                byte node;

                //Turn on or off the selected node depending on the button text
                if (btnNodeOnOff.Text == "On")
                {
                    node = Convert.ToByte(ddlSelectNode.SelectedItem.ToString());
                    ctrl.turnNodeOn(node);
                    btnNodeOnOff.Text = "Off";
                }
                else if (btnNodeOnOff.Text == "Off")
                {
                    node = Convert.ToByte(ddlSelectNode.SelectedItem.ToString());
                    ctrl.turnNodeOff(node);
                    btnNodeOnOff.Text = "On";
                }
                else
                {
                    //Warn user when no device is selected
                    MessageBox.Show("There is no device selected!", "Error");
                }
            }

            private void radioAddAlarm_CheckedChanged(object sender, EventArgs e)
            {
                btnAddDevice.Enabled = radioAddAlarm.Checked;
            }

            private void radioAddTemp_CheckedChanged(object sender, EventArgs e)
            {
                btnAddDevice.Enabled = radioAddTemp.Checked;
            }

            private void radioAddSmoke_CheckedChanged(object sender, EventArgs e)
            {
                btnAddDevice.Enabled = radioAddSmoke.Checked;
            }

            private void radioAddWater_CheckedChanged(object sender, EventArgs e)
            {
                btnAddDevice.Enabled = radioAddWater.Checked;
            }

            #endregion config tab

            #region System settings

            //Set the Low Temp checkbox values
            private void checkLowTempDetection_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setLowTempDetectionState(checkLowTemp.Checked);
            }
            private void checkLowTemp_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setLowTempSMS(checkLowTemp.Checked);
            }

            //Set the Smoke checkbox values
            private void checkSmokeDetection_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setSmokeDetectionState(checkSmokeDetection.Checked);
            }
            private void checkSmokeSMS_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setSmokeSMS(checkSmokeSMS.Checked);
            }

            //Set the Water checkbox values
            private void checkWaterDetection_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setWaterDetectionState(checkWaterDetection.Checked);
            }
            private void checkWaterSMS_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setWaterSMS(checkWaterSMS.Checked);
            }

            //Deactivate the Alarm
            private void checkDeactivateAlarm_CheckedChanged(object sender, EventArgs e)
            {
                eventProcessor.setDeactivateAlarmState(checkDeactivateAlarm.Checked);
                if (checkDeactivateAlarm.Checked)
                {
                    ctrl.deactivateAlarm();
                }
            }

            #endregion System settings

            #region SMS settings

            private void btnSMSSet_Click(object sender, EventArgs e)
            {
                string smsNumber = string.Empty;

                if (mskSMSAlert1.MaskCompleted && mskSMSAlert1.Text.StartsWith("0"))
                {
                    //Save the number in smsNumber holder once converted to international format
                    smsNumber = mobileNoConvert(mskSMSAlert1.Text);
                    //Pass the number to the SMS class
                    sms.setSMSNumber(smsNumber);
                    sms.setsmsNumberEntered(true);
                }
                else
                {
                    MessageBox.Show("No number or incorrect format entered!", "Error!");
                }
            }

            private void btnClickatellSet_Click(object sender, EventArgs e)
            {
                string smsUserName = string.Empty;
                string smsPass = string.Empty;
                string smsAPIID = string.Empty;
                string smsFrom = string.Empty;

                //Check mandatory fields are supplied by the user
                if ((tboxSMSUserName.Text == string.Empty) | (tboxSMSPassword.Text == string.Empty) | (tboxSMSAPIID.Text == string.Empty))
                {
                    MessageBox.Show("A 'User Name', 'Password' and 'API ID' are required!", "Error");

                }
                else
                {
                    sms.setSMSUserName(tboxSMSUserName.Text);
                    sms.setSMSPass(tboxSMSPassword.Text);
                    sms.setSMSAPIID(tboxSMSAPIID.Text);
                    sms.setSMSFrom(tboxSMSSenderName.Text);
                    sms.setsmsSettingEntered(true);
                }
            }

            private string mobileNoConvert(string mskSMSAlert)
            {
                //The dash was used to give the user a 'check-point' during number entry, we now need to remove it
                string SMSRemoveDash = mskSMSAlert.Replace("-", "");

                //We forced the user to start a number with '0' (as UK mobiles always do) - now we need to replace it with '44' (int dial code for UK)
                string SMSInternatonal = "44" + SMSRemoveDash.Remove(0, 1);

                return (SMSInternatonal);
            }

            private void btnSendSMS_Click(object sender, EventArgs e)
            {
                sms.sendSMS("This is a test");
            }

            private void linkClickatell_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                try
                {
                    System.Diagnostics.Process.Start("IExplore", "http://www.clickatell.com");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Unable to launch Internet Browser!", "Error.");
                }
            }

            #endregion SMS settings    

           
        }
    }

     

    -------------------------------------------------------------------------------------------------------------------------------------------------------

    This is the EventProcessor Class:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using ControlThink.ZWave;
    using ControlThink;

    namespace SensorNetwrok
    {
        public class EventProcessor
        {
            private ControlThink.ZWave.Devices.ZWaveDevice eventDevice;

            private bool lowTempActive;
            private bool smokeDetectionActive;
            private bool waterDetectionActive;

            private bool lowTempSMS;
            private bool smokeSMS;
            private bool waterSMS;
            private bool deactivateAlarmState;

            Controller ctrl = new Controller();
            SMS sms = new SMS();


            #region get/set

            public ControlThink.ZWave.Devices.ZWaveDevice getDevice()
            {
                return eventDevice;
            }

            //Get/Set Low Temp states
            public void setLowTempDetectionState(bool state)
            {
                lowTempActive = state;
            }
            public bool getLowTempDetectionState()
            {
                return lowTempActive;
            }

            //Get/Set Smoke states
            public void setSmokeDetectionState(bool state)
            {
                smokeDetectionActive = state;
            }
            public bool getSmokeDetectionState()
            {
                return smokeDetectionActive;
            }

            //Get/Set Water states
            public void setWaterDetectionState(bool state)
            {
                waterDetectionActive = state;
            }
            public bool getWaterDetectionState()
            {
                return waterDetectionActive;
            }

            //Get/Set Low Temp SMS
            public void setLowTempSMS(bool state)
            {
                lowTempSMS = state;
            }
            public bool getLowTempSMS()
            {
                return lowTempSMS;
            }

            //Get/Set Smoke SMS
            public void setSmokeSMS(bool state)
            {
                smokeSMS = state;
            }
            public bool getSmokeSMS()
            {
                return smokeSMS;
            }

            //Get/Set Water SMS
            public void setWaterSMS(bool state)
            {
                waterSMS = state;
            }
            public bool getWaterSMS()
            {
                return waterSMS;
            }
            public bool getDeactivateAlarmState()
            {
                return deactivateAlarmState;
            }
            public void setDeactivateAlarmState(bool deactivateAlarm)
            {
                deactivateAlarmState = deactivateAlarm;
            }


            #endregion get/set

            public void primaryController_LevelChanged(object sender, ControlThink.ZWave.ZWaveController.LevelChangedEventArgs e)
            {
                MessageBox.Show("EVENT!");

                if (e.OriginDevice != null)
                {
                    //Get a hold on the device which sent the event
                    eventDevice = e.OriginDevice;

                    //If it isn't the primary controller that raised the event
                    if (eventDevice.NodeID != 1)
                    {
                        //Get the type of sensor that raised the event
                        string sensorType = ctrl.getSensorType(Convert.ToInt16(eventDevice.NodeID));

                        switch (sensorType)
                        {
                            case "Alarm":
                                //Ignore the alarm event - it will be activated/deactivated by the sensors
                                break;
                            case "Temp":
                                if (lowTempSMS)
                                {
                                    MessageBox.Show("EVENT! - AT LAST!!");
                                    sms.sendSMS("Temperature");
                                }
                                if (lowTempActive)
                                {
                                    ctrl.activateAlarm();
                                }
                                break;
                            case "Smoke":
                                if (smokeSMS)
                                {
                                    sms.sendSMS("Smoke Alarm");
                                }
                                if (lowTempActive)
                                {
                                    ctrl.activateAlarm();
                                }
                                break;
                            case "Water":
                                if (lowTempSMS)
                                {
                                    sms.sendSMS("Water");
                                }
                                if (waterSMS)
                                {
                                    ctrl.activateAlarm();
                                }
                                break;
                            //The default should never be used - fail safe, activate alarm and send SMS to be sure
                            default:
                                sms.sendSMS("Unknown Sensor!");
                                ctrl.activateAlarm();
                                break;
                        }
                    }
                    //The event came from the primary controller - should not occur, but included as a fail-safe.
                    else
                    {
                        MessageBox.Show("Please check the USB device is plugged in and try again.", "Controller NOT Responding!");
                    }
                }
            }
            //Event to deal with the controller not responding (possibly the user never plugged it in!)
            public void primaryController_ControllerNotResponding(object sender, EventArgs e)
            {
                //Deal with CNR event
                MessageBox.Show("Please check the USB device is plugged in and try again.", "Controller NOT Responding!");

            }
        }
    }
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    I'd be ever so greatful if you could help.

     

    Kind Regards,

    Jamie.

    Filed under: ,
Page 1 of 1 (3 items)