YeelightAPI 1.1.3

Xiaomi yeelight smart-devices manager

There is a newer version of this package available.
See the version list below for details.
Install-Package YeelightAPI -Version 1.1.3
dotnet add package YeelightAPI --version 1.1.3
<PackageReference Include="YeelightAPI" Version="1.1.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add YeelightAPI --version 1.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

YeelightAPI

C# API (.Net) to control Xiaomi Yeelight Color Bulbs

Prerequisites

The console project uses C# 7.1 "Async Main Method" Feature, make sure your visual studio version is up to date !

Installation

To install the latest release from NuGet package manager:

Install-Package YeelightAPI

Contribution

If you find this package useful, please make a gift on Paypal : https://www.paypal.me/roddone

Usage

Single Device

The YeelightAPI.Device allows you to create a device. Just instanciate a new Device with an ip adress or a hostname: Device device = new Device(&quot;hos.tna.meo.rIP&quot;); and initiate connection : device.Connect();.
Then you can use the device object to control the device :

  • Power on / off : device.SetPower(true);
  • Toggle State : device.Toggle();
  • Change brightness level : device.SetBrightness(100);
  • Change color : device.SetRGBColor(80, 244, 255);

Some methods use an optional parameter named "smooth", it refers to the duration in milliseconds of the effect you want to apply. For a progressive brightness change, use device.SetBrightness(100, 3000);.

If you need a method that is not implemented, you can use the folowing methods :

  • ExecuteCommandWithResponse(METHODS method, int id = 0, List&lt;object&gt; parameters = null) (with response)
  • ExecuteCommand(METHODS method, int id = 0, List&lt;object&gt; parameters = null) (without response).

These methods are generic and use the METHODS enumeration and a list of parameters, which allows you to call any known method with any parameter.
All the parameters are defined in the doc ["Yeelight WiFi Light Inter-Operation Specification"](http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf "Link to Yeelight WiFi Light Inter-Operation Specification"), section 4.1 : COMMAND Message.

Multiple-devices

If you need to control multiple devices at a time, you can use the YeelightAPI.DeviceGroup class.
This class simply ihnerits from native .net List&lt;Device&gt; and implements the IDeviceController interface, allowing you to control multiple devices the exact same way you control a single device.

	DeviceGroup group = new DeviceGroup();
	group.Add(device1);
	group.Add(device2);

	group.Connect();
	group.Toggle();
	...

Find devices

If you want to find what devices are connected, you can use YeelightAPI.DeviceLocator to find them :

	List<Device> devices = await DeviceLocator.Discover();

Async / Await

If you have to deal with asynchronism, the API fully supports async / await. The methos are the same, but they have a "Async" suffix.
Example :

	// with single device
	await device.Connect();
	await device.Toggle();

	//with groups
	await group.Connect();
	await group.Toggle();
	...

Events

Notifications

When you call a method that changes the state of the device, it sends a notification to inform that its state really change. You can receive these notification using the "OnNotificationReceived" event.
Example :

   device.OnNotificationReceived += (object sender, NotificationReceivedEventArgs arg) =>
   {
       Console.WriteLine("Notification received !! value : " + JsonConvert.SerializeObject(arg.Result));
   };

Errors

When a method returns an error, it fires a "OnCommandError" event.
Example :

   device.OnCommandError += (object sender, CommandErrorEventArgs arg) =>
   {
       Console.WriteLine($"An error occurred : {arg.Error}");
   };

VNext

  • ~~turn into a nuget package~~
  • ~~handle dns host name for bulb discovery~~
  • ~~add device discovery method in the DeviceManager~~
  • add more native methods in the DeviceManager
  • ~~full use of async / await~~
  • ~~allow to group devices to control multiple devices~~
  • correct bugs if needed

Help

If there is a functionality that you need which is not implemented, or even worse if there is a bug, you can create a pull request or contacts me at "romain.oddone.github@outlook.com"

Licence

Apache Licence

Source

This code is an implementation of the ["Yeelight WiFi Light Inter-Operation Specification"](http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf "Link to Yeelight WiFi Light Inter-Operation Specification") as defined on January 1st, 2018

YeelightAPI

C# API (.Net) to control Xiaomi Yeelight Color Bulbs

Prerequisites

The console project uses C# 7.1 "Async Main Method" Feature, make sure your visual studio version is up to date !

Installation

To install the latest release from NuGet package manager:

Install-Package YeelightAPI

Contribution

If you find this package useful, please make a gift on Paypal : https://www.paypal.me/roddone

Usage

Single Device

