async void SendTruckTelemetryAsync(Random rand, CancellationToken token)
        {
            while (true)
            {
                billingloginS = _BillingData.GetSubscriber_IDlogin(User.Identity.Name);
                //if (billingloginS == null)
                //{
                //    return null;
                //}
                int Subscriber_ID = 0;


                Subscriber_ID = billingloginS.Subscriber_ID;


                if (Subscriber_ID > 0)
                {
                    IOTDEviceDetail = _DeviceData.GetIOTDEviceDetailsBySubscriberId(Subscriber_ID);
                }
                //if (IOTDEviceDetail == null)
                //{
                //    return null;
                //}

                UpdateTruck();

                // Create the telemetry JSON message.
                var telemetryDataPoint = new
                {
                    EnergyAmountkWh  = Math.Round(tempContents, 2),
                    VoltageReading   = Math.Round(tempContents, 4),
                    PowerReading     = Math.Round(tempContents, 6),
                    ConnectionStatus = 1,
                    deviceId         = IOTDEviceDetail.IOTDEviceId
                                       //PowerReading = Math.Round(tempContents, 5),
                                       //TruckState = state.ToString(),
                                       //CoolingSystemState = fan.ToString(),
                                       //ContentsState = contents.ToString(),
                                       //Location = new { lon = currentLon, lat = currentLat },
                                       //Event = eventText,
                };
                var telemetryMessageString = JsonSerializer.Serialize(telemetryDataPoint);
                var telemetryMessage       = new Message(Encoding.ASCII.GetBytes(telemetryMessageString));

                // Clear the events, as the message has been sent.
                eventText = noEvent;

                //Console.WriteLine($"\nTelemetry data: {telemetryMessageString}");

                // Bail if requested.
                token.ThrowIfCancellationRequested();

                // Send the telemetry message.
                await s_deviceClient.SendEventAsync(telemetryMessage);

                greenMessage($"Telemetry sent {DateTime.Now.ToShortTimeString()}");

                await Task.Delay(intervalInMilliseconds);
            }
        }
Beispiel #2
0
        public IOTDEviceDetailModel AddIOTDEviceDetails(IOTDEviceDetailModel newIOTDEvice)
        {
            SqlParameter Subscriber_ID  = new SqlParameter("@Subscriber_ID", newIOTDEvice.Subscriber_ID);
            SqlParameter STAKEHOLDER_ID = new SqlParameter("@STAKEHOLDER_ID", newIOTDEvice.STAKEHOLDER_ID);
            SqlParameter ScopeID        = new SqlParameter("@ScopeID", newIOTDEvice.ScopeID);
            SqlParameter PrimaryKey     = new SqlParameter("@PrimaryKey", newIOTDEvice.PrimaryKey);
            SqlParameter IOTDEviceId    = new SqlParameter("@IOTDEviceId", newIOTDEvice.IOTDEviceId);


            _context.Database.ExecuteSqlRaw("dbo.Insert_Select_AllIOTDEviceDetails @Subscriber_ID,@STAKEHOLDER_ID, @ScopeID,@PrimaryKey,@IOTDEviceId",
                                            Subscriber_ID, STAKEHOLDER_ID, ScopeID, PrimaryKey,
                                            IOTDEviceId);
            return(newIOTDEvice);
        }
