Lista de compras no HA

Boas a todos,

Venho aqui dar a conhecer uma funcionalidade que possivelmente muita gente desconhece, e a meu ver é bastante útil. Para além disso é bastante simples de implementar.

shopping_list

A lista é partilhável para todos os utilizadores do HA.
Basta apenas colocar isto que está abaixo no configuration.yaml
shopping_list:

Depois de reiniciar o HA vai aparecer um carrinho de compras no lado esquerdo, é lá onde se atualiza a lista.

menu

Opcionalmente dá para colocar no vosso Lovelace card através do código:
type: shopping-list

Bonus

Nativamente no HA o carrinho não nos diz quantos items tem, e quais são. Não existe forma de saber através do HA. Mas os dados estão guardados num ficheiro no /config por isso, com código simples conseguimos obter esses valores. Deixo abaixo todo o conteúdo

Obter items e contagem

Exemplo de como implementei no meu lovelace:
Menu_LL

Criar um ficheiro .py. No meu caso usei a pasta /config/python_scripts/
nome: shopping_list_count.py

#!/usr/local/bin/python
# coding: utf8
import json
import sys

def main(argv):
    arg = argv[0]

    with open('/config/.shopping_list.json') as data_file:
        shoppingListData = json.load(data_file)

    content = u""
    count = 0
    for entry in shoppingListData:
        if not entry['complete']:
            content += u"\n- %s" % entry['name'].capitalize()
            count += 1

    if arg == "count":
        print(count)
    elif arg == "list":
        print(content)

if __name__ == "__main__":
    try:
    # ARGV
    # count or list
    # Example: python file.py count
        if len(sys.argv) == 2:
            if (sys.argv[1] == "count") or (sys.argv[1] == "list"):
                main(sys.argv[1:2])
            else:
                raise ValueError("Valid arguments: count, list")
        else:
            raise ValueError("Argument required")
    except IndexError:
        raise ValueError("Argument required")

No HA:

sensor:
  - platform: command_line
    name: shopping_list_count
    command: python3 /config/python_scripts/shopping_list_count.py count
  - platform: command_line
    name: shopping_list_items
    command: python3 /config/python_scripts/shopping_list_count.py list

automation:
  - alias: Update shopping list items number
    initial_state: true
    trigger:
      - platform: event
        event_type: shopping_list_updated
    action:
      - service: homeassistant.update_entity
        entity_id: sensor.shopping_list_count
      - service: homeassistant.update_entity
        entity_id: sensor.shopping_list_items

Enviar por notify

Imaginando que um familiar vai às compras e nos faz o favor de fazer as compras por nós, facilmente, envio a lista por notify para o meu telemóvel e reencaminho via mensagem para a pessoa.

lista

Código:

script:
  notify_shopping_list:
    description: "send shopping list"
    sequence:
      - service: notify.<vosso notify>
        data_template:
          title: Lista de compras
          message: >
            {{ states('sensor.shopping_list_items') }}
4 Curtiram

Bom dia
Obrigado pelo tutorial.
Quando faço a validação, no script está a dar o seguinte erro:
Configuração inválida

Error loading /config/configuration.yaml: invalid key: “OrderedDict([(“states(‘sensor.shopping_list_items’)”, None)])” in “/config/packages/shopping.yaml”, line 27, column 0

O código que tenho:

sensor:
  - platform: command_line
    name: shopping_list_count
    command: python3 /config/python_scripts/shopping_list_count.py count
  - platform: command_line
    name: shopping_list_items
    command: python3 /config/python_scripts/shopping_list_count.py list
automation:
  - alias: Update shopping list items number
    initial_state: true
    trigger:
      - platform: event
        event_type: shopping_list_updated
    action:
      - service: homeassistant.update_entity
        entity_id: sensor.shopping_list_count
      - service: homeassistant.update_entity
        entity_id: sensor.shopping_list_items
script:
  notify_shopping_list:
    sequence:
      - service: notify.telegram
        data_template:
          title: lista de compras
          message: {{ states('sensor.shopping_list_items') }}

Onde estará o problema?
Cumprimentos
Sebastião

Isto não está igual ao que eu meti

Obrigado. Está resolvido

Nice, eu estava ver se arranjava era uma solução com integração com o GH.

Que integrações procuras?

Confeso que ainda não procurei muito, estou focado em outras coisas mas eu uso uma app que se chama Bring e tem uma skill pra voice assitant mas o pessoal diz é uma treta…
Funcionalmente, eu diria:

  1. Funcionar em iOS e Android
  2. Funcionar com Google Home (Voice Assistant)
  3. Sync entre devices
  4. Lovelace (non blocker, vivo bem sem isso)

