diff --git a/application.py b/application.py index eb31f48..4663245 100644 --- a/application.py +++ b/application.py @@ -23,9 +23,12 @@ class Application(QtWidgets.QMainWindow, MainWindow): self.data_source.setAcceptDrops(True) self.data_source.dropEvent = self.dropEvent self.data_source.dragEnterEvent = self.dragEnterEvent + self.start_date.dateChanged.connect(self.load_data_clicked) + self.end_Date.dateChanged.connect(self.load_data_clicked) self.widgetCount = 2 if self.widgetCount == 2: self.removeLastGraph.setEnabled(False) + self.sensor_data = None # activations and usage data for legend of graph def dragEnterEvent(self, event): if event.mimeData().hasUrls(): @@ -61,7 +64,7 @@ class Application(QtWidgets.QMainWindow, MainWindow): else: print("Data source:", source) if self.useSensorTimeData.isChecked(): - data = ( + data, sensor_data = ( Transform(source) .load_data() .transform_data(addMissing=self.addMissingDays.isChecked()) @@ -69,8 +72,7 @@ class Application(QtWidgets.QMainWindow, MainWindow): else: start_date = self.start_date.text().replace(".", "-") end_date = self.end_Date.text().replace(".", "-") - print("Start date:", start_date, type(start_date)) - data = ( + data,sensor_data = ( Transform(source) .load_data() .transform_data( @@ -80,13 +82,21 @@ class Application(QtWidgets.QMainWindow, MainWindow): split=True, ) ) - print("Data:", data) # add data to table - self.dataTable.setRowCount(0) + self.sensor_data = sensor_data self.insertIntoTable(data) def insertIntoTable(self, data): + #check if rows have set aliases + sensor_alias = {} + for row in range(self.dataTable.rowCount()): + if self.dataTable.item(row, 1): + sensor_alias[self.dataTable.item(row, 0).text()] = self.dataTable.item( + row, 1 + ).text() + self.dataTable.setRowCount(0) for sensor in data: + self.dataTable.insertRow(self.dataTable.rowCount()) self.dataTable.setItem( self.dataTable.rowCount() - 1, 0, QtWidgets.QTableWidgetItem(sensor) @@ -96,9 +106,16 @@ class Application(QtWidgets.QMainWindow, MainWindow): 2, QtWidgets.QTableWidgetItem(str((data[sensor]))), ) + if sensor in sensor_alias: + self.dataTable.setItem( + self.dataTable.rowCount() - 1, + 1, + QtWidgets.QTableWidgetItem(sensor_alias[sensor]), + ) def create_diagram(self): selectedRowCount = len(self.dataTable.selectionModel().selectedRows()) + labels = {} if selectedRowCount == 0: # Show error message in dialog msg = QtWidgets.QMessageBox() @@ -117,6 +134,7 @@ class Application(QtWidgets.QMainWindow, MainWindow): data = self.dataTable.item(self.dataTable.currentRow(), 2).text() # convert data to dict data = ast.literal_eval(data) + labels[sensor] = alias graph_data = { alias if alias else sensor: {"x": data["x"], "y": data["y"]} } @@ -140,8 +158,14 @@ class Application(QtWidgets.QMainWindow, MainWindow): row_data = { alias if alias else sensor: {"x": data["x"], "y": data["y"]} } + labels[sensor] = alias graph_data.append(row_data) - graph = Graph(graph_data) + #replace the keys from self.sensor_data with the alias from labels + print(labels) + for key in labels: + if key in self.sensor_data: + self.sensor_data[labels[key]] = self.sensor_data.pop(key) + graph = Graph(graph_data, labels,self.sensor_data, ) self.centralWidget().layout().addWidget(graph.graph) self.widgetCount += 1 self.check_widget_count() diff --git a/src/transform.py b/src/transform.py index a9c48f0..2dfce37 100644 --- a/src/transform.py +++ b/src/transform.py @@ -47,21 +47,25 @@ class Transform: for key, value in self.data.items(): sensors.append({"id": key, "value": value}) temp = {} + s_data = {} start_date = start_date end_date = end_date # create a list of all dates between the start and end date all_dates = createDateList(start_date, end_date) + for sensor in sensors: tmp = {} + sensor_values = {} name = sensor["id"] + sensor_values[name] = sensor["value"] tmp[name] = {"x": [], "y": []} sensor_data = sensor["value"] sensor_dates = list(sensor_data.keys()) - print(len(all_dates)) + sum_activations = 0 + for date in all_dates: - # print(date) if date not in sensor_dates: # print("Date not in sensor data", name, date) if addMissing: @@ -71,6 +75,11 @@ class Transform: on_state = len(sensor_data[date]["on"]) off_state = len(sensor_data[date]["off"]) activations = (on_state + off_state) / 2 + if activations == 1: + activations = 0 + else: + activations = on_state + sum_activations += activations # add the date to the tmp dictionary as x and the number of activations as y tmp[name]["x"].append(date) tmp[name]["y"].append(activations) @@ -83,8 +92,10 @@ class Transform: # tmp[name]["y"].append(activations if activations > 1 else 0) temp.update(tmp) + #create new entry in s_data for sensor, add key "total_activations" and the sum of all activations, as well as the usage, which is activation divided by the number of days + s_data[name] = {"total_activations": sum_activations, "usage": round(sum_activations / 2)} - return temp + return temp, s_data if __name__ == "__main__": diff --git a/src/ui/graph.py b/src/ui/graph.py index 5b70275..9a0d436 100644 --- a/src/ui/graph.py +++ b/src/ui/graph.py @@ -3,7 +3,9 @@ from PyQt6 import QtWidgets class Graph: - def __init__(self, data: list): + def __init__(self, data: list,label_data, legend_data): + self.label_data = label_data + self.legend_data = legend_data self.xlist = [] if isinstance(data, dict): self.xlist += data[list(data.keys())[0]]["x"] @@ -14,8 +16,6 @@ class Graph: xlist = list(set(self.xlist)) xlist.sort() xdict = dict(enumerate(xlist)) - print("xlist:", xlist) - print(xdict) self.xdict = xdict stringaxis_x = pg.AxisItem(orientation="bottom") stringaxis_x.setTicks([xdict.items()]) @@ -30,11 +30,15 @@ class Graph: self.plot_lines(data) else: self.plot_line(data) - + self.add_information() self.graph.showGrid(x=True, y=True) - + + def add_information(self, ): + pass def plot_line(self, data, color="r"): line_label = list(data.keys())[0] + line_data = self.legend_data[line_label] + line_addon = f" ({line_data['total_activations']}|{line_data['usage']})" x_data = data[line_label]["x"] self.xlist += x_data x_data = [date.split("2024-")[1] for date in x_data] @@ -45,13 +49,12 @@ class Graph: global_xdict = { key: global_xdict[key] for key in xdict.keys() if key in global_xdict.keys() } - print(line_label, global_xdict) y_data = data[line_label]["y"] self.graph.plot( list(xdict.keys()), y_data, - name=line_label, + name=f"{line_label}{line_addon}", pen=pg.mkPen(color=color, width=2), )