Growing stuff and doing things

dstroy0

Zeroes and Ones
I've been working on splitting my database up into separate tables, and the first part of that was reading from a file that had some delimiters in it. Now I'm on to multiple delimiters and I've got what I think is the beginning of an ok solution if this db needs to be regenerated without supervision.

Python:
import re
#open file for reading 'r'
#rename columns.csv to db.cfg when the schema is moved into the file
column_file = open('columns.csv', 'r')
#read contents of file
content = column_file.read()
#remove all newline
content = content.replace('\n', '')
#remove all spaces
content = content.replace(' ', '')
#split list item on comma
content_list = re.split(';|:|`',content)

#each TABLE;COLUMN:TYPE`\n entry in db.cfg has 3 parts, so if you have anything left over after dividing all the parts you read by 3, UH OH
if len(content_list) % 3 != 0:
    #do db.cfg error
    print('schema incomplete')
else:
    #no db.cfg error
    print('schema complete')
#close file after done using
column_file.close()

def convert_list_to_nested_list(lst):
    table_list = []
    table = []
    col = []
    col_type = []

    table_length_array = []
    for i in range(0, len(lst), 3):
        table.append(lst[i])
        if lst[i] not in table_list:
            table_list.append(lst[i])
            table_length_array.extend([0])
        col.append(lst[i+1])
        col_type.append(lst[i+2])
    
    for i in range(0,len(table_list),1):
        table_length_array[i] = 0
    for i in range(0, len(table), 1):
        for j in range(0, len(table_list), 1):
            if table[i] == table_list[j]:
                table_length_array[j] = table_length_array[j] + 1
    
    nested_list = []
    gen_table = []
    for i in range(0, len(table_list),1):
        gen_table = [table_list[i]]
        gen_table_columns = []
        gen_table_column_type = []
        for j in range(0, len(col), 1):
            if table_list[i] == table[j]:
                #print(j)
                gen_table_columns.append(col[j])
                gen_table_column_type.append(col_type[j])
        for j in range(0, table_length_array[i],1):
            gen_table.append([gen_table_columns[j],gen_table_column_type[j]])
        nested_list.append(gen_table) 
    return nested_list

nested_content_list = convert_list_to_nested_list(content_list)

#print(nested_content_list)

for i in range(0, len(nested_content_list),1):
    print(nested_content_list[i][0])
    for j in range(1, len(nested_content_list[i]), 1):
        print(nested_content_list[i][j][0],' ',nested_content_list[i][j][1],sep='')
    print()

and this is the file that it loads from:

