From 313b97f39a55993e6bd82ff599198da23ed78a91 Mon Sep 17 00:00:00 2001 From: karthikmurakonda Date: Sat, 29 Oct 2022 19:35:38 +0530 Subject: [PATCH 1/5] added images, calling all attack detection algos --- iPDC/assets/blue.png | Bin 0 -> 38666 bytes iPDC/assets/grey.png | Bin 0 -> 35142 bytes iPDC/assets/pink.png | Bin 0 -> 35219 bytes iPDC/assets/utility_tools.ui | 10 +- iPDC/assets/utility_tools.ui~ | 7 +- iPDC/inc/map_vis.h | 4 +- iPDC/inc/utility_tools.h | 1 - iPDC/src/map_vis.c | 223 ++++++++++++++++++++-------------- iPDC/src/utility_tools.c | 143 +++++++++++++++++----- 9 files changed, 254 insertions(+), 134 deletions(-) create mode 100644 iPDC/assets/blue.png create mode 100644 iPDC/assets/grey.png create mode 100644 iPDC/assets/pink.png diff --git a/iPDC/assets/blue.png b/iPDC/assets/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6becbe7d653e3e60b8668d433d84af3c59d7e9 GIT binary patch literal 38666 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 literal 0 HcmV?d00001 diff --git a/iPDC/assets/grey.png b/iPDC/assets/grey.png new file mode 100644 index 0000000000000000000000000000000000000000..d29f8af3bf000d0198721c683a0a5105eb264d99 GIT binary patch literal 35142 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

