2017-06-02 5 views
0

Ich versuche, einige Echtzeitwerte mit MQTT Javascript zu veröffentlichen. Hier unten muss ich die richtigen Werte für das JSON-Format festlegen. Hier kann ich nur einen Wert für alle Busse senden, aber ich muss separate Busse separate Werte senden. Wie geht das.Wie erstellt man JSON mit MQTT Javascript?

Meine aktuellen Code:

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() 
}; 

Meine Erwartungen:

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

Mein Publishing Teil

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; 
} 

Antwort

1

Von y unsere Erwartung, ich sehe Sie eine JSON-Struktur wie diese haben sollte

data hat eine Eigenschaft Buses, die ein Array ist Gegenstand der folgenden

{ 
    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() 
    }] 
} 

Wenn Sie oben Struktur von JSON können Sie separate Daten senden wie folgt

Verwenden Sie die folgenden Flügel-Funktion und übergeben Sie die busName das Objekt eines perticular Bus zu bekommen

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

USAGE

var busA_data = getBusData('BusA'); 

Verwenden Sie nun Ihre busA_data die

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

enthalten sollte, veröffentlichen, die Sie benötigen um JSON unter Verwendung von JSON.stringify in einen String zu konvertieren und wie folgt zu veröffentlichen:

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

und Sie müssen das Gegenteil in .on ("Nachricht", Fn), z.

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

Vielen Dank @Nadir Laskar. Wie kann ich alle Werte veröffentlichen? – Mano

+0

@Mano überprüfen Sie das Update –

+0

Ich brauche alle Busgeschwindigkeiten und FL. Wie oben erwähnte Erwartungstabelle und gleichzeitig erzeuge ich zufällige Werte für die ganze Busgeschwindigkeit und FL. Könnten Sie bitte die obige Antwort bearbeiten? – Mano

Verwandte Themen