public async Task SendMessage()
        {
            do
            {
                int deviceCount  = 1;
                int requestCount = 0;
                //Console.WriteLine("no of requests = no of devices X request per device (Note: Enter ctrl+cc to exit)");
                //Console.WriteLine("no of devices: ");
                //int.TryParse(Console.ReadLine(), out deviceCount);
                Console.WriteLine("requests per device:");
                int.TryParse(Console.ReadLine(), out requestCount);

                byte[] recordedBytes = File.ReadAllBytes(filePath);
                for (int device = 0; device < deviceCount; device++)
                {
                    for (int i = 0; i < requestCount; i++)
                    {
                        var deviceTelemetry = new DeviceTelemetry {
                            RecordedTime = DateTime.UtcNow, RecordedStream = recordedBytes
                        };
                        //await iotHubClient.SendToHub(deviceTelemetry);
                        await iotHubClient.SendToHubV1(deviceTelemetry, deviceConnectionStrings[device]);

                        Console.WriteLine($"Message sent to device : {device}");
                    }
                }
            } while (Console.ReadLine() != "cc");

            ////////////////////////
        }
Exemple #2
0
        static async Task Main(string[] args)
        {
            var publisher = new Publisher();

            publisher.Init(EventHubConnectionStringPublisher, EventHubName);

            var numEvents = 100;
            var random    = new Random(Environment.TickCount);

            var eventProcessorHost = new EventProcessorHost(
                EventHubName,
                "realTime",
                EventHubConnectionStringConsumer,
                StorageConnectionString,
                StorageContainerName);

            await eventProcessorHost.RegisterEventProcessorAsync <RealTimeConsumer>();

            for (int i = 0; i < numEvents; i++)
            {
                var randomDeviceTelemetry = DeviceTelemetry.GenerateRandom(random);
                await publisher.PublishAsync(randomDeviceTelemetry);
            }

            Console.ReadKey();
        }
Exemple #3
0
        public static void Run(
            [ServiceBusTrigger("car-telemetry", "storage", AccessRights.Listen, Connection = "ConnectedCarServiceBus")] string rawTelemetryData,
            [Table("devicetelemetry", Connection = "ConnectedCarTableStorage")] out DeviceTelemetry deviceData, TraceWriter log)
        {
            var telemetryData = JsonConvert.DeserializeObject <TelemetryData>(rawTelemetryData);

            deviceData = new DeviceTelemetry
            {
                Humidity      = telemetryData.Humidity,
                Light         = telemetryData.Light,
                Motion        = telemetryData.Motion,
                AirQuality    = telemetryData.AirQuality,
                Sound         = telemetryData.Sound,
                Temp          = telemetryData.Temp,
                Lon           = telemetryData.Gps.Lon,
                Lat           = telemetryData.Gps.Lat,
                Speed         = telemetryData.Gps.Speed,
                Course        = telemetryData.Gps.Course,
                GpsStatusCode = telemetryData.Gps.GpsStatusCode,
                PartitionKey  = "636508278883351383",
                RowKey        = $"{DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks:D19}"
            };

            log.Info($"Succesfully proccessed event {rawTelemetryData}");
        }
        static async Task Main(string[] args)
        {
            var publisher = new Publisher();

            publisher.Init(EventHubConnectionStringPublisher, EventHubName);

            var numEvents = 1000;
            var random = new Random(Environment.TickCount);

            var deviceTelemetry = new DeviceTelemetry
            {
                DeviceType = DeviceType.Phone,
                IpAddress = "127.0.0.1",
                IsOn = true,
                Time = DateTime.Now
            };

            var eventProcessorHost = new EventProcessorHost(
                EventHubName,
                PartitionReceiver.DefaultConsumerGroupName,
                EventHubConnectionStringConsumer,
                StorageConnectionString,
                StorageContainerName);

            await eventProcessorHost.RegisterEventProcessorAsync<Consumer>();

            for (int i = 0; i < numEvents; i++)
            {
                var randomDeviceTelemetry = DeviceTelemetry.GenerateRandom(random);
                await publisher.PublishAsync(randomDeviceTelemetry);
            }

            Console.ReadKey();
        }
