예제 #1
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __tva_roof_floor_enable_cb(self, register: Register):

        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value and self.__vcg_tva_roof_floor is None:

            # Floor East (RED and BLUE)
            self.__vcg_tva_roof_floor = ValveControlGroup(\
                name="VCG tva roof floor",
                key="{}.tva_roof_floor".format(self.key),
                controller=self._controller,
                registers=self._registers,
                fw_valves=["cold_in", "cold_out"],
                rev_valves=["hot_in", "hot_out"],
                fw_pumps=["pump"])
            self.__vcg_tva_roof_floor.mode = ValveControlGroupMode.DualSide

            if self.__vcg_tva_roof_floor is not None:
                self.__vcg_tva_roof_floor.init()

        elif not register.value and self.__vcg_tva_roof_floor is not None:
            self.__vcg_tva_roof_floor.shutdown()
            del self.__vcg_tva_roof_floor
예제 #2
0
파일: zone.py 프로젝트: bgerp/ztm
    def __loop2_flowmeter_settings_cb(self, register):

        # Check data type.
        if not register.data_type == "json":
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        if register.value != {} and self.__loop2_flowmeter is None:
            self.__loop2_flowmeter = FlowmetersFactory.create(
                name="Loop 2 flowmeter",
                controller=self._controller,
                vendor=register.value['vendor'],
                model=register.value['model'],
                options=register.value['options'])

            if self.__loop2_flowmeter is not None:
                self.__loop2_flowmeter.init()

                self.__loop2_leak_teat = LeakTest(self.__loop2_flowmeter, 20)
                self.__loop2_leak_teat.on_result(self.__loop2_leaktest_result)

        elif register.value == {} and self.__loop2_flowmeter is not None:
            self.__loop2_flowmeter.shutdown()
            del self.__loop2_flowmeter
            del self.__loop2_leak_teat
