Xamarin.Mac/無線LANアクセスポイントのRSSI(電波強度)を取得する

提供: MonoBook
移動: 案内検索

概要[編集]

Xamarin.Mac無線LANアクセスポイントRSSI(電波強度)を取得してみたい。 なんとなく思いついた。 CoreLocationなどと組み合わせれば簡単に周囲の無線LANの状況をリアルタイム可視化できるかもしれない。 かもしれない。

実装[編集]

MonoMacのサンプルに無線LANアクセスポイントを列挙するものがあった。

CoreWLANのCWNetworkクラスを眺めていると「RssiValue」という直球なプロパティが用意されている。 深く考えずに表示してみたところRSSIが電力(dBm)で返ってくる。

なお、CWNetworkクラスには「Rssi」という似たようなプロパティもあるが、こちらは「使うな」とのコメントが入っている。 試しに使ってみたがNSNumber型で普通に値が返ってくる。 でも使うな。

using System;
using Foundation;
using AppKit;
using CoreWlan;
 
namespace CoreWlanRSSI
{
    static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();
 
            using (new NSAutoreleasePool())
            {
                string[] interfaces = CWInterface.SupportedInterfaces;
 
                if (interfaces.Length < 1)
                {
                    Console.WriteLine("No supported interface is available in this computer");
                    return;
                }
 
                CWInterface selectedIntface = CWInterface.FromName(interfaces[0]);
                // print interface information
                Console.WriteLine("\nInterface Information:\nName: {0}, Active SSID: {1}, Active BSSID: {2}\n", selectedIntface.Name, selectedIntface.Ssid, selectedIntface.Bssid);
 
                NSError error;
                CWNetwork[] data = selectedIntface.ScanForNetworksWithParameters(null, out error);
 
                if (error != null)
                {
                    Console.Error.WriteLine("An error occurred while scanning for available networks");
                    return;
                }
 
                foreach (CWNetwork d in data)
                {
                    Console.WriteLine("SSID: {0}, BSSID: {1}, RSSI: {2}", d.Ssid, d.Bssid, d.RssiValue);
                }
            }
        }
    }
}

関連項目[編集]

参考文献[編集]