Update and migrate mqtt to v2 (#10160)

This commit is contained in:
Nicolas Mowen 2024-02-29 17:59:47 -07:00 committed by GitHub
parent dcc0886305
commit ea9316e770
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,6 +3,7 @@ import threading
from typing import Any, Callable from typing import Any, Callable
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
from paho.mqtt.enums import CallbackAPIVersion
from frigate.comms.dispatcher import Communicator from frigate.comms.dispatcher import Communicator
from frigate.config import FrigateConfig from frigate.config import FrigateConfig
@ -96,9 +97,11 @@ class MqttClient(Communicator): # type: ignore[misc]
) )
self.publish( self.publish(
f"{camera_name}/birdseye_mode/state", f"{camera_name}/birdseye_mode/state",
camera.birdseye.mode.value.upper() (
if camera.birdseye.enabled camera.birdseye.mode.value.upper()
else "OFF", if camera.birdseye.enabled
else "OFF"
),
retain=True, retain=True,
) )
@ -117,25 +120,26 @@ class MqttClient(Communicator): # type: ignore[misc]
client: mqtt.Client, client: mqtt.Client,
userdata: Any, userdata: Any,
flags: Any, flags: Any,
rc: mqtt.ReasonCodes, reason_code: mqtt.ReasonCode,
properties: Any,
) -> None: ) -> None:
"""Mqtt connection callback.""" """Mqtt connection callback."""
threading.current_thread().name = "mqtt" threading.current_thread().name = "mqtt"
if rc != 0: if reason_code != 0:
if rc == 3: if reason_code == "Server Unavailable":
logger.error( logger.error(
"Unable to connect to MQTT server: MQTT Server unavailable" "Unable to connect to MQTT server: MQTT Server unavailable"
) )
elif rc == 4: elif reason_code == "Bad user name or password":
logger.error( logger.error(
"Unable to connect to MQTT server: MQTT Bad username or password" "Unable to connect to MQTT server: MQTT Bad username or password"
) )
elif rc == 5: elif reason_code == "Not authorized":
logger.error("Unable to connect to MQTT server: MQTT Not authorized") logger.error("Unable to connect to MQTT server: MQTT Not authorized")
else: else:
logger.error( logger.error(
"Unable to connect to MQTT server: Connection refused. Error code: " "Unable to connect to MQTT server: Connection refused. Error code: "
+ str(rc) + reason_code.getName()
) )
self.connected = True self.connected = True
@ -144,7 +148,12 @@ class MqttClient(Communicator): # type: ignore[misc]
self._set_initial_topics() self._set_initial_topics()
def _on_disconnect( def _on_disconnect(
self, client: mqtt.Client, userdata: Any, flags: Any, rc: mqtt self,
client: mqtt.Client,
userdata: Any,
flags: Any,
reason_code: mqtt.ReasonCode,
properties: Any,
) -> None: ) -> None:
"""Mqtt disconnection callback.""" """Mqtt disconnection callback."""
self.connected = False self.connected = False
@ -152,7 +161,10 @@ class MqttClient(Communicator): # type: ignore[misc]
def _start(self) -> None: def _start(self) -> None:
"""Start mqtt client.""" """Start mqtt client."""
self.client = mqtt.Client(client_id=self.mqtt_config.client_id) self.client = mqtt.Client(
callback_api_version=CallbackAPIVersion.VERSION2,
client_id=self.mqtt_config.client_id,
)
self.client.on_connect = self._on_connect self.client.on_connect = self._on_connect
self.client.will_set( self.client.will_set(
self.mqtt_config.topic_prefix + "/available", self.mqtt_config.topic_prefix + "/available",