Iot Core падает Wi-Fi при попытке получить сигнальные полосы / силы, после некоторого успеха
Я сталкиваюсь со странной проблемой. Я хочу периодически получать полосы сигнала Wi-Fi и обновлять небольшой дисплей. Я попытался запустить его в коде и с помощью API. Оба будут работать некоторое время, но через некоторое время, может быть, через 30 минут приложение Iot по умолчанию не отображает информацию о сети. Если я зайду в настройки и нажму "Сеть и Wi-Fi", устройство будет зависать, и его необходимо будет перезагрузить.
Я подумал, что, возможно, я сканировал слишком быстро, поэтому я изменил таймер на каждую минуту, но проблема все еще осталась. Это может быть проблемой с моим подходом, может быть, есть более чистый способ получить эту информацию о сигнале без сканирования? Я использую Windows Iot Core v.10.0.16299.309 на Raspberry Pi3. Это мой код
Вызывается из Run
ThreadPoolTimer UpdateWifiSignalTimer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
{
WifiSignal();
}, TimeSpan.FromMinutes(1));
Попытка 1
if (WiFiAdapter != null)
{
networkAddapterId = WiFiAdapter.NetworkAdapter.NetworkAdapterId.ToString();
await WiFiAdapter.ScanAsync();
if (WiFiAdapter.NetworkAdapter.GetConnectedProfileAsync() != null)
{
var connectedProfile = await WiFiAdapter.NetworkAdapter.GetConnectedProfileAsync();
if (connectedProfile != null && !connectedProfile.ProfileName.Equals(savedProfileName))
{
savedProfileName = connectedProfile.ProfileName;
wifiProfile.Add( new WifiProfile { MacAddress = networkAddapterId, Ssid = savedProfileName }) ;
}
}
var wifiPoint = new List<WiFiSignal>();
WiFiNetworkReport report = WiFiAdapter.NetworkReport;
foreach (var availableNetwork in report.AvailableNetworks)
{
WiFiSignal wifiSignal = new WiFiSignal()
{
MacAddress = availableNetwork.Bssid,
Ssid = availableNetwork.Ssid,
SignalBars = availableNetwork.SignalBars,
ChannelCenterFrequencyInKilohertz = availableNetwork.ChannelCenterFrequencyInKilohertz,
NetworkKind = availableNetwork.NetworkKind.ToString(),
PhysicalKind = availableNetwork.PhyKind.ToString(),
Encryption = availableNetwork.SecuritySettings.NetworkEncryptionType.ToString()
};
wifiPoint.Add(wifiSignal);
}
int bars = 0;
foreach (var localNetworks in wifiPoint)
{
if (localNetworks.Ssid == savedProfileName)
{
bars = localNetworks.SignalBars;
display.ClearDisplayBuf();
}
}
Попытка 2
using (HttpClient client = new HttpClient())
{
if (interfaceGUID == null)
{
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, string.Format("http://{0}:8080/api/wifi/interfaces", DeviceName)))
{
request.Headers.Authorization = CreateBasicCredentials("Administrator", PASSWORD);
using (HttpResponseMessage response = await client.SendAsync(request))
{
var data = await response.Content.ReadAsStringAsync();
var interfaces = JsonConvert.DeserializeObject<AvailableInterfaces>(data);
var ourInterface = interfaces.Interfaces.First();
interfaceGUID = ourInterface.GUID.Replace('{', ' ').Replace('}', ' ').Trim();
}
}
}
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, string.Format("http://{0}:8080/api/wifi/networks?interface={1}", DeviceName, interfaceGUID)))
{
request.Headers.Authorization = CreateBasicCredentials("Administrator", PASSWORD);
using (HttpResponseMessage response = await client.SendAsync(request))
{
var data = await response.Content.ReadAsStringAsync();
var networks = JsonConvert.DeserializeObject<AvailableNetworksObject>(data);
this.Networks = networks.AvailableNetworks;
//this.Status = "Refresh Wifi Succeeded";
}
}
foreach (var item in this.Networks)
{
if (item.AlreadyConnected == true)
{
display.ClearDisplayBuf();
display.WriteLineDisplayBuf(item.SignalQuality.ToString(), 0, 0);
display.DisplayUpdate();
}
}
}