cagos

Mealie 7 day mealplan

Nov 2nd, 2024
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.03 KB | None | 0 0
  1. [{"id":"7db40e8d57326004","type":"comment","z":"d949716c4424dbaa","name":"Simpelt flow med et måltid pr. dag","info":"","x":150,"y":60,"wires":[]},{"id":"7aff161202e88543","type":"inject","z":"d949716c4424dbaa","name":"Every 5min","props":[{"p":"payload"}],"repeat":"300","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":140,"wires":[["b26099d7d77b0762"]]},{"id":"b26099d7d77b0762","type":"function","z":"d949716c4424dbaa","name":"Finder start og end date","func":"// Beregn start- og slutdatoer\nlet today = new Date();\nlet startDate = today.toISOString().split(\"T\")[0]; // Konverter til \"YYYY-MM-DD\" format\n\nlet endDate = new Date(today);\nendDate.setDate(today.getDate() + 6);\nendDate = endDate.toISOString().split(\"T\")[0]; // Konverter til \"YYYY-MM-DD\" format\n\n// Sæt payload til det format, action noden har brug for\nmsg.payload = {\n config_entry_id: \"4L92W8KLPQ7DG93BX9ZNFC\",\n start_date: startDate,\n end_date: endDate\n};\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":140,"wires":[["a1adf59d154bca10"]]},{"id":"a1adf59d154bca10","type":"api-call-service","z":"d949716c4424dbaa","name":"Henter mealplan","server":"dbc114b2.7c0368","version":7,"debugenabled":false,"action":"mealie.get_mealplan","floorId":[],"areaId":[],"deviceId":[],"entityId":[],"labelId":[],"data":"{\"config_entry_id\":\"{{payload.config_entry_id}}\",\"start_date\":\"{{payload.start_date}}\",\"end_date\":\"{{payload.end_date}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"queue":"all","blockInputOverrides":false,"domain":"mealie","service":"get_mealplan","x":520,"y":140,"wires":[["00163793dda3fd23"]]},{"id":"00163793dda3fd23","type":"function","z":"d949716c4424dbaa","name":"Finder data og fordeler på dage","func":"// Få måltidsplaner fra payload\nlet mealplans = msg.payload.mealplan;\n\n// Opsæt dagens dato med tid sat til midnat (00:00) for at kunne sammenligne kun datoer\nlet today = new Date().setHours(0, 0, 0, 0);\n\n// Objekt til at gruppere måltider efter dag (baseret på forskel i dage fra i dag)\nlet groupedByDate = {};\n\n// Initialiser alle 7 dage frem med tomme strukturer, selv hvis der ikke er data\nfor (let i = 0; i <= 6; i++) {\n let date = new Date(today);\n date.setDate(date.getDate() + i);\n groupedByDate[i] = {\n date: date.toISOString().split('T')[0], // Formater datoen som 'YYYY-MM-DD'\n meal: null // Placeholder for dagens måltid\n };\n}\n\n// Gennemgå hver måltidsplan i inputdata\nmealplans.forEach(meal => {\n // Konverter måltidsdato til et sammenligneligt format med tid sat til midnat\n let mealDate = new Date(meal.mealplan_date).setHours(0, 0, 0, 0);\n \n // Beregn forskellen i dage mellem dagens dato og måltidsdato\n let dayDiff = Math.round((mealDate - today) / (1000 * 60 * 60 * 24));\n \n // Filtrér kun måltider inden for de næste 7 dage (0-6 dage frem)\n if (dayDiff >= 0 && dayDiff <= 6) {\n // Opret et `mealData` objekt med de nødvendige felter (uden `original_url`)\n groupedByDate[dayDiff].meal = {\n recipe_id: meal.recipe ? meal.recipe.recipe_id : null,\n name: meal.recipe ? meal.recipe.name || meal.title : meal.title,\n slug: meal.recipe ? meal.recipe.slug : null,\n note: meal.description || null,\n image: meal.recipe ? meal.recipe.image : null\n };\n }\n});\n\n// Konverter `groupedByDate` til `messages` formatet\nlet messages = Object.keys(groupedByDate).map(day => {\n return {\n payload: {\n day: parseInt(day), // Dagnummer i forhold til i dag\n date: groupedByDate[day].date, // Datoen\n meal: groupedByDate[day].meal // Måltidsdata, eller `null` hvis intet måltid\n }\n };\n});\n\n// Returnér det endelige resultat som en liste af beskeder, klar til næste trin i Node-RED flowet\nreturn [messages];\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":140,"wires":[["bb2fb46a5506938b"]]},{"id":"bb2fb46a5506938b","type":"switch","z":"d949716c4424dbaa","name":"dag","property":"payload.day","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"6","vt":"str"}],"checkall":"true","repair":false,"outputs":7,"x":950,"y":140,"wires":[["ac16982e6d4116a3"],["1ea60868aaafb8e8"],["20329e8addcdd2e7"],["0edd9cc4e13128ac"],["d8f4f6129bf1909c"],["73d9054e5b46e115"],["ea81abae65b98529"]]},{"id":"ac16982e6d4116a3","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":100,"wires":[["1220f69665e194f3"]]},{"id":"1ea60868aaafb8e8","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":160,"wires":[["1396a4f8330f1002"]]},{"id":"20329e8addcdd2e7","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":220,"wires":[["0f8a9567ea54469a"]]},{"id":"0edd9cc4e13128ac","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":280,"wires":[["afda9130da63809c"]]},{"id":"d8f4f6129bf1909c","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":340,"wires":[["9463d6c58d26e785"]]},{"id":"73d9054e5b46e115","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":400,"wires":[["5803f116c44c2021"]]},{"id":"ea81abae65b98529","type":"function","z":"d949716c4424dbaa","name":"msg. til sensor","func":"// Hent måltidsdata fra `msg.payload`\nlet payload = msg.payload;\n\n// Direkte reference til måltidet, da vi kun har ét måltid pr. dag\nlet meal = payload.meal || {}; // Hvis meal er tom, brug et tomt objekt\n\n// Opret msg med separate felter, og sæt `null` hvis feltet er tomt eller ikke eksisterer\nmsg.name = meal.name || null;\nmsg.slug = meal.slug || null;\nmsg.id = meal.recipe_id || null; // Brug recipe_id som id\nmsg.note = meal.note || null;\nmsg.date = payload.date || null;\n\n// Returnér én samlet msg med de ønskede felter som properties\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":460,"wires":[["57f2aedcbe466ff7"]]},{"id":"1220f69665e194f3","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal0","entityConfig":"8dce1b36f0b94cbe","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":100,"wires":[[]]},{"id":"1396a4f8330f1002","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal1","entityConfig":"3687fcf2aefd3139","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":160,"wires":[[]]},{"id":"0f8a9567ea54469a","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal2","entityConfig":"f556b7090495a129","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":220,"wires":[[]]},{"id":"afda9130da63809c","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal3","entityConfig":"6ea46950d8aff002","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":280,"wires":[[]]},{"id":"9463d6c58d26e785","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal4","entityConfig":"da5e38828d58ec46","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":340,"wires":[[]]},{"id":"5803f116c44c2021","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal5","entityConfig":"d8eeb5c41f4aa6f3","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":400,"wires":[[]]},{"id":"57f2aedcbe466ff7","type":"ha-sensor","z":"d949716c4424dbaa","name":"Meal6","entityConfig":"02bfe4f35911236b","version":0,"state":"name","stateType":"msg","attributes":[{"property":"name","value":"name","valueType":"msg"},{"property":"id","value":"id","valueType":"msg"},{"property":"slug","value":"slug","valueType":"msg"},{"property":"date","value":"date","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":460,"wires":[[]]},{"id":"dbc114b2.7c0368","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"8dce1b36f0b94cbe","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal0","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"meal0"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"3687fcf2aefd3139","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal1","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"meal1"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"f556b7090495a129","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal2","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Meal2"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"6ea46950d8aff002","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal3","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Meal3"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"da5e38828d58ec46","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal4","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Meal4"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"d8eeb5c41f4aa6f3","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal5","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Meal5"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"02bfe4f35911236b","type":"ha-entity-config","server":"dbc114b2.7c0368","deviceConfig":"","name":"Meal6","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Meal6"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false}]
Tags: Mealie
Advertisement
Add Comment
Please, Sign In to add comment