Guardar consumos em excel

Olá a todos. Antes de mais, dizer que já pesquisei bastante sobre o tema e já vi imensos tutoriais aqui no fórum (e bem porreiros) de criar gráficos de apresentação de consumos, etc.

A minha questão é que ainda não encontrei bem aquilo que pretendo, mas julgo inclusive que poderão haver partes desses tutoriais que poderão ser usadas para o que pretendo.

Ora, tenho algumas tomadas com leituras dos consumos onde se pode verificar os consumos na app. O que pretendo é de uma forma geral guardar os registos com uma periodicidade a definir. Gostaria de guardar num ficheiro Excel ou noutro que possa exportar os registos para excel. Isto porque entendo que será a melhor forma para arquivar históricos e trabalhar os números quando chega a altura de o fazer.

Alguém com alguma ideia para dar um pontapé de saída a esta ideia?

Obrigado

Viva,

Eu faço isso da seguinte maneira:

  • dentro do HA guardo os dados numa base de dados MariaDB
  • acedo à base de dados via ODBC, numa folha Excel
  • e já tenho os dados disponeis

Com toda a certeza, haverá outras formas, eventualmente mais práticas e eficazes de fazer isto.

Mas de momento, para as minhas necessidades, desta forma vou garantindo o processo.

1 Curtiu

Apoio esta solução, simples e funcional

Obrigado @bbaixo pela resposta!

Já estive a pesquisar um pouco o tema, nomeadamente termos para mim desconhecidos: “MariaDB” e “ODBC”.

Dada a minha ignorância no tema, queria perguntar-te algumas coisas:
1 - Pelo que percebi tens de colocar código para especificares quais os parâmetros que queres registar
2 - Outro ponto que é importante definir é a periodicidade. Aqui a situação complica-se porque no caso das leituras de consumo, queria definir uma periodicidade mais alargada em alguns dos registos, mas não sei se ele faz integração ao longo do período, ou se tira apenas uma leitura instantânea
3 - Podes partilhar um exemplo da integração no HA?
4 - Isso do ODBC, o que é na prática ou como é que acabas por ler no excel?

Obrigado

Viva Marcos,

Por partes:

  • MariaDB é uma base de dados com addon do HA - instala usando o supervisor

  • Instala também o add-on phpMyAdmin p/ poderes aceder e configurar as base de dados/tabelas

  • Tens que criar a bd e a tabela:

  • A periodicidade é definida na automação

Exemplo de automação:

  ## AUTOMAÇÕES PARAR GUARDAR DADOS DE FIT
  automation:

    # Contador dados do relógio
    - id: FIT | Guardar dados 1x ao dia
      alias: mariaDB | Guarda dados 1x ao dia - 23h59
      trigger:
      - hours: '23'
        minutes: '59'
        seconds: '00'
        platform: time_pattern
      action:
        - data_template:
            table: tbl_dados_fit
            atleta: '{{ 100 }}' 
            calorias: '{{ ( states.sensor.google_fit_calories.state | float ) | round (2) }}'
            distancia: '{{ ( states.sensor.google_fit_distance | float ) | round (2) }}'
            pulsacao: '{{ ( states.sensor.google_fit_heart_rate | float ) | round (2) }}'
            tempo_movimento: '{{ ( states.sensor.google_fit_move_time | int ) }}'
            tempo_sono: '{{ ( states.sensor.google_fit_move_time | int ) }}'
            passos: '{{ ( states.sensor.google_fit_steps | float ) | round (2) }}'
            peso: '{{ ( states.sensor.google_fit_weight | float ) | round (2) }}'
          service: shell_command.script_insert_tbl_dados_fit

É necessário definir um shell_command, que basicamente faz a chamada à base de dados e insere os dados:

  shell_command:
    ### IMPLEMENTAÇAO REGISTO DE DADOS FIT EM MARIADB
    script_insert_tbl_dados_fit: "python3 /config/python_scripts/script_insert_tbl_dados_fit.py --host=core-mariadb --userxxxxxx --password=xxxxxx --db=bd_dados_fit --table={{ table }} --atleta={{ atleta }} --calorias={{ calorias }} --distancia={{ distancia }} --pulsacao={{ pulsacao }} --passos={{ passos }} --peso={{ peso }} --tempo_movimento={{ tempo_movimento }} --tempo_sono={{ tempo_sono }}"
  • É necessário criar um script (e colocar na pasta python_scripts com extensão .py)
#!/usr/local/bin/python
# coding: utf8
import datetime
import argparse
## on homeassistant container:
## pip install pymysql
import pymysql
import warnings

def main(args):
  with warnings.catch_warnings():
    warnings.simplefilter("ignore")

    dt = datetime.datetime.today()

    connection = pymysql.connect(
      host=args.host,
      user=args.user,
      password=args.password,
      db=args.db,
      charset="utf8mb4",
      cursorclass=pymysql.cursors.DictCursor
    )

    try:
      with connection.cursor() as cursor:

        sql = "INSERT INTO `tbl_dados_fit` (`date`, `atleta`, `calorias`, `distancia`, `pulsacao`, `tempo_movimento`, `tempo_sono`, `passos`, `peso`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s);"##.format(table=args.table)
        sql_data = (dt.strftime("%Y-%m-%d %H:%M"), args.atleta, args.calorias, args.distancia, args.pulsacao, args.tempo_movimento, args.tempo_sono, args.passos, args.peso)
        cursor.execute(sql, sql_data)
      
      connection.commit()

    finally:
      connection.close()


if __name__ == "__main__":
  parser = argparse.ArgumentParser(description="Insert kWh value of current day to mariadb database. This creates table if not exists.")
  parser.add_argument('--host', type=str, required=True, help='REQUIRED: DB Host')
  parser.add_argument('--user', type=str, required=True, help='REQUIRED: DB User')
  parser.add_argument('--password', type=str, required=True, help='REQUIRED: DB Password')
  parser.add_argument('--db', type=str, required=True, help='REQUIRED: DB Name')
  parser.add_argument('--table', type=str, required=True, help='REQUIRED: DB Table')
  parser.add_argument('--atleta', type=float, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--calorias', type=float, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--distancia', type=float, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--pulsacao', type=float, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--tempo_movimento', type=int, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--tempo_sono', type=float, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--passos', type=float, required=False, help='REQUIRED: Value to insert')
  parser.add_argument('--peso', type=float, required=False, help='REQUIRED: Value to insert')
  args = parser.parse_args()
  
  try:
    main(args)
  except IndexError:
    raise ValueError("Argument required")
  • ODBC - é um conetor que liga o Excel ao mariaDB para consulta/edição dos dados. Há um driver especifico para o MariaDB
    image

De um forma mt resumida, é desta forma que tenho isto implementado.

Isto não pretende, nem de longe nem de perto, ser um tutorial. Servirá para, eventualmente, dar pistas de como fazer.

1 Curtiu

@mqdias https://youtu.be/VWPU95ISnO0

1 Curtiu

Bem mais simples.

Boa @RodolfoVieira


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


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