Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传感器有效负载十六进制到文本节点红色_Javascript_Node.js_Node Red - Fatal编程技术网

Javascript 传感器有效负载十六进制到文本节点红色

Javascript 传感器有效负载十六进制到文本节点红色,javascript,node.js,node-red,Javascript,Node.js,Node Red,我希望有一些来自sombody的输入,知道如何解释如何创建一个十六进制到节点红色的“文本”解码器 我有一个Elsys传感器,它可以产生一个有效负载十六进制,并带有温度、湿度等信息 交付的有效载荷是“0100df02170400dc0500070e13”,在他们的网站上,他们有一个简单的解码器,工作得很好,但我想创建一个节点,在交付数据时对数据进行解码,并将其解析为XDB 是指向有效负载javascript的链接 有人做过类似的事情吗?我在网上找了几个小时的例子,但什么也没找到,或者我只是在找错误

我希望有一些来自sombody的输入,知道如何解释如何创建一个十六进制到节点红色的“文本”解码器

我有一个Elsys传感器,它可以产生一个有效负载十六进制,并带有温度、湿度等信息

交付的有效载荷是“0100df02170400dc0500070e13”,在他们的网站上,他们有一个简单的解码器,工作得很好,但我想创建一个节点,在交付数据时对数据进行解码,并将其解析为XDB

是指向有效负载javascript的链接

有人做过类似的事情吗?我在网上找了几个小时的例子,但什么也没找到,或者我只是在找错误的东西

先谢谢你


Andreas

您提供的链接提供了解码该负载所需的JavaScript

您可以在功能节点中使用该代码,以便在流中进行解码

例如,配置为注入有效负载
0100df02170400dc0500070e13
的注入节点,通过此函数将产生以下有效负载:

{"temperature":223,"humidity":23,"light":220,"motion":0,"vdd":3603}

