SenseCAP D1 Hubitat Dashboard Web Flasher

SenseCAP D1 Hubitat Dashboard — Setup Guide

Turn a SenseCAP Indicator D1 into a wall-mounted touchscreen dashboard for your Hubitat devices — live status, room-based navigation, and touch control, no cloud required (everything talks directly over your local network).

Flash it from your browser: SenseCAP D1 Hubitat Dashboard — Flash from your browser

This was built with heavy AI assistance (Claude) — from the ESP-IDF/LVGL firmware itself through to debugging, the Hubitat companion app, and this web flasher. Sharing that openly since it's very much part of how this came together, and might be useful context if you're curious about the process or run into anything that needs a closer look.


What you'll need

  • A SenseCAP Indicator D1 (ESP32-S3 based)
  • A USB cable that supports data, not just charging
  • Google Chrome or Microsoft Edge on a desktop or laptop (Windows, macOS, Linux, or ChromeOS) — the web flasher uses the Web Serial API, which only these two browsers support. It won't work on a phone, tablet, Safari, or Firefox.
  • A Hubitat Elevation hub on the same local network
  • 10–15 minutes

Step 1 — Flash the firmware

  1. Open SenseCAP D1 Hubitat Dashboard — Flash from your browser in Chrome or Edge
  2. Connect the D1 to your computer via USB
  3. Close any other program that might be using the D1's serial port (Arduino IDE, PuTTY, another browser tab already connected to it, etc.)
  4. Click Connect device & install
  5. Your browser will list available serial/COM ports — select the one for the D1 and click Connect
  6. Click Install, then confirm. This writes the bootloader, partition table, and application (takes about 30–60 seconds)
  7. When it finishes, click Next/Close — the D1 will reboot on its own

Already have a working D1 with this firmware installed? Flashing a newer version this way does not touch your saved Wi-Fi credentials or Hubitat configuration — it'll just update and reconnect automatically, no re-setup needed. Everything below is only for a brand-new device.

If your computer doesn't already have a driver for the board's USB-to-serial chip (commonly a CP210x or CH34x/CH9102 family chip depending on the exact unit), install the matching driver first and reconnect the cable.


Step 2 — Connect the D1 to your Wi-Fi

A brand-new (or freshly erased) D1 has no saved Wi-Fi credentials, so it starts its own temporary setup network:

  1. On your phone or computer, open your Wi-Fi network list and connect to SenseCAP-D1-Setup (it's open, no password — you may see a "no internet" warning, that's expected)
  2. Open a browser and go to http://192.168.4.1:8080/
  3. You'll see a SenseCAP D1 Setup page — enter your home Wi-Fi network name and password
  4. (The Weather fields on that page are optional — leave them blank; weather is handled from Hubitat instead)
  5. Click Save and reboot

The D1 will reboot and join your home Wi-Fi. Give it about 10 seconds.


Step 3 — Find the D1's IP address

Check your router's connected-devices / DHCP client list for a device named SenseCap-D1 (or similar) and note its IP address. You'll need this in the next step.

Tip: if your router supports it, set a DHCP reservation for this device so its IP address never changes. Without one, your router may hand it a different address later, which will silently break the dashboard until you update the IP in Hubitat again.


Step 4 — Install the Hubitat app

  1. On your Hubitat hub, go to Apps Code
  2. Click New App
  3. Paste in the full SenseCap D1 Config app source — get it from:
    https://raw.githubusercontent.com/ienam-smarthome/sensecap-d1-flash/main/SenseCapD1ConfigApp.groovy
    (open that link, select all, copy, paste into the Apps Code editor)
  4. Click Save
  5. Enable OAuth — this step is required, not optional. Without it, the D1 can display live status but can't send taps back to Hubitat, so every button will silently do nothing. Near the top of the editor, click the gear/settings icon → OAuthEnable OAuth in AppsUpdate
  6. Go to AppsAdd User App
  7. Select SenseCap D1 Config

Step 5 — Configure the app

In the app's settings page:

  1. D1 local IP address — enter the IP address you found in Step 3
  2. D1 dashboard devices — select the devices you want shown on the D1's screen
  3. Timezone — for most common timezones this is auto-detected from your hub's own Time Zone setting (Hub Details page), so it should already show the correct value. If it's blank, the app will tell you what to look up and where.
  4. Optionally configure motion-based display control, screensaver brightness schedule, and the periodic full-sync interval (default 15 minutes — this is a safety-net resync in case a live update ever gets missed; lower catches drift faster, higher means fewer pushes to the device)
  5. Click Done/Save

