2016-02-14 1 views
0

J'essaie de connecter en toute sécurité ESP8266 au courtier MQTT Azure Protocol Gateway sur un ordinateur en nuage ou local (essayé les deux) comme ça (pas important - la connexion fonctionne correctement):ESP8266 avec microprogramme NodeMCU: recevoir des messages vides avec abonnement MQTT sécurisé

m = mqtt.Client("{deviceId}", "3600", "{iotHub}/{deviceId}", "{SASToken}") 
... 
m:on("message", function(conn, top, data) 
    print(data) -- EMPTY string here! 
end) 
    ... 
m:connect({IP}, 8883, 1, function(conn) 
    m:subscribe("devices/{deviceId}/messages/devicebound/#", 1, function(conn) 
    ... 
    end) 
end) 

ESP se connecte au serveur et l'établissement de liaison est terminé avec succès. Quand je publie des données, je peux les lire correctement sur le serveur, c'est OK. Je m'abonne au sujet sans problèmes. Lorsque j'envoie des données dans un message de cloud à périphérique du serveur vers l'ESP à un sujet souscrit, l'événement 'sur message' est appelé mais l'attribut de données transmis à la fonction est une chaîne VIDE. J'utilise la dernière version de maître NodeMCU basée sur le SDK 1.4.0 (j'ai essayé la version entière et la version flottante). Je ne peux pas activer le débogage, car je n'ai pas encore de développeur NodeMCU.

J'ai essayé suivante:

  • version dev - ne pas aider
  • mémoire libre jusqu'à 32 Ko - pas aider
  • paquets capturés avec Wireshark: les paquets contiennent des données chiffrées avec une certaine longueur, il est donc pas vide et la taille du paquet est inférieure à 2 Ko taille de tampon

Quelqu'un peut-il s'il vous plaît me conseiller où pourrait être un problème ou comment le déboguer pour plus d'informations? J'approuverais toutes les idées. Je vous remercie.

EDIT: J'ai essayé le mode de débogage, et il n'y a rien d'intéressant sur la sortie:

enter mqtt_socket_received. 
MQTT_DATA: type: 3, qos: 0, msg_id: 0, pending_id: 0 
enter deliver_publish. 
string 
userdata: 3fff3e88 
devices/ESP/messages/devicebound 
      <- here should be printed data 
On 
leave deliver_publish. 
receive, queue size: 0 
leave mqtt_socket_received. 
enter mqtt_socket_timer. 
timer, queue size: 0 
keep_alive_tick: 71 
leave mqtt_socket_timer. 
enter mqtt_socket_received. 
MQTT_DATA: type: 7, qos: 1, msg_id: 8813, pending_id: 0 
receive, queue size: 0 
leave mqtt_socket_received. 
+0

Essayez la branche 'dev' et activer le débogage par exemple en utilisant http://nodemcu-build.com/index.php. –

+0

J'ai essayé aussi la version de dev. Impossible d'activer le débogage, car ma carte de développeur NodeMCU n'est pas encore livrée et uniquement avec ESP12E. Je ne suis pas capable de télécharger des scripts en utilisant le firmware avec le débogage. – kyberpunk

+0

Maintenant, je l'ai trouvé dans la boîte aux lettres: D Je vais essayer ... – kyberpunk

Répondre

0

Cela peut être stupide mais parfois lua noms spécifiques attend à ce que certaines fonctions. Modifier cette function(conn, top, data) pour cette function(conn, topic, data)

J'ai travaillé précédemment avec mqtt en lua avec protection par mot de passe, et je devais laisser tomber beacuse je n'étais pas recieving le contenu du message soit, mais je pense que le mien était en raison du montant des messages que je recevais/délivrant. J'ai également changé de courtier de mosquitto à mosca.

J'espère que vous trouverez une solution bientôt et s'il vous plaît le partager, nous pourrions être en mesure de l'utiliser pour :)