コード例 #1
0
    def start(self):
        """
        開始処理
        """

        # confからmodeを取得する
        if (self.host is None or self.host == ''):
            self.host = 'localhost'
        tp_config = TpConfig(self.host, self.slot, self.comm)
        setting = tp_config.get_setting()

        mode = setting['settings']['mode']

        if mode == 'RS232':
            self.__setModeVal(1, 0)
        elif mode == 'RS422':
            self.__setModeVal(1, 1)
        elif mode == 'RS485':
            self.__setModeVal(0, 1)
            # LINE C
            self.io_tcp_client = TcpClient()
            self.io_tcp_client.connect_by_conf(self.host, self.slot, GPIO)
        else:
            raise ValueError('Tibbit #02 Line error!')

        self.tcp_client = TcpClient()
        self.tcp_client.connect_by_conf(self.host, self.slot, self.comm)
コード例 #2
0
    def start(self, callback_recv, callback_recv_dsr):
        """
        開始処理
        """

        # confからmodeを取得する
        if (self.host is None or self.host == ''):
            self.host = 'localhost'
        tp_config = TpConfig(self.host, self.slot, self.comm)
        setting = tp_config.get_setting()

        mode = setting['settings']['mode']

        if mode == 'RS232':
            self.__setModeVal(1, 0)
        elif mode == 'RS422':
            self.__setModeVal(1, 1)
        elif mode == 'RS485':
            self.__setModeVal(0, 1)
        else:
            raise ValueError('Tibbit #02 Line error!')

        self.tcp_client = TcpClient(callback_recv)
        self.tcp_client.connect_by_conf_recv(self.host, self.slot, self.comm)

        # DSR
        slot_num = tpUtils.slot_str_to_int(self.slot)
        slot_num = slot_num + 1
        slot_gpio = tpUtils.slot_int_to_str(slot_num)
        self.gpio_tcp_client = TcpClient(callback_recv_dsr)
        self.gpio_tcp_client.connect_by_conf_recv(self.host, slot_gpio, GPIO)
コード例 #3
0
    def connect_by_conf_recv(self, host, slot, comm):
        """
        設定から読み込み(受信のみの場合)
        """
        if (host is None or host == ''):
            host = 'localhost'

        tp_config = TpConfig(host, slot, comm)
        setting = tp_config.get_setting()
        self.connect(setting['host'], setting['portEvent'])
コード例 #4
0
    def __reset(self):
        """
        初期化
        """
        # Lock
        self.tp00.lock(self.slot)
        try:

            # confからmodeを取得する
            if (self.host is None or self.host == ''):
                self.host = 'localhost'
            tp_config = TpConfig(self.host, self.slot, self.comm)
            setting = tp_config.get_setting()

            _integrationTime = setting['settings']['integrationTime']
            integrationTime = self.TCS34725_INTEGRATIONTIME_2_4MS
            if _integrationTime == '2.4ms':
                integrationTime = self.TCS34725_INTEGRATIONTIME_2_4MS
            elif _integrationTime == '24ms':
                integrationTime = self.TCS34725_INTEGRATIONTIME_24MS
            elif _integrationTime == '50ms':
                integrationTime = self.TCS34725_INTEGRATIONTIME_50MS
            elif _integrationTime == '101ms':
                integrationTime = self.TCS34725_INTEGRATIONTIME_101MS
            elif _integrationTime == '154ms':
                integrationTime = self.TCS34725_INTEGRATIONTIME_154MS
            elif _integrationTime == '700ms':
                integrationTime = self.TCS34725_INTEGRATIONTIME_700MS

            _gain = setting['settings']['gain']
            gain = self.TCS34725_GAIN_4X
            if _gain == '1x':
                gain = self.TCS34725_GAIN_1X
            elif _gain == '4x':
                gain = self.TCS34725_GAIN_4X
            elif _gain == '16x':
                gain = self.TCS34725_GAIN_16X
            elif _gain == '60x':
                gain = self.TCS34725_GAIN_60X

            c = self._readU8(self.TCS34725_ID)

            if c != 0x44:
                raise ValueError('TpgI2cColorSensor init failed.')

            # 設定
            self._set_integration_time(integrationTime)
            self._set_gain(gain)

            # デバイスを有効にする
            self._enable()

        finally:
            # unLock
            self.tp00.unlock(self.slot)
