158 lines
5.5 KiB
Markdown
158 lines
5.5 KiB
Markdown
---
|
|
created: 2025-11-11 16:30
|
|
updated: 2025-11-11 16:30
|
|
---
|
|
# Tasker Routine Reminders Project
|
|
|
|
Standardized Tasker automation project for daily routine reminders with notification buttons that trigger actions.
|
|
|
|
## Project: Routine_Reminders.prj.xml
|
|
|
|
### Naming Conventions
|
|
|
|
**Commands** (used in AutoNotification buttons/filters):
|
|
- Format: `cmd_<action>_<target>`
|
|
- Examples: `cmd_open_skincare_note`, `cmd_mark_skincare_done`
|
|
|
|
**Notification IDs**:
|
|
- Format: `notif_<routine>_<time>`
|
|
- Examples: `notif_skincare_morning`, `notif_exercise_prep`
|
|
|
|
**Profiles**:
|
|
- Time triggers: `Trigger <Routine> Notification`
|
|
- Event listeners: `Event: <Action> <Target>`
|
|
|
|
**Tasks**:
|
|
- Notification display: `Show <Routine> Notification`
|
|
- Actions: `<Action> <Target>` (e.g., `Open Skincare Note`, `Mark Exercise Done`)
|
|
|
|
### Project Structure
|
|
|
|
#### Time-Based Triggers (show notifications at specific times)
|
|
- `Trigger Skincare Notification` → 7:30 AM → Shows skincare reminder
|
|
- `Trigger Exercise Notification` → 11:30 AM → Shows exercise reminder
|
|
|
|
#### Event Listeners (respond to notification button taps)
|
|
- `Event: Mark Skincare Done` → Listens for `cmd_mark_skincare_done` → Marks habit complete + dismisses notification
|
|
- `Event: Mark Exercise Done` → Listens for `cmd_mark_exercise_done` → Dismisses notification
|
|
- `Event: Open Skincare Note` → Listens for `cmd_open_skincare_done` → Opens Obsidian note
|
|
- `Event: Open Exercise Note` → Listens for `cmd_open_exercise_note` → Opens Obsidian note
|
|
|
|
#### Notification Tasks (display the actual notifications)
|
|
- `Show Skincare Notification` → Creates notification with buttons:
|
|
- Button 1: "Open Note" → Sends `cmd_open_skincare_note`
|
|
- Button 2: "Mark Done" → Sends `cmd_mark_skincare_done`
|
|
- `Show Exercise Notification` → Creates notification with buttons:
|
|
- Button 1: "Open Note" → Sends `cmd_open_exercise_note`
|
|
- Button 2: "Mark Done" → Sends `cmd_mark_exercise_done`
|
|
|
|
#### Action Tasks (perform actual actions)
|
|
- `Open Skincare Note` → Opens `Personal/Projects/Skincare/Skincare Morning` in Obsidian
|
|
- `Open Exercise Note` → Opens exercise note in Obsidian
|
|
- `Open Diet Note` → Opens diet note in Obsidian
|
|
- `Mark Skincare Done` → Checks off habit in Loop Habit Tracker + dismisses notification
|
|
- `Mark Exercise Done` → Dismisses notification
|
|
|
|
### How It Works
|
|
|
|
1. **At trigger time** (e.g., 7:30 AM):
|
|
- Profile `Trigger Skincare Notification` activates
|
|
- Runs task `Show Skincare Notification`
|
|
- Notification appears with two buttons
|
|
|
|
2. **When button is tapped**:
|
|
- AutoNotification sends command (e.g., `cmd_open_skincare_note`)
|
|
- Event profile listens for that command (e.g., `Event: Open Skincare Note`)
|
|
- Runs linked task (e.g., `Open Skincare Note`)
|
|
- Opens Obsidian to the correct note
|
|
|
|
3. **When "Mark Done" is tapped**:
|
|
- Sends `cmd_mark_skincare_done` command
|
|
- `Event: Mark Skincare Done` profile catches it
|
|
- Runs `Mark Skincare Done` task
|
|
- Checks off habit in Loop Habit Tracker
|
|
- Dismisses the notification
|
|
|
|
### Adding New Routines
|
|
|
|
To add a new routine (e.g., "Meditation"):
|
|
|
|
1. **Create time trigger profile**:
|
|
- Name: `Trigger Meditation Notification`
|
|
- Trigger: Time (e.g., 7:00 AM)
|
|
- Task: `Show Meditation Notification`
|
|
|
|
2. **Create notification display task**:
|
|
- Name: `Show Meditation Notification`
|
|
- Action: AutoNotification
|
|
- Notification ID: `notif_meditation_morning`
|
|
- Button 1 command: `cmd_open_meditation_note`
|
|
- Button 2 command: `cmd_mark_meditation_done`
|
|
|
|
3. **Create event listener profiles**:
|
|
- `Event: Open Meditation Note` → Listens for `cmd_open_meditation_note`
|
|
- `Event: Mark Meditation Done` → Listens for `cmd_mark_meditation_done`
|
|
|
|
4. **Create action tasks**:
|
|
- `Open Meditation Note` → Opens Obsidian note
|
|
- `Mark Meditation Done` → Marks habit complete + dismisses notification
|
|
|
|
### Dependencies
|
|
|
|
- **AutoNotification** (Joao Apps) - For creating interactive notifications and listening to button commands
|
|
- **Loop Habit Tracker** - For checking off habits
|
|
- **Obsidian** - For opening notes via obsidian:// URLs
|
|
|
|
### Files
|
|
|
|
- `Routine_Reminders.prj.xml` - Main project file (import into Tasker)
|
|
- `Skincare_Demo_Standardized.prj.xml` - Original file before standardization
|
|
- `standardize_tasker_v2.py` - Python script used for standardization
|
|
|
|
### Standardization Script
|
|
|
|
Run `standardize_tasker_v2.py` to:
|
|
- Standardize all naming conventions
|
|
- Link notification buttons to event profiles
|
|
- Add missing event listeners
|
|
- Remove trailing spaces and inconsistencies
|
|
|
|
```bash
|
|
python3 standardize_tasker_v2.py
|
|
```
|
|
|
|
### Import Instructions
|
|
|
|
1. Open Tasker
|
|
2. Long-press Projects tab
|
|
3. Select "Import Project"
|
|
4. Navigate to `Routine_Reminders.prj.xml`
|
|
5. Import
|
|
6. Enable profiles
|
|
|
|
### Tips
|
|
|
|
- Use `cmd_` prefix for all AutoNotification commands (consistency + easy grep)
|
|
- Use `notif_` prefix for all notification IDs (avoids conflicts)
|
|
- Always create event listener profiles for button commands
|
|
- Link event profiles to existing action tasks via `mid0` (task ID)
|
|
|
|
### Troubleshooting
|
|
|
|
**Button doesn't do anything when tapped:**
|
|
- Check that event profile exists for that command
|
|
- Verify command name matches exactly (case-sensitive)
|
|
- Check that event profile is enabled
|
|
- Verify `mid0` in profile points to correct task ID
|
|
|
|
**Notification doesn't appear:**
|
|
- Check time trigger is correct and profile is enabled
|
|
- Verify notification display task is working (run manually)
|
|
- Check AutoNotification permissions
|
|
|
|
**Wrong note opens:**
|
|
- Check Obsidian URL in action task
|
|
- Verify vault name and file path are correct
|
|
- Test URL in browser first
|
|
|