 static constexpr uint8_t STATS_MSG_START_OFFSET = (RFM22_PREAMBLE_BYTES + RFM22_SYNC_MIN_BYTES);
 static constexpr uint8_t STATS_MSG_MAX_LEN = (64 - STATS_MSG_START_OFFSET);
 // Managed JSON stats.
-static OTV0P2BASE::SimpleStatsRotation<12> ss1; // Configured for maximum different stats.
+// Number of JSON stats to TX:
+// Note: each stat statically allocates 6 bytes to RAM.
+// - Internal temp
+// - Boiler state
+// TODO: Consider removing entirely.
+constexpr uint8_t nTXStats = 2;
+static OTV0P2BASE::SimpleStatsRotation<nTXStats> ss1; // Configured for maximum different stats.
 // Do bare stats transmission.
 // Output should be filtered for items appropriate
 // to current channel security and sensitivity level.

#include <OTAESGCM.h>

#include "secondaryRadioConfig.h"  // IP address in separate header to avoid accidentally committing.

/////// RADIOS
// Pick an appropriate radio config for RFM23 (if it is the primary radio).

        // if the primary radio channel does not include a sequence number itself.
        // Assume that an encrypted channel will provide its own (visible) sequence counter.
        ss1.enableCount(false);
        // Show internal temperature of boiler hub.
        ss1.put(TemperatureC16);
        // Show boiler state for boiler hubs.
        ss1.put(V0p2_SENSOR_TAG_F("b"), (int) BoilerHub.isBoilerOn());
