Grocery
Beacon integrates with Grocy and AnyList through Home Assistant to display and manage your grocery shopping lists. You can view items, add new ones, check them off, and see alerts for expiring products.
How the integration works
Beacon tries two grocery sources in order:
- Grocy: If the
sensor.grocy_shopping_listentity exists and has items, Grocy is used - AnyList: If Grocy is not available, Beacon looks for
todo.anylist_*entities - None: If neither is available, the grocery drawer shows a message to connect a service
The source detection happens automatically — you do not need to configure which service to use.
Grocy integration setup
Grocy is a self-hosted groceries and household management solution. To use it with Beacon:
Step 1: Install Grocy
If you do not already have Grocy running:
- Install the Grocy add-on from the Home Assistant Add-on Store
- Start the add-on and complete the initial Grocy setup through its web UI
- Add some products and a shopping list
Step 2: Install the Grocy integration in Home Assistant
- Go to Settings > Devices & Services
- Click Add Integration
- Search for Grocy
- Enter your Grocy URL and API key (found in Grocy’s settings)
- Click Submit
Step 3: Verify the entities
After the integration is set up, verify these entities exist:
sensor.grocy_shopping_list— your shopping list itemssensor.grocy_expiring_products— products nearing their best-before datesensor.grocy_meal_plan— your meal plan (optional)
Check in Developer Tools > States by searching for “grocy”.
Step 4: Open Beacon
Navigate to the Grocery view (shopping cart icon in the sidebar). You should see your Grocy shopping list with a “via Grocy” label.
AnyList integration setup
AnyList is a popular shared grocery list app. Since AnyList has no official public API, the integration works through a custom Home Assistant integration.
Step 1: Install the AnyList integration
- Install the AnyList custom component via HACS (Home Assistant Community Store)
- Restart Home Assistant
- Go to Settings > Devices & Services
- Click Add Integration
- Search for AnyList
- Enter your AnyList email and password
- Click Submit
Step 2: Verify the entities
The integration creates todo.anylist_* entities for each of your AnyList lists:
todo.anylist_grocery— your main grocery listtodo.anylist_costco— other lists you have in AnyList
Step 3: Open Beacon
Navigate to the Grocery view. You should see your AnyList items with a “via AnyList” label. Beacon uses the first discovered AnyList entity as the primary list.
Using the shopping list
Opening the grocery view
Click the shopping cart icon in the sidebar. On mobile, tap More then Grocery.
The grocery drawer shows:
- Handle bar: Tap to expand/collapse. Shows the “Grocery” label, unchecked item count badge, and source indicator
- Quick-add input: A text field to add new items
- Expiring items alert: A yellow alert bar when products are nearing expiration (Grocy only)
- Shopping list: All items sorted with unchecked items first, then checked items, alphabetically within each group
Quick-add items
- Tap the text input at the top of the list
- Type the item name (e.g., “Milk”)
- Tap Add or press Enter
- The item is added to your shopping list and synced to Grocy/AnyList
Checking off items
- Tap any item in the list
- If unchecked, it becomes checked (moves to the bottom of the list with a checkmark)
- If already checked, tapping unchecks it (moves back to the top)
Updates are optimistic — the UI updates immediately while the API call happens in the background.
Item details
Each item may show:
- Name: The item name
- Quantity: Number or amount (if set in Grocy/AnyList)
- Category: Product category or group (if available)
Expiring items alerts
When using Grocy, Beacon checks for products expiring within the next 3 days. If any are found:
- A yellow alert bar appears at the top of the grocery list
- The alert shows the count and names of the first 3 expiring items
- Example: “3 items expiring soon: Milk, Yogurt, Eggs…”
This feature is only available with Grocy (AnyList does not track expiration dates).
Meal plan display
When using Grocy with a meal plan configured, Beacon can display today’s planned meals. The meal plan bar shows:
- Meal type: Breakfast, Lunch, or Dinner
- Recipe name: The planned recipe
- Notes: Any additional notes
The meal plan data is fetched from sensor.grocy_meal_plan and filtered to the current day. The bar is collapsible — tap it to collapse to a small icon, tap again to expand.
Meal types are mapped from Grocy’s section labels:
- Sections containing “breakfast” or “morning” map to Breakfast
- Sections containing “lunch” or “noon” map to Lunch
- Everything else maps to Dinner
Data refresh
- The grocery list refreshes automatically every 2 minutes
- Adding, checking, or unchecking an item triggers an immediate refresh
- The expiring products alert refreshes with the list
- The meal plan refreshes every 5 minutes
Troubleshooting
”Connect Grocy or AnyList in Home Assistant to see your lists”
This message appears when Beacon cannot find either a Grocy or AnyList integration. Verify:
- The Grocy integration is set up and
sensor.grocy_shopping_listexists in HA - OR the AnyList integration is set up and
todo.anylist_*entities exist - Beacon is connected to Home Assistant (no “Connecting…” badge)
Items do not sync back to the app
Beacon uses Home Assistant’s REST API to communicate with Grocy/AnyList. Check:
- The Home Assistant token is valid
- The Grocy/AnyList integration is functioning (check Developer Tools > States for the entity)
- Open the browser console (F12) and look for “Beacon: Failed to…” error messages
Expiring items alert does not appear
- Verify
sensor.grocy_expiring_productsexists in Home Assistant - Ensure products in Grocy have best-before dates set
- The alert only shows products expiring within the next 3 days
AnyList shows wrong list
Beacon uses the first todo.anylist_* entity it discovers. If you have multiple AnyList lists, the one that appears depends on the order HA returns entities. To ensure the correct list is used, you may need to rename entities in HA.
Quick-add does nothing
- Make sure the input is not empty (whitespace-only is rejected)
- Check the browser console for errors
- Verify the underlying service (
grocy.add_genericortodo.add_item) works by calling it from Developer Tools > Services in HA