3

I need to use publish Subscribe methods in my Ionic 3 application.

I followed this page.

Is there any way we can link MQTT with our Ionic 3 application? If yes, how so? How exactly do I need to go about it for a successful connection?

I installed ng2-mqtt service using

npm install ng2-mqtt --save

This is my code:

index.html

<script src="cordova.js"></script>
<script src="node_modules/ng2-mqtt/mqttws31.js" type="text/javascript"></script>

home.ts

import {Paho} from 'mqttws31'

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

      private _client: Paho.MQTT.Client;

      constructor(public paho: Paho) {

      }
         this._client = new Paho.MQTT.Client("52.66.30.178", 1883, "path", "someclient_id");

        this._client.onConnectionLost = (responseObject: Object) => {
          console.log('Connection lost.');
        this.getServerMessage();

         this._client.onMessageArrived = (message: Paho.MQTT.Message) => {
      console.log('Message arrived.');
    };

    this._client.connect({ onSuccess: this.onConnected.bind(this); });
  }

Still I can't get it to work.

Any suggestions and changes will help me. I'm stuck please do.

stefanobaghino
  • 11,253
  • 4
  • 35
  • 63
CodeMine
  • 179
  • 3
  • 10

1 Answers1

6

After searching and trying out different things for a while, I found this solution, you can use this library if you want to use MQTT in your project.

Install it using npm install ngx-mqtt --save

Usage: app.module.ts

import { Observable } from 'rxjs/Observable';
import {
  IMqttMessage,
  MqttModule,
  MqttService
} from 'ngx-mqtt';

export const MQTT_SERVICE_OPTIONS = {
  hostname: '13.127.53.13',
  port: 9001,
  path: '/mqtt'
};

export function mqttServiceFactory() {
  return new MqttService(MQTT_SERVICE_OPTIONS);
}

@NgModule({
  imports: [
    BrowserModule,
    HttpModule,
    MqttModule.forRoot({
      provide: MqttService,
      useFactory: mqttServiceFactory
    }),
    IonicModule.forRoot(MyApp)
  ]

And then you can use it in your page like: (ex: home.ts file)

import { IMqttMessage, MqttModule, MqttService } from 'ngx-mqtt';
import { Observable } from 'rxjs/Observable';

export class HomePage  {

constructor( private _mqttService: MqttService)
{
   this._mqttService.observe('home/door').subscribe((message: MqttMessage) => 
   {
   this.sensor1 = message.payload.toString();
   console.log(this.sensor1);
   });
}

 publishMessage()
 {
  this._mqttService.unsafePublish("home/button", "on", {qos: 0, retain: false});
 }

For more information about this library: https://github.com/sclausen/ngx-mqtt

CodeMine
  • 179
  • 3
  • 10
  • 1
    Hi @codemine, I wasn't able to make your example work. I'm not sure if I'm missing something in my code. What is the ngx-mqtt version that you used? – Esthon Wood Oct 21 '18 at 02:44
  • Dear Heston, if the problem you have is at the line " provide: MqttService,", this is related to the fact that he is using the "ngx-mqtt": "^5.4.0" – docHell Dec 06 '19 at 17:07
  • i m able to publish but not able to subscribe.. any help – user2900572 Dec 10 '19 at 10:06