- What It Does
- First-Time Setup
- Connecting to the Interface
- Dashboard
- Device Controls
- Settings — WiFi & Device
- Settings — Push Notifications (ntfy)
- Settings — Alert Conditions
- Settings — Cabinet Fan
- Data Logs
- Hardware Test Page
- Factory Reset
- Troubleshooting
The Al Wall Controller monitors and automatically controls the environment inside a growing cabinet or room. It measures temperature, humidity, and CO₂, and uses that data to drive four devices:
| Device | What it controls |
|---|---|
| Heater | Keeps temperature at your target |
| Humidifier | Keeps humidity at your target |
| Fan | Removes CO₂ / provides timed ventilation |
| Light | Runs a daily on/off schedule with optional sunrise/sunset dimming |
It logs all readings to an SD card, and can send instant alerts to your phone via the free ntfy app.
On first power-up (or after a factory reset), the controller creates its own Wi-Fi access point:
| Setting | Value |
|---|---|
| Network name (SSID) | thlcontroller |
| Password | setup1234 |
Connect your phone or laptop to that network.
Open a browser and go to http://192.168.4.1, then click Settings / Logs (the gear / log icon at the top of the page).
Scroll down to the WiFi & Device card and fill in:
- Primary SSID — the name of your home/facility Wi-Fi network
- Primary Password — the password for that network
- Fallback SSID / Password (optional) — a second network to try if the first is unavailable (e.g. a mobile hotspot)
Click Save WiFi & Device. The controller will reboot and connect to your network.
Once connected to your normal Wi-Fi, the controller is accessible at:
- http://<hostname>.local — e.g.
http://t-h-l-controller.local(works on most phones and laptops) - Or by its IP address, which you can find in your router's device list
Tip: Set a custom hostname in WiFi & Device settings so it is easy to remember, e.g.
growroom-1→http://growroom-1.local
Open a browser and navigate to the controller's address. The interface has two main pages:
| Page | How to get there |
|---|---|
| Dashboard (live view) | Click the home icon / device name at the top |
| Settings & Logs | Click the log/gear icon at the top |
The interface updates the live readings automatically — no need to refresh.
The dashboard shows the current state of the environment and all devices.
| Indicator | Meaning |
|---|---|
| HH:MM (time) | Current device time (check timezone in Settings if wrong) |
| SD: OK (green) | SD card is mounted and logging |
| SD: ! (orange) | SD card problem — hover/tap for details |
| Door open (yellow) | Door switch is reporting the door as open |
| Sensors OK (green) | All sensors are reading successfully |
| ⚠ Fault (red) | One or more sensors have stopped responding |
Displays the current Temperature (°C), Humidity (%), CO₂ (ppm), and Water Level. The water level card turns orange when the level is low.
Four cards show the state of each controlled device:
- ON / OFF — whether the relay is currently switched
- M prefix (orange) — the device is in manual override mode (see Hardware Test Page)
- Tap/click any card to open its settings
If a TEST MODE ACTIVE banner appears at the top, all automatic scheduling is suspended and relays are under manual control — remember to exit test mode when finished.
Tap any device card on the dashboard to open its settings modal. Changes take effect immediately and are saved to the device's memory.
| Setting | Description |
|---|---|
| Temperature target | The temperature the heater aims to maintain (°C) |
| Hysteresis | Dead-band on either side of the target. The heater turns ON when temperature drops to target − hysteresis and turns OFF when it rises to target + hysteresis. A value of 1.0°C means the heater cycles between 23 °C and 25 °C when the target is 24 °C. |
Safety: If temperature exceeds the configured maximum (default 32 °C), the heater is locked off regardless of the setpoint.
| Setting | Description |
|---|---|
| Humidity target | The relative humidity (%) the humidifier maintains |
| Hysteresis | Dead-band around the target — works the same as the heater |
Interlocks — the humidifier is automatically disabled when:
- Water level is low — the water reservoir sensor has detected the tank is empty
- Fan is running — to prevent humidity spiking during an extraction cycle
The fan has two independent methods of control — both can be active at the same time.
| Setting | Description |
|---|---|
| CO₂ threshold | Fan turns ON when CO₂ reaches this level (ppm) |
| CO₂ hysteresis | Fan turns OFF when CO₂ drops this many ppm below the threshold |
Example: threshold 1200 ppm, hysteresis 100 ppm → fan ON at 1200, OFF at 1100.
Useful for minimum fresh-air ventilation regardless of CO₂ level.
| Setting | Description |
|---|---|
| Schedule enabled | Tick to activate timed ventilation |
| Fan ON duration | How long (minutes) the fan runs each cycle |
| Cycle period | Total time (minutes) between the start of each run |
Example: ON duration 5 min, period 30 min → fan runs for 5 minutes every half-hour.
| Setting | Description |
|---|---|
| ON time | Time of day the light turns on (HH:MM, 24-hour) |
| OFF time | Time of day the light turns off (HH:MM, 24-hour) |
| Sunrise ramp | How long (minutes) the light takes to fade up to full brightness at turn-on. Set to 0 for instant-on. |
| Sunset ramp | How long (minutes) the light takes to fade down before turning off. Set to 0 for instant-off. |
| Colour temperature | Full — all LED rows active; Neutral — rows 1, 3, 5; Warm — rows 2, 4 |
The light will not run outside the ON–OFF window regardless of other settings.
Accessible from the Settings/Logs page.
| Field | Description |
|---|---|
| Device Name | Display name shown at the top of the dashboard |
| Hostname | Network hostname. Set this to something memorable — the device will then be reachable as http://<hostname>.local on your network |
| Primary SSID / Password | Your main Wi-Fi network |
| Fallback SSID / Password | Optional second network tried if the primary is unavailable |
| Timezone | Select your region so timestamps in logs and alerts are correct |
Saving these settings reboots the device. Wait ~15 seconds, then reconnect.
Wi-Fi reconnection behaviour:
- Device tries the primary network
- If unavailable after several attempts, tries the fallback network
- If both fail, returns to the built-in access point (
thlcontroller/setup1234, IP192.168.4.1) so you can reconfigure without a factory reset
The controller can send instant alerts to your phone using the free ntfy service — no account or sign-up required.
-
Install the ntfy app on your phone:
- Android: Google Play
- iOS: App Store
-
Choose a topic name — this is like a private channel name. Pick something unique that only you know, such as
growroom-doran-4821. It is case-sensitive. -
Subscribe to the topic in the ntfy app (tap the + button and enter your topic name).
-
Enter the same topic name in the controller's Push Notifications card and click Save.
-
Tap Send Test Notification to confirm it is working — you should receive a message on your phone within a few seconds.
Privacy note: ntfy topics are not password-protected by default. Anyone who knows your topic name can send to it. Use a long, random-looking name to keep it private, or self-host the ntfy server.
Configure when the controller sends push notifications. All settings are saved to the device's non-volatile memory and survive reboots.
Alerts are only sent if a topic has been configured in Push Notifications.
Sends an alert when temperature goes outside the low/high band.
| Field | Description |
|---|---|
| Enabled | Turn this alert type on or off |
| Low threshold | Alert fires if temperature drops below this value (°C) |
| High threshold | Alert fires if temperature rises above this value (°C) |
| Repeat (min) | How often to re-send the alert while the condition persists |
Same structure as temperature, but for relative humidity (%).
Same structure as temperature, but for CO₂ (ppm). Step size is 50 ppm.
Sends an alert when the water reservoir is empty.
| Field | Description |
|---|---|
| Enabled | Turn this alert type on or off |
| Repeat (min) | How often to re-send the alert while the level remains low |
Sends an alert if the door is left open for too long.
| Field | Description |
|---|---|
| Enabled | Turn this alert on or off |
| Alert after (s) | Seconds the door must be open before the first alert fires |
| Repeat (s) | How often to re-send while the door remains open |
Sends an alert when the SD card cannot be mounted or becomes unreadable.
| Field | Description |
|---|---|
| Enabled | Turn this alert on or off |
| Repeat (min) | How often to re-send while the card remains inaccessible |
Sends an alert when the device loses its network connection.
This alert can only be delivered once the device reconnects to the network. It is useful for detecting brief dropouts or for knowing when the device has recovered.
| Field | Description |
|---|---|
| Enabled | Turn this alert on or off |
| Repeat (min) | How often to re-send while disconnected |
Sends an alert when a device has been running for a sustained period but the environment has not improved — indicating a possible equipment fault.
Fires if the heater relay has been ON but temperature is still below the setpoint after the configured time. The timer pauses during any fan cycle (when humidity and heating are interlocked) and only resets when the temperature actually reaches the setpoint.
| Field | Description |
|---|---|
| Enabled | Turn this alert on or off |
| Alert after (min) | Minutes the heater must be running below setpoint before alerting |
| Repeat (min) | How often to re-send while the fault persists |
Fires if the humidifier relay has been ON but humidity is still below the setpoint after the configured time. The timer holds during fan cycles (when the humidifier is interlocked off) and only resets when humidity reaches the setpoint.
| Field | Description |
|---|---|
| Enabled | Turn this alert on or off |
| Alert after (min) | Minutes the humidifier must be running below setpoint before alerting |
| Repeat (min) | How often to re-send while the fault persists |
Fires if CO₂ has remained above the threshold for longer than the configured time — suggesting the extraction fan may have failed.
| Field | Description |
|---|---|
| Enabled | Turn this alert on or off |
| Alert after (min) | Minutes CO₂ must stay above threshold before alerting |
| Repeat (min) | How often to re-send while CO₂ remains elevated |
Sends a single notification when the controller starts up (including after a power cut).
| Field | Description |
|---|---|
| Enabled | Send a notification on every boot/restart |
The controller has a small internal fan to cool its own electronics. This is separate from the main extraction fan.
| Field | Description |
|---|---|
| Fan ON above (°C) | Cabinet internal temperature at which the fan turns on |
| Hysteresis (°C) | The fan turns off when the temperature falls this many degrees below the threshold |
The current panel temperature is shown on this page in real time. Default: ON above 40 °C, OFF below 35 °C.
The Logs page shows:
Displays the last ~1 hour of sensor and relay data (one row every 10 seconds) stored in device memory. Columns:
| Column | Description |
|---|---|
| Time | Timestamp (ISO format once synced to NTP, or BOOT+Xs before sync) |
| °C | Temperature |
| %RH | Relative humidity |
| CO₂ | CO₂ in ppm |
| Heat / Hum / Fan / Light | ● = relay ON, ○ = relay OFF |
| Panel°C | Cabinet internal temperature |
Click Refresh to load the latest data.
Lists all CSV files stored on the SD card, one per day, in the format YYYY-MM-DD.csv. Click any file link to download it. Files can be opened in Excel or any spreadsheet application.
If the device had not yet synced to NTP when it started logging, data from around startup will be in a file called
boot_log.csv.
Remount SD — if you removed the SD card briefly and reinserted it, use this button to make the controller re-read it without a full reboot.
Navigate to http://<device-address>/test (not linked from the main UI — intended for commissioning and fault-finding only).
On this page you can:
- Enable Test Mode — suspends all automatic control
- Force any relay ON or OFF individually
- Adjust light brightness with a slider and preset buttons
- Change light colour temperature (Full / Neutral / Warm)
- View the cabinet temperature in real time
⚠ Always disable Test Mode when you have finished testing. While Test Mode is active, the heater, fan, and humidifier will not respond to sensor readings.
Found at the bottom of the Settings/Logs page (red border card).
A factory reset erases all stored settings, including:
- Wi-Fi credentials
- All setpoints and schedules
- ntfy topic name
- All alert configuration
After the reset, the device reboots into access-point mode. Reconnect to thlcontroller (password setup1234) and visit http://192.168.4.1 to reconfigure.
Only use factory reset as a last resort. If you have only lost Wi-Fi access, the device will automatically fall back to its own access point — try that first.
- Check that your device is on the same Wi-Fi network as the controller
- Try
http://t-h-l-controller.local(or whatever hostname you set) - If mDNS doesn't work (common on some Android/Windows setups), find the IP address from your router
- If the device has lost Wi-Fi, connect to the
thlcontrollernetwork (passwordsetup1234) and visit192.168.4.1
Open Settings → WiFi & Device and set the correct Timezone. The time is synced from the internet (NTP) automatically once connected to Wi-Fi — it does not use a battery-backed clock.
The device had not yet synced its clock when those entries were recorded. This is normal at startup; once NTP sync completes the timestamps switch to normal date/time format automatically.
- Check the SD: ! indicator on the dashboard for error details
- Ensure the card is fully seated
- Use the Remount SD button on the Logs page before reaching for the card
- The controller keeps the last ~1 hour of readings in memory regardless, so short card absences do not cause data loss
- FAT32 format is required (most cards ship this way; maximum tested size is 32 GB)
- Confirm the topic name in Push Notifications settings matches exactly what you subscribed to in the ntfy app (case-sensitive)
- Use Send Test Notification — if it returns an error code, check the device's Wi-Fi connection
- Ensure the ntfy app has notification permission on your phone
Check the Equipment Failure alerts are enabled in Alert Conditions — the controller will notify you if a device appears to be running without effect. Also verify the water level card — the humidifier is locked off when the tank is empty.
This is by design. The fan interlock prevents the humidifier from running while extraction is active, to avoid false over-humidity readings and condensation. The humidifier resumes automatically when the fan stops.