From 8afc76ea2ae71af7bc9fd22acbde4f0def6ed352 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 6 Aug 2023 22:31:19 -0700 Subject: [PATCH] Connect to mqtt on the right topic --- Meshtastic/Enums/LoraConfigEnums.swift | 20 +++++++++++++++++ Meshtastic/Helpers/BLEManager.swift | 2 +- .../Helpers/Mqtt/MqttClientProxyManager.swift | 22 ++++++++++++------- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Meshtastic/Enums/LoraConfigEnums.swift b/Meshtastic/Enums/LoraConfigEnums.swift index 805a4288..85ed35ce 100644 --- a/Meshtastic/Enums/LoraConfigEnums.swift +++ b/Meshtastic/Enums/LoraConfigEnums.swift @@ -135,6 +135,26 @@ enum ModemPresets: Int, CaseIterable, Identifiable { return "Short Range - Fast" } } + var name: String { + switch self { + case .longFast: + return "LongFast" + case .longSlow: + return "LongSlow" + case .longModerate: + return "LongModerate" + case .vLongSlow: + return "VLongFast" + case .medSlow: + return "MediumSlow" + case .medFast: + return "MediumFast" + case .shortSlow: + return "ShortSlow" + case .shortFast: + return "ShortFast" + } + } func snrLimit() -> Float { switch self { case .longFast: diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index e64d79fa..910d0f51 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -586,7 +586,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject { //Subscribe to Mqtt Client Proxy if enabled if fetchedNodeInfo[0].mqttConfig?.proxyToClientEnabled ?? false { - mqttManager.connectFromConfigSettings(config: fetchedNodeInfo[0].mqttConfig!, metadata: fetchedNodeInfo[0].metadata!) + mqttManager.connectFromConfigSettings(node: fetchedNodeInfo[0]) } } } catch { diff --git a/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift b/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift index ae020d41..95e104f0 100644 --- a/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift +++ b/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift @@ -35,23 +35,24 @@ class MqttClientProxyManager { } - func connectFromConfigSettings(config: MQTTConfigEntity, metadata: DeviceMetadataEntity) { + func connectFromConfigSettings(node: NodeInfoEntity) { let defaultServerAddress = "mqtt.meshtastic.org" let defaultServerPort = 1883 //let - var host = config.address + var host = node.mqttConfig?.address if host == nil || host!.isEmpty { host = defaultServerAddress } if let host = host { let port = defaultServerPort - let username = config.username - let password = config.password + let username = node.mqttConfig?.username + let password = node.mqttConfig?.password - var root = config.root?.count ?? 0 > 0 ? config.root : "msh" - var prefix = root! + "/2" //+ metadata.firmwareVersion! + var root = node.mqttConfig?.root?.count ?? 0 > 0 ? node.mqttConfig?.root : "msh" + let preset = ModemPresets(rawValue: Int(node.loRaConfig?.modemPreset ?? 0)) + var prefix = root! + "/c/\(preset?.name ?? "LongFast")" var topic = prefix + "/#" let qos = CocoaMQTTQoS(rawValue :UInt8(2))! connect(host: host, port: port, username: username, password: password, topic: topic, qos: qos, cleanSession: true) @@ -70,7 +71,9 @@ class MqttClientProxyManager { mqttClient.password = password mqttClient.keepAlive = 60 mqttClient.cleanSession = cleanSession +#if DEBUG mqttClient.logLevel = .debug +#endif mqttClient.willMessage = CocoaMQTTMessage(topic: "/will", string: "dieout") mqttClient.autoReconnect = true mqttClient.delegate = self @@ -89,16 +92,18 @@ class MqttClientProxyManager { func subscribe(topic: String, qos: MqttQos) { let qos = CocoaMQTTQoS(rawValue :UInt8(qos.rawValue))! mqttClient?.subscribe(topic, qos: qos) - print("MQTT Client Proxy subscribed to: " + topic) + print("📲 MQTT Client Proxy subscribed to: " + topic) } func unsubscribe(topic: String) { mqttClient?.unsubscribe(topic) + print("📲 MQTT Client Proxy unsubscribe for: " + topic) } func publish(message: String, topic: String, qos: MqttQos) { let qos = CocoaMQTTQoS(rawValue :UInt8(qos.rawValue))! mqttClient?.publish(topic, withString: message, qos: qos) + print("📲 MQTT Client Proxy publish for: " + topic) } func disconnect() { @@ -107,6 +112,7 @@ class MqttClientProxyManager { if let client = mqttClient { status = .disconnecting client.disconnect() + print("📲 MQTT Client Proxy Disconnected") } else { status = .disconnected } @@ -121,7 +127,7 @@ extension MqttClientProxyManager: CocoaMQTTDelegate { func mqtt(_ mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck) { - print("didConnectAck: \(ack)") + print("📲 MQTT Client Proxy didConnectAck: \(ack)") if ack == .accept { //delegate?.onMqttConnected()