【问题标题】:Arduino does not connect to Watson IoT with MQTTArduino 不使用 MQTT 连接到 Watson IoT
【发布时间】:2017-02-07 11:28:58
【问题描述】:

我正在尝试将 arduino 连接到 Watson IoT。 使用以下命令:

mqtt.connect(0, "d6acq3.messaging.internetofthings.ibmcloud.com",1883,"d:d6acq3:Arduino_Helligkeit:1234567890","use-token-auth","<as it was provided>");

这是我用于MQTT 的库 其中connect命令指定如下:

bool connect (int id, String *er, unsigned int port, String deviceId);

bool connect ([s.o], String userName , String password);

在 Watson Platform 上,我在设备的连接日志中看到以下消息:

Closed connection from 93.231.145.115. 
The topic is not valid: use-token-auth 
The topic does not match an allowed rule    07.02.2017 11:58:16
Closed connection from 93.231.145.115. 
The topic is not valid: use-token-auth 
The topic does not match an allowed rule 2 times in the last 5 minutes  07.02.2017 11:58:16
Closed connection from 93.231.145.115. 
The topic is not valid: use-token-auth 
The topic does not match an allowed rule    07.02.2017 11:56:03
Closed connection from 93.231.145.115. 
The topic is not valid: use-token-auth 
The topic does not match an allowed rule    07.02.2017 11:45:36

在此先感谢您提供的帮助。

【问题讨论】:

    标签: ibm-cloud watson-iot


    【解决方案1】:

    正如 Dan 所说,Watson IoT 平台只允许使用某些主题字符串,因此您应该确认您使用的是正确的主题字符串。

    对于应用程序,事件主题: iot-2/type/{设备类型}/id/{设备id}/evt/{事件类型}/fmt/{格式类型}

    对于应用程序,命令主题: iot-2/type/{设备类型}/id/{设备id}/cmd/{命令类型}/fmt/{格式类型}

    对于设备,事件主题: iot-2/evt/{事件类型}/fmt/{格式类型}

    对于设备,命令主题: iot-2/cmd/{命令类型}/fmt/{格式类型}

    但是,我在日志中看到的内容表明您正在尝试使用比您在帖子中指定的更长的客户端 ID 进行连接。我看到了这个错误:

    令牌验证失败(设备不存在):ClientID='d:d6acq3:Arduino_Helligkeit:12345678901486464057428',

    因此,您需要检查以确保您的连接使用的是您已注册的正确设备 ID。

    【讨论】:

    • 亲爱的 Valerie,据我所知,我什至没有连接。所以,我认为这个话题还没有发挥作用,对吧?同时,我创建了另一个我也无法连接的设备 ID (18fe34a46709)。
    • 我尝试将第三个设备 ID 与 MQTTBox(一个 Chrome 客户端)连接起来,它可以工作。 (至少对于连接)
    • 我看到您的 MQTTBox 连接工作正常。检查设备 18fe34a46709,它收到此错误,因此看起来它在主题字段中输入了错误的值:主题无效:use-token-auth 主题与允许的规则不匹配。 Reason="主题无效:use-token-auth 主题与允许的规则不匹配"