def __init__(self, rld_dir='', out_dir='', encryption_pass='', hex_key='', filename='', sympro_path=r'"C:/Program Files (x86)/Renewable NRG Systems/SymPRO Desktop/SymPRODesktop.exe"', process_type='convert', convert_type='meas', nec='', site_filter='', site_file='', **kwargs): self.rld_dir = windows_folder_path(rld_dir) self.out_dir = windows_folder_path(out_dir) self.encryption_pass = encryption_pass self.hex_key = hex_key self.sympro_path = sympro_path self.process_type = process_type self.convert_type = convert_type self.nec = nec self.site_filter = site_filter self.site_file = site_file if 'file_filter' in kwargs and site_filter == '': self.file_filter = kwargs.get('file_filter') self.site_filter = self.file_filter if check_platform() == 'win32': if filename: affirm_directory(self.out_dir) self.single_file(filepath=filename) else: print(""" convert_rld.local() method ONLY compatible with Windows OS. Please use convert_rld.nrg_convert_api() method instead. """)
def check_sdr(self): """determine if SDR is installed""" if self.platform == 'win32': # do the windows check try: os.path.exists(self.sdr_path) self.sdr_ok = True except: self.sdr_ok = False print('SDR not installed. Please install SDR or check path.\nhttps://www.nrgsystems.com/support/product-support/software/symphonie-data-retriever-software') else: # do the linux check try: subprocess.check_output(['wine','--version']) except NotADirectoryError: print('System not configured for running SDR.\n Please follow instructions in SDR_Linux_README.md to enable.') try: subprocess.check_output(['wine',self.sdr_path,'/s','test.rwd']) affirm_directory(os.path.join(self.wine_folder, "NRG/ScaledData")) self.sdr_ok = True os.remove(os.path.join(self.wine_folder, "NRG/ScaledData/test.log")) except: self.sdr_ok = False print('SDR unable to start') import traceback print(traceback.format_exc())
def __init__(self, rld_dir='', out_dir='', filename='', site_filter='', filter2='', start_date='1970-01-01', end_date='2150-12-31', client_id='', client_secret='', encryption_pass='', header_type='standard', nec_file='', export_type='meas', export_format='csv_zipped', progress_bar=True, **kwargs): super().__init__(client_id, client_secret) self.encryption_pass = encryption_pass self.export_format = export_format self.export_type = export_type self.site_filter = site_filter if 'file_filter' in kwargs and site_filter == '': self.file_filter = kwargs.get('file_filter') self.site_filter = self.file_filter self.filter2 = filter2 self.start_date = start_date self.end_date = end_date self.header_type = header_type self.nec_file = nec_file self.out_dir = out_dir self.rld_dir = rld_dir self.progress_bar = progress_bar affirm_directory(self.out_dir) if filename: self.pad = 1 self.counter = 1 self.raw_count = 1 self.progress_bar = False self.start_time = datetime.now() self.single_file(filename) if rld_dir: self.process()
def convert(self): """ process rwd files 1 - create list of RWD files that match filtering 2 - copy RWD files to RawData directory 3 - create out_dir if necessary 4 - iterate through files """ self.list_files() self.copy_rwd_files() affirm_directory(self.out_dir) for f in self.rwd_file_list: site_num = f[:4] try: self._filename = "\\".join([self.RawData+site_num,f]) self.single_file() except: print('file conversion failed on {}'.format(self._filename))
def convert(self): """ process rwd files 1 - create list of RWD files that match filtering 2 - copy RWD files to RawData directory 3 - create out_dir if necessary 4 - iterate through files """ self._list_files() self._copy_rwd_files() affirm_directory(self.out_dir) self.raw_count = len(self.rwd_file_list) self.pad = len(str(self.raw_count)) + 1 self.raw_counter = 1 self.start_time = time.time() for f in sorted(self.rwd_file_list): site_num = f[:4] try: self._filename = "\\".join([self.RawData + site_num, f]) self._single_file() except: print('file conversion failed on {}'.format(self._filename)) self.raw_counter += 1 txt_count = count_files(self.out_dir, self.file_filter.split(".")[0], 'txt', start_time=self.start_time) log_count, log_files = count_files(self.out_dir, self.file_filter, 'log', show_files=True, start_time=self.start_time) print('\nRWDs in : {}'.format(self.raw_count)) print('TXTs out : {}'.format(txt_count)) print('LOGs out : {}'.format(log_count)) if len(log_files) > 0: print('Log files created:') for _filename in log_files: print('\t{}'.format(_filename)) print('----------------\nDifference : {}'.format(self.raw_count - (txt_count + log_count)))
def directory(self): """ processes all rld files in self.rld_dir, outputs to txt files to out_dir """ affirm_directory(self.out_dir) try: if self.encryption_pass != '': encryption = '/pass "{0}"'.format(self.encryption_pass) else: encryption = '' except: print('could not parse encryption_pass') try: if self.nec != '': nec = '/config "{0}"'.format(self.nec) else: nec = '' except: print('could not parse encryption_pass') try: print('\nConverting files in {0}\n'.format(self.rld_dir)) print('Saving outputs to {0}'.format(self.out_dir)) cmd = [ self.sympro_path, "/cmd", "convert", "/file", '"' + "\\".join([self.rld_dir, self.site_filter]) + '*.rld"', encryption, nec, "/type", '"' + self.convert_type + '"', "/outputdir", '"' + self.out_dir[:-1] + '"' ] print(" ".join(cmd)) subprocess.run(" ".join(cmd), stdout=subprocess.PIPE) print('\nTXT files saved in {0}\n'.format(self.out_dir)) except FileNotFoundError: print(""" No instance of SymphoniePRO Desktop Application found. Please follow the link below to download and install this software: https://www.nrgsystems.com/support/product-support/software/symphoniepro-desktop-application """) except: print('Unable to process files in directory')
def _copy_rwd_files(self): """ copy RWD files from self.RawData to self.rwd_dir """ for f in sorted(self.rwd_file_list): if self.file_filter in f: site_num = f[:4] site_folder = "\\".join([self.RawData, site_num]) if self.platform == 'linux': site_folder = ''.join( [self.wine_folder, 'NRG/RawData/', site_num]) try: affirm_directory(site_folder) except: print("couldn't create {}".format(site_folder)) pass try: shutil.copy("".join([self.dir_paths[0], f]), site_folder) except: print( 'unable to copy file to RawData folder: {}'.format(f))
def copy_rwd_files(self): """ copy RWD files from self.RawData to self.rwd_dir """ for f in self.rwd_file_list: if self.site_filter in f: site_num = f[:4] site_folder = "\\".join([self.RawData,site_num]) copy_cmd = 'copy' if self.platform == 'linux': site_folder = ''.join([self.wine_folder,'NRG/RawData/',site_num]) copy_cmd = 'cp' try: affirm_directory(site_folder) except: print("couldn't create {}".format(site_folder)) pass try: cmd = [copy_cmd,"".join([self.dir_paths[0], f]),self.file_path_joiner.join([site_folder, f])] subprocess.check_output(" ".join(cmd), shell=True) except: print('unable to copy file to RawData folder: {}'.format(f))
def __init__(self, out_dir='', serial_number='', site_number='', start_date='2014-01-01', end_date='2023-12-31', client_id='', client_secret='', nec_file='', save_file=True, **kwargs): super().__init__(client_id, client_secret) self.site_number = str(site_number).zfill(6) self.out_file = f'{self.site_number}_{start_date}_{end_date}.zip'.replace( ':', '.') self.txt_file = self.out_file.replace("zip", "txt") self.filepath = os.path.join(out_dir, self.out_file) self.out_dir = out_dir affirm_directory(self.out_dir) self.serial_number = str(serial_number)[-5:] self.site_number = str(site_number) self.start_date = start_date self.end_date = end_date self.nec_file = nec_file if self.nec_file: self.encoded_nec_bytes = self.prepare_file_bytes(self.nec_file) else: self.encoded_nec_bytes = '' self.save_file = save_file self.reader = self.export()
def directory(self): """processes all rld files in self.rld_dir, outputs to txt files to out_dir""" affirm_directory(self.out_dir) try: if self.encryption_pass: encryption = '/pass "{0}"'.format(self.encryption_pass) else: encryption = '' except: print('could not parse encryption_pass') try: if self.hex_key: encryption_key = '/key "{0}"'.format(self.hex_key) else: encryption_key = '' except: print('could not parse hex_key') try: if self.nec: nec = '/config "{0}"'.format(self.nec) else: nec = '' except: print('could not parse encryption_pass') try: if self.site_file == True: site_file = '/site ' elif self.site_file: site_file = '/site "{0}"'.format(self.site_file) else: site_file = '' except: print('could not parse encryption_pass') try: rld_count = count_files(self.rld_dir, self.site_filter, 'rld') self.start_time = time.time() print('\nConverting {0} files from {1}\n'.format( rld_count, self.rld_dir)) print('Saving outputs to {0}'.format(self.out_dir)) cmd = [ self.sympro_path, "/cmd", self.process_type, "/file", '"' + "\\".join([self.rld_dir, self.site_filter]) + '*.rld"', encryption, encryption_key, nec, site_file, "/type", '"' + self.convert_type + '"', "/outputdir", '"' + self.out_dir[:-1] + '"' ] # print('\nUsing command line script:\n{}'.format(" ".join(cmd))) self.cmd = cmd self.start = datetime.now() subprocess.run(" ".join(cmd), stdout=subprocess.PIPE) self.end = datetime.now() self.convert_time = str(self.end - self.start) print('\nTXT files saved in {0}\n'.format(self.out_dir)) txt_count = count_files(self.out_dir, self.site_filter, 'txt', start_time=self.start_time) log_count, log_files = count_files(self.out_dir, self.site_filter, 'log', show_files=True, start_time=self.start_time) print('RLDs in : {}'.format(rld_count)) print('TXTs out : {}'.format(txt_count)) print('LOGs out : {}'.format(log_count)) if len(log_files) > 0: print('Log files created:') for _filename in log_files: print('\t{}'.format(_filename)) print('----------------\nDifference : {}'.format(rld_count - (txt_count + log_count))) except FileNotFoundError: print(""" No instance of SymphoniePRO Desktop Application found. Please follow the link below to download and install this software: https://www.nrgsystems.com/support/product-support/software/symphoniepro-desktop-application """) except: print('Unable to process files in directory')
def __init__(self, rld_dir='', out_dir='', filename='', site_filter='', filter2 = '', start_date='1970-01-01', end_date='2150-12-31', client_id='', client_secret='', token='', encryption_pass='', header_type='standard', nec_file='', export_type='meas', export_format='csv_zipped', **kwargs): if check_platform() == 'win32': self.platform = 'win32' self.folder_split = '\\' self.rld_dir = windows_folder_path(rld_dir) self.out_dir = windows_folder_path(out_dir) else: self.platform = 'linux' self.folder_split = '/' self.rld_dir = linux_folder_path(rld_dir) self.out_dir = linux_folder_path(out_dir) self.encryption_pass = encryption_pass self.export_format = export_format self.export_type = export_type self.site_filter = site_filter if 'file_filter' in kwargs and site_filter == '': self.file_filter = kwargs.get('file_filter') self.site_filter = self.file_filter self.filter2 = filter2 self.start_date = start_date self.end_date = end_date self.header_type = header_type self.nec_file = nec_file self.token = token self.client_id = client_id self.client_secret = client_secret affirm_directory(self.out_dir) if self.client_id and self.client_secret: self.session_token, self.session_start_time = maintain_session_token(client_id=self.client_id, client_secret=self.client_secret) if self.session_token: self.convert_url = ConvertServiceUrl else: print("Unable to get session token for conversion") else: self.convert_url = nrgApiUrl print("[Deprecation warning]\n------------------------------------------------------") print(" NRGPy Convert API will require a client_id and \n client_secret starting March 15, 2020.") print(" Please contact [email protected] or visit \n https://services.nrgsystems.com to sign up.") print("------------------------------------------------------\n") if len(tk) > 10 and len(self.token) < 10: self.token = tk if (not self.token) and (not self.client_id) and (not self.client_secret): print('[Access error] Valid credentials are required.\nPlease contact [email protected] or visit \nhttps://services.nrgsystems.com for API access') if filename != '': self.pad = 1 self.counter = 1 self.raw_count = 1 self.progress_bar=False self.start_time = datetime.now() self.single_file(filename)