chart:
labels improved colors more dynamic defaults added git-svn-id: file:///home/jan/tmp/wetterstation/trunk@97 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
parent
8a307c332c
commit
b8188a16e9
|
|
@ -29,6 +29,39 @@
|
|||
#define DEFAULT_CONFIG_FILE "./chart.conf" /* Standart-Configdatei */
|
||||
|
||||
|
||||
/* Image-Default-Werte ----------------------------------------------- */
|
||||
#define DEFAULT_HEADLINE "Wetter - Diagram"
|
||||
#define DEFAULT_MANUAL_TABLE "no"
|
||||
#define DEFAULT_TABLE_FIELD "temp"
|
||||
#define DEFAULT_GEN_INTERVAL "15m"
|
||||
#define DEFAULT_SHOW_INTERVAL "2d"
|
||||
#define DEFAULT_LABEL_INTERVAL "2h"
|
||||
#define DEFAULT_LABEL_SUM "no"
|
||||
#define DEFAULT_WIDTH "800"
|
||||
#define DEFAULT_HEIGHT "300"
|
||||
#define DEFAULT_SENS_ID "1"
|
||||
#define DEFAULT_VAL_KOEFF "0.1"
|
||||
#define DEFAULT_UNIT "°C"
|
||||
#define DEFAULT_X_AX_DESC "X-Axis"
|
||||
#define DEFAULT_Y_AX_DESC "Y-Axis"
|
||||
#define DEFAULT_X_FORMAT "%H:%M"
|
||||
#define DEFAULT_X_FORMAT_EXTRA "%d.%m.%y| %H:%M"
|
||||
|
||||
#define DEFAULT_BG_COLOR "DF:DF:EF:00"
|
||||
#define DEFAULT_DIA_BG_COLOR "F0:A0:D0:D0"
|
||||
#define DEFAULT_ZERO_LINE_COLOR "BF:80:80:40"
|
||||
#define DEFAULT_DIA_LINE_COLOR "60:30:50:30"
|
||||
#define DEFAULT_DIA_GRID_X_COLOR "60:60:60:EF"
|
||||
#define DEFAULT_DIA_GRID_Y_COLOR "60:60:60:EF"
|
||||
#define DEFAULT_DIA_BORDER_COLOR "a0:a0:a0:af"
|
||||
#define DEFAULT_HEADLINE_COLOR "80:10:10:30"
|
||||
#define DEFAULT_LABEL_X_COLOR "60:60:60:30"
|
||||
#define DEFAULT_LABEL_EXTRA_X_COLOR "60:10:10:20"
|
||||
#define DEFAULT_LABEL_Y_COLOR "20:20:20:20"
|
||||
#define DEFAULT_DESCR_X_COLOR "10:50:10:20"
|
||||
#define DEFAULT_DESCR_Y_COLOR "10:10:50:20"
|
||||
|
||||
|
||||
|
||||
/*Alle möglichen Definitionen, die in allen code-schnipseln benötigt werden*/
|
||||
|
||||
|
|
|
|||
|
|
@ -23,17 +23,22 @@ typedef struct image_cfg {
|
|||
char *y_desc;
|
||||
int sens_id;
|
||||
double val_koeff;
|
||||
char *x_fmt_extra;
|
||||
char *x_fmt;
|
||||
|
||||
img_color_ptr bg_color;
|
||||
img_color_ptr dia_bg_color;
|
||||
img_color_ptr dia_line_color;
|
||||
img_color_ptr dia_grid_color;
|
||||
img_color_ptr dia_grid_x_color;
|
||||
img_color_ptr dia_grid_y_color;
|
||||
img_color_ptr dia_border_color;
|
||||
img_color_ptr zero_line_color;
|
||||
img_color_ptr label_color;
|
||||
img_color_ptr headline_color;
|
||||
|
||||
|
||||
img_color_ptr label_x_color;
|
||||
img_color_ptr label_extra_x_color;
|
||||
img_color_ptr label_y_color;
|
||||
img_color_ptr desc_x_color;
|
||||
img_color_ptr desc_y_color;
|
||||
|
||||
|
||||
} image_cfg_t;
|
||||
|
|
|
|||
|
|
@ -27,9 +27,12 @@
|
|||
#include "../config.h"
|
||||
#include "image_common.h"
|
||||
|
||||
#define BUFFSIZE 512
|
||||
|
||||
static int read_time(const char *, void *);
|
||||
static int read_color(const char *, void *);
|
||||
static int read_double(const char *, void *);
|
||||
static int read_fmt_str(const char *, void *);
|
||||
|
||||
|
||||
|
||||
|
|
@ -38,35 +41,71 @@ static int read_double(const char *, void *);
|
|||
static const config_keyword keywords[] = {
|
||||
/* keyword handler variable address default */
|
||||
{"filename", read_str, &(img_cfg.file_name), ""},
|
||||
{"headline", read_str, &(img_cfg.headline), ""},
|
||||
{"table_field", read_str, &(img_cfg.table_field), ""},
|
||||
{"manual_table", read_yn, &(img_cfg.manual_table), "no"},
|
||||
{"headline", read_str, &(img_cfg.headline), DEFAULT_HEADLINE},
|
||||
{"table_field", read_str, &(img_cfg.table_field), DEFAULT_TABLE_FIELD},
|
||||
{"manual_table", read_yn, &(img_cfg.manual_table), DEFAULT_MANUAL_TABLE},
|
||||
{"manual_table_name", read_str, &(img_cfg.table_name), ""},
|
||||
{"gen_interval", read_time, &(img_cfg.gen_interval), ""},
|
||||
{"show_interval", read_time, &(img_cfg.show_interval), ""},
|
||||
{"label_interval", read_time, &(img_cfg.label_interval), ""},
|
||||
{"label_sum", read_yn, &(img_cfg.label_sum), ""},
|
||||
{"width", read_int, &(img_cfg.width), ""},
|
||||
{"height", read_int, &(img_cfg.height), ""},
|
||||
{"unit", read_str, &(img_cfg.unit), ""},
|
||||
{"sensor_id", read_int, &(img_cfg.sens_id), ""},
|
||||
{"x_axis_desc", read_str, &(img_cfg.x_desc), ""},
|
||||
{"y_axis_desc", read_str, &(img_cfg.y_desc), ""},
|
||||
{"value_koeffizient", read_double, &(img_cfg.val_koeff), ""},
|
||||
{"gen_interval", read_time, &(img_cfg.gen_interval), DEFAULT_GEN_INTERVAL},
|
||||
{"show_interval", read_time, &(img_cfg.show_interval), DEFAULT_SHOW_INTERVAL},
|
||||
{"label_interval", read_time, &(img_cfg.label_interval), DEFAULT_LABEL_INTERVAL},
|
||||
{"label_sum", read_yn, &(img_cfg.label_sum), DEFAULT_LABEL_SUM},
|
||||
{"width", read_int, &(img_cfg.width), DEFAULT_WIDTH},
|
||||
{"height", read_int, &(img_cfg.height), DEFAULT_HEIGHT},
|
||||
{"unit", read_str, &(img_cfg.unit), DEFAULT_UNIT},
|
||||
{"sensor_id", read_int, &(img_cfg.sens_id), DEFAULT_SENS_ID},
|
||||
{"x_axis_desc", read_str, &(img_cfg.x_desc), DEFAULT_X_AX_DESC},
|
||||
{"y_axis_desc", read_str, &(img_cfg.y_desc), DEFAULT_Y_AX_DESC},
|
||||
{"x_format", read_fmt_str, &(img_cfg.x_fmt), DEFAULT_X_FORMAT},
|
||||
{"x_format_extra", read_fmt_str, &(img_cfg.x_fmt_extra), DEFAULT_X_FORMAT_EXTRA},
|
||||
{"value_koeffizient", read_double, &(img_cfg.val_koeff), DEFAULT_VAL_KOEFF},
|
||||
|
||||
|
||||
{"bg_color", read_color, &(img_cfg.bg_color), ""},
|
||||
{"dia_bg_color", read_color, &(img_cfg.dia_bg_color), ""},
|
||||
{"dia_line_color", read_color, &(img_cfg.dia_line_color), ""},
|
||||
{"dia_grid_color", read_color, &(img_cfg.dia_grid_color), ""},
|
||||
{"dia_border_color", read_color, &(img_cfg.dia_border_color), ""},
|
||||
{"zero_line_color", read_color, &(img_cfg.zero_line_color), ""},
|
||||
{"label_color", read_color, &(img_cfg.label_color), ""},
|
||||
{"headline_color", read_color, &(img_cfg.headline_color), ""},
|
||||
{"bg_color", read_color, &(img_cfg.bg_color), DEFAULT_BG_COLOR},
|
||||
{"dia_bg_color", read_color, &(img_cfg.dia_bg_color), DEFAULT_DIA_BG_COLOR},
|
||||
{"dia_line_color", read_color, &(img_cfg.dia_line_color), DEFAULT_DIA_LINE_COLOR},
|
||||
{"dia_grid_x_color", read_color, &(img_cfg.dia_grid_x_color), DEFAULT_DIA_GRID_X_COLOR},
|
||||
{"dia_grid_y_color", read_color, &(img_cfg.dia_grid_y_color), DEFAULT_DIA_GRID_Y_COLOR},
|
||||
{"dia_border_color", read_color, &(img_cfg.dia_border_color), DEFAULT_DIA_BORDER_COLOR},
|
||||
{"zero_line_color", read_color, &(img_cfg.zero_line_color), DEFAULT_ZERO_LINE_COLOR},
|
||||
{"headline_color", read_color, &(img_cfg.headline_color), DEFAULT_HEADLINE_COLOR},
|
||||
{"label_x_color", read_color, &(img_cfg.label_x_color), DEFAULT_LABEL_X_COLOR},
|
||||
{"label_extra_x_color", read_color, &(img_cfg.label_extra_x_color), DEFAULT_LABEL_EXTRA_X_COLOR},
|
||||
{"label_y_color", read_color, &(img_cfg.label_y_color), DEFAULT_LABEL_Y_COLOR},
|
||||
{"descr_y_color", read_color, &(img_cfg.desc_y_color), DEFAULT_DESCR_X_COLOR},
|
||||
{"descr_x_color", read_color, &(img_cfg.desc_x_color), DEFAULT_DESCR_Y_COLOR},
|
||||
|
||||
{"", NULL, NULL, ""}
|
||||
};
|
||||
|
||||
static int read_fmt_str(const char *line, void *arg){
|
||||
char **dest = arg;
|
||||
char *new_line = NULL;
|
||||
char *temp = malloc(sizeof(char)*BUFFSIZE);
|
||||
char *p;
|
||||
|
||||
read_str(line, &new_line);
|
||||
|
||||
if(new_line != NULL){
|
||||
p = strchr(new_line, '|');
|
||||
if(p != NULL){
|
||||
strcpy(p, "\0");
|
||||
strcpy(temp, new_line);
|
||||
strcat(temp, "\r\n");
|
||||
strcat(temp, p+1);
|
||||
} else {
|
||||
strcpy(temp, new_line);
|
||||
}
|
||||
|
||||
if (*dest) free(*dest);
|
||||
*dest = strdup(temp);
|
||||
free(new_line);
|
||||
}
|
||||
free(temp);
|
||||
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int read_double(const char *line, void *arg){
|
||||
double *dest = arg;
|
||||
|
|
@ -106,8 +145,9 @@ static int read_time(const char *line, void *arg){
|
|||
long *dest = arg;
|
||||
long mult = 0;
|
||||
char *p = NULL;
|
||||
char *tmp = strdup(line);
|
||||
|
||||
p = strchr(line, '\0');
|
||||
p = strchr(tmp, '\0');
|
||||
if(p != NULL){
|
||||
switch( *(p - 1) ){
|
||||
case 's':
|
||||
|
|
@ -135,7 +175,7 @@ static int read_time(const char *line, void *arg){
|
|||
}
|
||||
}
|
||||
|
||||
*dest = atol(line) * mult;
|
||||
*dest = atol(tmp) * mult;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ label_list_ptr get_x_label_list(int c_width){
|
|||
|
||||
for ( i = 1; i < num; i++ ) {
|
||||
timestamp = base_time + (i * img_cfg.label_interval);
|
||||
strftime(buff, BUFFSIZE, "%d.%m.%y", localtime(×tamp) );
|
||||
strftime(buff, BUFFSIZE, img_cfg.x_fmt, localtime(×tamp) );
|
||||
|
||||
new_ptr = malloc(sizeof(label_list_t));
|
||||
new_ptr->pos = floor( ((double)i) * factor);
|
||||
|
|
@ -177,7 +177,6 @@ int scale_y_coords(pix_list_ptr ptr, int c_height){
|
|||
|
||||
DEBUGOUT2(" Nullinie bei: %d\n", zero_line);
|
||||
|
||||
//printf("%f -- %f -- %d\n", range, pix_per_scale, zero_line);
|
||||
if ((real_max - real_min + 1) >= real_max){
|
||||
return zero_line;
|
||||
} else {
|
||||
|
|
@ -199,7 +198,7 @@ char *get_max_time(){
|
|||
char *buff = malloc(sizeof(char)*BUFFSIZE);
|
||||
time_t timestamp = base_time + img_cfg.show_interval;
|
||||
|
||||
strftime(buff, BUFFSIZE, "%d.%m.%y\r\n %H:%M", localtime(×tamp) );
|
||||
strftime(buff, BUFFSIZE, img_cfg.x_fmt_extra, localtime(×tamp) );
|
||||
|
||||
return buff;
|
||||
}
|
||||
|
|
@ -208,7 +207,7 @@ char *get_min_time(){
|
|||
char *buff = malloc(sizeof(char)*BUFFSIZE);
|
||||
time_t timestamp = base_time ;
|
||||
|
||||
strftime(buff, BUFFSIZE, "%d.%m.%y\r\n %H:%M", localtime(×tamp) );
|
||||
strftime(buff, BUFFSIZE, img_cfg.x_fmt_extra, localtime(×tamp) );
|
||||
|
||||
return buff;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,10 +91,15 @@ static gdImagePtr draw_image(gdImagePtr img){
|
|||
color val_line_c = alloc_alpha_color(img, img_cfg.dia_line_color);
|
||||
color zero_line_c = alloc_alpha_color(img, img_cfg.zero_line_color);
|
||||
color dia_bg_c = alloc_alpha_color(img, img_cfg.dia_bg_color);
|
||||
color diag_grid_c = alloc_alpha_color(img, img_cfg.dia_grid_color);
|
||||
color diag_grid_x_c = alloc_alpha_color(img, img_cfg.dia_grid_x_color);
|
||||
color diag_grid_y_c = alloc_alpha_color(img, img_cfg.dia_grid_y_color);
|
||||
color dia_border_c = alloc_alpha_color(img, img_cfg.dia_border_color);
|
||||
color headline_c = alloc_alpha_color(img, img_cfg.headline_color);
|
||||
color label_c = alloc_alpha_color(img, img_cfg.label_color);
|
||||
color label_x_c = alloc_alpha_color(img, img_cfg.label_x_color);
|
||||
color label_xl_c = alloc_alpha_color(img, img_cfg.label_extra_x_color);
|
||||
color label_y_c = alloc_alpha_color(img, img_cfg.label_y_color);
|
||||
color desc_x_c = alloc_alpha_color(img, img_cfg.desc_x_color);
|
||||
color desc_y_c = alloc_alpha_color(img, img_cfg.desc_y_color);
|
||||
|
||||
/* Ueberschrift */
|
||||
head_d = calc_text_dim(img_cfg.headline, 16, 0);
|
||||
|
|
@ -128,8 +133,8 @@ static gdImagePtr draw_image(gdImagePtr img){
|
|||
free(buff);
|
||||
|
||||
/* Beschriftung y-, x-Achse */
|
||||
gdImageStringFT(img, &brect[0], headline_c, IMG_FONT, 9, 1.57079, 5 + ((y_desc_d.r_b_x - y_desc_d.r_t_x) / 2), offset_y_top + (dia_height / 2) + ((y_desc_d.l_t_y - y_desc_d.r_t_y) / 2), img_cfg.y_desc);
|
||||
gdImageStringFT(img, &brect[0], headline_c, IMG_FONT, 9, 0 , (offset_x_left + (dia_width / 2)) - (x_desc_d.width / 2), (img_cfg.height - 5) - x_desc_d.l_b_y, img_cfg.x_desc);
|
||||
gdImageStringFT(img, &brect[0], desc_y_c, IMG_FONT, 9, 1.57079, 5 + ((y_desc_d.r_b_x - y_desc_d.r_t_x) / 2), offset_y_top + (dia_height / 2) + ((y_desc_d.l_t_y - y_desc_d.r_t_y) / 2), img_cfg.y_desc);
|
||||
gdImageStringFT(img, &brect[0], desc_x_c, IMG_FONT, 9, 0 , (offset_x_left + (dia_width / 2)) - (x_desc_d.width / 2), (img_cfg.height - 5) - x_desc_d.l_b_y, img_cfg.x_desc);
|
||||
|
||||
/* Werte holen */
|
||||
pix_list = get_pix_list(dia_width);
|
||||
|
|
@ -141,9 +146,9 @@ static gdImagePtr draw_image(gdImagePtr img){
|
|||
/* horizontale linien + y - Labels */
|
||||
y_labels = get_y_label_list(dia_height, dia_y_padding, 0);
|
||||
for (; y_labels; y_labels = y_labels->next){
|
||||
gdImageLine(img, offset_x_left - 2, offset_y_top + y_labels->pos, img_cfg.width - offset_x_right, offset_y_top + y_labels->pos, diag_grid_c);
|
||||
gdImageLine(img, offset_x_left - 2, offset_y_top + y_labels->pos, img_cfg.width - offset_x_right, offset_y_top + y_labels->pos, diag_grid_x_c);
|
||||
y_label_d = calc_text_dim(y_labels->text, 7, 0);
|
||||
gdImageStringFT(img, &brect[0], label_c, IMG_FONT, 7, 0, (offset_x_left - 5 - y_label_max_width) + (y_label_max_width - y_label_d.width), offset_y_top + y_labels->pos + (y_label_d.height / 2), y_labels->text);
|
||||
gdImageStringFT(img, &brect[0], label_y_c, IMG_FONT, 7, 0, (offset_x_left - 5 - y_label_max_width) + (y_label_max_width - y_label_d.width), offset_y_top + y_labels->pos + (y_label_d.height / 2), y_labels->text);
|
||||
}
|
||||
|
||||
/* y-Werte skalieren */
|
||||
|
|
@ -152,14 +157,14 @@ static gdImagePtr draw_image(gdImagePtr img){
|
|||
/* Vertikale linien + x - Labels*/
|
||||
x_labels = get_x_label_list(dia_width);
|
||||
for(; x_labels; x_labels = x_labels->next){
|
||||
gdImageLine(img, offset_x_left + x_labels->pos, offset_y_top, offset_x_left + x_labels->pos, img_cfg.height - offset_y_bottom + 2, diag_grid_c);
|
||||
gdImageLine(img, offset_x_left + x_labels->pos, offset_y_top, offset_x_left + x_labels->pos, img_cfg.height - offset_y_bottom + 2, diag_grid_y_c);
|
||||
x_label_d = calc_text_dim(x_labels->text, 7, 1.0);
|
||||
gdImageStringFT(img, &brect[0], headline_c, IMG_FONT, 7, 1.0, (offset_x_left + x_labels->pos) - ( x_label_d.r_t_x + ((x_label_d.r_b_x - x_label_d.r_t_x) / 2)), (img_cfg.height - offset_y_bottom + 5) - (x_label_d.r_t_y), x_labels->text);
|
||||
gdImageStringFT(img, &brect[0], label_x_c, IMG_FONT, 7, 1.0, (offset_x_left + x_labels->pos) - ( x_label_d.r_t_x + ((x_label_d.r_b_x - x_label_d.r_t_x) / 2)), (img_cfg.height - offset_y_bottom + 5) - (x_label_d.r_t_y), x_labels->text);
|
||||
}
|
||||
x_label_d = calc_text_dim(get_min_time(), 8, 1.0);
|
||||
gdImageStringFT(img, &brect[0], headline_c, IMG_FONT, 8, 1.0, (offset_x_left ) - ( x_label_d.r_t_x + ((x_label_d.r_b_x - x_label_d.r_t_x) / 2)), (img_cfg.height - offset_y_bottom + 5) - (x_label_d.r_t_y), get_min_time() );
|
||||
gdImageStringFT(img, &brect[0], label_xl_c, IMG_FONT, 8, 1.0, (offset_x_left ) - ( x_label_d.r_t_x + ((x_label_d.r_b_x - x_label_d.r_t_x) / 2)), (img_cfg.height - offset_y_bottom + 5) - (x_label_d.r_t_y), get_min_time() );
|
||||
x_label_d = calc_text_dim(get_max_time(), 8, 1.0);
|
||||
gdImageStringFT(img, &brect[0], headline_c, IMG_FONT, 8, 1.0, (offset_x_left + dia_width) - ( x_label_d.r_t_x + ((x_label_d.r_b_x - x_label_d.r_t_x) / 2)), (img_cfg.height - offset_y_bottom + 5) - (x_label_d.r_t_y), get_max_time() );
|
||||
gdImageStringFT(img, &brect[0], label_xl_c, IMG_FONT, 8, 1.0, (offset_x_left + dia_width) - ( x_label_d.r_t_x + ((x_label_d.r_b_x - x_label_d.r_t_x) / 2)), (img_cfg.height - offset_y_bottom + 5) - (x_label_d.r_t_y), get_max_time() );
|
||||
|
||||
/* Nullinie */
|
||||
if (zero_line != -1)
|
||||
|
|
|
|||
|
|
@ -1,25 +1,36 @@
|
|||
filename /home/jan/Testbild.png
|
||||
headline Testbild bla
|
||||
headline Temparatur - Innensensor
|
||||
manual_table no
|
||||
manual_table_name auss2_data
|
||||
table_field temp
|
||||
#table_field press
|
||||
gen_interval 1
|
||||
show_interval 30d
|
||||
show_interval 10d
|
||||
label_interval 1d
|
||||
label_sum no
|
||||
width 800
|
||||
height 300
|
||||
sensor_id 1
|
||||
ensor_id 1
|
||||
value_koeffizient 0.1
|
||||
#value_koeffizient 1.0
|
||||
unit °C
|
||||
x_axis_desc Zeit
|
||||
y_axis_desc Temparatur (°C)
|
||||
x_format %d.%m.%y
|
||||
x_format_extra %d.%m.%y| %H:%M
|
||||
|
||||
bg_color DF:DF:EF:00 #test
|
||||
dia_bg_color F0:A0:D0:D0 #test
|
||||
zero_line_color BF:80:80:40 #test
|
||||
dia_line_color 60:30:50:30 #test
|
||||
dia_grid_color 60:60:60:EF #test
|
||||
dia_border_color a0:a0:a0:af #test
|
||||
label_color 10:10:10:00 #test
|
||||
headline_color 80:10:10:30 #test
|
||||
|
||||
|
||||
bg_color DF:DF:EF:00
|
||||
dia_bg_color F0:A0:D0:D0
|
||||
zero_line_color BF:80:80:40
|
||||
dia_line_color 60:30:50:30
|
||||
dia_grid_x_color 60:60:60:EF
|
||||
dia_grid_y_color 60:60:60:EF
|
||||
dia_border_color a0:a0:a0:af
|
||||
headline_color 80:10:10:30
|
||||
label_x_color 60:60:60:30
|
||||
label_extra_x_color 60:10:10:20
|
||||
label_y_color 20:20:20:20
|
||||
descr_y_color 10:50:10:20
|
||||
descr_x_color 10:10:50:20
|
||||
|
|
|
|||
Loading…
Reference in New Issue