Wie

2016-07-20 9 views
0

Zuverlässigkeit MQTT Nachrichten zwischen AWS Lambda und Web-App über das Internet der Dinge erhöhen ich mit konsequent Empfang MQTT Nachrichten veröffentlicht durch eine Lambda-Funktion und abonnierten von einer Web-Anwendung (mit einem „Dinge“ in IoT ein Problem habe genannt "Arbeitsplatz"). Manchmal bekomme ich sie sofort, aber manchmal zeitweise, aber meistens bekomme ich sie nach einer sehr langen Verzögerung, wenn ich sie überhaupt bekomme. Ich kann immer eine Verbindung herstellen und abonnieren. Ich habe versucht qos 0 und 1.Wie

EDIT: Wenn ich nur eine generische Thema Zeichenfolge ohne die $ aws/... Präfix Sachen und Qos von 1, tendiere ich jetzt dazu, eine schlanke Mehrheit der Nachrichten zu bekommen Ich sende. Aber sie sind selten unmittelbar und sie neigen dazu, sich zu stapeln und mehrere gleichzeitig zu durchlaufen. Und einige sind völlig verloren.

Ich habe eine Lambda-Funktion, die eine Alexa Fähigkeit dient, und es veröffentlicht zu einem IoT MQTT Thema/Sache wie folgt aus:

var params = { 
    // have also tried topic strings without $aws/things/ prefix here 
    topic: '$aws/things/workstation/', 
    payload: new Buffer('test message'), 
    qos: 0 
}; 

iotData.publish(params, function(err, data) { 
    if (err) console.log('ERR: ', err); // an error occurred 
    else if (data) console.log('DATA: ', data); // successful response 
}); 

ich dann eine Web-Anwendung haben die AWS IOT Device SDK verwenden, die abonniert dass MQTT Kanal und wartet auf Nachrichten wie folgt aus:

var device = awsIoT.device({ 
    keyPath: './keys/abcd1234xyz-private.pem.key', 
    certPath: './keys/abcd1234xyz-certificate.pem.crt', 
    caPath: './keys/root-CA.crt', 
    clientId: 'workstation', 
    region: 'us-east-1', 
    host: "abcd1234xyz.iot.us-east-1.amazonaws.com", 
    port: 8883 
}); 

device.on('connect', function() { 
    console.log('connect'); 
    // have also tried topic strings without $aws/things/ prefix here 
    device.subscribe('$aws/things/workstation/'); 
}); 

device.on('message', function(topic, payload) { 
    console.log('message', topic, payload.toString()); 
}); 

Antwort

2

Hat jeder Benutzer der Web-App mit dem gleichen Client-ID am Ende? Client-ID und Zertifikatspaar werden alle doppelten Verbindungen trennen. Außerdem ist $ aws das Präfix für Schattenthemen (und andere Diagnosethemen). Vielleicht Dinge/Workstation verwenden?

+0

Ich habe nur einen Webclient ausgeführt (und wird immer nur einen haben), also bin ich mir nicht sicher, dass das das Problem ist. Ich habe auch versucht, das $ aws Prefix-Zeug wegzulassen und nur ein generisches Thema ohne Erfolg zu veröffentlichen/zu abonnieren. Ich habe sogar versucht, $ aws/sachen/workstation/shadow/update zu abonnieren und den Schatten über eine Test-Lambda-Funktion zu aktualisieren, aber am Ende des Abonnements kommt nichts durch. – Gregir

+0

Es stellt sich heraus, dass das Entfernen von $ aws/sachen anstelle von nur $ aws das Problem war. Danke, Kyle. – Gregir