f8n;4PY*i!;k&E^d%IDV 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 literal 0 HcmV?d00001 diff --git a/iPDC/assets/utility_tools.ui b/iPDC/assets/utility_tools.ui index 2edcca0..11f8c53 100644 --- a/iPDC/assets/utility_tools.ui +++ b/iPDC/assets/utility_tools.ui @@ -495,7 +495,8 @@ True False - >6900V + >65600V or +< 65300 1 @@ -530,8 +531,8 @@ True False - <6800V -<6300V + <65600V +>65300V 1 @@ -761,6 +762,7 @@ True False + > 0.5 1 @@ -795,7 +797,7 @@ True False - Normal + < 0.5 1 diff --git a/iPDC/assets/utility_tools.ui~ b/iPDC/assets/utility_tools.ui~ index f0a7144..2edcca0 100644 --- a/iPDC/assets/utility_tools.ui~ +++ b/iPDC/assets/utility_tools.ui~ @@ -326,7 +326,6 @@ False - True False vertical @@ -592,6 +591,7 @@ + True False vertical @@ -629,7 +629,7 @@ True False - Attack/Event + Deviation > 0.5 mHz 1 @@ -664,7 +664,7 @@ True False - Normal + deviation < 0.5mHz 1 @@ -761,7 +761,6 @@ True False - Attack/Event 1 diff --git a/iPDC/inc/map_vis.h b/iPDC/inc/map_vis.h index 37ac914..9c533d7 100644 --- a/iPDC/inc/map_vis.h +++ b/iPDC/inc/map_vis.h @@ -17,7 +17,9 @@ struct vis_data{ GdkColor color; OsmGpsMapImage *last_image; // TODO: GTimeVal last_update_time; - LiveChartSerie *serie; + LiveChartSerie *serie_vol; + LiveChartSerie *serie_freq; + LiveChartSerie *serie_dfreq; struct vis_data *next; }; diff --git a/iPDC/inc/utility_tools.h b/iPDC/inc/utility_tools.h index 425f8e1..d0d7741 100644 --- a/iPDC/inc/utility_tools.h +++ b/iPDC/inc/utility_tools.h @@ -42,7 +42,6 @@ struct _UtData }; UtData *utdata; -LiveChartSerie *serie; // global variables int curr_measurement; diff --git a/iPDC/src/map_vis.c b/iPDC/src/map_vis.c index 88dff2e..bbe9f75 100644 --- a/iPDC/src/map_vis.c +++ b/iPDC/src/map_vis.c @@ -37,100 +37,139 @@ gboolean update_images(gpointer* pars){ //printf("map_vis A: %Lf, B: %Lf,C: %Lf\n",A,B,C); //gboolean green = kmeans(df); - if (curr_measurement==0) - { - int i = 0, k = 0; - float freq,vol_magnitude,angle, dfreq; - unsigned char freq_fmt, anal_fmt, phas_fmt, polar_fmt; - while (df!=NULL){ - float lat; - float lon; - loops++; - printf("loops: %d\n", loops); - - id = to_intconvertor(df->idcode); - printf("id = %d\n",id); - pthread_mutex_lock(&mutex_cfg); - temp_cfg = cfgfirst; - // Check for the IDCODE in Configuration Frame - while(temp_cfg != NULL){ - if(id == to_intconvertor(temp_cfg->idcode)){ - cfg_match = 1; - printf("Matched - id : %d\n",id); - freq_fmt = temp_cfg->pmu[0]->fmt->freq; - anal_fmt = temp_cfg->pmu[0]->fmt->analog; - phas_fmt = temp_cfg->pmu[0]->fmt->phasor; - polar_fmt = temp_cfg->pmu[0]->fmt->polar; - break; - } else { - temp_cfg = temp_cfg->cfgnext; - } + int i = 0, k = 0; + float freq,vol_magnitude,angle, dfreq; + unsigned char freq_fmt, anal_fmt, phas_fmt, polar_fmt; + while (df!=NULL){ + float lat; + float lon; + loops++; + printf("loops: %d\n", loops); + + id = to_intconvertor(df->idcode); + printf("id = %d\n",id); + pthread_mutex_lock(&mutex_cfg); + temp_cfg = cfgfirst; + // Check for the IDCODE in Configuration Frame + while(temp_cfg != NULL){ + if(id == to_intconvertor(temp_cfg->idcode)){ + cfg_match = 1; + printf("Matched - id : %d\n",id); + freq_fmt = temp_cfg->pmu[0]->fmt->freq; + anal_fmt = temp_cfg->pmu[0]->fmt->analog; + phas_fmt = temp_cfg->pmu[0]->fmt->phasor; + polar_fmt = temp_cfg->pmu[0]->fmt->polar; + break; + } else { + temp_cfg = temp_cfg->cfgnext; } - pthread_mutex_unlock(&mutex_cfg); - - // get data from df. - if(freq_fmt == '1'){ - freq = decode_ieee_single(df->dpmu[i]->freq); - printf("freq = %f\n",freq); - }else{ - freq = to_intconvertor(df->dpmu[i]->freq)*1e-6+50; - } - - unsigned char first2bytes[2]; - strncpy(first2bytes, df->dpmu[i]->phasors[0], 2); - unsigned char last2bytes[2]; - strncpy(last2bytes, df->dpmu[i]->phasors[0]+2, 2); - vol_magnitude = to_intconvertor(first2bytes); - float imaginary = to_intconvertor(last2bytes); - printf("vol = %f imag = %f\n",vol_magnitude, imaginary); - - live_chart_serie_add(serie, freq); - - // check lower layer details to get longitude and lattitude. - // pthread_mutex_lock(&mutex_Lower_Layer_Details); - // LLptr = LLfirst; - // match = 0; - // while(LLptr != NULL){ - // printf("pmuid = %d\n",LLptr->pmuid); - // if(LLptr->pmuid == id){ - // match = 1; - // lat = LLptr->latitude; - // lon = LLptr->longitude; - // printf("lat = %f; lon = %f\n",lat,lon); - // break; - // } - // LLptr = LLptr->next; - // } - // pthread_mutex_unlock(&mutex_Lower_Layer_Details); - - vis_ptr = vis_data_head; - match = 0; - while(vis_ptr != NULL){ - printf("vis_ptr->id = %d\n",vis_ptr->id); - if(vis_ptr->id == id){ - match = 1; - printf("Matched - id : %d\n",id); - break; - } - vis_ptr = vis_ptr->next; - } - - - if(match == 1 && cfg_match == 1){ - printf("lat = %f, lon = %f, freq = %f\n",lat,lon,freq); - if(parameters->g_last_image != 0){ - osm_gps_map_image_remove(parameters->util_map, parameters->g_last_image); - } - if (DTWvolDistance(df)){ - parameters->g_last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); - }else{ - parameters->g_last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); - } - } - df = df->dnext; - // i++; - k++; } + pthread_mutex_unlock(&mutex_cfg); + + // get data from df. + if(freq_fmt == '1'){ + freq = decode_ieee_single(df->dpmu[i]->freq); + printf("freq = %f\n",freq); + }else{ + freq = to_intconvertor(df->dpmu[i]->freq)*1e-6+50; + } + + unsigned char first2bytes[2]; + strncpy(first2bytes, df->dpmu[i]->phasors[0], 2); + unsigned char last2bytes[2]; + strncpy(last2bytes, df->dpmu[i]->phasors[0]+2, 2); + vol_magnitude = to_intconvertor(first2bytes); + float imaginary = to_intconvertor(last2bytes); + printf("vol = %f imag = %f\n",vol_magnitude, imaginary); + + vis_ptr = vis_data_head; + match = 0; + while(vis_ptr != NULL){ + printf("vis_ptr->id = %d\n",vis_ptr->id); + if(vis_ptr->id == id){ + match = 1; + printf("Matched - id : %d\n",id); + break; + } + vis_ptr = vis_ptr->next; + } + + lat = vis_ptr->lat; + lon = vis_ptr->lon; + + live_chart_serie_add(vis_ptr->serie_freq, freq); + live_chart_serie_add(vis_ptr->serie_vol, vol_magnitude); + live_chart_serie_add(vis_ptr->serie_dfreq, dfreq); + + if(match == 1 && cfg_match == 1){ + printf("lat = %f, lon = %f, freq = %f\n",lat,lon,freq); + if(vis_ptr->last_image != 0){ + osm_gps_map_image_remove(parameters->util_map, vis_ptr->last_image); + } + + if(curr_measurement == 0){ + if(vol_magnitude > 65600 || vol_magnitude < 65300){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map, lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map, lat, lon, parameters->g_green_image); + } + }else if(curr_measurement == 1){ + if (freq > 300){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + } + }else if(curr_measurement == 2){ + if (dfreq < 0.5){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + } + }else if(curr_measurement == 3){ + if(algorithm==0 && dimmension == 0){ + if (!attack_detect_vol(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==0 && dimmension == 1){ + if (!attack_detect_freq(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==0 && dimmension == 2){ + if (!attack_detect_freq_vol(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==1 && dimmension == 0){ + + }else if (algorithm==1 && dimmension == 1){ + + }else if (algorithm==1 && dimmension == 2){ + + }else if (algorithm==2 && dimmension == 0){ + if(!DTWvolDistance(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==2 && dimmension == 1){ + if(!DTWfreqDistance(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==2 && dimmension == 2){ + + } + } + } + df = df->dnext; + // i++; + k++; } pthread_mutex_unlock(&mutex_on_TSB); diff --git a/iPDC/src/utility_tools.c b/iPDC/src/utility_tools.c index 3db4ac9..2a46c5c 100644 --- a/iPDC/src/utility_tools.c +++ b/iPDC/src/utility_tools.c @@ -7,10 +7,14 @@ #include "livechart.h" #include "connections.h" +// TODO: change this when in production #define UI_fILE "./assets/utility_tools.ui" #define RED_IMAGE "./assets/red.png" #define GREEN_IMAGE "./assets/green.png" - +#define YELLOW_IMAGE "./assets/yellow.png" +#define BLUE_IMAGE "./assets/blue.png" +#define GREY_IMAGE "./assets/grey.png" +#define PINK_IMAGE "./assets/pink.png" // void change_image(OsmGpsMap *map, float lat, float lon, OsmGpsMapImage *image) // { @@ -132,9 +136,16 @@ void on_voltage_clicked(GtkButton *but, gpointer udata) curr_measurement = 0; gtk_widget_show(utdata->ml_vol); + gtk_widget_show(utdata->graph_layoutvol); + gtk_widget_show(utdata->swvol); + gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_dfreq); gtk_widget_hide(utdata->ml_ad); + gtk_widget_hide(utdata->graph_layoutfreq); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->swfreq); + gtk_widget_hide(utdata->swdfreq); gtk_widget_hide(utdata->algorithm); gtk_widget_hide(utdata->dimmension); @@ -153,9 +164,17 @@ void on_frequency_clicked(GtkButton *but, gpointer udata) curr_measurement = 1; gtk_widget_show(utdata->ml_freq); + gtk_widget_show(utdata->graph_layoutfreq); + gtk_widget_show(utdata->swfreq); + gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_dfreq); gtk_widget_hide(utdata->ml_ad); + gtk_widget_hide(utdata->swdfreq); + gtk_widget_hide(utdata->swvol); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->graph_layoutvol); + gtk_widget_hide(utdata->algorithm); gtk_widget_hide(utdata->dimmension); @@ -175,9 +194,16 @@ void on_dfreq_clicked(GtkButton *but, gpointer udata) curr_measurement = 2; gtk_widget_show(utdata->ml_dfreq); + gtk_widget_show(utdata->graph_layoutdfreq); + gtk_widget_show(utdata->swdfreq); + gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_ad); + gtk_widget_hide(utdata->graph_layoutfreq); + gtk_widget_hide(utdata->graph_layoutvol); + gtk_widget_hide(utdata->swvol); + gtk_widget_hide(utdata->swfreq); gtk_widget_hide(utdata->algorithm); @@ -210,6 +236,12 @@ void on_attack_detection_clicked(GtkButton *but, gpointer udata) gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_dfreq); + gtk_widget_hide(utdata->swvol); + gtk_widget_hide(utdata->swfreq); + gtk_widget_hide(utdata->swdfreq); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->graph_layoutfreq); + gtk_widget_hide(utdata->graph_layoutvol); printf("Attack Detection\n"); } @@ -234,6 +266,11 @@ void utility_tools(GtkButton *but, gpointer udata) { GdkPixbuf *g_red_image; GdkPixbuf *g_green_image; + GdkPixbuf *g_yellow_image; + GdkPixbuf *g_blue_image; + GdkPixbuf *g_pink_image; + GdkPixbuf *g_grey_image; + OsmGpsMapImage *g_last_image; // ------------------- GtkBuilder *builder; @@ -268,7 +305,6 @@ void utility_tools(GtkButton *but, gpointer udata) utdata->swvol = GTK_WIDGET(gtk_builder_get_object(builder, "swvol")); utdata->swfreq = GTK_WIDGET(gtk_builder_get_object(builder, "swfreq")); utdata->swdfreq = GTK_WIDGET(gtk_builder_get_object(builder, "swdfreq")); - utdata->swad = GTK_WIDGET(gtk_builder_get_object(builder, "swad")); gtk_widget_set_sensitive(utdata->voltage, FALSE); gtk_widget_set_visible(utdata->algorithm, FALSE); @@ -287,6 +323,7 @@ void utility_tools(GtkButton *but, gpointer udata) g_red_image = gdk_pixbuf_new_from_file_at_size(RED_IMAGE, 24, 24, NULL); g_green_image = gdk_pixbuf_new_from_file_at_size(GREEN_IMAGE, 24, 24, NULL); + g_grey_image = gdk_pixbuf_new_from_file_at_size(GREY_IMAGE, 24, 24, NULL); utdata->util_map = g_object_new(OSM_TYPE_GPS_MAP, "map-source", OSM_GPS_MAP_SOURCE_OSMC_TRAILS, @@ -297,14 +334,14 @@ void utility_tools(GtkButton *but, gpointer udata) osm_gps_map_set_center_and_zoom(utdata->util_map, 15.4589, 75.0078, 10); // TODO: add the points to window. - g_last_image = osm_gps_map_image_add(utdata->util_map, 15.4589, 75.0078, g_red_image); - g_last_image = osm_gps_map_image_add(utdata->util_map, 15.518597, 74.925584, g_green_image); + // g_last_image = osm_gps_map_image_add(utdata->util_map, 15.4589, 75.0078, g_red_image); + // g_last_image = osm_gps_map_image_add(utdata->util_map, 15.518597, 74.925584, g_green_image); curr_measurement = 0; algorithm = 0; dimmension = 0; - myParameters parameters = {utdata->util_map, g_red_image, g_green_image, g_last_image}; + myParameters parameters = {utdata->util_map, g_red_image, g_green_image, g_grey_image, g_last_image}; gpointer data = (gpointer)¶meters; gtk_widget_set_size_request(GTK_WIDGET(utdata->util_map), 600, 500); @@ -312,52 +349,93 @@ void utility_tools(GtkButton *but, gpointer udata) gtk_container_add(utdata->map_layout, GTK_WIDGET(utdata->util_map)); // add live chart - serie = live_chart_serie_new("IIT", (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); - // live_chart set color to the serie - GdkRGBA color = getIndexColor(0); - live_chart_path_set_color(live_chart_serie_get_line(serie), &color); + // serie = live_chart_serie_new("IIT", (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); + // // live_chart set color to the serie + // GdkRGBA color = getIndexColor(0); + // live_chart_path_set_color(live_chart_serie_get_line(serie), &color); // iterate over llptr and load the map_vis_head structure // vis_data_head = (struct map_vis_head *)malloc(sizeof(struct vis_data)); + + LiveChartConfig *config_vol = live_chart_config_new(); + live_chart_yaxis_set_unit(config_vol->y_axis, "V"); + live_chart_xaxis_set_tick_interval(config_vol->x_axis, 20); + live_chart_xaxis_set_tick_length(config_vol->x_axis, 100); + live_chart_yaxis_update_bounds(config_vol->y_axis, 1); + live_chart_path_set_visible(config_vol->x_axis->lines, FALSE); + + LiveChartChart *chart_vol = live_chart_chart_new(config_vol); + + LiveChartConfig *config_freq = live_chart_config_new(); + live_chart_yaxis_set_unit(config_freq->y_axis, "mHz"); + live_chart_xaxis_set_tick_interval(config_freq->x_axis, 20); + live_chart_xaxis_set_tick_length(config_freq->x_axis, 100); + live_chart_yaxis_update_bounds(config_freq->y_axis, 1); + live_chart_path_set_visible(config_freq->x_axis->lines, FALSE); + + LiveChartChart *chart_freq = live_chart_chart_new(config_freq); + + + LiveChartConfig *config_dfreq = live_chart_config_new(); + live_chart_yaxis_set_unit(config_dfreq->y_axis, "mHz"); + live_chart_xaxis_set_tick_interval(config_dfreq->x_axis, 20); + live_chart_xaxis_set_tick_length(config_dfreq->x_axis, 100); + live_chart_yaxis_update_bounds(config_dfreq->y_axis, 1); + live_chart_path_set_visible(config_dfreq->x_axis->lines, FALSE); + + LiveChartChart *chart_dfreq = live_chart_chart_new(config_dfreq); + + + + + // live_chart_chart_add_serie(chart, serie); struct Lower_Layer_Details *llptr = LLfirst; - struct vis_data * visptr = vis_data_head; + vis_data_head = (struct vis_data *)malloc(sizeof(struct vis_data)); + struct vis_data * temp_visptr = vis_data_head; int index = 0; while (llptr != NULL) { - visptr = (struct vis_data *)malloc(sizeof(struct vis_data)); - visptr->id = llptr->pmuid; - visptr->lat = llptr->latitude; - visptr->lon = llptr->longitude; - visptr->last_image = osm_gps_map_image_add(utdata->util_map, llptr->latitude, llptr->longitude, g_red_image); // TODO: change the image - visptr->serie = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); - // live_chart set color to the serie + printf("\ncat\n"); + temp_visptr->id = llptr->pmuid; + temp_visptr->lat = llptr->latitude; + temp_visptr->lon = llptr->longitude; + temp_visptr->last_image = osm_gps_map_image_add(utdata->util_map, llptr->latitude, llptr->longitude, g_grey_image); // TODO: change the image + + temp_visptr->serie_freq = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); GdkRGBA color = getIndexColor(index); - live_chart_path_set_color(live_chart_serie_get_line(visptr->serie), &color); - visptr->next = NULL; - visptr = visptr->next; + live_chart_path_set_color(live_chart_serie_get_line(temp_visptr->serie_freq), &color); + live_chart_chart_add_serie(chart_freq, temp_visptr->serie_freq); + + temp_visptr->serie_vol = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); + live_chart_path_set_color(live_chart_serie_get_line(temp_visptr->serie_vol), &color); + live_chart_chart_add_serie(chart_vol, temp_visptr->serie_vol); + + temp_visptr->serie_dfreq = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); + live_chart_path_set_color(live_chart_serie_get_line(temp_visptr->serie_dfreq), &color); + live_chart_chart_add_serie(chart_dfreq, temp_visptr->serie_dfreq); + + temp_visptr->next = (struct vis_data *)malloc(sizeof(struct vis_data)); + temp_visptr = temp_visptr->next; index++; llptr = llptr->next; } + temp_visptr->next = NULL; guint pid = g_timeout_add(20, (GSourceFunc)update_images, data); - LiveChartConfig *config = live_chart_config_new(); - live_chart_yaxis_set_unit(config->y_axis, "mHz"); - live_chart_xaxis_set_tick_interval(config->x_axis, 20); - live_chart_xaxis_set_tick_length(config->x_axis, 100); - live_chart_yaxis_update_bounds(config->y_axis, 1); - live_chart_path_set_visible(config->x_axis->lines, FALSE); - - LiveChartChart *chart = live_chart_chart_new(config); - live_chart_chart_add_serie(chart, serie); // gtk_widget_set_hexpand(GTK_WIDGET(chart), TRUE); // gtk_widget_set_vexpand(GTK_WIDGET(chart), TRUE); - gtk_widget_set_size_request(GTK_WIDGET(chart), 600, 150); + gtk_widget_set_size_request(GTK_WIDGET(chart_freq), 600, 150); + gtk_widget_set_size_request(GTK_WIDGET(chart_vol), 600, 150); + gtk_widget_set_size_request(GTK_WIDGET(chart_dfreq), 600, 150); + + gtk_container_add(utdata->graph_layoutvol, GTK_WIDGET(chart_vol)); + gtk_container_add(utdata->graph_layoutfreq, GTK_WIDGET(chart_freq)); + gtk_container_add(utdata->graph_layoutdfreq, GTK_WIDGET(chart_dfreq)); - gtk_container_add(utdata->graph_layoutvol, GTK_WIDGET(chart)); @@ -383,7 +461,8 @@ void utility_tools(GtkButton *but, gpointer udata) gtk_widget_hide(utdata->ml_ad); gtk_widget_hide(utdata->swfreq); gtk_widget_hide(utdata->swdfreq); - gtk_widget_hide(utdata->swad); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->graph_layoutfreq); gtk_main(); } \ No newline at end of file From b727c9bd5a7c968cc4f00d57ce0cdf9da359edf0 Mon Sep 17 00:00:00 2001 From: pavanvpatil Date: Sat, 29 Oct 2022 19:55:14 +0530 Subject: [PATCH 2/5] fixed bugs of kmeans --- iPDC/src/Kmeans.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/iPDC/src/Kmeans.c b/iPDC/src/Kmeans.c index 1fd95b7..aa50ca2 100644 --- a/iPDC/src/Kmeans.c +++ b/iPDC/src/Kmeans.c @@ -11,14 +11,14 @@ struct kmeans1 { int idcode; - unsigned long long int count_A = 1000; - unsigned long long int count_B = 1000; - unsigned long long int count_C = 1000; - long double A = 50; - long double B = 49; - long double C = 51; + unsigned long long int count_A; + unsigned long long int count_B; + unsigned long long int count_C; + long double A; + long double B; + long double C; struct kmeans1 *next; -} +}; struct kmeans1 *headk = NULL; @@ -38,8 +38,8 @@ gboolean kmeans(struct data_frame *df) } else { - struct kmeans1 *temp == headk; - struct kmeans1 *previous == NULL; + struct kmeans1 *temp = headk; + struct kmeans1 *previous = NULL; while (temp != NULL) { if (temp->idcode == to_intconvertor(df->idcode)) From 9f9530a065e9078b948b955f4b90b9d2730ef8d9 Mon Sep 17 00:00:00 2001 From: karthikmurakonda Date: Sat, 29 Oct 2022 23:53:32 +0530 Subject: [PATCH 3/5] interactability --- iPDC/assets/utility_tools.ui | 174 ++++++++++++++++++++++++++++++---- iPDC/assets/utility_tools.ui~ | 76 +++++++++++---- iPDC/inc/utility_tools.h | 2 + iPDC/src/map_vis.c | 6 +- iPDC/src/utility_tools.c | 17 ++++ 5 files changed, 240 insertions(+), 35 deletions(-) diff --git a/iPDC/assets/utility_tools.ui b/iPDC/assets/utility_tools.ui index 11f8c53..51cb0b5 100644 --- a/iPDC/assets/utility_tools.ui +++ b/iPDC/assets/utility_tools.ui @@ -296,18 +296,6 @@ 0 - - - 600 - 500 - True - False - - - 1 - 0 - - 150 @@ -324,6 +312,7 @@ True False + 16 False @@ -929,7 +918,7 @@ True False - RSS + IITdh 1 @@ -944,7 +933,39 @@ - + + + True + False + + + True + True + True + rgb(0,255,0) + + + 0 + 0 + + + + + True + False + dharwad + + + 1 + 0 + + + + + False + True + 2 + @@ -1005,7 +1026,7 @@ True False - RSS + IITdh 1 @@ -1020,7 +1041,39 @@ - + + + True + False + + + True + True + True + rgb(0,255,0) + + + 0 + 0 + + + + + True + False + dharwad + + + 1 + 0 + + + + + False + True + 2 + @@ -1081,7 +1134,7 @@ True False - RSS + IITdh 1 @@ -1096,7 +1149,39 @@ - + + + True + False + + + True + True + True + rgb(0,255,0) + + + 0 + 0 + + + + + True + False + dharwad + + + 1 + 0 + + + + + False + True + 2 + @@ -1111,6 +1196,59 @@ 3 + + + + True + False + + + 600 + 500 + True + False + + + 0 + 1 + + + + + True + False + 3 + 3 + Voltage Magnitude + + + + + + 0 + 0 + + + + + True + False + Voltage Magnitude + + + + + + 0 + 2 + + + + + 1 + 0 + + diff --git a/iPDC/assets/utility_tools.ui~ b/iPDC/assets/utility_tools.ui~ index 2edcca0..b74503e 100644 --- a/iPDC/assets/utility_tools.ui~ +++ b/iPDC/assets/utility_tools.ui~ @@ -296,18 +296,6 @@ 0 - - - 600 - 500 - True - False - - - 1 - 0 - - 150 @@ -324,6 +312,7 @@ True False + 16 False @@ -495,7 +484,8 @@ True False - >6900V + >65600V or +< 65300 1 @@ -530,8 +520,8 @@ True False - <6800V -<6300V + <65600V +>65300V 1 @@ -761,6 +751,7 @@ True False + > 0.5 1 @@ -795,7 +786,7 @@ True False - Normal + < 0.5 1 @@ -1109,6 +1100,59 @@ 3 + + + + True + False + + + 600 + 500 + True + False + + + 0 + 1 + + + + + True + False + 3 + 3 + Voltage Magnitude + + + + + + 0 + 0 + + + + + True + False + Voltage Magnitude + + + + + + 0 + 2 + + + + + 1 + 0 + + diff --git a/iPDC/inc/utility_tools.h b/iPDC/inc/utility_tools.h index d0d7741..456aa81 100644 --- a/iPDC/inc/utility_tools.h +++ b/iPDC/inc/utility_tools.h @@ -39,6 +39,8 @@ struct _UtData GtkWidget *swfreq; GtkWidget *swdfreq; GtkWidget *swad; + GtkWidget *maplabel; + GtkWidget *graphlabel; }; UtData *utdata; diff --git a/iPDC/src/map_vis.c b/iPDC/src/map_vis.c index bbe9f75..5c18853 100644 --- a/iPDC/src/map_vis.c +++ b/iPDC/src/map_vis.c @@ -145,7 +145,11 @@ gboolean update_images(gpointer* pars){ vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); } }else if (algorithm==1 && dimmension == 0){ - + if(!kmeans(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } }else if (algorithm==1 && dimmension == 1){ }else if (algorithm==1 && dimmension == 2){ diff --git a/iPDC/src/utility_tools.c b/iPDC/src/utility_tools.c index 2a46c5c..218cd72 100644 --- a/iPDC/src/utility_tools.c +++ b/iPDC/src/utility_tools.c @@ -138,6 +138,10 @@ void on_voltage_clicked(GtkButton *but, gpointer udata) gtk_widget_show(utdata->ml_vol); gtk_widget_show(utdata->graph_layoutvol); gtk_widget_show(utdata->swvol); + gtk_widget_show(utdata->graphlabel); + + gtk_label_set_label(utdata->maplabel, "Voltage Magnitude"); + gtk_label_set_label(utdata->graphlabel, "Voltage Magnitude"); gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_dfreq); @@ -166,6 +170,10 @@ void on_frequency_clicked(GtkButton *but, gpointer udata) gtk_widget_show(utdata->ml_freq); gtk_widget_show(utdata->graph_layoutfreq); gtk_widget_show(utdata->swfreq); + gtk_widget_show(utdata->graphlabel); + + gtk_label_set_label(utdata->maplabel, "Frequency"); + gtk_label_set_label(utdata->graphlabel, "Frequency"); gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_dfreq); @@ -196,6 +204,10 @@ void on_dfreq_clicked(GtkButton *but, gpointer udata) gtk_widget_show(utdata->ml_dfreq); gtk_widget_show(utdata->graph_layoutdfreq); gtk_widget_show(utdata->swdfreq); + gtk_widget_show(utdata->graphlabel); + + gtk_label_set_label(utdata->maplabel, "Frequency Rate"); + gtk_label_set_label(utdata->graphlabel, "Frequency Rate"); gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_freq); @@ -233,6 +245,8 @@ void on_attack_detection_clicked(GtkButton *but, gpointer udata) gtk_widget_show(utdata->dimm_label); gtk_widget_show(utdata->ml_ad); + gtk_label_set_label(utdata->maplabel, "Attack Detection"); + gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_dfreq); @@ -242,6 +256,7 @@ void on_attack_detection_clicked(GtkButton *but, gpointer udata) gtk_widget_hide(utdata->graph_layoutdfreq); gtk_widget_hide(utdata->graph_layoutfreq); gtk_widget_hide(utdata->graph_layoutvol); + gtk_widget_hide(utdata->graphlabel); printf("Attack Detection\n"); } @@ -305,6 +320,8 @@ void utility_tools(GtkButton *but, gpointer udata) utdata->swvol = GTK_WIDGET(gtk_builder_get_object(builder, "swvol")); utdata->swfreq = GTK_WIDGET(gtk_builder_get_object(builder, "swfreq")); utdata->swdfreq = GTK_WIDGET(gtk_builder_get_object(builder, "swdfreq")); + utdata->maplabel = GTK_WIDGET(gtk_builder_get_object(builder, "maplabel")); + utdata->graphlabel = GTK_WIDGET(gtk_builder_get_object(builder, "graphlabel")); gtk_widget_set_sensitive(utdata->voltage, FALSE); gtk_widget_set_visible(utdata->algorithm, FALSE); From 5006efe082cd864485d850e63e9e1f54d8cd633f Mon Sep 17 00:00:00 2001 From: pavanvpatil Date: Sun, 30 Oct 2022 00:40:52 +0530 Subject: [PATCH 4/5] fixed bugs --- iPDC/src/Kmeans.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/iPDC/src/Kmeans.c b/iPDC/src/Kmeans.c index aa50ca2..1bdf2ea 100644 --- a/iPDC/src/Kmeans.c +++ b/iPDC/src/Kmeans.c @@ -26,6 +26,7 @@ gboolean kmeans(struct data_frame *df) { if (headk == NULL) { + headk = (struct kmeans1 *)malloc(sizeof(struct kmeans1)); headk->A = 50; headk->B = 49; headk->C = 51; @@ -79,10 +80,10 @@ gboolean kmeans(struct data_frame *df) } break; } - previous=temp; + previous = temp; temp = temp->next; } - if(temp==NULL) + if (temp == NULL) { struct kmeans1 *bring = (struct kmeans1 *)malloc(sizeof(struct kmeans1)); bring->A = 50; @@ -93,7 +94,7 @@ gboolean kmeans(struct data_frame *df) bring->count_C = 1000; bring->next = NULL; bring->idcode = to_intconvertor(df->idcode); - previous->next=bring; + previous->next = bring; return TRUE; } } From 53c937a8e53b1567b38029beddcad2f5ff2a3a00 Mon Sep 17 00:00:00 2001 From: pavanvpatil Date: Sun, 30 Oct 2022 00:59:41 +0530 Subject: [PATCH 5/5] corrected phasor input data --- iPDC/src/Attack_detect.c | 73 ++++++++++++++++++++------------- iPDC/src/Dynamic_time_warping.c | 55 ++++++++++++++++--------- 2 files changed, 81 insertions(+), 47 deletions(-) diff --git a/iPDC/src/Attack_detect.c b/iPDC/src/Attack_detect.c index 7dfd2ca..095253d 100644 --- a/iPDC/src/Attack_detect.c +++ b/iPDC/src/Attack_detect.c @@ -12,7 +12,7 @@ struct freqlist int idcode; long double AVERAGE_OF_FREQUENCY; unsigned long long int COUNT; - struct freqlist* next; + struct freqlist *next; }; struct vollist @@ -20,10 +20,9 @@ struct vollist int idcode; long double AVERAGE_OF_VOLTAGE; unsigned long long int COUNT; - struct vollist* next; + struct vollist *next; }; - struct freqlist *head = NULL; struct vollist *headvol = NULL; @@ -34,7 +33,7 @@ gboolean attack_detect_freq(struct data_frame *df) head = (struct freqlist *)malloc(sizeof(struct freqlist)); head->AVERAGE_OF_FREQUENCY = 50; head->COUNT = 500; - head->idcode=to_intconvertor(df->idcode); + head->idcode = to_intconvertor(df->idcode); return TRUE; } else @@ -46,10 +45,12 @@ gboolean attack_detect_freq(struct data_frame *df) if (to_intconvertor(df->idcode) == temp->idcode) { float CURR_FREQ; - if (df->dpmu[0]->fmt->freq == '0'){ + if (df->dpmu[0]->fmt->freq == '0') + { CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq) * 1e-3; } - else{ + else + { CURR_FREQ = decode_ieee_single(df->dpmu[0]->freq); } printf("Current freq: %f\n", CURR_FREQ); @@ -75,17 +76,17 @@ gboolean attack_detect_freq(struct data_frame *df) return TRUE; } } - previous=temp; - temp=temp->next; + previous = temp; + temp = temp->next; } - if(temp==NULL) + if (temp == NULL) { - struct freqlist* bring = (struct freqlist *)malloc(sizeof(struct freqlist)); + struct freqlist *bring = (struct freqlist *)malloc(sizeof(struct freqlist)); bring = (struct freqlist *)malloc(sizeof(struct freqlist)); bring->AVERAGE_OF_FREQUENCY = 50; bring->COUNT = 500; bring->idcode = to_intconvertor(df->idcode); - previous->next=bring; + previous->next = bring; return TRUE; } } @@ -96,30 +97,48 @@ gboolean attack_detect_vol(struct data_frame *df) float CURR_vol; if (df->dpmu[0]->fmt->phasor == '0') { - unsigned char s1[2]; - unsigned char s2[2]; - strncpy(s1, df->dpmu[0]->phasors[0], 2); - strncpy(s2, df->dpmu[0]->phasors[0] + 2, 2); - long double v1 = to_intconvertor(s1); - long double v2 = to_intconvertor(s2); - CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[2]; + unsigned char s2[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 2); + long double v1 = to_intconvertor(s1); + long double v2 = to_intconvertor(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + CURR_vol = to_intconvertor(s1); + } } else { - unsigned char s1[2]; - unsigned char s2[2]; - strncpy(s1, df->dpmu[0]->phasors[0], 4); - strncpy(s2, df->dpmu[0]->phasors[0] + 2, 4); - long double v1 = decode_ieee_single(s1); - long double v2 = decode_ieee_single(s2); - CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[4]; + unsigned char s2[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 4); + long double v1 = decode_ieee_single(s1); + long double v2 = decode_ieee_single(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + CURR_vol = decode_ieee_single(s1); + } } if (headvol == NULL) { headvol = (struct vollist *)malloc(sizeof(struct vollist)); headvol->AVERAGE_OF_VOLTAGE = CURR_vol; headvol->COUNT = 500; - headvol->idcode=to_intconvertor(df->idcode); + headvol->idcode = to_intconvertor(df->idcode); return TRUE; } else @@ -174,6 +193,4 @@ gboolean attack_detect_freq_vol(struct data_frame *df) return attack_detect_freq(df) && attack_detect_vol(df); } - - /* pavan changes */ \ No newline at end of file diff --git a/iPDC/src/Dynamic_time_warping.c b/iPDC/src/Dynamic_time_warping.c index 8678814..ef4cc93 100644 --- a/iPDC/src/Dynamic_time_warping.c +++ b/iPDC/src/Dynamic_time_warping.c @@ -29,7 +29,6 @@ struct DTWvollist struct DTWvollist *next; }; - struct DTWfreqlist *dtwhead = NULL; struct DTWvollist *dtwheadvol = NULL; @@ -43,7 +42,7 @@ int DTWfreqDistance(struct data_frame *df) dtwhead->flag = 0; dtwhead->idcode = to_intconvertor(df->idcode); dtwhead->next = NULL; - dtwhead->result=1; + dtwhead->result = 1; return 1; } else @@ -151,7 +150,7 @@ int DTWfreqDistance(struct data_frame *df) bring->flag = 0; bring->idcode = to_intconvertor(df->idcode); bring->next = NULL; - bring->result=1; + bring->result = 1; previous->next = bring; return 1; } @@ -169,7 +168,7 @@ int DTWvolDistance(struct data_frame *df) dtwheadvol->flag = 0; dtwheadvol->idcode = to_intconvertor(df->idcode); dtwheadvol->next = NULL; - dtwheadvol->result=1; + dtwheadvol->result = 1; return 1; } else @@ -183,23 +182,41 @@ int DTWvolDistance(struct data_frame *df) float CURR_vol; if (df->dpmu[0]->fmt->phasor == '0') { - unsigned char s1[2]; - unsigned char s2[2]; - strncpy(s1,df->dpmu[0]->phasors[0],2); - strncpy(s2,df->dpmu[0]->phasors[0]+2,2); - long double v1 = to_intconvertor(s1); - long double v2 = to_intconvertor(s2); - CURR_vol = sqrt((v1*v1)+(v2*v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[2]; + unsigned char s2[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 2); + long double v1 = to_intconvertor(s1); + long double v2 = to_intconvertor(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + CURR_vol = to_intconvertor(s1); + } } else { - unsigned char s1[4]; - unsigned char s2[4]; - strncpy(s1,df->dpmu[0]->phasors[0],4); - strncpy(s2,df->dpmu[0]->phasors[0]+2,4); - long double v1 = decode_ieee_single(s1); - long double v2 =decode_ieee_single(s2); - CURR_vol = sqrt((v1*v1)+(v2*v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[4]; + unsigned char s2[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 4); + long double v1 = decode_ieee_single(s1); + long double v2 = decode_ieee_single(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + CURR_vol = decode_ieee_single(s1); + } } // printf("count1: %d\ncount2: %d\n",count_track1,count_track2); @@ -289,7 +306,7 @@ int DTWvolDistance(struct data_frame *df) bring->flag = 0; bring->idcode = to_intconvertor(df->idcode); bring->next = NULL; - bring->result=1; + bring->result = 1; previous->next = bring; return 1; }