Code:
POWER;id:INT(11)`
POWER;TS_DT:INT(11)`
POWER;TS_RT:VARCHAR(64)`
POWER;ACPWR_A0_RCW:DECIMAL(7,3)`
POWER;ACPWR_A1_RCW:DECIMAL(7,3)`
POWER;ACPWR_A2_RCW:DECIMAL(7,3)`
POWER;ACPWR_A3_RCW:DECIMAL(7,3)`
POWER;ACPWR_A4_RCW:DECIMAL(7,3)`
POWER;ACPWR_A5_RCW:DECIMAL(7,3)`
POWER;DCPWR_5V_C:DECIMAL(6,2)`
POWER;DCPWR_5V_BV:DECIMAL(6,2)`
POWER;DCPWR_5V_P:DECIMAL(6,2)`
POWER;DCPWR_12V_C:DECIMAL(6,2)`
POWER;DCPWR_12V_BV:DECIMAL(6,2)`
POWER;DCPWR_12V_P:DECIMAL(6,2)`
POWER;DCPWR_24V_C:DECIMAL(6,2)`
POWER;DCPWR_24V_BV:DECIMAL(6,2)`
POWER;DCPWR_24V_P:DECIMAL(6,2)`
ENV_ONE;id:INT(11)`
ENV_ONE;TS_DT:INT(11)`
ENV_ONE;TS_RT:VARCHAR(64)`
ENV_ONE;ENV_A1_WL:VARCHAR(64)`
ENV_ONE;ENV_A1_LP:VARCHAR(64)`
ENV_ONE;ENV_A1_TDS:DECIMAL(6,2)`
ENV_ONE;ENV_A1_RT:DECIMAL(7,3)`
ENV_ONE;ENV_A1_RH:DECIMAL(5,2)`
ENV_ONE;ENV_A1_RHE:DECIMAL(5,2)`
ENV_ONE;ENV_A1_AT:DECIMAL(5,2)`
ENV_ONE;ENV_A1_ATE:DECIMAL(5,2)`
ENV_ONE;ENV_A1_CO2:INT(11)`
ENV_ONE;ENV_A1_CO2E:INT(11)`
ENV_ONE;ENV_A1_FAN:VARCHAR(64)`
ENV_ONE;ENV_A1_L:VARCHAR(64)`
ENV_ONE;ENV_A1_LI:INT(11)`
ENV_ONE;ENV_A1_FS:VARCHAR(64)`
ENV_ONE;ENV_A1_FD:DECIMAL(5,3)`
ENV_ONE;ENV_A1_FT:VARCHAR(64)`
ENV_ONE;ENV_A1_FI:DECIMAL(7,3)`
ENV_ONE;ENV_A1_TTF:DECIMAL(7,3)`
ENV_ONE;ENV_A1_HAM:DECIMAL(5,2)`
ENV_ONE;ENV_A1_HAH:DECIMAL(5,2)`
ENV_ONE;ENV_A1_HAD:DECIMAL(5,2)`
ENV_ONE;ENV_TTP:VARCHAR(64)`
ENV_TWO;id:INT(11)`
ENV_TWO;TS_DT:INT(11)`
ENV_TWO;TS_RT:VARCHAR(64)`
ENV_TWO;ENV_A2_WL:VARCHAR(64)`
ENV_TWO;ENV_A2_LP:VARCHAR(64)`
ENV_TWO;ENV_A2_TDS:DECIMAL(6,2)`
ENV_TWO;ENV_A2_RT:DECIMAL(7,3)`
ENV_TWO;ENV_A2_RH:DECIMAL(5,2)`
ENV_TWO;ENV_A2_RHE:DECIMAL(5,2)`
ENV_TWO;ENV_A2_AT:DECIMAL(5,2)`
ENV_TWO;ENV_A2_ATE:DECIMAL(5,2)`
ENV_TWO;ENV_A2_CO2:INT(11)`
ENV_TWO;ENV_A2_CO2E:INT(11)`
ENV_TWO;ENV_A2_FAN:VARCHAR(64)`
ENV_TWO;ENV_A2_L:VARCHAR(64)`
ENV_TWO;ENV_A2_LI:INT(11)`
ENV_TWO;ENV_A2_FS:VARCHAR(64)`
ENV_TWO;ENV_A2_FD:DECIMAL(5,3)`
ENV_TWO;ENV_A2_FT:VARCHAR(64)`
ENV_TWO;ENV_A2_FI:DECIMAL(7,3)`
ENV_TWO;ENV_A2_TTF:DECIMAL(7,3)`
ENV_TWO;ENV_A2_HAM:DECIMAL(5,2)`
ENV_TWO;ENV_A2_HAH:DECIMAL(5,2)`
ENV_TWO;ENV_A2_HAD:DECIMAL(5,2)`
ENV_TWO;ENV_TTP:VARCHAR(64)`
RESERVOIR;id:INT(11)`
RESERVOIR;TS_DT:INT(11)`
RESERVOIR;TS_RT:VARCHAR(64)`
RESERVOIR;RES_pH:DECIMAL(8,6)`
RESERVOIR;RES_EC:DECIMAL(8,6)`
RESERVOIR;RES_temp:DECIMAL(10,6)`
RESERVOIR;RES_total_in:DECIMAL(10,3)`
RESERVOIR;RES_ph_up_total:DECIMAL(8,3)`
RESERVOIR;RES_ph_down_total:DECIMAL(8,3)`
VPD;id:INT(11)`
VPD;TS_DT:INT(11)`
VPD;TS_RT:VARCHAR(64)`
VPD;VPD_A1_AIR:DECIMAL(5,3)`
VPD;VPD_A1_L0:DECIMAL(5,3)`
VPD;VPD_A1_L1:DECIMAL(5,3)`
VPD;VPD_A1_L2:DECIMAL(5,3)`
VPD;VPD_A1_L3:DECIMAL(5,3)`
VPD;VPD_A1_LFT_0:DECIMAL(5,3)`
VPD;VPD_A1_LFT_1:DECIMAL(5,3)`
VPD;VPD_A1_LFT_2:DECIMAL(5,3)`
VPD;VPD_A1_LFT_3:DECIMAL(5,3)`
VPD;VPD_A2_AIR:DECIMAL(5,3)`
VPD;VPD_A2_L0:DECIMAL(5,3)`
VPD;VPD_A2_L1:DECIMAL(5,3)`
VPD;VPD_A2_L2:DECIMAL(5,3)`
VPD;VPD_A2_L3:DECIMAL(5,3)`
VPD;VPD_A2_LFT_0:DECIMAL(5,3)`
VPD;VPD_A2_LFT_1:DECIMAL(5,3)`
VPD;VPD_A2_LFT_2:DECIMAL(5,3)`
VPD;VPD_A2_LFT_3:DECIMAL(5,3)`
TRACKER;id:INT(11)`
TRACKER;TS_DT:INT(11)`
TRACKER;TS_RT:VARCHAR(64)`
TRACKER;TRK_A1_VEG_START:INT(11)`
TRACKER;TRK_A1_VEG_END:INT(11)`
TRACKER;TRK_A1_FLOWER_START:INT(11)`
TRACKER;TRK_A1_FLOWER_END:INT(11)`
TRACKER;TRK_A2_VEG_START:INT(11)`
TRACKER;TRK_A2_VEG_END:INT(11)`
TRACKER;TRK_A2_FLOWER_START:INT(11)`
TRACKER;TRK_A2_FLOWER_END:INT(11)`
SYSTEM;id:INT(11)`
SYSTEM;TS_DT:INT(11)`
SYSTEM;TS_RT:VARCHAR(64)`
SYSTEM;TTP:VARCHAR(64)`
SYSTEM;COM:VARCHAR(64)`
SYSTEM;SYS:VARCHAR(64)`
SYSTEM;DATA:TEXT`
SYSTEM;SCRIPT_ERROR:BLOB`
SYSTEM;CFG:TEXT`
SYSTEM;MSG:TEXT`
SYSTEM;SYS_0:VARCHAR(64)`
SYSTEM;SYS_1:VARCHAR(64)`
CONFIG;id:INT(11)`
CONFIG;TS_DT:INT(11)`
CONFIG;TS_RT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FLOWER:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2EN:VARCHAR(64)`
CONFIG;C_1_CFG_A1_SSROUTLETLIGHTTIMER:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMINON:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMINOFF:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMAXOFFLO:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMINONLO:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LONT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LOFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LI:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LIMAX:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFID:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFOD:VARCHAR(64)`
CONFIG;C_1_CFG_A1_VEGLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FLOWERLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2ONT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2OFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2VEGTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2FLOWERTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2DB:VARCHAR(64)`
CONFIG;C_1_CFG_A1_HUMT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_HUMDB:VARCHAR(64)`
CONFIG;C_1_CFG_A1_TEMPT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_TEMPDB:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FDUR:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FINT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FDURTR:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FDURTRADJ:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FTRADJD:VARCHAR(64)`
CONFIG;C_1_CFG_A1_HUMWSMPDLY:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2DUR:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2INT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFDU:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFDD:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FLOWER:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2EN:VARCHAR(64)`
CONFIG;C_1_CFG_A2_SSROUTLETLIGHTTIMER:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMINON:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMINOFF:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMAXOFFLO:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMINONLO:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LONT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LOFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LI:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LIMAX:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFID:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFOD:VARCHAR(64)`
CONFIG;C_1_CFG_A2_VEGLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FLOWERLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2ONT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2OFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2VEGTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2FLOWERTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2DB:VARCHAR(64)`
CONFIG;C_1_CFG_A2_HUMT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_HUMDB:VARCHAR(64)`
CONFIG;C_1_CFG_A2_TEMPT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_TEMPDB:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FDUR:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FINT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FDURTR:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FDURTRADJ:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FTRADJD:VARCHAR(64)`
CONFIG;C_1_CFG_A2_HUMWSMPDLY:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2DUR:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2INT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFDU:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFDD:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_ENVMSGDLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_DS3231TMPDLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_BMP280DLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_RTDSDLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_RTMPDLY:VARCHAR(64)

output:
1600134342652.png
 

dstroy0

Zeroes and Ones
I've been working on splitting my database up into separate tables, and the first part of that was reading from a file that had some delimiters in it. Now I'm on to multiple delimiters and I've got what I think is the beginning of an ok solution if this db needs to be regenerated without supervision.

Python:
import re
#open file for reading 'r'
#rename columns.csv to db.cfg when the schema is moved into the file
column_file = open('columns.csv', 'r')
#read contents of file
content = column_file.read()
#remove all newline
content = content.replace('\n', '')
#remove all spaces
content = content.replace(' ', '')
#split list item on comma
content_list = re.split(';|:|`',content)

