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)
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)
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'])
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)
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 __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)
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())
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())
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('', '')