Exemple #5
0
        public void TelemetryReceived(DeviceTelemetry telemetry)
        {
            if (HistoryData == null)
            {
                HistoryData = new Dictionary <DateTimeOffset, DeviceData>();
            }

            if (telemetry.Timestamp < DateTimeOffset.Now.Subtract(EntityConfig.HistoryRetention))
            {
                return;
            }

            telemetry.Data.Temperature = Math.Round(telemetry.Data.Temperature, 1);
            telemetry.Data.Humidity    = Math.Round(telemetry.Data.Humidity, 1);

            HistoryData[telemetry.Timestamp] = telemetry.Data;

            if (LastUpdate < telemetry.Timestamp)
            {
                LastUpdate = telemetry.Timestamp;
                LastData   = telemetry.Data;
                DeviceName = telemetry.DeviceName;
            }

            var dataToRemove = HistoryData
                               .Where(a => a.Key < DateTimeOffset.Now.Subtract(EntityConfig.HistoryRetention));

            if (dataToRemove.Any())
            {
                foreach (var item in dataToRemove)
                {
                    HistoryData.Remove(item.Key);
                }
            }
        }
Exemple #6
0
        //Simulate DEVICE feed
        public static string SendDevicesToCloudNonAsync(int timeout = -1)
        {
            DeviceTelemetry deviceDataChunk = new DeviceTelemetry();

            while (timeout < 0)
            {
                outputItems++;
                //Arbitrary simulations
                deviceDataChunk.setDeviceTelemetry(
                    rand.NextDouble() * 5 + 15,
                    rand.NextDouble() * 5,
                    Math.Round(rand.NextDouble() * 25000),
                    Math.Round(rand.NextDouble() * 15000),
                    rand.NextDouble() * 0.015
                    );
                // Create JSON message
                var messageStringFromNestedClass = JsonConvert.SerializeObject(deviceDataChunk, Formatting.Indented);
                Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageStringFromNestedClass);
                //Insert(Upsert) into database
                if (couchbaseConnectionInitialised)
                {
                    Console.WriteLine("Upsert: {0}", UpsertNoSQL(deviceDataChunk.dID.ToString(), deviceDataChunk));
                }
                //Just some fancy screen stuff
                //if (outputItems % 10 == 0)
                //    Console.Clear();
                //This was for async version
                //await Task.Delay(1000);
                // Sleep for x seconds
                System.Threading.Thread.Sleep(SimulationSpeed);
            }
            return(JsonConvert.SerializeObject(deviceDataChunk, Formatting.Indented));
        }
Exemple #7
0
        private static async Task SendDeviceToCloudMessagesAsync(DeviceConfiguration device, CancellationToken ct)
        {
            DeviceClient deviceClient = null;

            if (!string.IsNullOrWhiteSpace(device.ConnectionString))
            {
                var cs = IotHubConnectionStringBuilder.Create(device.ConnectionString);
                deviceClient = DeviceClient.CreateFromConnectionString(cs.ToString(), TransportType.Mqtt);
            }

            var temperatureGenerator = TelemetryGeneratorFactory.Create(device.TemperatureGenerator);
            var humidityGenerator    = TelemetryGeneratorFactory.Create(device.HumidityGenerator);

            var startupDelay = rand.Next(0, 10000);
            await Task.Delay(startupDelay, ct);

            while (!ct.IsCancellationRequested)
            {
                var telemetry = new DeviceTelemetry()
                {
                    DeviceId   = device.Id,
                    DeviceName = device.Name,
                    Timestamp  = DateTimeOffset.Now,
                    Data       = new DeviceData()
                    {
                        Humidity    = await humidityGenerator.GenerateNextValueAsync(ct),
                        Temperature = await temperatureGenerator.GenerateNextValueAsync(ct)
                    }
                };

                string messageBody = JsonSerializer.Serialize(telemetry);
                using var message = new Message(Encoding.ASCII.GetBytes(messageBody))
                      {
                          ContentType     = "application/json",
                          ContentEncoding = "utf-8",
                      };


                // Send the telemetry message (if the connectionstring for device is configured)
                if (deviceClient != null)
                {
                    await deviceClient.SendEventAsync(message);
                }
                Console.WriteLine($"{DateTime.Now} > Sending message: {messageBody}");

                try
                {
                    await Task.Delay(device.PollingIntervalInSec * 1000, ct);
                }
                catch (TaskCanceledException)
                {
                    break;
                }
            }

            if (deviceClient != null)
            {
                deviceClient.Dispose();
            }
        }
