Reefact.LuxaforLightingDeviceController 1.1.1

Prefix Reserved
dotnet add package Reefact.LuxaforLightingDeviceController --version 1.1.1                
NuGet\Install-Package Reefact.LuxaforLightingDeviceController -Version 1.1.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Reefact.LuxaforLightingDeviceController" Version="1.1.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Reefact.LuxaforLightingDeviceController --version 1.1.1                
#r "nuget: Reefact.LuxaforLightingDeviceController, 1.1.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Reefact.LuxaforLightingDeviceController as a Cake Addin
#addin nuget:?package=Reefact.LuxaforLightingDeviceController&version=1.1.1

// Install Reefact.LuxaforLightingDeviceController as a Cake Tool
#tool nuget:?package=Reefact.LuxaforLightingDeviceController&version=1.1.1                

Luxafor Device Controller

A .Net library that provides a simple API to control Luxafor devices.

Luxafor

Company Overview

Luxafor is a company that designs and sells products for office productivity, such as availability indicators and notification tools.

Their flagship product is an LED availability indicator that can be programmed to display different colors depending on the user's availability status.

Luxafor's goal is to provide users with a simple and effective way to signal their availability to co-workers and improve communication and collaboration in the workplace.

Quick overview of the devices

Here is a non-exhaustive list of Luxafor devices:

  • Luxafor Flag: an LED availability indicator that displays personal availability
  • Luxafor Bluetooth: a wireless, software-controlled LED availability indicator that displays notifications and personal availability
  • Luxafor Switch: a wireless, remote-controlled availability indicator that displays the availability of meeting rooms and workstations in real time
  • Luxafor Cube: a standalone LED availability indicator that displays meeting room availability
  • Luxafor Pomodoro-Timer: a USB-powered LED timer that divides work into smaller time slots (see Pomodoro)
  • Luxafor Orb: a wide angle USB LED availability indicator
  • Luxafor CO2 Monitor: a sensor that analyzes the air quality of a room and alerts you when it needs to be ventilated
  • Luxafor Mute Button: turn on/off the microphone with a single touch and indicate if you are available with the red/green
  • Luxafor Colorblind Flag: monochrome USB LED availability light eliminates distractions and boosts productivity

Integration

These different devices are designed to be driven manually ('mechanical') for some, semi-automatically (manual driving via software) / automatically (integration via software to tools like Teams, Skype, Cisco, Zappier or via Webhook) for others.

Presentation of the library

This library aims to allow the integration of USB LED devices to your in-house applications without having to go through the Luxafor server (webhook).

It is developed in .Net Core and is based on the library HidLibrairy which allows to enumerate and communicate with HID compatible USB devices in .NET.

The code below presents an example of basic use of the library for the control of a Luxafor Orb device.

[Fact]
public void french_sequence() {
    LuxaforDevice orb = Luxafor.GetDevices().First();
    for (var i = 0; i < 3; i++) {
        orb.SetBasicColor(BasicColor.Blue);
        Thread.Sleep(500);
        orb.SetBasicColor(BasicColor.White);
        Thread.Sleep(500);
        orb.SetBasicColor(BasicColor.Red);
        Thread.Sleep(500);
        orb.SetBasicColor(BasicColor.Off);
        Thread.Sleep(1000);
    }
}

Line 3 shows how to connect to a single Orb connected to the machine's USB port.

I will quickly go through all the possible commands to send to devices from the LuxaforDevice.

Turn off

void TurnOff(); // Turns off all the LEDs of the device
void TurnOff(TargetedLeds targetedLeds); // Turn off the targeted LEDs of the device

Set a single color

void SetColor(BrightColor color); // Turns on the device's LEDs in a custom color.

Make a transition (fade)

void FadeColor(BrightColor color, FadeDuration duration); // Make a transition from all the LEDs of the device to a custom color
void FadeColor(TargetedLeds targetedLeds, BrightColor color, FadeDuration duration); // Performs a transition from the targeted device LEDs to a custom color

Flashing (strobe effect)

void Strobe(BrightColor color, Speed speed, Repeat repeat); // Flashes all the LEDs of the device in a custom color
void Strobe(TargetedLeds targetedLeds, BrightColor color, Speed speed, Repeat repeat); // Flashes the targeted device LEDs in a custom color

Waves / built-in patterns

void PlayPattern(WavePattern wavePattern, BrightColor color, Speed speed, Repeat repeat); // Starts a wave pattern that targets all the LEDs of the device based on a custom color
void PlayPattern(BuiltInPattern, Repeat repeat); // Starts an embedded pattern that targets all LEDs on the device

Send a command

It is possible to create custom commands called LightingCommand so that they can be reused in the code:

var command = LightingCommand.CreateStrobeCommand(TargetedLeds.All, BrightColor.Yellow, Speed.FromByte(20), Repeat.Count(3));

The Send method allows you to use these commands.

void Send(LightingCommand command); // Send a command to the device
Product 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 was computed.  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. 
.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 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
1.1.1 770 2/6/2023
1.1.0 658 2/6/2023
1.0.1 660 2/6/2023

Fix inclusion of pdb + xml documentation files in Nuget package for the .Net Standard assembly.