Give every light its own type
This commit is contained in:
parent
dbb0389e61
commit
50c8a413a6
6 changed files with 72 additions and 50 deletions
|
|
@ -50,7 +50,7 @@ type FakeLight(light: Light) =
|
|||
if hasPower then
|
||||
brightness <- newBrightness
|
||||
|
||||
if light.Bulb = IkeaBulb then
|
||||
if (lightProps light).Bulb = IkeaBulb then
|
||||
state <- true
|
||||
|
||||
member _.SetColor(newColor: Color) =
|
||||
|
|
@ -60,7 +60,7 @@ type FakeLight(light: Light) =
|
|||
type FakeHome() =
|
||||
let friendlyNameToFakeLight =
|
||||
lights
|
||||
|> Seq.map (fun light -> light.FriendlyName, FakeLight light)
|
||||
|> Seq.map (fun light -> (lightProps light).FriendlyName, FakeLight light)
|
||||
|> Map.ofSeq
|
||||
|
||||
let onEventPublished = new Event<Event>()
|
||||
|
|
@ -113,17 +113,17 @@ type FakeHome() =
|
|||
member _.Interact(interaction: Interaction) =
|
||||
match interaction with
|
||||
| HumanInteraction(LightPoweredOn light) ->
|
||||
friendlyNameToFakeLight[light.FriendlyName].PowerOn()
|
||||
friendlyNameToFakeLight[(lightProps light).FriendlyName].PowerOn()
|
||||
|
||||
{ Topic = "zigbee2mqtt/bridge/event"
|
||||
Payload =
|
||||
$@"{{
|
||||
""type"": ""device_announce"",
|
||||
""data"": {{ ""friendly_name"": ""{light.FriendlyName.Get}"" }}
|
||||
""data"": {{ ""friendly_name"": ""{(lightProps light).FriendlyName.Get}"" }}
|
||||
}}" }
|
||||
|> ReceivedZigbeeEvent
|
||||
|> onEventPublished.Trigger
|
||||
| HumanInteraction(LightPoweredOff light) -> friendlyNameToFakeLight[light.FriendlyName].PowerOff()
|
||||
| HumanInteraction(LightPoweredOff light) -> friendlyNameToFakeLight[(lightProps light).FriendlyName].PowerOff()
|
||||
| RemoteInteraction RemotePressedOnButton ->
|
||||
{ Topic = $"zigbee2mqtt/{remoteControlFriendlyName.Get}"
|
||||
Payload = @"{ ""action"": ""on"" }" }
|
||||
|
|
@ -149,15 +149,15 @@ type FakeHome with
|
|||
|
||||
member this.NonRemotelyControlledLightStates =
|
||||
this.LightStates
|
||||
|> Seq.filter (fst >> _.ControlledWithRemote >> (=) NonRemote)
|
||||
|> Seq.filter (fst >> lightProps >> _.ControlledWithRemote >> (=) NonRemote)
|
||||
|> Seq.toList
|
||||
|
||||
member this.RemotelyControlledLightStates =
|
||||
this.LightStates
|
||||
|> Seq.filter (fst >> _.ControlledWithRemote >> (<>) NonRemote)
|
||||
|> Seq.filter (fst >> lightProps >> _.ControlledWithRemote >> (<>) NonRemote)
|
||||
|> Seq.toList
|
||||
|
||||
member this.Label =
|
||||
this.LightsThatAreOn
|
||||
|> Seq.map (fun (light, state) -> $"{light.FriendlyName.Get}: {state}")
|
||||
|> Seq.map (fun (light, state) -> $"{(lightProps light).FriendlyName.Get}: {state}")
|
||||
|> String.concat ", "
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue