FeasaLedAnalyser 0.1.0
dotnet add package FeasaLedAnalyser --version 0.1.0
NuGet\Install-Package FeasaLedAnalyser -Version 0.1.0
<PackageReference Include="FeasaLedAnalyser" Version="0.1.0" />
<PackageVersion Include="FeasaLedAnalyser" Version="0.1.0" />
<PackageReference Include="FeasaLedAnalyser" />
paket add FeasaLedAnalyser --version 0.1.0
#r "nuget: FeasaLedAnalyser, 0.1.0"
#:package FeasaLedAnalyser@0.1.0
#addin nuget:?package=FeasaLedAnalyser&version=0.1.0
#tool nuget:?package=FeasaLedAnalyser&version=0.1.0
FeasaLedAnalyser
A .NET library for reading measurements from Feasa LED analysers over their USB-serial interface — RGBI, HSI, xy/xyi chromaticity, CCT, CIE XYZ, wavelength, intensity, and more — parsed into typed objects instead of raw strings.
Node.js and Python ports are planned; this repo currently ships the .NET package.
Install
dotnet add package FeasaLedAnalyser
Usage
Auto-detect the analyser's COM port
using FeasaLedAnalyser;
var client = new FeasaClient(); // same as new FeasaClient("auto", 57600)
client.OnLog += Console.WriteLine;
if (await client.ConnectAsync())
{
await client.CaptureAsync();
var rgbi = await client.GetRgbiAsync();
foreach (var reading in rgbi)
Console.WriteLine(reading); // Fiber 1: R=45 G=132 B=77 I=55
var cct = await client.GetCctAsync();
var cieXyz = await client.GetCieXyzAsync();
client.Disconnect();
}
Connect to a known port manually
var client = new FeasaClient("COM7", 57600);
await client.ConnectAsync();
Both forms take the port (or "auto") and baud rate in the constructor;
ConnectAsync() uses whatever was configured there. Pass a port name to
ConnectAsync("COM3") instead if you need to override it after construction
(e.g. from a UI dropdown).
Reading everything at once
var snapshot = await client.GetAllReadingsAsync();
// snapshot.Rgbi, snapshot.Cct, snapshot.CieXyz, etc.
Supported measurements
| Method | Returns | Fields |
|---|---|---|
GetRgbiAsync() |
List<RgbiReading> |
Red, Green, Blue, Intensity |
GetHsiAsync() |
List<HsiReading> |
Hue, Saturation, Luminosity |
GetXyAsync() |
List<XyReading> |
x, y |
GetXyiAsync() |
List<XyiReading> |
x, y, Intensity |
GetCctAsync() |
List<CctReading> |
TemperatureKelvin, Deviation |
GetUvAsync() |
List<UvReading> |
U, V |
GetCieXyzAsync() |
List<CieXyzReading> |
X, Y, Z |
GetWiAsync() |
List<WiReading> |
WavelengthNm, Intensity |
GetWsiAsync() |
List<WsiReading> |
WavelengthNm, Saturation, Intensity |
GetSignalLevelAsync() |
List<SignalLevelReading> |
Value, Unit ("%") |
GetWavelengthAsync() / GetIntensityAsync() / GetAbsIntAsync() |
List<SingleValueReading> |
Value |
Every reading also carries FiberNumber and Raw (the untouched line from the
device, for debugging).
Wire format note
Confirmed against a real analyser: responses are one space-separated line per
fiber, fiber number first — e.g. 01 045 132 077 00055 for an RGBI reply.
Fiber-looped commands (CIEXYZ, Absint — one command sent per fiber, e.g.
getCIEXYZ03) don't repeat the fiber number in the response; it's tracked
from the command that was sent. If your firmware/model differs, the fix is
isolated to
FeasaResponseParser.cs;
nothing else in the library depends on the exact format.
Testing
dotnet test tests/FeasaLedAnalyser.Tests/FeasaLedAnalyser.Tests.csproj
The test suite checks FeasaResponseParser against real output captured from
an actual analyser — no hardware needed to run it.
Protocol
Built from publicly available Feasa serial command documentation. Not an official Feasa library — command behavior may vary by device/firmware revision.
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.IO.Ports (>= 8.0.0)
-
net8.0
- System.IO.Ports (>= 8.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 120 | 9/4/2026 |