Configuré MQTT en una Raspberry Pi y configuré un Arduino Uno para el corredor, pero veo la siguiente entrada en el archivo /var/log/mosquitto/mosquitto.log:
New connection from 192.168.10.114 on port 1883. Socket error on client <unknown>, disconnecting.El Pi está configurado con ETH0 conectado a mi LAN local y tiene una dirección IP de 192.168.1.50
También hay una configuración de WiFi AP en el Pi. El Arduino Uno se conecta a través de WiFi para enviar/recibir mensajes MQTT. El WiFi AP tiene una dirección IP de 192.168.10.1 y proporciona arrendamientos de DHCP a través de dnsmasq .
Intenté publicar y suscribirme a la prueba en el servidor de intermediario MQTT local (el Pi) y obtuve el mismo error:
Command: mosquitto_sub -h 192.168.10.1 -t topic mosquitto.log: New connection from 192.168.10.1 on port 1883. New client connected from 192.168.10.1 as mosqsub/1837-raspberryp (cl, k60). Socket error on client <unknown>, disconnecting.Aquí está /etc/mosquitto/mosquitto.conf:
pid_file /var/run/mosquitto.pid persistence true log_dest file /var/log/mosquitto/mosquitto.log allow_anonymous true include_dir /etc/mosquitto/conf.dsudo servicio mosquitto detener sudo servicio mosquitto iniciar:
mosquitto version 1.4.8 terminating mosquitto version 1.4.8 (build date Sun, 14 Feb 2016 15:06:55 +0000) starting Config loaded from /etc/mosquitto/mosquitto.conf. Opening ipv4 listen socket on port 1883. Opening ipv6 listen socket on port 1883.Puede haber un problema en la configuración de mis interfaces. Aquí está /etc/network/interfaces:
source-directory /etc/network/interfaces.d auto lo iface lo inet loopback iface eth0 inet manual auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.10.1 netmask 255.255.255.0¿Alguien puede indicarme de dónde proviene el error de socket en MQTT?
Vine a este hilo porque estaba enfrentando el mismo error. Después de solucionar algunos problemas más, estaba relacionado con la configuración de autenticación: el cliente (Arduino) intentaba conectarse de forma anónima (sin contraseña), mientras que el intermediario (Pi) estaba configurado para permitir solo conexiones autenticadas (allow_anonymous falso en la configuración de MQTT ).
Agregar la contraseña correcta al código de conexión de Arduino resolvió el problema para mí.
Tenga en cuenta que MQTT generará este error si el cliente falla por algún motivo. Pasé varias horas investigando MQTT pensando que el mecanismo pub/sub estaba roto. Pero en cambio, el problema era simplemente un error en mi propio procedimiento de desorganización escrito a mano que contenía una declaración de afirmación de python. La aserción falló, matando al cliente y generando el error MQTT, pero no apareció ningún registro de la aserción fallando en mi consola, lo que me llevó por el camino del jardín por un tiempo. La causa fue que ejecuté sys.exit(-1) en ese momento, eliminando la notificación a la consola. (Incluso en el código de creación de prototipos, es mejor hacer lo correcto cuando pueda, ¡y no cosas tontas como esta!)
Estaba encontrando problemas similares de un Arduino que se conectaba a mosquitto:
mosquitto_1 | 1551412354: New connection from 10.0.3.9 on port 1883. mosquitto_1 | 1551412354: New client connected from 10.0.3.9 as weather-station (c1, k15). mosquitto_1 | 1551412376: Client weather-station has exceeded timeout, disconnecting. mosquitto_1 | 1551412376: Socket error on client weather-station, disconnecting. mosquitto_1 | 1551412402: New connection from 10.0.3.9 on port 1883. mosquitto_1 | 1551412402: New client connected from 10.0.3.9 as weather-station (c1, k15). mosquitto_1 | 1551412424: Client weather-station has exceeded timeout, disconnecting. mosquitto_1 | 1551412424: Socket error on client weather-station, disconnecting.La conexión inicial funcionaría, luego encontraría errores de socket frecuentes, y eventualmente fallaría por completo.
Después de investigar un poco, descubrí que no estaba llamando a la función loop() de PubSubClient. Sin esto, la conexión no recibe el servicio adecuado, lo que genera tiempos de espera y errores de socket. Intente agregar client.loop() a su función loop() .