diff --git a/CLAUDE.md b/CLAUDE.md index 64f5afe..8890609 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -20,12 +20,21 @@ Runs as one Docker container on the user's Unraid home server. first time, before a settings file exists. - Vacation ranges suppress sends without disabling the schedule — checked fresh on every run via `is_on_vacation()`. -- **Home Assistant integration (2026-09-02):** if `HA_WEBHOOK_URL` is set, - every successful menu fetch also POSTs `{"date": ..., "items": [...]}` to - that webhook, independent of whether the SMS send itself succeeds. An HA - automation (webhook trigger → `calendar.create_event`) turns this into an - all-day calendar event with the menu. This makes the scrape here the - single source of truth — HA doesn't poll or re-scrape anything. +- **Home Assistant integration (2026-09-02, HA side built 2026-09-03):** if + `HA_WEBHOOK_URL` is set, every successful menu fetch also POSTs + `{"date": ..., "items": [...]}` to that webhook, independent of whether + the SMS send itself succeeds. On the HA side (`automation.lunch_menu_family_calendar`, + `http://192.168.86.207:8123`), a `local_only` webhook trigger runs + `calendar.create_event` against `calendar.family`, producing an all-day + event with the menu as the description (bulleted). This makes the + scrape here the single source of truth — HA doesn't poll or re-scrape + anything. The webhook id is a random token that lives only in the + server's `.env` (`HA_WEBHOOK_URL`) and in the automation's trigger + config — never committed here. If the calendar push stops working, + check both ends: `GET /api/integrations` on this app reports whether + `HA_WEBHOOK_URL` is set at all, and `ha_get_automation_traces` on + `automation.lunch_menu_family_calendar` shows whether HA is even + receiving the webhook. - **Manual actions (2026-09-03):** besides "Send Lunch Menu Now" (full job — scrape, HA push, text everyone), the UI has "Push to Calendar Only" (`POST /api/push-calendar` → `push_calendar_only()`, scrape + HA push, no