diff --git a/cronjob/chart/definitions.h b/cronjob/chart/definitions.h index dd7737b..0fb9e62 100644 --- a/cronjob/chart/definitions.h +++ b/cronjob/chart/definitions.h @@ -42,6 +42,10 @@ #define DEFAULT_ZERO_MIN "no" #define DEFAULT_AS_BARS "no" #define DEFAULT_SHOW_AVERAGE "yes" +#define DEFAULT_SHOW_MIN "no" +#define DEFAULT_SHOW_MAX "no" +#define DEFAULT_INVERT_MIN "yes" +#define DEFAULT_INVERT_MAX "yes" #define DEFAULT_WIDTH "800" #define DEFAULT_HEIGHT "300" #define DEFAULT_SENS_ID "1" @@ -67,6 +71,8 @@ #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" +#define DEFAULT_MIN_COLOR "32:93:32:10" +#define DEFAULT_MAX_COLOR "be:4a:4a:10" diff --git a/cronjob/chart/image_conf/example.conf b/cronjob/chart/image_conf/example.conf index 5fe0b89..51a157d 100644 --- a/cronjob/chart/image_conf/example.conf +++ b/cronjob/chart/image_conf/example.conf @@ -66,6 +66,15 @@ x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label # Funktioniert NICHT in Verbindung mit Balkendiagrammen show_average yes +# Zeigt in der rechten oberen Ecke die Minimal- bzw. Maximal-Werte an +show_min yes +show_max yes + +# Zeigt die Minimal- bzw. Maximalwerte in der Hintergrundfarbe auf +# einem farbigem Rechteck +invert_min yes +invert_max yes + # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Sonst sollten sie imer auf no stehen! zero_min no # Die Nullinie auf jeden Fall anzeigen @@ -96,3 +105,5 @@ label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Ac label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 # Farbe fuer den Minimalwert in der rechten oberen Ecke +max_color be:4a:4a:10 # Farbe fuer den Maximalwert in der rechten oberen Ecke diff --git a/cronjob/chart/image_conf/hum_ex.conf b/cronjob/chart/image_conf/hum_ex.conf index fed6c42..7f86bbb 100644 --- a/cronjob/chart/image_conf/hum_ex.conf +++ b/cronjob/chart/image_conf/hum_ex.conf @@ -66,6 +66,15 @@ x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label # Funktioniert NICHT in Verbindung mit Balkendiagrammen show_average yes +# Zeigt in der rechten oberen Ecke die Minimal- bzw. Maximal-Werte an +show_min yes +show_max yes + +# Zeigt die Minimal- bzw. Maximalwerte in der Hintergrundfarbe auf +# einem farbigem Rechteck +invert_min yes +invert_max yes + # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Sonst sollten sie imer auf no stehen! zero_min no # Die Nullinie auf jeden Fall anzeigen @@ -96,3 +105,5 @@ label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Ac label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 # Farbe fuer den Minimalwert in der rechten oberen Ecke +max_color be:4a:4a:10 # Farbe fuer den Maximalwert in der rechten oberen Ecke diff --git a/cronjob/chart/image_conf/press_ex.conf b/cronjob/chart/image_conf/press_ex.conf index 2e84bb6..2c37a3c 100644 --- a/cronjob/chart/image_conf/press_ex.conf +++ b/cronjob/chart/image_conf/press_ex.conf @@ -66,6 +66,15 @@ x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label # Funktioniert NICHT in Verbindung mit Balkendiagrammen show_average yes +# Zeigt in der rechten oberen Ecke die Minimal- bzw. Maximal-Werte an +show_min yes +show_max yes + +# Zeigt die Minimal- bzw. Maximalwerte in der Hintergrundfarbe auf +# einem farbigem Rechteck +invert_min yes +invert_max yes + # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Sonst sollten sie imer auf no stehen! zero_min no # Die Nullinie auf jeden Fall anzeigen @@ -96,3 +105,5 @@ label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Ac label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 # Farbe fuer den Minimalwert in der rechten oberen Ecke +max_color be:4a:4a:10 # Farbe fuer den Maximalwert in der rechten oberen Ecke diff --git a/cronjob/chart/image_conf/rain_ex.conf b/cronjob/chart/image_conf/rain_ex.conf index a74af10..43b03c5 100644 --- a/cronjob/chart/image_conf/rain_ex.conf +++ b/cronjob/chart/image_conf/rain_ex.conf @@ -66,6 +66,15 @@ x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label # Funktioniert NICHT in Verbindung mit Balkendiagrammen show_average no +# Zeigt in der rechten oberen Ecke die Minimal- bzw. Maximal-Werte an +show_min no +show_max no + +# Zeigt die Minimal- bzw. Maximalwerte in der Hintergrundfarbe auf +# einem farbigem Rechteck +invert_min yes +invert_max yes + # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Sonst sollten sie imer auf no stehen! zero_min yes # Die Nullinie auf jeden Fall anzeigen @@ -96,3 +105,5 @@ label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Ac label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 # Farbe fuer den Minimalwert in der rechten oberen Ecke +max_color be:4a:4a:10 # Farbe fuer den Maximalwert in der rechten oberen Ecke diff --git a/cronjob/chart/image_conf/temp_ex.conf b/cronjob/chart/image_conf/temp_ex.conf index 70c05fb..8dcdf9e 100644 --- a/cronjob/chart/image_conf/temp_ex.conf +++ b/cronjob/chart/image_conf/temp_ex.conf @@ -66,6 +66,15 @@ x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label # Funktioniert NICHT in Verbindung mit Balkendiagrammen show_average yes +# Zeigt in der rechten oberen Ecke die Minimal- bzw. Maximal-Werte an +show_min yes +show_max yes + +# Zeigt die Minimal- bzw. Maximalwerte in der Hintergrundfarbe auf +# einem farbigem Rechteck +invert_min yes +invert_max yes + # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Sonst sollten sie imer auf no stehen! zero_min no # Die Nullinie auf jeden Fall anzeigen @@ -96,3 +105,5 @@ label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Ac label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 # Farbe fuer den Minimalwert in der rechten oberen Ecke +max_color be:4a:4a:10 # Farbe fuer den Maximalwert in der rechten oberen Ecke diff --git a/cronjob/chart/image_conf/testimage.conf b/cronjob/chart/image_conf/testimage.conf index 22dd9cb..36d6b82 100644 --- a/cronjob/chart/image_conf/testimage.conf +++ b/cronjob/chart/image_conf/testimage.conf @@ -6,8 +6,8 @@ manual_table_name auss2_data table_field temp #table_field press gen_interval 1 -show_interval 1y -label_interval 30d +show_interval 30d +label_interval 3d fixed_timepoint no timepoint 2006-12-17-13-00 width 800 @@ -24,20 +24,43 @@ zero_min no as_bars no label_sum no show_average yes +show_min yes +show_max yes +invert_min yes +invert_max yes -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_av_line_color 50:60:30:D0 -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 +#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_av_line_color 50:60:30:D0 +#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 + + + +bg_color FF:FA:F5:00 # Gesamthintergrund des Diagrames +dia_bg_color F0:D0:A0:D0 # Hintergrund des Bereiches mit den Daten +zero_line_color DF:80:80:40 # Farbe der 'Nulllinie' +dia_line_color 80:30:30:30 # Farbe der Balken oder der Linie +dia_av_line_color 50:A0:50:D0 # Farbe der Durchschnittswert-Linie +dia_grid_x_color 60:60:60:EF # Farbe der Senkrechten Striche +dia_grid_y_color 60:60:60:EF # Farbe der Waagerechten Striche +dia_border_color a0:a0:a0:a0 # Farbe des Diagramrahmens (rahmen um den Datenbereich) +headline_color 10:80:10:30 # Farbe der Ueberschrift +label_x_color 20:20:20:00 # Farbe der Labels an der X-Achse +label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Achse +label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse +descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung +descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 +max_color be:4a:4a:10 diff --git a/cronjob/chart/image_conf/wind_ex.conf b/cronjob/chart/image_conf/wind_ex.conf index 4d6c9e1..74f7a56 100644 --- a/cronjob/chart/image_conf/wind_ex.conf +++ b/cronjob/chart/image_conf/wind_ex.conf @@ -66,6 +66,15 @@ x_format_extra %d.%m.%y| %H:%M # Das ersre und das letzte Label # Funktioniert NICHT in Verbindung mit Balkendiagrammen show_average yes +# Zeigt in der rechten oberen Ecke die Minimal- bzw. Maximal-Werte an +show_min no +show_max yes + +# Zeigt die Minimal- bzw. Maximalwerte in der Hintergrundfarbe auf +# einem farbigem Rechteck +invert_min yes +invert_max yes + # Folgende Angaben sind vor allem fuer die Balkendiagramme wichtig. # Sonst sollten sie imer auf no stehen! zero_min no # Die Nullinie auf jeden Fall anzeigen @@ -96,3 +105,5 @@ label_extra_x_color 10:10:40:00 # Farbe des ersten und lezten Labels an der X-Ac label_y_color 10:10:10:00 # Farbe der Labels an der Y-Achse descr_y_color 10:50:10:20 # Farbe der x-Achsen Beschreibung descr_x_color 10:10:50:20 # Farbe der y-Achsen-Beschreibung +min_color 32:93:32:10 # Farbe fuer den Minimalwert in der rechten oberen Ecke +max_color be:4a:4a:10 # Farbe fuer den Maximalwert in der rechten oberen Ecke diff --git a/cronjob/chart/image_file/image_common.h b/cronjob/chart/image_file/image_common.h index 4ef8a14..b34e690 100644 --- a/cronjob/chart/image_file/image_common.h +++ b/cronjob/chart/image_file/image_common.h @@ -55,6 +55,10 @@ typedef struct image_cfg { int zero_min; /* Nullinie auf jeden Fall anzeigen */ int bars; /* Balken malen statt einer Linie */ int show_average; /* Durchschnittslinie zeichnen */ + int show_min; + int show_max; + int invert_min; + int invert_max; int dflt_dir; /* Standart - Verzeichnis fuer die Bilder */ /* Farben */ @@ -72,6 +76,8 @@ typedef struct image_cfg { img_color_ptr label_y_color; img_color_ptr desc_x_color; img_color_ptr desc_y_color; + img_color_ptr max_color; + img_color_ptr min_color; } image_cfg_t; /* Entfaelt die aktuelle Bild - Config */ diff --git a/cronjob/chart/image_file/image_config.c b/cronjob/chart/image_file/image_config.c index 6c9123c..18f274d 100644 --- a/cronjob/chart/image_file/image_config.c +++ b/cronjob/chart/image_file/image_config.c @@ -61,7 +61,11 @@ static const config_keyword keywords[] = { {"sensor_id", read_int, &(img_cfg.sens_id), DEFAULT_SENS_ID}, {"zero_min", read_yn, &(img_cfg.zero_min), DEFAULT_ZERO_MIN}, {"as_bars", read_yn, &(img_cfg.bars), DEFAULT_AS_BARS}, - {"show_average", read_yn, &(img_cfg.show_average), DEFAULT_SHOW_AVERAGE}, + {"show_average", read_yn, &(img_cfg.show_average), DEFAULT_SHOW_AVERAGE}, + {"show_min", read_yn, &(img_cfg.show_min), DEFAULT_SHOW_MIN}, + {"show_max", read_yn, &(img_cfg.show_max), DEFAULT_SHOW_MAX}, + {"invert_min", read_yn, &(img_cfg.invert_min), DEFAULT_INVERT_MIN}, + {"invert_max", read_yn, &(img_cfg.invert_max), DEFAULT_INVERT_MAX}, {"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}, @@ -83,6 +87,8 @@ static const config_keyword keywords[] = { {"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}, + {"max_color", read_color, &(img_cfg.max_color), DEFAULT_MAX_COLOR}, + {"min_color", read_color, &(img_cfg.min_color), DEFAULT_MIN_COLOR}, {"", NULL, NULL, ""} }; diff --git a/cronjob/chart/image_file/image_data.c b/cronjob/chart/image_file/image_data.c index 585a3d4..9a89c2d 100644 --- a/cronjob/chart/image_file/image_data.c +++ b/cronjob/chart/image_file/image_data.c @@ -51,7 +51,7 @@ static PGresult *pg_check_exec(PGconn *, char *); static char *get_type_table_by_id(PGconn *, int ); -/* Bibt die Liste mit den y-Labels zurueck */ +/* Gibt die Liste mit den y-Labels zurueck */ label_list_ptr get_y_label_list(int c_hight, int padding){ int max_val = 0; /* Maximaler Wert */ int min_val = 0; /* Minimaler Wert */ @@ -251,15 +251,22 @@ int scale_y_coords(pix_list_ptr ptr, int c_height){ /* Maximaler wert */ -pix_list_ptr get_max_val(){ +pix_list_ptr get_max_elem(){ return min; } +double get_max_val(){ + return real_max; +} + /* Minimaler Wert */ -pix_list_ptr get_min_val(){ +pix_list_ptr get_min_elem(){ return max; } +double get_min_val(){ + return real_min; +} /* Maximale Zeit */ diff --git a/cronjob/chart/image_file/image_data.h b/cronjob/chart/image_file/image_data.h index acc4dcd..fb2078d 100644 --- a/cronjob/chart/image_file/image_data.h +++ b/cronjob/chart/image_file/image_data.h @@ -59,12 +59,14 @@ pix_list_ptr build_average_line(pix_list_ptr real_list, int c_width); /* Max. Wert */ -pix_list_ptr get_min_val(); +pix_list_ptr get_min_elem(); +double get_min_val(); /* Min. Wert */ -pix_list_ptr get_max_val(); - +pix_list_ptr get_max_elem(); +double get_max_val(); + /* Max. Zeit */ char *get_max_time(); diff --git a/cronjob/chart/image_file/image_draw.c b/cronjob/chart/image_file/image_draw.c index 0e7ca7d..3012c77 100644 --- a/cronjob/chart/image_file/image_draw.c +++ b/cronjob/chart/image_file/image_draw.c @@ -31,6 +31,8 @@ #include "image_common.h" #define SHORTBUFFSIZE 64 +#define MIN_MAX_BUFF 125 +#define MIN_MAX_SIZE 7 /* der besseren Lesbarkeit wegen einen Farbtyp definiert */ typedef int color; @@ -105,8 +107,11 @@ static gdImagePtr draw_image(gdImagePtr img){ int y_label_max_width = 0; int i; int temp_x2, temp_x1, temp_y1; + int min_max_width = 0; char *buff; + char * min_buff ; + char * max_buff ; time_t ts; /* Groeßenangaben fuer die einzelnen Texte */ @@ -115,6 +120,9 @@ static gdImagePtr draw_image(gdImagePtr img){ dimension_t x_label_d; dimension_t x_desc_d; dimension_t y_desc_d; + dimension_t min_val_d; + dimension_t max_val_d; + dimension_t arrow_d; /* Farben */ color val_line_c = alloc_alpha_color(img, img_cfg.dia_line_color); @@ -130,6 +138,10 @@ static gdImagePtr draw_image(gdImagePtr img){ 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); + color min_c = alloc_alpha_color(img, img_cfg.min_color); + color max_c = alloc_alpha_color(img, img_cfg.max_color); + color back_c = alloc_alpha_color(img, img_cfg.bg_color); + color temp_c; /* Ueberschrift */ head_d = calc_text_dim(img_cfg.headline, 16, 0); @@ -240,6 +252,70 @@ static gdImagePtr draw_image(gdImagePtr img){ } } + /*Min / Max */ + if (img_cfg.show_min || img_cfg.show_max){ + + /* Minimal-String zusammenbauen */ + if(img_cfg.show_min){ + min_buff = malloc(sizeof(char)*MIN_MAX_BUFF); + if(img_cfg.unit != NULL){ + snprintf(min_buff, MIN_MAX_BUFF, "%-.1f%s", get_min_val(), img_cfg.unit); + } else { + snprintf(min_buff, MIN_MAX_BUFF, "%-.1f", get_min_val()); + } + min_val_d = calc_text_dim(min_buff, MIN_MAX_SIZE, 0); + min_max_width = min_val_d.width; + } + + /* Maximal-String zusammenbauen */ + if(img_cfg.show_max){ + max_buff = malloc(sizeof(char)*MIN_MAX_BUFF); + if(img_cfg.unit != NULL){ + snprintf(max_buff, MIN_MAX_BUFF, "%-.1f%s", (double) get_max_val(), img_cfg.unit); + } else { + snprintf(max_buff, MIN_MAX_BUFF, "%-.1f", (double) get_max_val()); + } + max_val_d = calc_text_dim(max_buff, MIN_MAX_SIZE, 0); + min_max_width = max_val_d.width; + } + + /* 'laengeren' String suchen */ + if(img_cfg.show_min && img_cfg.show_max){ + if (min_val_d.width < max_val_d.width) { + min_max_width = max_val_d.width; + } else { + min_max_width = min_val_d.width; + } + } + + /* Dimmensionen des Pfeis berechnen */ + arrow_d = calc_text_dim(">", MIN_MAX_SIZE - 1, 1.570796327); + + /* Minimalwert zeichnen */ + if(img_cfg.show_min){ + temp_c = min_c; + if(img_cfg.invert_min){ + gdImageFilledRectangle(img, (img_cfg.width - offset_x_right - min_max_width - arrow_d.width -8), (6 + min_val_d.height + 4), (img_cfg.width - offset_x_right), ( 6 + (2*min_val_d.height) + 4), min_c); + temp_c = back_c; + } + gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE-1, 1.570796327 , img_cfg.width - offset_x_right - min_max_width - arrow_d.width +1, 11 + min_val_d.height + arrow_d.height, "<"); + gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE, 0 , img_cfg.width - offset_x_right - min_val_d.width, 6 + (2*min_val_d.height)+3, min_buff); + free(min_buff); + } + + /* Maximalwert zeichnen */ + if(img_cfg.show_max){ + temp_c = max_c; + if(img_cfg.invert_max){ + gdImageFilledRectangle(img, (img_cfg.width - offset_x_right - min_max_width - arrow_d.width -8), (6), (img_cfg.width - offset_x_right), ( 6 + (max_val_d.height) + 1), max_c); + temp_c = back_c; + } + gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE-1, 1.570796327 , img_cfg.width - offset_x_right - min_max_width - arrow_d.width +1, 7 + arrow_d.height, ">"); + gdImageStringFT(img, &brect[0], temp_c, IMG_FONT, MIN_MAX_SIZE, 0 , img_cfg.width - offset_x_right - max_val_d.width, 5 + max_val_d.height, max_buff); + free(max_buff); + } + } + /* Rahmen */ gdImageRectangle(img, offset_x_left, offset_y_top, img_cfg.width - offset_x_right, img_cfg.height - offset_y_bottom, dia_border_c); } diff --git a/debian/changelog b/debian/changelog index edc62a1..67519fb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +weatherstation (1.0.7-1) stable; urgency=low + + * New Chart Feature: Min/Max can be shown in the upper right corner + + -- Jan Losinski Fri, 5 Jan 2007 05:33:43 +0100 + weatherstation (1.0.6-1) stable; urgency=low * New feature added in chart-program: Now it can draw a average.line