From c1d9029a73e7d140c506c70b74df4505b3dc00af Mon Sep 17 00:00:00 2001 From: Sven van Heugten Date: Mon, 5 Jan 2026 23:21:46 +0100 Subject: [PATCH] Demonstrate and fix some odd behaviour with some bulbs --- NightLight.Core.Tests/FakeHome.fs | 3 +++ NightLight.Core/NightLightStateMachine.fs | 15 +++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/NightLight.Core.Tests/FakeHome.fs b/NightLight.Core.Tests/FakeHome.fs index 11e0bb0..bf1b919 100644 --- a/NightLight.Core.Tests/FakeHome.fs +++ b/NightLight.Core.Tests/FakeHome.fs @@ -46,6 +46,9 @@ type FakeLight(light: Light) = if hasPower then brightness <- newBrightness + if light.Bulb = IkeaBulb then + state <- true + member _.SetColor(newColor: Color) = if hasPower then color <- newColor diff --git a/NightLight.Core/NightLightStateMachine.fs b/NightLight.Core/NightLightStateMachine.fs index 0d6728e..6068de5 100644 --- a/NightLight.Core/NightLightStateMachine.fs +++ b/NightLight.Core/NightLightStateMachine.fs @@ -12,12 +12,14 @@ let internal tryFindLight friendlyName = Seq.tryFind (fun light -> light.FriendlyName = friendlyName) lights let internal generateZigbeeCommandsToFixLight state partOfDay light = - let color, brightness = - getDesiredMood light.Room partOfDay |> getDesiredColorAndBrightness light.Bulb - seq { - generateStateCommand state light - generateZigbeeCommand color brightness light + yield generateStateCommand state light + + if state = On then + let color, brightness = + getDesiredMood light.Room partOfDay |> getDesiredColorAndBrightness light.Bulb + + yield generateZigbeeCommand color brightness light } type NightLightStateMachine private (maybeTime: DateTime option, lightToState: Map) = @@ -53,7 +55,8 @@ type NightLightStateMachine private (maybeTime: DateTime option, lightToState: M |> Seq.fold (fun acc key -> Map.add key desiredLightState acc) lightToState NightLightStateMachine(maybeTime, newLightToState), - remoteControlledLights |> Seq.map (generateStateCommand desiredLightState) + remoteControlledLights + |> Seq.collect (fun light -> generateZigbeeCommandsToFixLight desiredLightState partOfDay light) | TimeChanged newTime, maybePartOfDay -> let newState = NightLightStateMachine(Some newTime, lightToState) let newPartOfDay = getPartOfDay newTime