1
0

Determined that Frenck's Spook Add-On is best. Used python to format data payload for recorder statistics import service.

This commit is contained in:
Shaun Setlock
2023-12-26 22:01:35 -05:00
parent 79f619f18d
commit b5421232ea
15 changed files with 36033 additions and 438208 deletions

43
data_clean.py Executable file
View File

@@ -0,0 +1,43 @@
import pandas as pd
file_path = './input/raw/postgres/total_electric_consumption_pg_id_40.csv'
df = pd.read_csv(file_path)
# Select only the necessary columns
df = df[['start_ts', 'sum', 'state']]
# Convert 'start_ts' column to datetime
df['start_ts'] = pd.to_datetime(df['start_ts'], unit='s')
# Save the data in the desired format to a text file
output_file_path = './output/total_electric_consumption_pg_id_40.txt'
with open(output_file_path, 'w') as f:
for index, row in df.iterrows():
f.write(f" - start: \"{row['start_ts']}+00:00\"\n")
f.write(f" state: {row['state']}\n")
f.write(f" sum: {row['sum']}\n")
print(f"Data saved to: {output_file_path}")
file_path = './input/raw/postgres/total_electric_consumption_cost_pg_id_41.csv'
df = pd.read_csv(file_path)
# Select only the necessary columns
df = df[['start_ts', 'sum', 'state']]
# Convert 'start_ts' column to datetime
df['start_ts'] = pd.to_datetime(df['start_ts'], unit='s')
# Save the data in the desired format to a text file
output_file_path = './output/total_electric_consumption_cost_pg_id_41.txt'
with open(output_file_path, 'w') as f:
for index, row in df.iterrows():
f.write(f" - start: \"{row['start_ts']}+00:00\"\n")
f.write(f" state: {row['state']}\n")
f.write(f" sum: {row['sum']}\n")
print(f"Data saved to: {output_file_path}")

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,68 +0,0 @@
id,statistic_id,source,unit_of_measurement,has_mean,has_sum,name
1,sensor.freebsd_router_kib_s_received,recorder,KiB/s,True,False,
2,sensor.freebsd_router_kib_s_sent,recorder,KiB/s,True,False,
3,sensor.disk_use_percent_config,recorder,%,True,False,
4,sensor.disk_use,recorder,GiB,True,False,
5,sensor.disk_free,recorder,GiB,True,False,
6,sensor.memory_use_percent,recorder,%,True,False,
7,sensor.memory_use,recorder,MiB,True,False,
8,sensor.memory_free,recorder,MiB,True,False,
9,sensor.swap_use_percent,recorder,%,True,False,
10,sensor.swap_use,recorder,MiB,True,False,
11,sensor.swap_free,recorder,MiB,True,False,
12,sensor.load_1m,recorder,,True,False,
13,sensor.load_5m,recorder,,True,False,
14,sensor.load_15m,recorder,,True,False,
15,sensor.network_in_enp0s18,recorder,MiB,False,True,
16,sensor.network_out_enp0s18,recorder,MiB,False,True,
17,sensor.network_throughput_in_enp0s18,recorder,MB/s,True,False,
18,sensor.network_throughput_out_enp0s18,recorder,MB/s,True,False,
19,sensor.packets_in_enp0s18,recorder,,False,True,
20,sensor.packets_out_enp0s18,recorder,,False,True,
21,sensor.processor_use,recorder,%,True,False,
22,sensor.hvac_cooling_time_yesterday,recorder,h,True,False,
23,sensor.sump_pump_run_counter_today,recorder,,True,False,
24,sensor.hvac_cooling_time_today,recorder,h,True,False,
25,sensor.hvac_heating_time_yesterday,recorder,h,True,False,
26,sensor.sump_pump_run_counter_yesterday,recorder,,True,False,
27,sensor.hvac_heating_time_today,recorder,h,True,False,
28,sensor.total_panel_power,recorder,W,True,False,
29,sensor.total_panel_energy,recorder,kWh,True,False,
30,sensor.total_electric_consumption_cost,recorder,USD,False,True,
31,sensor.total_electric_consumption,recorder,kWh,False,True,
32,sensor.service_leg_02_power,recorder,W,True,False,
33,sensor.service_leg_02_energy,recorder,kWh,False,True,
34,sensor.service_leg_02_energy_returned,recorder,kWh,False,True,
35,sensor.service_leg_02_voltage,recorder,V,True,False,
36,sensor.service_leg_01_power,recorder,W,True,False,
37,sensor.service_leg_01_energy,recorder,kWh,False,True,
38,sensor.service_leg_01_energy_returned,recorder,kWh,False,True,
39,sensor.service_leg_01_voltage,recorder,V,True,False,
40,sensor.qq8j_battery,recorder,%,True,False,
41,sensor.qq8j_temperature,recorder,°F,True,False,
42,sensor.my_ecobee_current_temperature,recorder,°F,True,False,
43,sensor.my_ecobee_current_humidity,recorder,%,True,False,
44,sensor.tasmota_signal,recorder,dBm,True,False,
45,sensor.tasmota_energy_total,recorder,kWh,False,True,
46,sensor.tasmota_energy_today,recorder,kWh,False,True,
47,sensor.tasmota_energy_power,recorder,W,True,False,
48,sensor.tasmota_energy_apparentpower,recorder,VA,True,False,
49,sensor.tasmota_energy_reactivepower,recorder,var,True,False,
50,sensor.tasmota_energy_factor,recorder,,True,False,
51,sensor.tasmota_energy_voltage,recorder,V,True,False,
52,sensor.tasmota_energy_current,recorder,A,True,False,
53,sensor.tasmota_signal_2,recorder,dBm,True,False,
54,sensor.tasmota_energy_total_2,recorder,kWh,False,True,
55,sensor.tasmota_energy_today_2,recorder,kWh,False,True,
56,sensor.tasmota_energy_power_2,recorder,W,True,False,
57,sensor.tasmota_energy_apparentpower_2,recorder,VA,True,False,
58,sensor.tasmota_energy_reactivepower_2,recorder,var,True,False,
59,sensor.tasmota_energy_factor_2,recorder,,True,False,
60,sensor.tasmota_energy_voltage_2,recorder,V,True,False,
61,sensor.tasmota_energy_current_2,recorder,A,True,False,
62,sensor.backdoor_light_power,recorder,W,True,False,
63,sensor.backdoor_light_voltage,recorder,V,True,False,
64,sensor.backdoor_light_current,recorder,A,True,False,
65,sensor.backdoor_light_energy,recorder,kWh,False,True,
66,sensor.backdoor_light_device_temperature,recorder,°F,True,False,
67,sensor.shelly1pm_backlight_rssi,recorder,dBm,True,False
1 id statistic_id source unit_of_measurement has_mean has_sum name
2 1 sensor.freebsd_router_kib_s_received recorder KiB/s True False
3 2 sensor.freebsd_router_kib_s_sent recorder KiB/s True False
4 3 sensor.disk_use_percent_config recorder % True False
5 4 sensor.disk_use recorder GiB True False
6 5 sensor.disk_free recorder GiB True False
7 6 sensor.memory_use_percent recorder % True False
8 7 sensor.memory_use recorder MiB True False
9 8 sensor.memory_free recorder MiB True False
10 9 sensor.swap_use_percent recorder % True False
11 10 sensor.swap_use recorder MiB True False
12 11 sensor.swap_free recorder MiB True False
13 12 sensor.load_1m recorder True False
14 13 sensor.load_5m recorder True False
15 14 sensor.load_15m recorder True False
16 15 sensor.network_in_enp0s18 recorder MiB False True
17 16 sensor.network_out_enp0s18 recorder MiB False True
18 17 sensor.network_throughput_in_enp0s18 recorder MB/s True False
19 18 sensor.network_throughput_out_enp0s18 recorder MB/s True False
20 19 sensor.packets_in_enp0s18 recorder False True
21 20 sensor.packets_out_enp0s18 recorder False True
22 21 sensor.processor_use recorder % True False
23 22 sensor.hvac_cooling_time_yesterday recorder h True False
24 23 sensor.sump_pump_run_counter_today recorder True False
25 24 sensor.hvac_cooling_time_today recorder h True False
26 25 sensor.hvac_heating_time_yesterday recorder h True False
27 26 sensor.sump_pump_run_counter_yesterday recorder True False
28 27 sensor.hvac_heating_time_today recorder h True False
29 28 sensor.total_panel_power recorder W True False
30 29 sensor.total_panel_energy recorder kWh True False
31 30 sensor.total_electric_consumption_cost recorder USD False True
32 31 sensor.total_electric_consumption recorder kWh False True
33 32 sensor.service_leg_02_power recorder W True False
34 33 sensor.service_leg_02_energy recorder kWh False True
35 34 sensor.service_leg_02_energy_returned recorder kWh False True
36 35 sensor.service_leg_02_voltage recorder V True False
37 36 sensor.service_leg_01_power recorder W True False
38 37 sensor.service_leg_01_energy recorder kWh False True
39 38 sensor.service_leg_01_energy_returned recorder kWh False True
40 39 sensor.service_leg_01_voltage recorder V True False
41 40 sensor.qq8j_battery recorder % True False
42 41 sensor.qq8j_temperature recorder °F True False
43 42 sensor.my_ecobee_current_temperature recorder °F True False
44 43 sensor.my_ecobee_current_humidity recorder % True False
45 44 sensor.tasmota_signal recorder dBm True False
46 45 sensor.tasmota_energy_total recorder kWh False True
47 46 sensor.tasmota_energy_today recorder kWh False True
48 47 sensor.tasmota_energy_power recorder W True False
49 48 sensor.tasmota_energy_apparentpower recorder VA True False
50 49 sensor.tasmota_energy_reactivepower recorder var True False
51 50 sensor.tasmota_energy_factor recorder True False
52 51 sensor.tasmota_energy_voltage recorder V True False
53 52 sensor.tasmota_energy_current recorder A True False
54 53 sensor.tasmota_signal_2 recorder dBm True False
55 54 sensor.tasmota_energy_total_2 recorder kWh False True
56 55 sensor.tasmota_energy_today_2 recorder kWh False True
57 56 sensor.tasmota_energy_power_2 recorder W True False
58 57 sensor.tasmota_energy_apparentpower_2 recorder VA True False
59 58 sensor.tasmota_energy_reactivepower_2 recorder var True False
60 59 sensor.tasmota_energy_factor_2 recorder True False
61 60 sensor.tasmota_energy_voltage_2 recorder V True False
62 61 sensor.tasmota_energy_current_2 recorder A True False
63 62 sensor.backdoor_light_power recorder W True False
64 63 sensor.backdoor_light_voltage recorder V True False
65 64 sensor.backdoor_light_current recorder A True False
66 65 sensor.backdoor_light_energy recorder kWh False True
67 66 sensor.backdoor_light_device_temperature recorder °F True False
68 67 sensor.shelly1pm_backlight_rssi recorder dBm True False

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,125 +0,0 @@
import csv
import pandas as pd
############
# read files
############
# file locations
statistics_meta_archive_file = "input/raw/postgres/statistics_meta.csv"
statistics_meta_export_file = "input/raw/sqlite/statistics_meta-export.csv"
statistics_archive_file = "input/raw/postgres/statistics.csv"
statistics_export_file = "input/raw/sqlite/statistics-export.csv"
statistics_import_file = "output/statistics-import.csv"
statistics_short_term_archive_file = "input/raw/postgres/statistics_short_term.csv"
statistics_short_term_export_file = "input/raw/sqlite/statistics_short_term-export.csv"
statistics_short_term_import_file = "output/statistics_short_term-import.csv"
# read in current export, and the archive
meta_df = pd.read_csv(statistics_meta_export_file)
meta_archive_df = pd.read_csv(statistics_meta_archive_file)
statistics_df = pd.read_csv(statistics_export_file, index_col='id')
statistics_archive_df = pd.read_csv(statistics_archive_file, index_col='id')
statistics_short_term_df = pd.read_csv(statistics_short_term_export_file, index_col='id')
statistics_short_term_archive_df = pd.read_csv(statistics_short_term_archive_file, index_col='id')
#################
# statistics_meta
#################
# find the id's and the unique statistics from each
meta_df = meta_df[['id','statistic_id']]
meta_archive_df = meta_archive_df[['id','statistic_id']]
# only keeping statistics from the current system,
# form a lookup dictionary so the archive can be corrected
# using id from the current system export.
meta_lookup = meta_df.merge(meta_archive_df, on=['statistic_id'], how='left', indicator=True)
meta_lookup.set_index('id_x').to_csv("meta_merge.csv")
meta_lookup = meta_lookup[['id_y','id_x']]
meta_lookup = meta_lookup.T.to_dict('records')[0]
meta_lookup = dict((v,k) for k,v in meta_lookup.items())
print(meta_lookup)
############
# statistics
############
# correct the meta column
statistics_archive_df.replace({'metadata_id': meta_lookup}, inplace=True)
# drop any statistics not in the existing systems metadata
statistics_archive_df = statistics_archive_df[statistics_archive_df['metadata_id'].isin(meta_lookup.keys())]
# make unique indexes
statistics_max_id = statistics_df.last_valid_index()
statistics_archive_df.reset_index(inplace=True)
statistics_archive_df['id'] += statistics_max_id
statistics_archive_df.set_index('id',drop=True,inplace=True)
# find any duplicates where tuple (start_ts,metadata_id)
# exist in export and archive, drop the archive
# read in current export, and the archive
print(statistics_archive_df.info())
statistics_df['unique_tuple'] = statistics_df.apply(lambda row: (row['start_ts'],row['metadata_id']), axis=1)
statistics_archive_df['unique_tuple'] = statistics_archive_df.apply(lambda row: (row['start_ts'],row['metadata_id']), axis=1)
statistics_archive_df_copy = statistics_archive_df.copy()
statistics_archive_df_copy = statistics_archive_df_copy[['start_ts','metadata_id','unique_tuple']]
statistics_df = statistics_df[['start_ts','metadata_id','unique_tuple']]
unique_lookup = statistics_archive_df_copy.merge(statistics_df, on=['unique_tuple'], how='left', indicator=True)
unique_lookup = unique_lookup[unique_lookup['_merge']=="both"]
unique_lookup.to_csv("unique_merge.csv")
unique_tuples = unique_lookup['unique_tuple']
statistics_archive_df = statistics_archive_df[~statistics_archive_df['unique_tuple'].isin(unique_tuples)]
statistics_archive_df.drop(columns='unique_tuple',inplace=True)
print(statistics_archive_df.info())
#######################
# statistics_short_term
#######################
# correct the meta column
statistics_short_term_archive_df.replace({'metadata_id': meta_lookup}, inplace=True)
# drop any statistics not in the existing systems metadata
statistics_short_term_archive_df = statistics_short_term_archive_df[statistics_short_term_archive_df['metadata_id'].isin(meta_lookup.keys())]
# make unique indexes
statistics_short_term_max_id = statistics_short_term_df.last_valid_index()
statistics_short_term_archive_df.reset_index(inplace=True)
statistics_short_term_archive_df['id'] += statistics_short_term_max_id
statistics_short_term_archive_df.set_index('id',drop=True,inplace=True)
# find any duplicates where tuple (start_ts,metadata_id)
# exist in export and archive, drop the archive
# read in current export, and the archive
print(statistics_short_term_archive_df.info())
statistics_short_term_df['unique_tuple'] = statistics_short_term_df.apply(lambda row: (row['start_ts'],row['metadata_id']), axis=1)
statistics_short_term_archive_df['unique_tuple'] = statistics_short_term_archive_df.apply(lambda row: (row['start_ts'],row['metadata_id']), axis=1)
statistics_short_term_archive_df_copy = statistics_short_term_archive_df.copy()
statistics_short_term_archive_df_copy = statistics_short_term_archive_df_copy[['start_ts','metadata_id','unique_tuple']]
statistics_short_term_df = statistics_short_term_df[['start_ts','metadata_id','unique_tuple']]
unique_lookup = statistics_short_term_archive_df_copy.merge(statistics_short_term_df, on=['unique_tuple'], how='left', indicator=True)
#unique_lookup.to_csv(statistics_short_term_import_file)
unique_lookup = unique_lookup[unique_lookup['_merge']=="both"]
#unique_lookup.to_csv("unique_merge.csv")
unique_tuples = unique_lookup['unique_tuple']
statistics_short_term_archive_df = statistics_short_term_archive_df[~statistics_short_term_archive_df['unique_tuple'].isin(unique_tuples)]
statistics_short_term_archive_df.drop(columns='unique_tuple',inplace=True)
print(statistics_short_term_archive_df.info())
###########################
# write files for importing
###########################
statistics_archive_df.to_csv(statistics_import_file)
statistics_short_term_archive_df.to_csv(statistics_short_term_import_file)

