import threading from script.simulator.smart_box import SimulatorSmartBox class WFLDevice(SimulatorSmartBox): def __init__(self, **kwargs): super(WFLDevice, self).__init__(**kwargs) def do_message(self, cmd, payload): # type: (int, dict)->None if cmd == 210: self._do_210_message(payload) else: super(WFLDevice, self).do_message(cmd, payload) def _do_210_message(self, payload): funCode = payload["data"]["fun_code"] print(funCode) message = getattr(self, "response_{:02}_message".format(funCode), self.response_default_message) return self.publish_message(cmd=210, payload=message) @property def response_default_message(self): return { "IMEI": self.imei, "rst": 1, "cmd": 210, } @property def response_01_message(self): """""" return { "IMEI": self.imei, "rst": 0, "cmd": 210, "data": { "port_stat": { "1": "idle", "2": "link", "3": "idle", "4": "idle", "5": "idle", "6": "idle", "7": "idle", "8": "idle", "9": "idle", "10": "idle", } } } @property def response_12_message(self): return { "IMEI": "861714054531706", "cmd": 210, "data": { "auto_close": True, "chrmt": "TIME", "float_charge": {"check_time": 10, "float_time": 120, "float_watt": 30}, "fun_code": 12, "mach_max_temp": 90, "mach_max_volt": 260, "mach_max_watt": 4000, "noload_check": {"time": 30, "watt": 5}, "port_max_ampr": 6000, "port_max_watt": 350, "pre_pwr_time": 600, "price": {"ELEC": 1000000, "TIME": [[300, 14400], [400, 10800], [500, 8640], [600, 7200]]}, "volumes": {"00:00-06:59": 2, "20:00-23:59": 2, "default": 7} }, "rst": 0, } @property def response_17_message(self): return { "IMEI": "861714054531706", "cmd": 210, "data": { "card_cur_key": "VEW+Ib0ZPke0i6kH0tJHdA==", "card_curmode": "NORMAL", "card_disable": False, "card_oncefee": 100, "card_refund": True, "card_timeout": 10, "fun_code": 17 }, "rst": 0, } @property def response_08_message(self): return { "IMEI": "861714054531706", "cmd": 210, "data": {"fun_code": 8, "total_card": 0}, "rst": 0, } @property def device_extend_info(self): return { "driverCode": "100273", "driverVersion": "v1.0.0" } class myThread(threading.Thread): def __init__(self, mqttServer, mqttPort, mqttUser, mqttPwd, imei): threading.Thread.__init__(self) self.mqtt_server = mqttServer self.mqtt_port = mqttPort self.mqtt_user = mqttUser self.mqtt_pwd = mqttPwd self.imei = imei self.setDaemon(False) def run(self): WFLDevice( mqtt_server=self.mqtt_server, mqtt_port=self.mqtt_port, mqtt_user=self.mqtt_user, mqtt_pwd=self.mqtt_pwd, imei=self.imei ).start() if __name__ == "__main__": imei_list = { "MYCD": "MYCD_IMEI" } mqtt_server = "211.159.224.10" mqtt_port = 1883 mqtt_user = "20160528@vivestone" mqtt_pwd = "j429QXqI5CTv" threads = [] for _imei in imei_list.values(): thread = myThread(mqtt_server, mqtt_port, mqtt_user, mqtt_pwd, _imei) thread.start() threads.append(thread)