我有一个IoT(Arduino)设备,该设备每6秒将HTTP POST请求发送到我的NodeJs服务器。 来自设备的数据以JSON格式发送。 在某个时候,设备停止发送数据(假设GSM模块被关闭,或者设备由于某种原因被关闭),我需要确定何时发生并输出类似“设备状态:离线”的信息 我使用ExpressJ来处理服务器功能,并且可以轻松处理来自/到IoT设备的任何POST / GET请求,但如何确定何时不再发送POST请求?
试图检查IoT设备的IP地址(它使用带有SIM卡的GSM模块将数据发送到我的NodeJS服务器)是否可以访问,但是我是Node的新手,并且使用body-parser,因此请求是自动解析为JSON,我不确定如何确定IP是否可访问。
setDeviceStatus
()是一项功能,用于更新数据库中缓存文件/表中的设备状态(在线/离线)
app.post('/floraData', (req,res,next) => {
var jsonObj = req.body;
var deviceStatusTimer = setInterval(function(){
if(jsonObj == null){
setDeviceStatus(0);
console.log("device offline");
}
else{
setDeviceStatus(1);
console.log("device is online");
}
}, 10000);
next();
});
答案 0 :(得分:0)
WebSocket将是一个更简单的方法。正如@ Gonzalo.-在评论中指出的那样,您可以将ping请求从服务器发送到运行状况检查IoT设备。
但是,WebSocket有其局限性,如果您有很多IoT设备,则很难扩展。如果是这样,从长远来看,像现在所做的那样构建无状态应用程序将更适合。
回答您的问题,而不是使用IP(多个设备可以共享相同的IP)对IoT设备进行健康检查,该设备可以通过以下方式发送device_id
(例如MAC地址,自定义UUID等) POST请求。每当服务器收到POST请求时,它都应将device_id
存储在Redis中,例如,带有last_online
时间戳。
根据您的用例,您可以构建另一个应用程序(例如lambda + cloudwatch)来定期检查last_online
时间是X
分钟前的任何设备的Redis。