#each TABLE;COLUMN:TYPE`\n entry in db.cfg has 3 parts, so if you have anything left over after dividing all the parts you read by 3, UH OH
if len(content_list) % 3 != 0:
    #do db.cfg error
    print('schema incomplete')
else:
    #no db.cfg error
    print('schema complete')
#close file after done using
column_file.close()

def convert_list_to_nested_list(lst):
    table_list = []
    table = []
    col = []
    col_type = []

    table_length_array = []
    for i in range(0, len(lst), 3):
        table.append(lst[i])
        if lst[i] not in table_list:
            table_list.append(lst[i])
            table_length_array.extend([0])
        col.append(lst[i+1])
        col_type.append(lst[i+2])
   
    for i in range(0,len(table_list),1):
        table_length_array[i] = 0
    for i in range(0, len(table), 1):
        for j in range(0, len(table_list), 1):
            if table[i] == table_list[j]:
                table_length_array[j] = table_length_array[j] + 1
   
    nested_list = []
    gen_table = []
    for i in range(0, len(table_list),1):
        gen_table = [table_list[i]]
        gen_table_columns = []
        gen_table_column_type = []
        for j in range(0, len(col), 1):
            if table_list[i] == table[j]:
                #print(j)
                gen_table_columns.append(col[j])
                gen_table_column_type.append(col_type[j])
        for j in range(0, table_length_array[i],1):
            gen_table.append([gen_table_columns[j],gen_table_column_type[j]])
        nested_list.append(gen_table)
    return nested_list

