HectorziN - Domótica y Home Assistant
Blog de HectorziN
Volver a todas las entradas

📝🍳¡Añade Recetas Automáticamente! Mejora tu Lista de Compra en Home Assistant (Parte 2)

Si ya seguiste la primera parte de nuestra guía sobre cómo crear una lista de la compra visual e impactante, prepárate porque hoy vamos a llevar la domótica de tu cocina al siguiente nivel. En este tutorial vamos a aprender a integrar recetas automáticas. ¿Qué significa esto? Que con un solo clic podrás visualizar todos los ingredientes de un plato y añadirlos a tu lista de la compra, ya sea uno a uno o todos de golpe.

En YouTube comparto más tutoriales, pruebas y domótica real. Suscribirme

Añade recetas a la lista de la compra con Home Assistant

Vídeo relacionado en YouTube

Video

Inspiración y Créditos

Antes de empezar, es de justicia mencionar que la idea original y la lógica detrás de esta "Lista de la Compra 4.0" pertenece a los compañeros de Aguacatec. Podéis consultar su artículo original con todo el detalle técnico aquí: Domotizar tu lista de la compra 4.0 en Aguacatec.

Esta es la parte 2, pero primero tienes que haber creado esta fantástica lista de la compra, si no lo has hecho todavía consulta primero la Parte 1, creación de la lista de la compra.

Requisitos Previos: Tarjetas de HACS

Para que la interfaz luzca tan profesional y funcional como en el vídeo, necesitaremos tener instaladas las siguientes tarjetas desde HACS (Home Assistant Community Store):

  • Mushroom Cards: Para una estética limpia y botones reactivos.
  • Swipe Card: Ideal para navegar entre recetas de forma táctil.
  • Bubble Card: Para ventanas emergentes (pop-ups) estilizadas.
  • Auto Entities: Para que la lista se actualice sola según lo que tengamos en el carrito.
  • Card Mod: Para personalizar el CSS y que todo encaje a la perfección.

Paso 1. La Base de Datos de Recetas (input_text)

Lo primero es crear un archivo llamado recetas.yaml dentro de tu carpeta de configuración. Aquí definiremos tanto una variable temporal para los ingredientes como cada una de tus recetas.

Usaremos entidades input_text para almacenar esta información. El truco aquí es usar el prefijo shopping_list_recipe_ para que el sistema las encuentre automáticamente.

Añade esto a tu configuración (ej: input_text.yaml):

yaml
# Entidad auxiliar para gestionar los ingredientes seleccionados
ingredients:
  name: "Ingredientes"
  min: 0
  max: 2000

# Ejemplo de Receta: Salmón al horno
shopping_list_recipe_salmon:
  name: "Shopping List-recipe-Salmón al horno"
  initial: "Salmón;Salsa de soja;Miel;Jengibre;Cebollas;Pimiento rojo"

# Ejemplo de Receta: Calamarcitos
shopping_list_recipe_calamarcitos:
  name: "Shopping List-recipe-Calamarcitos patagónicos"
  initial: "Calamarcitos: 500gr;Ajo;Cayena;Perejil"

Paso 2. El Dashboard de Selección de Recetas

Para visualizar las recetas, crearemos un pop-up con un diseño espectacular. Usaremos fotos de los platos como fondo de los botones. Al pulsar una receta, el sistema cargará sus ingredientes en la memoria temporal.

yaml
type: vertical-stack
cards:
  - type: custom:bubble-card
    card_type: pop-up
    hash: '#recipes'
    icon: mdi:pizza
    name: Recetas
  - type: custom:auto-entities
    card:
      type: grid
      columns: 3
    filter:
      template: |-
        {% set ns = namespace(result = []) %}
        {% set recipes = states | selectattr('object_id', 'contains', 'shopping_list_recipe') | list %}
        {% for recipe in recipes -%}
          {%- set name_recipe = (state_attr(recipe.entity_id,'friendly_name')).split("Shopping List-recipe-")[1] -%}
          {%- set recipe_items = states(recipe.entity_id) -%}
          {%- set picture = '/local/shopping_list/recipes/'+ name_recipe +'.jpg' -%}
          {%- set ns.result = ns.result + [{
            'type': 'custom:button-card',
            'name': name_recipe,
            'tap_action': {
              'action': 'custom',
              'custom': '[[[ hass.callService("input_text","set_value",{ entity_id: "input_text.ingredients", value: "'+recipe_items+'"}); window.history.pushState(null,"","#recipes_items"); window.dispatchEvent(new CustomEvent("location-changed"));]]]',
            },
            'styles': {
              'card': [{
                'background-image': 'url("'+picture+'")',
                'background-size': 'cover',
                'color': 'white',
                'text-shadow': '1px 1px 2px black'
              }],
              'name': [{'padding-top': '70%'}]
            }
          }] -%}
        {%- endfor -%}
        {{ ns.result }}