The YeelightAPI.Device allows you to create a device. Just instanciate a new Device with an ip adress or a hostname: Device device = new Device(&quot;hos.tna.meo.rIP&quot;); and initiate connection : device.Connect();.
Then you can use the device object to control the device :

  • Power on / off : device.SetPower(true);
  • Toggle State : device.Toggle();
  • Change brightness level : device.SetBrightness(100);
  • Change color : device.SetRGBColor(80, 244, 255);

Some methods use an optional parameter named "smooth", it refers to the duration in milliseconds of the effect you want to apply. For a progressive brightness change, use device.SetBrightness(100, 3000);.

If you need a method that is not implemented, you can use the folowing methods :

  • ExecuteCommandWithResponse(METHODS method, int id = 0, List&lt;object&gt; parameters = null) (with response)
  • ExecuteCommand(METHODS method, int id = 0, List&lt;object&gt; parameters = null) (without response).

These methods are generic and use the METHODS enumeration and a list of parameters, which allows you to call any known method with any parameter.
All the parameters are defined in the doc ["Yeelight WiFi Light Inter-Operation Specification"](http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf "Link to Yeelight WiFi Light Inter-Operation Specification"), section 4.1 : COMMAND Message.

Multiple-devices

If you need to control multiple devices at a time, you can use the YeelightAPI.DeviceGroup class.
This class simply ihnerits from native .net List&lt;Device&gt; and implements the IDeviceController interface, allowing you to control multiple devices the exact same way you control a single device.

	DeviceGroup group = new DeviceGroup();
	group.Add(device1);
	group.Add(device2);

	group.Connect();
	group.Toggle();
	...

Find devices

If you want to find what devices are connected, you can use YeelightAPI.DeviceLocator to find them :

	List<Device> devices = await DeviceLocator.Discover();

Async / Await

If you have to deal with asynchronism, the API fully supports async / await. The methos are the same, but they have a "Async" suffix.
Example :

	// with single device
	await device.Connect();
	await device.Toggle();

	//with groups
	await group.Connect();
	await group.Toggle();
	...

Events

Notifications

When you call a method that changes the state of the device, it sends a notification to inform that its state really change. You can receive these notification using the "OnNotificationReceived" event.
Example :

   device.OnNotificationReceived += (object sender, NotificationReceivedEventArgs arg) =>
   {
       Console.WriteLine("Notification received !! value : " + JsonConvert.SerializeObject(arg.Result));
   };

Errors

When a method returns an error, it fires a "OnCommandError" event.
Example :

   device.OnCommandError += (object sender, CommandErrorEventArgs arg) =>
   {
       Console.WriteLine($"An error occurred : {arg.Error}");
   };

VNext

  • ~~turn into a nuget package~~
  • ~~handle dns host name for bulb discovery~~
  • ~~add device discovery method in the DeviceManager~~
  • add more native methods in the DeviceManager
  • ~~full use of async / await~~
  • ~~allow to group devices to control multiple devices~~
  • correct bugs if needed

Help

If there is a functionality that you need which is not implemented, or even worse if there is a bug, you can create a pull request or contacts me at "romain.oddone.github@outlook.com"

Licence

Apache Licence

Source

This code is an implementation of the ["Yeelight WiFi Light Inter-Operation Specification"](http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf "Link to Yeelight WiFi Light Inter-Operation Specification") as defined on January 1st, 2018

Release Notes

Compatibility with .netstandard
Implementing IDisposable for devices
Add CommandError event
Add AutoConnect possibility when instanciating device
Full async / await support

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
1.7.0 121 12/15/2019
1.6.0 50 12/7/2019
1.5.2 135 10/14/2019
1.5.1 67 10/10/2019
1.5.0 1,833 8/25/2018
1.4.1 234 8/7/2018
1.4.0 375 7/13/2018
1.3.3 338 4/29/2018
1.3.2 247 4/3/2018
1.3.1 286 3/22/2018
1.3.0 280 3/5/2018
1.2.3 288 2/25/2018
1.2.2 326 2/22/2018
1.2.1 381 2/15/2018
1.2.0 313 2/15/2018
1.1.5 324 2/9/2018
1.1.4 285 2/7/2018
1.1.3 285 2/4/2018
1.1.2 253 1/28/2018
1.1.1 242 1/28/2018
1.1.0 281 1/27/2018
1.0.6 341 1/7/2018
1.0.5 354 1/7/2018
1.0.4 383 1/6/2018
1.0.2 355 1/3/2018
1.0.1 299 1/3/2018
1.0.0 333 1/3/2018
Show less