ondisconnect on_subscribe conectar con and python raspberry-pi raspbian mqtt mosquitto

on_subscribe - ¿Por qué no puedo usar Python-mosquitto en la Raspberry Pi?



python and mqtt (2)

Estoy usando una Raspberry Pi con una imagen Debian Wheezy. He instalado Mosquitto (el intermediario del protocolo MQTT), mosquitto client y python mosquitto para usar mosquitto en mi script de Python, he ejecutado un ejemplo muy simple para comprobar si todos mis paquetes funcionan bien o no.

import mosquitto mqttc = mosquitto.Mosquitto("python_pub") mqttc.will_set("/event/dropped", "Sorry, I seem to have died.") mqttc.connect("127.0.0.1", 1883, 60, True) mqttc.publish("hello/world", "Hello, World!")

Por alguna razón, me sale el siguiente error.

Traceback (most recent call last): File "test_1.py", line 1, in <module> import mosquitto File "/usr/lib/pymodules/python2.7/mosquitto.py", line 484, in <module> _mosquitto_log_init = _libmosq.mosquitto_log_init File "/usr/lib/python2.7/ctypes/__init__.py", line 378, in __getattr__ func = self.__getitem__(name) File "/usr/lib/python2.7/ctypes/__init__.py", line 383, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) AttributeError: /usr/lib/libmosquitto.so.1: undefined symbol: mosquitto_log

¿Alguien puede explicar por qué esto no funciona y una posible solución?


El módulo Mosquitto Python ha sido donado al proyecto Eclipse Paho. Se puede instalar usando "pip install paho-mqtt" y hay documentación disponible en https://pypi.python.org/pypi/paho-mqtt

Los usuarios existentes del módulo Mosquitto Python deberían encontrar muy fácil transferir su código a la versión de Paho.

http://mosquitto.org/documentation/python/

Ejemplo oficial de https://eclipse.org/paho/clients/python/ :

import paho.mqtt.client as mqtt # The callback for when the client receives a CONNACK response from the server. def on_connect(client, userdata, rc): print("Connected with result code "+str(rc)) # Subscribing in on_connect() means that if we lose the connection and # reconnect then subscriptions will be renewed. client.subscribe("$SYS/#") # The callback for when a PUBLISH message is received from the server. def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("iot.eclipse.org", 1883, 60) # Blocking call that processes network traffic, dispatches callbacks and # handles reconnecting. # Other loop*() functions are available that give a threaded interface and a # manual interface. client.loop_forever()

¡Pruebalo!


De hecho, estoy desarrollando un proyecto para mi universidad usando mosquitto como intermediario de MQTT. Te recomiendo usar paho como el módulo de Python para publicar y suscribirse usando MQTT.

La página oficial:

https://pypi.python.org/pypi/paho-mqtt

Aquí hay un ejemplo muy simple que se suscribe al árbol de temas $ SYS del agente e imprime los mensajes resultantes (tomados de https://pypi.python.org/pypi/paho-mqtt ):

import paho.mqtt.client as mqtt # The callback for when the client receives a CONNACK response from the server. def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) # Subscribing in on_connect() means that if we lose the connection and # reconnect then subscriptions will be renewed. client.subscribe("$SYS/#") # The callback for when a PUBLISH message is received from the server. def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("iot.eclipse.org", 1883, 60) # Blocking call that processes network traffic, dispatches callbacks and # handles reconnecting. # Other loop*() functions are available that give a threaded interface and a # manual interface. client.loop_forever()