Having the ability to clone 4 SD cards at once is great but I still find myself forgetting that I've started the process running in a background window and missing when the job completes and it is time to swap in another 4 for copying. Sounds like a job for a Unicorn Hat!
So I made good on my threat to write a simple Python script to read the logfile generated by dcfldd and lighting up the leds as the cloning progresses. The leds change colour every time an 1/8th of the total is completed and then start flashing bright white when the job is done.
Here's the script I used. The logfile is updated with a line like
[98% of 300Mb] 9488 blocks (296Mb) written. 00:00:00 remaining.
every time dcfldd finishes copying a block (of size set by the statusinterval argument).
import unicornhat as UH
import time
# light leds based on x,y grid
def lightem3(xin,yin,colour):
for y in range(8):
for x in range(yin):
UH.set_pixel(x,y,colour[0],colour[1],colour[2])
for y in range(xin):
for x in range(yin+1):
UH.set_pixel(x,y,colour[0],colour[1],colour[2])
UH.show()
#convert % to /164ths
def map_percent(p):
p_grid = int(p/1.5625)
y = int(p_grid/8)
x = p_grid%8
return x,y
#map colour gradient onto completed %ages
def colour_map(p):
if p < 9:
colour = (229,0,2)
elif p < 17:
colour = (216,131,40)
elif p < 25:
colour = (218,125,0)
elif p < 33:
colour = (212,185,0)
elif p < 41:
colour = (173,210,0)
elif p < 49:
colour = (110,200,0)
elif p < 57:
colour = (50,196,0)
elif p < 99:
colour = (0, 255, 0)
elif p >= 99:
colour = (255,255,255)
return colour
#main block
UH.off()
#initially all leds blue
for y in range(8):
for x in range(8):
UH.set_pixel(x,y,0,0,255)
UH.show()
time.sleep(2)
line_prev = ''
while True:
f=open('log_file','r')
line = f.readline()
if line != line_prev:
print line
line_prev = line
fields = line.split()
percent = fields[len(fields)-9][1:-1]
print percent
col = colour_map(int(int(percent)/1.5625))
grids = map_percent(int(percent))
lightem3(grids[0],grids[1],col) if percent:
#flash white when complete
if int(percent) >= 99:
lightem3(8,7,(255,255,255))
UH.show()
time.sleep(0.3)
UH.off()
time.sleep(0.5)
No comments:
Post a Comment