Example #1
0
    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.
            """)
Example #2
0
    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())
Example #3
0
    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()
Example #4
0
 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))
Example #5
0
 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)))
Example #6
0
    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')
Example #7
0
 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))
Example #8
0
 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))
Example #9
0
    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()
Example #10
0
    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')
Example #11
0
    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)