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

提供: MonoBook
2016年5月13日 (金) 02:27時点におけるimported>Administratorによる版
ナビゲーションに移動 検索に移動

概要

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);
                }
            }
        }
    }
}

関連項目

参考文献