nested_content_list = convert_list_to_nested_list(content_list)

#print(nested_content_list)

for i in range(0, len(nested_content_list),1):
    print(nested_content_list[i][0])
    for j in range(1, len(nested_content_list[i]), 1):
        print(nested_content_list[i][j][0],' ',nested_content_list[i][j][1],sep='')
    print()

and this is the file that it loads from:

Code:
POWER;id:INT(11)`
POWER;TS_DT:INT(11)`
POWER;TS_RT:VARCHAR(64)`
POWER;ACPWR_A0_RCW:DECIMAL(7,3)`
POWER;ACPWR_A1_RCW:DECIMAL(7,3)`
POWER;ACPWR_A2_RCW:DECIMAL(7,3)`
POWER;ACPWR_A3_RCW:DECIMAL(7,3)`
POWER;ACPWR_A4_RCW:DECIMAL(7,3)`
POWER;ACPWR_A5_RCW:DECIMAL(7,3)`
POWER;DCPWR_5V_C:DECIMAL(6,2)`
POWER;DCPWR_5V_BV:DECIMAL(6,2)`
POWER;DCPWR_5V_P:DECIMAL(6,2)`
POWER;DCPWR_12V_C:DECIMAL(6,2)`
POWER;DCPWR_12V_BV:DECIMAL(6,2)`
POWER;DCPWR_12V_P:DECIMAL(6,2)`
POWER;DCPWR_24V_C:DECIMAL(6,2)`
POWER;DCPWR_24V_BV:DECIMAL(6,2)`
POWER;DCPWR_24V_P:DECIMAL(6,2)`
ENV_ONE;id:INT(11)`
ENV_ONE;TS_DT:INT(11)`
ENV_ONE;TS_RT:VARCHAR(64)`
ENV_ONE;ENV_A1_WL:VARCHAR(64)`
ENV_ONE;ENV_A1_LP:VARCHAR(64)`
ENV_ONE;ENV_A1_TDS:DECIMAL(6,2)`
ENV_ONE;ENV_A1_RT:DECIMAL(7,3)`
ENV_ONE;ENV_A1_RH:DECIMAL(5,2)`
ENV_ONE;ENV_A1_RHE:DECIMAL(5,2)`
ENV_ONE;ENV_A1_AT:DECIMAL(5,2)`
ENV_ONE;ENV_A1_ATE:DECIMAL(5,2)`
ENV_ONE;ENV_A1_CO2:INT(11)`
ENV_ONE;ENV_A1_CO2E:INT(11)`
ENV_ONE;ENV_A1_FAN:VARCHAR(64)`
ENV_ONE;ENV_A1_L:VARCHAR(64)`
ENV_ONE;ENV_A1_LI:INT(11)`
ENV_ONE;ENV_A1_FS:VARCHAR(64)`
ENV_ONE;ENV_A1_FD:DECIMAL(5,3)`
ENV_ONE;ENV_A1_FT:VARCHAR(64)`
ENV_ONE;ENV_A1_FI:DECIMAL(7,3)`
ENV_ONE;ENV_A1_TTF:DECIMAL(7,3)`
ENV_ONE;ENV_A1_HAM:DECIMAL(5,2)`
ENV_ONE;ENV_A1_HAH:DECIMAL(5,2)`
ENV_ONE;ENV_A1_HAD:DECIMAL(5,2)`
ENV_ONE;ENV_TTP:VARCHAR(64)`
ENV_TWO;id:INT(11)`
ENV_TWO;TS_DT:INT(11)`
ENV_TWO;TS_RT:VARCHAR(64)`
ENV_TWO;ENV_A2_WL:VARCHAR(64)`
ENV_TWO;ENV_A2_LP:VARCHAR(64)`
ENV_TWO;ENV_A2_TDS:DECIMAL(6,2)`
ENV_TWO;ENV_A2_RT:DECIMAL(7,3)`
ENV_TWO;ENV_A2_RH:DECIMAL(5,2)`
ENV_TWO;ENV_A2_RHE:DECIMAL(5,2)`
ENV_TWO;ENV_A2_AT:DECIMAL(5,2)`
ENV_TWO;ENV_A2_ATE:DECIMAL(5,2)`
ENV_TWO;ENV_A2_CO2:INT(11)`
ENV_TWO;ENV_A2_CO2E:INT(11)`
ENV_TWO;ENV_A2_FAN:VARCHAR(64)`
ENV_TWO;ENV_A2_L:VARCHAR(64)`
ENV_TWO;ENV_A2_LI:INT(11)`
ENV_TWO;ENV_A2_FS:VARCHAR(64)`
ENV_TWO;ENV_A2_FD:DECIMAL(5,3)`
ENV_TWO;ENV_A2_FT:VARCHAR(64)`
ENV_TWO;ENV_A2_FI:DECIMAL(7,3)`
ENV_TWO;ENV_A2_TTF:DECIMAL(7,3)`
ENV_TWO;ENV_A2_HAM:DECIMAL(5,2)`
ENV_TWO;ENV_A2_HAH:DECIMAL(5,2)`
ENV_TWO;ENV_A2_HAD:DECIMAL(5,2)`
ENV_TWO;ENV_TTP:VARCHAR(64)`
RESERVOIR;id:INT(11)`
RESERVOIR;TS_DT:INT(11)`
RESERVOIR;TS_RT:VARCHAR(64)`
RESERVOIR;RES_pH:DECIMAL(8,6)`
RESERVOIR;RES_EC:DECIMAL(8,6)`
RESERVOIR;RES_temp:DECIMAL(10,6)`
RESERVOIR;RES_total_in:DECIMAL(10,3)`
RESERVOIR;RES_ph_up_total:DECIMAL(8,3)`
RESERVOIR;RES_ph_down_total:DECIMAL(8,3)`
VPD;id:INT(11)`
VPD;TS_DT:INT(11)`
VPD;TS_RT:VARCHAR(64)`
VPD;VPD_A1_AIR:DECIMAL(5,3)`
VPD;VPD_A1_L0:DECIMAL(5,3)`
VPD;VPD_A1_L1:DECIMAL(5,3)`
VPD;VPD_A1_L2:DECIMAL(5,3)`
VPD;VPD_A1_L3:DECIMAL(5,3)`
VPD;VPD_A1_LFT_0:DECIMAL(5,3)`
VPD;VPD_A1_LFT_1:DECIMAL(5,3)`
VPD;VPD_A1_LFT_2:DECIMAL(5,3)`
VPD;VPD_A1_LFT_3:DECIMAL(5,3)`
VPD;VPD_A2_AIR:DECIMAL(5,3)`
VPD;VPD_A2_L0:DECIMAL(5,3)`
VPD;VPD_A2_L1:DECIMAL(5,3)`
VPD;VPD_A2_L2:DECIMAL(5,3)`
VPD;VPD_A2_L3:DECIMAL(5,3)`
VPD;VPD_A2_LFT_0:DECIMAL(5,3)`
VPD;VPD_A2_LFT_1:DECIMAL(5,3)`
VPD;VPD_A2_LFT_2:DECIMAL(5,3)`
VPD;VPD_A2_LFT_3:DECIMAL(5,3)`
TRACKER;id:INT(11)`
TRACKER;TS_DT:INT(11)`
TRACKER;TS_RT:VARCHAR(64)`
TRACKER;TRK_A1_VEG_START:INT(11)`
TRACKER;TRK_A1_VEG_END:INT(11)`
TRACKER;TRK_A1_FLOWER_START:INT(11)`
TRACKER;TRK_A1_FLOWER_END:INT(11)`
TRACKER;TRK_A2_VEG_START:INT(11)`
TRACKER;TRK_A2_VEG_END:INT(11)`
TRACKER;TRK_A2_FLOWER_START:INT(11)`
TRACKER;TRK_A2_FLOWER_END:INT(11)`
SYSTEM;id:INT(11)`
SYSTEM;TS_DT:INT(11)`
SYSTEM;TS_RT:VARCHAR(64)`
SYSTEM;TTP:VARCHAR(64)`
SYSTEM;COM:VARCHAR(64)`
SYSTEM;SYS:VARCHAR(64)`
SYSTEM;DATA:TEXT`
SYSTEM;SCRIPT_ERROR:BLOB`
SYSTEM;CFG:TEXT`
SYSTEM;MSG:TEXT`
SYSTEM;SYS_0:VARCHAR(64)`
SYSTEM;SYS_1:VARCHAR(64)`
CONFIG;id:INT(11)`
CONFIG;TS_DT:INT(11)`
CONFIG;TS_RT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FLOWER:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2EN:VARCHAR(64)`
CONFIG;C_1_CFG_A1_SSROUTLETLIGHTTIMER:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMINON:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMINOFF:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMAXOFFLO:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FMINONLO:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LONT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LOFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LI:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LIMAX:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFID:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFOD:VARCHAR(64)`
CONFIG;C_1_CFG_A1_VEGLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FLOWERLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2ONT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2OFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2VEGTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2FLOWERTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2DB:VARCHAR(64)`
CONFIG;C_1_CFG_A1_HUMT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_HUMDB:VARCHAR(64)`
CONFIG;C_1_CFG_A1_TEMPT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_TEMPDB:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FDUR:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FINT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FDURTR:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FDURTRADJ:VARCHAR(64)`
CONFIG;C_1_CFG_A1_FTRADJD:VARCHAR(64)`
CONFIG;C_1_CFG_A1_HUMWSMPDLY:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2DUR:VARCHAR(64)`
CONFIG;C_1_CFG_A1_CO2INT:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFDU:VARCHAR(64)`
CONFIG;C_1_CFG_A1_LFDD:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FLOWER:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2EN:VARCHAR(64)`
CONFIG;C_1_CFG_A2_SSROUTLETLIGHTTIMER:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMINON:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMINOFF:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMAXOFFLO:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FMINONLO:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LONT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LOFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LI:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LIMAX:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFID:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFOD:VARCHAR(64)`
CONFIG;C_1_CFG_A2_VEGLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FLOWERLEN:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2ONT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2OFFT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2VEGTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2FLOWERTGT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2DB:VARCHAR(64)`
CONFIG;C_1_CFG_A2_HUMT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_HUMDB:VARCHAR(64)`
CONFIG;C_1_CFG_A2_TEMPT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_TEMPDB:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FDUR:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FINT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FDURTR:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FDURTRADJ:VARCHAR(64)`
CONFIG;C_1_CFG_A2_FTRADJD:VARCHAR(64)`
CONFIG;C_1_CFG_A2_HUMWSMPDLY:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2DUR:VARCHAR(64)`
CONFIG;C_1_CFG_A2_CO2INT:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFDU:VARCHAR(64)`
CONFIG;C_1_CFG_A2_LFDD:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_ENVMSGDLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_DS3231TMPDLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_BMP280DLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_RTDSDLY:VARCHAR(64)`
CONFIG;C_1_CFG_LOC_RTMPDLY:VARCHAR(64)

