@page "/device-detail" @using ExampleBlazor.Data @using InfluxDB.Client.Api.Domain @using InfluxDB.Client.Core.Flux.Domain @using Radzen @using System.Globalization Device Detail

DeviceDetail

@if (BucketList == null) { } else { } @if (DeviceList == null) { } else { }

Device Configuration:

@SelectedDevice
@SelectedBucket
@InfluxModel.Client.Url
@SelectedDeviceCreatedAt

MeasurementsDetail


@code { protected override async Task OnInitializedAsync() { BucketList = await InfluxModel.FetchBuckets(); } private List? _bucketList; private List? BucketList { get => _bucketList; set { _bucketList = value; StateHasChanged(); if (value == null || value.Count < 1) SelectedBucket = ""; else if (!string.IsNullOrEmpty(SelectedBucket) && value.FirstOrDefault(bucket => bucket.Name == SelectedBucket) != null) SelectedBucket = SelectedBucket; else if (string.IsNullOrEmpty(SelectedBucket) && value.FirstOrDefault(bucket => bucket.Name == "iot_center") != null) SelectedBucket = "iot_center"; else SelectedBucket = value.FirstOrDefault()!.Name; } } private string? _selectedBucket; string? SelectedBucket { get => _selectedBucket; set { _selectedBucket = value; FetchDevices(value); } } private List? _deviceList; private List? DeviceList { get => _deviceList; set { _deviceList = value; StateHasChanged(); if (value == null || value.Count < 1) SelectedDevice = ""; else if (string.IsNullOrEmpty(SelectedDevice) || value.FirstOrDefault(dev => dev!.Values.FirstOrDefault(rec => rec.Key == "deviceId").Value.ToString() == SelectedDevice) == null) { var device = value.FirstOrDefault(dev => dev!.Values.FirstOrDefault(rec => rec.Key == "deviceId").Value.ToString() == "virtual_device"); SelectedDevice = device != null ? device.Values.FirstOrDefault(rec => rec.Key == "deviceId").Value.ToString() : value.FirstOrDefault()!.GetValueByKey("deviceId").ToString(); } } } private string? _selectedDevice; private string? SelectedDevice { get => _selectedDevice; set { _selectedDevice = value; StateHasChanged(); RefreshDevice(); } } private string? _selectedDeviceCreatedAt; private string? SelectedDeviceCreatedAt { get => _selectedDeviceCreatedAt; set { _selectedDeviceCreatedAt = value; StateHasChanged(); } } private bool _writeEmulatedDataBusy; private bool WriteEmulatedDataBusy { get => _writeEmulatedDataBusy; set { _writeEmulatedDataBusy = value; StateHasChanged(); } } private bool _refreshBucketsBusy; private bool RefreshBucketsBusy { get => _refreshBucketsBusy; set { _refreshBucketsBusy = value; StateHasChanged(); } } private List? _measurements; private List? Measurements { get => _measurements; set { _measurements = value; StateHasChanged(); } } private bool _refreshDataBusy; private bool RefreshDataBusy { get => _refreshDataBusy; set { _refreshDataBusy = value; StateHasChanged(); } } private List? _linqData; private List? LinqData { get => _linqData; set { _linqData = value; StateHasChanged(); } } private readonly List _timeRangeList = new() { new TimeRange { Label = "Past 5m", Value = "5m" }, new TimeRange { Label = "Past 15m", Value = "15m" }, new TimeRange { Label = "Past 1h", Value = "1h" }, new TimeRange { Label = "Past 6h", Value = "6h" }, new TimeRange { Label = "Past 1d", Value = "1d" }, new TimeRange { Label = "Past 3d", Value = "3d" }, new TimeRange { Label = "Past 7d", Value = "7d" }, new TimeRange { Label = "Past 30d", Value = "30d" } }; private string _selectedTimeRange = "1d"; private string SelectedTimeRange { get => _selectedTimeRange; set { _selectedTimeRange = value; StateHasChanged(); RefreshData(); } } private async void FetchDevices(string? value) { if (!string.IsNullOrEmpty(value)) { var tables = await InfluxModel.FetchDeviceList(value); if (tables != null) { var records = tables.Select(table => table.Records .FirstOrDefault(rec => rec.Values.ContainsKey("deviceId"))).ToList(); DeviceList = records; } } else { DeviceList = new List()!; } } private async void WriteEmulatedData() { WriteEmulatedDataBusy = true; if (SelectedBucket != null && !string.IsNullOrEmpty(SelectedDevice)) await InfluxModel.WriteEmulatedData(SelectedDevice, SelectedBucket); WriteEmulatedDataBusy = false; RefreshBuckets(); } private async void RefreshBuckets() { RefreshBucketsBusy = true; BucketList = await InfluxModel.FetchBuckets(); RefreshDevice(); RefreshBucketsBusy = false; } private async void RefreshDevice() { RefreshBucketsBusy = true; if (SelectedBucket != null && !string.IsNullOrEmpty(SelectedDevice)) { SelectedDeviceCreatedAt = (await InfluxModel.FetchDeviceCreatedAt(SelectedBucket, SelectedDevice)).ToString(CultureInfo.InvariantCulture); Measurements = await InfluxModel.FetchMeasurements(SelectedBucket, SelectedDevice); } else Measurements = new List(); RefreshData(); RefreshBucketsBusy = false; } private async void RefreshData() { RefreshDataBusy = true; LinqData = await InfluxModel.FetchDataLinq(SelectedBucket, SelectedDevice, SelectedTimeRange); RefreshDataBusy = false; } string FormatDateTime(object? value) { return value != null ? Convert.ToDateTime(value.ToString()).ToString(CultureInfo.InvariantCulture) : string.Empty; } class TimeRange { public string? Label; public string? Value; } }