Reactive.Boolean
0.3.0
See the version list below for details.
dotnet add package Reactive.Boolean --version 0.3.0
NuGet\Install-Package Reactive.Boolean -Version 0.3.0
<PackageReference Include="Reactive.Boolean" Version="0.3.0" />
paket add Reactive.Boolean --version 0.3.0
#r "nuget: Reactive.Boolean, 0.3.0"
// Install Reactive.Boolean as a Cake Addin #addin nuget:?package=Reactive.Boolean&version=0.3.0 // Install Reactive.Boolean as a Cake Tool #tool nuget:?package=Reactive.Boolean&version=0.3.0
Reactive.Boolean
Reactive Extensions meant specifically for implementations of IObservable<bool>
This documentation uses marble diagrams to explain the transformations of IObservable<bool>
. More on marble diagrams can be found in the documentation of ReactiveX.
Article containing examples in relation to home automation: Article with examples.
Logical Operators
This library has extension methods for logical operators:
Not
And
And (not distinct)
Or
Or (not distinct)
XOr
Scheduling
This library also has extension methods for scheduling:
TrueForAtLeast
Returns an observable that won't emit false for at least timespan after an initial "true" is emitted by source.
Example Use Case
Turn on a light for at least 3 seconds after a button was pressed. If 3 seconds are passed, only keep it on if the button is still being pressed, but immediately turn if off if not.
// buttonPressed is a IObservable<bool>
var buttonPressed = button.StateChanges().Select(s => s.State == "pressed");
buttonPressed
.TrueForAtLeast(TimeSpan.FromSeconds(3), scheduler)
.SubscribeTrueFalse(
() => light.TurnOn(),
() => light.TurnOff());
PersistTrueFor
Returns an observable that stays true for a time span once the source observable turns back to false.
Example Use Case
Keep a light on for 3 more seconds after last motion was detected.
// motionDetected is a IObservable<bool>
var motionDetected = motionSensor.StateChanges().Select(s => s.State == "motion detected");
motionDetected
.PersistTrueFor(TimeSpan.FromSeconds(3), scheduler)
.SubscribeTrueFalse(
() => light.TurnOn(),
() => light.TurnOff());
WhenTrueFor
Returns an observable that emits true once the source observable emits true for a minimum time span.
Example Use Case
Send notification when washing machine power has been 0 for at least 1 minute.
// washingMachineCurrentIsZero is a IObservable<bool>
var washingMachineCurrentIsZero = washingMachineCurrent.StateChanges().Select(s => s.State == 0);
washingMachineCurrentIsZero
.WhenTrueFor(TimeSpan.FromMinutes(1), scheduler)
.SubscribeTrue(() => notification.Send("Washing machine is done!"));
LimitTrueDuration
Returns an observable that stays true for a maximum of time span. If the source observable emits false before the time has passed, the resulting observable also emits false.
Example Use Case
Keep closet lights on for a maximum amount of time.
// closetDoorOpen is a IObservable<bool>
var closetDoorOpen = closetDoor.StateChanges().Select(s => s.State == "open");
closetDoorOpen
.LimitTrueDuration(TimeSpan.FromMinutes(2), scheduler)
.SubscribeTrueFalse(
() => closetLight.TurnOn(),
() => closetLight.TurnOff());
Subscribing
Besides transformations, this library has extension methods that help with common cases of subscribing to implementations of IObservable<bool>
: SubscribeTrueFalse
, SubscribeFalse
and SubscribeTrue
.
Example
boolObservable.SubscribeTrueFalse(
() => {
// Logic for when observable emits true.
},
() => {
// Logic for when observable emits false.
}
)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. 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 is compatible. 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 is compatible. 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. |
-
net6.0
- System.Reactive (>= 6.0.1)
-
net7.0
- System.Reactive (>= 6.0.1)
-
net8.0
- System.Reactive (>= 6.0.1)
-
net9.0
- System.Reactive (>= 6.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Reactive.Boolean:
Package | Downloads |
---|---|
DevJasper.NetDaemon.Extensions.Observables
Collection of extension methods meant to enhance NetDaemon entities with stateful and boolean observables allowing for more robust implementations and a more intuitive coding experience. |
GitHub repositories
This package is not used by any popular GitHub repositories.