This immediately pushes your device list to the D1 and subscribes to live updates. The D1's screen should populate with your rooms and devices within a few seconds.


Verifying it's working

  • The D1 should show a Rooms screen with tiles for each room your devices belong to
  • Tap a room to see its devices; tap a switch/light tile to toggle it — you should see it change on Hubitat within a second or two
  • Toggle a device from Hubitat itself (not the D1) and confirm the D1's display updates on its own — this confirms live push is working end to end

Updating to a newer version

If you already have a working D1, updating is quick and non-destructive:

  1. Re-flash from the same web installer: SenseCAP D1 Hubitat Dashboard — Flash from your browser — this only rewrites the bootloader, partition table, and application, never the storage area holding your Wi-Fi credentials and Hubitat config, so the D1 reconnects on its own with no re-setup
  2. In Hubitat, open Apps Code, find SenseCap D1 Config, replace its entire source with the latest version from https://raw.githubusercontent.com/ienam-smarthome/sensecap-d1-flash/main/SenseCapD1ConfigApp.groovy, and Save
  3. Open the app's settings and check the Timezone field — for most common timezones it's auto-detected from your hub's own Time Zone setting (Hub Details page). Hit Done either way, to make sure any new settings introduced in that release get pushed to the device

Check the thread for release notes on what changed before updating, in case a specific version needs an extra step (like setting a newly-added field) beyond the three above.


Troubleshooting

D1 screen stuck on "Wi-Fi: starting" or "Config app: waiting"
Double-check the IP address entered in the Hubitat app matches the D1's actual current IP (see Step 3) — this is the most common cause, especially if a DHCP reservation wasn't set.

Hubitat's logs show repeated "SenseCap D1 live push failed"
This means Hubitat can't currently reach the D1 at the configured IP — check the device is powered on, connected to Wi-Fi, and that the IP in the app settings is still correct. The app automatically backs off retries and recovers on its own once the device is reachable again; no action needed beyond fixing the IP if it's changed.

Device states on the dashboard don't match Hubitat
Press Send settings to D1 now in the Hubitat app to force a full resync. If this keeps happening, check that the device in question is actually selected under "D1 dashboard devices."

Taps on the D1 do nothing — lights/switches don't respond, even though the display shows correct live status
This means OAuth isn't enabled for the app (see Step 4) — the D1 can receive updates but has no way to send commands back. Go to Apps CodeSenseCap D1 Config → gear icon → OAuthEnable OAuth in AppsUpdate, then reopen the app's settings and click Done once. Hubitat's own Logs page will show no access token available warnings when this is the cause.

Can't reach 192.168.4.1:8080 during Wi-Fi setup
Make sure you're actually connected to the SenseCAP-D1-Setup network (not still on your home Wi-Fi) before trying that address.

Web installer says my browser isn't supported
You need Chrome or Edge on a desktop/laptop — Safari, Firefox, and mobile browsers don't support the Web Serial API this tool relies on.

Clock is wrong / an hour off
Check the Timezone field in the app settings — it auto-fills from your hub's Time Zone setting for most common zones, but if your specific zone wasn't recognized, the field stays blank and the D1 defaults to UK time until you set one manually (the app will tell you what to look up and point you to a reference).


Credits

This project drew inspiration from @Ultrasmart.pl's excellent Hub Monitor showcase — a dedicated, fully local SenseCAP D1 dashboard for Hubitat. Well worth a read if you haven't seen it. Thanks for sharing the idea with the community!


Questions or issues — reply in this thread.

Reserved

SenseCap D1 Config




Reserved




Nevermind, bobo on my part.
Will test your flasher and app, thx!!

App suggestion: be able to name the app instance.
When having multiple screens, it would be nice to be able to name the app, else you will not know what screen you are configuring.

Done.

Let me know if everything works for you.
I did do an initial test before release and wiped my D1, and successfully flashed again using the Web flasher.

Cool, thx. Will test.
Another thing I found: the clock on the screensaver is not showing the correct time / not following the hub's time. i think a daylight saving thing at play here.

Also when displaying dimmer switches, the state is correct and responsive, but touch on the screen seems to be ignored.
So if I push the button on the screen to turn the light off / on / dimm, nothing happens.
If i do the same on the hub to that same dimmer, the command is executes immediately.
The screen follows the set state of the dimmer instantly.

Thanks for the feedback.
I think I customised it too much for my specific case since end of May 2026 when I started developing this after scrapping the OpenHASP project.

Will correct some of the issues reported if I can.
Timezone is hardcoded for UK, lol.
Will fix asap.

Update to v1.1.0 available — fixes the touch-swallowing bug on light/dimmer tiles and the screensaver, and adds a configurable timezone.