コード例 #5
0
    def __init__(self, settings):
        """
        コンストラクタ
        """

        # 設定の保持
        self.tp_config = TpConfig()

        # 制御用インスタンス
        self.tp_control = TpControl(
            self.tp_config.get_settings(), self.__send_data)

        # TCPサーバー保持用
        self.tcp_server_list = {}
コード例 #6
0
    def __init__(self, settings, connect_flg):
        """
        コンストラクタ
        """

        # TCPサーバー保持用
        self.tcp_server_list = {}

        # 排他ロック確認用
        self.__lockList = []

        # 外部からの接続可否
        self.connect_flg = connect_flg

        # 設定の保持
        self.tp_config = TpConfig()

        # 制御用インスタンス
        self.tp_control = TpControl(self.tp_config.get_settings(),
                                    self.__send_data)
コード例 #7
0
class TpConnect:
    """
    Tibbo-Pi制御.pyとの仲介を行います。
    """
    def __init__(self, settings, connect_flg):
        """
        コンストラクタ
        """

        # TCPサーバー保持用
        self.tcp_server_list = {}

        # 排他ロック確認用
        self.__lockList = []

        # 外部からの接続可否
        self.connect_flg = connect_flg

        # 設定の保持
        self.tp_config = TpConfig()

        # 制御用インスタンス
        self.tp_control = TpControl(self.tp_config.get_settings(),
                                    self.__send_data)

    def start(self):
        """
        設定をもとに、サーバーを複数起動します。
        """

        # 複数起動
        settings = self.tp_config.get_settings()
        for setting in settings:

            # hostがlocalhostのノードのみ起動する(別IPはここでは起動しない)
            if setting['host'] != 'localhost':
                continue

            # 受信用
            if 'port' in setting:
                client_thread = threading.Thread(
                    target=self.__server_thread_event_recv, args=(setting, ))
                client_thread.daemon = True
                client_thread.start()

            # イベントドリブン用
            if 'portEvent' in setting:
                client_thread = threading.Thread(
                    target=self.__server_thread_event_send, args=(setting, ))
                client_thread.daemon = True
                client_thread.start()

    def __server_thread_event_recv(self, setting):
        """
        サーバーを起動します。(リクエスト・リプライ)
        """

        try:

            # TCPサーバー(設定情報を渡す)
            tcp_srv = TcpServer(self.__recv_data, setting)

            # 保持(ポートごと)
            self.tcp_server_list[setting['port']] = tcp_srv

            # 受信待ち
            bind_host = 'localhost'
            if self.connect_flg:
                # 外部も許可
                bind_host = ''
            tcp_srv.recv(bind_host, setting['port'])

        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())

    def __server_thread_event_send(self, setting):
        """
        サーバーを起動します。(リプライ)
        """

        try:

            # TCPサーバー(設定情報を渡す)
            tcp_srv = TcpServer(None, setting)

            # 保持(ポートごと)
            self.tcp_server_list[setting['portEvent']] = tcp_srv

            # 待機
            bind_host = 'localhost'
            if self.connect_flg:
                # 外部も許可
                bind_host = ''
            tcp_srv.recv(bind_host, setting['portEvent'])

        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())

    def __lock(self, rcv_msg):
        """
        クライアントの排他を行う
        """

        try:
            chkLock = json.loads(rcv_msg.decode())
            if 'lock' in chkLock:
                # ロック
                lockCnt = 0
                while True:
                    if not chkLock['lock'] in self.__lockList:
                        break
                    if lockCnt > 40:
                        # 無限に待たず2秒程度で終わらせる
                        break
                    time.sleep(0.05)
                    lockCnt = lockCnt + 1

                self.__lockList.append(chkLock['lock'])
                return True

            elif 'unlock' in chkLock:
                # ロック解除
                try:
                    self.__lockList.remove(chkLock['unlock'])
                except ValueError:
                    pass
                return True

            else:
                pass
        except:
            pass

        return False

    def __recv_data(self, info, rcv_msg):
        """
        TCPのデータが受信された場合、処理を行いデータをSendする(リクエスト・リプライ専用)
        """
        try:
            # 排他ロック確認
            if self.__lock(rcv_msg):
                return

            return self.tp_control.control(info, rcv_msg)

        except tpUtils.TpCheckError as e:
            # トレースは出さず、メッセージのみ
            tpUtils.stderr(str(e.args))
            return "-- FAIL ---"
        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())
            return "-- FAIL ---"

    def __send_data(self, slot, comm, send_msg):
        """
        制御からイベントが発生した場合、TCPにてクライアントにデータを送信します。
        """
        try:

            # スロットと通信方法から送信するportを特定(localhostのみ)
            setting = self.tp_config.get_setting('localhost', slot, comm)
            if setting == None or 'portEvent' not in setting:
                return

            port = setting['portEvent']

            if (port != None and port in self.tcp_server_list):

                # 取得したポートにデータを送信する
                tcp_srv = self.tcp_server_list[port]
                tcp_srv.send(send_msg)

        except tpUtils.TpCheckError as e:
            # トレースは出さず、メッセージのみ
            tpUtils.stderr(str(e.args))
            return "-- FAIL ---"
        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())
