TandoorRecipes / recipes

Application for managing recipes, planning meals, building shopping lists and much much more!
https://docs.tandoor.dev
Other
5.36k stars 571 forks source link

MCC - Monsieur cuisine connect cooking machine integration #1044

Open tuxuser opened 2 years ago

tuxuser commented 2 years ago

Is your feature request related to a problem? Please describe. The mentioned machine *Monsieur cuisine connect (https://monsieur-cuisine.com) has some (~600) default recipes. It does not allow to import custom recipes officially.

However there are projects that unlock this android-based device and enables patching the cooking application to use a locally / remotely hosted server to provide recipes to the machine.

Further references to this project:

Describe the solution you'd like Import/Export of Monsieur cuisine connect recipes including "machine readable / guidedCooking" steps aka. using scale, speed of mixing, time of step, temperature, mode etc. Possibly even providing the same endpoints the machine needs to fetch recipe data...

Describe alternatives you've considered Started to write own implementation of bulk recipe server with moderate success.

Additional context Here are some endpoints that can be called to fetch recipes from their API.

Available languages are: de, en, it, es, pl, fr, pt, nl

GET http://mc20.monsieur-cuisine.com/mcc/api/v1/recipe/all HTTP/1.1
Accept-Language: de
X-Recipe-Type: beta

###

GET http://mc20.monsieur-cuisine.com/mcc/api/v1/recipe/all HTTP/1.1
Accept-Language: en
X-Recipe-Type: default

###

GET http://mc20.monsieur-cuisine.com/mcc/api/v1/recipe/all HTTP/1.1
Accept-Language: es
X-Recipe-Type: live
Sample of such returned entry ```json { "data": { "id": 25294, "new": 0, "name": "Potato soup with bacon", "tags": [ { "name": "Cuisine German", "category": "other" } ], "unit": "Per portion", "level": 1, "yield": 6, "remove": false, "updated": "2020-07-22T15:40:59+01:00", "version": 1, "download": null, "duration": 20, "language": "en", "originID": "25294EN", "valid_to": null, "imageBase": "https://gos3.io/moncui-recipes-live/bilder/MONSIEUR_CUISINE_CONNECT_Kartoffelsuppe_mit_Speck_/", "imageName": "25294_Rezeptfoto.jpg", "nutrients": [ { "type": "joules", "unit": "kj", "amount": "1428" }, { "type": "calories", "unit": "kcal", "amount": "341" }, { "type": "protein", "unit": "g", "amount": "9" }, { "type": "carbohydrate", "unit": "g", "amount": "28" }, { "type": "fat", "unit": "g", "amount": "22" } ], "yieldUnit": "portions", "complexity": "Easy", "valid_from": null, "machineType": "mc2", "versionTags": [], "instructions": [ "Wash the parsley, shake dry and remove the leaves. Put them into the blender jug and, with the measuring beaker in place, chop for 8 seconds/speed setting 6, then decant.", "Prepare the soup vegetables, peel the carrots and celery, wash the leek thoroughly. Cut the vegetables into roughly sized pieces.", "Peel and quarter the onions.", "Put the vegetables and onion into the blender jug and, with the measuring beaker in place, chop for 10 seconds/speed setting 8. Use the spatula to scrape the pieces down the inside of the blender jug.", "Add the bacon, sugar and olive oil, and, the measuring beaker not inserted, sauté everything using the roast button.", "In the meantime, peel the potatoes and, depending on their size, cut them into quarters or eighths.", "Wash the savoury, pat dry and remove the leaves.", "Put the vegetable stock, the potatoes and savoury into the blender jug with ½ teaspoon of salt and, with the measuring beaker in place, cook for 30 minutes/speed setting 1/100 °C.", "Pour on the cream, add the nutmeg and, with the measuring beaker in place, blend for 30 seconds/speed setting 6.", "Finally, with the measuring beaker in place, bring the soup to the boil again for 3 minutes/speed setting 3/100 °C.", "Season the soup to taste with salt and pepper and serve garnished with parsley.", "TIP\nIf you prefer the soup richer, roll 500 g ground pork into little walnut-sized balls and space them out in the shallow steamer basket. Hang the shallow steamer basket in the deep steamer basket, close and cook the soup as described above. Then put the little meatballs into the soup and allow to infuse in the closed blender jug for 7 minutes." ], "preparations": [], "durationTotal": 60, "guidedCooking": { "steps": [ { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 1, "text": "Wash 4 stalks of savory, pat dry, remove the leaves and put to one side.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 2, "text": "Wash ½ bunch of flat-leaf parsley, shake dry, remove the leaves from the stalks and put into the blender jug.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "cooking", "step": 3, "text": "", "measurement": { "lid": false, "temp": 0, "speed": 6, "weight": 0 }, "machineValues": { "temp": 0, "time": 8, "speed": 6, "weight": 0, "reverse": false } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 4, "text": "Decant the parsley into a bowl.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 5, "text": "Clean and peel 150 g carrots, cut into roughly sized pieces and put into the blender jug.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 150 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 150, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 6, "text": "Clean and peel 150 g celeriac, cut into roughly sized pieces and add.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 150 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 150, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 7, "text": "Clean and wash 50 g leeks, cut into roughly sized pieces and add.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 50 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 50, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 8, "text": "Peel 1 onion (80 g), quarter and add.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 80 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 80, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "cooking", "step": 9, "text": "", "measurement": { "lid": false, "temp": 0, "speed": 8, "weight": 0 }, "machineValues": { "temp": 0, "time": 10, "speed": 8, "weight": 0, "reverse": false } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 10, "text": "Use the spatula to scrape down the inside of the blender jug.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 11, "text": "Add 75 g diced smoked bacon.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 75 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 75, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 12, "text": "Add 1 pinch of brown sugar and 4 tbsp olive oil.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 13, "text": "Remove the measuring beaker from the lid.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 14, "text": "Place a bowl on top of the blender jug and weigh in 1000 g primarily waxy potatoes.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 1000 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 1000, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 15, "text": "During the next step, peel and wash the potatoes and, depending on their size, cut them into quarters or eighths. Set aside.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "roasting", "step": 16, "text": "", "measurement": { "lid": false, "temp": 130, "speed": 1, "weight": null }, "machineValues": { "temp": 130, "time": 420, "speed": 1, "weight": null, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 17, "text": "Put 1000 g vegetable stock at room temperature into the blender jug.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 1000 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 1000, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 18, "text": "Add the potatoes, savory and ½ tsp salt.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 19, "text": "Insert the measuring beaker into the lid.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "cooking", "step": 20, "text": "", "measurement": { "lid": false, "temp": 100, "speed": 1, "weight": 0 }, "machineValues": { "temp": 100, "time": 1800, "speed": 1, "weight": 0, "reverse": false } }, { "led": { "color": "green", "action": "steady" }, "mode": "scale", "step": 21, "text": "Add 200 g cream at room temperature and 2 big pinches of nutmeg.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 200 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 200, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "cooking", "step": 22, "text": "", "measurement": { "lid": false, "temp": 0, "speed": 6, "weight": 0 }, "machineValues": { "temp": 0, "time": 30, "speed": 6, "weight": 0, "reverse": false } }, { "led": { "color": "green", "action": "steady" }, "mode": "cooking", "step": 23, "text": "", "measurement": { "lid": false, "temp": 100, "speed": 3, "weight": 0 }, "machineValues": { "temp": 100, "time": 180, "speed": 3, "weight": 0, "reverse": false } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 24, "text": "Season the soup with salt and pepper.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } }, { "led": { "color": "green", "action": "steady" }, "mode": "cooking", "step": 25, "text": "", "measurement": { "lid": false, "temp": 0, "speed": 2, "weight": 0 }, "machineValues": { "temp": 0, "time": 10, "speed": 2, "weight": 0, "reverse": false } }, { "led": { "color": "green", "action": "steady" }, "mode": "instruction", "step": 26, "text": "Serve the potato soup garnished with parsley.", "measurement": { "lid": false, "temp": 0, "speed": 0, "weight": 0 }, "machineValues": { "temp": 0, "time": 0, "speed": 0, "weight": 0, "reverse": true } } ] }, "schemeVersion": 1, "machineVersion": 2, "ingredientsBases": [ { "name": "", "ingredients": [ { "name": "½ bunch of flat-leaf parsley", "unit": "", "amount": "" }, { "name": "1 bunch of vegetables (150 g carrots, 150 g celery, 50 g leeks)", "unit": "", "amount": "" }, { "name": "1 onion (80 g)", "unit": "", "amount": "" }, { "name": "75 g diced smoked bacon ", "unit": "", "amount": "" }, { "name": "1 pinch of brown sugar", "unit": "", "amount": "" }, { "name": "4 tbsp olive oil", "unit": "", "amount": "" }, { "name": "1 kg primarily waxy potatoes", "unit": "", "amount": "" }, { "name": "4 stalks of savoury", "unit": "", "amount": "" }, { "name": "1 l vegetable stock at room temperature", "unit": "", "amount": "" }, { "name": "½ tsp salt", "unit": "", "amount": "" }, { "name": "200 ml cream (30% fat)", "unit": "", "amount": "" }, { "name": "2 big pinches of nutmeg", "unit": "", "amount": "" }, { "name": "pepper to taste", "unit": "", "amount": "" } ] } ] } } ```
vabene1111 commented 2 years ago

awesome thanks, as discussed on discord this will not be a priority but i can see how it could technically be integrated and i am looking forward to trying this out one day

smilerz commented 2 years ago

+Annova sous vide integration. existing project exists:

https://github.com/ammarzuberi/pyanova-api