#1 31-05-2008 14:33:15

dik  
TabletGeek
Откуда: Riga
На форуме с: 27-08-2007
Сообщений: 2550
Отблагодарили :   76 
Вебсайт
Epiphany 
Участвую в проектах : internet-tablet.com, wiki,
donate 

Battery status log visualizer

Код:

#!/usr/bin/env python
# via http://lost-theory.org/python/dynamicimg.html

import Image,ImageDraw
import re
import os


filename = "/media/mmc1/battery.log"
imagename = "/media/mmc1/graph.png"


log = file(r"%s" % filename)
line = len(log.readlines())
X = line+60
Y = 130 #image width and height
log.close()

def graph(filename):

    img = Image.new("RGB", (X,Y), "#FFFFFF")
    draw = ImageDraw.Draw(img)

    #draw some axes and markers
    #for i in range(X/6):
        
        #if i % 5 == 0:
            #draw.text((i*10+15, Y-15), `i*10`, fill="#000")
    for j in range(1,Y/10-2):
        draw.text((0,Y-15-j*10), `j*10`, fill="#000")
    draw.line((20,Y-19,X,Y-19), fill="#000")
    draw.line((19,20,19,Y-18), fill="#000")

    #read in file and graph it
    ots4et=0
    log = file(r"%s" % filename)
    for (i, value) in enumerate(log):
        proc = value[22:26]
        chas = value[15:17]
        min = value[18:20]
    data = value[1:13]
    if i==1:
            draw.text((i+25, Y-120), data, fill="#000")
        if re.search("Charging", value):
        if ots4et == 0:
        #draw.line((i+20, Y-15, i+20, 20), fill="#DDD")
        draw.line((i+20,Y-20,i+20,Y-30), fill="#33CC33")

        else:
        hours,minutes = divmod(ots4et, 60)
        worktime="%s:%s" % (hours, minutes)
        draw.line((i+20,Y-20,i+20,Y-30), fill="#33CC33")
        draw.text((i+15, Y-15), worktime, fill="#000")
        ots4et = 0
    
        else:
        if re.search("---", value):
            draw.line((i+20, Y-15, i+20, 20), fill="#000")
        else:
            chas = int(chas)
            min = int(min)
            ots4et=ots4et+10
            proc = eval(proc)

            if min == 0:

                draw.line((i+20, Y-15, i+20, 20), fill="#DDD")
                draw.line((i+20,Y-20,i+20,Y-10-proc), fill="#fff")

                #if chas % 2 == 0:
                #draw.text((i+15, Y-15), `ots4et`, fill="#000")
            else:
                draw.line((i+20,Y-20,i+20,Y-10-proc), fill="#55d")
    if i==line-1:
        hours,minutes = divmod(ots4et, 60)
        worktime="%s:%s" % (hours, minutes)
        draw.text((i+15, Y-15), worktime, fill="#000")    

 

    img.save(imagename)

log.close()
graph(filename)
image="/usr/bin/browser --url file://%s" % (imagename)
os.system(image)

Пример запуска :
$python Mydoc/.documents/image.py

По умолчанию лог лежит /media/mmc1/battery.log

Скачать скрипт   .

Отредактированно dik (31-05-2008 18:24:13)


GNU/Linux Debian / Nokia N800 OS2008 Diablo / Nokia N82

Неактивен

 

#2 31-05-2008 23:32:38

Wall  
TabletGeek
На форуме с: 28-08-2007
Сообщений: 1245
Отблагодарили :   79 
Firefox 

Re: Battery status log visualizer

А можно еще и лог куда-нибудь выложить?


N810 Diablo

Неактивен

 

#3 01-06-2008 04:34:54

dik  
TabletGeek
Откуда: Riga
На форуме с: 27-08-2007
Сообщений: 2550
Отблагодарили :   76 
Вебсайт
Epiphany 
Участвую в проектах : internet-tablet.com, wiki,
donate 

Re: Battery status log visualizer

Выложил в файлы. - http://n8xx.com/uploads.php?file=battery.log   
При запуске он первой строкой пишет что то типа ------------------------------

А так как у меня запускаетс и пишет лог так : >> battery.log
то этих строк может быть несколько - то есть при каждом запуске таблетки...


GNU/Linux Debian / Nokia N800 OS2008 Diablo / Nokia N82

Неактивен

 

#4 01-06-2008 13:16:49

Wall  
TabletGeek
На форуме с: 28-08-2007
Сообщений: 1245
Отблагодарили :   79 
Firefox 

Re: Battery status log visualizer

Посмотрел на код. К сожалению в вашем посте скорее всего выравнивание 'поехало', так что понять что там происходит трудно.

Что бы я сделал и почему:
1. Вынес бы в отдельное место то, что происходит в основной программе, чтобы это было читабельно
2. Убрал бы использование глобальных переменных X, Y, filename и imagename из функции graph, потому, что глобальные переменные - зло. и еще потому, что эту функцию можно будет импортировать из другого места и использовать не разбираясь что для ее работы нужно установить 4 глобальные переменные.
3. Сделал бы основной код выполняющимся только, когда позвали скрипт, а не всегда. Это позволит при желании просто импортировать graph,что в текущей реализации невозможно без выполнения основного кода.
4. Сделал бы возможность передавать путь к логу как параметр скрипта и автоматически формировал бы из него путь к результату, поменяв расширение.

Вот код за исключением функции graph:

Код:

#!/usr/bin/env python

import sys
import os
import re

import Image, ImageDraw

DEF_FNAME = "/media/mmc1/battery.log"
DEF_IMGNAME = "/media/mmc1/graph.png"

def graph(filename, x, y):
    ....
    return img

if __name__ == "__main__":

    if len(sys.argv) == 2:
        filename = sys.argv[1]
        imagename = os.path.splitext(filename)[0] + '.png'
    else:
        filename = DEF_FNAME
        imagename = DEF_IMGNAME

    log = file(filename)
    lines = len(log.readlines())
    x = lines + 60
    y = 130 #image width and height
    log.close()

    image = graph(filename, x, y)
    image.save(imagename)

    sys.exit(os.system("/usr/bin/browser --url file://%s" % imagename))

Почитать о питоновом стиле можно здесь: http://www.python.org/dev/peps/pep-0008/   

PS: Естественно, это не все, что я бы сделал и я тоже только учусь. Так что воспринимайте это все с нужной долей критицизма.

Удачи!


N810 Diablo

Неактивен

 

#5 01-06-2008 13:36:15

dik  
TabletGeek
Откуда: Riga
На форуме с: 27-08-2007
Сообщений: 2550
Отблагодарили :   76 
Вебсайт
Epiphany 
Участвую в проектах : internet-tablet.com, wiki,
donate 

Re: Battery status log visualizer

Спасибо.


GNU/Linux Debian / Nokia N800 OS2008 Diablo / Nokia N82

Неактивен

 

Board footer

Powered by PunBB
© Copyright 2002-2008 Rickard Andersson

Использованы иконки браузеров с форума forum.mozilla-russia.org   скидка на телевизор -

[ Generated in 0.441 seconds, 8 queries executed ]