Recibir los valores de los topicos


#1

Hola, cuál librería de PHP o Javascript s epuede usar para recibir “constantemente” los nuevos valores publicados en un tópico. Ejemplo, tengo un sensor que emite la temperatura, está registrado en mqtthub, luego, desde un sitio web cómo puedo obtener los valores de la temperatura, para procesarlo, almacenarlos, etc. En el sitio web.

Muchas gracias de antemano.


#2

Buenas días.

De manera general, tendrás que usar el API HTTP localizado aquí para escribir código php usando los métodos estándar de php para hacer comunicación https + json:

No hay ninguna rareza: todo plain https + json.

En el manual del api verás funciones para hacer login, para subscribirte a ciertos topics y también hacer pull de los mensajes que hayas recibido desde la última vez que llamaste:

Ese código lo tendrás que poner en un cron o escribir un demonio que llame a tu código php para que haga el pull, rehusando una sesión ya activa (tokenId), haciendo login+ subscribe en caso de no tenerla o que te de como expirada al realizar la llamada pull.

Un saludo,


#3

Buenos días Cristian, gracias por contestar. Sí yo he realizado pruebas con postman y he probado con código PHP, me he logueado y he ejecutado varios de los métodos. El punto es, que sí envía un mensaje desde una App (posteriormente será de un sensor real de temperatura) puedo suscribirme al topic, pero cuando uso el método pull no recibo sus mensajes. Solo me funciona cuando lo hago desde una misma sesión, por ejemplo del mismo postman.


#4

image
Por ejemplo, esos valores fueron enviados desde Postman y otros desde MQTT Explorer. Entonces, cuando quiero leer todos esos valores publicados, independientemente del origen, solo veo en Postman los que fueron publicados por esa App y no los de MQTT Explorer.
si realmente hay un sensor que emite valores al broker, cómo puedo leerlos desde Postman, para seguir con el ejemplo.

De antemano muchas gracias.


#5

Buenas,

Para que te funcione debes subscriberte con el usuario que vayas a recibir y debes evitar usar el mismo usuario para recibir que con el que enviaste.

Hay varios motivos para esto:

  1. El primero es que si ya estás conectado con el usuario con el que pretendes hacer pull, no te llegará nada porque ya se ha entregado dicha copia (no hay que entregar ninguna segunda copia a ese mismo usuario, y por tanto cuando haces pull no verás nada ya que todo lo pendiente se ha entregado).

  2. Si conectas con el mismo usuario para enviar y recibir, tendrás problemas de connection replace (Conectando con varios dispositivos usando las mismas credenciales (o cómo evitar el connection replace de MQTT)).

Resumiendo, para que te funcione:

  1. Crea un usuario productor con el que mandes los mensajes.

  2. Crea un usuario consumidor con el que recibas dichos mensajes y haz que haga subscribe de lo que quieres recibir.

  3. Haz login HTTP y comprueba que las subscripciones del consumidor siguen en marcha.

  4. Comprueba las subscripciones y de quién son consultando con:

  5. Una vez lo tengas todo, haz PUBLISH con el productor y a continuación pull HTTP con el consumidor. Te funcionará sin problemas.

  6. Recuerda evitar usar para todo esto tu usuario administrador de hub (texxxxxxno@xxxxx.com). Ese usuario debería ser usado sólo para la gestión del hub.

Uno puede pensar que se puede usar para pruebas, pero volveríamos al principio: usar este usuario para pruebas que tengan algo de utilidad involucrará enviar y recibir, y te puedes encontrar en varios escenarios como los descritos al principio.

Un saludo


#6

Muchísimas gracias Cristian.