diff --git a/NightLight.Core/Models.fs b/NightLight.Core/Models.fs index 23bd86d..f8068bf 100644 --- a/NightLight.Core/Models.fs +++ b/NightLight.Core/Models.fs @@ -4,12 +4,12 @@ open System type State = { Time: DateTime } -type Event = - | ReceivedZigbeeEvent of payload: string - | TimeChanged of DateTime - type Message = { Topic: string; Payload: string } +type Event = + | ReceivedZigbeeEvent of Message + | TimeChanged of DateTime + type ParseZigbeeEventError = | InvalidJson | MissingTypeField diff --git a/NightLight.Core/ZigbeeEvents.fs b/NightLight.Core/ZigbeeEvents.fs index 6dc6205..b0f9d76 100644 --- a/NightLight.Core/ZigbeeEvents.fs +++ b/NightLight.Core/ZigbeeEvents.fs @@ -6,9 +6,9 @@ open FSharp.Data type ZigbeeEvent = DeviceAnnounce of FriendlyName: string -let parseZigbeeEvent str = +let parseZigbeeEvent (message: Message) = result { - let! jsonValue = JsonValue.TryParse str |> Result.requireSome InvalidJson + let! jsonValue = JsonValue.TryParse message.Payload |> Result.requireSome InvalidJson let! messageType = jsonValue.TryGetProperty "type" |> Result.requireSome MissingTypeField let! messageData = jsonValue.TryGetProperty "data" |> Result.requireSome MissingDataField diff --git a/NightLight/Program.fs b/NightLight/Program.fs index 7daee6b..59aed70 100644 --- a/NightLight/Program.fs +++ b/NightLight/Program.fs @@ -51,7 +51,9 @@ let private mqttMessageToReceivedZigbeeEvent (message: MqttApplicationMessage) = let payload = message.Payload let decodedPayload = Encoding.UTF8.GetString(&payload) - ReceivedZigbeeEvent decodedPayload + ReceivedZigbeeEvent + { Topic = message.Topic + Payload = decodedPayload } [] let mainAsync _ =