Fix Mealie madplan: REST response for stor (16KB+) til HA attributes
- Nyt Python-script henter fra Mealie API og gemmer forenklet JSON (754 bytes) til /config/www/mealie.json (kun dato, navn, slug per opskrift) - REST sensor peger nu på lokal fil via http://localhost:8123/local/mealie.json - shell_command + automation opdaterer filen hvert 30. minut og ved opstart - Løser 'Ingen planlagt' og 'buttoncardtemplateerror' i dashboard
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
|||||||
2026.4.1
|
2026.4.3
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
- id: mealie_update_mealplan
|
||||||
|
alias: "Mealie opdater madplan"
|
||||||
|
trigger:
|
||||||
|
- platform: homeassistant
|
||||||
|
event: start
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: "/30"
|
||||||
|
action:
|
||||||
|
- service: shell_command.mealie_update
|
||||||
@@ -1,13 +1,7 @@
|
|||||||
- platform: rest
|
- platform: rest
|
||||||
name: mealie_madplan_ugen
|
name: mealie_madplan_ugen
|
||||||
resource_template: >-
|
resource: "http://localhost:8123/local/mealie.json"
|
||||||
http://10.0.0.142:9925/api/households/mealplans?start_date={{ now().strftime('%Y-%m-%d') }}&end_date={{ (now() + timedelta(days=6)).strftime('%Y-%m-%d') }}
|
|
||||||
headers:
|
|
||||||
Authorization: !secret mealie_bearer_token
|
|
||||||
Content-Type: application/json
|
|
||||||
method: GET
|
|
||||||
scan_interval: 1800
|
scan_interval: 1800
|
||||||
value_template: "{{ value_json['items'] | default([]) | length }}"
|
value_template: "{{ value_json.count }}"
|
||||||
json_attributes_path: "$"
|
|
||||||
json_attributes:
|
json_attributes:
|
||||||
- items
|
- items
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
mealie_update: "python3 /config/python_scripts/mealie_mealplan.py"
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Fetch Mealie meal plan and save simplified JSON for HA REST sensor."""
|
||||||
|
import json, urllib.request, datetime, os
|
||||||
|
|
||||||
|
# Read bearer token from secrets.yaml
|
||||||
|
token = None
|
||||||
|
with open('/config/secrets.yaml') as f:
|
||||||
|
for line in f:
|
||||||
|
if line.strip().startswith('mealie_bearer_token:'):
|
||||||
|
token = line.split(':', 1)[1].strip().strip('"')
|
||||||
|
break
|
||||||
|
|
||||||
|
if not token:
|
||||||
|
data = {"count": 0, "items": []}
|
||||||
|
else:
|
||||||
|
today = datetime.date.today()
|
||||||
|
end = today + datetime.timedelta(days=6)
|
||||||
|
url = f"http://10.0.0.142:9925/api/households/mealplans?start_date={today}&end_date={end}"
|
||||||
|
|
||||||
|
try:
|
||||||
|
req = urllib.request.Request(url, headers={"Authorization": token})
|
||||||
|
raw = json.loads(urllib.request.urlopen(req, timeout=10).read())
|
||||||
|
items = [
|
||||||
|
{
|
||||||
|
"date": i["date"],
|
||||||
|
"recipe": {
|
||||||
|
"name": i.get("recipe", {}).get("name", ""),
|
||||||
|
"slug": i.get("recipe", {}).get("slug", ""),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for i in raw.get("items", [])
|
||||||
|
if i.get("recipe")
|
||||||
|
]
|
||||||
|
data = {"count": len(items), "items": items}
|
||||||
|
except Exception:
|
||||||
|
data = {"count": 0, "items": []}
|
||||||
|
|
||||||
|
os.makedirs('/config/www', exist_ok=True)
|
||||||
|
with open('/config/www/mealie.json', 'w') as f:
|
||||||
|
json.dump(data, f)
|
||||||
|
print("OK")
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"count": 7, "items": [{"date": "2026-04-19", "recipe": {"name": "Cheeseburger Tacos", "slug": "cheeseburger-tacos"}}, {"date": "2026-04-20", "recipe": {"name": "Lasagne", "slug": "lasagne"}}, {"date": "2026-04-24", "recipe": {"name": "Fiskefrikadeller med remoulade og r\u00e5kost", "slug": "fiskefrikadeller-med-remoulade-og-rakost"}}, {"date": "2026-04-25", "recipe": {"name": "Cheeseburger Tacos", "slug": "cheeseburger-tacos"}}, {"date": "2026-04-23", "recipe": {"name": "K\u00e5lfad med hakket oksek\u00f8d", "slug": "kalfad-med-hakket-oksekod"}}, {"date": "2026-04-22", "recipe": {"name": "Frikadeller", "slug": "frikadeller"}}, {"date": "2026-04-21", "recipe": {"name": "Kylling i cremet sennepssauce", "slug": "kylling-i-cremet-sennepssauce"}}]}
|
||||||
Reference in New Issue
Block a user