iobroker.fullcalendar 3.1.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,8 +13,16 @@ You must not use any external resources, the scheduling is processed only in ioB
13
13
 
14
14
  ![Example](img/example.png)
15
15
 
16
+ The vis-2 widget in the month view with a dark theme: watering, heating mode and balcony light as events.
17
+
18
+ ![vis-2 widget, month view](img/vis2-widget-month.png)
19
+
16
20
  You can control your events with a calendar and can plan to control them periodically.
17
21
 
22
+ - **Duration** of "On/Off" and "Toggle" events can be given in seconds, minutes or hours. With a duration of 1 second, an event works like a push button.
23
+ - **Condition** ("Only if"): an event writes its value only if another state has the given value at that time (`==`, `!=`, `>`, `>=`, `<`, `<=`), e.g. the shutter goes down only if the terrace door is closed. If the condition is not met, the whole event is skipped (an "On/Off" event does not write the end value either), and a line is written to the log.
24
+ - **Calendars** can be switched off (button in the calendar list or "Active" in the calendar dialog): their events stay, but are not executed until the calendar is switched on again. This way you can prepare scenarios like "Vacation" and switch them by a script (`enableCalendar`, see below).
25
+
18
26
  ## Events simulation
19
27
  You can record your behavior and can play it back later.
20
28
  For example, you can create two recordings for workday and for weekend and play them back on according days.
@@ -54,18 +62,43 @@ sendTo('fullcalendar.0', 'addEvent', { oid: 'hm-rpc.0.ABC.1.STATE', value: false
54
62
  // at a time (local time, or a timestamp in ms), for 10 minutes, in the calendar "Garden"
55
63
  sendTo('fullcalendar.0', 'addEvent', {
56
64
  oid: 'hm-rpc.0.PUMP.1.STATE', value: true, start: '2026-10-29T07:30', duration: '10m', calendar: 'Garden', name: 'Pump',
57
- }, res => log(JSON.stringify(res))); // {id, name, start, ts} or {error}
65
+ }, res => log(JSON.stringify(res))); // {id, name, type, start, ts} or {error}
66
+ // every year on June 15 at 08:00 (a birthday), the start may be in the past
67
+ sendTo('fullcalendar.0', 'addEvent', {
68
+ oid: '0_userdata.0.birthday', value: 'Anna', start: '2020-06-15T08:00', recurring: 'yearly', name: 'Birthday Anna',
69
+ }, res => log(JSON.stringify(res))); // {id, name, type, start: next execution, ts, cron: "0 0 8 15 6 *"}
70
+ // delete all events with this name
71
+ sendTo('fullcalendar.0', 'deleteEvent', { name: 'Birthday Anna' }, res => log(JSON.stringify(res)));
58
72
  ```
59
73
 
60
- | Command | Message | Answer |
61
- |----------------|-----------------------------------------------------------------------------------------------------------|---------------------------------|
62
- | `addEvent` | `oid`, `value`, `start` or `in`; optional `duration` + `endValue` (a boolean switches back by itself), `name`, `calendar` (name or ID), `color` | `{id, name, start, ts}` |
63
- | `deleteEvent` | `id` | `{result: "ok"}` |
64
- | `listEvents` | optional `from`, `to` (default now … 7 days, or `days`), `calendar`, `max` | `{events: [execution, …]}` |
65
- | `getEvents` | optional `calendar` | `{events: [definition, …]}` |
66
- | `getCalendars` | – | `{calendars: [{id, name}, …]}` |
67
-
68
- Errors come back as `{error}`. A new event is a one-shot event and appears in the calendar like one created by hand.
74
+ | Command | Message | Answer |
75
+ |------------------|--------------------------------------------------------------------------------------------|---------------------------------------------------|
76
+ | `addEvent` | see below | `{id, name, type, start, ts, cron?}` (`start`/`ts` = first execution) |
77
+ | `deleteEvent` | `id`, `ids` (a list) and/or `name` (all events with exactly this name; optional `calendar`) | `{result: "ok", deleted: [id, …], notFound?: [id, …]}` |
78
+ | `getEvent` | `id` | `{event: definition}` |
79
+ | `getEvents` | optional `calendar` | `{events: [definition, …]}` |
80
+ | `listEvents` | optional `from`, `to` (default now … 7 days, or `days`), `calendar`, `max` | `{events: [execution, …]}` |
81
+ | `getCalendars` | – | `{calendars: [{id, name, enabled}, …]}` |
82
+ | `enableCalendar` | `calendar` (name or ID), `enabled` (`true`/`false`) | `{id, enabled}` |
83
+ | `getCommands` | – | `{commands: [{command, params, answer}, …]}` |
84
+
85
+ Parameters of `addEvent`:
86
+
87
+ | Parameter | Meaning |
88
+ |----------------------------|------------------------------------------------------------------------------------------------------------|
89
+ | `oid` | state to write (must exist and be writable) |
90
+ | `value` | value to write |
91
+ | `start` or `in` | `start`: local time (`"2026-10-29T07:30"`, `"07:30"` = today) or a timestamp in ms; `in`: delay (seconds, or `"90s"`, `"30m"`, `"2h"`, `"1h30m"`, `"1d"`) |
92
+ | `duration` / `durationSec` | after this time (same formats as `in`) the second value is written; then `type` is `"double"` by default |
93
+ | `type` | `"single"` (default), `"double"` (writes `endValue` after `duration`), `"toggle"` (switches back after `duration`) |
94
+ | `endValue` | value of `"double"`; for a boolean `value` the default is the opposite |
95
+ | `recurring` | `"daily"`, `"weekly"`, `"monthly"` or `"yearly"`: repeats at the time of day of `start` (also of a `start` in the past). The day comes from `start`, or from `weekdays` (list, `0` = Sunday or `"MO"`, `"TU"`…), `monthDays` (list, 1…31), `months` (list, 1…12) |
96
+ | `rrule` | instead of `recurring`: iCal rule, e.g. `"FREQ=YEARLY"`, `"FREQ=WEEKLY;BYDAY=MO,FR"`, `"FREQ=MONTHLY;BYMONTHDAY=1,15"`. Supported: `FREQ` (DAILY, WEEKLY, MONTHLY, YEARLY), `BYDAY` (plain weekdays), `BYMONTHDAY`, `BYMONTH`. Not supported: `INTERVAL` > 1, `COUNT`, `UNTIL`, `BYDAY=2MO` |
97
+ | `name` | name of the event, default: name of the state |
98
+ | `calendar` | name or ID of the calendar, default: the default calendar |
99
+ | `color` | color in the calendar |
100
+
101
+ Errors come back as `{error}`, an unknown command answers with the list of the commands. A new event appears in the calendar like one created by hand and can be edited there. Recurring events run at whole minutes.
69
102
 
70
103
  ## Todo
71
104
  - Week and day must scroll to the current time
@@ -75,6 +108,22 @@ Errors come back as `{error}`. A new event is a one-shot event and appears in th
75
108
  ### **WORK IN PROGRESS**
76
109
  -->
77
110
  ## Changelog
111
+ ### 3.3.0 (2026-10-29)
112
+ * (bluefox) Fixed: `addEvent` ignored `type` and `durationSec`, a "double" event was saved as "single"
113
+ * (bluefox) Added recurring events to `addEvent`: `recurring` (daily, weekly, monthly, yearly) or an iCal `rrule`
114
+ * (bluefox) `deleteEvent` deletes a list of events (`ids`) or all events with a name (`name`)
115
+ * (bluefox) Added the messages `getEvent` and `getCommands`, an unknown command answers with the list of the commands
116
+ * (bluefox) Documented all messages and parameters in the README
117
+
118
+ ### 3.2.0 (2026-10-29)
119
+ * (bluefox) Fixed white screen when adding an event in the vis-2 widget (#444)
120
+ * (bluefox) Fixed: the recording of a simulation stopped immediately after the start (#234)
121
+ * (bluefox) Fixed: the simulation recorded repeated status updates without a change of the value, e.g. of Tasmota or Sonoff devices (#285, #235)
122
+ * (bluefox) Fixed: the subscriptions of a stopped recording were not removed
123
+ * (bluefox) Added: the duration of "On/Off" and "Toggle" events can be given in seconds, minutes or hours, e.g. for a push button (#354)
124
+ * (bluefox) Added: conditions for events, e.g. do not close the shutter if the door is open (#257)
125
+ * (bluefox) Added: calendars can be switched off and on, also with the message `enableCalendar` (#236)
126
+
78
127
  ### 3.1.1 (2026-10-29)
79
128
  * (GermanBluefox) Fixed display of recurring events after DST change (#448)
80
129
 
@@ -88,12 +137,6 @@ Errors come back as `{error}`. A new event is a one-shot event and appears in th
88
137
  * (bluefox) Migrated GUI to vite
89
138
  * (bluefox) Updated packages
90
139
 
91
- ### 3.0.1 (2026-08-05)
92
- * (bluefox) Migrated GUI to React19
93
-
94
- ### 2.4.5 (2024-09-09)
95
- * (bluefox) Corrected SelectID Dialog
96
-
97
140
  [Older changelogs can be found there](CHANGELOG_OLD.md)
98
141
 
99
142
  ## License