Skip to content

emonhub (specifically EmonHubMqttInterfacer.py) fails when using Paho Client >=2.0 #222

Description

@glenm-nz

emonhub (specifically EmonHubMqttInterfacer.py) throws the following error when using Paho Client >=2.0

2025-06-07T20:44:34.517177+12:00 fnlctl systemd[1]: Started emonhub.service - emonHub data multiplexer.
2025-06-07T20:44:34.674514+12:00 fnlctl emonhub[10841]: Exception ignored in: <function Client.__del__ at 0x767855f963e0>
2025-06-07T20:44:34.682733+12:00 fnlctl emonhub[10841]: Traceback (most recent call last):
2025-06-07T20:44:34.682753+12:00 fnlctl emonhub[10841]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 874, in __del__
2025-06-07T20:44:34.682781+12:00 fnlctl emonhub[10841]:     self._reset_sockets()
2025-06-07T20:44:34.682792+12:00 fnlctl emonhub[10841]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 1133, in _reset_sockets
2025-06-07T20:44:34.682811+12:00 fnlctl emonhub[10841]:     self._sock_close()
2025-06-07T20:44:34.682824+12:00 fnlctl emonhub[10841]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 1119, in _sock_close
2025-06-07T20:44:34.683032+12:00 fnlctl emonhub[10841]:     if not self._sock:
2025-06-07T20:44:34.683409+12:00 fnlctl emonhub[10841]: AttributeError: 'Client' object has no attribute '_sock'

Emonhub verison: v2.7.2
Paho version: 2.0.0-1

Quick fix is to change the following line:

self._mqttc = mqtt.Client()

to be self._mqttc = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1) after which everthing works ok.

Alternatively you could look to change the on_connect and on-disconnect callbacks to replace the rc with reason_code
See https://eclipse.dev/paho/files/paho.mqtt.python/html/migrations.html for details on the version changes, but this will also include changing the comparisons for values other than zero.

Note this will be a breaking change for those running <Paho 2.0, and either they would need to upgrade Paho to >=2.0 or if the 'quickfix' option was taken to add the legacy callback version, they could just revert that line to self._mqttc = mqtt.Client()

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions