Datos de tu coche en HomeAsssistant con ayuda de la app Fuelio

Introduccion

Con este tutorial vamos a llevar los datos de consumo y gastos de nuestro coche al frontend de Homeassistant. Lo primero que tengo que aclarar es la mecánica de como se va a realizar, ya que hay que cumplir unos requisitos previos, todos los damos tenemos que recogerlos en una app en el movil, la app se llama Fuelio y está disponible sólo para la plataforma Android, podeis descargarla y probarla desde la tienda de Google Play, es gratuita; desconozco si en el futuro saldrá para ios.

La app Fuelio

La aplicación es muy fácil de usar, tienes que meter primero tu coche y los kilometros actuales, además del resto de datos de el que quieras tener organizados y guadados. Cuando repostes combustible lo haces con el botón + y vas rellenando todos los datos, de esta manera la app va guardando el registro y va sacando estadísticas de todo. También puedes meter otro tipo de gastos relacionados con el coche, como averías, peajes, impuestos y todo lo que quieras, aunque eso no será tratado en este tutorial ya que sería demasiado amplio, y lo dejamos para que cada uno si quiere que lo adapte/amplie a su gusto.

 

Fuelio

 

La app Fuelio guarda toda esa base de datos en un archivo csv, formateado y que se puede leer con herramientas para mostrar esos datos en Homeassistant. Fuelio por defecto guarda su base de datos en el sitio habitual dentro del movil Android donde se guardan los datos de aplicaciones, y aunque supongo que habría forma de sacarlo de ahí para leerlo desde fuera se complica demasiado.

Fuelio > Dropbox > Homeassistant

Fuelio tiene una opción muy interesante que se llama Respaldo en Dropbox, lo que hace es una copia de seguridad configurable de la base de datos del programa, con lo que nos deja abierta la opción de acceder a ese archivo de Dropbox, que además se actualiza al instante según haces algun cambio en Fuelio.

También hay opción de usar OneDrive en vez de Dropbox, nunca he usado esa opción pero supongo que será igual la mecánica.

Dropbox

Para poder acceder a la base de datos y leer los datos de registro del vehículo desde Homeassistant tenemos que buscar una manera de poder tener siempre actualizado una copia de los datos de la app Fuelio que guarda en Dropbox.

Doy por sentado que quién quiera realizar este tutorial estará usando Linux, así que las opciones desde Windows aunque se podria hacer no las vamos a tratar aquí.

Linux

Desde la página de Dropbox podeis descargar la ultima versión disponible, o si quereis podeis hacerlo desde la linea de comandos, en ésta página están las instrucciones y todos los pasos que hay que seguir.

Lo ideal en estas circunstancias si sólo lo vas a poner para éste uso es que utilices la opcion de “sincronizacion selectiva” para que sólo deje copia en tu servidor de lo que quieres, aquí teneis mas información sobre este tema.

Docker

Otra opción si usas docker es dejarlo en un contenedor con todas las ventajas que ello conlleva. Yo estoy usando la imagen janeczku/dropbox pero hay mas que supongo que funcionarán de manera muy parecida.

Para instalarlo solo hay que poner este comando por ssh, cambiando la ruta del volumen donde quereis dejar los datos de Dropbox por vuestra ruta, en mi caso lo dejo en /media/dropbox.

docker run -d \
--name=dropbox \
--restart=always \
--net="host" \
-v /media/dropbox:/dbox/Dropbox \
janeczku/dropbox
Después para enlazar tu cuenta de Dropbox con esta instalación tienes que acceder a los logs del docker y copiar la URL que aparece y pegarla en tu navegador para autenticarte, cuando lo hagas te lo confirmará el log de docker de dropbox:
“This computer is now linked to Dropbox. Welcome xxxx”
Para poder gestionar las exclusiones y sólo sincronizar lo que quieres (y no todo el contenido de Dropbox) se hace con el comando:
docker exec -t -i dropbox dropbox help
Esta opción la pongo a título informativo, ya que yo no lo he usado y tengo todo Dropbox entero sincronizado en mi sistema.
Cuando lo tengas sincronizado todo (la primera vez tardará un buen rato según los datos que tenga que sincronizar) ve a la ruta donde tengas sincronizado y navega hasta los datos que guarda Fuelio, en mi caso están en esta ruta /media/dropbox/Aplicaciones/Fuelio/sync, verifica que dentro haya un archivo .csv por cada coche que tenga en la aplicación, en mi caso tengo tres, aunque sólo uso uno:

Los datos

