Hello everyone,
I wanted to make a few stand-alone circular graph gauges for showing single readouts like gpu temperature, core 0 temp, core 3 temp etc etc
I tried editing an existing conky I downloaded that has circle graphs but in trying to isolate a single graph I broke it. I am going to try again after some sleep but before I do, are there any templets/tutorials for making these kinds of gauges? I did some googling but didn't get any good hits.
Thanks for reading,
Logan
Do any guage templates exist? [SOLVED]
Forum rules
Before you post read how to get help. Topics in this forum are automatically closed 6 months after creation.
Before you post read how to get help. Topics in this forum are automatically closed 6 months after creation.
- Logansfury
- Level 8
- Posts: 2350
- Joined: Fri Oct 27, 2023 4:08 pm
- Location: Las Vegas NV, USA
Do any guage templates exist? [SOLVED]
Last edited by Logansfury on Tue Jun 11, 2024 1:19 am, edited 1 time in total.
Re: Do any guage templates exist?
Something like this?
single_ring.lua
Put this in your conky script:
single_ring.lua
Code: Select all
--==============================================================================
-- seamod_rings.lua
--
-- Date : 05/02/2012
-- Author : SeaJey
-- Version : v0.1
-- License : Distributed under the terms of GNU GPL version 2 or later
--
-- This version is a modification of lunatico_rings.lua wich is modification of conky_orange.lua
--
-- conky_orange.lua: http://gnome-look.org/content/show.php?content=137503&forumpage=0
-- lunatico_rings.lua: http://gnome-look.org/content/show.php?content=142884
--
-- Modified by Koentje for usage with fan rpm
--
--==============================================================================
require 'cairo'
--------------------------------------------------------------------------------
-- gauge DATA
gauge = {
{
name='cpu 0', arg='',
max_value=110, max_rpm=100,
x=50, y=50,
graph_radius=35,
graph_thickness=8,
graph_start_angle=180,
graph_unit_angle=2.84, graph_unit_thickness=2.7,
graph_bg_colour=0xFFEEEE, graph_bg_alpha=0.1,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xEF5A29, hand_fg_alpha=1.0,
txt_radius=0,
txt_weight=1, txt_size=23.0,
txt_fg_colour=0x00d0FF, txt_fg_alpha=1.0,
graduation_radius=14,
graduation_thickness=28, graduation_mark_thickness=29,
graduation_unit_angle=72,
graduation_fg_colour=0xAAAAAA, graduation_fg_alpha=0.2,
caption='CPU 0',
caption_weight=1, caption_size=14,
caption_fg_colour=0xFFA300, caption_fg_alpha=100,
},
}
-------------------------------------------------------------------------------
-- rgb_to_r_g_b
-- converts color in hexa to decimal
--
function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-------------------------------------------------------------------------------
-- angle_to_position
-- convert degree to rad and rotate (0 degree is top/north)
--
function angle_to_position(start_angle, current_angle)
local pos = current_angle + start_angle
return ( ( pos * (2 * math.pi / 360) ) - (math.pi / 2) )
end
-------------------------------------------------------------------------------
-- draw_gauge_ring
-- displays gauges
--
function draw_gauge_ring(display, data, value)
local max_value = data['max_value']
local max_rpm = data['max_rpm']
local x, y = data['x'], data['y']
local graph_radius = data['graph_radius']
local graph_thickness, graph_unit_thickness = data['graph_thickness'], data['graph_unit_thickness']
local graph_start_angle = data['graph_start_angle']
local graph_unit_angle = data['graph_unit_angle']
local graph_bg_colour, graph_bg_alpha = data['graph_bg_colour'], data['graph_bg_alpha']
local graph_fg_colour, graph_fg_alpha = data['graph_fg_colour'], data['graph_fg_alpha']
local hand_fg_colour, hand_fg_alpha = data['hand_fg_colour'], data['hand_fg_alpha']
local graph_end_angle = (max_value * graph_unit_angle) % 360
-- background ring
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, 0), angle_to_position(graph_start_angle, graph_end_angle))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_bg_colour, graph_bg_alpha))
cairo_set_line_width(display, graph_thickness)
cairo_stroke(display)
-- arc of value (calculation of RPM to max_value !!)
local val = value % (max_value +1)
local start_arc = 0
local stop_arc = 0
local i = 1
while i <= val do
start_arc = (graph_unit_angle * i) - graph_unit_thickness
stop_arc = (graph_unit_angle * i)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_fg_colour, graph_fg_alpha))
cairo_stroke(display)
i = i + 1
end
local angle = start_arc
-- hand
start_arc = (graph_unit_angle * val) - (graph_unit_thickness * 2)
stop_arc = (graph_unit_angle * val)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(hand_fg_colour, hand_fg_alpha))
cairo_stroke(display)
-- graduations marks (fan blades)
local graduation_radius = data['graduation_radius']
local graduation_thickness, graduation_mark_thickness = data['graduation_thickness'], data['graduation_mark_thickness']
local graduation_unit_angle = data['graduation_unit_angle']
local graduation_fg_colour, graduation_fg_alpha = data['graduation_fg_colour'], data['graduation_fg_alpha']
if graduation_radius > 0 and graduation_thickness > 0 and graduation_unit_angle > 0 then
local nb_graduation = graph_end_angle / graduation_unit_angle
local i = 0
while i < nb_graduation do
cairo_set_line_width(display, graduation_thickness)
start_arc = (graduation_unit_angle * i) - (graduation_mark_thickness / 2)
stop_arc = (graduation_unit_angle * i) + (graduation_mark_thickness / 2)
cairo_arc(display, x, y, graduation_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display,rgb_to_r_g_b(graduation_fg_colour,graduation_fg_alpha))
cairo_stroke(display)
cairo_set_line_width(display, graph_thickness)
i = i + 1
end
end
-- text (rpm value)
local txt_radius = data['txt_radius']
local txt_weight, txt_size = data['txt_weight'], data['txt_size']
local txt_fg_colour, txt_fg_alpha = data['txt_fg_colour'], data['txt_fg_alpha']
local str, value = 0, 0
local str, rpm
str = string.format('${%s %s}', data['name'], data['arg'])
str = conky_parse(str) --input rpm fans
value = tonumber(str) -- rpm fans
cairo_select_font_face (display, "ani", CAIRO_FONT_SLANT_NORMAL, txt_weight)
cairo_set_font_size (display, txt_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(txt_fg_colour, txt_fg_alpha))
-- bad hack but not enough time !
if value >= 2000 then cairo_move_to (display, x - ((1.3 * txt_size) - 1), y + (0.5 * txt_size) - 3) end
if value <= 1999 then cairo_move_to (display, x - ((1.3 * txt_size) + 2), y + (0.5 * txt_size) - 3) end
if value <= 999 then cairo_move_to (display, x - ((1.2 * txt_size) - 6), y + (0.5 * txt_size) - 3) end
if value <= 199 then cairo_move_to (display, x - ((1.2 * txt_size) - 3), y + (0.5 * txt_size) - 3) end
if value <= 99 then cairo_move_to (display, x - ((1.2 * txt_size) - 17), y + (0.5 * txt_size) - 3) end
if value <= 9 then cairo_move_to (display, x - ((1.1 * txt_size) - 20), y + (0.5 * txt_size) - 3) end
-- change theses values to center! ^^
cairo_show_text (display, value)
cairo_stroke (display)
-- caption (fan name)
local caption = data['caption']
local caption_weight, caption_size = data['caption_weight'], data['caption_size']
local caption_fg_colour, caption_fg_alpha = data['caption_fg_colour'], data['caption_fg_alpha']
local tox = graph_radius * (math.cos((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
local toy = graph_radius * (math.sin((graph_start_angle * 2 * math.pi / 360)-(math.pi/2))) + 5
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, caption_weight);
cairo_set_font_size (display, caption_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(caption_fg_colour, caption_fg_alpha))
cairo_move_to (display, x + tox + 5, y + toy + 1)
-- really bad hack but not enough time !
if graph_start_angle < 105 then
cairo_move_to (display, x + tox - 30, y + toy + 1)
end
cairo_show_text (display, caption) -- caption
cairo_stroke (display)
end
-------------------------------------------------------------------------------
-- go_gauge_rings
-- loads data and displays gauges
--
function go_gauge_rings(display)
local function load_gauge_rings(display, data)
local str, value = 0, 0
local str, rpm
local max_value = data['max_value']
local max_rpm = data['max_rpm']
str = string.format('${%s %s}', data['name'], data['arg'])
str = conky_parse(str) --rpm fans
value = tonumber(str) -- rpm fans
rpm = (value / max_rpm * max_value)
rpm = string.format ("%.f", rpm)
draw_gauge_ring(display, data, rpm)
end
for i in pairs(gauge) do
load_gauge_rings(display, gauge[i])
end
end
-------------------------------------------------------------------------------
-- MAIN
function conky_main()
if conky_window == nil then
return
end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
local display = cairo_create(cs)
local updates = conky_parse('${updates}')
update_num = tonumber(updates)
if update_num > 0 then
go_gauge_rings(display)
end
cairo_surface_destroy(cs)
cairo_destroy(display)
end
Put this in your conky script:
Code: Select all
lua_load = 'single_ring.lua',
lua_draw_hook_post = 'main',
- Logansfury
- Level 8
- Posts: 2350
- Joined: Fri Oct 27, 2023 4:08 pm
- Location: Las Vegas NV, USA
Re: Do any guage templates exist?
WooHoooo!
Hey Koentje
Fantastic thank you, I am going to take this and see what I can learn about ring graphs.
Hey Koentje
Fantastic thank you, I am going to take this and see what I can learn about ring graphs.
- Logansfury
- Level 8
- Posts: 2350
- Joined: Fri Oct 27, 2023 4:08 pm
- Location: Las Vegas NV, USA
Re: Do any guage templates exist?
Hey Koentje,
What is this example ring tracking? I see you have marked it CPU0, there is a max rpm=100 and have a fan blades bg in the guage, but my numbers are jumping between 35 and 99. Is this 1/100th of the CPU fan speed?
This is an awesome little gauge, it looks great!
What is this example ring tracking? I see you have marked it CPU0, there is a max rpm=100 and have a fan blades bg in the guage, but my numbers are jumping between 35 and 99. Is this 1/100th of the CPU fan speed?
This is an awesome little gauge, it looks great!
Re: Do any guage templates exist?
Mmh.. lemme think... cpu 0... mmh.... what could it be tracking..?Logansfury wrote: ⤴Mon Jun 10, 2024 1:54 am What is this example ring tracking? I see you have marked it CPU0,
Btw if cpu 0 is jumping to 99% the cpu is getting kicked pretty well by something.
That is max value of the object. I use this script for my fans, so if a fan rotate at a max speed of 2000, then max_rpm should be 2000.there is a max rpm=100
If max_rpm is a higher number, then the ring will never be maxed out. If the number is lower, then the ring maxed out and starts over..
set graduation_radius= to 0 and blades are gone....and have a fan blades bg in the guage
CPU %...but my numbers are jumping between 35 and 99. Is this 1/100th of the CPU fan speed?
max_value= is the circle of the ring. 127 is a full circle. So if you leave caption blank and set it this to 127 you get a full circle.
name= and arg= are the object and argument you want the circle to display.
name='memperc' shows memory percentage.
name='exec' and arg='cat /somedir/somefile' shows a value that somefile holds.
- Logansfury
- Level 8
- Posts: 2350
- Joined: Fri Oct 27, 2023 4:08 pm
- Location: Las Vegas NV, USA
Re: Do any guage templates exist?
Great info, thank you
- Logansfury
- Level 8
- Posts: 2350
- Joined: Fri Oct 27, 2023 4:08 pm
- Location: Las Vegas NV, USA
Re: Do any guage templates exist?
I am working on getting a copy of this guage edited to what I want for my display:
I have my start and end points, but need to know how to adjust the other setting to keep accuracy. I was just at 85% and the progress bar was maxed out as if it were at 100.
Can the gauge number be displayed with a percentage sign?
Here is my edit of the .lua:
I have my start and end points, but need to know how to adjust the other setting to keep accuracy. I was just at 85% and the progress bar was maxed out as if it were at 100.
Can the gauge number be displayed with a percentage sign?
Here is my edit of the .lua:
Code: Select all
gauge = {
{
name='cpu 0', arg='',
max_value=95, max_rpm=100,
x=50, y=50,
graph_radius=35,
graph_thickness=8,
graph_start_angle=225,
graph_unit_angle=2.84, graph_unit_thickness=2.7,
graph_bg_colour=0xFFEEEE, graph_bg_alpha=0.1,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=1.0,
hand_fg_colour=0xFFFFFF, hand_fg_alpha=1.0,
txt_radius=0,
txt_weight=1, txt_size=23.0,
txt_fg_colour=0xFFFFFF, txt_fg_alpha=1.0,
font_txt='Neon 80s',
graduation_radius=0,
graduation_thickness=28, graduation_mark_thickness=29,
graduation_unit_angle=72,
graduation_fg_colour=0xAAAAAA, graduation_fg_alpha=0.2,
font_caption='Droid Sans',
caption='CPU 0',
caption_weight=1, caption_size=14,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=100,
},
Last edited by Logansfury on Tue Jun 11, 2024 12:55 am, edited 2 times in total.
- Logansfury
- Level 8
- Posts: 2350
- Joined: Fri Oct 27, 2023 4:08 pm
- Location: Las Vegas NV, USA
Re: Do any guage templates exist?
Hmmmmmmmmmmm
something is hammering the hell out of my cpu, its reading 98/100
but the good news is the gauge seems to have aligned itself to my edits, the 98 was exactly where it should have been on the indicator
something is hammering the hell out of my cpu, its reading 98/100
but the good news is the gauge seems to have aligned itself to my edits, the 98 was exactly where it should have been on the indicator