• Martes 19 de Noviembre de 2024, 01:20

Autor Tema:  Un script para vehículos  (Leído 1607 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Un script para vehículos
« en: Viernes 13 de Febrero de 2009, 20:03 »
0
Lo copio tal cual de mi blog =D.
Este script lo desarrollé por que hace algún tiempo tenía en mente como controlar las finanzas con mi bebé (moto honda eco deluxe), al principio lo hicé con una DB e insertando los datos a mano, pero con el tiempo quería saber cuanto me quedaba de gasolina y aceite y más o menos cuando debía cargar, diaríamente estoy gastando alrededor de 100km.
Código: SQL
  1. CREATE TABLE IF NOT EXISTS `gasto` (
  2. `id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. fecha date NOT NULL,
  4. precio varchar(6) NOT NULL,
  5. kilometraje varchar(5) NOT NULL,
  6. gasto varchar(25) NOT NULL,
  7. PRIMARY KEY  (`id`)
  8. );
  9.  
  10.  
Código: Python
  1. #!/usr/bin/env python
  2. #Desarrollado por RadicalEd
  3.  
  4. import sys, os
  5. import pynotify, MySQLdb
  6.  
  7. #Tomado nuevamente del blog de Daniel Garcia Moreno
  8. comando = 'zenity --text "Kilometraje actual" --entry'
  9. entrada, salida = os.popen2(comando)
  10. kmact = salida.read()
  11. kmact = int(kmact.strip())#Lo convertimos a entero
  12.  
  13. #Nos conectamos a la DB
  14. conn = MySQLdb.connect(host="localhost", user="usdist", passwd="clio1214", db="paginafiles")
  15. #Creamos un cursor para ejecutar las sentencias SQL
  16. cursor = conn.cursor()
  17. #El script a ejecutar
  18. cursor.execute('SELECT * FROM gasto')
  19. registros = int(cursor.rowcount)
  20.  
  21. #Instanciamos variables
  22. #Se que dieciocho mil pesos en mi moto son 450km de gasolina (100%)
  23. dinerogas, kmgasolina = 18000, 450.0
  24. #Se que trece mil cuatrocientos en mi moto son 1500km de aceite (100%)
  25. dineroace, kmaceite = 13400, 1500.0
  26. gasolina = 0
  27. aceite = 0
  28. mostrar = '' #Mensaje a mostrar
  29.  
  30. #Campos de la DB
  31. for x in range(registros):
  32.   row = cursor.fetchone()
  33.   gasto = row[4]  #Tipo de gasto
  34.   #Para hacer la suma de cuanto llevamos en GASOLINA y en ACEITE
  35.   if gasto == 'GASOLINA':
  36.       gasolina += int(row[2])
  37.       ultkmgas = int(row[3])  #Ultimo kilometraje gasolina
  38.       ultfechagas = row[1] #Ultima fecha gasolina
  39.   elif gasto == 'ACEITE':
  40.       aceite += int(row[2])
  41.       ultkmace = int(row[3])  #Ultimo kilometraje aceite
  42.       ultfechaace = row[1] #Ultima fecha aceite
  43.  
  44. #Calculos
  45. gastogas = kmact - ultkmgas  #Gasto gasolina
  46. kmrestgas = kmgasolina - gastogas  #Kilometros restantes gasolina
  47. porcentgas = (kmrestgas / kmgasolina) * 100  #Porcentaje restante gasolina
  48. gastoace = kmact - ultkmace  #Gasto aceite
  49. kmrestace = kmaceite - gastoace  #Kilometros restantes aceite
  50. porcentace = (kmrestace / kmaceite) * 100  #Porcentaje restante gasolina
  51.  
  52. #Alertas para gasolina y aceite
  53. if kmrestgas <= 20:
  54.   mostrar += 'Favor tanquear a tiempo, solo queda el %d%s restante de gasolina' % (porcentgas, chr(37))
  55.  
  56. if kmrestace <= 100:
  57.   mostrar += 'nnFavor cambiar aceite a tiempo, solo queda el %d%s restante de este' % (porcentace, chr(37))
  58.  
  59. mostrar += "nnHas gastado %dkm en Aceite, te queda un %d%s osea %dkm" % (gastoace, porcentace, chr(37), kmrestace)
  60. mostrar += "nnHas gastado %dkm en Gasolina, te queda un %d%s osea %dkm" % (gastogas, porcentgas, chr(37), kmrestgas)
  61.  
  62. if __name__ == '__main__':
  63.   if not pynotify.init("Al no iniciarse"):
  64.       #Nos salimos
  65.       sys.exit(1)
  66.  
  67. n = pynotify.Notification(mostrar)
  68. n.set_timeout(15000) #Que se muestre el mensaje durante 15 segundos
  69.  
  70. #Sino se muestra
  71. if not n.show():
  72.   print "Fallo al mostrar la info"
  73.   sys.exit(1)
  74.  

La insercción de los datos no tiene nada que ver con el script, por eso no la pusé, ese paso siempre lo hago por phpMyAdmin :P
Para que el programa funcione cuando inicia sesión por lo menos en Linux Ubuntu van a Sistema --> Preferencias --> Sesiones --> Programas de inicio; en esta parte colocan el script. Acá un videito de como funciona la vaina.

Ojala les sirva de algo, en mi blog deje un video para ver el funcionamiento.
http://radicalpython.blogspot.com/2009/ ... otify.html

PD. No funciona en Windows :P jejeje
El pasado son solo recuerdos, el futuro son solo sueños

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Un script para vehículos
« Respuesta #1 en: Sábado 14 de Febrero de 2009, 02:44 »
0
gracias por aportar con tu codigo.

yo por lo general no utilizo un SGBD como MySQL para aplicacions pequeñas o que no tengan un requerimiento complejo con respecto a la DB.
te recomiendo que uses SQLite que ya viene incluido con python, no requiere de levantar servicios y el script andaria en cualquier OS que tenga python.

aca[1] tenes algo de info de SQLite sobre python.

saludos

nrm

[1] - http://docs.python.org/library/sqlite3.html

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Un script para vehículos
« Respuesta #2 en: Sábado 14 de Febrero de 2009, 13:38 »
0
gracias NRM; ya lo había pensado en SQLite por el tamaño y los servicios, la vaina es que desde mucho antes había creado esa tabla en MySQL y llevó mis registros de la moto ahí, además las tablas de todas las aplicaciones que he hechó las tengo en una sola DB y pues para no perderme búscando por diferentes lados la creé ahí.

Gracias por el enlace, lo voy a revisar.
El pasado son solo recuerdos, el futuro son solo sueños