コード例 #8
0
class TpConnect:
    """
    Tibbo-Pi制御.pyとの仲介を行います。
    """

    def __init__(self, settings):
        """
        コンストラクタ
        """

        # 設定の保持
        self.tp_config = TpConfig()

        # 制御用インスタンス
        self.tp_control = TpControl(
            self.tp_config.get_settings(), self.__send_data)

        # TCPサーバー保持用
        self.tcp_server_list = {}

    def start(self):
        """
        設定をもとに、サーバーを複数起動します。
        """

        # 複数起動
        settings = self.tp_config.get_settings()
        for setting in settings:

            # hostがlocalhostのノードのみ起動する(別IPはここでは起動しない)
            if setting['host'] != 'localhost':
                continue

            # 受信用
            if 'port' in setting:
                thread.start_new_thread(
                    self.__server_thread_event_recv, (setting,))
            # イベントドリブン用
            if 'portEvent' in setting:
                thread.start_new_thread(
                    self.__server_thread_event_send, (setting,))

    def __server_thread_event_recv(self, setting):
        """
        サーバーを起動します。(リクエスト・リプライ)
        """

        try:

            # TCPサーバー(設定情報を渡す)
            tcp_srv = TcpServer(self.__recv_data, setting)

            # 保持(ポートごと)
            self.tcp_server_list[setting['port']] = tcp_srv

            # 受信待ち(bindのhostは指定しない)
            tcp_srv.recv('', setting['port'])

        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())

    def __server_thread_event_send(self, setting):
        """
        サーバーを起動します。(リプライ)
        """

        try:

            # TCPサーバー(設定情報を渡す)
            tcp_srv = TcpServer(None, setting)

            # 保持(ポートごと)
            self.tcp_server_list[setting['portEvent']] = tcp_srv

            # 待機(bindのhostは指定しない)
            tcp_srv.recv('', setting['portEvent'])

        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())

    def __recv_data(self, info, rcv_msg):
        """
        TCPのデータが受信された場合、処理を行いデータをSendする(リクエスト・リプライ専用)
        """
        try:

            return self.tp_control.control(info, rcv_msg)

        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())
            return "-- FAIL ---"

    def __send_data(self, slot, comm, send_msg):
        """
        制御からイベントが発生した場合、TCPにてクライアントにデータを送信します。
        """
        try:

            # スロットと通信方法から送信するportを特定(localhostのみ)
            setting = self.tp_config.get_setting('localhost', slot, comm)
            if setting == None or 'portEvent' not in setting:
                return

            port = setting['portEvent']

            if (port != None and port in self.tcp_server_list):

                # 取得したポートにデータを送信する
                tcp_srv = self.tcp_server_list[port]
                tcp_srv.send(send_msg)

        except Exception as e:
            # 失敗
            tpUtils.stderr(traceback.format_exc())
コード例 #9
0
                pass
            else:
                if time.time() >= self.__buzzer_stop_time:
                    self.__board.rp_buzzer(0)
                    self.__buzzer_stop_time = 0
                    self.__buzzer_run_flg = False

            # On/Off動作
            if self.__buzzer_run_flg == False:
                pass
            else:
                if self.__buzzer_on_flg:
                    #print('ON')
                    self.__board.rp_buzzer(1)
                    time.sleep(self.__buzzer_time_on)
                    self.__buzzer_on_flg = False
                else:
                    #print('OFF')
                    self.__board.rp_buzzer(0)
                    time.sleep(self.__buzzer_time_off)
                    self.__buzzer_on_flg = True


# main部 -----------------------------------------------------------------

if __name__ == '__main__':

    from tpConfig import TpConfig
    tp_config = TpConfig()
    inter = TpBoardInterface('', '')