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.