基于外部事件的节点 POST 请求



我有一个连接到树莓派的门传感器,目标是让 Node 脚本在门打开时向我的外部 API 服务器发出 POST 请求,并在门关闭后发出另一个 POST 请求。

逻辑是让下面的 python 脚本在我的 Pi 上运行,定期检查门是打开还是关闭。我的 python 脚本运行成功,检查门是打开还是关闭;但是,它只检查状态 1 次。

下面的 Node 脚本也工作正常,它使用 python 脚本的输出发出 POST 请求。

问:如何修改以下脚本,以便在门打开后向我的服务器发送 POST 请求,并在门关闭后向我的服务器发送另一个请求。

我的第一个想法是使用Node Events & EventEmitter功能,但我不确定它的实现。此外,我假设 python 脚本必须不断轮询门;所以在这里,可以使用 while 循环吗?

door.py

import time
import RPi.GPIO as io
io.setmode(io.BCM)
door_pin = 23
io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP)
if io.input(door_pin):
    print("Door Opened")
else:
    print("Door Closed")

门.js

var exec = require('child_process').exec;
var rest = require('restler');
// String that will be sent to the command line, generating the door status
var doorCommand = "sudo python door.py"
exec(doorCommand, function cb(error, stdout, stderr){
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null){
        console.log('exec error: ' + error);
    }
    var doorStatus = stdout; // stdout shows if the door is opened or closed
    // Creates the door status POST request to the Rails server
    rest.post('http://192.168.6.109:3000/door/save', {
        data: {
          door: doorStatus
        }
    }).on('complete', function(data, response){
        console.log('door status code: ' + response.statusCode);
    });
});

你走在正确的轨道上。我建议使用 Node.js 模块(如 pi-gpio)直接读取 GPIO 端口,而不是调用 Python 脚本。然后,您将在 Node.js 中使用 setInterval 调用来重复检查门状态,并在状态更改时调用您的 POST。希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新