Exemple #8
0
        private void SendToIotHub(DateTime recordingTime, StorageFile audioFile)
        {
            var deviceTelemetry = new DeviceTelemetry { /*RecordedTime = recordingTime,*/
                RecordedStream = GetBytesAsync(audioFile).Result
            };

            iotHubClient.SendToHub(deviceTelemetry).GetAwaiter().GetResult();
        }
        private async Task TelemetryReceived(DeviceTelemetry telemetry)
        {
            //query device with serial number
            var device = _deviceRepository.AsQueryable().FirstOrDefault(q => q.SerialNumber == telemetry.SerialNumber);

            //check if device is known
            if (device == null)
            {
                Console.WriteLine($"WARN: Received telemetry for unknown device: {telemetry.SerialNumber}");
                return;
            }


            //check if this telemetry is first entry for the device
            if (!device.LastKnownLatitue.HasValue || !device.LastKnownLongitude.HasValue)
            {
                device.LastKnownLongitude = telemetry.Longitude;
                device.LastKnownLatitue   = telemetry.Latitude;
                device.LastContact        = telemetry.DeviceDate;
                //this is first telemetry so we can not calculate speed for the device
                await _deviceRepository.UpdateAsync(device);

                return;
            }

            //calculate distance in meters
            var distance = Math.Round(new Coordinates(device.LastKnownLatitue.Value, device.LastKnownLongitude.Value)
                                      .DistanceTo(
                                          new Coordinates(telemetry.Latitude, telemetry.Longitude),
                                          UnitOfLength.Meter
                                          ), 2);

            //calculate speed meters per hour
            double speed = 0;

            if (distance > 0)
            {
                speed = Math.Round(
                    GeolocationDistanceCalculator.SpeedAsMeterPerHour(distance, telemetry.DeviceDate,
                                                                      device.LastContact.Value), 2);
            }

            //set last known speed for the device
            device.LastKnownSpeed = speed;

            //check device behaviour
            device.State = distance <= DeviceConstants.MoveAlertInMeters
                ? DeviceState.OperatingAbnormally
                : DeviceState.OperatingNormally;

            device.LastContact = telemetry.DeviceDate;

            //update device
            await _deviceRepository.UpdateAsync(device);
        }
        public void FindByIdAsync()
        {
            var telemetry = new DeviceTelemetry()
            {
                Id             = Guid.NewGuid(),
                CreatedAt      = DateTime.UtcNow,
                DeviceDate     = DateTime.UtcNow,
                LastModifiedAt = DateTime.UtcNow
            };

            _repo.AddAsync(telemetry);

            var result = _repo.FindByIdAsync(telemetry.Id).GetAwaiter().GetResult();

            Assert.AreEqual(result, telemetry);
        }
        public void AsQueryable()
        {
            var telemetry = new DeviceTelemetry()
            {
                Id             = Guid.NewGuid(),
                CreatedAt      = DateTime.UtcNow,
                DeviceDate     = DateTime.UtcNow,
                LastModifiedAt = DateTime.UtcNow
            };

            _repo.AddAsync(telemetry);

            var fromRepo = _repo.AsQueryable().FirstOrDefault(q => q.Id == telemetry.Id);

            Assert.AreEqual(fromRepo, telemetry);
        }
Exemple #12
0
 internal async Task SendToHub(DeviceTelemetry deviceTelemetry)
 {
     try
     {
         using (DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(deviceConnectionString, transportType))
         {
             //await deviceClient.OpenAsync();
             //await UpdateTwin(deviceClient);
             await SendTelemetry(deviceClient, deviceTelemetry);
         }
     }
     catch (Exception)
     {
         loggingChannel.LogMessage("Exception occured while creating device client", LoggingLevel.Error);
     }
 }
Exemple #13
0
        private DeviceTelemetry GetDeviceTelemetry()
        {
            var temp  = _senseHat.Sensors.Temperature.Value;
            var hum   = _senseHat.Sensors.Humidity.Value;
            var press = _senseHat.Sensors.Pressure.Value;

            var telemetry = new DeviceTelemetry()
            {
                DeviceId    = deviceId,
                TimeStamp   = DateTime.UtcNow,
                Temperature = temp,
                Humidity    = hum,
                Pressure    = press
            };

            return(telemetry);
        }
Exemple #14
0
        public async Task <bool> SendTelemetryToDeviceAsync(DeviceTelemetry telemetry, CancellationToken cancellationToken)
        {
            if (telemetry == null)
            {
                throw new ArgumentNullException(nameof(telemetry));
            }

            var uri = this.CreateAPIUri();

            string telemetryJson = JsonConvert.SerializeObject(telemetry, Formatting.None);

            var postContent = new StringContent(telemetryJson, Encoding.UTF8, "application/json");

            var response = await this._httpClient.PostAsync(uri, postContent, cancellationToken);

            return(response.IsSuccessStatusCode);
        }
