     ss1.put(NominalRadValve.cumulativeMovementSubSensor);
     // Show state of setback lockout.
     ss1.put(V0p2_SENSOR_TAG_F("gE"), OTRadValve::getSetbackLockout(), true);
+
+    // Show reset counter. Low priority.
+    ss1.put(V0p2_SENSOR_TAG_F("R"), resetCount, true);
+    // Send minimum stack left, saturating at 255 bytes.
+    const size_t curMinSP = OTV0P2BASE::MemoryChecks::getMinSP();
+    const uint8_t txMinSP = (255U >= curMinSP) ? (uint8_t) curMinSP : 255U;
+    ss1.put(V0p2_SENSOR_TAG_F("SP"), txMinSP, true);
+
+
     const uint8_t privacyLevel = OTV0P2BASE::stTXalwaysAll;
     // Redirect JSON output appropriately.
     // Part of sW, directly after the message buffer.

inline void stackCheck()
{
    const int16_t minsp = OTV0P2BASE::MemoryChecks::getMinSPSpaceBelowStackToEnd();
#if 1 // && defined(DEBUG)
    const uint8_t location = OTV0P2BASE::MemoryChecks::getLocation();
    const uint16_t progCounter = OTV0P2BASE::MemoryChecks::getPC();  // not isr safe
    OTV0P2BASE::serialPrintAndFlush(F("minsp: "));

    V0p2Base_serialPrintlnBuildVersion();
    // Count resets to detect unexpected crashes/restarts.
    const uint8_t oldResetCount = eeprom_read_byte((uint8_t *)V0P2BASE_EE_START_RESET_COUNT);
    resetCount = oldResetCount + 1;
    eeprom_write_byte((uint8_t *)V0P2BASE_EE_START_RESET_COUNT, 1 + oldResetCount);
#if 0  // Print reset count. Intended for testing purposes.
    OTV0P2BASE::serialPrintAndFlush(F("\rResets: "));
    OTV0P2BASE::serialPrintAndFlush(oldResetCount);
    OTV0P2BASE::serialPrintlnAndFlush();
#endif

    // Have 32678Hz clock at least running before going any further.
    // Check that the slow clock is running reasonably OK, and tune the fast one to it.