예제 #3
0
파일: zone.py 프로젝트: bgerp/ztm
    def __adjust_temp_cb(self, register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        if self.__adjust_temp == register.value:
            return

        # @see https://experta.bg/L/S/122745/m/Fwntindd
        min_temp = 2.5
        max_temp = -2.5

        min_temp_reg = self._registers.by_name("{}.temp_{}.min".format(self.key, self.__identifier))
        if min_temp_reg is not None:
            min_temp = min_temp_reg.value

        max_temp_reg = self._registers.by_name("{}.temp_{}.max".format(self.key, self.__identifier))
        if max_temp_reg is not None:
            max_temp = max_temp_reg.value

        actual_temp = register.value

        if actual_temp < min_temp:
            actual_temp = min_temp

        if actual_temp > max_temp:
            actual_temp = max_temp

        self.__adjust_temp = actual_temp
예제 #4
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __vcg_pool_heating_enable_cb(self, register: Register):

        # Check data type.
        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value and self.__vcg_pool_heating is None:

            # Consumers (RED)
            self.__vcg_pool_heating = ValveControlGroup(
                name="VCG Pool Heating",
                key="{}.vcg_pool_heating".format(self.key),
                controller=self._controller,
                registers=self._registers,
                fw_valves=["valve"],
                fw_pumps=["pump"])
            self.__vcg_pool_heating.mode = ValveControlGroupMode.Proportional

            if self.__vcg_pool_heating is not None:
                self.__vcg_pool_heating.init()

        elif register.value == False and self.__vcg_pool_heating is not None:
            self.__vcg_pool_heating.shutdown()
            del self.__vcg_pool_heating
예제 #5
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __convectors_east_enable_cb(self, register: Register):

        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value and self.__vcg_convectors_east is None:

            # Consumers (RED)
            self.__vcg_convectors_east = ValveControlGroup(
                name="VCG Convectors east",
                key="{}.convectors_east".format(self.key),
                controller=self._controller,
                registers=self._registers,
                fw_valves=["cold_in", "cold_out"],
                rev_valves=["hot_in", "hot_out"],
                fw_pumps=["pump"])
            self.__vcg_convectors_east.mode = ValveControlGroupMode.Proportional

            if self.__vcg_convectors_east is not None:
                self.__vcg_convectors_east.init()

        elif register.value == False and self.__vcg_convectors_east is not None:
            self.__vcg_convectors_east.shutdown()
            del self.__vcg_convectors_east
예제 #6
0
    def __blink_time_cb(self, register):

        # Check data type.
        if not (register.data_type == "int" or register.data_type == "float"):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        self.__blink_timer.expiration_time = register.value
예제 #7
0
    def __enable_err_msg_cb(self, register):

        # Check data type.
        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        self.__enable_err_msg = register.value
예제 #8
0
파일: zone.py 프로젝트: bgerp/ztm
    def __window_closed_input_cb(self, register):

          # Check data type.
        if not register.data_type == "str":
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        self.__window_closed_input = register.value
예제 #9
0
    def __is_empty_timeout_cb(self, register):

        # Check data type.
        if not register.data_type == "int":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        self.__presence_timer.expiration_time = register.value
예제 #10
0
    def __lower_fan_power_gpio_cb(self, register: Register):

        # Check data type.
        if not (register.data_type == "str"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        self.__lower_fan_power_gpio = register.value
예제 #11
0
파일: zone.py 프로젝트: bgerp/ztm
    def __envm_energy_cb(self, register):

        # Check data type.
        if not ((register.data_type == "int") or (register.data_type == "float")):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        # TODO: Get energy mode for the building.
        pass
예제 #12
0
파일: zone.py 프로젝트: bgerp/ztm
    def __thermal_mode_cb(self, register):

        # Check data type.
        if not register.data_type == "int":
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        mode = ThermalMode(register.value)
        self.__thermal_mode.set_state(mode)
예제 #13
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __generators_cooling_calib_cb(self, register: Register):

        # Check data type.
        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value:
            if self.__v_generators_cooling is not None:
                self.__v_generators_cooling.calibrate()
예제 #14
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __underfloor_east_bypass_calib_cb(self, register: Register):

        # Check data type.
        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value:
            if self.__v_underfloor_east_bypass is not None:
                self.__v_underfloor_east_bypass.calibrate()
예제 #15
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __short_green_purple_calib_cb(self, register: Register):

        # Check data type.
        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value:
            if self.__v_short_green_purple is not None:
                self.__v_short_green_purple.calibrate()
예제 #16
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __generators_cooling_pos_cb(self, register: Register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value < 0 or register.value > 100:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if self.__v_generators_cooling is not None:
            self.__v_generators_cooling.target_position = register.value
예제 #17
0
    def __lower_fan_max_cb(self, register: Register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value > 100:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if self.__lower_fan_dev is not None:
            self.__lower_fan_dev.max_speed = register.value
예제 #18
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __short_green_purple_pos_cb(self, register: Register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value < 0 or register.value > 100:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if self.__v_short_green_purple is not None:
            self.__v_short_green_purple.target_position = register.value
예제 #19
0
    def __hp_hot_max_cb(self, register):
        """Heat pump control group hot maximum callback.

        Args:
            register (Register): Register container.
        """

        # Check data type.
        if not register.data_type == "float":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        self.__hot_max = register.value
예제 #20
0
    def __pa_demand_time_cb(self, register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value < 0.0:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if self.__demand_timer is not None:
            self.__demand_timer.expiration_time = register.value
예제 #21
0
파일: zone.py 프로젝트: bgerp/ztm
    def __delta_time_cb(self, register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        # Check value.
        if register.value < 0:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if self.__delta_time != register.value:
            self.__delta_time = register.value
예제 #22
0
파일: ecd.py 프로젝트: bgerp/ztm
    def __underfloor_east_bypass_pos_cb(self, register: Register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value < 0 or register.value > 100:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if self.__v_underfloor_east_bypass is not None:
            self.__v_underfloor_east_bypass.target_position = register.value
예제 #23
0
    def __enable_plugin_cb(self, register):

        # Check data type.
        if not register.data_type == "bool":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        name = register.base_name
        if register.value and name not in self.__plugins:
            self.__plugins[name] = self.__load_plugin(name)
            self.__plugins[name].init()

        elif not register.value and name in self.__plugins:
            self.__plugins[name].shutdown()
            del self.__plugins[name]
예제 #24
0
파일: zone.py 프로젝트: bgerp/ztm
    def __thermal_force_limit_cb(self, register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        # Check value.
        if register.value < 0:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        if register.value > 100:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        self.__thermal_force_limit = register.value
예제 #25
0
    def __hp_index_cb(self, register):
        """Heat pump control group index callback.

        Args:
            register (Register): Register container.
        """

        # Check data type.
        if not register.data_type == "int":
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        if register.value < 0:
            GlobalErrorHandler.log_bad_register_value(self.__logger, register)
            return

        self.__heat_pump_index = register.value
예제 #26
0
    def __target_version_cb(self, register: Register):

        current_version = None
        target_version = None

        target_version_reg = register

        # Check data type of the current version.
        if not target_version_reg.data_type == "json":
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, target_version_reg)
            return

        # Get target version value.
        if target_version_reg.value is not None:
            target_version = target_version_reg.value

        # Check the target version value.
        if target_version == None:
            GlobalErrorHandler.log_bad_register_value(self.__logger, target_version)
            return

        # Get current version register.
        current_version_reg = self.__registers.by_name("sys.software.current_version")

        # Check data type.
        if not ((current_version_reg.data_type == "json")):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, current_version_reg)
            return

        if current_version_reg is not None:
            current_version = current_version_reg.value

        # Check the current version value.
        if current_version == None:
            GlobalErrorHandler.log_bad_register_value(self.__logger, current_version)
            return

        # Update the software.
        software_update(current_version_reg.value, target_version_reg.value)

        # Save the current version.
        self.__app_settings.current_version = target_version_reg.value
        self.__app_settings.save()
예제 #27
0
파일: ac.py 프로젝트: bgerp/ztm
    def __allowed_attendees_cb(self, register):

        # Check data type.
        if not ((register.data_type == "json") or
                (register.data_type == "str")):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        # If the register is str convert it to JSON. (This is fix.)
        content = []
        if register.data_type == "str":
            content = json.loads(register.value)
        else:
            content = register.value

        # Add allowed attendees.
        for key in self.__zones:
            self.__zones[key].add_allowed_attendees(content)
예제 #28
0
    def __ac_setpoint_cb(self, register: Register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(
                self.__logger, register)
            return

        temp_value = register.value

        if temp_value > 100:
            temp_value = 100

        if temp_value < 0:
            temp_value = 0

        self.__set_point_ac = temp_value

        self.__logger.info("Ventilation AC set point: {}".format(
            register.value))
예제 #29
0
파일: zone.py 프로젝트: bgerp/ztm
    def __goal_building_temp_cb(self, register):

        # Check data type.
        if not (register.data_type == "float" or register.data_type == "int"):
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        # @see https://experta.bg/L/S/122745/m/Fwntindd
        min_temp = 18
        max_temp = 26

        actual_temp = register.value

        if actual_temp < min_temp:
            actual_temp = min_temp

        if actual_temp > max_temp:
            actual_temp = max_temp

        if self.__goal_building_temp != actual_temp:
            self.__goal_building_temp = actual_temp
예제 #30
0
파일: zone.py 프로젝트: bgerp/ztm
    def __loop2_valve_settings_cb(self, register):

        # Check data type.
        if not register.data_type == "json":
            GlobalErrorHandler.log_bad_register_data_type(self.__logger, register)
            return

        if register.value != {} and self.__loop2_valve_dev is None:

            self.__loop2_valve_dev = ValveFactory.create(
                name="Loop 2 valve",
                controller=self._controller,
                vendor=register.value['vendor'],
                model=register.value['model'],
                options=register.value['options'])

            if self.__loop2_valve_dev is not None:
                self.__loop2_valve_dev.init()

        elif register.value == {} and self.__loop2_valve_dev is not None:
            self.__loop2_valve_dev.shutdown()
            del self.__loop2_valve_dev