예제 #1
0
        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);
        }
예제 #2
0
        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;
 }