如何使用Node-App查找(WLAN)设备?

时间:2016-03-10 13:40:05

标签: node.js raspberry-pi

我正在开发我的第一个Node-App,我想连接两个Raspberrys然后控制它们。像打开和关闭运动检测器或启动网络摄像头一样。 我环顾四周,看到人们提到将Raspberry制作成Web服务器,然后连接它。 但我真的不明白它是如何工作的。
所以任何人都可以告诉我我如何找到设备(pi是连接到WLAN并具有静态IP)通过Node-App ,例如有搜索功能的左右?

并且我可以使用一个应用程序控制多个Raspberry 并且同时在两个设备上进行设置吗?

1 个答案:

答案 0 :(得分:0)

要获得你的IP,你可以使用这样的东西

'use strict';

var os = require('os');
var ifaces = os.networkInterfaces();
Object.keys(ifaces)
    .forEach(function (ifname) {
        var alias = 0;

        ifaces[ifname].forEach(function (iface) {
            if ('IPv4' !== iface.family || iface.internal !== false) {
                // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
                return;
            }

            if (alias >= 1) {
                // this single interface has multiple ipv4 addresses
                console.log(ifname + ':' + alias, iface.address);
            } else {
                // this interface has only one ipv4 adress
                console.log(ifname, iface.address);
            }
            ++alias;
        });

    });

在我的案例中输出以下内容

VirtualBox Host-Only Network 192.168.56.1
Ethernet 192.168.0.101

以太网就是你想要的简单地提取字符串的ip部分

现在你需要这部分ip 192.168.0.

var ping = require ("net-ping");
var ipString = '192.168.0.';
var i = 1;
var session = ping.createSession();

doPing()
function doPing() {
    if (i > 254) return;

    var ip = ipString + i;
    i++;

    session.pingHost (ipString + i, function (error, target) {
        if (error){
            if (error instanceof ping.RequestTimedOutError){
                console.log (target + ": Not alive");
                doPing();
            }
            else{
                console.log (target + ": " + error.toString ());   
                doPing();         
            }
        } else {
            console.log (target + ": Alive");
            doPing();
        }
    });
}

现在您知道所有响应ping的设备,因此您可以使用request模块尝试连接到Web服务器,如果设备上有任何正在运行的话。

每次ping需要一两秒钟,所以请耐心等待。

这远非完美,但应该有效。 我希望它有所帮助