A Home Assistant dashboard card for managing schedules provided by the Wiser integration. Browse schedules or open the device Overview to manage assignments and daily time slots.
Originally created by Mark Parker (@msp1974).
Wiser Schedule Card is installed and updated automatically through the wiserHomeAssistantPlatform integration’s update mechanism. Use the main integration to manage card updates; no separate card installation, JavaScript download, or manual dashboard resource version change is needed for normal releases.
The integration detects the installed card’s version and manages its dashboard resource URL. After an update, refresh your browser or reopen the Home Assistant app if it still displays the previous version.
Add Wiser Schedule Card through the dashboard card picker and select the Wiser hub in the editor, or use YAML:
type: custom:wiser-schedule-card
hub: your_hub_nameManual bundle replacement is only needed when testing a development version, using the same method as Wiser Zigbee Card:
Development versions are detected automatically too. Do not manually edit the dashboard resource URL or its version query string.
- Run
npm run build:devto producedist/wiser-schedule-card.js. - Replace the integration’s
config/custom_components/wiser/frontend/wiser-schedule-card.jswith that bundle. - Reload the Wiser integration or restart Home Assistant so the integration detects the new bundle version and updates its existing dashboard resource.
- Refresh your browser or reopen the Home Assistant app.
Keep a single resource entry for the schedule card. An integration update may replace the development bundle with its included release version.
The Overview screen groups available controls into Heating, Hot water, Lighting, Shutters, On/Off, and Moments. Its toolbar switches between Schedules and Overview. Empty sections are hidden. Tiles show room or device names and their assigned schedules. Moments open the corresponding Home Assistant button controls; they are preset actions, not weekly schedule editors. Use Home Assistant automations for timed activation. Moment discovery is restricted to the selected Wiser hub and requires access to the entity/device registries. Select a room to see its toolbar, schedule-name assignment chooser, and full weekly timeline:
- Back arrow: return home.
- Pencil: edit the timeline directly on the room screen; save/cancel buttons appear while editing.
- Rename, copy, and delete: manage the current schedule.
- Plus: create a schedule.
- Check mark: assign the selected schedule to this room.
Selecting an option does not change the assignment until you press the check mark. Only compatible heating schedules appear in the room chooser. Rooms without an assignment remain visible. Shared schedules are labelled because editing their times affects every room using them. Read-only users can view schedules but cannot assign or create them.
The room view uses the integration’s existing room and schedule endpoints; no backend change is required.
The visual editor provides hub, schedule, layout, appearance, and permission settings. Existing configuration keys remain supported.
| Option | Default | Purpose |
|---|---|---|
name |
Wiser Schedule |
Card title. |
hub |
Integration default | Select a hub; use the editor for installations with multiple hubs. |
selected_schedule |
Unset | Open one schedule directly, formatted as Heating|1 (type and ID). |
view_type |
default |
Room tiles; list shows room rows. |
theme_colors |
false |
Use theme colours for schedule time slots. |
display_only |
false |
Hide editing actions. |
admin_only |
false |
Show editing actions only to administrators. |
hide_card_borders |
false |
Remove the outer card border for stacked layouts. |
Legacy show_badges and show_schedule_id settings are ignored; their schedule-list view has been removed.
Permission options control the card interface. The integration and Home Assistant remain responsible for authorising service calls.
Use Node.js 24 (see .nvmrc).
npm ci
npm run buildThe build checks TypeScript and writes dist/wiser-schedule-card.js. It does not reformat source files. Dependencies are pinned by the committed lockfile.
npm start # Watch source; serve the bundle at http://127.0.0.1:5000
npm run typecheck # TypeScript validation
npm run format # Format source and configuration
npm run format:check # Check formatting without changing files
npx playwright install chromium
npm test # Browser regression checks; run npm run build firstBrowser checks use mocked Home Assistant elements and Wiser WebSocket responses. They cover loading and error states, empty schedules, navigation, mobile layout, configuration changes, and subscription cleanup. Validate the built card in a real Home Assistant dashboard before release, including saving/copying schedules and device assignments.
The current release is 2.0.5. Build it with npm run build.
Its resource URL is /wiser/wiser-schedule-card.js?v=2.0.5. To create a numbered development build:
npm run build:devAfter release 2.0.5, the first successful development build is 2.0.6-beta.1-dev.1; the next is 2.0.6-beta.1-dev.2, and so on. After a beta such as 2.0.6-beta.1, development continues as 2.0.6-beta.2-dev.1.
Each build writes dist/wiser-schedule-card.js with that version embedded in the
card, plus dist/build-info.json containing the version and dashboard resource URL.
The command prints the URL for reference; the integration sets it automatically, including the development build number. No manual resource changes are needed. For example:
/wiser/wiser-schedule-card.js?v=2.0.6-beta.1-dev.1
Copy dist/wiser-schedule-card.js over the integration’s
config/custom_components/wiser/frontend/wiser-schedule-card.js, then reload the
Wiser integration or restart Home Assistant. The integration detects the embedded
build version and updates the existing dashboard resource URL automatically.
Refresh your browser or reopen the Home Assistant app to load the new build.
The Wiser integration provides the /wiser/ route. The build command only creates the local bundle; it does not
upload it to Home Assistant.
npm start also increments the dev number on each successful watch rebuild.
Successful builds update the version in package.json; failed builds do not consume
a number. npm run build removes the trailing -dev.N to prepare the current
stable or beta target. npm run build:release removes both the development and
beta suffixes to prepare the final stable release. Release and dev builds both
replace the bundle in dist.
- Responsive schedule tiles, theme-aware styling, keyboard focus indicators, and semantic list headers.
- Standard form controls in the configuration editor, replacing the legacy Material wrappers.
- Reactive integration readiness and explicit loading/error states, with retry on the overview.
- Empty installations can create their first schedule from the overview.
- Simplified ES module build, reproducible installs, and corrected release asset upload.
MIT.
The home page groups available controls into Heating, Hot water, Lighting, Shutters, On/Off, and Moments. Empty device sections are hidden. Room and device tiles show the assigned schedule and open its controls; schedule choices are limited to compatible types. Hot water opens its fixed schedule, with copy and delete disabled. Moments open Home Assistant controls and can be timed using Home Assistant automations. The home toolbar switches between Schedules and Overview; + is dimmed where adding a schedule is unavailable.
Creating a schedule from a room or device offers only its compatible schedule types. A single supported type is selected automatically, so you only need to enter the schedule name.
Forms use native browser buttons, text fields, range sliders and checkboxes, styled with Home Assistant theme colours. Home Assistant card, icon and dialog containers remain for dashboard integration.
Creating a schedule from a room or device automatically assigns it to that room or device and opens the new schedule in edit mode. Existing schedules can also be selected and edited before assigning them.
The schedule chooser uses Home Assistant’s native selector, loaded explicitly on first use. The chooser and create/rename name fields are limited to 420px and shrink to fit smaller screens.
The detail toolbar can export the selected schedule as a versioned JSON file and import a compatible export. Import validates the file and opens an editable draft; Save applies its times and settings to the current schedule while preserving its name and assignments.
Smart-plug tiles choose a regional socket icon using Home Assistant’s configured country. Unset or unmapped countries use a generic plug icon; browser language does not determine the socket type.
In the card editor, Home screen → Schedules / Overview chooses the starting view. Schedules is the default. Schedules groups schedule tiles into Heating, Hot water, Lighting, Shutters, and On/Off sections, with empty sections hidden and names sorted within each category; selecting one opens editing and a multiple-selection HA device picker containing compatible rooms or devices. Apply assignments adds or removes the selected schedule’s assignments without deleting schedules. Hot water retains its fixed assignment. Changing Home screen clears a pinned schedule so the chosen home screen can appear. YAML: home_screen: schedules or home_screen: overview.
Overview Details → Show / Hide appears and applies only when Overview is the configured home start page (default Show). When starting on Schedules, opening Overview from the toolbar always shows details. Hide starts each device collapsed, keeping its name and assigned schedule visible. Tap the device icon to expand or collapse its extra information; tap the name or arrow to open its schedule. YAML: overview_details: false. Existing home_screen: devices settings migrate to Overview.
The home toolbar switches between Schedules and Overview without changing the saved home-screen preference. Clicking the active Overview icon expands all device details if any are collapsed, or collapses them all if every device is expanded. Overview shows each room/device’s assigned schedule, ID, type, and next programmed day, time and setting in Home Assistant’s timezone. The next-change rows show planned schedule values. Heating room details also show live schedule status and heating activity from the matching Wiser climate entity. The HA mode selector changes Auto / Manual / Off, and Resume schedule cancels supported temporary overrides. Controls respect display-only and admin-only settings. If the climate entity cannot be matched uniquely within the selected hub, status is unavailable and no controls are shown. Open a device to view or edit its schedule; Back returns to Overview. Unassigned devices remain visible.
The visual editor omits the legacy Title, pinned Schedule, and Layout fields. Existing YAML settings remain readable for compatibility.
Use Hide card background in Appearance to make the outer card transparent. This is independent of Hide card borders. YAML: hide_card_background: true.
The card bundle also registers wiser-schedules-panel. Its source is src/wiser-schedules-panel.js and it is released with the card so both use the same editor API. The Wiser integration registers the sidebar route and saves panel preferences in its config entries through wiser/panel/configure. Dashboard cards retain their own configuration. Updates to the card and panel are handled together by the main integration’s update mechanism.
Compiled card builds include a WISER-CARD-VERSION comment containing the card name and build version. The Wiser integration reads this marker to update the resource URL automatically, without relying on minified variable names or editor text.