   setbackLockout>
   cttBasic;
 
-#define ENABLE_MODELLED_RAD_VALVE
-#define ENABLE_NOMINAL_RAD_VALVE
 // Internal model of controlled radiator valve position.
 OTRadValve::ModelledRadValve NominalRadValve(
   &cttBasic,

    // Attempt to maximise chance of reception with a double TX.
    // Assume not in hub mode (yet).
    // Send all possible formats, binary first (assumed complete in one message).
//    bareStatsTX();  // XXX
    // Send JSON stats repeatedly (typically once or twice)
    // until all values pushed out (no 'changed' values unsent)
    // or limit reached.
//    for(uint8_t i = 5; --i > 0; ) {
//        ::OTV0P2BASE::nap(WDTO_120MS, false); // Sleep long enough for receiver to have a chance to process previous TX.
//        bareStatsTX();  // XXX
//        if(!ss1.changedValue()) { break; }
//    }
    // Start local counters in randomised positions to help avoid inter-unit collisions,
    // eg for mains-powered units starting up together after a power cut,
    // but without (eg) breaking any of the logic about what order things will be run first time through.

// If sending encrypted then ID/counter fields (eg @ and + for JSON) are omitted
// as assumed supplied by security layer to remote recipent.
void bareStatsTX() {

    OTV0P2BASE::MemoryChecks::resetMinSP();
//    // Capture heavy stack usage from local allocations here.
//    OTV0P2BASE::MemoryChecks::recordIfMinSP();
    const bool neededWaking = OTV0P2BASE::powerUpSerialIfDisabled<>();
    static_assert(OTV0P2BASE::FullStatsMessageCore_MAX_BYTES_ON_WIRE <= STATS_MSG_MAX_LEN, "FullStatsMessageCore_MAX_BYTES_ON_WIRE too big");
    static_assert(OTV0P2BASE::MSG_JSON_MAX_LENGTH+1 <= STATS_MSG_MAX_LEN, "MSG_JSON_MAX_LENGTH too big"); // Allow 1 for trailing CRC.
