hi All,
Ihave a problem with zwave devices when i add one zwave device in zwave network it works correctly but when add another zwave device in zwave network i get a "Command has timeout " problem .
code is following;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
ControlThink.ZWave;
using
System.Timers;namespace Zwave_BinaryDevice
{
public partial class Form1 : Form
{
private ZWaveController objController = new ZWaveController();
private ControlThink.ZWave.Devices.ZWaveDevice objDevice;private System.Timers.Timer tmr = new System.Timers.Timer();
IAsyncResult ar;IAsyncResult arCheckUSB; public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
objController.DeviceAdded += new ZWaveController.DeviceUpdateEventHandler(objController_DeviceAdded);
objController.DeviceRemoved +=
new ZWaveController.DeviceUpdateEventHandler(objController_DeviceRemoved);objController.ControllerNotResponding += new EventHandler(objController_ControllerNotResponding);
objController.Connected +=
new EventHandler(objController_Connected);
objController.SynchronizingObject =
this;
}
void objController_ControllerNotResponding(object sender, EventArgs e)
{
try
{
objController.Dispose();
objController = new ZWaveController();
objController.Connect();
}
catch(Exception ex)
{
MessageBox.Show("not connected");
}
}
void objController_Connected(object sender, EventArgs e)
{
MessageBox.Show("Controller is Concted" + " " + objController.Devices.Count.ToString());
}
void objController_DeviceRemoved(object sender, ZWaveController.DeviceUpdateEventArgs e)
{
}
void objController_DeviceAdded(object sender, ZWaveController.DeviceUpdateEventArgs e)
{
if (e.Device.GetType().ToString() == "ControlThink.ZWave.Devices.MultilevelSwitch")
{
MessageBox.Show(e.Device.GetType().ToString() + " " + e.Device.NodeID.ToString() + " " + e.Device.Level.ToString());
objDevice = (ControlThink.ZWave.Devices.
MultilevelSwitch)e.Device;objDevice.PollEnabled = true;
objDevice.PollInterval = System.
TimeSpan.FromMilliseconds(1000); objDevice.LevelChanged += new ControlThink.ZWave.Devices.ZWaveDevice.LevelChangedEventHandler(objDevice_LevelChanged);
}
if (e.Device.GetType().ToString() == "ControlThink.ZWave.Devices.BinarySwitch")
{
objDevice = (ControlThink.ZWave.Devices.BinarySwitch) e.Device;
objDevice.PollEnabled =
true;objDevice.PollInterval = System.TimeSpan.FromMilliseconds(1000);
objDevice.LevelChanged +=
new ControlThink.ZWave.Devices.ZWaveDevice.LevelChangedEventHandler(objDevice_LevelChanged);MessageBox.Show(e.Device.GetType().ToString() + " " + e.Device.NodeID.ToString() + " " + e.Device.Level.ToString());
}
else
{
e.Device.LevelChanged += new ControlThink.ZWave.Devices.ZWaveDevice.LevelChangedEventHandler(objDevice_LevelChanged);
e.Device.PollEnabled =
true;e.Device.PollInterval = System.TimeSpan.FromMilliseconds(1000);
}
}
void objDevice_LevelChanged(object sender, ControlThink.ZWave.Devices.LevelChangedEventArgs e)
{
if (e.GetHashCode().ToString() == "ControlThink.ZWave.Devices.MultilevelSwitch")
{
MessageBox.Show("hi");
}
string str = objDevice.NodeID.ToString();
}
private void btnReset_Click(object sender, EventArgs e)
{
objController.HardReset();
MessageBox.Show(objController.Devices.Count.ToString());
}
private void btnConnectDisconnect_Click(object sender, EventArgs e)
{
try
{
objController.Connect();
if (objController.IsConnected)
{
tmr.AutoReset = true;
tmr.Interval = 5000;
tmr.Elapsed +=
new ElapsedEventHandler(tmr_Elapsed);listBox1.Items.Add("Controller is Connected");
}
}
catch (Exception ex)
{
objController.Dispose();
listBox1.Items.Add("Controller is Not Connected");
}
}
void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
if (arCheckUSB == null)
{
AsyncCallback acb = new AsyncCallback(CheckingUSB);
tmr.Stop();
arCheckUSB = objController.BeginReceiveConfiguration(acb, objController);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
tmr.Stop();
}
}
private void btnAddDevice_Click(object sender, EventArgs e)
{
MessageBox.Show("Click OK, and then press the button on the device to add." + System.Environment.NewLine + System.Environment.NewLine + "NOTE: Your USB dongle must be within 3 feet of the device you're trying to add.");
try
{
{
objDevice = objController.AddDevice();
objDevice.PollEnabled = true;
objDevice.PollInterval = System.
TimeSpan.FromMilliseconds(1000);objDevice.LevelChanged += new ControlThink.ZWave.Devices.ZWaveDevice.LevelChangedEventHandler(objDevice_LevelChanged);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}catch (Exception ex)
{
MessageBox.Show("Add device failed.");
}
}
private void btnAllOn_Click(object sender, EventArgs e)
{
foreach (ControlThink.ZWave.Devices.ZWaveDevice device in objController.Devices)
{
try
{
device.PowerOn();
MessageBox.Show(objDevice.Name.ToString() + " " + objDevice.NodeID.ToString() + " " + objDevice.Level.ToString());
}
catch
{
}
}
}
private void btnAllOff_Click(object sender, EventArgs e)
{
foreach (ControlThink.ZWave.Devices.ZWaveDevice device in objController.Devices)
{
try
{
device.PowerOff();
listBox1.Items.Add(objDevice.Name.ToString()+" "+ objDevice.NodeID.ToString()+" "+ objDevice.Level.ToString());
}
catch
{
}
}
}
public void ManualAddition()
{
AsyncCallback acb = new AsyncCallback(Manually);
ar = objController.BeginAddDevice(acb, objController);
}
public void Manually(object state)
{
try
{
objController.EndAddDevice(ar);
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
ManualAddition();
}
private void btnManual_Click(object sender, EventArgs e)
{
ManualAddition();
}
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Add(
"Devices count: " + objController.Devices.Count.ToString());
}
private void btnCheckUSB_Click(object sender, EventArgs e)
{
if (objController.Devices.Count > 0)
{
try
{
AsyncCallback acb = new AsyncCallback(CheckingUSB);
arCheckUSB = objController.BeginAddDevice(acb, objController );
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
public void CheckingUSB(object state)
{
try
{
if (arCheckUSB == null)
{
MessageBox.Show("USB is not connected");return;
}
objController.EndReceiveConfiguration(arCheckUSB );
arCheckUSB = null;
}
catch(Exception ex)
{
arCheckUSB = null;
MessageBox.Show(ex.Message);
}
}
private void btnRemoveDevice_Click(object sender, EventArgs e)
{
MessageBox.Show("Click OK, and then press the button on the device to remove." + System.Environment.NewLine + System.Environment.NewLine + "NOTE: Your USB dongle must be within 3 feet of the device you're trying to remove.");
try
{
try
{
objDevice = objController.RemoveDevice();
if (objController.Devices.GetType().ToString() == "ControlThink.ZWave.Devices.BinarySwitch")
{
objDevice.PollEnabled = true;
objDevice.PollInterval = System.
TimeSpan.FromMilliseconds(1000);objDevice.LevelChanged += new ControlThink.ZWave.Devices.ZWaveDevice.LevelChangedEventHandler(objDevice_LevelChanged);listBox1.Items.Add(objDevice.Name.ToString() + " " + objDevice.NodeID.ToString() + " " + objDevice.Level.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}catch (Exception ex)
{
MessageBox.Show("Add device failed.");
}
}
}
}