Paso 3. Visualización y Selección de Ingredientes

Una vez seleccionada una receta, se abrirá un segundo pop-up (#recipes_items) donde veremos los ingredientes necesarios. Aquí podemos elegir añadir uno a uno o usar el botón mágico de "Añadir todos".

yaml
type: vertical-stack
cards:
  - type: custom:bubble-card
    card_type: pop-up
    hash: '#recipes_items'
    icon: mdi:food-variant
    name: Ingredientes de la Receta
  - type: custom:auto-entities
    card:
      type: grid
      columns: 3
    filter:
      template: |-
        {% set LISTA = states('input_text.ingredients') %}
        {% set actual_list = states('input_text.lista_compra') %}
        {% for item in LISTA.split(';') -%}
          {%- set product = item.split(':')[0] -%}
          {%- set picture = '/local/shopping_list/'+ product +'.png' -%}
          {{
            {
              'type': 'custom:mushroom-template-card',
              'primary': product,
              'picture': picture,
              'layout': 'vertical',
              'tap_action': {
                'action': 'call-service',
                'service': 'todo.add_item',
                'target': { 'entity_id': 'todo.la_compra' },
                'data': { 'item': product }
              },
              'card_mod': {
                'style': 'ha-card { background: ' + ('linear-gradient(rgba(238,82,79,1),rgba(181,42,39,1))' if product in actual_list else 'none') + '; }'
              }
            }
          }},
        {%- endfor %}
  # Botón para añadir todo lo que falte de golpe
  - type: custom:mushroom-template-card
    secondary: "Añadir todos los ingredientes"
    icon: mdi:all-inclusive-box
    tap_action:
      action: call-service
      service: script.actualiza_ingredientes_receta

Paso 4. El Script Inteligente: "Añadir todo"

Este script es el cerebro. Comprueba qué ingredientes de la receta NO están ya en tu lista para no duplicarlos, y añade solo los que te faltan.

yaml
alias: "Actualiza ingredientes receta"
sequence:
  - service: todo.get_items
    target:
      entity_id: todo.la_compra
    data:
      status: needs_action
    response_variable: incompleted
  - variables:
      items_to_add: >
        {% set current_items = incompleted['todo.la_compra']['items'] | map(attribute='summary') | list %}
        {% set recipe_items = states('input_text.ingredients').split(';') %}
        {% set ns = namespace(to_add=[]) %}
        {% for item in recipe_items %}
          {% if item.split(':')[0] not in current_items and item != "" %}
            {% set ns.to_add = ns.result + [item] %}
          {% endif %}
        {% endfor %}
        {{ ns.to_add | join(';') }}
  - repeat:
      for_each: "{{ (items_to_add).split(';') }}"
      sequence:
        - service: todo.add_item
          target:
            entity_id: todo.la_compra
          data:
            item: "{{ repeat.item }}"

Paso 5: La parte visual (Imágenes)

Para que las recetas entren por los ojos, debemos guardar las fotos de nuestros platos en la carpeta /config/www/recipes/.

IMPORTANTE: El nombre del archivo de imagen debe coincidir exactamente (mayúsculas incluidas) con el nombre que le diste al input_text en el archivo YAML.

¿Cómo funciona en el día a día?

Una vez configurado y tras reiniciar Home Assistant, en tu panel de control verás tus platos favoritos. Al seleccionar uno (como esos calamares o el salmón que tanto me gusta), se desplegarán los ingredientes. Tienes dos opciones:

  1. Añadir uno a uno: Por si ya tienes sal en casa pero te falta el ingrediente principal.
  2. Añadir todo el tirón: Un botón que ejecuta el script y llena tu lista en un segundo.

Conclusión

Mejorar la interfaz de Home Assistant no es solo por estética, es por utilidad real. Con esta integración de recetas, planificar la semana es cuestión de segundos.

Si te ha gustado esta mejora, no olvides revisar el resto de mis vídeos sobre domótica y personalización. ¡Nos vemos en el próximo tutorial!

Video relacionado

CUPONES ALIEXPRESS