No se necesitan permisos de escritura para ese archivo, solo de lectura, ya que lo único que vamos a hacer es leer de ese archivo .csv.
En esta imagen siguiente podeis ver como esta estructurado el archivo .csv de un vehículo:
Como se puede ver, los datos generales del vehículo están en la tercera fila, en el bloque rojo iría la matrícula, debajo de ### Log irían los datos de los repostajes, los ultimos repostajes que quedan al principio de la fila, con lo que los últimos se irían al fondo. Se puede ver en la primera fila debajo de ### Log a que corresponde cada dato debajo separados con comas. La idea es conseguir extraer esos datos y mostrarlos en el frontend de Homeassistant, para eso usaremos varios comandos en linux como awk, grep, cut y sed, para lograr eso he de agradecer la ayuda del compañero eirr, sin el no hubiera sacado todos los comandos necesarios para extraer todos los datos necesarios.

Homeassistant

Ahora toca integrar esos datos en Homeassistant, para que Homeassistant pueda ejecutar los comandos tienes que probar antes en función de como tengas tu sistema de una manera o de otra, si tienes instalado el dropbox directamente en el sistema o en docker y como tienes el Homeassistant.

Homeassistant y Dropbox en el sistema

Para hacerlo de esta manera necesitas poder ejecutar comandos SSH en el sistema desde Homeassistant, con lo que puedes usar el tutorial que hay en la web para ello.

Para seguir el tutorial con esta combinación hay que hacer unos pasos extra en la configuración de Homeassistant y cambiar algo los comandos.

  1. Primero apuntar la ruta donde se ha guardado en el sistema Dropbox y donde ha dejado los archivos de Fuelio Dropbox, deberia ser una ruta parecida a esta /home/pi/Dropbox/Aplicaciones/Fuelio/sync, eso es con el user pi, si teneis otro user cambiará la ruta.
  2. En el archivo configuration.yaml de Homeassistant hay que meter la ruta anterior en el apartado de whitelist, debajo de homeassistant:
  3. Despues de hacer esto reiniciar Homeassistant y ya será posible que Homeassistant lea ficheros desde esa ruta.
  4. Los comandos son diferentes al hacerlo de esta manera, yo voy a seguir el tutorial de la otra manera, teniendo todo en docker, pero si lo haceis de esta manera tienes que cambiar los comandos así:
    ssh user@ip comando1 /ruta/vehicle-1-sync.csv por esto: comando1 /ruta/vehicle-1-sync.csv

Homeassistant y Dropbox en docker

Si tienes esta combinación puedes usar el tutorial de la confianza SSH entre Homeassistant y el host docker, para poder acceder a los datos que genera la aplicación Fuelio (y Dropbox sincroniza con tu equipo).

Yo voy a seguir el resto del tutorial de esta manera, teniendo todo en docker, tanto Homeassistant como Dropbox, si no es tu caso debes cambiar los comandos como he explicado en el apartado anterior, todo lo demas sería igual.

Sensores

Como dije al principio esto es una guia base que puedes usar para hacer primero lo que ella propone, y despues si quieres puedes ampliarla para incluir mas cosas o recoger mas datos del archivo de Fuelio, he decidido para que no fuera muy extenso incluir una serie de datos básicos y los meteré en estos sensores:

  1. Odometro, es un dato que da directamente Fuelio.
  2. Media consumo, también es un dato que da directamente Fuelio, ya que lo calcula el y lo guarda en el .csv.
  3. Fecha último repostaje, igualmente es un dato que se guarda en el .csv.
  4. Litros último repostaje, también se guarda directamente en el .csv.
  5. Costo último repostaje, igual que el anterior.
  6. Costo litro último repostaje, idem anterior.
  7. Costo repostaje año actual, este es un dato calculado, se hace la suma de todos los repostajes del año actual.
  8. Costo respostaje año anterior, igual que el anterior es un dato calculado.
  9. Costo medio mensual, dato calculado en función del gasto anual dividido entre doce meses, se usará un sensor de plantilla.
  10. Costo medio diario, dato calculado en función del gasto anual dividido entre treciento sesenta y cinco días, igualmente con un sensor de plantilla.

Los siguientes sensores que voy a poner tendreís que modificarlos con vuestro user y vuestra ip, en función de vuestra configuración, de todos modos podeis aseguraros antes de hacer esto de lanzar los comandos por ssh para ver si os devuelven bien el resultado.

En todos los sensores voy a incluir la variable scan_interval con su dato metido en secret, asi cambio todos a la vez, por defecto lo he puesto en 300, que serian 300 segundos, con lo que tenéis que declarar si quereis hacerlo así esta variable en secrets.yaml:

scan_interval_fuelio: 300
Sensor odometro
- platform: command_line
  name: odometro
  command: >-
    ssh user@ipcat /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | grep '"*"' | cut -d "," -f 2 | awk 'NR==6' | sed 's/"//g'
  unit_of_measurement: "Km"
  scan_interval: !secret scan_interval_fuelio
