From 3fa3a72c3fe849151fe286162c5bd84a96920957 Mon Sep 17 00:00:00 2001 From: hugoheinzson <122742773+hugoheinzson@users.noreply.github.com> Date: Fri, 10 Feb 2023 23:08:34 +0100 Subject: [PATCH 1/2] Create log_consumption2 New Version with capability to send power-data to mysql database --- log_consumption2 | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 log_consumption2 diff --git a/log_consumption2 b/log_consumption2 new file mode 100644 index 0000000..389e40c --- /dev/null +++ b/log_consumption2 @@ -0,0 +1,64 @@ +import os +import json +import tuyapower +import pandas as pd +import mysql.connector +import sqlalchemy + +#globals + +DEVICES = [ + { + 'plugid': '...', + 'plugip': '...', + 'plugkey': '...', + 'plugvers': '...', + 'name': '.', + 'mac': '.' + } +] + +def query_consumption(devices): + data = [] + + for device in devices: + json_output = tuyapower.deviceJSON( + device['plugid'], + device['plugip'], + device['plugkey'], + device['plugvers'] + ) + + parsed_data = json.loads(json_output) + parsed_data['name'] = device['name'] + data.append(parsed_data) + + return data + +def write_data_to_db(filepath, data_dict_list): + dataframes = [pd.DataFrame(dict_, index=[idx]) + for idx, dict_ in enumerate(data_dict_list)] + + df = pd.concat(dataframes) + + # MySQL-Connector und senden an DB + + database_username = '...' + database_password = '...' + database_ip = '...' + database_name = '...' + + database_connection = sqlalchemy.create_engine('mysql+mysqlconnector://{0}:{1}@{2}/{3}'. + format(database_username, database_password, + database_ip, database_name)) + df.to_sql(con=database_connection, name='power_consumption', if_exists='append') + + +def main(): + data = query_consumption(DEVICES) + + write_data_to_csv(FILEPATH, data) + +if __name__ == '__main__': + main() + From 6bf83aa3348d0877cc5a419f0fe5d94650b44400 Mon Sep 17 00:00:00 2001 From: hugoheinzson <122742773+hugoheinzson@users.noreply.github.com> Date: Mon, 13 Feb 2023 19:32:22 +0100 Subject: [PATCH 2/2] optimated the script due to feedback --- log_consumption2 => log_consumption_mysql | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) rename log_consumption2 => log_consumption_mysql (89%) diff --git a/log_consumption2 b/log_consumption_mysql similarity index 89% rename from log_consumption2 rename to log_consumption_mysql index 389e40c..528910d 100644 --- a/log_consumption2 +++ b/log_consumption_mysql @@ -18,6 +18,14 @@ DEVICES = [ } ] + database_username = '...' + database_password = '...' + database_ip = '...' + database_name = '...' + + + + def query_consumption(devices): data = [] @@ -43,11 +51,6 @@ def write_data_to_db(filepath, data_dict_list): # MySQL-Connector und senden an DB - database_username = '...' - database_password = '...' - database_ip = '...' - database_name = '...' - database_connection = sqlalchemy.create_engine('mysql+mysqlconnector://{0}:{1}@{2}/{3}'. format(database_username, database_password, database_ip, database_name)) @@ -57,7 +60,7 @@ def write_data_to_db(filepath, data_dict_list): def main(): data = query_consumption(DEVICES) - write_data_to_csv(FILEPATH, data) + write_data_to_db(FILEPATH, data) if __name__ == '__main__': main()