/*
______ _       _______     _______ 
|  ____| |     / ____\ \   / / ____|
| |__  | |    | (___  \ \_/ / (___  
|  __| | |     \___ \  \   / \___ \ 
| |____| |____ ____) |  | |  ____) |
|______|______|_____/   |_| |_____/ 
简单有效载荷解码器。
按原样使用或删除错误:)
www.elsys.se
peter@elsys.se
*/
常数类型_TEMP=0x01//温度2字节-3276.8摄氏度-->3276.7摄氏度
常数类型_RH=0x02//湿度1字节0-100%
const TYPE_ACC=0x03//加速度3字节X、Y、Z-128-->127+/-63=1G
const TYPE_LIGHT=0x04//光2字节0-->65535勒克斯
const TYPE_MOTION=0x05//运动编号1字节0-255
常数类型_CO2=0x06//二氧化碳2字节0-65535 ppm
常数类型_VDD=0x07//VDD 2字节0-65535mV
常数类型1=0x08//VDD 2字节0-65535mV
常数类型_GPS=0x09//3字节lat 3字节长二进制文件
常数类型_脉冲1=0x0A//2字节相对脉冲计数
功能bin16dec(bin){
var num=bin&0xFFFF;
如果(0x8000&num)
num=-(0x010000-num);
返回num;
}
功能bin8dec(bin){
var num=bin&0xFF;
如果(0x80&num)
num=-(0x0100-num);
返回num;
}
函数hexToBytes(十六进制){
对于(变量字节=[],c=0;c对于(i=0;ii尝试将代码添加到函数节点中,得到了答案2018-03-14 10:25:37节点:70a90f48.0918f msg.payload:Object{empty}因此,我肯定是做错了什么。我更新了我的答案,表明向该函数注入有效负载会产生预期的对象-因此该函数确实有效。你是如何传递数据的?好的,当我添加一个注入节点时,我看到它起作用。但是我如何将数据从一个函数节点移动到下一个函数节点,以便我可以ode数据?我用我的设置图片编辑了我的问题,非常简单。如果您描述了希望它成为其中一部分的流,这会有所帮助。看起来您正在接收一个HTTP请求,其中包含数据。数据包含什么消息属性?使用调试侧栏了解传入数据的结构。确定到要解码的十六进制字符串,并替换我提供的匹配函数中的msg.payload引用。
/*
  ______ _       _______     _______ 
 |  ____| |     / ____\ \   / / ____|
 | |__  | |    | (___  \ \_/ / (___  
 |  __| | |     \___ \  \   / \___ \ 
 | |____| |____ ____) |  | |  ____) |
 |______|______|_____/   |_| |_____/ 

  ELSYS simple payload decoder. 
  Use it as it is or remove the bugs :)
  www.elsys.se
  peter@elsys.se
*/
const TYPE_TEMP     =0x01; //temp 2 bytes -3276.8°C -->3276.7°C
const TYPE_RH       =0x02; //Humidity 1 byte  0-100%
const TYPE_ACC      =0x03; //acceleration 3 bytes X,Y,Z -128 --> 127 +/-63=1G
const TYPE_LIGHT    =0x04; //Light 2 bytes 0-->65535 Lux
const TYPE_MOTION   =0x05; //No of motion 1 byte  0-255
const TYPE_CO2      =0x06; //Co2 2 bytes 0-65535 ppm 
const TYPE_VDD      =0x07; //VDD 2byte 0-65535mV
const TYPE_ANALOG1  =0x08; //VDD 2byte 0-65535mV
const TYPE_GPS      =0x09; //3bytes lat 3bytes long binary
const TYPE_PULSE1   =0x0A; //2bytes relative pulse count

function bin16dec(bin) {
    var num=bin&0xFFFF;
    if (0x8000 & num)
        num = - (0x010000 - num);
    return num;
}
function bin8dec(bin) {
    var num=bin&0xFF;
    if (0x80 & num) 
        num = - (0x0100 - num);
    return num;
}
function hexToBytes(hex) {
    for (var bytes = [], c = 0; c < hex.length; c += 2)
        bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
}

function DecodeElsysPayload(data){
    var obj ={};
    for(i=0;i<data.length;i++){
        switch(data[i]){
            case TYPE_TEMP: //Temperature
                var temp=(data[i+1]<<8)|(data[i+2]);
                temp=bin16dec(temp);
                obj.temperature=temp;
                i+=2;
            break;
            case TYPE_RH: //Humidity
                var rh=(data[i+1]);
                obj.humidity=rh;
                i+=1;
            break;
            case TYPE_ACC: //Acceleration
                obj.x=bin8dec(data[i+1]);
                obj.y=bin8dec(data[i+2]);
                obj.z=bin8dec(data[i+3]);
                i+=3;
            break;
            case TYPE_LIGHT: //Light
                var light=(data[i+1]<<8)|(data[i+2]);
                obj.light=light;
                i+=2;
            break;
            case TYPE_MOTION: //Motion sensor(PIR)
                var motion=(data[i+1]);
                obj.motion=motion;
                i+=1;
            break;
            case TYPE_CO2: //CO2
                var co2=(data[i+1]<<8)|(data[i+2]);
                obj.co2=co2;
                i+=2;
            break;
            case TYPE_VDD: //Battery level
                var vdd=(data[i+1]<<8)|(data[i+2]);
                obj.vdd=vdd;
                i+=2;
            break;
            case TYPE_ANALOG1: //Analog input 1
                var analog1=(data[i+1]<<8)|(data[i+2]);
                obj.analog1=analog1;
                i+=2;
            break;
            case TYPE_GPS: //gps
                obj.lat=(data[i+1]<<16)|(data[i+2]<<8)|(data[i+3]);
                obj.long=(data[i+4]<<16)|(data[i+5]<<8)|(data[i+6]);
                i+=6;
            break;
            case TYPE_PULSE1: //Pulse input 1
                var pulse1=(data[i+1]<<8)|(data[i+2]);
                obj.pulse1=pulse1;
                i+=2;
            break;
        }
    }
    return obj;
}

msg.payload = DecodeElsysPayload(hexToBytes(msg.payload));
return msg;