Obrigado @ricreis394 por acaso não percebo como de raiz o HA não permite registar os dados.

No meu já funciona :smiley:

Também uso a app Bring, é muito mais prático porque permite vários utilizadores poderem gerir a lista de compras. Já tenho integrado com o HA as quantidades, os produtos tenho problemas.

Não estou a entender…

  • O shopping_list funciona no HA, logo funciona em android e iOS.
  • Quase de certeza funciona com Google Home, desde que o tenhas integrado no HA. O HA tem um service para adicionar items, podes fazer o google home chamar esse service.
  • Sync: Como está no HA, quem acede está a aceder à informação atualizada

O Google Home já tem capacidade de criar Shopping Lists integrada, a questão é se dá ou não para integrar no HA.

Julgo que a lista da Alexa e a da Google nao permitem integraçao com o HA.
A do HA sempre achei muito fraca, pois nao permitia por exemplo usar os dados para automações.
Ha cerca de um mês conheci a app Bring que é muito boa pois tem sincronismo de produtos com outras pessoas da casa e tem produtos pre-definidos e permite quantidades, ainda só tenho a funcionar as quantidas no carrinho pois ai da não consegui trabalhar os produtos
Tambem testei um addon que permitr fazer a gestao de stock dos produtos em casa, mas achei completo de mais e pouca utilidade para o essencial.

1 Curtiu

Eu uso o OurGroceries que tem versão para Android e iOS (também tem online via browser) com sincronização em tempo real em todos os dispositivos em simultâneo. A app é muito completa e permite associar fotos a produtos, ler códigos de barras, E descobri à poucos dias que tem integração com o HA, embora ainda não tenha tido tempo para testar, e inclui o serviço ourgroceries.add_to_list que permite adicionar produtos via HA (com jeitinho também dará por voz via GH ou Alexa).

https://www.ourgroceries.com/user-guide

1 Curtiu

Fixe, vou checar…

Pergunta bem básica para a maioria de vós, presumo eu: como configurar a shopping list de forma a que, automaticamente, os artigos sejam ordenados por ordem alfabética?

Nativamente o Ha não traz essa função, no entanto é possível. O shopping list guarda os dados num ficheiro na pasta /config, esse ficheiro está no formato json. Se tiveres conhecimentos, existe a possibilidade de criares um script por exemplo em python que reordene a lista. Depois no HA adicionas uma automação que sempre que adiciona um item novo (creio que é lançado um evento) mande correr o script

Obrigado. Calculei que fosse algo relativamente simples. Contudo, (ainda) não tenho os conhecimentos necessários para implementar esta automação. Vou googlar novamente o assunto e esperar que já tenha sido uma necessidade para outros na comunidade…

1 Curtiu

@ricreis394, já tenho o ficheiro py criado, já tenho os sensores e a automação, o resultado quando coloco 2 artigos no carrinho é este:

Depois tenho o cartão assim:

imagem

e para aceder a ele uso o botão:

imagem

que tem este código:

type: 'custom:button-card'
show_entity_picture: true
entity_picture: /local/menu/compras.png
tap_action:
  action: navigate
  navigation_path: compras
hold_action:
  action: toggle
show_icon: true
show_name: true
show_state: true
name: Lista Compras

mas como se vê não aparece o numero de compras no botão… o que me está a faltar?

Muito obrigado

Tens de usar a funcão custom_fields do card

1 Curtiu

@ricreis394

Achas que pode ser assim?

type: 'custom:button-card'
show_entity_picture: true
entity_picture: /local/menu/compras.png
styles:
  grid:
    - position: relative
  custom_fields: null
  notification:
    - background-color: |
        [[[
          if (states['sensor.shopping_list_count'].state == 0)
           return "green";
          return "red"
        ]]]
    - border-radius: 50%
    - position: absolute
    - left: 60%
    - top: 10%
    - height: 20px
    - width: 20px
    - font-size: 8px
    - line-height: 20px
tap_action:
  action: navigate
  navigation_path: compras
hold_action:
  action: toggle
show_icon: true
show_name: true
show_state: true
name: Lista Compras

Coloquei assim e não aparece nada no botão…

Obrigado

o notification deve estar dentro do custom_fields, e não null
E fora dos styles, tens de acrescentar o custom_fields novamente, para saber qual o valor a mostrar.
Vê novamente o exemplo que te enviei

1 Curtiu

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade