{"id":13588811,"url":"https://github.com/nielsfaber/scheduler-card","last_synced_at":"2025-04-13T08:57:06.926Z","repository":{"id":37085041,"uuid":"286270157","full_name":"nielsfaber/scheduler-card","owner":"nielsfaber","description":"HA Lovelace card for control of scheduler entities","archived":false,"fork":false,"pushed_at":"2025-03-25T14:42:21.000Z","size":5810,"stargazers_count":1002,"open_issues_count":18,"forks_count":123,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-06T05:11:09.376Z","etag":null,"topics":["assistant","automation","card","custom-card","home","home-assistant","homeassistant","lovelace","schedule","scheduler","sunrise","sunset","week","weekly"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nielsfaber.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-09T16:04:03.000Z","updated_at":"2025-03-26T23:43:39.000Z","dependencies_parsed_at":"2023-11-23T06:25:08.105Z","dependency_job_id":"31c4ee52-766f-4e27-b54e-aca0ffd16fc0","html_url":"https://github.com/nielsfaber/scheduler-card","commit_stats":{"total_commits":651,"total_committers":70,"mean_commits":9.3,"dds":0.5760368663594471,"last_synced_commit":"321503eecf68c9a310433a4a62ea89ef9c4a9480"},"previous_names":[],"tags_count":83,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsfaber%2Fscheduler-card","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsfaber%2Fscheduler-card/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsfaber%2Fscheduler-card/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsfaber%2Fscheduler-card/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nielsfaber","download_url":"https://codeload.github.com/nielsfaber/scheduler-card/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248688543,"owners_count":21145764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assistant","automation","card","custom-card","home","home-assistant","homeassistant","lovelace","schedule","scheduler","sunrise","sunset","week","weekly"],"created_at":"2024-08-01T15:06:57.090Z","updated_at":"2025-04-13T08:57:06.896Z","avatar_url":"https://github.com/nielsfaber.png","language":"TypeScript","funding_links":["https://www.paypal.com/donate/?business=CLL4T6Y8ACXNN\u0026no_recurring=0\u0026item_name=Thank+you+for+supporting+my+work+on+the+Scheduler+project%2E+it+is+much+appreciated%21\u0026currency_code=EUR","https://pics.paypal.com/00/s/YzlhMzI2ZjYtZDQxMi00NzNiLThmZTktOTk3MmEyYTA2Zjc0/file.PNG","https://www.buymeacoffee.com/vrdx7mi"],"categories":["TypeScript","Dashboard Cards"],"sub_categories":["📋 Status \u0026 info rows"],"readme":"# scheduler-card \u003c!-- omit in TOC --\u003e\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/hacs/integration)  \n\n- [Introduction](#introduction)\n- [Installation](#installation)\n- [Updating](#updating)\n- [Usage](#usage)\n  - [Creating a schedule](#creating-a-schedule)\n    - [Choosing an entity and action](#choosing-an-entity-and-action)\n    - [Choosing the days](#choosing-the-days)\n    - [Choosing the time](#choosing-the-time)\n  - [Creating a time scheme](#creating-a-time-scheme)\n    - [Timeslots](#timeslots)\n    - [Time scheme editor](#time-scheme-editor)\n  - [Options panel](#options-panel)\n    - [Condition editor](#condition-editor)\n    - [Period](#period)\n    - [Behaviour after completion](#behaviour-after-completion)\n    - [Name](#name)\n- [Configuration](#configuration)\n  - [Options](#options)\n  - [Standard configuration](#standard-configuration)\n  - [Adding entities](#adding-entities)\n    - [Include](#include)\n    - [Exclude](#exclude)\n  - [Groups](#groups)\n  - [Schedule discovery](#schedule-discovery)\n  - [Customize](#customize)\n    - [Options](#options-1)\n    - [Actions](#actions)\n    - [Numeric action variable](#numeric-action-variable)\n    - [List action variable](#list-action-variable)\n    - [Conditions](#conditions)\n  - [Display options](#display-options)\n  - [Tags](#tags)\n- [Translations](#translations)\n- [Tips \u0026 Tricks](#tips--tricks)\n  - [Triggering multiple actions on a schedule](#triggering-multiple-actions-on-a-schedule)\n  - [Customizing built-in actions](#customizing-built-in-actions)\n- [Troubleshooting](#troubleshooting)\n  - [Checking card version](#checking-card-version)\n- [Say thank you](#say-thank-you)\n\n## Introduction\nThis is a Lovelace card for Home Assistant that can be used to create a time schedule for your smart devices.\nYou can create new rules, modify existing rules and temporarily disable rules.\n\nThe card works on top of the [scheduler custom component](https://github.com/nielsfaber/scheduler-component). You *will* need it this as well.\n\nSee it in action:\n\n![alt text](https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/Demonstration.gif?raw=true \"demonstration video\")\n\n## Installation\n\u003cdetails\u003e\n\u003csummary\u003eclick to show installation instructions \u003c/summary\u003e\n\nHACS installation:\n\nNote: Ensure you have a www folder created as in config/www or the installation will succeed but fails silently\n1. Open the [HACS](https://hacs.xyz/) panel in HA and go to the 'Frontend' section.\n2. Search for scheduler-card and click download.\n3. Follow the instructions provided to complete the installation.\n\nNote: Ensure to install [`https://github.com/nielsfaber/scheduler-component`](https://github.com/nielsfaber/scheduler-component) and add the integration in order for the scheduler to work properly.\n\n\nManual installation:\n\n1. Download the latest release of `scheduler-card.js` [here](https://github.com/nielsfaber/scheduler-card/releases) and place it into `www/scheduler-card`.\n2. Follow the instructions [here](https://developers.home-assistant.io/docs/frontend/custom-ui/registering-resources/) to add the card to HA. Example URL: `/local/scheduler-card/scheduler-card.js?v=0`.\n 3. Add the card in the view where you want it to be shown by editing `ui-lovelace.yaml` (or use the card editor):\n\n  ```yaml\n type: custom:scheduler-card\n domains:\n   ...\n entities:\n   ...\n groups:\n   ...\n  ```\n\n\u003c/details\u003e\n\n## Updating\n\n\u003cdetails\u003e\n\u003csummary\u003eclick to show updating instructions \u003c/summary\u003e\n\nUpdating via HACS:\nHACS should auto-remind you in the HACS tab when an update is available.\n\nUpdating manually:\n\nUse `git pull` for manual installation updates.\n\nSince most browsers will cache the Lovelace card code, you can force a refresh of the browser by editing the entry in the Lovelace resources section, by updating the URL to `?v=(n+1)` (where `n` the current value).\n\n\n\u003c/details\u003e\n\n---\n\n## Usage\n\n### Creating a schedule\nClick the button 'add item' in the bottom of the card, to start creating a schedule.\n\n#### Choosing an entity and action\nThe card scans the entities in your HA configuration and suitable candidates should automatically show up in this view.\n\n__Groups__\nSince HA may contain many entities, the card divides the entities into different groups.\nClicking a group automatically will show the entities contained in the group.\n\nThe groups that are displayed are depending on your HA configuration.\nTypically the groups are based on the _domain_ of your entities.\nIf you want to make changes to the groups, you can do this by defining [groups](#groups) configuration.\n\n__Entities__\nThe entities that you can to control with the scheduler show up here.\nClicking a entity automatically will show the actions that you can program for this entity.\n\nTypically an entity is a device in your house, but you can also control an `automation`, `script`, `input_boolean`, etc. You can add all entities that you want to control in the [include](#include) list.\n\n__Actions__\nThe actions that you can perform for the selected entity show up here.\n Typically an action is to either 'turn on' or 'turn off' a device. But some entities have more capabilities. If you are missing an action, you can add it yourself using the [customize](#customization) configuration.\n\n\n Actions can contain a variable setting (e.g. turn on a lamp at specific brightness, or change the setpoint for a thermostat).\nThese can be defined in the next page.\n\n\u003cimg src=\"https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/instructions_select_entity.png?raw=true\" width=\"500\"\u003e\n\n#### Choosing the days\nAfter clicking the 'next' button, a new view appears.\nThis view is used for choosing _when_ the schedule should be active.\n\nChoose the days of the week for which the schedule should be active.\n\n\n__Every day__\n the default option. The schedule will perform the action every day at the specified time.\n\n__Workdays__\nperform action only on Monday thru Friday. \nIf you have the [workday integration](https://www.home-assistant.io/integrations/workday/) installed, you can use it to define your own set of workdays.\nThe workday integration and its settings will be automatically detected if it is installed.\nNote that if you define holidays, they will be excluded from workdays.\n\n__Weekend__\nperform action only on Saturday and Sunday. \nIf you have the workday integration installed, the weekend will be considered as the inverse as workdays. This means that holidays and your 'fixed day off' are included in the weekend setting.\n\n\n__Custom__\nchoose your own days. A list with all days of the week appears. You can select one or more days by clicking them.\n\n\n#### Choosing the time\n\nThe time at which you want schedule to be activated can be set using the time picker.\n\n\n\nThe time picker shows the current time setting, and features arrow buttons to increase or decrease the hour and minutes. Note that you can infinitely loop through time.\nThe step size for minutes is 10 minutes by default, but can be configured to your preference.\n\nIf you have the AM/PM option enabled, 12-hour format will be used. You can click on the button to switch between AM and PM.\n\n__Sunrise / sunset mode__\n\nIf you have the [sun](https://www.home-assistant.io/integrations/sun/) integration in HA, a button with sun/moon icon shows up on the right. This is the _mode button_, which allows you to switch from a fixed time, to time relative to sunrise or sunset.  \nThe card allows you to choose a time that is 2 hours around sunrise or sunset. The button will be disabled if the current time is not in this range.\n\nIn sunrise/sunset mode, the time picker will show the offset relative to sunrise/sunset. The time offset is automatically calculated from fixed time.\nThe _sunrise/sunrise button_ will show a sun icon when offset is relative to sunrise, or a moon icon when offset is relative sunset.\nThe _before/after button_ indicates whether the offset is applied in positive direction (so triggers after sunrise/sunset), or in negative direction (before sunrise/sunset).\nAlso here, buttons can be clicked to toggle.\n\n:warning: **Important**: _What you see is what you get_ here. If you want to store time as relative to sunrise or sunset, make sure that you have this _mode_ activated when you click the save button.\n\n\u003cimg src=\"https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/instructions_timepicker.png?raw=true\" width=\"400\"\u003e\n\n---\n\n\n### Creating a time scheme\n\nA time scheme is a more advanced type of schedule, which allows multiple actions during the day through the use of timeslots.\n\n#### Timeslots\nA timeslot defines a time range during which you want an entity to be in a certain state.\nEvery timeslot has a start time and end time, together with an action.\n\nAn action defined for a timeslot will *normally* be executed when the time reaches the starting time of the slot. \nSo in this sense the behaviour is not different compared to a a normal schedule.\n\nBut there are differences:\n* If you create (or edit) a new time scheme: the schedule will determine which timeslot is active, and trigger this action immediately.\n* If you enable a disabled time scheme: the schedule will determine which timeslot is active, and trigger this action immediately.\n* If HA is restarted: the schedule will determine which timeslot is active, and trigger this action immediately.\n* If the entity (used in the action) is *unavailable* when the action needs to be triggered: the schedule will wait for this entity to become *available* (anything other than *unavailable*), and then trigger the action. Of course only while the timeslot is active.\n\nAfter a timeslot has triggered the action, the schedule will wait for the next timeslot.\nSo, you can keep controlling your entity as you want without worrying that the schedule will not re-trigger its action again.\n\n:warning: **Note** At the end of the timeslot, there is no action executed.\nThis means that if you turn on a device during a timeslot, you will have to add a second timeslot to turn it off.\nIt is *highly recommended* (but not required) to assign actions to every timeslot, such that the behaviour for the whole day is defined.\n\n#### Time scheme editor\n\nThe time scheme editor allows you to configure the timeslots of your schedule and visualizes the result.\n\nA time scheme starts at 00:00 and ends at 23:59, so it covers a full day. Depending on the selected days, the schedule continues with the first slot of next day after the last one ended. So usually the first and last slot should have the same action.\n\n__Draggable markers__\nThe card shows a bar with multiple time markers which you can drag/slide to change the duration of the timeslots.\nThe time step is currently limited to 15 mins intervals.\n\n__Selectable timeslots__\nBy clicking on a timeslot, it becomes selected and will have highlighted color.\nWhen a timeslot is selected, you can assign an action to it.\n\n__Divide or merging of timeslots__\nWhen a timeslot is selected, you can click the '+' or '-' buttons to either divide (split in two) or merge (combine with the next slot)) the selected timeslot.\n\n:warning: **Note** Due to the limited width of the Lovelace cards in HA, it might be difficult to make a short timeslot. \nSince there is not really a way to fix this, it's recommended to use a PC or use your phone on landscape mode when creating a time scheme.\n\n\u003cimg src=\"https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/timescheme_example.png?raw=true\" width=\"600\"\u003e\n\n---\n### Options panel\nThe options panel gives you access to additional settings that you can set up for schedules.\n\nThe options panel is called the way it is, because all settings here are *optional*. So it is OK to ignore it if you don't miss any of its functions.\n\n#### Condition editor\n\nThe condition editor allows you to define a set of rules which need to pass before the action may be executed.\nConditions are currently limited to checking the state of (other) HA entities (so not their attributes). States may be numeric, on/off or string type. Date/time format is not supported.\n\nThe editor allows you to make rules in various ways: logic *AND*, *OR*, *NOT* functions, as well as *below* and *above* for numeric states.\nYou can combine multiple entities if needed.\n\nAll entities having `states` configured will show up in the editor.\nFor more information on this, see [conditions](#conditions).\n\n:warning: **Note**: Conditions are only evaluated at the time the actions should fire. This means that if the conditions are not met, the timer event will be skipped. It will not be re-evaluated when any of the entities involved in the conditions change.\n\n#### Period\nThe *period* option allows you to define a range of dates (or a single date) for which the schedule needs to be active.\n\nIf the *period* option:\n* is not used, a schedule will repeat on a daily/weekly basis as defined by the [days](#choosing-the-days) input (unless it is configured to do otherwise via [trigger behaviour](#behaviour-after-completion)).\n* Is used, a schedule will only be executed within the defined date range (which may be a single date). This can be combined with [days](#choosing-the-days) input to provide additional restrictions.\n\nIf the combination of the defined end date + time(s) is in the past, the schedule becomes *completed*. \nA completed schedule will:\n* Show up with grey text in the scheduler-card in the overview and appears in the bottom of the list with the time to the next triggering in the past.\n* Not perform any actions and needs to be manually editted to become useful again.\n\n#### Behaviour after completion\n\nThe *behaviour after completion* option can be used to control repetition behaviour of a schedule.\n\nCompletion of a schedule is defined as follows:\n* For a normal schedule (having a single time), completion is reached after the configured time has passed (and after the corresponding action(s) have been executed).\n* For a time scheme (having one or more timeslots), completion is reached after the last timeslot has passed.\n* In case a [period](#period) is assigned to a schedule, completion is reached when the configured time (or last timeslot) on the end date has passed. In this case the *repeat* option is not available (for more info see [period](#period)).\n\n| Selected Option  | Behaviour                                                                                                                                  |\n| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Repeat (default) | Schedule will repeat again on the next allowed day (as defined by the [days](#choosing-the-days)).                                         |\n| Stop             | Schedule will disable (turn off) itself after completion.\u003cbr\u003eIt has to be re-enabled by the user or through automation in order to repeat. |\n| Delete           | Schedule will remove itself after completion.                                                                                              |\n\n\n#### Name\n\nBy default, all schedules will have an automatically generated entity ID and friendly name.\nThis means they could be hard to find back in the entity registry.\n\nBy defining your own friendly name, this will assigned to the entity, and the entity ID of the entity will be based on this name as well.\nIf you leave the field empty, the automatically generated name shall be used instead.\n\n## Configuration\n\nThe configuration of the card can be done via the UI editor or in YAML.\nSome (advanced) configuration options (such as `customize`) are YAML-only currently.\n\nConfiguration is not *necessary*, except for defining a set of entities which you want to control with the card, which is done via `include`.\n\n### Options\n\n| Name                     | Type           | Default                     | Description                                                                                                                                                                                                                                                                                                   |\n| ------------------------ | -------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `type`                   | string         | **Required**                | `custom:scheduler-card`                                                                                                                                                                                                                                                                                       |\n| `standard_configuration` | boolean        | *true*                      | Use the [standard configuration](#standard-configuration) as a base configuration.                                                                                                                                                                                                                            |\n| `discover_existing`      | boolean        | *true*                      | Show previously created schedules in the card, also if the related entities are not included in the configuration.\u003cbr\u003eSet to `false` if you have multiple scheduler-cards.\u003cbr\u003eSee [schedule discovery](#schedule-discovery) for more info.                                                                    |\n| `include`                | list           | none                        | List of filters to determine which HA entities are available for creating schedules.\u003cbr\u003e See [include](#include) for more info.                                                                                                                                                                               |\n| `exclude`                | list           | none                        | List of filters to determine which HA entities are **not** available for creating schedules.\u003cbr\u003e See [exclude](#exclude) for more info.                                                                                                                                                                       |\n| `groups`                 | list           | none                        | Organize the entities menu. \u003cbr\u003eSee [groups](#groups) for more info.                                                                                                                                                                                                                                          |\n| `customize`              | dictionary     | none                        | Customize the available actions or visualization of entities.   \u003cbr\u003eSee [customize](#customize) for more info.                                                                                                                                                                                                |\n| `title`                  | boolean/string | *true*                      | Provide a text to replace the title of the card.\u003cbr\u003e Set to `false` to hide the title.                                                                                                                                                                                                                        |\n| `time_step`              | number         | 10                          | Set the time step (in minutes) for the time picker                                                                                                                                                                                                                                                            |\n| `sort_by`                | string/list    | `relative-time`,\u003cbr\u003e`state` | Order in which schedules appear in the list. Choose from:\u003cul\u003e \u003cli\u003e`relative-time`: duration until next task\u003c/li\u003e\u003cli\u003e`title`: displayed [primary info](#primary-info)\u003c/li\u003e\u003cli\u003e`state`: enabled/disabled status\u003c/ul\u003eNote that `state` currently is the only option which can be combined with a second option.. |\n| `show_header_toggle`     | boolean        | *false*                     | Show a switch at the top of the card that can be used to enable/disable the complete list.                                                                                                                                                                                                                    |\n| `show_add_button`        | boolean        | *true*                      | Show button for creating new schedules.                                                                                                                                                                                                                                                                       |\n| `display_options`        | dictionary     | none                        | Configure which properties are displayed in the overview.\u003cbr\u003eSee [display options](#display-options) for more info.                                                                                                                                                                                           |\n| `tags`                   | string/list    | none                        | Filter schedules on one or more tags.\u003cbr\u003eSee [tags](#tags) for more info.                                                                                                                                                                                                                                     |\n| `exclude_tags`           | string/list    | none                        | Eliminate items from the schedules filtered by `tags`.\u003cbr\u003eSee [tags](#tags) for more info.                                                                                                                                                                                                                    |\n### Standard configuration\n\nThe card includes a _standard configuration_.\nIt is intended to make setting up the card easy.\nThe standard configuration consists of the following features:\n* Discovery of devices (entities) of various types in your HA config and making them available for creating schedules\n* Defining actions per entity based on their capabilities\n* Icons for groups, entities and actions\n\nWhen including an entity, the standard configuration will automatically detect which actions are supported by it, and will make these available.\nAlso it has icons for most entity types and actions.\n\n:warning: **Warning**: You can provide `standard_configuration:false` in the card configuration to disable it completely for full control. If so, you will need to configure all actions and properties via `customize`.\n\n\n### Adding entities\n\n#### Include\n\nThe `include` configuration allows you to pick entities from your HA config that you can use for creating schedules.\n\nYou can either provide the full `entity_id` of the entities, or only the domain.\n\nThe list supports wildcards (*) as well. It is recommended to use quotes (\"\") around your input, else it may be wrongly interpreted.\n\n\u003cu\u003eExample:\u003c/u\u003e\n\n```yaml\ninclude:\n  - climate.my_thermostat # include an individual entity\n  - light # include all light entities\n  - \"*garden*\" # include all entities containing the word 'garden'\n  ...\n```\n#### Exclude\n\nThe `exclude` configuration allows you to remove entities from your HA config from appearing in the scheduler.\n\nThe `exclude` list works on top of the `include` list, so it behaves like *'ADD (includes) EXCEPT (excludes)'*.\n\nLike with `include`, you can either provide the full `entity_id` of the entities, or the domain, or use wildcards.\n\n\n```yaml\ninclude:\n  - light # include all light entities\nexclude:\n  - light.my_light_that_i_never_use # exclude\n```\n\n\n### Groups\nThe `groups` configuration provides the capability of organizing the entities.\nTo be clear, they have nothing to do with the [group](https://www.home-assistant.io/integrations/group/) integration in Home Assistant.\n\nBy default, entities will be grouped based on their type (domain). \nEntities that are assigned to your own defined group will not be grouped by type.\n\n| Name    | Type   | Default            | Description                                                                                                                                                                                 |\n| ------- | ------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| name    | string | (same as group_id) | Displayed name for group                                                                                                                                                                    |\n| icon    | string | none               | Displayed icon for group                                                                                                                                                                    |\n| include | list   | none               | List of filters to determine which of the entities belong in this group.\u003cbr\u003eThis has the same functionality as the [include](#include) filter for defining the entities in the card.        |\n| exclude | list   | none               | List of filters to determine which of the entities do not belong in this group.\u003cbr\u003eThis has the same functionality as the [exclude](#exclude) filter for defining the entities in the card. |  |\n\n\u003cu\u003eExample:\u003c/u\u003e\n\n*Place all `light` entities in group labelled \"lighting\"*\n```yaml\ngroups:\n  - name: \"Lighting\"\n    icon: \"hass:ceiling-light\"\n    include:\n      - light\n```\nResult:\n\n![groups example](https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/groups_example.png?raw=true)\n\n### Schedule discovery\n\nThe card checks for the created schedules in your HA config and show them in the overview page.\n\nThe schedule discovery is a feature that will ensure that **all** your schedules will be there.\n\nWhat is the benefit of this feature?\n\nIt could occur that you make changes in the configuration, resulting in previously created schedules to become hidden.\nFor example, you made a schedule for controlling a `fan`.\nThe day after you decide to remove the `fan` domain from the card. But you forgot to delete the previously created schedule.\n\nWithout the discovery, you now have a schedule that is hidden from the card, but will keep running. You cannot remove or change it anymore (unless via the HA configuration panel).\n\nDiscovery makes sure that you will always find it back in the card.\nThe feature can be turned on/off through the `discover_existing` option.\n\nFor your protection, it is enabled by default.\n\n:warning: **Tip**: You should set `discover_existing:false` if you want to use multiple cards. Else you will see each created schedule in every card.\n\n\n### Customize\nWith the `customize` configuration you can specify configuration for specific HA entities.\n\n:warning: **Tip**: You can use entities `configuration` in combination with the standard configuration. The configurations will be merged.\n\n#### Options\n| Name            | Type        | Default               | Description                                                                                                                                                                                                       |\n| --------------- | ----------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| entity          | key         | **Required**          | Entity id (or filter).\u003cbr\u003e Filter works the same as `include` so you can also use it for multiple entities.                                                                                                       |\n| actions         | list        | none                  | See [actions](#actions)                                                                                                                                                                                           |\n| name            | string      | (take from HA config) | Displayed name for entity                                                                                                                                                                                         |\n| icon            | string      | (take from HA config) | Displayed icon for entity                                                                                                                                                                                         |\n| states          | list or map | none                  | Possible states of this entities, for using it in a condition.\u003cbr\u003e See [conditions](#conditions) for more info.                                                                                                   |\n| exclude_actions | list        | none                  | Hide actions from the card.\u003cbr\u003eEnter a list with names of actions to hide as they displayed in the card (including translation).\u003cbr\u003eE.g. '*turn on at 40%*' would hide the created action from the example below. |\n#### Actions\nAn action defines **what** needs to be done when a schedule timer expires.\n\nAn action is similar to a [service call](https://www.home-assistant.io/docs/scripts/service-calls/) in HA. It requires a `service` with optionally additional parameters given by `service_data`.\n\nActions are linked to their entities, so the entity ID is sent together with the service call, it is not needed to add it to the `service_data`).\n\n| Name         | Type   | Default           | Description                                            |\n| ------------ | ------ | ----------------- | ------------------------------------------------------ |\n| service      | string | **Required**      | Service to be executed                                 |\n| service_data | map    | none              | Additional parameters to use for the service call      |\n| variables    | map    | none              | Add variables. See [action variable](#action-variable) |\n| name         | string | (same as service) | Displayed name for action                              |\n| icon         | string | \"flash\"           | Displayed icon for action                              |\n\n:warning: **Note**: Templates (jinja code) are not supported at this point.\n\n\u003cu\u003eExample:\u003c/u\u003e\n\n*Adding an action to turn on a light with 40% brightness*\n  ```yaml\ncustomize:\n    light.my_lamp:\n      name: \"Dining light\"\n      icon: \"hass:ceiling-light\"\n      actions:\n        - service: turn_on\n          service_data:\n            brightness: 100 # note that brightness is from 0-255 so 100 = 40%\n          name: \"Turn on at 40%\"\n          icon: \"hass:lightbulb-on-outline\"\n  ```\nResult:\n\n![customize example](https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/entities_example.png?raw=true)\n\n\n**Customizing actions from standard configuration**\n\nHow actions in customize are processed:\n* If the action matches with a previously defined action, your action will replace the default action.\n* If the action does not match with an existing action, the card will create a new action.\n\nActions are compared based on matching `service` and `service_data` (note that variables are not considered).\n\n\n:warning: **Note**: If a match is found, your action will *replace* (and not *modify*) the default action.\u003cbr\u003eThis means that you are expected to (re-)define name, icon, and variable configuration.\n\n#### Numeric action variable\n\nSome devices allow to operate on a variable working point. For example lights can be dimmed with a `brightness`, fans can spin at a `speed` etc.\n\nBy providing an action variable, the card allows you to choose the setting you want to apply with the action.\n\n| Name                                 | Type    | Default       | Description                                                                                                                                                                                           |\n| ------------------------------------ | ------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| field                                | map     | **Required**  | field name in the `service_data` that is represented by this variable                                                                                                                                 |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;name         | string  | same as field | Name under which the variable is visible in the card                                                                                                                                                  |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;unit         | string  | \" \"           | Displayed unit                                                                                                                                                                                        |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;min          | number  | **Required**  | Minimum value that can be set. If not provided, it will be read from the entity attributes.                                                                                                           |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;max          | number  | **Required**  | Maximum value that can be set. If not provided, it will be read from the entity attributes.                                                                                                           |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;step         | number  | **Optional**  | Step size                                                                                                                                                                                             |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;scale_factor | number  | **Optional**  | Scale factor to apply when calling service.\u003cbr\u003eE.g. scale_factor for `brightness` of a light is set to 2.55, since it is defined in HA in range 0-255, while the card displays 0-100.                 |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;optional     | boolean | false         | Setting the variable is optional, the action can also be executed without this variable. \u003cbr\u003eIf `optional:true` is provided, a checkbox will be shown that needs to be selected to apply the variable |\n\n**Example**\n\nThe Xiaomi Air Purifier can be controlled using the [Xiaomi Miio](https://www.home-assistant.io/integrations/xiaomi_miio/#service-xiaomi_miiofan_set_favorite_level-air-purifiers-only) integration.\nTo be able to set the speed of this device in your action, you can use:\n```yaml\ncustomize:\n  fan.xiaomi_purifier:\n    actions:\n      - service: xiaomi_miio.fan_set_favorite_level\n        name: \"set speed\"\n        variables:\n          level:\n            name: \"Speed\"\n            min: 1\n            max: 16\n```\nYou can now select the speed for this action in the schedule editor:\n\n![action variable example](https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/action_variable_example.png?raw=true)\n\n#### List action variable\n\nWith some actions, you can provide an option from a limited list of options.\nFor example, setting the value of an `input_select`, but also the operation mode of a thermostat.\n\nBy providing the list variable, the card allows you to choose the option when you set up the action.\n\n| Name                                                  | Type   | Default       | Description                                                                   |\n| ----------------------------------------------------- | ------ | ------------- | ----------------------------------------------------------------------------- |\n| field                                                 | map    | **Required**  | field name in the `service_data` that is represented by this variable         |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;name                          | string | same as field | Name under which the variable is visible in the card                          |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;options                       | list   | **Required**  | List of options to choose from                                                |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;value | string | **Required**  | Option value (which is passed with together with the field as `service_data`) |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;name  | string | same as value | Name to show for the option                                                   |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;icon  | string | none          | Icon to show with the option                                                  |\n\n**Example**\n\nSetting the operation mode of a thermostat.\n\nNote that this configuration will already be set up when using _standard configuration_.\n\n```yaml\ncustomize:\n  climate.my_thermostat:\n    name: My thermostat\n    icon: thermometer\n    actions:\n      - service: set_hvac_mode\n        name: Set mode\n        icon: \"hass:settings\"\n        variables: \n          hvac_mode:\n            name: Operation mode\n            options:\n              - value: heat\n                icon: \"hass:fire\"\n              - value: cool\n                icon: \"hass:snowflake\"\n              - value: \"off\"\n                icon: \"hass:power\"\n```\nNow the list of options become visible when you set up the action:\n\n![action variable example](https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/action_variable_list_example.png?raw=true)\n\n\n#### Conditions\n\nIf you want to use a specific entity as a condition in a schedule, this can be configured by defining it in `customize` as well.\n\nTo do so, you will need to tell the card which states the entity can have, which is done using the `states` parameter.\n\nThere are two options for this:\n1. Define a list of possible states\n2. Define a numeric range for the state\n\nIf an entity has its states defined, it will automatically show up when creating a condition.\n\nExample of defining a state list:\n```yaml\ncustomize:\n  input_boolean.my_condition_entity:\n    states: ['on','off']\n```\n\nExample of defining a numeric range:\n```yaml\ncustomize:\n  sensor.my_other_condition_entity:\n    states: {min: 0, max: 100, step: 1, unit: '%'}\n```\n\n\n### Display options\nFrom v1.9.0, it is possible to configure what is displayed in the overview list.\nBy default, the card will display the entity + action on the first line, and on the second line the remaining time until the schedule will be triggered. For timeslots, there will be a display of the extra actions.\n\n:warning: **Note**: This is a YAML-only feature currently, Not available in the UI editor.\n\nSupported options for `display_options`:\n| Name             | Type           | Default                                          | Description                                                            |\n| ---------------- | -------------- | ------------------------------------------------ | ---------------------------------------------------------------------- |\n| `primary_info`   | string or list | `- \"{entity}: {action}\"`\u003cbr\u003e`- additional-tasks` | Displayed text on the first line.\u003cbr\u003eChoose from the properties below. |\n| `secondary_info` | string or list | `relative-time`                                  | Displayed text on the second line\u003cbr\u003eChoose from the properties below. |\n| `icon`           | string         | \"action\"                                         | Choose which icon is displayed (`action` or `entity`)                  |\n\nFor creating multiple lines, enter a list of multiple properties. Empty items will be automatically skipped.\n\nFor combining multiple properties in a single line, use wildcards (with property in brackets). Make sure to wrap your text in quotes.\n\n:warning: **Pro-tip**: You can use HTML for formatting the lines. So for example: `\u003cb\u003e{entity}\u003c/b\u003e` will print the name in bold text.\n\n\nThe following properties are available:\n| Name               | Description                                                                                                                                        |\n| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `name`             | Friendly name of the schedule (as configured in the 'options' panel)\u003cbr\u003eOnly if a custom name is defined (the generated ID will not be displayed). |\n| `entity`           | Friendly name of the entity which is involved in the action.                                                                                       |\n| `action`           | Description of the action that will be executed when the timer is expired.\u003csup\u003e1\u003c/sup\u003e                                                             |\n| `relative-time`    | Duration until the schedule is triggered (if the schedule is enabled).\u003csup\u003e1\u003c/sup\u003e                                                                 |\n| `time`             | Configured time for the schedule.\u003csup\u003e1\u003c/sup\u003e                                                                                                      |\n| `days`             | Configured days for the schedule.                                                                                                                  |\n| `additional-tasks` | The amount of remaining tasks/actions (other than the displayed one).\u003cbr\u003eOnly for time schemes, otherwise this property is skipped.                |\n| `tags`             | Show tags assigned to schedule. See [tags](#tags).                                                                                                 |\n\n\u003csup\u003e1\u003c/sup\u003e For *time schemes*, the displayed value corresponds to the closest timeslot.\n\nExample (this is actually the default format):\n```yaml\ndisplay_options:\n  primary_info:\n    - \"{entity}: {action}\"\n    - additional-tasks\n  secondary_info: relative-time\n  icon: \"hass:action\"\n```\n\n\n### Tags\nIf you want to use multiple scheduler-cards in your Lovelace dashboard, it can be difficult to separate the schedules which show up in each card (with [include](#include) you can only control which \u003cu\u003eentities\u003c/u\u003e are controlled by which cards).\nWith `tags` you can filter out schedules and assign them to their own cards.\n\n\nTo start using tags, edit the card configuration and assign `tags` to the scheduler card.\n\n*Example:*\n```yaml\ntype: custom:scheduler-card\n#...rest of card configuration\ntags: holiday\n```\n\nThe effect of assigning tags:\n- Only schedules with a matching tag will show up (unless `discover_existing` is set to *true*.\n- All schedules created with this card will be automatically assigned with this tag.\n- You can modify tags of a schedule by clicking 'Options' when editing/creating a schedule.\n\n**Notes:**\n- You can also assign multiple tags to the card. In this case they will not be automatically applied to newly created  (you should choose this via 'options'). \n- You can also assign multiple tags to a schedule. This allows you to make them appear in multiple cards (each with card having its own tag).\n- You can assign `tags: none` to a card if you want to have only schedules without a tag showing up here.\n- You can assign `tags: enabled` or `tags: disabled` to a card if you want to include (respectively) all enabled or disabled schedules.\n- The option to assign tags on schedules is only available on cards which have the `tags` option set.\n\n:warning: **Tip**: If you want to start using tags you will have to go through your current schedules and assign them with tags.\n You can  temporarily set `discover_existing: true` to make also schedules accessible which don't have the correct tag (yet).\nYou can also make the tags for schedules show up in the overview through `display_options`.\n\n**Example usage**:\n\nConsider the following situation:\n- Card A should contain all normal (everyday) schedules.\n- Card B should contain only holiday schedules.\n- The normal schedules contain tasks to turn on the garden lights at 19:00 and turn them off again at 23:00.\n- The holiday schedules contain tasks to turn on the dining lights at 17:00 and turn them off again at 22:00.\n\nSince both cards have the light domain [included](#include), the created schedules would normally show up in both cards, which is not desirable.\n\nNow by assigning `tags` to the card configurations, you can filter them. \n\nConfig for card A:\n```yaml\ntype: custom:scheduler-card\ntitle: Normal schedule\n#...rest of card configuration\ntags: none\n```\nConfig for card B:\n```yaml\ntype: custom:scheduler-card\ntitle: Holiday schedule\n#...rest of card configuration\ntags: holiday\n```\n\nResult:\n\n![tags example](https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/tags_example.png?raw=true)\n\n\n**Excluding tags**\n\nFor more advanced filtering it is possible to define `exclude_tags` to the card.\n\nThe tag or tags defined in `exclude_tags` will be used to hide schedules from a card.\n\nThe `exclude_tags` function works on top of the `tags` function, so you can eliminate schedules from the ones which are included via `tags`.\n\n*Example use-case*\n\n* All schedules for the holiday program are assigned with tag `holiday`.\n* All schedules which occur in the weekend are assigned with tag `weekend`.\n* By assigning `tags: weekend` and `exlude_tags: holiday` only the weekend schedules which are not part of the holiday program will be shown.\n\n\n## Translations\n\nThe card is available in multiple languages. The card will automatically detect the appropriate translation based on the language setting for your user account in HA.\n\nCurrently the following languages are supported:\n\n| Language    | Code(s)    | Status / Remarks  |\n| ----------- | ---------- | ----------------- |\n| Čeština     | cs         |                   |\n| Deutsch     | de         |                   |\n| **English** | en         | Default language. |\n| Eesti       | et         |                   |\n| Español     | es, es_419 |                   |\n| Français    | fr         |                   |\n| עִברִית       | he         |                   |\n| Italiano    | it         |                   |\n| Latviešu    | lv         |                   |\n| Magyar      | hu         |                   |\n| Polski      | pl         |                   |\n| Português   | pt, pt-br  |                   |\n| Русский     | ru         |                   |\n| Română      | ro         |                   |\n| Slovenščina  | sl         |                   |\n| Slovenský  | sk         |                   |\n| Suomalainen  | fi        |                   |\n| Nederlands  | nl         |                   |\n| Norsk       | no, nb, nn |                   |\n| 简体中文    | zh-Hans    |                   |\n\nThe translations are maintained by users.\nIf you are missing a translation, or a translation needs to be improved, please contribute. Take the [english](https://github.com/nielsfaber/scheduler-card/blob/main/src/localize/languages/en.json) file as a starting point.\n\n---\n\n## Tips \u0026 Tricks\n\n### Triggering multiple actions on a schedule\n\nThe scheduler-card can only be used to create schedules to trigger a single action at a certain point in time.\n\nRecently, support has been added to trigger an action on a [group](https://www.home-assistant.io/integrations/group/) and for targeting multiple entities for the action (but they have to be of the same type).\n\nIf you want to trigger a sequence of actions (e.g. *\"set fan mode + temperature setpoint for my airconditioner\"*), the recommended way to do so, is by creating a script.\nScripts can be combined with variables to pass some settings which can be configured through the card.\n\n\u003cu\u003eExample\u003c/u\u003e\n\n*Setting fan mode + heating/cooling to a certain temperature.*\n\nscheduler-card configuration:\n\n(note that `customize` is only available in YAML editing mode):\n\n\n\n```yaml\ncustomize:\n  script.set_climate_livingroom:\n    actions:\n      - service: script.set_climate_livingroom\n        name: Set climate\n        icon: mdi:air-conditioner\n        variables:\n          hvac_mode:\n            name: HVAC mode\n            options:\n              - value: heat\n                icon: mdi:fire\n              - value: cool\n                icon: mdi:snowflake\n              - value: 'off'\n                icon: mdi:power\n          temperature:\n            name: Temperature\n            min: 12\n            max: 30\n          fan_mode:\n            name: Fan mode\n            options:\n              - value: auto\n                icon: mdi:fan-auto\n              - value: high\n                icon: mdi:fan-speed-3\n              - value: quiet\n                icon: mdi:fan-speed-1\n\n```\n\nIn `scripts.yaml`:\n```yaml\nset_climate_livingroom:\n  alias: Set climate livingroom\n  description: \"Sets climate parameters for scheduler-card\"\n  variables:\n    target_entity: climate.my_airconditioner\n  sequence:\n    - service: climate.set_temperature\n      data:\n        temperature: \"{{ temperature }}\" # match with variable in the card config\n      target:\n        entity_id: \"{{ target_entity }}\"\n    - delay: # wait a bit, otherwise the next service call may fail\n        seconds: 1\n    - service: climate.set_fan_mode\n      target:\n        entity_id: \"{{ target_entity }}\"\n      data:\n        fan_mode: \"{{ fan_mode }}\" # match with variable in the card config\n    - delay: # wait a bit, otherwise the next service call may fail\n        seconds: 1\n    - service: climate.set_hvac_mode\n      target:\n        entity_id: \"{{ target_entity }}\"\n      data:\n        hvac_mode: \"{{ hvac_mode }}\" # match with variable in the card config\n  mode: single\n  icon: mdi:air-conditioner\n\n```\n\n### Customizing built-in actions\n\nOut of the box, scheduler looks at the properties of your HA entities to show the correct actions in the card.\nIn 99% of the cases this gives the right behaviour, but exceptions are always possible.\nTo overcome this, scheduler allows overwriting the built-in actions by your own ones.\n\n\u003cu\u003eExample:\u003c/u\u003e\n\nThe [Tuya TS0601](https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html) Zigbee TRV has operation modes `off`, `heat`, `auto`.\nThe Scheduler Card will show an action `heat`, which sets the temperature to the desired level and sets the mode to `heat`.\nHowever, in mode `heat` the TS0601 will remain continuously heating, i.e. it does not regulate to the desired temperature.\nInstead, the `heat` action needs to be modified to use mode `auto` instead (in which it does properly regulate temperature).\n\nThis can be done via `customize` as follows:\n```yaml\ncustomize:\n  climate.my_tuya_thermostat:\n    exclude_actions:\n      - heat       # hide the built-in action to avoid duplicates\n      - set mode   # we won't use this\n      - set preset # we won't use this\n    actions:       # add the custom actions\n      - service: set_temperature\n        service_data:\n          hvac_mode: auto\n        variables:\n          temperature:\n            min: 10\n            max: 25\n            step: 0.5\n            unit: '°C'\n        icon: 'hass:fire'\n        name: \"heat[ to {temperature}]\" # replace with local translation for 'heat' and 'to' if desired\n```\n\n\n---\n\n## Troubleshooting\n\nIf you have an issue with this card, please report it [here](https://github.com/nielsfaber/scheduler-card/issues).\n\n### Checking card version\n\nTo check which version of the card is currently active, consult the browser console logs.\nThe browser console logs can only be accessed via a PC (so not via phone or tablet).\n\n[Here's](https://balsamiq.com/support/faqs/browserconsole/#:~:text=To%20open%20the%20developer%20console,(on%20Windows%2FLinux).\n) an excellent guide on how to access the console logs for various browsers.\n\nWith the console logs open, access the HA dashboard containing the the scheduler card.\nIn the console log you should see a badge with the version that is currently active, similar to this:\n\n\u003cimg src=\"https://github.com/nielsfaber/scheduler-card/blob/main/screenshots/version_badge.png?raw=true\" width=\"250px\"\u003e\n\nIn case this version does not match with the version which is installed, your browser is holding an older version of the card in its cache.\nHA uses aggressive caching of the frontend, this has nothing to do with the card.\n\nPotential ways to solve this:\n* In HACS, after installing/updating the card you are asked if you want to reload your browser (and yes, you do). You can also look for the existing installation of scheduler card (under Frontend) and choose redownload (in the top right menu) to get the option again.\n* Do a force refresh of the page: On windows you can do CTRL + F5 and on Apple hold down ⌘ Cmd and ⇧ Shift key and then press R.\n* Clear the browser cache: [here's](https://www.refreshyourcache.com/en/home/) a good guide on how to do this on various browsers.\n\n\n---\n\n\n## Say thank you\nIf you want to make donation as appreciation of my work, you can do so via PayPal (preferred) or buy me a coffee. Thank you!\n\n\u003ca href=\"https://www.paypal.com/donate/?business=CLL4T6Y8ACXNN\u0026no_recurring=0\u0026item_name=Thank+you+for+supporting+my+work+on+the+Scheduler+project%2E+it+is+much+appreciated%21\u0026currency_code=EUR\" target=\"_blank\"\u003e\u003cimg src=\"https://pics.paypal.com/00/s/YzlhMzI2ZjYtZDQxMi00NzNiLThmZTktOTk3MmEyYTA2Zjc0/file.PNG\" width=\"150\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.buymeacoffee.com/vrdx7mi\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnielsfaber%2Fscheduler-card","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnielsfaber%2Fscheduler-card","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnielsfaber%2Fscheduler-card/lists"}