View File

@@ -1,68 +0,0 @@
id_x,statistic_id,id_y,_merge
1,sensor.freebsd_router_kib_s_received,2,both
2,sensor.freebsd_router_kib_s_sent,3,both
3,sensor.disk_use_percent_config,134,both
4,sensor.disk_use,135,both
5,sensor.disk_free,136,both
6,sensor.memory_use_percent,137,both
7,sensor.memory_use,138,both
8,sensor.memory_free,139,both
9,sensor.swap_use_percent,140,both
10,sensor.swap_use,141,both
11,sensor.swap_free,142,both
12,sensor.load_1m,143,both
13,sensor.load_5m,144,both
14,sensor.load_15m,145,both
15,sensor.network_in_enp0s18,151,both
16,sensor.network_out_enp0s18,152,both
17,sensor.network_throughput_in_enp0s18,153,both
18,sensor.network_throughput_out_enp0s18,154,both
19,sensor.packets_in_enp0s18,155,both
20,sensor.packets_out_enp0s18,156,both
21,sensor.processor_use,146,both
22,sensor.hvac_cooling_time_yesterday,55,both
23,sensor.sump_pump_run_counter_today,45,both
24,sensor.hvac_cooling_time_today,54,both
25,sensor.hvac_heating_time_yesterday,59,both
26,sensor.sump_pump_run_counter_yesterday,44,both
27,sensor.hvac_heating_time_today,58,both
28,sensor.total_panel_power,35,both
29,sensor.total_panel_energy,36,both
30,sensor.total_electric_consumption_cost,41,both
31,sensor.total_electric_consumption,40,both
32,sensor.service_leg_02_power,24,both
33,sensor.service_leg_02_energy,25,both
34,sensor.service_leg_02_energy_returned,26,both
35,sensor.service_leg_02_voltage,27,both
36,sensor.service_leg_01_power,28,both
37,sensor.service_leg_01_energy,29,both
38,sensor.service_leg_01_energy_returned,30,both
39,sensor.service_leg_01_voltage,31,both
40,sensor.qq8j_battery,56,both
41,sensor.qq8j_temperature,57,both
42,sensor.my_ecobee_current_temperature,52,both
43,sensor.my_ecobee_current_humidity,53,both
44,sensor.tasmota_signal,13,both
45,sensor.tasmota_energy_total,5,both
46,sensor.tasmota_energy_today,6,both
47,sensor.tasmota_energy_power,7,both
48,sensor.tasmota_energy_apparentpower,8,both
49,sensor.tasmota_energy_reactivepower,9,both
50,sensor.tasmota_energy_factor,10,both
51,sensor.tasmota_energy_voltage,11,both
52,sensor.tasmota_energy_current,12,both
53,sensor.tasmota_signal_2,22,both
54,sensor.tasmota_energy_total_2,14,both
55,sensor.tasmota_energy_today_2,15,both
56,sensor.tasmota_energy_power_2,16,both
57,sensor.tasmota_energy_apparentpower_2,17,both
58,sensor.tasmota_energy_reactivepower_2,18,both
59,sensor.tasmota_energy_factor_2,19,both
60,sensor.tasmota_energy_voltage_2,20,both
61,sensor.tasmota_energy_current_2,21,both
62,sensor.backdoor_light_power,46,both
63,sensor.backdoor_light_voltage,50,both
64,sensor.backdoor_light_current,51,both
65,sensor.backdoor_light_energy,47,both
66,sensor.backdoor_light_device_temperature,48,both
67,sensor.shelly1pm_backlight_rssi,49,both
1 id_x statistic_id id_y _merge
2 1 sensor.freebsd_router_kib_s_received 2 both
3 2 sensor.freebsd_router_kib_s_sent 3 both
4 3 sensor.disk_use_percent_config 134 both
5 4 sensor.disk_use 135 both
6 5 sensor.disk_free 136 both
7 6 sensor.memory_use_percent 137 both
8 7 sensor.memory_use 138 both
9 8 sensor.memory_free 139 both
10 9 sensor.swap_use_percent 140 both
11 10 sensor.swap_use 141 both
12 11 sensor.swap_free 142 both
13 12 sensor.load_1m 143 both
14 13 sensor.load_5m 144 both
15 14 sensor.load_15m 145 both
16 15 sensor.network_in_enp0s18 151 both
17 16 sensor.network_out_enp0s18 152 both
18 17 sensor.network_throughput_in_enp0s18 153 both
19 18 sensor.network_throughput_out_enp0s18 154 both
20 19 sensor.packets_in_enp0s18 155 both
21 20 sensor.packets_out_enp0s18 156 both
22 21 sensor.processor_use 146 both
23 22 sensor.hvac_cooling_time_yesterday 55 both
24 23 sensor.sump_pump_run_counter_today 45 both
25 24 sensor.hvac_cooling_time_today 54 both
26 25 sensor.hvac_heating_time_yesterday 59 both
27 26 sensor.sump_pump_run_counter_yesterday 44 both
28 27 sensor.hvac_heating_time_today 58 both
29 28 sensor.total_panel_power 35 both
30 29 sensor.total_panel_energy 36 both
31 30 sensor.total_electric_consumption_cost 41 both
32 31 sensor.total_electric_consumption 40 both
33 32 sensor.service_leg_02_power 24 both
34 33 sensor.service_leg_02_energy 25 both
35 34 sensor.service_leg_02_energy_returned 26 both
36 35 sensor.service_leg_02_voltage 27 both
37 36 sensor.service_leg_01_power 28 both
38 37 sensor.service_leg_01_energy 29 both
39 38 sensor.service_leg_01_energy_returned 30 both
40 39 sensor.service_leg_01_voltage 31 both
41 40 sensor.qq8j_battery 56 both
42 41 sensor.qq8j_temperature 57 both
43 42 sensor.my_ecobee_current_temperature 52 both
44 43 sensor.my_ecobee_current_humidity 53 both
45 44 sensor.tasmota_signal 13 both
46 45 sensor.tasmota_energy_total 5 both
47 46 sensor.tasmota_energy_today 6 both
48 47 sensor.tasmota_energy_power 7 both
49 48 sensor.tasmota_energy_apparentpower 8 both
50 49 sensor.tasmota_energy_reactivepower 9 both
51 50 sensor.tasmota_energy_factor 10 both
52 51 sensor.tasmota_energy_voltage 11 both
53 52 sensor.tasmota_energy_current 12 both
54 53 sensor.tasmota_signal_2 22 both
55 54 sensor.tasmota_energy_total_2 14 both
56 55 sensor.tasmota_energy_today_2 15 both
57 56 sensor.tasmota_energy_power_2 16 both
58 57 sensor.tasmota_energy_apparentpower_2 17 both
59 58 sensor.tasmota_energy_reactivepower_2 18 both
60 59 sensor.tasmota_energy_factor_2 19 both
61 60 sensor.tasmota_energy_voltage_2 20 both
62 61 sensor.tasmota_energy_current_2 21 both
63 62 sensor.backdoor_light_power 46 both
64 63 sensor.backdoor_light_voltage 50 both
65 64 sensor.backdoor_light_current 51 both
66 65 sensor.backdoor_light_energy 47 both
67 66 sensor.backdoor_light_device_temperature 48 both
68 67 sensor.shelly1pm_backlight_rssi 49 both

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
,start_ts_x,metadata_id_x,unique_tuple,start_ts_y,metadata_id_y,_merge
1 start_ts_x metadata_id_x unique_tuple start_ts_y metadata_id_y _merge