private static async Task <MessageResponse> MessageReceived(Message message, object userContext) { try{ var deviceClient = userContext as DeviceClient; if (deviceClient == null) { throw new InvalidOperationException("UserContext doesn't contain expected values"); } byte[] messageBytes = message.GetBytes(); string messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {DateTime.UtcNow.ToString()}: {messageString}"); DHTMessageBody messageBody = null; // Get message body try{ messageBody = JsonConvert.DeserializeObject <DHTMessageBody>(messageString); } catch (Exception ex) { Console.WriteLine("Cannot deserialize message."); Console.WriteLine(ex); Console.WriteLine(ex.Message); } if (messageBody != null) { //do the scoring var prediction = AnomalyDetector.IsAnomaly(messageBody.temperature, messageBody.humidity); var predictionMessage = new ScoredDHTMessageBody(messageBody, prediction); var jsonMessage = JsonConvert.SerializeObject(predictionMessage); var pipeMessage = new Message(Encoding.UTF8.GetBytes(jsonMessage)); pipeMessage.Properties.Add("content-type", "application/json"); await deviceClient.SendEventAsync("output1", pipeMessage); Console.WriteLine($"Scored data sent {predictionMessage.timeCreated}: {predictionMessage.temperature} | {predictionMessage.humidity} | Anomaly {predictionMessage.IsAnomaly}"); } } catch (Exception ex) { Console.WriteLine($"Exception occured: {ex.Message}"); Console.WriteLine(ex); } return(MessageResponse.Completed); }
private static async void ThreadBody(object userContext) { var url = LocalhostUrl; Console.WriteLine($"Connecting to DHT sensor via url {url}"); DataLoader = new DHTDataLoader(url); while (true) { var deviceClient = userContext as DeviceClient; if (deviceClient == null) { throw new InvalidOperationException("UserContext doesn't contain " + "expected values"); } var data = DataLoader.GetDHTData(); DHTMessageBody dhttMessageBody; if (data == null) { Console.WriteLine("Error: Cannot read DHT Data from local machine"); } else { dhttMessageBody = new DHTMessageBody { timeCreated = DateTime.Now.ToString("hh:mm:ss"), humidity = data.Humidity, temperature = data.Temperature }; var jsonMessage = JsonConvert.SerializeObject(dhttMessageBody); var pipeMessage = new Message(Encoding.UTF8.GetBytes(jsonMessage)); pipeMessage.Properties.Add("content-type", "application/json"); await deviceClient.SendEventAsync("output1", pipeMessage); Console.WriteLine($"DHT data sent {dhttMessageBody.timeCreated}: {dhttMessageBody.temperature} | {dhttMessageBody.humidity}"); } Thread.Sleep(Interval); } }
public ScoredDHTMessageBody(DHTMessageBody baseMessage, bool isAnomaly) : this(baseMessage) { this.IsAnomaly = isAnomaly; }
public ScoredDHTMessageBody(DHTMessageBody baseMessage) { this.temperature = baseMessage.temperature; this.humidity = baseMessage.humidity; this.timeCreated = baseMessage.timeCreated; }