2016-07-03 5 views
0

У меня есть подкаст на основе paho, работающий на малине pi, который слушает брокера cloudmqtt с именем пользователя и паролем. Я пересылаю сообщение в гнездо bluetooth.приложение cordova mqtt, не работающее на нескольких мобильных телефонах

Используя приложение cordova, я публикую сообщения «0» или «1». Он работает нормально. Но проблема возникает, когда я использую одно и то же приложение на другом мобильном устройстве, но работает только последнее открытое приложение.

Упрощение вещей .. сохранение в стороне вещи Bluetooth.

Сценарий идет как это, я имею в брокера MQTT на cloudmqtt:

URL: m12.cloudmqtt.com порт: 11395 имя пользователя: пользователь пароль: пароль

Когда я бегу mosquitto_sub клиент на Raspberry Pi с этой командой:

mosquitto_sub -h m12.cloudmqtt.com -p 11395 -u пользователя -P пройти -t образец/тест

Это сделать бег, а затем я бегу два mosquitto_pub в двух различных termianls с той же командой, как показано ниже:

mosquitto_pub -h m12.cloudmqtt.com -p 11395 -u пользователь -P передать -t образец/test -m "Hi"

Работает как очарование!

Но теперь, когда я использую эти учетные данные MQTT из Cordova приложения, используя Pāho MQTT плагин, на код ниже:

index.js

var connect = false; 
var app = { 
    // Application Constructor 
    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
     onButton.addEventListener('touchend', app.sendOnSignal, false); 
     offButton.addEventListener('touchend', app.sendOffSignal, false); 
    }, 
    // deviceready Event Handler 
    // 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
    // function, we must explicitly call 'app.receivedEvent(...);' 
    onDeviceReady: function() { 
     //alert("ondeviceready called"); 
     app.connectFreeBroker(); 
    }, 
    // Update DOM on a Received Event 

    connectFreeBroker:function (id,s) { 
     //alert("connectFreeBroker called"); 
     cordova.plugins.CordovaMqTTPlugin.connect({ 
    url:"tcp://m12.cloudmqtt.com", //a public broker used for testing purposes only. Try using a self hosted broker for production. 
    port:11395, 
    connectionTimeout:3000, 
    keepAlive:6000, 
    isCleanSession:true, 
    clientid:"client-2", 
    username:"user", 
    password:"pass", 
    success:function(s){ 
     //alert("connect success callback"); 
    }, 
    error:function(e){ 
     //alert("connect error callback"); 
    }, 
    onConnectionLost:function(){ 
     console.log("disconnect"); 
    } 
    }) 
    }, 
    sendOnSignal:function (id,s) { 
     //alert("sendOnSignal called"); 
     cordova.plugins.CordovaMqTTPlugin.publish({ 
     topic:"sample/test", 
     payload:"1", 
     success:function(s){ 
     //alert("send success callback"); 
     document.getElementById("bulb_image").src = "images/bulb-glow.png"; 
     }, 
     error:function(e){ 
     //alert("send error callback"); 
     } 
    }) 
    }, 
    sendOffSignal:function (id,s) { 
     //alert("sendOffSignal called"); 
     cordova.plugins.CordovaMqTTPlugin.publish({ 
     topic:"sample/test", 
     payload:"0", 
     success:function(s){ 
     //alert("send success callback"); 
     document.getElementById("bulb_image").src = "images/bulb-unglow.png"; 
     }, 
     error:function(e){ 
     //alert("send error callback"); 
     } 
    }) 
    } 
}; 

app.initialize(); 

// код заканчивается

На развертывании этого приложение на первом Android-телефоне (Galaxy S5) работает, а подпрограмма на малине pi получает сообщение. Теперь при развертывании одного и того же приложения с другим идентификатором клиента на втором телефоне Android (HTC desire 820) он работает так же, как и одно приложение одновременно на двух телефонах, и отправка сообщения не будет работать. Только сообщение с телефона, на котором было открыто приложение, отправит сообщение.

Я пробовал использовать разные брокеры, но такую ​​же проблему. Я попытался использовать приложение на 4 телефонах Android по-прежнему не повезло. Может быть, небольшая ошибка, которую я делаю, но решит для меня большую проблему, любую помощь оценили! :-)

+0

Вы собираетесь должны предоставить гораздо больше информации, прежде чем любой может помочь. например Какой тип телефона не работает? Какая ОС работает на телефонах? Какая же релевантность - малиновый Pi/Bluetooth, он не связан с проблемой с Кордовой? – hardillb

+0

Что значит «последнее открытое приложение»? Дайте все подробности. Представьте, что я ничего не знаю о вашей проблеме и о том, что вы уже пробовали. – barny

+1

Это похоже на поведение на bluemix, где при подключении нескольких устройств с использованием одного и того же ID, когда новое устройство регистрируется на предыдущем устройстве с этим идентификатором, отключено. Подписывается ли ваше приложение на использование идентификатора? Использует ли каждый мобильный код другой идентификатор? – barny

ответ

0

MQTT требует уникальный идентификатор для каждого устройства, поэтому изменить строку:

clientid:"client-2", 

к чему-то вроде:

clientid:"client-" + parseInt(Math.random() * 100, 10) 
+0

Я пробовал это на первом шаге только, но не повезло, наконец, мне пришлось перейти в другую библиотеку. – Anuj

 Смежные вопросы

  • Нет связанных вопросов^_^