From 9b7769f279614a7b4fb3787c448b70ceaf471dff Mon Sep 17 00:00:00 2001 From: peterlu14 Date: Wed, 10 Aug 2022 16:14:43 +0800 Subject: [PATCH] [update] add new function api --- main.py | 38 ++++++++++++++++++++++++++++++++------ mqtt.py | 9 +++++---- requests.py | 29 ++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/main.py b/main.py index b6fef02..7c8262d 100644 --- a/main.py +++ b/main.py @@ -10,22 +10,29 @@ from requests import Requests from mqtt import MqttThread class Main(): - def __init__(self, controller_id = 'b8:27:eb:0c:d3:11', mqtt_ip = '192.168.5.53') -> None: + def __init__(self, controller_id = 'b8:27:eb:dd:f4:28', mqtt_ip = '192.168.5.240') -> None: + # setup devicemanager & mqtt thread self._deviceManager = DeviceManager() self._mqttThread = MqttThread(self, controller_id, mqtt_ip, 1883, 'test') self._mqttThread.run() + # create requests instance self._mqttRequest = Requests(self._mqttThread) - self._mqttRequest.get_device() + + # hardware scan + self._mqttRequest.hardware_scan() + # self._mqttRequest.hardware_device() + # self._mqttRequest.get_device() + # callback func for get_device_info_all def get_device_info_all(self, device: str) -> str: deviceDict = json.loads(device) # until get device info self._deviceManager.set_device(deviceDict) # instruction example 1 - # self._mqttRequest.device_parameter_array_set(self._deviceManager.get_mac_address(), 'BLE_WRITE', '040005') - # self._mqttRequest.device_instruction_send(self._deviceManager.get_mac_address(), 'ble_instru_send') + self._mqttRequest.device_parameter_array_set(self._deviceManager.get_mac_address(), 'BLE_WRITE', '040005') + self._mqttRequest.device_instruction_send(self._deviceManager.get_mac_address(), 'ble_instru_send') # instruction example 2 # self._mqttRequest.device_parameter_array_set(self._deviceManager.get_mac_address(), 'BLE_WRITE', '01') @@ -33,15 +40,34 @@ class Main(): # self._mqttRequest.device_parameter_get(self._deviceManager.get_mac_address(), 'ADC_VALUE_I') #instruction example 3 - self._mqttRequest.device_parameter_set(self._deviceManager.get_mac_address(), 'MODE', 4) - self._mqttRequest.device_instruction_send(self._deviceManager.get_mac_address(), 'start') + # self._mqttRequest.device_parameter_set(self._deviceManager.get_mac_address(), 'MODE', 4) + # self._mqttRequest.device_instruction_send(self._deviceManager.get_mac_address(), 'start') + # callback func for device_parameter_value def device_parameter_value(self, data: str) -> None: dataDict = json.loads(data) print(dataDict) if dataDict['data'].get('ADC_VALUE_I') is not None: value = format(dataDict['data']['ADC_VALUE_I'], '040x') print(value) + + # callback func for hardware_scan + def hardware_scan(self): + self._mqttRequest.hardware_device() + + # callback func for hardware_device + def hardware_device(self, message): + ret = json.loads(message) + device = ret['data'][0] + if device['status'] != 'connected': + self._mqttRequest.hardware_device_connect(device['device_name'], device['device_address'], device['serial_number']) + if device['status'] == 'connected': + self._mqttRequest.get_device() + + # callback func for hardware_device_connect + def hardware_device_connect(self, message): + self._mqttRequest.get_device() + if __name__ == '__main__': # if len(sys.argv) < 3: diff --git a/mqtt.py b/mqtt.py index db7ab73..a55188c 100644 --- a/mqtt.py +++ b/mqtt.py @@ -51,8 +51,9 @@ class MqttThread(): def on_connect(self, client: mqtt.Client, user_data, flags, rc: int): topic = self.__controller_ID + '_user' - self._mqtt_client.subscribe(self.__controller_ID + '/+/+') - self._mqtt_client.subscribe(self.__controller_ID + '/data_server/device_data_stream/+/+') + self._mqtt_client.subscribe('#') + # self._mqtt_client.subscribe(self.__controller_ID + '/+/+') + # self._mqtt_client.subscribe(self.__controller_ID + '/data_server/device_data_stream/+/+') self._connected = True def on_disconnect(self, client: mqtt.Client, user_data, rc): @@ -72,12 +73,12 @@ class MqttThread(): def on_message(self, client: mqtt.Client, user_data, message): topic = message.topic.split('/')[1] + payload = None try: payload = message.payload.decode('utf-8') - print(message.topic, payload) + print('callback from', topic, message.topic, payload) except: print('error') - func = getattr(self._handler, topic, None) if func != None: return func(payload) diff --git a/requests.py b/requests.py index 604e4cb..464bda6 100644 --- a/requests.py +++ b/requests.py @@ -8,8 +8,8 @@ class Requests(): def get_device(self) -> None: self._mqtt_client.publish({ 'header': 'get_device_info_all/0' - }, True) - return + }) + return def device_parameter_array_set(self, device: str, name: str, data: str) -> None: dataArray = [0 for i in range(16)] @@ -51,4 +51,27 @@ class Requests(): self._mqtt_client.publish({ 'header': 'device_instruction/0', 'device': device, - }) \ No newline at end of file + }) + + def hardware_scan(self) -> None: + self._mqtt_client.publish({ + 'header': 'hardware_scan/0', + }) + + def hardware_device(self) -> None: + self._mqtt_client.publish({ + 'header': 'hardware_device/0', + }) + + def hardware_device_connect(self, device_name, device_address, serial_number) -> None: + self._mqtt_client.publish({ + 'header': 'hardware_device_connect/0', + 'content': { + 'device_name': device_name, + 'device_address': self.mac_tuple_to_str(device_address), + 'serial_number': serial_number + } + }) + + def mac_tuple_to_str(self, mac_array): + return ':'.join('{:02x}'.format(b) for b in mac_array) \ No newline at end of file