概述
Zetta (zettajs github)是一个基于Node的IoT框架,利用zetta 可在树莓派等开发板上实现对于传感器数据的封装、发送和接收。
一般情况下,传感器会以一定的间隔向数据接收端(server)发送数据。这个一定间隔更新数据的操作一般使用setInterval()函数实现:
setInterval(() => {
this._driver.readData(counter).then((result) => {
stream.write(result);
this.value = result.value;
this.result = {'value':this.value};
console.log('value: ', this.value);
},function(err) {
console.log(err);
});
}, this.interval);
但是如果需要以变化的间隔发送数据,就不能使用setIntervalI()函数了,可以使用递归的调用一个含有setTimeout()函数的方法来实现可变间隔的数据发送:
setTimeout(()=>{
this.setSendingData(this.sensor_data.length, 0, stream, killPortError);
}, 300)
mock_sensor.prototype.setSendingData = function(dataLength, index, stream, killPortError) {
console.log('index',index);
if(index < dataLength) {
stream.write(this.sensor_data[index]);
this.value = this.sensor_data[index].value;
this.result = {'value': this.value};
console.log('value', this.value);
setTimeout(()=>{
this.setSendingData(dataLength, index + 1, stream, killPortError);
}, this.interval);
}else if(index == dataLength) {
this.value = 'end';
this.result = {'value':this.value};
console.log('value: ', this.value);
setTimeout(()=>{
this.setSendingData(dataLength, index + 1, stream, killPortError);
}, 5000);
}
else {
//终止进程
var stop_command = 'start "" "' + this.project_path + '/edge/utils/kill_process_with_port" ' + this.port;
console.log('killPortError', killPortError);
if(!killPortError)
{
console.log('killPortError_process', killPortError);
process.exec(stop_command, function(err, stdout, stderr) {
console.log('Command Error: ', err);
console.log(stdout);
console.log('STD Error: ', stderr);
if(err!=null)
{
killPortError = true;
console.log('killPortError_true', killPortError);
}
});
}
}
}
在setSendingData()函数中有三个分支,第一个分支为以可变间隔正常发送数据;第二个分支为预定数据发送完毕,发送'end'标记告知接收方发送完毕;第三个分支为调用批处理文件终止当前进程。
最后
以上就是美丽金鱼为你收集整理的在基于Node.js的IoT框架Zetta中实现可变间隔发送数据的全部内容,希望文章能够帮你解决在基于Node.js的IoT框架Zetta中实现可变间隔发送数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复