2017-06-02 26 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