def _load_measurement_data(self, filename): with open(filename, 'r') as myf: fcsv = csv.reader(myf) header = fcsv.next() for line in fcsv: if line[0] == self.meter_id: try: ts = datetime.datetime.strptime( line[1], '%Y-%m-%d %H:%M:%S') except: continue tz = pytz.timezone('America/Jamaica') ts = ts.replace(tzinfo=tz) try: dp = MeasurementDataPoint.objects.get(\ meter=self, ts=ts) except: dp = MeasurementDataPoint(\ meter=self, ts=ts) for h, d in zip(header, line): if h == 'DeviceId' or h == 'Code': pass elif h == "Time Of Last Interrogation": if d == '': continue ts = datetime.datetime.strptime( d, '%Y-%m-%d %H:%M:%S') ts = ts.replace(tzinfo=tz) dp.time_of_last_interrogation = ts elif h == "Time Of Last Outage": if d == '': continue ts = datetime.datetime.strptime( d, '%Y-%m-%d %H:%M:%S') ts = ts.replace(tzinfo=tz) dp.time_of_last_outage = ts elif h == "Phase B Current angle": dp.phase_b_current_angle = float(d) elif h == "Daylight Savings Time Configured": dp.daylight_savings_time_configured = True if d == 'True' else False elif h == "Low Battery Error": dp.low_battery_error = True if d == 'True' else False elif h == "Metrology Communications Fatal Error": dp.metrology_communications_fatal_error = True if d == 'True' else False elif h == "Diagnostic Error (Inactive Phase)": dp.inactive_phase = True if d == 'True' else False elif h == "Diag Count 3": dp.diag_count_3 = int(d) elif h == "Diag Count 4": dp.diag_count_4 = int(d) elif h == "Times Programmed Count": dp.times_programmed_count = int(d) elif h == "Early Power Fail Count": dp.early_power_fail_count = int(d) elif h == "Good Battery Reading": dp.good_battery_reading = int(d) elif h == "File System Fatal Error": dp.file_system_fatal_error = True if d == 'True' else False elif h == "Diag Count 2": dp.diag_count_2 = int(d) elif h == "Phase A Current": dp.phase_a_current = float(d) elif h == "Phase A Current angle": dp.phase_a_current_angle = float(d) elif h == "ABC PHASE Rotation": dp.abc_phase_rotation = int(d) elif h == "Diagnostic Error (Voltage Deviation)": dp.voltage_deviation = True if d == 'True' else False elif h == "Diagnostic Error (Phase Angle Displacement)": dp.phase_angle_displacement = True if d == 'True' else False elif h == "Power Outage Count": dp.power_outage_count = int(d) elif h == "SLC Error": dp.slc_error = True if d == 'True' else False elif h == "Phase B Voltage": dp.phase_b_voltage = float(d) elif h == "Phase B Voltage angle": dp.phase_b_voltage_angle = float(d) elif h == "Phase C Voltage angle": dp.phase_c_voltage_angle = float(d) elif h == "Phase C Current angle": dp.phase_c_current_angle = float(d) elif h == "Phase A DC Detect": dp.phase_a_dc_detect = float(d) elif h == "Demand Reset Count": dp.demand_reset_count = int(d) elif h == "TOU Schedule Error": dp.tou_schedule_error = True if d == 'True' else False elif h == "Reverse Power Flow Error": dp.reverse_power_flow_error = True if d == 'True' else False elif h == "Diag 5 Phase B Count": dp.diag_5_phase_b_count = int(d) elif h == "Demand Interval Length": dp.demand_interval_length = int(d) elif h == "Phase B DC Detect": dp.phase_b_dc_detect = float(d) elif h == "Register Full Scale Exceeded Error": dp.register_full_scale_exceeded_error = True if d == 'True' else False elif h == "EPF Data Fatal Error": dp.epf_data_fatal_error = True if d == 'True' else False elif h == "Phase A Voltage": dp.phase_a_voltage = float(d) elif h == "Phase B Current": dp.phase_b_current = float(d) elif h == "Phase C Current": dp.phase_c_current = float(d) elif h == "Current Battery Reading": dp.current_battery_reading = int(d) elif h == "Demand Threshold Exceeded Error": dp.demand_threshold_exceeded_error = True if d == 'True' else False elif h == "Metrology Communications Error": dp.metrology_communications_error = True if d == 'True' else False elif h == "RAM Fatal Error": dp.ram_fatal_error = True if d == 'True' else False elif h == "Diag 5 Phase A Count": dp.diag_5_phase_a_count = int(d) elif h == "Diag 5 Phase C Count": dp.diag_5_phase_c_count = int(d) elif h == "Current Season": dp.current_season = int(d) elif h == "Phase C DC Detect": dp.phase_c_dc_detect = float(d) elif h == "Days Since Demand Reset": dp.days_since_demand_reset = int(d) elif h == "Days Since Last Test": dp.days_since_last_test = int(d) elif h == "Days On Battery": dp.days_on_battery = int(d) elif h == "Phase Loss Error": dp.phase_loss_error = True if d == 'True' else False elif h == "Mass Memory Error": dp.mass_memory_error = True if d == 'True' else False elif h == "Diagnostic Error (Cross Phase Flow)": dp.cross_phase_flow = True if d == 'True' else False elif h == "Diagnostic Error (Current Waveform Distorsion)": dp.current_waveform_distorsion = True if d == 'True' else False elif h == "Phase C Voltage": dp.phase_c_voltage = float(d) elif h == "Service Type Detected": dp.service_type_detected = int(d) elif h == "MCU Flash Fatal Error": dp.mcu_flash_fatal_error = True if d == 'True' else False elif h == "Data Flash Fatal Error": dp.data_flash_fatal_error = True if d == 'True' else False elif h == "Diag Count 1": dp.diag_count_1 = int(d) elif h == "Diag Count 5": dp.diag_count_5 = int(d) elif h == "Clock Sync Error": dp.clock_sync_error = True if d == 'True' else False elif h == "Site Scan Error": dp.site_scan_error = True if d == 'True' else False else: print 'XXX ' + h + ' unrecognized' dp.save() return True
def _load_measurement_data(self, filename): with open(filename, "r") as myf: fcsv = csv.reader(myf) header = fcsv.next() for line in fcsv: if line[0] == self.meter_id: try: ts = datetime.datetime.strptime(line[1], "%Y-%m-%d %H:%M:%S") except: continue tz = pytz.timezone("America/Jamaica") ts = ts.replace(tzinfo=tz) try: dp = MeasurementDataPoint.objects.get(meter=self, ts=ts) except: dp = MeasurementDataPoint(meter=self, ts=ts) for h, d in zip(header, line): if h == "DeviceId" or h == "Code": pass elif h == "Time Of Last Interrogation": if d == "": continue ts = datetime.datetime.strptime(d, "%Y-%m-%d %H:%M:%S") ts = ts.replace(tzinfo=tz) dp.time_of_last_interrogation = ts elif h == "Time Of Last Outage": if d == "": continue ts = datetime.datetime.strptime(d, "%Y-%m-%d %H:%M:%S") ts = ts.replace(tzinfo=tz) dp.time_of_last_outage = ts elif h == "Phase B Current angle": dp.phase_b_current_angle = float(d) elif h == "Daylight Savings Time Configured": dp.daylight_savings_time_configured = True if d == "True" else False elif h == "Low Battery Error": dp.low_battery_error = True if d == "True" else False elif h == "Metrology Communications Fatal Error": dp.metrology_communications_fatal_error = True if d == "True" else False elif h == "Diagnostic Error (Inactive Phase)": dp.inactive_phase = True if d == "True" else False elif h == "Diag Count 3": dp.diag_count_3 = int(d) elif h == "Diag Count 4": dp.diag_count_4 = int(d) elif h == "Times Programmed Count": dp.times_programmed_count = int(d) elif h == "Early Power Fail Count": dp.early_power_fail_count = int(d) elif h == "Good Battery Reading": dp.good_battery_reading = int(d) elif h == "File System Fatal Error": dp.file_system_fatal_error = True if d == "True" else False elif h == "Diag Count 2": dp.diag_count_2 = int(d) elif h == "Phase A Current": dp.phase_a_current = float(d) elif h == "Phase A Current angle": dp.phase_a_current_angle = float(d) elif h == "ABC PHASE Rotation": dp.abc_phase_rotation = int(d) elif h == "Diagnostic Error (Voltage Deviation)": dp.voltage_deviation = True if d == "True" else False elif h == "Diagnostic Error (Phase Angle Displacement)": dp.phase_angle_displacement = True if d == "True" else False elif h == "Power Outage Count": dp.power_outage_count = int(d) elif h == "SLC Error": dp.slc_error = True if d == "True" else False elif h == "Phase B Voltage": dp.phase_b_voltage = float(d) elif h == "Phase B Voltage angle": dp.phase_b_voltage_angle = float(d) elif h == "Phase C Voltage angle": dp.phase_c_voltage_angle = float(d) elif h == "Phase C Current angle": dp.phase_c_current_angle = float(d) elif h == "Phase A DC Detect": dp.phase_a_dc_detect = float(d) elif h == "Demand Reset Count": dp.demand_reset_count = int(d) elif h == "TOU Schedule Error": dp.tou_schedule_error = True if d == "True" else False elif h == "Reverse Power Flow Error": dp.reverse_power_flow_error = True if d == "True" else False elif h == "Diag 5 Phase B Count": dp.diag_5_phase_b_count = int(d) elif h == "Demand Interval Length": dp.demand_interval_length = int(d) elif h == "Phase B DC Detect": dp.phase_b_dc_detect = float(d) elif h == "Register Full Scale Exceeded Error": dp.register_full_scale_exceeded_error = True if d == "True" else False elif h == "EPF Data Fatal Error": dp.epf_data_fatal_error = True if d == "True" else False elif h == "Phase A Voltage": dp.phase_a_voltage = float(d) elif h == "Phase B Current": dp.phase_b_current = float(d) elif h == "Phase C Current": dp.phase_c_current = float(d) elif h == "Current Battery Reading": dp.current_battery_reading = int(d) elif h == "Demand Threshold Exceeded Error": dp.demand_threshold_exceeded_error = True if d == "True" else False elif h == "Metrology Communications Error": dp.metrology_communications_error = True if d == "True" else False elif h == "RAM Fatal Error": dp.ram_fatal_error = True if d == "True" else False elif h == "Diag 5 Phase A Count": dp.diag_5_phase_a_count = int(d) elif h == "Diag 5 Phase C Count": dp.diag_5_phase_c_count = int(d) elif h == "Current Season": dp.current_season = int(d) elif h == "Phase C DC Detect": dp.phase_c_dc_detect = float(d) elif h == "Days Since Demand Reset": dp.days_since_demand_reset = int(d) elif h == "Days Since Last Test": dp.days_since_last_test = int(d) elif h == "Days On Battery": dp.days_on_battery = int(d) elif h == "Phase Loss Error": dp.phase_loss_error = True if d == "True" else False elif h == "Mass Memory Error": dp.mass_memory_error = True if d == "True" else False elif h == "Diagnostic Error (Cross Phase Flow)": dp.cross_phase_flow = True if d == "True" else False elif h == "Diagnostic Error (Current Waveform Distorsion)": dp.current_waveform_distorsion = True if d == "True" else False elif h == "Phase C Voltage": dp.phase_c_voltage = float(d) elif h == "Service Type Detected": dp.service_type_detected = int(d) elif h == "MCU Flash Fatal Error": dp.mcu_flash_fatal_error = True if d == "True" else False elif h == "Data Flash Fatal Error": dp.data_flash_fatal_error = True if d == "True" else False elif h == "Diag Count 1": dp.diag_count_1 = int(d) elif h == "Diag Count 5": dp.diag_count_5 = int(d) elif h == "Clock Sync Error": dp.clock_sync_error = True if d == "True" else False elif h == "Site Scan Error": dp.site_scan_error = True if d == "True" else False else: print "XXX " + h + " unrecognized" dp.save() return True