趣味的なIT・ネットの話題

Raspberry PiでIoTなシステム開発:nodeからwifi接続をコントロールする

nodeからRaspberry Piのwifi接続をコントロールしたいなぁ、でもexecをいちいち叩いていくのは面倒だし、と思っていたら、moduleを作ってくれている人がいました。ネットには神が沢山います。

wifi-control

このmoduleは実際にはnmcliのフロントエンドに過ぎないので、使用するためにはまずnmcliをインストールします。

pi@raspberrypi:~ $ sudo apt-get install network-manager
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  fuse libfuse2
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  dconf-gsettings-backend dconf-service dns-root-data dnsmasq-base glib-networking glib-networking-common glib-networking-services
  gsettings-desktop-schemas iputils-arping libdbus-glib-1-2 libdconf1 libgudev-1.0-0 libjim0.75 libmbim-glib4 libmbim-proxy
  libmm-glib0 libmnl0 libndp0 libnetfilter-conntrack3 libnm-glib4 libnm-util2 libpam-systemd libpcap0.8 libpolkit-agent-1-0
  libpolkit-backend-1-0 libpolkit-gobject-1-0 libproxy1 libqmi-glib1 libsoup2.4-1 libteamdctl0 modemmanager policykit-1 ppp

  usb-modeswitch usb-modeswitch-data
Suggested packages:
  avahi-autoipd libteam-utils comgt wvdial
The following NEW packages will be installed:
  dconf-gsettings-backend dconf-service dns-root-data dnsmasq-base glib-networking glib-networking-common glib-networking-services
  gsettings-desktop-schemas iputils-arping libdbus-glib-1-2 libdconf1 libgudev-1.0-0 libjim0.75 libmbim-glib4 libmbim-proxy
  libmm-glib0 libmnl0 libndp0 libnetfilter-conntrack3 libnm-glib4 libnm-util2 libpam-systemd libpcap0.8 libpolkit-agent-1-0
  libpolkit-backend-1-0 libpolkit-gobject-1-0 libproxy1 libqmi-glib1 libsoup2.4-1 libteamdctl0 modemmanager network-manager
  policykit-1 ppp usb-modeswitch usb-modeswitch-data
0 upgraded, 36 newly installed, 0 to remove and 13 not upgraded.
Need to get 190 kB/5,431 kB of archives.
After this operation, 20.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
WARNING: The following packages cannot be authenticated!
  libdbus-glib-1-2 libdconf1 libgudev-1.0-0 libmbim-glib4 libmm-glib0 libndp0 libmnl0 libnetfilter-conntrack3 libnm-util2 libnm-glib4
  libpam-systemd libpcap0.8 libpolkit-gobject-1-0 libpolkit-agent-1-0 libpolkit-backend-1-0 libproxy1 libqmi-glib1
  glib-networking-common glib-networking-services dconf-service dconf-gsettings-backend gsettings-desktop-schemas glib-networking
  libsoup2.4-1 libteamdctl0 libjim0.75 dns-root-data dnsmasq-base libmbim-proxy modemmanager policykit-1 network-manager ppp
  iputils-arping usb-modeswitch-data usb-modeswitch
Install these packages without verification? [y/N] y

「インストールするのか?本気かよ」みたいな聞き方をされると不安ではありますが、ここはレポジトリを信頼するしか無いので、yです。ボットになったらどうしましょ。

Setting up policykit-1 (0.105-8) ...
Setting up network-manager (0.9.10.0-7) ...


The following network interfaces were found in /etc/network/interfaces
which means they are currently configured by ifupdown:
- eth0
- wlan0
- wlan1
If you want to manage those interfaces with NetworkManager instead
remove their configuration from /etc/network/interfaces.

Setting up ppp (2.4.6-3.1) ...
Setting up iputils-arping (3:20121221-5) ...

ご丁寧にもinterfacesに書いてあったらダメよと指摘してくれましたので、interfacesからwlan1の設定を削除しておきました。

var WiFiControl = require('wifi-control');

export var init = () => {
  //  Initialize wifi-control package with verbose output
  WiFiControl.init({
    debug: true
  });

  var settings = {
    debug: true || false,
    iface: 'wlan1',
    connectionTimeout: 10000 // in ms
  };
  WiFiControl.configure(settings);
}

export var scanForWiFi = () => {
  //  Try scanning for access points:
  WiFiControl.scanForWiFi( function(err:any, response:any) {
    if (err) console.log(err);
    console.log(response);
  });

}

公式のサンプルに従いこんな感じ。するとこんな感じでスキャン結果が取得できました。

WiFiControl: Debug mode set to: true

WiFiControl: Determining system wireless interface...
WiFiControl: Host machine is Linux.
WiFiControl: Executing: nmcli -m multiline device status | grep wlan
WiFiControl: Automatically located wireless interface wlan1.
WiFiControl: Debug mode set to: true
WiFiControl: AP connection attempt timeout set to: 10000ms
WiFiControl: Wireless interface manually set to wlan1.
WiFiControl: Scanning for nearby WiFi Access Points...
WiFiControl: Nearby WiFi APs successfully scanned (11 found).
{ success: true,
  msg: 'Nearby WiFi APs successfully scanned (11 found).',
  networks:
   [ { ssid: 'aterm-d014ce-g',
       channel: '6',
       signal_level: '70',
       security: 'WPA1 WPA2' },
     { ssid: 'AP-2F-YA-2.4GHz',
       channel: '13',
       signal_level: '47',
       security: 'WPA1 WPA2' },
     { ssid: 'AP-2F-YU-2.4GHz',

 


Facebooktwitterpinterestlinkedinmail
納得したらすぐにシェア!