Settings (data.clu)
data.clu is a plain text file on the SD card holding the enclosure’s tuning values. It is
how you change the things the touchscreen does not expose.
How to change a setting
Edit the value
Open data.clu in any text editor and change the number.
Raise configRevision
It is the line at the top. Any higher number works, whether that is 1 to 2 or 2 to 50. Never reuse a number you have already used.
Power cycle
Values are read once at boot. The screen briefly shows that the file was applied.
Forgetting to raise configRevision is the number one reason a change does nothing. The
enclosure remembers the last revision it applied and skips the file otherwise, which is
what lets you leave the card in permanently without it overwriting your touchscreen
settings on every boot.
To undo a change, put the old value back and raise the revision again. Lowering the revision does not undo anything, it just makes the file inert.
Rules
- The format is
name = value, one per line. Spaces around the=are fine. #starts a comment.- Anything you leave out keeps its current value. You can delete everything except
configRevisionand the one line you care about. - Unknown names are ignored and bad lines are skipped, so a typo costs you that one line rather than the whole file.
- A file with no
configRevisionline is ignored completely. - Every value is clamped to its range. You cannot disable thermal protection or drive the servos into a hard stop with a bad number.
Clamping means an out of range value is pulled to the nearest end of the range rather than
rejected. If you set maxTemp = 200 you get 80, not an error. Worth knowing if a setting
looks like it did not take.
What the settings do
Flap servos
Two MG996R servos, wired in parallel from one signal, move the duct flap between open (exhaust) and closed (recirculate).
| Setting | Default | Range | What it does |
|---|---|---|---|
servoOpenAngle | 5 | 1 to 90 | Angle for OPEN. Also used when overheating forces the flap open. |
servoCloseAngle | 44 | 1 to 90 | Angle for CLOSED. |
servoHoldMs | 350 | 100 to 3000 | How long the servos are driven before powering down. |
servoTempHyst | 3 | 1 to 10 | Overheat hysteresis, in °C. |
These are the ones people actually change. If your flap does not quite close, or strains against its stop, nudge the angles a degree or two at a time.
After moving, the servos are powered down rather than held. That is why they go quiet a
moment after a move and why they do not buzz. If your flap is heavy enough to sag, raise
servoHoldMs, though the fix is usually mechanical rather than electrical.
Safety
| Setting | Default | Range | What it does |
|---|---|---|---|
maxTemp | 55 | 35 to 80 | Above this the flap forces open and every fan runs at 100%. |
opticalAlarmEnable | 0 | 0 to 1 | Whether the optional optical smoke sensor counts. |
smokeFireResponse | 1 | 0 to 1 | Fans off and flap shut when smoke is detected. |
lpgThreshold | 2000 | 100 to 4095 | MQ-2 gas trigger level. |
smokeThreshold | 750 | 100 to 4095 | MEMS smoke trigger level. |
smokeBeginTime | 600000 | 0 to 900000 | Milliseconds of sensor warm-up before the alarm arms (10 min). |
countdownTime | 5 | 1 to 60 | Seconds of countdown during load cell calibration. |
maxTemp needs the BME680 fitted. Recovery is at maxTemp minus servoTempHyst, so at the
defaults it vents at 55 °C and stops at 52 °C.
opticalAlarmEnable is 0 for a reason. No optical sensor ships with the enclosure, since
it is an optional part you fit yourself. The input is pulled high and reads HIGH as
“smoke”, so a board with nothing connected would alarm permanently. Only set it to 1
once you have fitted a working sensor and confirmed it reads clear when idle.
The gas thresholds are raw ADC counts from 0 to 4095, not ppm. If you get false alarms, raise the value. The reliable way to pick one is to watch the reading on the screen during normal printing and leave headroom above it.
Automatic cooling
| Setting | Default | Range |
|---|---|---|
autoCoolTempMin | 20 | 0 to 60 °C, fan off |
autoCoolTempMax | 40 | 0 to 60 °C, fan 100% |
Between the two, the cooling fan ramps linearly.
Automatic filtering
The filter fan ramps from 20% to 100%, following whichever of two inputs reports worse air: PM2.5 and PM0.3. PM10 is measured and logged but is not part of this calculation.
| Setting | Default | Range | Input |
|---|---|---|---|
autoFilterImpMin | 5 | 0 to 1000 | PM2.5 ramp start |
autoFilterImpMax | 100 | 0 to 1000 | PM2.5 ramp end |
autoFilterP03Min | 100 | 0 to 10000 | PM0.3 ramp start |
autoFilterP03Max | 2000 | 0 to 10000 | PM0.3 ramp end |
Below both Min values the fan is off rather than at 20%, so it steps from 0% straight to 20% as soon as either input crosses its threshold.
If auto mode is too twitchy for you, raise the Min values. If it never reaches full speed, lower the Max values.
Extra fan
| Setting | Default | Range |
|---|---|---|
extraFanSpeed | 75 | 0 to 100 % |
The extra fan is on and off from the screen. This sets how hard it runs when on.
Intervals and display
| Setting | Default | Range | What it does |
|---|---|---|---|
bmeSampleInterval | 5000 | 1000 to 60000 | Milliseconds between temperature reads |
usageLogInterval | 900000 | 60000 to 3600000 | Milliseconds between usage counter saves |
sensorUsageWarnHours | 600 | 0 to 20000 | Filter fan runtime hours before the replace icon |
minBrightness | 15 | 5 to 100 | Lowest screen brightness the slider can reach |
sensorUsageWarnHours is the filter usage counter threshold.
600 hours is about 25 days of continuous filtering. Set it to 0 to turn the warning off.
minBrightness is a floor rather than an offset. The slider still reads 0 to 100, but
anything below this value is treated as this value, so the screen never goes fully dark.
usageLogInterval trades precision against memory wear. Saving every 15 minutes means a
power cut can lose up to 15 minutes of counted runtime. Do not set this very low, because
the enclosure’s memory has a finite number of writes and 15 minutes gives it a lifetime
measured in decades.
Load cell factory seeds
| Setting | Default | Range |
|---|---|---|
defaultLeftCal | 740 | 1 to 100000 |
defaultRightCal | 740 | 1 to 100000 |
defaultLeftOffset | 8483528 | |
defaultRightOffset | 8483528 | |
tareWeight | 1000 | 0 to 100000 g |
These only matter on an enclosure that has never completed calibration. Once yours is calibrated it keeps its own measured values forever, and changing these will not disturb it. Use Calibration instead.
tareWeight is the filament weight the enclosure assumes on a full spool.
What data.clu does not control
Your touchscreen settings live inside the enclosure and are never touched by this file. That covers brightness, fan speeds, filtration mode, selected filament and load cell calibration. This file only holds the tuning values above.
The full file
Copy this into a text file called data.clu on the root of your SD card, or
download it.
# =======================================================================
# CLURA ENCLOSURE - settings
# Copy this file to the root of your SD card.
# =======================================================================
#
# HOW IT WORKS
# ------------
# Your enclosure only reads this file when configRevision is HIGHER than
# the last one it applied. You can leave the card in permanently, and it
# does nothing on every boot except the one right after you raise it.
#
# To change something:
# 1. edit the value
# 2. RAISE configRevision (never reuse a number)
# 3. power cycle the enclosure
#
# To undo a change: restore the old value AND raise configRevision again.
#
# NOTES
# -----
# * Anything you leave out keeps its current value.
# * Unknown keys are ignored, and bad lines are skipped.
# * A file with no configRevision line is ignored completely.
# * Every value is clamped to the range in its comment, so a typo cannot
# disable thermal protection or drive the servos into a hard stop.
# * This file does NOT hold your touchscreen settings (brightness, fan
# speeds, filament choice, calibration). Those live inside the
# enclosure and are never touched by this file.
#
# =======================================================================
configRevision = 1
# -- Flap servos --------------------------------------------------------
servoOpenAngle = 5 # 1..90 deg, flap OPEN (also used on overheat)
servoCloseAngle = 44 # 1..90 deg, flap CLOSED
servoHoldMs = 350 # 100..3000 ms driven before the servos power down
servoTempHyst = 3 # 1..10 deg C overheat hysteresis
# -- Safety -------------------------------------------------------------
# Above maxTemp the flap is forced OPEN and every fan runs at 100%, until
# the temperature drops below (maxTemp - servoTempHyst).
# Needs the BME680 enabled.
maxTemp = 55 # 35..80 deg C, automatic flap-open
# Optical smoke sensor -> alarm. 0 = ignored.
# No optical sensor is supplied with the enclosure. It is an optional part
# you fit yourself. The input is pulled high and reads HIGH as "smoke", so
# a board with nothing connected would alarm permanently. Set this to 1
# only once a working sensor is installed.
opticalAlarmEnable = 0 # 0..1 0 = ignore the optical sensor
# Fire response. While smoke or gas is detected:
# * ALL fans stop, so no oxygen is fed to a fire and no smoke is pushed
# out through the filter
# * the flap CLOSES, and this outranks the overheat vent above
# So: hot with no smoke -> flap opens to vent the heat.
# hot WITH smoke -> flap closes and every fan stops.
smokeFireResponse = 1 # 0..1 1 = fans off + flap shut on smoke
lpgThreshold = 2000 # 100..4095 MQ-2 gas trigger level
smokeThreshold = 750 # 100..4095 MEMS smoke trigger level
smokeBeginTime = 600000 # 0..900000 ms warm-up before the alarm arms
countdownTime = 5 # 1..60 s calibration countdown
# -- Automatic cooling --------------------------------------------------
autoCoolTempMin = 20 # 0..60 deg C -> fan off
autoCoolTempMax = 40 # 0..60 deg C -> fan 100%
# -- Automatic filtering ------------------------------------------------
# The filter fan ramps from 20% to 100% between the Min and Max of
# whichever input reports worse air. Below BOTH Min values it is off.
autoFilterImpMin = 5 # 0..1000 PM2.5 ramp start
autoFilterImpMax = 100 # 0..1000 PM2.5 ramp end
autoFilterP03Min = 100 # 0..10000 PM0.3 ramp start
autoFilterP03Max = 2000 # 0..10000 PM0.3 ramp end
# -- Extra fan ----------------------------------------------------------
# The extra ("regulated") fan is on and off from the screen. This sets how
# hard it runs when switched on.
extraFanSpeed = 75 # 0..100 %
# -- Intervals and display ----------------------------------------------
bmeSampleInterval = 5000 # 1000..60000 ms between temperature reads
usageLogInterval = 900000 # 60000..3600000 ms between usage counter saves
# Filter and sensor replacement warning, in HOURS of filter fan runtime.
# This is the same number the Settings page shows. 600 h is about 25 days
# of continuous running.
sensorUsageWarnHours = 600 # 0..20000 runtime hours -> replace icon
minBrightness = 15 # 5..100 lowest screen brightness
# -- Load cell factory seeds --------------------------------------------
# Only used by an enclosure that has NEVER completed calibration. Once
# yours is calibrated it keeps its own measured values forever, and
# changing these will not disturb it.
defaultLeftCal = 740 # 1..100000
defaultRightCal = 740 # 1..100000
defaultLeftOffset = 8483528
defaultRightOffset = 8483528
tareWeight = 1000 # 0..100000 g, assumed filament weight on a full spoolA minimal file
You do not need all of that. This is a complete, valid data.clu that changes exactly one
thing:
configRevision = 2
maxTemp = 45Everything else keeps whatever value it already has.