2017-06-02 64 views
0

我想用MQTT javascript发布很少的实时值。下面我需要设置适当的JSON格式值。 在这里,我只能发送一个值的所有巴士,但我需要发送单独巴士分开值。怎么做。如何使用MQTT javascript创建JSON?

我当前的代码:

var data = { 
    Buses: "BusA", "BusB", "BusC", 
    Speed: BusA_minspeed + (BusA_maxspeed - BusA_minspeed) * Math.random(), // It should be use seperate values seperate Buses 
    FL: BusA_minfl + (BusA_maxfl - BusA_minfl) * Math.random() 
}; 

我的期望:

Buses Speed FL 
BusA 123 80 
BusB 231 40 
BusC 124 50 

我公布部分

function publishTelemetry() { 
    data.Speed = genNextValue(data.Speed, BusA_minspeed, BusA_maxspeed); 
    data.FL = genNextValue(data.Fl, BusA_minfl, BusA_maxfl); 
    client.publish('v1/devices/me/telemetry', JSON.stringify(data)); 
} 

function genNextValue(prevValue, min, max) { 
    var value = prevValue + ((max - min) * (Math.random() - 0.5)) * 0.03; 
    value = Math.max(min, Math.min(max, value)); 
    return Math.round(value * 10)/10; 
} 

回答

1

与Y我们预期我看你应该有一个JSON结构这样

data有一个属性Buses是以下对象的数组

{ 
    Name: BUS_NAME, 
    Speed: BUSS_SPEED, 
    FL: YOUR_FL 
} 

JSON

var data = { 
    Buses: [{ 
    Name: 'BusA' 
    Speed: BusA_minspeed + (BusA_maxspeed - BusA_minspeed) * Math.random(), // It should be use seperate values seperate Buses 
    FL: BusA_minfl + (BusA_maxfl - BusA_minfl) * Math.random() 
    },{ 
    Name: 'BusB' 
    Speed: BusB_minspeed + (BusB_maxspeed - BusB_minspeed) * Math.random(), // It should be use seperate values seperate Buses 
    FL: BusB_minfl + (BusB_maxfl - BusB_minfl) * Math.random() 
    },{ 
    Name: 'BusC' 
    Speed: BusC_minspeed + (BusC_maxspeed - BusC_minspeed) * Math.random(), // It should be use seperate values seperate Buses 
    FL: BusC_minfl + (BusC_maxfl - BusC_minfl) * Math.random() 
    }] 
} 

如果你有上述的结构的JSON你可以发送单独的数据如下

使用foll翼功能并通过busName获得perticular总线的对象

function getBusData(busName){ 
    return data.buses.filter(function(bus){ 
     return bus.Name == busName; 
    })[0]; 
} 

用法

var busA_data = getBusData('BusA'); 

现在,用你的busA_data它应该包含

{ 
    Name: 'BusA' 
    Speed: 123, 
    FL: 80 
} 

要发布你需要使用JSON.stringify将JSON转换为字符串并发布如下

client.publish(YOUR_BROKER, JSON.stringify(busA_data));

您需要在.on('message',fn)中做相反的处理,例如,

client.on('message', function (topic, payload) { 
    const obj = JSON.parse(payload.toString()) // payload is your JSON as string 
}) 
+0

谢谢@Nadir Laskar。我如何发布所有的值? – Mano

+0

@Mano检查更新 –

+0

我需要获得所有总线速度和FL。像上面提到的期望表一样,我同时为所有总线速度和FL生成随机值。你能否请编辑上面的答案。 – Mano