output:
View attachment 26999

http://www.objgen.com/json

I decided to use a json instead of this weird file format, much easier. I'm familiar with the format because that's what I send from the microcontroller to the raspberry pi
 

dstroy0

Zeroes and Ones
json much easier

Python:
import json

#open file for reading 'r'
cfg_file = open('db_cfg.ini', 'r')
#read contents of file
content = cfg_file.read()
cfg_file.close()

def print_pretty_db_schema_json(db_schema):
    #prettify json loaded from db_cfg.ini
    pretty_db_schema = json.dumps(db_schema, indent=4, separators=(',', ':'))
    print(pretty_db_schema)

def load_db_schema():
    try:
        json_content = json.loads(content)
        print("db schema loaded")
        return json_content
    except ValueError as e:
        print("db schema error")
        print(e)
        #uh oh

#get db schema       
db_schema = load_db_schema()

print_pretty_db_schema_json(db_schema)

#get tables from db schema
tables = []
for i in db_schema.keys():
    tables.append(i)

#get list of acceptable columns for all tables, exclude id and INDEX
db_table_col = []
for i in tables:
    for j in db_schema[i].keys():
        if j != 'id' and j != 'INDEX' and j not in db_table_col:
            db_table_col.append(j)

#testing
#simulated received keys list
test_column = ["ENV_A1_AT","ENV_A2_AT","VPD_A1_AIR","ACPWR_A0_RCW","DCPWR_24V_BV","TTP","C_1_CFG_A1_FLOWER"]
#put all the pegs into all the right shaped holes
for i in range(0,len(test_column),1):
    if test_column[i] in db_table_col:
        if test_column[i][0:3] == "ENV":
            #print("env message")
            if test_column[i][4:6] == "A1":
                print("table: env_one")
                print("col: ", test_column[i],sep='')
            elif test_column[i][4:6] == "A2":
                print("table: env_two")
                print("col: ", test_column[i],sep='')
        elif test_column[i][0:3] == "VPD":
            #print("vpd message")
            print("table: vpd")
            print("col: ", test_column[i],sep='')
        elif test_column[i][0:3] == "ACP":
            #print("ac power message")
            print("table: power")
            print("col: ", test_column[i],sep='')
        elif test_column[i][0:3] == "DCP":
            #print("dc power message")
            print("table: power")
            print("col: ", test_column[i],sep='')
        elif test_column[i][0:3] == "RES":
            #print("reservoir message")
            print("table: reservoir")
            print("col: ", test_column[i],sep='')
        elif test_column[i][0:3] == "TRK":
            #print("tracker message")
            print("table: tracker")
            print("col: ", test_column[i],sep='')
        elif test_column[i][0:3] == "TTP" or test_column[i][0:3] == "COM" or test_column[i][0:3] == "SYS" or test_column[i][0:3] == "DAT" or test_column[i][0:3] == "SCR" or test_column[i][0:3] == "MSG" or test_column[i][0:3] == "CFG":
            #print("system message")
            print("table: system")
            print("col: ", test_column[i],sep='')
        elif test_column[i][4:7] == "CFG":
            #print("config message")
            print("table: config")
            print("col: ", test_column[i],sep='')