Beispiel #3
0
        public IOTDEviceDetailModel UpdateIOTDEviceDetails(IOTDEviceDetailModel UpdateDevice)
        {
            SqlParameter Device_ID      = new SqlParameter("@IOTDEviceDetail_Id", UpdateDevice.IOTDEviceDetail_Id);
            SqlParameter Subscriber_ID  = new SqlParameter("@Subscriber_ID", UpdateDevice.Subscriber_ID);
            SqlParameter STAKEHOLDER_ID = new SqlParameter("@STAKEHOLDER_ID", UpdateDevice.STAKEHOLDER_ID);
            SqlParameter ScopeID        = new SqlParameter("@ScopeID", UpdateDevice.ScopeID);
            SqlParameter PrimaryKey     = new SqlParameter("@PrimaryKey", UpdateDevice.PrimaryKey);
            SqlParameter IOTDEviceId    = new SqlParameter("@IOTDEviceId", UpdateDevice.IOTDEviceId);


            _context.Database.ExecuteSqlRaw("dbo.Update_IOTDevicesDetails @IOTDEviceDetail_Id,@Subscriber_ID,@STAKEHOLDER_ID, @ScopeID,@PrimaryKey,@IOTDEviceId",
                                            Device_ID, Subscriber_ID, STAKEHOLDER_ID, ScopeID, PrimaryKey,
                                            IOTDEviceId);


            return(UpdateDevice);
        }
        public IActionResult OnPost()
        {
            if (ModelState.IsValid == true)
            {
                if (IOTDEviceDetail.IOTDEviceDetail_Id > 0)
                {
                    IOTDEviceDetail = _DeviceData.UpdateIOTDEviceDetails(IOTDEviceDetail);
                }
                else
                {
                    IOTDEviceDetail = _DeviceData.AddIOTDEviceDetails(IOTDEviceDetail);
                }


                return(RedirectToPage("/Stackholders/ViewIOTDEviceDetails", new { IOTDEviceDetail.IOTDEviceDetail_Id }));
            }
            return(Page());
        }
        public IActionResult OnGet(int?IOTDEviceDetail_Id)
        {
            if (IOTDEviceDetail_Id.HasValue)
            {
                IOTDEviceDetail = _DeviceData.GetIOTDEviceDetailsById(IOTDEviceDetail_Id.Value);
            }
            else
            {
                IOTDEviceDetail = new IOTDEviceDetailModel();
            }

            if (IOTDEviceDetail == null)
            {
                return(RedirectToPage("/Error"));
            }

            return(Page());
        }
        public IActionResult OnGet(int Subscriber_ID)
        {
            billingloginS = _BillingData.GetSubscriber_IDlogin(User.Identity.Name);
            if (billingloginS == null)
            {
                return(RedirectToPage("/identity/account/login"));
            }

            Subscriber_ID = billingloginS.Subscriber_ID;


            if (Subscriber_ID > 0)
            {
                IOTDEviceDetail = _DeviceData.GetIOTDEviceDetailsBySubscriberId(Subscriber_ID);
            }
            if (IOTDEviceDetail == null)
            {
                return(RedirectToPage("/Error"));
            }
            return(Page());
        }
        public async Task <DeviceRegistrationResult> RegisterDeviceAsync(SecurityProviderSymmetricKey security)
        {
            Console.WriteLine("Register device...");
            billingloginS = _BillingData.GetSubscriber_IDlogin(User.Identity.Name);
            if (billingloginS == null)
            {
                return(null);
            }
            int Subscriber_ID = 0;


            Subscriber_ID = billingloginS.Subscriber_ID;


            if (Subscriber_ID > 0)
            {
                IOTDEviceDetail = _DeviceData.GetIOTDEviceDetailsBySubscriberId(Subscriber_ID);
            }
            if (IOTDEviceDetail == null)
            {
                return(null);
            }


            using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.WebSocketOnly))
            {
                ProvisioningDeviceClient provClient =
                    ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, IOTDEviceDetail.ScopeID, security, transport);

                Console.WriteLine($"RegistrationID = {security.GetRegistrationID()}");

                Console.Write("ProvisioningClient RegisterAsync...");
                DeviceRegistrationResult result = await provClient.RegisterAsync();

                Console.WriteLine($"{result.Status}");

                return(result);
            }
        }
        //public async Task<IActionResult> OnPostAsyncOFF()
        //{
        //    return Page();
        //}
        public async Task <IActionResult> OnPostAsync()
        {
            billingloginS = _BillingData.GetSubscriber_IDlogin(User.Identity.Name);
            if (billingloginS == null)
            {
                return(RedirectToPage("/identity/account/login"));
            }
            int Subscriber_ID = 0;


            Subscriber_ID = billingloginS.Subscriber_ID;


            if (Subscriber_ID > 0)
            {
                IOTDEviceDetail = _DeviceData.GetIOTDEviceDetailsBySubscriberId(Subscriber_ID);
            }
            if (IOTDEviceDetail == null)
            {
                return(RedirectToPage("/Error"));
            }

            rand = new Random();
            colorMessage($"Starting {truckIdentification}", ConsoleColor.Yellow);
            currentLat = baseLat;
            currentLon = baseLon;

            // Connect to Azure Maps.
            azureMapsServices = new AzureMapsServices(AzureMapsKey);

            try
            {
                //using (var security = new SecurityProviderSymmetricKey(DeviceID, PrimaryKey, null))
                using (var security = new SecurityProviderSymmetricKey(IOTDEviceDetail.IOTDEviceId, IOTDEviceDetail.PrimaryKey, null))
                {
                    DeviceRegistrationResult result = RegisterDeviceAsync(security).GetAwaiter().GetResult();
                    if (result.Status != ProvisioningRegistrationStatusType.Assigned)
                    {
                        //Console.WriteLine("Failed to register device");
                        Message = "Failed to register device";
                        return(Page());
                    }
                    IAuthenticationMethod auth = new DeviceAuthenticationWithRegistrySymmetricKey(result.DeviceId, (security as SecurityProviderSymmetricKey).GetPrimaryKey());
                    s_deviceClient = DeviceClient.Create(result.AssignedHub, auth, TransportType.Mqtt_WebSocket_Only);
                }
                Message = "Failed to register device";
                greenMessage("Device connected successfully");

                SendDevicePropertiesAsync().GetAwaiter().GetResult();

                //Console.Write("Register settings changed handler...");
                Message = "Register settings changed handler...";
                s_deviceClient.SetDesiredPropertyUpdateCallbackAsync(HandleSettingChanged, null).GetAwaiter().GetResult();
                //Console.WriteLine("Done");
                Message = "Done Successful";

                cts = new CancellationTokenSource();

                // Create a handler for the direct method calls.
                s_deviceClient.SetMethodHandlerAsync("GoToCustomer", CmdGoToCustomer, null).Wait();
                s_deviceClient.SetMethodHandlerAsync("Recall", CmdRecall, null).Wait();

                SendTruckTelemetryAsync(rand, cts.Token);

                //Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
                cts.Cancel();
            }
            catch (Exception ex)
            {
                Console.WriteLine();
                Console.WriteLine(ex.Message);
            }

            TempData["msg"] = Message;
            return(Page());
        }