Media consumo
- platform: command_line
  name: med_consumption
  command: >-
    ssh user@ipcat /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | grep '"*"' | cut -d "," -f 6 | awk 'NR==7' | sed 's/"//g'
  unit_of_measurement: "lt/100 Km"
  scan_interval: !secretscan_interval_fuelio
Fecha ultimo repostaje
- platform: command_line
  name: last_refueling
  command: >-
    ssh user@ipcat /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | grep '"*"' | cut -d "," -f 1 | awk 'NR==6' | sed 's/"//g'
  scan_interval: !secretscan_interval_fuelio
Litros último repostaje
- platform: command_line
  name: last_refueling_liters
  command: >-
    ssh user@ip cat /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | grep '"*"' | cut -d "," -f 3 | awk 'NR==6' | sed 's/"//g'
  unit_of_measurement: "lt"
  scan_interval: !secretscan_interval_fuelio
Costo último repostaje
- platform: command_line
  name: last_refueling_cost
  command: >-
    ssh user@ip cat /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | grep '"*"' | cut -d "," -f 5 | awk 'NR==6' | sed 's/"//g'
  unit_of_measurement: "€"
  scan_interval: !secretscan_interval_fuelio
Costo litro último repostaje
- platform: command_line
  name: last_refueling_liter_cost
  command: >-
    ssh user@ip cat /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | grep '"*"' | cut -d "," -f 15 | awk 'NR==6' | sed 's/"//g'
  unit_of_measurement: "€"
  scan_interval: !secretscan_interval_fuelio
Costo repostaje año actual
- platform: command_line
  name: anual_cost
  command: >-
    ssh user@ip grep "$(date '+%Y')" /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | cut -d "," -f 5 | sed 's/"//g' | awk '{sum+=$1} END {print sum}'
  unit_of_measurement: "€"
  scan_interval: !secretscan_interval_fuelio
Costo respostaje año anterior
- platform: command_line
  name: anual_past_cost
  command: >-
    ssh user@ip grep "$(date +%Y -d "-1 years")" /media/dropbox/Aplicaciones/Fuelio/sync/vehicle-1-sync.csv | cut -d "," -f 5 | sed 's/"//g' | awk '{sum+=$1} END {print sum}'
  unit_of_measurement: "€"
  scan_interval: !secretscan_interval_fuelio
Costo medio mensual y csoto medio diario
- platform: template
  sensors:
    med_cost_month:
      unit_of_measurement: "€"
      friendly_name: Costo medio mensual
      value_template: "{{ ((states('sensor.anual_cost') | int) / 12 ) | round(2)}}"
    med_cost_day:
      unit_of_measurement: "€"
      friendly_name: Costo medio diario
      value_template: "{{ ((states('sensor.anual_cost') | int) / 365 ) | round(2)}}"
Grupo
group:
  mi_coche:
    name: 'Renault Laguna II'
    control: hidden
    entities:
    - sensor.odometro
    - sensor.med_consumption
    - sensor.last_refueling
    - sensor.last_refueling_liters
    - sensor.last_refueling_cost
    - sensor.last_refueling_liter_cost
    - sensor.anual_cost
    - sensor.anual_past_cost
    - sensor.med_cost_month
    - sensor.med_cost_day
Customize
customize:
  sensor.odometro:
    friendly_name: Total kilometros
    icon: mdi:car-side
  sensor.last_refueling:
    friendly_name: Fecha ultimo repostaje
    icon: mdi:calendar
  sensor.med_consumption:
    friendly_name: Media consumo
    icon: mdi:gas-station
  sensor.last_refueling_liters:
    friendly_name: Litros ultimo repostaje
    icon: mdi:gas-station
  sensor.last_refueling_cost:
    friendly_name: Costo ultimo repostaje
    icon: mdi:currency-eur
  sensor.last_refueling_liter_cost:
    friendly_name: Costo litro ultimo repostaje
    icon: mdi:currency-eur
  sensor.anual_cost:
    friendly_name: Costo repostaje año actual
    icon: mdi:currency-eur
  sensor.anual_past_cost:
    friendly_name: Costo repostaje año anterior
    icon: mdi:currency-eur
  sensor.med_cost_month:
    icon: mdi:currency-eur
  sensor.med_cost_day:
    icon: mdi:currency-eur
Os animo a que lo probeis y lo adapteis/mejoreis para incluir mas cosas, una buena idea sería incluir en la aplicacion Fuelio los gastos de seguro y de peajes y/o de averias/mantenimiento, con lo que podrias tener controlados todos los gastos de un coche o de varios.
Mirar como están hechos los comandos de los sensores y adaptarlos a vuestras necesidades.
Nos vemos como siempre en el chat de Telegram.

Deja un comentario

Síguenos

Siguenos en facebook