diff --git a/GoveeCSharpConnector/Interfaces/IGoveeUdpService.cs b/GoveeCSharpConnector/Interfaces/IGoveeUdpService.cs
index cca79f0..f848ae5 100644
--- a/GoveeCSharpConnector/Interfaces/IGoveeUdpService.cs
+++ b/GoveeCSharpConnector/Interfaces/IGoveeUdpService.cs
@@ -1,4 +1,8 @@
using System.Data;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Text.Json;
using GoveeCSharpConnector.Objects;
namespace GoveeCSharpConnector.Interfaces;
@@ -36,7 +40,7 @@ public interface IGoveeUdpService
/// In Percent 1-100
/// Port of the Device. Standard 4003
///
- Task SetBrightness(string deviceAddress, short brightness, int uniCastPort = 4003);
+ Task SetBrightness(string deviceAddress, int brightness, int uniCastPort = 4003);
///
/// Sets the Color of the Device
///
@@ -60,4 +64,4 @@ public interface IGoveeUdpService
///
///
void StopUdpListener();
-}
\ No newline at end of file
+}
diff --git a/GoveeCSharpConnector/Services/GoveeUdpService.cs b/GoveeCSharpConnector/Services/GoveeUdpService.cs
index 27d8b96..7c9ffb1 100644
--- a/GoveeCSharpConnector/Services/GoveeUdpService.cs
+++ b/GoveeCSharpConnector/Services/GoveeUdpService.cs
@@ -48,7 +48,7 @@ public class GoveeUdpService : IGoveeUdpService
};
// Subscribe to ScanResultSubject
var devicesTask = _scanResultSubject
- .TakeUntil(Observable.Timer(timeout ?? TimeSpan.FromMilliseconds(200)))
+ .TakeUntil(Observable.Timer(timeout ?? TimeSpan.FromMilliseconds(300)))
.ToList()
.ToTask();
@@ -126,7 +126,7 @@ public class GoveeUdpService : IGoveeUdpService
}
}
///
- public async Task SetBrightness(string deviceAddress, short brightness, int uniCastPort = 4003)
+ public async Task SetBrightness(string deviceAddress, int brightness, int uniCastPort = 4003)
{
try
{
diff --git a/GoveeCsharpConnector.Example/Program.cs b/GoveeCsharpConnector.Example/Program.cs
index 4e095fa..7148b1d 100644
--- a/GoveeCsharpConnector.Example/Program.cs
+++ b/GoveeCsharpConnector.Example/Program.cs
@@ -8,8 +8,10 @@ namespace GoveeCsharpConnector.Example;
public class Program
{
- private static GoveeApiService _goveeApiService = new GoveeApiService();
- public static List _apiDevices = new List();
+ private static readonly GoveeApiService GoveeApiService = new ();
+ private static readonly GoveeUdpService GoveeUdpService = new ();
+ private static List _apiDevices = new ();
+ private static List _udpDevices = new();
public static async Task Main(string[] args)
{
@@ -31,7 +33,7 @@ public class Program
break;
case "2":
Console.WriteLine("Requesting Devices ...");
- _apiDevices = await _goveeApiService.GetDevices();
+ _apiDevices = await GoveeApiService.GetDevices();
Console.WriteLine("Devices:");
foreach (var device in _apiDevices)
{
@@ -39,7 +41,6 @@ public class Program
}
Console.WriteLine($"Total: {_apiDevices.Count} Devices.");
EndSegment();
-
break;
case "3":
if (_apiDevices.Count == 0)
@@ -68,11 +69,11 @@ public class Program
if (input == "on")
{
- await _goveeApiService.ToggleState(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput).DeviceId, _apiDevices.First(x => x.DeviceName.ToLower() == nameInput).Model, true);
+ await GoveeApiService.ToggleState(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput).DeviceId, _apiDevices.First(x => x.DeviceName.ToLower() == nameInput).Model, true);
}
else
{
- await _goveeApiService.ToggleState(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput).DeviceId, _apiDevices.First(x => x.DeviceName.ToLower() == nameInput).Model, false);
+ await GoveeApiService.ToggleState(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput).DeviceId, _apiDevices.First(x => x.DeviceName.ToLower() == nameInput).Model, false);
}
EndSegment();
break;
@@ -102,7 +103,7 @@ public class Program
return;
}
- await _goveeApiService.SetBrightness(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput2).DeviceId, _apiDevices.First(x => x.DeviceName.ToLower() == nameInput2).Model, value);
+ await GoveeApiService.SetBrightness(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput2).DeviceId, _apiDevices.First(x => x.DeviceName.ToLower() == nameInput2).Model, value);
Console.WriteLine($"Set Brightness of Device {nameInput2} to {value}%!");
EndSegment();
break;
@@ -134,21 +135,117 @@ public class Program
switch (colorInput)
{
case "blue":
- await _goveeApiService.SetColor(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput3).DeviceId, model, new RgbColor(0, 0 ,254));
+ await GoveeApiService.SetColor(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput3).DeviceId, model, new RgbColor(0, 0 ,254));
break;
case "green":
- await _goveeApiService.SetColor(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput3).DeviceId, model, new RgbColor(0, 254 ,0));
+ await GoveeApiService.SetColor(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput3).DeviceId, model, new RgbColor(0, 254 ,0));
break;
case "red":
- await _goveeApiService.SetColor(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput3).DeviceId, model, new RgbColor(254, 0 ,0));
+ await GoveeApiService.SetColor(_apiDevices.First(x => x.DeviceName.ToLower() == nameInput3).DeviceId, model, new RgbColor(254, 0 ,0));
break;
}
Console.WriteLine($"Set Color of Device {nameInput3} to {colorInput}!");
EndSegment();
break;
+ case "6":
+ Console.WriteLine("Requesting Devices ...");
+ _udpDevices = await GoveeUdpService.GetDevices();
+ Console.WriteLine("Devices:");
+ foreach (var device in _udpDevices)
+ {
+ Console.WriteLine($"IpAddress: {device.ip}, Device Id: {device.device}, Model: {device.sku}");
+ }
+ Console.WriteLine($"Total: {_udpDevices.Count} Devices.");
+ EndSegment();
+ break;
+ case "7":
+ var selectedDevice = GetUdpDeviceSelection();
+
+ Console.WriteLine($"Do you want to turn the Device {selectedDevice.ip} on or off?");
+ var onOffInput2 = Console.ReadLine()?.ToLower();
+ if (string.IsNullOrWhiteSpace(onOffInput2) || (onOffInput2 != "on" && onOffInput2 != "off"))
+ {
+ Console.WriteLine("Invalid Input!");
+ EndSegment();
+ return;
+ }
+
+ if (input == "on")
+ {
+ await GoveeUdpService.ToggleDevice(selectedDevice.ip, true);
+ }
+ else
+ {
+ await GoveeUdpService.ToggleDevice(selectedDevice.ip, false);
+ }
+ EndSegment();
+ break;
+ case "8":
+ var selectedDevice2 = GetUdpDeviceSelection();
+
+ Console.WriteLine($"Please enter a Brightness Value for Device {selectedDevice2.ip}. 0-100");
+ var brightnessInput2 = Console.ReadLine();
+ int value2 = Convert.ToInt16(brightnessInput2);
+ if (string.IsNullOrWhiteSpace(brightnessInput2) || value2 < 0 || value2 > 100)
+ {
+ Console.WriteLine("Invalid Input!");
+ EndSegment();
+ return;
+ }
+
+ await GoveeUdpService.SetBrightness(selectedDevice2.ip, value2);
+ Console.WriteLine($"Set Brightness of Device {selectedDevice2.ip} to {value2}%!");
+ EndSegment();
+ break;
+ case "9":
+ var selectedDevice3 = GetUdpDeviceSelection();
+ Console.WriteLine($"Please choose a Color to set {selectedDevice3.ip} to ... (blue, red, green)");
+ var colorInput2 = Console.ReadLine()?.ToLower();
+ if (string.IsNullOrWhiteSpace(colorInput2) || (colorInput2 != "blue" && colorInput2 != "green" && colorInput2 != "red"))
+ {
+ Console.WriteLine("Invalid Input!");
+ EndSegment();
+ return;
+ }
+
+ switch (colorInput2)
+ {
+ case "blue":
+ GoveeUdpService.SetColor(selectedDevice3.ip, new RgbColor(0, 0, 254));
+ break;
+ case "green":
+ GoveeUdpService.SetColor(selectedDevice3.ip, new RgbColor(0, 254, 0));
+ break;
+ case "red":
+ GoveeUdpService.SetColor(selectedDevice3.ip, new RgbColor(254, 0, 0));
+ break;
+ }
+ Console.WriteLine($"Set Color of Device {selectedDevice3.ip} to {colorInput2}!");
+ EndSegment();
+ break;
}
}
+ private static GoveeUdpDevice GetUdpDeviceSelection()
+ {
+ var count = 1;
+ Console.WriteLine("Please Choose a Device from the List:");
+ foreach (var device in _udpDevices)
+ {
+ Console.WriteLine($"{count} - IpAdress: {device.ip}, Device Id {device.device}, Model {device.sku}");
+ count++;
+ }
+
+ var input = Console.ReadLine();
+ if (string.IsNullOrWhiteSpace(input) || Int16.TryParse(input, out var result) is false)
+ {
+ Console.WriteLine("Invalid Input!");
+ return GetUdpDeviceSelection();
+ }
+
+ return _udpDevices[result];
+ }
+
private static void HandleApiInput()
{
while (true)
@@ -161,7 +258,7 @@ public class Program
Console.WriteLine("Wrong Api Key Format!");
continue;
}
- _goveeApiService.SetApiKey(input);
+ GoveeApiService.SetApiKey(input);
break;
}
Console.WriteLine("Api Key saved!");
@@ -180,7 +277,7 @@ public class Program
Console.WriteLine($"Version: {Assembly.GetEntryAssembly()?.GetName().Version}");
Console.WriteLine($"To test/explore the GoveeCSharpConnector Version: {Assembly.Load("GoveeCSharpConnector").GetName().Version}");
Console.WriteLine("----------------------------------------------------------");
- if (string.IsNullOrEmpty(_goveeApiService.GetApiKey()))
+ if (string.IsNullOrEmpty(GoveeApiService.GetApiKey()))
{
Console.WriteLine("1 - Enter GoveeApi Key - START HERE (Required for Api Service Options!)");
}