mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-09-25 06:56:49 +00:00
122 lines
4.3 KiB
C
122 lines
4.3 KiB
C
#pragma once
|
|
|
|
#ifdef WITH_MQTT_BRIDGE
|
|
|
|
#include <string.h>
|
|
#include <MeshCore.h>
|
|
#include "MQTTPrefs.h"
|
|
#include "MQTTPacketFilter.h"
|
|
#include "MQTTPresets.h"
|
|
#include "WiFiPowerSave.h"
|
|
|
|
// Compile-time defaults for fresh /mqtt_prefs (override via platformio build_flags).
|
|
// Example:
|
|
// -D MQTT_DEFAULT_SLOT1_PRESET='"meshcore-ca-1"'
|
|
// -D MQTT_DEFAULT_IATA='"YYZ"'
|
|
// -D MQTT_DEFAULT_TIMEZONE='"America/Toronto"'
|
|
// -D MQTT_DEFAULT_TIMEZONE_OFFSET=-5
|
|
// -D DEFAULT_WIFI_POWER_SAVE_MODE=0 // min; 1=none, 2=max
|
|
|
|
#ifndef MQTT_DEFAULT_SLOT1_PRESET
|
|
#define MQTT_DEFAULT_SLOT1_PRESET "analyzer-us"
|
|
#endif
|
|
#ifndef MQTT_DEFAULT_SLOT2_PRESET
|
|
#define MQTT_DEFAULT_SLOT2_PRESET "analyzer-eu"
|
|
#endif
|
|
#ifndef MQTT_DEFAULT_SLOT3_PRESET
|
|
#define MQTT_DEFAULT_SLOT3_PRESET "none"
|
|
#endif
|
|
#ifndef MQTT_DEFAULT_SLOT4_PRESET
|
|
#define MQTT_DEFAULT_SLOT4_PRESET "none"
|
|
#endif
|
|
#ifndef MQTT_DEFAULT_SLOT5_PRESET
|
|
#define MQTT_DEFAULT_SLOT5_PRESET "none"
|
|
#endif
|
|
#ifndef MQTT_DEFAULT_SLOT6_PRESET
|
|
#define MQTT_DEFAULT_SLOT6_PRESET "none"
|
|
#endif
|
|
|
|
#ifndef MQTT_DEFAULT_IATA
|
|
#define MQTT_DEFAULT_IATA ""
|
|
#endif
|
|
|
|
#ifndef MQTT_DEFAULT_TIMEZONE
|
|
#define MQTT_DEFAULT_TIMEZONE ""
|
|
#endif
|
|
|
|
#ifndef MQTT_DEFAULT_TIMEZONE_OFFSET
|
|
#define MQTT_DEFAULT_TIMEZONE_OFFSET 0
|
|
#endif
|
|
|
|
static inline void mqttDefaultSlotPreset(char* dest, size_t dest_size, const char* preset) {
|
|
const char* resolved = MQTT_PRESET_NONE;
|
|
if (preset && preset[0] != '\0') {
|
|
if (strcmp(preset, MQTT_PRESET_NONE) == 0 ||
|
|
strcmp(preset, MQTT_PRESET_CUSTOM) == 0 ||
|
|
findMQTTPreset(preset) != nullptr) {
|
|
resolved = preset;
|
|
} else {
|
|
MESH_DEBUG_PRINTLN("MQTT: invalid default preset '%s', using none", preset);
|
|
}
|
|
}
|
|
strncpy(dest, resolved, dest_size - 1);
|
|
dest[dest_size - 1] = '\0';
|
|
}
|
|
|
|
static inline void applyMQTTDefaults(MQTTPrefs* prefs) {
|
|
memset(prefs, 0, sizeof(MQTTPrefs));
|
|
prefs->mqtt_status_enabled = 1;
|
|
prefs->mqtt_packets_enabled = 1;
|
|
prefs->mqtt_raw_enabled = 0;
|
|
prefs->mqtt_tx_enabled = 2;
|
|
prefs->mqtt_rx_enabled = 1;
|
|
prefs->mqtt_status_interval = 300000;
|
|
prefs->wifi_power_save = mesh::wifi::kDefaultPowerSave;
|
|
|
|
mqttDefaultSlotPreset(prefs->mqtt_slot_preset[0], sizeof(prefs->mqtt_slot_preset[0]),
|
|
MQTT_DEFAULT_SLOT1_PRESET);
|
|
mqttDefaultSlotPreset(prefs->mqtt_slot_preset[1], sizeof(prefs->mqtt_slot_preset[1]),
|
|
MQTT_DEFAULT_SLOT2_PRESET);
|
|
mqttDefaultSlotPreset(prefs->mqtt_slot_preset[2], sizeof(prefs->mqtt_slot_preset[2]),
|
|
MQTT_DEFAULT_SLOT3_PRESET);
|
|
mqttDefaultSlotPreset(prefs->mqtt_slot_preset[3], sizeof(prefs->mqtt_slot_preset[3]),
|
|
MQTT_DEFAULT_SLOT4_PRESET);
|
|
mqttDefaultSlotPreset(prefs->mqtt_slot_preset[4], sizeof(prefs->mqtt_slot_preset[4]),
|
|
MQTT_DEFAULT_SLOT5_PRESET);
|
|
mqttDefaultSlotPreset(prefs->mqtt_slot_preset[5], sizeof(prefs->mqtt_slot_preset[5]),
|
|
MQTT_DEFAULT_SLOT6_PRESET);
|
|
for (int i = 0; i < MQTT_PREFS_SLOT_COUNT; ++i) {
|
|
prefs->mqtt_slot_packet_filter[i] = MQTTPacketFilter::kAllPacketTypes;
|
|
}
|
|
|
|
if (MQTT_DEFAULT_IATA[0] != '\0') {
|
|
strncpy(prefs->mqtt_iata, MQTT_DEFAULT_IATA, sizeof(prefs->mqtt_iata) - 1);
|
|
prefs->mqtt_iata[sizeof(prefs->mqtt_iata) - 1] = '\0';
|
|
}
|
|
|
|
if (MQTT_DEFAULT_TIMEZONE[0] != '\0') {
|
|
strncpy(prefs->timezone_string, MQTT_DEFAULT_TIMEZONE, sizeof(prefs->timezone_string) - 1);
|
|
prefs->timezone_string[sizeof(prefs->timezone_string) - 1] = '\0';
|
|
}
|
|
prefs->timezone_offset = MQTT_DEFAULT_TIMEZONE_OFFSET;
|
|
|
|
// Observer non-MQTT defaults (moved out of NodePrefs/MyMesh ctor in Phase 2).
|
|
strncpy(prefs->snmp_community, "public", sizeof(prefs->snmp_community) - 1);
|
|
prefs->radio_watchdog_minutes = 5;
|
|
prefs->alert_wifi_minutes = 30;
|
|
prefs->alert_mqtt_minutes = 240;
|
|
prefs->alert_min_interval_min = 60;
|
|
|
|
// Neighbors publishing defaults off; a defaulted tail is a valid 24h interval
|
|
// (not 0) so an in-lineage upgrade from a pre-neighbors payload is sane.
|
|
prefs->mqtt_neighbors_enabled = 0;
|
|
prefs->mqtt_neighbors_interval = MQTT_NEIGHBORS_DEFAULT_INTERVAL_MS;
|
|
|
|
// Runtime observer display defaults. These remain implicit in compact
|
|
// pre-display payloads and are serialized only after either value changes.
|
|
prefs->display_timeout_secs = DISPLAY_TIMEOUT_DEFAULT_SECS;
|
|
prefs->display_flip = 0;
|
|
}
|
|
|
|
#endif // WITH_MQTT_BRIDGE
|