如何使用Node.js将wifi凭据添加到wpa_supplicant?

时间:2016-11-07 04:48:13

标签: node.js linux headless

我想将Wifi凭据添加到/etc/wpa_supplicant/wpa_supplicant.conf。 (debian linux)使用Node.js

配置文件看起来像

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
    ssid="homewifi"
    psk="homepassword"
    key_mgmt=WPA-PSK
}

我想添加另一个网络,比如

ssid="anotherwifi"
psk="anotherpsk"

1。如何使用Node.js代码添加网络?

//maybe like this?
var original = exec("sudo cat wpa_supplicant.conf");
var new_network = {ssid: "anotherwifi", psk: "anotherpsk"};
exec("sudo save ? original + network?)

2。这是网络配置中的key_mgmt,这是必不可少的关键吗?如果我不知道怎么办?

(事实上,我想将wifi凭证保存到无头iot设备,使用wifi接入点 - 用户通过网络服务器向设备发送信息)

1 个答案:

答案 0 :(得分:0)

我写了一个示例代码供您参考,希望对您有所帮助。

const exec = require('child_process').exec;
const async = require('async');

const SSID = "MyWifiAP";
const PSK = "12345678";

exec('wpa_cli add_network', function(error, stdout, stderr) 
{
    if(error !== null) {
        console.log('error: ' + error);
    }
    else {
        let net_id = stdout.substr((stdout.indexOf('wlan') + 7)).trim();

        async.series([
            function(callback) {
                exec('wpa_cli set_network ' + net_id + ' ssid \'\"' + SSID + '\"\'', function(error, stdout) 
                {
                    if(error) {
                        console.error(error);                       
                    }
                    else {                      
                        console.log('SSID result: ' + stdout);
                        callback();
                    }                   
                });
            },
            function(callback) {
                exec('wpa_cli set_network ' + net_id + ' psk \'\"' + PSK + '\"\'', function(error, stdout) 
                {
                    if(error) {
                        console.error(error);                       
                    }
                    else {                      
                        console.log('PSK result: ' + stdout);
                        callback();
                    }                   
                });
            },
            function(callback) {
                exec('wpa_cli save_config', function(error, stdout) 
                {
                    if(error) {
                        console.error(error);                       
                    }
                    else {                      
                        console.log('select_network result: ' + stdout);
                        callback();
                    }                   
                });
            }
        ], function(errs, results) {
            if(errs) throw errs;    // errs = [err1, err2, err3]
            console.log('results: ' + results);   // results = [result1, result2, result3]
        });
    }
});