To update:

  1. Re-flash from the same web installer: SenseCAP D1 Hubitat Dashboard — Flash from your browser — your Wi-Fi and Hubitat config are preserved, no re-setup needed
  2. In Hubitat, open Apps Code, find SenseCap D1 Config, replace its source with the latest from https://raw.githubusercontent.com/ienam-smarthome/sensecap-d1-flash/main/SenseCapD1ConfigApp.groovy, and Save
  3. If you're outside the UK, set the new Timezone field (in the D1 Device section) to your zone's POSIX TZ string, then click Send settings to D1 now

Edit: 3. Open the app's settings and check the new Timezone field — for most common timezones this is auto-detected from your hub's own Time Zone setting (Hub Details page), so it should already show the correct value. If it's blank, the app will tell you exactly what's missing and point you to a reference to look it up manually, then click Send settings to D1 now

I'll test it tonight when I get home from work.

Cool stuff!

Tested.
The timezone works, the light/dimmer not.

Can you please give me more details of the light/dimmer type you have and I will investigate further.

I only have the light types below:

Added US date format support:

Hue lights and Hue zones, same as you, but over the native hub integration, not Matter as in your case.

Just installed the system Hue Bridge Integration (C4AA42 - Hue Bridge Pro) and everything is still working fine for me.

I have made a few more changes, but need your help to diagnose further.

On the flasher page, click Connect device & install as usual, but instead of clicking Install, choose the Logs & Console option (it should show your device's live serial output, same as a debug console).

With that open, please:

  1. Tap on a light/dimmer tile — both the on/off toggle and try dragging the brightness slider
  2. Copy the text that appears in the console right after you tap (or a screenshot works too)
  3. Send that back here

This will show us exactly what the device is doing (or not doing) at the moment you touch it — much easier to diagnose than guessing.

Will do when done with work.
Do you want the results in a DM or here?

DM me please, thanks!

Fixed

  • Freezing / unresponsive touch — several related bugs where the display could hang on boot, or the power button and touch input would stop responding after certain actions (all traced to a threading issue in the display library)
  • Live updates not applying — device states pushed from Hubitat weren't always reaching the screen; now they do, reliably
  • Screensaver clock/summary not refreshing — background updates from Hubitat weren't reflected on the screensaver until you tapped to wake it; fixed
  • Light and dimmer tiles ignoring touch — an icon graphic on light-classified tiles was silently absorbing taps meant for the on/off toggle. The same issue was also found and fixed on the screensaver's clock digits and summary pills
  • Swipe navigation removed — swiping to change pages could conflict with dragging a dimmer's brightness slider mid-drag, causing the slider interaction to fail. Navigation is now handled entirely by the prev/next buttons, which were already there and work reliably
  • Occasional crash/reboot after heavy activity — a screensaver task had too small a memory allocation for tearing down a fully-populated dashboard; increased
  • Repeated "live push failed" warnings in Hubitat's logs — the app now correctly backs off and retries automatically instead of hammering an unreachable device on every single event
  • Fresh-install crash — installing the app for the very first time could throw a database error under specific conditions; fixed

New

  • Configurable timezone — the on-screen clock previously showed a fixed UK time regardless of where you actually are. Now it's configurable, and auto-detected from your hub's own Time Zone setting for most common regions (US, UK, most of Europe, Australia, and more) — usually nothing to set up at all
  • US date format option — toggle between DD/MM/YYYY and MM/DD/YYYY, also auto-detected from your hub's timezone
  • App instance naming — if you're running more than one D1, you can now name each app instance so they're distinguishable in your Apps list
  • Configurable sync interval — the periodic full-resync safety net (in case a live event is ever missed) is now adjustable, 5–59 minutes, default 15
  • Web-based flashing — install or update entirely from your browser (Chrome/Edge), no software required: flash it here

Updated post #1 - Enable OAuth step was missing:

Step 4 — Install the Hubitat app

  1. On your Hubitat hub, go to Apps Code
  2. Click New App
  3. Paste in the full SenseCap D1 Config app source — get it from: https://raw.githubusercontent.com/ienam-smarthome/sensecap-d1-flash/main/SenseCapD1ConfigApp.groovy (open that link, select all, copy, paste into the Apps Code editor)
  4. Click Save
  5. Enable OAuth — this step is required, not optional. Without it, the D1 can display live status but can't send taps back to Hubitat, so every button will silently do nothing. Near the top of the editor, click the gear/settings icon → OAuthEnable OAuth in AppsUpdate
  6. Go to AppsAdd User App
  7. Select SenseCap D1 Config