Exemple #15
0
        public async Task PostTelemetryAsync(DeviceTelemetry deviceTelemetry)
        {
            if (_iotHubClient != null)
            {
                var payload = JsonConvert.SerializeObject(deviceTelemetry);
                try
                {
                    await _iotHubClient.SendEventAsync(new Message(Encoding.UTF8.GetBytes(payload)));

                    Debug.WriteLine(payload);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }
            }
        }
        private static async Task SaveTelemetryToTableStorage(DeviceTelemetry deviceTelemetry)
        {
            string storageConnectionString = "<storageConnectionString>";

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

            CloudTableClient cloudTableClient = storageAccount.CreateCloudTableClient();

            var table = cloudTableClient.GetTableReference("deviceTelemetry");

            await table.CreateIfNotExistsAsync();

            var deviceTelemetryEntity = new DeviceTelemetryEntity(deviceTelemetry.IpAddress, deviceTelemetry.Time, deviceTelemetry.DeviceType, deviceTelemetry.IsOn);

            TableOperation insertOperation = TableOperation.Insert(deviceTelemetryEntity);

            await table.ExecuteAsync(insertOperation);
        }
Exemple #17
0
        public async Task <HttpResponseMessage> PostTelemetryAsync(DeviceTelemetry deviceTelemetry)
        {
            var postContent = new HttpStringContent(JsonConvert.SerializeObject(deviceTelemetry),
                                                    Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json");

            //Microsoft.ApplicationInsights.TelemetryClient client = new Microsoft.ApplicationInsights.TelemetryClient();
            //client.TrackEvent(new EventTelemetry { Name = "Event Hub Post" });

            HttpResponseMessage resp = null;

            try
            {
                resp = await _httpClient.PostAsync(_postUri, postContent);
            }
            catch (Exception ex)
            {
                //client.TrackException(new ExceptionTelemetry { Exception = ex });
            }
            return(resp);
        }
        private static void SaveTelemetryToSqlDatabase(DeviceTelemetry deviceTelemetry, string sqlDatabaseConnectionString)
        {
            using (var connection = new SqlConnection(sqlDatabaseConnectionString))
            {
                connection.Open();

                const string sqlCommandText =
                    "insert into DeviceTelemetry(IPAdresses,Time,DeviceType,IsOn) values (@IPAdresses,@Time,@DeviceType,@IsOn);";
                using (var command = new SqlCommand(sqlCommandText, connection))
                {
                    command.Parameters.AddWithValue("@IPAdresses", deviceTelemetry.IpAddress);
                    command.Parameters.AddWithValue("@Time", deviceTelemetry.Time);
                    command.Parameters.AddWithValue("@DeviceType", deviceTelemetry.DeviceType);
                    command.Parameters.AddWithValue("@IsOn", deviceTelemetry.IsOn);

                    Console.WriteLine($"Added Device IP {deviceTelemetry.IpAddress} to the database.");
                    command.ExecuteNonQuery();
                }
            }
        }
Exemple #19
0
        private static void Main(string[] args)
        {
            var publisher = new Publisher();

            publisher.Init(
                "");


            var       random    = new Random(Environment.TickCount);
            const int numEvents = 1000;

            Console.ForegroundColor = ConsoleColor.Green;

            for (var i = 0; i < numEvents; i++)
            {
                var deviceTelemetry = DeviceTelemetry.GenerateRandom(random);
                publisher.Publish(deviceTelemetry);
                Console.Clear();
                Console.WriteLine($"Published {i + 1} events...");
            }
            Console.ReadLine();
        }
        public void TelemetryReceived(DeviceTelemetry telemetry)
        {
            if (HistoryData == null)
            {
                HistoryData = new Dictionary <DateTimeOffset, DeviceData>();
            }

            if (telemetry.Timestamp < DateTimeOffset.Now.Subtract(EntityConfig.HistoryRetention))
            {
                return;
            }

            HistoryData[telemetry.Timestamp] = telemetry.Data;

            if (LastUpdate < telemetry.Timestamp)
            {
                LastUpdate = telemetry.Timestamp;
                LastData   = telemetry.Data;
                DeviceName = telemetry.DeviceName;
            }

            ClearHistoryData();
            CheckAlert();
        }
Exemple #21
0
 private static async Task SendTelemetry(DeviceClient deviceClient, DeviceTelemetry deviceTelemetry)
 {
     var payload = JsonConvert.SerializeObject(deviceTelemetry);
     var message = new Message(Encoding.ASCII.GetBytes(payload));
     await deviceClient.SendEventAsync(message);
 }