ThreeByte.LinkLib.NetBooter
1.0.4
dotnet add package ThreeByte.LinkLib.NetBooter --version 1.0.4
NuGet\Install-Package ThreeByte.LinkLib.NetBooter -Version 1.0.4
<PackageReference Include="ThreeByte.LinkLib.NetBooter" Version="1.0.4" />
<PackageVersion Include="ThreeByte.LinkLib.NetBooter" Version="1.0.4" />
<PackageReference Include="ThreeByte.LinkLib.NetBooter" />
paket add ThreeByte.LinkLib.NetBooter --version 1.0.4
#r "nuget: ThreeByte.LinkLib.NetBooter, 1.0.4"
#:package ThreeByte.LinkLib.NetBooter@1.0.4
#addin nuget:?package=ThreeByte.LinkLib.NetBooter&version=1.0.4
#tool nuget:?package=ThreeByte.LinkLib.NetBooter&version=1.0.4
🔋 ThreeByte.LinkLib.NetBooter
Client library for controlling Synaccess NetBooter networked power controllers — toggle outlets, poll state, and monitor power remotely.
✨ Features
| Feature | Description |
|---|---|
| 🔋 Outlet Control | Turn individual power outlets on and off programmatically |
| 📊 State Polling | Query all outlet states in a single call |
| 🔔 Property Change Notifications | Implements INotifyPropertyChanged for UI data binding |
| 🌐 HTTP-Based | Communicates via the NetBooter's built-in web API |
| ⚠️ Error Events | Event-driven error reporting |
📦 Installation
dotnet add package ThreeByte.LinkLib.NetBooter
or via the NuGet Package Manager:
Install-Package ThreeByte.LinkLib.NetBooter
🚀 Quick Start
using ThreeByte.LinkLib.NetBooter;
// Connect to a NetBooter device
var netBooter = new NetBooterLink("192.168.1.10");
// Subscribe to errors
netBooter.ErrorOccurred += (s, ex) =>
Console.WriteLine($"Error: {ex.Message}");
// Turn on outlet 1
netBooter.Power(outlet: 1, state: true);
// Turn off outlet 3
netBooter.Power(outlet: 3, state: false);
// Poll all outlet states from the device
netBooter.PollState();
// Check individual outlet states
bool outlet1 = netBooter[1]; // true = ON
bool outlet2 = netBooter[2]; // false = OFF
Console.WriteLine($"Outlet 1: {(outlet1 ? "ON" : "OFF")}");
Console.WriteLine($"Outlet 2: {(outlet2 ? "ON" : "OFF")}");
WPF / MVVM Data Binding
NetBooterLink implements INotifyPropertyChanged, making it easy to bind to UI:
<StackPanel DataContext="{Binding NetBooter}">
<TextBlock Text="{Binding [1], StringFormat='Outlet 1: {0}'}" />
<TextBlock Text="{Binding [2], StringFormat='Outlet 2: {0}'}" />
<Button Content="Refresh" Command="{Binding PollCommand}" />
</StackPanel>
📖 API Reference
NetBooterLink
Constructor
NetBooterLink(string ipAddress)
Properties
| Property | Type | Description |
|---|---|---|
this[int port] |
bool |
Indexer — get the power state of outlet N (true = ON) |
Methods
| Method | Returns | Description |
|---|---|---|
Power(int outlet, bool state) |
void |
Set outlet power: true = ON, false = OFF |
PollState() |
void |
Query all outlet states from the device |
Events
| Event | Args | Description |
|---|---|---|
PropertyChanged |
PropertyChangedEventArgs |
Fires when an outlet state changes (INotifyPropertyChanged) |
ErrorOccurred |
Exception |
Fires on communication errors |
🏗️ Architecture
┌──────────────────────────────────────────────┐
│ NetBooterLink │
│ │
│ Power(outlet, state) ─────┐ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ HTTP Commands │ │
│ │ │ │
│ │ SET: $A3 {o} {s} │ │
│ │ POLL: $A5 │ │
│ └────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ NetBooter Device │ │
│ │ http://{ip}/ │ │
│ │ cmd.cgi │ │
│ └─────────────────────┘ │
│ │ │
│ PollState() ─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────┐ │
│ │ Outlet State Dictionary │ │
│ │ { 1: ON, 2: OFF, 3: ON, ... } │ │
│ └─────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PropertyChanged events → UI binding │
└──────────────────────────────────────────────┘
🔧 How It Works
The library communicates with Synaccess NetBooter devices via their HTTP CGI interface:
| Operation | HTTP Request | Example |
|---|---|---|
| Power On outlet 1 | GET /cmd.cgi?$A3 1 1 |
Turns on outlet 1 |
| Power Off outlet 2 | GET /cmd.cgi?$A3 2 0 |
Turns off outlet 2 |
| Poll State | GET /cmd.cgi?$A5 |
Returns binary string of all outlet states |
State Response Format
The device returns a binary string where each bit (right-to-left) represents an outlet:
Response: "1101"
||||
|||└─ Outlet 1: ON
||└── Outlet 2: OFF
|└─── Outlet 3: ON
└──── Outlet 4: ON
🎯 Platform Support
| Platform | Supported |
|---|---|
| .NET 10.0 | ✅ |
| .NET Standard 2.1 | ✅ |
| .NET Standard 2.0 | ✅ |
| Windows | ✅ |
| Linux | ✅ |
| macOS | ✅ |
📄 License
Part of the ThreeByte.LinkLib family of communication libraries.
| 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 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. 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 is compatible. 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 is compatible. |
| .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
- ThreeByte.LinkLib.Shared (>= 1.0.4)
-
.NETStandard 2.1
- ThreeByte.LinkLib.Shared (>= 1.0.4)
-
net10.0
- ThreeByte.LinkLib.Shared (>= 1.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.