Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can not be connected to HiveMQ on remote server #376

Closed
arghaffari opened this issue Feb 26, 2020 · 1 comment
Closed

Can not be connected to HiveMQ on remote server #376

arghaffari opened this issue Feb 26, 2020 · 1 comment
Labels

Comments

@arghaffari
Copy link

arghaffari commented Feb 26, 2020

I ran my own MQTT Broker on a remote server by HiveMQ. I setup Nginx and the dashboards works Ok. But I can't connect to it via a publisher or subscriber. Before I connected to HiveMQ sandbox somehow like this mqtt://broker.hivemq.com:1883 but I can't do this on my own server. What should I do?

HiveMQ Log

2020-02-26 07:29:07,819 INFO  - Extension "Allow All Extension" version 1.0.0 started successfully.
2020-02-26 07:29:09,952 INFO  - 5EQfP: no members discovered after 2001 ms: creating cluster as first member
2020-02-26 07:29:09,989 INFO  - No user for HiveMQ Control Center configured. Starting with default user
2020-02-26 07:29:09,990 INFO  - Starting HiveMQ Control Center on address 127.0.0.1 and port 8080
2020-02-26 07:29:10,217 INFO  - Control Center Audit Logging started.
2020-02-26 07:29:10,217 INFO  - Started HiveMQ Control Center in 227ms
2020-02-26 07:29:10,230 INFO  - Starting TCP listener on address 0.0.0.0 and port 1883
2020-02-26 07:29:10,269 INFO  - Started TCP Listener on address 0.0.0.0 and on port 1883
2020-02-26 07:29:10,269 INFO  - Started HiveMQ in 6383ms

Ngnix


server {
    listen      80;
    client_max_body_size 20M;
    server_name xxxxx.io www.xxxxx.io;
    error_log  /var/log/apache2/domains/xxxxx.io.error.log error;

    location / {
        proxy_pass      http://0.0.0.0:8080;
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|odt|ods|odp|odf|tar|wav|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm)$ {
            root           /home/admin/web/mqtt/hivemq-4.3.1/;
            access_log     /var/log/apache2/domains/xxxxx.log combined;
            access_log     /var/log/apache2/domains/xxxxx.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }


    location @fallback {
        proxy_pass      http://0.0.0.0:8080;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include /home/admin/conf/web/nginx.xxxxxx.io.conf*;
}

Subscriber


const mqtt = require('mqtt')
options = {
  port: 1883,
  host: 'mqtt://xxx',
  // clientId: "alireza"
}
const client = mqtt.connect('mqtt://xxx', options)

/**
* The state of the doorphone, defaults to closed
* Possible states : closed, opening, open, closing
*/
// console.log(client)

var state = 'closed'

client.on('connect', () => {
  console.log(client.connected)
  client.subscribe('doorphone/open')
  client.subscribe('doorphone/close')

  // Inform controllers that doorphone is connected
  client.publish('doorphone/connected', 'true')
  sendStateUpdate()
})

client.on('message', (topic, message) => {
    console.log('received message %s %s', topic, message)
    switch (topic) {
        case 'doorphone/open':
          return handleOpenRequest(message)
        case 'doorphone/close':
          return handleCloseRequest(message)
      }
})

function sendStateUpdate () {
    console.log('sending state %s', state)
    client.publish('doorphone/state', state)
}


function handleOpenRequest (message) {
    if (state !== 'open' && state !== 'opening') {
      console.log('opening doorphone door')
      state = 'opening'
      sendStateUpdate()

      // simulate door open after 5 seconds (would be listening to hardware)
      setTimeout(() => {
        state = 'open'
        sendStateUpdate()
      }, 5000)
    }
}


function handleCloseRequest (message) {
    if (state !== 'closed' && state !== 'closing') {
      state = 'closing'
      sendStateUpdate()

      // simulate door closed after 5 seconds (would be listening to hardware)
      setTimeout(() => {
        state = 'closed'
        sendStateUpdate()
      }, 5000)
    }
}



/**
 * Want to notify controller that doorphone is disconnected before shutting down
 */
function handleAppExit (options, err) {
    if (err) {
      console.log(err.stack)
    }

    if (options.cleanup) {
      client.publish('doorphone/connected', 'false')
    }

    if (options.exit) {
      process.exit()
    }
  }

  /**
   * Handle the different ways an application can shutdown
   */
  process.on('exit', handleAppExit.bind(null, {
    cleanup: true
  }))
  process.on('SIGINT', handleAppExit.bind(null, {
    exit: true
  }))
  process.on('uncaughtException', handleAppExit.bind(null, {
    exit: true
  }))
@SgtSilvio
Copy link
Member

Hi @softiran
This is the wrong place for your question (it is not related to the hivemq-mqtt-client). You should ask this on the HiveMQ community forum.
Nevertheless a short answer for your problem: your proxy configuration missed configuration for the MQTT port (1883), you only configured the dashboard port (8080).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants