The IcalCalendar gives Homey flow cards to trigger on your calendar events
A separate test tool is created for you to test IcalCalendar behavior in your own console
- Open settings (configure app)
- Paste in the ical link and give it a name
- Change the date/time format or use the default (your choice)
- All tokens supported in moment.format() is also supported here: https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/
- Choose the timeframe for how many events to sync in to the app
- Choose whether or not you want next event tags per calendar. Default is off
- Go to https://outlook.office.com/mail/inbox
- Click settings -> Show all outlook setting
- Go to Calendar -> Shared calenders
- Publish a calendar, click the ics link and choose copy
- Paste the ical link in settings of Homey app
- Go to https://calendar.google.com/
- Click the three dots next to the calendar you want to share -> Click Settings and sharing
- Scroll all the way down to the bottom
- Copy the link from Secret address in ical format
- Paste the ical link in settings of Homey app
- Go to https://www.icloud.com/calendar/, or open the Calendar app on your iOS device
- Click on the icon next to the calendar name in the left pane
- Tick the checkbox for Public calendar
- Copy the link
- Paste the calendar link in the Homey app settings
- It must be the original link (Apple Calendar has case sensitive urls)
โ
The library used in this app to parse the calendars, node-ical, does NOT
use the X-WR-TIMEZONE
property to parse timezones. Instead it uses the BEGIN:VTIMEZONE
sections to parse timezones!
โ
This means that if your calendar provider only uses the X-WR-TIMEZONE
property, this app will assume your events is always in UTC!
โ
If your events are created with the timezone Customized Time Zone
(you will see this when opening the .ics file in a text editor), the events are most likely created with the correct datetime and should not have a timezone applied. The local timezone will Therefore NOT
be applied to these events!
- Events are fetched automatically every 15th minute (xx:00, xx:15, xx:30, xx:45)
- The following events will be fetched in to the app:
- Events not started yet where start date is within the timeframe given in the setup
- Recurring events where start date is within the timeframe given in the setup
- Events started but not finished
To see a list of synced in events, you can use the condition card Specific event is ongoing
in a flow like this:
- Create a new flow, or use an existing one (your choice)
- Choose the
Flow
->This flow has started
as the trigger in theWHEN
section - In the
AND
section, add theSpecific event is ongoing
card from IcalCalendar- Click
Select event...
in the condition card - This will present you with a list of all the events synced in
- Click
A local event is just local. They will never interact with your calendar externally!
You can use the action card Create local event
to add a local event to one of your calendars in Homey. This local event will live and behave just as a normal event would.
When the event is finished, it will automatically be removed, just as any other event.
โ
If you set Apply your timezone
to True, this will treat the datetimes given as UTC and your timezone difference will be added!
You can use the action card Delete local event by title
to remove any local events containing the title given.
- Event starts - will trigger when any event starts
- Event starts in - will trigger when any event starts in when specified
- Event starts from calendar - will trigger when any event in specified calender starts
- Event ends - will trigger when any event ends
- Event ends in - will trigger when any event ends in when specified
- Event ends from calendar - will trigger when any event in specified calender ends
- Event changed - will trigger when any of the previously synchronized events have been changed (after sync)
- Event added - will trigger when a new event is created in one of your synced calendars
- Will trigger when these requirements are met:
- The event has the
CREATED
property - The created events start time is inside the current datetime frame beeing synced in
- The created event is created within the last 24 hours
- The event has the
- Will trigger when these requirements are met:
- Synchronization error occurred - will trigger when a synchronization error occurs with one of your calendars
These calendar providers do not use (or at least not for all events) the CREATED
property, and so the Event added
trigger will not work for these calendar providers
- Office 365
- Specific event is ongoing - will check if specified event is|isn't ongoing
- Specific event starts within - will check if specified event starts|doesn't start within when specified
- Specific event ends within - will check if specified event ends|doesn't end within when specified
- Any event is ongoing - will check if any event is|isn't ongoing
- Any event starts within - will check if any event starts|doesn't start within when specified
- Any event ends within - will check if any event ends|doesn't ends within when specified
- Any event ongoing in calendar - will check if any event is|isn't ongoing in specified calendar
- Event containing ... in calendar ... starts within - Event containing search value in chosen calendar starts within selected time range (will fill up global tags (containing))
- Event containing ... in calendar ... ends within - Event containing search value in chosen calendar ends within selected time range (will fill up global tags (containing))
- Any event starts within from calendar - will check if any event starts|doesn't start within when specified from specified calendar
- Event containing ... in calendar ... is ongoing - will check if an event containing value in calendar is|isn't ongoing
- Sync calendars - will download new .ics files to update current events
- Create local event - will allow you to create a local event that behaves just as a normal event, but only lives on your Homey (
event is automatically deleted when it's finished
) - Delete local event by title - will remove any local events with this title (
if several local events with this title is found, all of them will be removed!
)
- Event title
- Event description
- Event location
- Event duration
- Event duration (minutes)
- Calendar name
- Status
- Read from X-MICROSOFT-CDO-BUSYSTATUS or MICROSOFT-CDO-BUSYSTATUS
- Meeting URL
- Read from description for
Microsoft Teams
,Apple FaceTime
,Google Meet
and the generic meeting url pattern (----( Video )----\nhttp://meet.url/123-4567-890\n---===---)
- Read from description for
- Start date (only
Event added
) - Start time (only
Event added
) - End date (only
Event added
) - End time (only
Event added
) - Calendar error (only
Synchronization error occurred
) - UID (only
Synchronization error occurred
)
- Next event title
- Next event start date
- Next event start time
- Next event end date
- Next event end time
- Next event duration
- Next event duration (minutes)
- Next event starts in (minutes)
- Next event ends in (minutes)
- Next event description
- Calendar name of next event
- Todays events, title and time
- Todays events (count)
- Tomorrows events, title and time
- Tomorrows events (count)
- Todays events (per calendar)
- Tomorrows events (per calendar)
- Next event title in %calendarname%
- Next event start date in %calendarname%
- Next event start time in %calendarname%
- Next event end date in %calendarname%
- Next event end time in %calendarname%
- Next event description in %calendarname%
- Title (contains)
- Start date (contains)
- Start time (contains)
- End date (contains)
- End time (contains)
- Description (contains)
These tags are used together with condition Event containing ... in calendar ... starts within
OR
Event containing ... in calendar ... ends within. If the condition evaluates to true, these tags will be filled with the event found, and the tags can be used in any action card
- On a recurring event, where one or more participants have declined, that specific event is detached from the recurring event and created as a separate non-recurring event. This can result in two similar events, both have the same name and date.
Visit this tutorial created by @RobHomey for a good summary of the apps possibilities!
- 1.18.4
- Log out total event count aswell as imported event count for a calendar
- Log out
uid
for an event when the property isn't string but object andval
is used to get the string representation - Dependency updates
- 1.18.3
- Fixed a bug where
Event changed
would be triggered when old event property had data but new event property was undefined/null OR vica versa (sync issue)
- Fixed a bug where
- 1.18.2
- Dependency updates
- 1.18.1
- Added Homey Community Topic link: https://community.homey.app/t/app-pro-icalcalendar/80708
- 1.18.0
- Added
Next event description
,Next event description in %calendarname%
andDescription (contains)
as global tokens -> Issue #447 - Added
Event added in calendar
andEvent changed in calendar
triggers -> Issue #447
- Added
- 1.17.0
- Added trigger
Event ends from calendar
-> Issue #444 - Dependency updates
- Added trigger
- 1.16.2
- Added a little more descriptions for
Local events
- Trigger
Event added
when a new local event is added
- Added a little more descriptions for
- 1.16.1
- Added
description
to a local event
- Added
- 1.16.0
- Added possibility for local events -> Issue #442
- Dependency updates
- 1.15.0
- Do not apply local timezone for events created with MS Outlook Custom timezone
Customized Time Zone
. This means that the raw start time set in the calendar file is what will be used
- Do not apply local timezone for events created with MS Outlook Custom timezone
- 1.14.1
- Minimized footprint
- Dependency updates
- 1.14.0
- Fixed support for Homey Pro 2023
- Fixed a cirular dependency "issue"
- settings: Save uri's to settings last to prevent fetching calendars if there's other settings to be saved first
- Remove cron jobs in both
unload
andonUninit
- Try to find and use fallback uri for calendar if calendar is not retrieved. If both uri and fallback uri fails for a calendar,
Synchronization error occurred
will be triggered - Dependency updates
- Fixed support for Homey Pro 2023
- 1.13.2
- Bugfix: Find meeting url's by a generic pattern now actually works...
- 1.13.1
- Find meeting url's by a generic pattern (----( Videogesprek )----\nhttp://meet.url/123-4567-890\n---===---)
- 1.13.0
- Added
Meeting URL
tag to triggers. For now it reads meeting urls for Microsoft Teams, Apple FaceTime and Google Meet from the description field -> Issue #420 - Added tests for
extract-meeting-url
- Dependency updates
- Added
- 1.12.0
- Added
Was ongoing
andOngoing
tags to triggerEvent changed
- Dependency updates
- Added
- 1.11.4
- Dependency updates
- 1.11.3
- Logfix
- If event hasn't registered a timezone, don't use the local timezone from Homey either, for conditions and triggers...
- Dependency updates
- 1.11.2
- Added
uid
to debug output
- Added
- 1.11.1
- Use correct date lookup key to find excluded dates
- 1.11.0
- If event hasn't registered a timezone, don't use the local timezone from Homey either, all the way through
- Dependency updates
- 1.10.0
- Dependency updates
- Added
Status
tag to triggers. For now it reads Freebusy status from Microsoft (X-MICROSOFT-CDO-BUSYSTATUS , MICROSOFT-CDO-BUSYSTATUS) -> Issue #394 - If event hasn't registered a timezone, don't use the local timezone from Homey either
- Show timezone in logged event (when Log all events is active)
- 1.9.0
- Added debug option to log all events to console for better diagnostic reporting
- 1.8.3
- Dependency updates
- 1.8.2
- Some repeating ongoing events were not included -> Issue #380
- Dependency updates
- 1.8.1
- Dependency updates
- Added test for croner
- Updated dependency
node-ical
- Fixes invalid timezones
- 1.8.0
- Added condition
Event containing ... in calendar ... ends within
-> Issue #359 - Fixed inverted titles in condition cards
- Added condition
- 1.7.1
- Bugfix: Catch errors thrown from
node-ical
- Dependency updates
- Bugfix: Catch errors thrown from
- 1.7.0
- Rewritten date/time format to support all tokens (in any layout) from moment.format()
- 1.6.0
- Bugfix: Date format in settings view didn't allow the use of
ddd
ordddd
because the string was forced as uppercase - Bugfix: Date format showed wrong
short
date whenYY
orYYYY
was used as the first date segment - Set correctly locale on all events at import
- Use
long
date format on startStamp, always. This to allow for weekday to be included IF its added to thedate format
- Better documentation for
Date format
section - Dependency and DevDependency updates
- Bugfix: Date format in settings view didn't allow the use of
- 1.5.0
- Properly handle moved recurrence events
- Dependency updates
- Removed sentry in favour for the synchronization error trigger card
- 1.4.1
- Bugfix: Trigger cards could be fired twice at every 15th minute (0, 15, 30, 45)
- This happend because triggering cards was also added to the update schedule. And this was done because the schedule through
node-cron
was buggy. node-cron
has been replaced bycroner
- This happend because triggering cards was also added to the update schedule. And this was done because the schedule through
- Dependency updates
- Bugfix: Trigger cards could be fired twice at every 15th minute (0, 15, 30, 45)
- 1.4.0
- Added condition
Event containing search value in chosen calendar is ongoing
-> Issue #341
- Added condition
- 1.3.1
- Bugfix:
Cannot read properties of undefined (reading 'forEach')
- Bugfix:
- 1.3.0
- Bugfix: Every 15th minute, events wouldn't be evaluated for triggering and tokens wouldn't be updated
- Added tokens
Todays events (count) in
andTomorrows events (count) in
for all calendars
- 1.2.0
- No need to return value in
Promise.resolve
Sync calendars
action card will present synchronization errors in Error flow path in anAdvanced flow
, and through the error banner in a regular flow- Dependency updates
- No need to return value in
- 1.1.4
- Dates must have year as part of the date for TTS to work properly
- 1.1.3
- Improved error handling for trigger
Synchronization error occurred
- Bugfix:
calendar_name
is undefined - Show if error happend
onCalendarLoad
oronEventLoad
- Improved error handling for trigger
- 1.1.0 (1.1.2)
- Next event tags containing as a condition card only
- Added condition
Any event starts within ... from calendar
-> Issue #323
- 1.1.0 (1.1.1)
- Next event tags containing added as a condition card. Settings implementation is disabled and will be removed
- 1.1.0
- Added trigger 'Synchronization error occurred' -> Issue #316
- Translation fix
- Next event tags containing added. Possibility to have a global tag with the next event matching the given search value
- 1.0.7
- Week number event tag were 1 week of since
Moment#week
were used instead ofMoment#isoWeek
- Week number event tag were 1 week of since
- 1.0.6
- Full day events need to have the offset removed (fixed throughout)
- Handle
Customized Time Zone
from Exchange / Live accounts - Dependency updates
- 1.0.5
- Error handling when events are parsed
- Make sure recurrence dates outside the limit will not be included
- Full day events need to have the offset removed
- 1.0.4
- Log which
Timezone
your Homey is using. Since SDK3 is always running in UTC, we have to rely onTimezone
set in your Homey to get the correct datetime on your events. - Log out whole day events (debug purposes)
- Log which
- 1.0.3
- Bugfix:
location
,description
anduid
could also be objects
- Bugfix:
- 1.0.2
exdate
is an invalid array. And since deepClone only clones valid values,exdate
becomes an empty array. To make up for this we have to add the originalexdate
property to the cloned event object
- 1.0.1
- Initalize
sentry
correctly
- Initalize
- 1.0.0
- Updated to SDK3
- Rewritten a bunch for better maintenance
- Tests for almost all code ๐
- 0.15.0
- Dependency updates
- Updated node-ical
- Localized datetime
start
andend
format inEvent changed
- 0.14.3
- Dependency updates
- Bugfix: If a recurrence were found,
newEvent
was overwritten with the recurrence event
- 0.14.2
- Bugfix: Fix misread start when a recurring event had start time set to 00:00 (hopefully this doesn't mess things up...)
- Bugfix: Make sure recurrence override is same day
- 0.14.1
Summary
of an updated calendar event is now evaluated first.- Include recurrence date even when utc date is previous date
- 0.14.0
- Bugfix: Exchange calendars (might be others aswell) do not use the
CREATED
property. Instead they useDTSTAMP
andMETHOD
, but these are treated both as created and as modified timestamp. So from now on only theCREATED
property is taken into account. - Added tokens
Week day
,Month
andDate
to trigger Event added
- Bugfix: Exchange calendars (might be others aswell) do not use the
- 0.13.1
- German and Swedish translation fix
- 0.13.0
- Added trigger 'Event added' -> Issue #273
- Dependency updates
- 0.12.0
- Bugfix:
summary
property of a calendar isn't required - Added
week number
added as a global token
- Bugfix:
- 0.11.0
- Dependency updates
start
,end
andsummary
properties of a calendar is now required. If an event in a calendar is missing one of these, no events will be imported from this calendar, and an error will be printed in the settings page!- Bugfix: Token update can happen in the same second when tokens are beeing flushed because calendars are beeing updated. This is handled now.
- 0.10.1
- Bugfix:
Event time frame
would not be applied when saved along with a calendar change
- Bugfix:
- 0.10.0
- 0.9.3
- Dependency updates
- 0.9.2
- @dirkg173: Fixed German translation
- Bugfix: Excluded whole day events could mistakenly be included anyway
- Added more tests to prevent mistakes
- Dependency updates
- Updated node-ical
- Localized time frame types -> Issue 252?
- Excluded
tests
folder andrenovate.json
from build
- 0.9.1
- Added hint to trigger
Event changed
- Bugfix: Events where a property changed to empty string would not trigger
Event changed
- Added jest for testing
- Dependency updates
- Added hint to trigger
- 0.9.0
- Shrunk footprint of events
- Security dependency update
- Dependency updates
- Added
Event changed
trigger -> Issue 251
- 0.8.2
- Security dependency updates
- 0.8.1
- Dependency updates
- 0.8.0
- Dependency updates
node-ical
updated to 0.13.0- This also fixes (Issue #184)
- 0.7.1
- Bugfix: Only
DATE
events missingDTEND
andDURATION
property is supposed to have a duration for 1 day.DATETIME
events missingDTEND
property is supposed to end on the same day and time asDTSTART
property
- Bugfix: Only
- 0.7.0
- Bugfix: Events missing end date is approximately 1 day long or as long as duration (if present) (RFC5545 3.6.1)
- 0.6.6
- Bugfix: Events missing end date (ongoing indefinitely) would set end date as now and could make Homey trigger 'Event ends' on those events -> Issue #212
node-ical
updated to 0.12.9- Dependency updates
- 0.6.5
- Bugfix: Trigger card 'Event ends in' would not trigger if end time was equal to start time
- Events over multiple days, where today is not start day or end day, will be set as "whole day" in flowtokens
- Dependency updates
- Bugfix: Recurring events crossing over to next day isn't imported -> Issue #218
- 0.6.4
- Bugfix: Homey v5.0.0 returns non-existing app settings differently than Homey v4.x.x
- 0.6.3
- More App store readme cleanup
- Code cleanup
- Bugfix: Flow tokens could cause a crash if calendar names aren't unique
- More readable duration token
- Dependency updates
- 0.6.2
- Dependency updates
- App store readme cleanup
- Updated node-ical to fix the bug
No toISOString function in exdate[name]
- 0.6.1
- Bugfix for Homey versions prior to 4.2.0:
Empty catch block
- Bugfix for Homey versions prior to 4.2.0:
- 0.6.0
- Bugfix: flowtoken_already_exists can be thrown when action card
Sync calendars
is triggered (#201) - Updated node-ical to fix the bug
Unknown RRULE property 'RRULE'
- Added formatted titles to conditions for better readability
- Added formatted titles to triggers for better readability
- Moved
New calendar
button in settings page to calendar section
- Bugfix: flowtoken_already_exists can be thrown when action card
- 0.5.1
- Bugfix: Ongoing regular events were not synced in (#199)
- 0.5.0
- Updated node-ical which should fix the bug 'Unknown RRULE property 'RRULE''
- A separate test tool is created to test IcalCalendar behavior
- Exception handling for node-ical
- 0.4.8
- German translation typo
- Bugfix: Homey.ManagerSettings will return null when app is initially installed
- Bugfix: Custom date format yield invalid date format string (#195)
- Dependency update: Homey and sentry
- 0.4.7
- Enhancement: Sentry property update
- Bugfix: flowtoken_already_exists (#185)
- Bugfix: Uri's without a protocol are allowed (#186)
- 0.4.6
- Bugfix: event.summary can be object (#183)
- Bugfix: Non-Error exception captured with keys: $__type, data (#181)
- Enhancement: Url's with webcal://... is replaced with https://... (#180)
- Enhancement: Url's in settings are now validated (#180)
- Bugfix: Amount value in 'Time frame' shoud be numbers only (#182)
- Bugfix: Amount value in 'Time frame' now expects a number higher than 0 (#182)
- 0.4.5
- Bugfix: Cannot read property 'start' of undefined (#179)
- 0.4.4
- Bugfix: Used values not yet defined (#178)
- 0.4.3
- Added sentry
- 0.4.2
- Bugfix: All regular events are imported -> Issue #170
- New setting to specify time frame for events to be fetched (2 months ahead is the default)
- 0.4.1
- Ical engine (node-ical) updated (minor)
- Legacy calendar support (version < 0.0.5) removed
- Bugfix: Some events had wrong time after DST. Thanks to @MatsAnd
- 0.4.0
- Added support for adding weekday in dateformat in settings
- Added trigger 'Event ends in' -> Issue #149
- Bugfix: Ongoing non recurring events were included, but ongoing recurring events were not -> Issue #152
- Added condition 'Any event ongoing in calendar' -> Issue #151
- Bugfix: Events over multiple days now also includes short date in tags
- Bugfix: Full day events were not included in tomorrows events tag
- Ical engine (node-ical) updated (minor)
- 0.3.0
- Next event tags per calendar can be toggled on/off in settings (default is off). Will add the following tags per calendar:
- Next event title in %calendarname%
- Next event start date in %calendarname%
- Next event start time in %calendarname%
- Next event end date in %calendarname%
- Next event end time in %calendarname%
- Humanized next event duration -> Issue #137
- @RobHomey: Fixed dutch translation
- Next event tags per calendar can be toggled on/off in settings (default is off). Will add the following tags per calendar:
- 0.2.5
- Date and Time format used in the app can now be changed in the settings. If not changed, default is used.
- Added trigger 'Event starts from calendar'
- @dirkg173: Fixed German translation
- 0.2.4
- Specific event conditions made more readable
- Bugfix: Tags for todays and tomorrows events pr calendar were flushed completely every time calendars were synced
- Tags 'Todays events, title and time', 'Tomorrows events, title and time', Todays events (per calendar) and Tomorrows events (per calendar) made more TTS friendly
- @RobHomey: Fixed dutch translation
- 0.2.3
- @RobHomey: Fixed dutch translation
- 0.2.2
- Conditions/Trigger improved by setting amount in minute(s)/hour(s)/day(s)/week(s)
- @RobHomey: Fixed dutch translation
- 0.2.1
- Next event more TTS friendly
- 0.2.0
- Fixed German typo's
- Fixed Dutch typo's
- Bugfix: Hopefully fixed an app crash "Cannot read property 'uris' of undefined"
- Flow card 'Event starts in' changed to enter minutes in free text (number)
- Flow card 'Any event starts within' changed to enter minutes in free text (number)
- Flow card 'Any event ends within' changed to enter minutes in free text (number)
- Flow card 'Event starts within' changed to enter minutes in free text (number)
- Flow card 'Event ends within' changed to enter minutes in free text (number)
- Global tag 'Next event start time' split up to 'Next event start date' and 'Next event start time'
- Global tag 'Next event end time' split up to 'Next event end date' and 'Next event end time'
- 'Next event start date' and 'Next event end date' made more TTS friendly
- 0.1.4
- 0.1.3
- 'Remove button' in Settings now follows language
- Bugfix: Apple calendar failed to load because Apple calendar is case sensative on its url... -> Issue #61
- To fix this in your app, replace the url in Settings page and save
- Dutch translation. Thanks to @RobHomey -> Issue #62
- Dutch translation typo fixes
- 0.1.2
- 0.1.1
- Bugfix: Typo in the Norwegian locale
- Added more choices (timespan) for triggers and conditions
- Added possibility to remove calendars from settings
- Added global flow tags for tomorrows events -> Issue #36
- Todays events and Tomorrows events are now sorted by start time -> Issue #51
- Todays and tomorrows events pr calendar -> Issue #44
- Todays and tomorrows events tags no longer include 'Todays events' and 'Tomorrows events' in the tag value
- 0.1.0
- Added support for Mailfence (DTSTART;VALUE=DATE-TIME / DTEND;VALUE=DATE-TIME)
- Added support for recurring events :D
- Bugfix: Todays events did not show events with end date greater than start date
- Bugfix: Global tags were not proparly set as empty before calendars were set
- Bugfix: Flow tags/triggers were evaluated even before any events existed
- Condition event chooser rewritten
- Event list sorted by start date
- New icon
- 0.0.6
- 0.0.5
- Added support for norwegian language -> Issue #6
- Added action for Sync calendar -> Issue #3
- Added duration tags to trigger 'Event starts' -> Issue #16
- Added trigger 'Event ends' -> Issue #4
- Added conditions 'Any event ends in...' and 'Event ends in...' -> Issue #4
- Added support for multiple calendars -> Issue #17
- Bugfix: "When Homey looses internet and tries to sync calendars, app crashes..." -> Issue #20
- 0.0.4
- Changelog moved out of readme...
- 0.0.3
- Events in condition card is now presented with a date (and time if present) -> Issue #2
- Alert when settings saved -> Issue #9
- Show message in settings if uri fails to load
- Importing only active events. This is a significantly performance improvement! -> Issue #1
- Event list in condition card shows if the event is recurring and/or full day
- 0.0.2:
- Bugfix: "triggerEvents" failed when events were not imported yet
- Bugfix: Tags are validated before set (replacing '\n' or '\r' or null with '')
- Added trigger for any events started
- Bugfix: "Event is ongoing" validated to true when a started event was missing a end time
- Updated README.txt with info from README.md (and make it look good)
- Updated app.json/Description with a really well said sentence of what this app can do
- Changed brandColor
- 0.0.1:
- Initial version
If you like the app, buy me a cup of โ