从JS中的Cloudmqtt订阅的主题获取数据到Alexa Skill

时间:2017-12-01 22:29:45

标签: javascript mqtt alexa alexa-skills-kit

我目前正尝试通过订阅主题来获取cloudmqtt的数据。但是当我尝试将其转换为字符串以便我的Alexa可以读取它时,Alexa的测试服务告诉我“远程端点无法被调用,或者它返回的响应无效。”

我的订阅代码如下

    var mqtt = require('mqtt');

function DHTSensorInSession(intent, session, callback) {
    const cardTitle = intent.name;
    let repromptText = '';
    let sessionAttributes = {};
    const shouldEndSession = true;
    let speechOutput = '';
    let Tempe = '';
        var mqttpromise = new Promise( function(resolve,reject){
            var client = mqtt.connect({port:19546,host:'m14.cloudmqtt.com',username:'jkgnbggq',password:'VbG2-RvZTEt-'})

            client.on('connect', function() { // When connected
                // publish a message to any mqtt topic
                client.publish('main/light/esp', 'connected')
                client.subscribe('main/sensor/temp')
            });
            client.on('message',function(topic,message){
                if(topic.toString() === 'main/sensor/temp')
                {
                    Tempe += message.toString();
                }
                client.end();
                resolve('Done sending');

            })

        });
        mqttpromise.then(
            function(data) {
                console.log('Function called succesfully:', data);
                sessionAttributes = createSensorAttributes(Tempe);
                speechOutput = "That wire less light has been turned " + Tempe;
                repromptText = "Ok, turning the light " + Tempe;
                callback(sessionAttributes,buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
            },
            function(err) {
                console.log('An error occurred:', err);
            }
        );
}

2 个答案:

答案 0 :(得分:0)

请参阅lambda的日志以查找任何错误消息。这些可以在AWS控制台中找到,或者使用ASK CLI命令"询问lambda log ..."。

这些看起来有点神秘,但是当出现问题时它们会非常有用。查找条目"错误"或"失败"。它们通常会包含index.js(或其他)文件的行号,显示确切地说明哪一行导致了问题。

或者,创建单元测试以在上载之前在本地测试代码。

网上有很多关于这样做的文章和帖子。

答案 1 :(得分:0)

MQTT无法正常工作。

通常,邮件仅传递给已发布邮件的订阅主题的已连接客户端。例外情况是,如果消息被标记为保留,则在这种情况下,发布的LAST消息将在他们订阅主题时传递给新客户端。