db_cfg.ini
JSON:
{
  "power": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "ACPWR_A0_RCW": "DECIMAL(7,3)",
    "ACPWR_A1_RCW": "DECIMAL(7,3)",
    "ACPWR_A2_RCW": "DECIMAL(7,3)",
    "ACPWR_A3_RCW": "DECIMAL(7,3)",
    "ACPWR_A4_RCW": "DECIMAL(7,3)",
    "ACPWR_A5_RCW": "DECIMAL(7,3)",
    "DCPWR_5V_C": "DECIMAL(6,2)",
    "DCPWR_5V_BV": "DECIMAL(6,2)",
    "DCPWR_5V_P": "DECIMAL(6,2)",
    "DCPWR_12V_C": "DECIMAL(6,2)",
    "DCPWR_12V_BV": "DECIMAL(6,2)",
    "DCPWR_12V_P": "DECIMAL(6,2)",
    "DCPWR_24V_C": "DECIMAL(6,2)",
    "DCPWR_24V_BV": "DECIMAL(6,2)",
    "DCPWR_24V_P": "DECIMAL(6,2)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "env_one": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "ENV_A1_WL": "VARCHAR(64)",
    "ENV_A1_LP": "VARCHAR(64)",
    "ENV_A1_TDS": "DECIMAL(6,2)",
    "ENV_A1_RT": "DECIMAL(7,3)",
    "ENV_A1_RH": "DECIMAL(5,2)",
    "ENV_A1_RHE": "DECIMAL(5,2)",
    "ENV_A1_AT": "DECIMAL(5,2)",
    "ENV_A1_ATE": "DECIMAL(5,2)",
    "ENV_A1_CO2": "INT(11)",
    "ENV_A1_CO2E": "INT(11)",
    "ENV_A1_FAN": "VARCHAR(64)",
    "ENV_A1_L": "VARCHAR(64)",
    "ENV_A1_LI": "INT(11)",
    "ENV_A1_FS": "VARCHAR(64)",
    "ENV_A1_FD": "DECIMAL(5,3)",
    "ENV_A1_FT": "VARCHAR(64)",
    "ENV_A1_FI": "DECIMAL(7,3)",
    "ENV_A1_TTF": "DECIMAL(7,3)",
    "ENV_A1_HAM": "DECIMAL(5,2)",
    "ENV_A1_HAH": "DECIMAL(5,2)",
    "ENV_A1_HAD": "DECIMAL(5,2)",
    "ENV_TTP": "VARCHAR(64)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "env_two": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "ENV_A2_WL": "VARCHAR(64)",
    "ENV_A2_LP": "VARCHAR(64)",
    "ENV_A2_TDS": "DECIMAL(6,2)",
    "ENV_A2_RT": "DECIMAL(7,3)",
    "ENV_A2_RH": "DECIMAL(5,2)",
    "ENV_A2_RHE": "DECIMAL(5,2)",
    "ENV_A2_AT": "DECIMAL(5,2)",
    "ENV_A2_ATE": "DECIMAL(5,2)",
    "ENV_A2_CO2": "INT(11)",
    "ENV_A2_CO2E": "INT(11)",
    "ENV_A2_FAN": "VARCHAR(64)",
    "ENV_A2_L": "VARCHAR(64)",
    "ENV_A2_LI": "INT(11)",
    "ENV_A2_FS": "VARCHAR(64)",
    "ENV_A2_FD": "DECIMAL(5,3)",
    "ENV_A2_FT": "VARCHAR(64)",
    "ENV_A2_FI": "DECIMAL(7,3)",
    "ENV_A2_TTF": "DECIMAL(7,3)",
    "ENV_A2_HAM": "DECIMAL(5,2)",
    "ENV_A2_HAH": "DECIMAL(5,2)",
    "ENV_A2_HAD": "DECIMAL(5,2)",
    "ENV_TTP": "VARCHAR(64)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "reservoir": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "RES_pH": "DECIMAL(8,6)",
    "RES_EC": "DECIMAL(8,6)",
    "RES_temp": "DECIMAL(10,6)",
    "RES_total_in": "DECIMAL(10,3)",
    "RES_ph_up_total": "DECIMAL(8,3)",
    "RES_ph_down_total": "DECIMAL(8,3)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "vpd": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "VPD_A1_AIR": "DECIMAL(5,3)",
    "VPD_A1_L0": "DECIMAL(5,3)",
    "VPD_A1_L1": "DECIMAL(5,3)",
    "VPD_A1_L2": "DECIMAL(5,3)",
    "VPD_A1_L3": "DECIMAL(5,3)",
    "VPD_A1_LFT_0": "DECIMAL(5,3)",
    "VPD_A1_LFT_1": "DECIMAL(5,3)",
    "VPD_A1_LFT_2": "DECIMAL(5,3)",
    "VPD_A1_LFT_3": "DECIMAL(5,3)",
    "VPD_A2_AIR": "DECIMAL(5,3)",
    "VPD_A2_L0": "DECIMAL(5,3)",
    "VPD_A2_L1": "DECIMAL(5,3)",
    "VPD_A2_L2": "DECIMAL(5,3)",
    "VPD_A2_L3": "DECIMAL(5,3)",
    "VPD_A2_LFT_0": "DECIMAL(5,3)",
    "VPD_A2_LFT_1": "DECIMAL(5,3)",
    "VPD_A2_LFT_2": "DECIMAL(5,3)",
    "VPD_A2_LFT_3": "DECIMAL(5,3)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "tracker": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "TRK_A1_VEG_START": "INT(11)",
    "TRK_A1_VEG_END": "INT(11)",
    "TRK_A1_FLOWER_START": "INT(11)",
    "TRK_A1_FLOWER_END": "INT(11)",
    "TRK_A2_VEG_START": "INT(11)",
    "TRK_A2_VEG_END": "INT(11)",
    "TRK_A2_FLOWER_START": "INT(11)",
    "TRK_A2_FLOWER_END": "INT(11)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "system": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "TTP": "VARCHAR(64)",
    "COM": "VARCHAR(64)",
    "SYS": "VARCHAR(64)",
    "DATA": "TEXT",
    "SCRIPT_ERROR": "BLOB",
    "CFG": "TEXT",
    "MSG": "TEXT",
    "SYS_0": "VARCHAR(64)",
    "SYS_1": "VARCHAR(64)",
    "INDEX": "idx_TS_DT(TS_DT)"
  },
  "config": {
    "id": "INT(11) AUTO_INCREMENT PRIMARY KEY",
    "TS_DT": "INT(11)",
    "TS_RT": "VARCHAR(64)",
    "C_1_CFG_A1_FLOWER": "VARCHAR(64)",
    "C_1_CFG_LOC_RTMPDLY": "VARCHAR(64)",
    "INDEX": "idx_TS_DT(TS_DT)"
  }
}
 

dstroy0

Zeroes and Ones
An interesting property of solenoids is that if you use more voltage than the coil is rated for the magnetic field that it generates becomes stronger to a point which in turn causes the solenoid to actuate faster and harder than it would normally. There are some circuits that will increase voltage to sometimes double what the solenoid coil is rated for and then regulate the voltage and current down to enough to keep it open until the control signal is removed. If you're operating solenoids near their pressure limit and they're cheap it's a good idea to put an extra 1.5 volts through it or so. I've been having a couple problems lately, one was that there was definitely something wrong with some nutrients I was using, the second is that my feed solenoids weren't operating reliably and so I thought it was just time to replace them, I had rebuilt and cleaned them several times, and they are a few years old. Well, they never had a problem in my last controller and that's because I drove them at 13.8 volts, which makes the solenoid operate quite a bit more energetically than it would normally which is important when the solenoid is near its operating pressure limit because the solenoids I'm using have helper ports which keep the solenoid sucked closed if there's no current running through the hole. It's just a tiny port to help equalize pressure on the other side of the diaphragm. This entire time, my feed solenoids have not been reliably operating. I just fixed it earlier by adding another buck converter and driving them at 13.8 volts. Feed solenoids are on their own dedicated 13.8v supply.
 
Top Bottom