Setelah membuat perangkat, Anda perlu mendefinisikan model Thing Specification Language (TSL) untuk produk tersebut. Hal ini memungkinkan Anda menggunakan model TSL untuk berkomunikasi dengan platform AEP China Telecom. Format data model TSL Alibaba Cloud berbeda dari format data model TSL platform AEP China Telecom. Oleh karena itu, Anda harus mengonversi format data di konsol IoT Platform. Dalam contoh ini, skrip Python digunakan untuk mengonversi format data.
Prosedur
Buka halaman Instance Details dari Exclusive instance di konsol IoT Platform. Di panel navigasi sebelah kiri, pilih . Pada halaman Devices, klik View di kolom Actions untuk perangkat gateway 15008261001. Pada halaman Device Details, klik Device Log. Pada tab Device Log, klik View.
Pada tab Cloud run log, klik View di kolom Actions untuk pesan yang dikirimkan dari perangkat ke IoT Platform.
Pilih Hex dari daftar drop-down Content, klik Copy, dan simpan konten ke server lokal. Dengan cara ini, Anda dapat menggunakan skrip penguraian data untuk memverifikasi konten.
Di panel navigasi sebelah kiri, pilih . Pada halaman Products, klik nama produk NBProduct1. Pada halaman detail produk, klik Message Analysis. Pada tab Message Analysis, pilih Python 2.7 dari daftar drop-down Script Language. Di bagian Edit Script, hapus kode asli lalu salin dan tempel kode skrip berikut ke dalam bagian tersebut.
Skrip ini hanya berlaku untuk contoh ini. Anda dapat memodifikasi skrip sesuai dengan model TSL Anda. Untuk informasi lebih lanjut, lihat Kirimkan skrip untuk mengurai data TSL.
# -*- coding: UTF-8 -*- # Template berikut disediakan berdasarkan produk Alink. Anda dapat menulis skrip berdasarkan template. # Mengonversi data yang dikirim oleh perangkat ke topik kustom menjadi data JSON ketika perangkat mengirimkan data ke IoT Platform. * topic: parameter input yang menentukan topik ke mana perangkat mengirim pesan. Nilainya adalah string. # rawData: parameter input. Nilainya adalah daftar bilangan bulat yang tidak boleh kosong. # jsonObj: parameter output. Nilainya adalah objek JSON yang menunjukkan kamus. def transform_payload(topic, rawData): jsonObj = {} return jsonObj import json import common_util ALINK_PROP_REPORT_METHOD = 'thing.event.property.post' COMMAND_REPORT = 0x00 # Kirim properti. COMMAND_SET = 0x01 # Konfigurasikan properti. COMMAND_REPORT_REPLY = 0x02 # Kembalikan hasil pengiriman data. COMMAND_SET_REPLY = 0x03 # Kembalikan hasil konfigurasi properti. COMMAD_UNKOWN = 0xff # Perintah tidak dikenal. ALINK_PROP_SET_METHOD = 'thing.service.property.set' # Topik untuk IoT Platform mengirimkan perintah pengaturan properti ke perangkat. ALINK_PROP_SET_REPLY_METHOD = 'thing.service.property.set' # Topik untuk perangkat mengirimkan hasil pengaturan properti ke IoT Platform. SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update' # Tentukan topik kustom berikut: /user/update. SELF_DEFINE_TOPIC_ERROR_FLAG = '/user/update/error' # Tentukan topik kustom berikut: /user/update/error. # Mengonversi data kustom perangkat menjadi data Alink ketika perangkat mengirimkan data ke IoT Platform. # rawData: parameter input. Nilainya adalah daftar bilangan bulat yang tidak boleh kosong. # jsonObj: parameter output. Nilainya adalah objek JSON yang menunjukkan kamus dan tidak boleh kosong. def raw_data_to_protocol(rawData): output = [] for iters in rawData: output.append(chr(iters)) inStr = ''.join(output) try: json_object = json.loads(inStr) # matched_out = json_object['notifyType'] deviceId = json_object['deviceId'] water_consumption = json_object['payload'] running_data = water_consumption['water_consumption'] # gatewayId = json_object['gatewayId'] # service = json_object['service'] # data_object = service['data'] # imei = data_object['IMEI'] # MeasureValue = json_object['MeasureValue'] # Temperature = json_object['Temperature'] # BatteryVoltage = data_object['BatteryVoltage'] except ValueError, e: MeasureValue = 'err' # imei = 'err' jsonMap = {} jsonMap['method'] = ALINK_PROP_REPORT_METHOD jsonMap['version'] = '1.0' jsonMap['id'] = '123' params = {} # params['IMEI'] = imei params['deviceId'] = deviceId params['water_consumption']= running_data # params['gatewayId'] = gatewayId # params['MeasureValue'] = MeasureValue # params['BatteryVoltage'] = BatteryVoltage # params['Temperature'] = Temperature jsonMap['params'] = params return jsonMap # Mengonversi bilangan bulat 8-bit menjadi larik byte. def int_8_to_byte(value): t_value = '%02X' % value if len(t_value) % 2 != 0: t_value += '0' return hex_string_to_byte_array(t_value) # Mengonversi bilangan bulat 32-bit menjadi larik byte. def int_32_to_byte(value): t_value = '%08X' % value if len(t_value) % 2 != 0: t_value += '0' return hex_string_to_byte_array(t_value) # Mengonversi bilangan bulat 16-bit menjadi larik byte. def int_16_to_byte(value): t_value = '%04X' % value if len(t_value) % 2 != 0: t_value += '0' return hex_string_to_byte_array(t_value) # Mengonversi string heksadesimal menjadi larik byte. def hex_string_to_byte_array(str_value): if len(str_value) % 2 != 0: return None cycle = len(str_value) / 2 pos = 0 result = [] for i in range(0, cycle, 1): temp_str_value = str_value[pos:pos + 2] temp_int_value = int(temp_str_value, base=16) result.append(temp_int_value) pos += 2 return result # Mengonversi data Alink ke format data yang dapat dikenali oleh perangkat sebelum data dikirimkan ke perangkat dari IoT Platform. # jsonData: parameter input. Nilainya adalah objek JSON yang menunjukkan kamus dan tidak boleh dibiarkan kosong. # rawData: parameter output. Nilainya adalah larik bilangan bulat dalam rentang nilai [0,255]. Elemen larik tidak boleh kosong. def protocol_to_raw_data(myjson): payload_array = [] in_params = myjson.get("params") test = in_params.get('test', None) method = myjson.get('method') print(method); if method == ALINK_PROP_SET_METHOD: params = myjson.get('params') params = {} params['test'] = test content= {} content['params']=params content['serviceIdentifier'] = 'test' mystr = json.dumps(content) for ch in mystr: print(ch) payload_array = payload_array + int_8_to_byte(ord(ch)) elif method == ALINK_PROP_REPORT_METHOD: code = json.get('code', None) payload_array = payload_array + int_8_to_byte(COMMAND_REPORT_REPLY) payload_array = payload_array + int_32_to_byte(int(id)) payload_array = payload_array + int_8_to_byte(code) else: code = json.get('code') payload_array = payload_array + int_8_to_byte(COMMAD_UNKOWN) payload_array = payload_array + int_32_to_byte(int(id)) payload_array = payload_array + int_8_to_byte(code) return payload_arrayPada tab Input Simulation, pilih Upstreamed Device Data dari Simulation Type, tempelkan content yang disimpan pada Langkah 3 ke editor, lalu klik Run.
Setelah memvalidasi skrip, klik Submit untuk mengirimkan skrip ke IoT Platform.
Buka platform AEP China Telecom. Pada halaman AEP-Online Debugging untuk perangkat nbdevice, kirimkan data penggunaan air.
Buka halaman Instance Details dari Exclusive instance di konsol IoT Platform. Di panel navigasi sebelah kiri, pilih . Pada halaman Devices, klik View di kolom Actions untuk perangkat 15008261001.
Pada halaman detail perangkat, pilih . Tab Status menampilkan data yang telah dikonversi, dengan format yang sesuai dengan format data model TSL IoT Platform.
Apa yang harus dilakukan selanjutnya
Uji komunikasi downstream antara IoT Platform dan platform AEP China Telecom