private void Receive(IAsyncResult ar) { try { IPEndPoint ip = new IPEndPoint(IPAddress.Any, PORT_NUMBER); byte[] bytes = udp.EndReceive(ar, ref ip); var message = Encoding.ASCII.GetString(Messaging.SmartHomeProtocolEncoder.Decrypt(bytes)); var sys_info = ((dynamic)JObject.Parse(message)).system.get_sysinfo; TPLinkSmartDevice device = null; if (((string)sys_info.model).StartsWith("HS")) { device = new TPLinkSmartPlug(ip.Address.ToString()); } else if (((string)sys_info.model).StartsWith("LB")) { device = new TPLinkSmartBulb(ip.Address.ToString()); } if (device != null) { DiscoveredDevices.Add(device); } } catch (Exception ex) { } if (udp != null) { StartListening(); } }
private void metroToggle1_CheckedChanged(object sender, EventArgs e) { var hostname = listView1.SelectedItems[0].SubItems[2].Text; TPLinkSmartPlug plug = new TPLinkSmartPlug(hostname); plug.OutletPowered = metroToggle1.Checked; }
private async Task Receive() { while (true) { if (discoveryComplete) //Prevent ObjectDisposedException/NullReferenceException when the Close() function is called { return; } IPEndPoint ip = new IPEndPoint(IPAddress.Any, PORT_NUMBER); UdpReceiveResult result = await udp.ReceiveAsync().ConfigureAwait(false); ip = result.RemoteEndPoint; var message = Encoding.ASCII.GetString(Messaging.SmartHomeProtocolEncoder.Decrypt(result.Buffer)); TPLinkSmartDevice device = null; try { dynamic sys_info = ((dynamic)JObject.Parse(message)).system.get_sysinfo; string model = (string)sys_info.model; if (model != null) { if (model.StartsWith("HS110")) { device = await TPLinkSmartMeterPlug.Create(ip.Address.ToString()).ConfigureAwait(false); } else if (model.StartsWith("HS300") || model.StartsWith("KP303") || model.StartsWith("HS107")) { device = await TPLinkSmartMultiPlug.Create(ip.Address.ToString()).ConfigureAwait(false); } else if (model.StartsWith("HS220")) { device = await TPLinkSmartDimmer.Create(ip.Address.ToString()).ConfigureAwait(false); } else if (model.StartsWith("HS")) { device = await TPLinkSmartPlug.Create(ip.Address.ToString()).ConfigureAwait(false); } else if (model.StartsWith("KL") || model.StartsWith("LB")) { device = await TPLinkSmartBulb.Create(ip.Address.ToString()).ConfigureAwait(false); } } } catch (RuntimeBinderException) { //discovered wrong device } if (device != null) { DiscoveredDevices.Add(device); OnDeviceFound(device); } } }
private void Receive(IAsyncResult ar) { if (discoveryComplete) //Prevent ObjectDisposedException/NullReferenceException when the Close() function is called { return; } IPEndPoint ip = new IPEndPoint(IPAddress.Any, PORT_NUMBER); byte[] bytes = udp.EndReceive(ar, ref ip); var message = Encoding.UTF8.GetString(Messaging.SmartHomeProtocolEncoder.Decrypt(bytes)); var sys_info = ((dynamic)JObject.Parse(message)).system.get_sysinfo; TPLinkSmartDevice device = null; if (((JObject)sys_info).Count != 0 && sys_info.model != null) { string model = (string)sys_info.model; if (model.StartsWith("HS110")) { device = new TPLinkSmartMeterPlug(ip.Address.ToString()); } else if (model.StartsWith("HS")) { device = new TPLinkSmartPlug(ip.Address.ToString()); } else if (model.StartsWith("LB")) { device = new TPLinkSmartBulb(ip.Address.ToString()); } else if (model.StartsWith("KP303")) { device = new TPLinkSmartStrip(ip.Address.ToString()); } } if (device != null) { DiscoveredDevices.Add(device); OnDeviceFound(device); // If the caller has specified a maximum number of devices to discover, stop waiting after we've // reached this count if (maxNumberOfDevicesToDiscover > 0 && DiscoveredDevices.Count >= maxNumberOfDevicesToDiscover) { delayCancellationToken.Cancel(); } } if (udp != null) { StartListening(); } }
/// <summary> /// Turn on SDN Smart Plug /// </summary> /// <returns>true if successful</returns> private bool PowerOnDevice() { if (this.IsPoweredOn()) { return(true); } else { var plug = new TPLinkSmartPlug(this.HostName) { OutletPowered = true }; this.IsTurnedOn = true; return(true); } }
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { metroToggle1.Enabled = true; // Get plug state var hostname = listView1.SelectedItems[0].SubItems[2].Text; TPLinkSmartPlug plug = new TPLinkSmartPlug(hostname); // Update toggle metroToggle1.Checked = plug.OutletPowered; } else { metroToggle1.Enabled = false; } }
static void Main(string[] args) { var smartPlug = new TPLinkSmartPlug("HS100"); var smartBulb = new TPLinkSmartBulb("LB130"); if (!smartBulb.PoweredOn) { //smartBulb.PoweredOn = false; } if (!smartPlug.OutletPowered) { //smartPlug.OutletPowered = false; } Console.WriteLine($@"Device Name: { smartBulb.Alias }"); Console.WriteLine($@"Device Status: { smartBulb.PoweredOn }"); Console.WriteLine(); Console.WriteLine($@"Device Name: { smartPlug.Alias }"); Console.WriteLine($@"Device Status: { smartPlug.OutletPowered }"); Console.WriteLine(); Console.ReadLine(); if (smartBulb.PoweredOn) { //smartBulb.PoweredOn = true; } if (smartPlug.OutletPowered) { //smartPlug.OutletPowered = true; } Console.WriteLine($@"Device Name: { smartBulb.Alias }"); Console.WriteLine($@"Device Status: { smartBulb.PoweredOn }"); Console.WriteLine(); Console.WriteLine($@"Device Name: { smartPlug.Alias }"); Console.WriteLine($@"Device Status: { smartPlug.OutletPowered }"); Console.WriteLine(); Console.ReadLine(); }
private void Receive(IAsyncResult ar) { if (discoveryComplete) //Prevent ObjectDisposedException/NullReferenceException when the Close() function is called { return; } IPEndPoint ip = new IPEndPoint(IPAddress.Any, PORT_NUMBER); byte[] bytes = udp.EndReceive(ar, ref ip); var message = Encoding.ASCII.GetString(Messaging.SmartHomeProtocolEncoder.Decrypt(bytes)); var sys_info = ((dynamic)JObject.Parse(message)).system.get_sysinfo; TPLinkSmartDevice device = null; string model = (string)sys_info.model; if (model.StartsWith("HS110")) { device = new TPLinkSmartMeterPlug(ip.Address.ToString()); } else if (model.StartsWith("HS")) { device = new TPLinkSmartPlug(ip.Address.ToString()); } else if (model.StartsWith("LB")) { device = new TPLinkSmartBulb(ip.Address.ToString()); } if (device != null) { DiscoveredDevices.Add(device); } if (udp != null) { StartListening(); } }
private async Task ReceiveAsync(int waitTimeOutInMs) { if (discoveryComplete) //Prevent ObjectDisposedException/NullReferenceException when the Close() function is called { return; } UdpClient udpListener = new UdpClient(PORT_NUMBER) { EnableBroadcast = true }; // set timeout //udpListener.Client.ReceiveTimeout = Math.Max(waitTimeOutInMs, 100); //IPEndPoint ip = default; //byte[] buffer = udpListener.Receive(ref ip); UdpReceiveResult response = await udpListener.ReceiveAsync().ConfigureAwait(false); IPEndPoint ip = response.RemoteEndPoint; var message = Encoding.ASCII.GetString(SmartHomeProtocolEncoder.Decrypt(response.Buffer)); try { TPLinkSmartDevice device = null; dynamic sys_info = ((dynamic)JObject.Parse(message)).system.get_sysinfo; string model = (string)sys_info.model; if (model != null) { if (model.StartsWith("HS110", StringComparison.OrdinalIgnoreCase)) { device = new TPLinkSmartMeterPlug(ip.Address.ToString()); } else if (model.StartsWith("HS", StringComparison.OrdinalIgnoreCase)) { device = new TPLinkSmartPlug(ip.Address.ToString()); } else if (model.StartsWith("KL", StringComparison.OrdinalIgnoreCase) || model.StartsWith("LB", StringComparison.OrdinalIgnoreCase)) { device = await TPLinkKL130.CreateNew(ip.Address.ToString()); } // new device found, store in list and raise event if (device != null) { DiscoveredDevices.Add(device); OnDeviceFound(device); } } } catch (RuntimeBinderException ex) { //discovered wrong device Debug.WriteLine(ex.Message); } finally { // ensure the socket is closed even if exception happenned udpListener.Dispose(); } discoveryComplete = true; }