Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pickle
- import os.path
- class IrrigationProgram:
- program = 0
- units = 0
- water_before_1 = 0
- water_before_2 = 0
- water_after_1 = 0
- water_after_2 = 0
- water_total_1 = 0
- water_total_2 = 0
- kicks = 0
- fertilization_program = 0
- condition_program = 0
- time_start_1 = 0
- time_start_2 = 0
- time_between_1 = 0
- time_between_2 = 0
- days = ""
- valves = ""
- class FertilizationProgram:
- program = 0
- values_1 = 0.0
- values_2 = 0.0
- values_3 = 0.0
- values_4 = 0.0
- values_5 = 0.0
- values_6 = 0.0
- values_7 = 0.0
- values_8 = 0.0
- ec = 0.0
- ph = 0.0
- class InyectionProgram:
- program = 1
- flow = 600
- time_on = 10
- litres_pulse = 100
- max_deviation = 70
- simulator = True
- class AlarmConfig:
- delay_alarm_flow_secs = 0
- deviation_warning_max_error_flow = 0
- function_alarm_no_water = 0
- over_dangerous_flow_percentage = 0
- function_alarm_dangerous_flow = 0
- max_seconds_between_water_pulses = 0
- # Config alarmas de presion
- delay_alarm_low_pressure_secs = 0
- level_alarm_low_pressure_kg = 0
- delay_alarm_high_pressure_kg = 0
- level_alarm_high_pressure_kg = 0
- function_alarm_high_pressure = 0
- # Config alarms de fertilizacion
- function_alarm_no_fertilization = 0
- pulses_needs_fertilizer = 0
- function_alarm_fertilizer_discontinued = 0
- pulses_fertilizer_no_control = 0
- # Config alarms de EC y pH
- max_diff_warning_error_ec = 0
- max_diff_warning_error_ph = 0
- delay_alarms_ec_ph_secs = 0
- function_alarm_ec_ph_dangerous = 0
- max_deviation_over_ec = 0
- max_deviation_under_ph = 0
- delay_alarm_ec_dangerous_secs = 0
- delay_alarm_ph_dangerous_secs = 0
- # config params EC
- delay_secs_if_diff_ec_more_1 = 0
- delay_secs_if_diff_ec_more_05 = 0
- delay_secs_if_diff_ec_more_03 = 0
- coefficient_correction_ec_more_1 = 0
- coefficient_correction_ec_more_05 = 0
- coefficient_correction_ec_more_03 = 0
- secs_first_ec_correction = 0
- # config params ph
- delay_secs_if_diff_ph_more_1 = 0
- delay_secs_if_diff_ph_more_05 = 0
- delay_secs_if_diff_ph_more_03 = 0
- coefficient_correction_ph_more_1 = 0
- coefficient_correction_ph_more_05 = 0
- coefficient_correction_ph_more_03 = 0
- secs_first_ph_correction = 0
- class ControllerState:
- last_update = 0
- allIrrigation = dict()
- allFertilization = dict()
- allInyection = dict()
- username = None
- password = None
- alarm_config = AlarmConfig()
- def load_from_file(path):
- if os.path.isfile(path):
- with open(path, 'rb') as in_file:
- return(pickle.load(in_file))
- def load_from_json(self, json):
- self.last_update = int(json['update'])
- for fert in json["fertilizer_prog"]:
- fertProg = FertilizationProgram()
- fertProg.program = fert["program"]
- fertProg.ec = fert["ec"]
- fertProg.ph = fert["ph"]
- fertProg.values_1 = fert["value_1"]
- fertProg.values_2 = fert["value_2"]
- fertProg.values_3 = fert["value_3"]
- fertProg.values_4 = fert["value_4"]
- fertProg.values_5 = fert["value_5"]
- fertProg.values_6 = fert["value_6"]
- fertProg.values_7 = fert["value_7"]
- fertProg.values_8 = fert["value_8"]
- self.allFertilization[fertProg.program] = fertProg
- for irr in json["irrigation_prog"]:
- irrProg = IrrigationProgram()
- irrProg.program = irr["program"]
- irrProg.units = irr["units"]
- irrProg.water_before_1 = irr["water_before_1"]
- irrProg.water_before_2 = irr["water_before_2"]
- irrProg.water_after_1 = irr["water_after_1"]
- irrProg.water_after_2 = irr["water_after_2"]
- irrProg.water_total_1 = irr["water_total_1"]
- irrProg.water_total_2 = irr["water_total_2"]
- irrProg.kicks = irr["kicks"]
- irrProg.fertilization_program = irr["fertilization_program"]
- irrProg.condition_program = irr["condition_program"]
- irrProg.time_start_1 = irr["time_start_1"]
- irrProg.time_start_2 = irr["time_start_2"]
- irrProg.time_between_1 = irr["time_between_1"]
- irrProg.time_between_2 = irr["time_between_2"]
- irrProg.valves = irr["valves"]
- irrProg.days = irr["days"]
- self.allIrrigation[irrProg.program] = irrProg
- # TODO valves
- for iny in json["inyection_prog"]:
- inyProg = InyectionProgram()
- inyProg.program = iny["program"]
- inyProg.flow = iny["flow"]
- inyProg.time_on = iny["time_on"]
- inyProg.litres_pulse = iny["litres_pulse"]
- inyProg.max_deviation = iny["max_deviation"]
- inyProg.simulator = iny["simulator"]
- self.allInyection[inyProg.program] = inyProg
- if "alarm_config" in json["alarm_config"]:
- json_alarm = json["alarm_config"]
- alarm_config.delay_alarm_flow_secs = json_alarm["delay_alarm_flow_secs"]
- alarm_config.deviation_warning_max_error_flow = json_alarm["deviation_warning_max_error_flow"]
- alarm_config.function_alarm_no_water = json_alarm["function_alarm_no_water"]
- alarm_config.over_dangerous_flow_percentage = json_alarm["over_dangerous_flow_percentage"]
- alarm_config.function_alarm_dangerous_flow = json_alarm["function_alarm_dangerous_flow"]
- alarm_config.max_seconds_between_water_pulses = json_alarm["max_seconds_between_water_pulses"]
- alarm_config.delay_alarm_low_pressure_secs = json_alarm["delay_alarm_low_pressure_secs"]
- alarm_config.level_alarm_low_pressure_kg = json_alarm["level_alarm_low_pressure_kg"]
- alarm_config.delay_alarm_high_pressure_kg = json_alarm["delay_alarm_high_pressure_kg"]
- alarm_config.level_alarm_high_pressure_kg = json_alarm["level_alarm_high_pressure_kg"]
- alarm_config.function_alarm_high_pressure = json_alarm["function_alarm_high_pressure"]
- alarm_config.function_alarm_no_fertilization = json_alarm["function_alarm_no_fertilization"]
- alarm_config.pulses_needs_fertilizer = json_alarm["pulses_needs_fertilizer"]
- alarm_config.function_alarm_fertilizer_discontinued = json_alarm["function_alarm_fertilizer_discontinued"]
- alarm_config.pulses_fertilizer_no_control = json_alarm["pulses_fertilizer_no_control"]
- alarm_config.max_diff_warning_error_ec = json_alarm["max_diff_warning_error_ec"]
- alarm_config.max_diff_warning_error_ph = json_alarm["max_diff_warning_error_ph"]
- alarm_config.delay_alarms_ec_ph_secs = json_alarm["delay_alarms_ec_ph_secs"]
- alarm_config.function_alarm_ec_ph_dangerous = json_alarm["function_alarm_ec_ph_dangerous"]
- alarm_config.max_deviation_over_ec = json_alarm["max_deviation_over_ec"]
- alarm_config.max_deviation_under_ph = json_alarm["max_deviation_under_ph"]
- alarm_config.delay_alarm_ec_dangerous_secs = json_alarm["delay_alarm_ec_dangerous_secs"]
- alarm_config.delay_alarm_ph_dangerous_secs = json_alarm["delay_alarm_ph_dangerous_secs"]
- alarm_config.delay_secs_if_diff_ec_more_1 = json_alarm["delay_secs_if_diff_ec_more_1"]
- alarm_config.delay_secs_if_diff_ec_more_05 = json_alarm["delay_secs_if_diff_ec_more_05"]
- alarm_config.delay_secs_if_diff_ec_more_03 = json_alarm["delay_secs_if_diff_ec_more_03"]
- alarm_config.coefficient_correction_ec_more_1 = json_alarm["coefficient_correction_ec_more_1"]
- alarm_config.coefficient_correction_ec_more_05 = json_alarm["coefficient_correction_ec_more_05"]
- alarm_config.coefficient_correction_ec_more_03 = json_alarm["coefficient_correction_ec_more_03"]
- alarm_config.secs_first_ec_correction = json_alarm["secs_first_ec_correction"]
- alarm_config.delay_secs_if_diff_ph_more_1 = json_alarm["delay_secs_if_diff_ph_more_1"]
- alarm_config.delay_secs_if_diff_ph_more_05 = json_alarm["delay_secs_if_diff_ph_more_05"]
- alarm_config.delay_secs_if_diff_ph_more_03 = json_alarm["delay_secs_if_diff_ph_more_03"]
- alarm_config.coefficient_correction_ph_more_1 = json_alarm["coefficient_correction_ph_more_1"]
- alarm_config.coefficient_correction_ph_more_05 = json_alarm["coefficient_correction_ph_more_05"]
- alarm_config.coefficient_correction_ph_more_03 = json_alarm["coefficient_correction_ph_more_03"]
- alarm_config.secs_first_ph_correction = json_alarm["secs_first_ph_correction"]
- def save_to_file(self, filename):
- pickle.dumps(self)
- with open(filename, 'wb') as out_file:
- pickle.dump(self, out_file)
- def __eq__(self, other):
- if self.last_update == other.last_update and\
- self.allInyection == other.allInyection and\
- self.allFertilization == other.allFertilization and\
- self.allIrrigation == other.allIrrigation:
- return True
- else:
- return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement