FellowAiden 1.1.0
dotnet add package FellowAiden --version 1.1.0
NuGet\Install-Package FellowAiden -Version 1.1.0
<PackageReference Include="FellowAiden" Version="1.1.0" />
<PackageVersion Include="FellowAiden" Version="1.1.0" />
<PackageReference Include="FellowAiden" />
paket add FellowAiden --version 1.1.0
#r "nuget: FellowAiden, 1.1.0"
#:package FellowAiden@1.1.0
#addin nuget:?package=FellowAiden&version=1.1.0
#tool nuget:?package=FellowAiden&version=1.1.0
FellowAiden (.NET)
A .NET client for the Fellow Aiden coffee
brewer's cloud API. A port of the TypeScript client
fellow-aiden
(repo), itself based on the
Python library 9b/fellow-aiden.
Unofficial — not affiliated with or endorsed by Fellow.
Other implementations
| Language | Package | Repository |
|---|---|---|
| TypeScript / JavaScript | fellow-aiden (npm) |
fellow-aiden-ts |
| .NET (this repo) | FellowAiden (NuGet) |
fellow-aiden-dotnet |
| Python (original) † | fellow-aiden (PyPI) |
9b/fellow-aiden |
† The original library that inspired these ports. It may be unmaintained and might not currently work against the live API.
Install
dotnet add package FellowAiden
Targets .NET 8. No third-party dependencies (uses HttpClient +
System.Text.Json).
Quick start
using FellowAiden;
// Authentication is async, so use the static factory.
using var aiden = await FellowAidenClient.CreateAsync(new FellowAidenOptions
{
Email = Environment.GetEnvironmentVariable("FELLOW_EMAIL")!,
Password = Environment.GetEnvironmentVariable("FELLOW_PASSWORD")!,
});
Console.WriteLine($"{aiden.DisplayName} ({aiden.BrewerId})");
foreach (var p in await aiden.GetProfilesAsync())
{
Console.WriteLine($"{p.Title} [{p.Id}]");
}
API
Construction & auth
FellowAidenClient.CreateAsync(options, innerHandler?, ct)— construct, authenticate, load the device.new FellowAidenClient(options, innerHandler?)thenawait AuthenticateAsync()— manual flow.innerHandlerlets you inject a handler (e.g. for testing).AuthenticateAsync()— (re)log in; also called automatically once on a401.
FellowAidenOptions: Email, Password, BrewerId?, BaseUrl?, UserAgent?, MaxRetries?.
Device
DisplayName/BrewerIdproperties — the bound deviceGetBrewersAsync(refresh = false, ct)— every brewer on the account (id, name, config), for accounts with more than one AidenGetDeviceConfigAsync(refresh = false, ct)AdjustSettingAsync(setting, value, ct)
Multiple brewers on one account
By default the client binds the account's first device. To target a specific Aiden, list them and
pass the id via FellowAidenOptions.BrewerId:
using var account = await FellowAidenClient.CreateAsync(new FellowAidenOptions { Email = email, Password = password });
foreach (var b in await account.GetBrewersAsync())
{
Console.WriteLine($"{b.DisplayName} [{b.Id}]");
}
// Bind a specific brewer for subsequent operations.
using var office = await FellowAidenClient.CreateAsync(new FellowAidenOptions
{
Email = email, Password = password, BrewerId = "dev-2",
});
Profiles
GetProfilesAsync(refresh = false, ct)GetProfileByTitleAsync(title, fuzzy = false, ct)— exact (case-insensitive) by default; fuzzy uses a difflib-equivalent ratio > 0.65.CreateProfileAsync(profile, ct)— validates first.UpdateProfileAsync(profileId, profile, ct)DeleteProfileByIdAsync(profileId, ct)GenerateShareLinkAsync(profileId, ct)ParseBrewLinkUrlAsync(link, ct)/CreateProfileFromLinkAsync(link, ct)
Schedules
GetSchedulesAsync(refresh = false, ct)CreateScheduleAsync(schedule, ct)— validates first.ToggleScheduleAsync(scheduleId, enabled, ct)DeleteScheduleByIdAsync(scheduleId, ct)
Validation
CoffeeProfile.Validate() and CoffeeSchedule.Validate() enforce the same
rules as the Python/TS originals (ratio 14–20 step 0.5, temperatures 50–98.5
step 0.5, bloom ratios, ranges, title charset, schedule days/water/profileId)
and throw FellowAidenValidationException with all failures. The allowed grids
are exposed on AllowedValues. The client validates automatically on
create/update. Other failures throw FellowAidenApiException (status + body)
or FellowAidenAuthException; all derive from FellowAidenException.
Sample
samples/FellowAiden.Sample — set
FELLOW_EMAIL / FELLOW_PASSWORD then dotnet run --project samples/FellowAiden.Sample.
Releasing
Bump <Version> in src/FellowAiden/FellowAiden.csproj, then push an
annotated tag (a lightweight git tag vX is not pushed by --follow-tags):
git tag -a v1.2.3 -m "v1.2.3"
git push --follow-tags
The tag triggers release.yml, which builds,
tests, packs, and publishes to NuGet via
trusted publishing
(OIDC — no API key stored).
License
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.