def analog(draw, width, height): now = datetime.datetime.now() today_date = now.strftime("%d %b %y") y_offset = 16 margin = 3 cx = width / 2 cy = y_offset + ((height - y_offset - margin) / 2) left = (width - (min(height, 64) - y_offset - margin)) / 2 right = width - left radius = (right - left) / 2 top = cy - radius bottom = cy + radius hrs_angle = 270 + (30 * (now.hour + (now.minute / 60.0))) hrs = posn(hrs_angle, radius - 8) min_angle = 270 + (6 * now.minute) mins = posn(min_angle, radius - 3) sec_angle = 270 + (6 * now.second) secs = posn(sec_angle, radius - 3) draw.ellipse((left, top, right, bottom), outline="white") draw.line((cx, cy, cx + hrs[0], cy + hrs[1]), fill="white") draw.line((cx, cy, cx + mins[0], cy + mins[1]), fill="white") draw.line((cx, cy, cx + secs[0], cy + secs[1]), fill="red") draw.ellipse((cx - 1, cy - 1, cx + 1, cy + 1), fill="white", outline="white") title_text(draw, margin, width, today_date)
def analog(draw, width, height): now = datetime.datetime.now() today_date = now.strftime("%d %b %y") top = 16 margin = 3 cx = width / 2 cy = top + ((height - top - margin) / 2) left = (width - (height - top - margin)) / 2 right = width - left hrs_angle = 270 + (30 * (now.hour + (now.minute / 60.0))) hrs = posn(hrs_angle, cx - 16) min_angle = 270 + (6 * now.minute) mins = posn(min_angle, cx - 10) sec_angle = 270 + (6 * now.second) secs = posn(sec_angle, cx - 10) draw.ellipse((left, top, right, height - margin), outline="white") draw.line((cx, cy, cx + hrs[0], cy + hrs[1]), fill="white") draw.line((cx, cy, cx + mins[0], cy + mins[1]), fill="white") draw.line((cx, cy, cx + secs[0], cy + secs[1]), fill="red") draw.ellipse((cx - 1, cy - 1, cx + 1, cy + 1), fill="white", outline="white") title_text(draw, margin, width, today_date)
def render(draw, width, height): percentages = psutil.cpu_percent(interval=None, percpu=True) margin = 3 top_margin = 3 bottom_margin = 3 title_text(draw, top_margin, width, "Net: wlan0") address = psutil.net_if_addrs()["wlan0"][0].address counters = psutil.net_io_counters(pernic=True)["wlan0"] draw.text((margin, 20), text=address, font=tiny_font, fill="white") draw.text((margin, 30), text="Rx:", font=tiny_font, fill="white") draw.text((margin, 40), text="Tx:", font=tiny_font, fill="white") right_text(draw, 30, width, margin, text=bytes2human(counters.bytes_recv)) right_text(draw, 40, width, margin, text=bytes2human(counters.bytes_sent)) x = (width - draw.textsize("CPU Load")[0]) / 2 draw.text((x, 55), text="CPU Load", fill="yellow") bar_height = (height - 15 - top_margin - bottom_margin) / 2 width_cpu = width / len(percentages) bar_width = 0.5 * width_cpu bar_margin = (width_cpu - bar_width) / 2 x = bar_margin for cpu in percentages: cpu_height = bar_height * (cpu / 100.0) y2 = height - bottom_margin vertical_bar(draw, x, y2 - bar_height - 1, x + bar_width, y2, y2 - cpu_height) x += width_cpu
def render(draw, width, height): margin = 3 playing = '' playing2 = '' current = 0 length = 0 if 'state' in roonapid.zones[dac_zone]: state = roonapid.zones[dac_zone]['state'] title_text( draw, margin, width, "%s - %s" % (roonapid.zones[dac_zone]['display_name'], state)) if "now_playing" in roonapid.zones[dac_zone]: playing = roonapid.zones[dac_zone]['now_playing']['two_line'][ 'line1'] playing2 = roonapid.zones[dac_zone]['now_playing']['two_line'][ 'line2'] if "length" in roonapid.zones[dac_zone]['now_playing']: length = roonapid.zones[dac_zone]['now_playing']['length'] if state == "playing" and 'seek_position' in roonapid.zones[ dac_zone]: current = roonapid.zones[dac_zone]['seek_position'] elif "seek_position" in roonapid.zones[dac_zone][ 'now_playing']: current = roonapid.zones[dac_zone]['now_playing'][ 'seek_position'] if current: draw.text((margin, 50), text="%s / %s" % (str(datetime.timedelta(seconds=current)), str(datetime.timedelta(seconds=length)))) draw.text((margin, 20), text=playing, font=tiny_font) draw.text((margin, 35), text=playing2, font=tiny_font)
def render(draw, width, height): df = psutil.disk_usage("/") margin = 3 title_text(draw, margin, width, text="Disk") draw.text((margin, 20), text="Used:", font=tiny_font, fill="white") draw.text((margin, 30), text="Free:", font=tiny_font, fill="white") draw.text((margin, 40), text="Total:", font=tiny_font, fill="white") right_text(draw, 20, width, margin, text="{0:0.1f}%".format(df.percent)) right_text(draw, 30, width, margin, text=bytes2human(df.free, "{0:0.0f}")) right_text(draw, 40, width, margin, text=bytes2human(df.total, "{0:0.0f}")) mem = psutil.virtual_memory() swap = psutil.swap_memory() mem_used_pct = (mem.total - mem.available) * 100.0 / mem.total x = (width - draw.textsize("Memory")[0]) / 2 draw.text((x, 55), text="Memory", fill="yellow") draw.text((margin, 75), text="Used:", font=tiny_font, fill="white") draw.text((margin, 85), text="Phys:", font=tiny_font, fill="white") draw.text((margin, 95), text="Swap:", font=tiny_font, fill="white") right_text(draw, 75, width, margin, text="{0:0.1f}%".format(mem_used_pct)) right_text(draw, 85, width, margin, text=bytes2human(mem.used)) right_text(draw, 95, width, margin, text=bytes2human(swap.used))
def render_disk_memory_battery(draw, width, height): global input_data if not input_data: return logging.info('Rendering Disk and Memory...') margin = 3 # Disk title_text(draw, margin, width, text="Disk") draw.text((margin, 15), text="Used:", font=tiny_font, fill="white") draw.text((margin, 25), text="Free:", font=tiny_font, fill="white") draw.text((margin, 35), text="Total:", font=tiny_font, fill="white") right_text(draw, 15, width, margin, text="{0:0.1f}%".format(input_data["disk"]["used_pct"])) right_text(draw, 25, width, margin, text=bytes2human(input_data["disk"]["free"], "{0:0.0f}")) right_text(draw, 35, width, margin, text=bytes2human(input_data["disk"]["total"], "{0:0.0f}")) # Memory x = (width - draw.textsize("Memory")[0]) / 2 draw.text((x, 45), text="Memory", fill="yellow") draw.text((margin, 57), text="Used:", font=tiny_font, fill="white") draw.text((margin, 67), text="Phys:", font=tiny_font, fill="white") draw.text((margin, 77), text="Swap:", font=tiny_font, fill="white") right_text(draw, 57, width, margin, text="{0:0.1f}%".format(input_data["memory"]["mem_used_pct"])) right_text(draw, 67, width, margin, text=bytes2human(input_data["memory"]["mem_used"])) right_text(draw, 77, width, margin, text=bytes2human(input_data["memory"]["swap_used"])) # Battery draw.text((x, 90), text="Battery", fill="yellow") battery_pct = input_data["battery"]["battery_pct"] draw.text((margin, 105), text="{} %".format(battery_pct), font=tiny_font, fill="white")
def digital(draw, width, height): margin = 3 now = datetime.datetime.now() today_date = now.strftime("%d %b %y") current_time = now.strftime("%H:%m:%S") title_text(draw, margin, width, today_date) draw.text((margin + 10, 20), text=current_time, fill="white", font=tiny_font)
def render(draw, width, height): boot_time = datetime.fromtimestamp(psutil.boot_time()) elapsed = datetime.now() - boot_time margin = 3 title_text(draw, margin, width, "Uptime") right_text(draw, 20, width, margin, text="{0} s".format(int(elapsed.total_seconds())))
def render(draw, width, height): df = psutil.disk_usage("/") margin = 3 title_text(draw, margin, width, text="Disk") draw.text((margin, 20), text="Used:", font=tiny_font, fill="white") draw.text((margin, 35), text="Free:", font=tiny_font, fill="white") draw.text((margin, 45), text="Total:", font=tiny_font, fill="white") right_text(draw, 20, width, margin, text="{0:0.1f}%".format(df.percent)) right_text(draw, 35, width, margin, text=bytes2human(df.free, "{0:0.0f}")) right_text(draw, 45, width, margin, text=bytes2human(df.total, "{0:0.0f}"))
def render(draw, width, height): margin = 3 title_text(draw, margin, width, text="Net:{0}".format(interface)) try: address = psutil.net_if_addrs()[interface][0].address counters = psutil.net_io_counters(pernic=True)[interface] draw.text((margin, 20), text=address, font=tiny_font, fill="white") draw.text((margin, 35), text="Rx:", font=tiny_font, fill="white") draw.text((margin, 45), text="Tx:", font=tiny_font, fill="white") right_text(draw, 35, width, margin, text=bytes2human(counters.bytes_recv)) right_text(draw, 45, width, margin, text=bytes2human(counters.bytes_sent)) except: draw.text((margin, 20), text="n/a", font=tiny_font, fill="white")
def render(draw, width, height): mem = psutil.virtual_memory() swap = psutil.swap_memory() mem_used_pct = (mem.total - mem.available) * 100.0 / mem.total margin = 3 title_text(draw, margin, width, text="Memory") draw.text((margin, 20), text="Used:", font=tiny_font, fill="white") draw.text((margin, 35), text="Phys:", font=tiny_font, fill="white") draw.text((margin, 45), text="Swap:", font=tiny_font, fill="white") right_text(draw, 20, width, margin, text="{0:0.1f}%".format(mem_used_pct)) right_text(draw, 35, width, margin, text=bytes2human(mem.used)) right_text(draw, 45, width, margin, text=bytes2human(swap.used))
def render(draw, width, height): boot_time = datetime.fromtimestamp(psutil.boot_time()) elapsed = datetime.now() - boot_time margin = 3 title_text(draw, margin, width, "Uptime") right_text(draw, 20, width, margin, text="{0} s".format(int(elapsed.total_seconds()))) if int(elapsed.total_seconds()) > 172800: days = str(int(elapsed.total_seconds())/86400) + " days" elif int(elapsed.total_seconds()) > 86400: days = "1 day" else: days = None if days: right_text(draw, 35, width, margin, days)
def render_network_cpu(draw, width, height): global input_data if not input_data: return logging.info('Rendering Network and CPU...') margin = 3 top_margin = 3 bottom_margin = 3 # Network title_text(draw, top_margin, width, "Net: {}".format(input_data["network"]["interface_name"])) # interface_address = input_data["network"]["interface_address"] ip_address = input_data["network"]["ip_address"] # draw.text((margin, 15), text=interface_address, font=tiny_font, fill="white") draw.text((margin, 15), text=ip_address, font=tiny_font, fill="white") draw.text((margin, 25), text="Rx:", font=tiny_font, fill="white") draw.text((margin, 35), text="Tx:", font=tiny_font, fill="white") right_text(draw, 25, width, margin, text=bytes2human(input_data["network"]["bytes_recv"])) right_text(draw, 35, width, margin, text=bytes2human(input_data["network"]["bytes_sent"])) # CPU x = (width - draw.textsize("CPU Load")[0]) / 2 draw.text((x, 45), text="CPU Load", fill="yellow") bar_height = (height - 15 - top_margin - bottom_margin) / 1.95 width_cpu = width / len(input_data["cpu"]["cpu_percent_each"]) bar_width = 0.5 * width_cpu bar_margin = (width_cpu - bar_width) / 1.95 cpu_percent_string = "{}%".format(str(input_data["cpu"]["cpu_percent"])) x = (width - draw.textsize(cpu_percent_string)[0]) / 1.7 draw.text((x, 57), text=cpu_percent_string, font=tiny_font, fill="white") x = bar_margin for cpu in input_data["cpu"]["cpu_percent_each"]: cpu_height = bar_height * (cpu / 100.0) y2 = height - bottom_margin vertical_bar(draw, x, y2 - bar_height - 1, x + bar_width, y2, y2 - cpu_height) x += width_cpu
def render(draw, width, height): percentages = psutil.cpu_percent(interval=None, percpu=True) top_margin = 3 bottom_margin = 3 title_text(draw, top_margin, width, "CPU Load") bar_height = height - 15 - top_margin - bottom_margin width_cpu = width / len(percentages) bar_width = 0.5 * width_cpu bar_margin = (width_cpu - bar_width) / 2 x = bar_margin for cpu in percentages: cpu_height = bar_height * (cpu / 100.0) y2 = height - bottom_margin vertical_bar(draw, x, y2 - bar_height - 1, x + bar_width, y2, y2 - cpu_height) x += width_cpu
def render(draw, width, height): tFile = open('/sys/class/thermal/thermal_zone0/temp') tempC = float(tFile.read()) / 1000 tFile.close() fFile = open('/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq') freqC = long(fFile.read()) / 1000 fFile.close() margin = 3 title_text(draw, margin, width, "CPU status") draw.text((margin, 20), text="Temp:", font=tiny_font, fill="white") draw.text((margin, 30), text="Freq:", font=tiny_font, fill="white") draw.text((margin, 40), text="Fan:", font=tiny_font, fill="white") draw.text((margin, 50), text="RPM:", font=tiny_font, fill="white") right_text(draw, 20, width, margin, text="{0:0.1f}C".format(tempC)) right_text(draw, 30, width, margin, text="{0}k".format(int(freqC))) fan = fanOut() fanDC, fanRPM = fan.split(" ") if "Err" not in fanDC: fanDC += "%" right_text(draw, 40, width, margin, fanDC) right_text(draw, 50, width, margin, fanRPM)
def render(draw, width, height): # dac_zone='160155895af4376afe74c12da20fdadfc027' title_text(draw, margin, width, "On Airplay" % interface) draw.text((margin, 20), text=artist, font=tiny_font) draw.text((margin, 35), text=track, font=tiny_font)