| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- const util = require("../../../utils/util");
- const datagramHelp = require("../../../utils/datagramHelp")
- var app = getApp();
- var task_timer;
- Page({
- data: {
- devices: {
- deviceId: '',
- serviceId: '',
- characteristicId: '',
- connectedBluetoothName: ''
- },
- deviceConnected: true,
- statusInfo: {
- rtu_code: '',
- datagram_idx: '',
- collect_time: '',
- acc_rain: '',
- fiveMinute_rain: '',
- hour_rain: '',
- weater_level: '',
- power_v: '',
- rtu_ver: '',
- rtu_uuid: '',
- bt_v: '',
- rtu_rssi: '',
- rtu_temperature: '',
- lua_ver: ''
- },
- baseInfo: {
- rtu_code: '',
- ip1: '',
- ip2: '',
- ip3: '',
- ip4: '',
- rtu_work_model: '',
- rtu_kind: '',
- datagram_idx: '',
- collect_time: ''
- },
- clockInfo: {
- rtu_code: '',
- datagram_idx: '',
- collect_time: ''
- },
- runInfo: {
- rtu_code: '',
- datagram_idx: '',
- collect_time: '',
- collect_interval: '',
- water_level_base_point: '',
- water_level_correct_point: ''
- },
- datagramBuff: '',
- datagramCache: [],
- trySendCount: 0,
- datagramIndex: 0,
- rtu_kind_code: ['P', 'H', 'K', 'Z', 'D', 'T', 'M', 'G', 'Q', 'I', 'O'],
- rtu_kind_name: ['P(降水)', 'H(河道)', 'K(水库/湖泊)', 'Z(闸坝)', 'D(泵站)', 'T(潮汐)', 'M(墒情)', 'G(地下水)', 'Q(水质)', 'I(取水口)', 'O(排水口)']
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- console.log('bluebooth main page load ', '**********************************************')
- var that = this;
- var deviceId = options.deviceId;
- var serviceId = options.serviceId;
- var characteristicId = options.characteristicId;
- var connectedBluetoothName = options.connectedBluetoothName;
- var devices = {}
- devices['deviceId'] = deviceId;
- devices['serviceId'] = serviceId;
- devices['characteristicId'] = characteristicId;
- devices['connectedBluetoothName'] = connectedBluetoothName;
- this.setData({
- devices: devices
- })
- wx.setNavigationBarTitle({
- title: this.data.devices.name,
- })
- // if (null != deviceId && deviceId.length > 0 && null != serviceId && serviceId.length > 0 && null != characteristicId && characteristicId.length > //0) {
- // var devices = {}
- // devices['deviceId'] = deviceId;
- // devices['serviceId'] = serviceId;
- // devices['characteristicId'] = characteristicId;
- // devices['connectedBluetoothName'] = connectedBluetoothName;
- // this.setData({
- // devices: devices
- // })
- // wx.setNavigationBarTitle({
- // title: this.data.devices.connectedBluetoothName,
- // })
- task_timer = undefined;
- this.setData({
- trySendCount: 0,
- datagramIndex: 0
- })
- this.getRtuVersion();
- this.getRtuBaseSetting();
- this.getRtuRunSetting();
- if (this.data.datagramCache.length > 0) {
- let datagram = this.data.datagramCache[this.data.datagramIndex];
- this.sendDatagramToRtu(datagram);
- let index = this.data.datagramIndex + 1;
- if (this.data.datagramCache.length == index) {
- index = 0;
- }
- let count = this.data.trySendCount + 1;
- this.setData({
- datagramIndex: index,
- trySendCount: count
- })
- }
- // wx.onBLEConnectionStateChange(function (res) {
- // // 该方法回调中可以用于处理连接意外断开等异常情况
- // console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`)
- // if (res.deviceId == that.data.devices.deviceId) {
- // if (!res.connected) {
- // that.setData({
- // deviceConnected: false
- // })
- // wx.showToast({
- // title: '蓝牙连接断开',
- // icon: 'none',
- // duration: 2000
- // })
- // }
- // }
- // })
- },
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
- console.log('bluebooth main page onHide ', '**********************************************')
- this.cancelTime();
- },
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
- console.log('bluebooth main page onUnload ', '**********************************************')
- this.cancelTime();
- this.closeBLEConnection();
- },
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
- console.log('bluebooth main page onShow ', '**********************************************')
- this.timeCallback();
- },
- closeBLEConnection() {
- if (this.data.devices.deviceId.length > 0) {
- var id = this.data.devices.deviceId;
- wx.closeBLEConnection({
- deviceId: id,
- success(res) {
- console.log(res)
- }
- })
- }
- },
- toRtuStatus: function () {
- this.cancelTime();
- wx.navigateTo({
- url: '/pages/bluetooth/info/bluetoothInfo?connectedBluetoothName=' + this.data.devices.connectedBluetoothName + '&deviceId=' + this.data.devices.deviceId + '&serviceId=' + this.data.devices.serviceId + '&characteristicId=' + this.data.devices.characteristicId,
- })
- },
- toRunSetting: function () {
- this.cancelTime();
- wx.navigateTo({
- url: '/pages/bluetooth/runSetting/bluetoothRunSetting?connectedBluetoothName=' + this.data.devices.connectedBluetoothName + '&deviceId=' + this.data.devices.deviceId + '&serviceId=' + this.data.devices.serviceId + '&characteristicId=' + this.data.devices.characteristicId,
- })
- },
- toBaseSetting: function () {
- this.cancelTime();
- wx.navigateTo({
- url: '/pages/bluetooth/baseSetting/bluetoothBaseSetting?connectedBluetoothName=' + this.data.devices.connectedBluetoothName + '&deviceId=' + this.data.devices.deviceId + '&serviceId=' + this.data.devices.serviceId + '&characteristicId=' + this.data.devices.characteristicId,
- })
- },
- toClockSetting: function () {
- this.cancelTime();
- wx.navigateTo({
- url: '/pages/bluetooth/clock/bluetoothClock?connectedBluetoothName=' + this.data.devices.connectedBluetoothName + '&deviceId=' + this.data.devices.deviceId + '&serviceId=' + this.data.devices.serviceId + '&characteristicId=' + this.data.devices.characteristicId,
- })
- },
- getRtuVersion() {
- let datagram = datagramHelp.datagram_45();
- let cache = this.data.datagramCache;
- cache.push(datagram);
- },
- getRtuStatus() {
- var datagram = datagramHelp.datagram_f7();
- let cache = this.data.datagramCache;
- cache.push(datagram);
- },
- getRtuClock() {
- let datagram = datagramHelp.datagram_51();
- let cache = this.data.datagramCache;
- cache.push(datagram);
- },
- getRtuBaseSetting() {
- let datagram = datagramHelp.datagram_41();
- let cache = this.data.datagramCache;
- cache.push(datagram);
- },
- getRtuRunSetting() {
- let datagram = datagramHelp.datagram_43();
- let cache = this.data.datagramCache;
- cache.push(datagram);
- },
- pushDatagramBuff(datagram) {
- let tmpdatagramBuff = this.data.datagramBuff;
- if (tmpdatagramBuff.length > 0) {
- tmpdatagramBuff = tmpdatagramBuff + datagram;
- } else {
- tmpdatagramBuff = datagram;
- }
- this.setData({
- datagramBuff: tmpdatagramBuff
- })
- this.processDatagram();
- this.setData({
- trySendCount: 0
- })
- },
- processDatagram() {
- let datagram = this.data.datagramBuff;
- if (datagram.length > 0) {
- for (let i = 0; i < datagram.length; i++) {
- if (datagram.indexOf("7e7e") == 0) {
- break;
- } else {
- datagram = datagram.substring(i, datagram.length);
- }
- }
- if (null != datagram && datagram.length > 0 && datagram.indexOf("7e7e") >= 0) {
- if (datagram.length >= 26) {
- var lenBuff = util.HexStr2Bytes(datagram.substring(22, 22 + 4));
- var len = util.byteToUint16(lenBuff); // 报文长度(int)
- var datagramlength = 11 + len + 6;
- if (datagram.length >= datagramlength * 2) {
- var onedatagram = datagram.substring(0, datagramlength * 2);
- if (!datagramHelp.crcCheck(onedatagram)) {
- wx.showToast({
- title: '数据CRC校验错误,请重试!',
- icon: 'none',
- duration: 2000
- })
- this.setData({
- datagramBuff: ''
- })
- return;
- }
- var count = 20;
- var funcode = datagram.substring(count, count + 2);
- count += 2;
- if (funcode == "f6") {
- let info = datagramHelp.datagram_f6_analyse(onedatagram)
- console.log(info)
- } else if (funcode == "f7") {
- let info = datagramHelp.datagram_f7_analyse(onedatagram)
- console.log(info)
- } else if (funcode == '45') {
- let info = datagramHelp.datagram_45_analyse(onedatagram)
- console.log(info)
- let ver = info['rtu_ver'];
- if (ver != undefined && ver.length > 0) {
- let statusInfo = this.data.statusInfo;
- statusInfo['rtu_ver'] = ver;
- this.setData({
- statusInfo: statusInfo
- });
- }
- let ct = info['collect_time'];
- if (ct != undefined && ct.length > 0) {
- let clockInfo = this.data.clockInfo;
- clockInfo['collect_time'] = ct;
- this.setData({
- clockInfo: clockInfo
- });
- }
- } else if (funcode == '47') {
- var info = datagramHelp.datagram_47_analyse(onedatagram)
- console.log(info)
- } else if (funcode == '48') {
- var info = datagramHelp.datagram_48_analyse(onedatagram)
- console.log(info)
- } else if (funcode == '41') {
- var info = datagramHelp.datagram_41_analyse(onedatagram)
- console.log(info)
- var baseInfo = this.data.baseInfo;
- let rtuCode = info['rtu_code'];
- baseInfo['rtu_code'] = rtuCode;
- let ip1 = info['ip1'];
- if (ip1 != undefined && ip1.length > 0) {
- // ip1 = ip1 + ":" + info['ip1_port'];
- } else {
- ip1 = "";
- }
- let ip2 = info['ip2'];
- if (ip2 != undefined && ip2.length > 0) {
- // ip2 = ip2 + ":" + info['ip2_port'];
- } else {
- ip2 = "";
- }
- let ip3 = info['ip3'];
- if (ip3 != undefined && ip3.length > 0) {
- // ip3 = ip3 + ":" + info['ip3_port'];
- } else {
- ip3 = "";
- }
- let ip4 = info['ip4'];
- if (ip4 != undefined && ip4.length > 0) {
- // ip4 = ip4 + ":" + info['ip4_port'];
- } else {
- ip4 = "";
- }
- baseInfo['ip1'] = ip1;
- baseInfo['ip2'] = ip2;
- baseInfo['ip3'] = ip3;
- baseInfo['ip4'] = ip4;
- let workModel = info['rtu_work_model'];
- if (workModel == "0") {
- baseInfo['rtu_work_model'] = "低功耗";
- } else {
- baseInfo['rtu_work_model'] = "永在线";
- }
- let rtuKind = info['rtu_kind'];
- for (let i = 0; i < this.data.rtu_kind_code.length; i++) {
- let code = this.data.rtu_kind_code[i];
- if (code == rtuKind) {
- baseInfo['rtu_kind'] = this.data.rtu_kind_name[i];
- break;
- }
- }
- this.setData({
- baseInfo: baseInfo
- });
- } else if (funcode == '40') {
- var info = datagramHelp.datagram_40_analyse(onedatagram)
- console.log(info)
- } else if (funcode == '43') {
- var info = datagramHelp.datagram_43_analyse(onedatagram)
- console.log(info)
- let intervalTime = info['intervalTime'];
- let intervalTimeText = "";
- if (intervalTime == "5") {
- intervalTimeText = "5分钟";
- } else if (intervalTime == "60") {
- intervalTimeText = "1小时";
- } else if (intervalTime == "120") {
- intervalTimeText = "2小时";
- } else if (intervalTime == "180") {
- intervalTimeText = "3小时";
- } else if (intervalTime == "240") {
- intervalTimeText = "4小时";
- } else if (intervalTime == "360") {
- intervalTimeText = "6小时";
- } else if (intervalTime == "480") {
- intervalTimeText = "8小时";
- } else if (intervalTime == "720") {
- intervalTimeText = "12小时";
- } else if (intervalTime == "1440") {
- intervalTimeText = "24小时";
- }
- let runInfo = this.data.runInfo;
- runInfo['collect_interval'] = intervalTimeText;
- runInfo['water_level_base_point'] = info['water_level_base_point'];
- runInfo['water_level_correct_point'] = info['water_level_correct_point'];
- this.setData({
- runInfo: runInfo
- });
- } else if (funcode == '42') {
- var info = datagramHelp.datagram_42_analyse(onedatagram)
- console.log(info)
- } else if (funcode == '4A') {
- var info = datagramHelp.datagram_4A_analyse(onedatagram)
- console.log(info)
- } else if (funcode == '51') {
- var info = datagramHelp.datagram_51_analyse(onedatagram)
- console.log(info)
- let ct = info['collect_time'];
- if (ct != undefined && ct.length > 0) {
- let clockInfo = this.data.clockInfo;
- clockInfo['collect_time'] = ct;
- this.setData({
- clockInfo: clockInfo
- });
- }
- } else if (funcode == 'f3') {
- var info = datagramHelp.datagram_f3_analyse(onedatagram)
- console.log(info)
- }
- if (datagram.length - datagramlength * 2 > 0) {
- let tmp = datagram.substring(datagramlength * 2, datagram.length);
- this.setData({
- datagramBuff: tmp
- })
- } else {
- this.setData({
- datagramBuff: ""
- })
- }
- } else {
- this.setData({
- datagramBuff: datagram
- })
- }
- } else {
- this.setData({
- datagramBuff: datagram
- })
- }
- } else {
- if (null != datagram && datagram.length > 0) {
- this.setData({
- datagramBuff: datagram
- })
- } else {
- this.setData({
- datagramBuff: ''
- })
- }
- }
- }
- },
- sendDatagramToRtu(datagram) {
- console.log("will send datagram " + datagram);
- let buffer = util.HexStr2Bytes(datagram);
- var that = this;
- let count = 0;
- let inView = new DataView(buffer);
- while (true) {
- if (buffer.byteLength - count > 20) {
- let tmpBuff = new ArrayBuffer(20);
- let outView = new DataView(tmpBuff);
- for (let i = 0; i < 20; i++) {
- outView.setUint8(i, inView.getUint8(count + i))
- }
- wx.writeBLECharacteristicValue({
- deviceId: that.data.devices['deviceId'],
- serviceId: that.data.devices['serviceId'],
- characteristicId: that.data.devices['characteristicId'],
- value: tmpBuff,
- success(res) {
- console.log('writeBLECharacteristicValue success', res.errMsg)
- wx.onBLECharacteristicValueChange((characteristic) => {
- console.log("read datagram==============", util.ab2hex(characteristic.value))
- var datagram = util.ab2hex(characteristic.value);
- that.pushDatagramBuff(datagram);
- })
- wx.readBLECharacteristicValue({
- deviceId: that.data.devices['deviceId'],
- serviceId: that.data.devices['serviceId'],
- characteristicId: that.data.devices['characteristicId'],
- success: function (res) {
- console.log('readBLECharacteristicValue')
- }
- })
- },
- fail(res) {
- console.log('writeBLECharacteristicValue success', res.errMsg)
- }
- })
- count += 20;
- } else {
- let len = buffer.byteLength - count;
- let tmpBuff = new ArrayBuffer(len);
- let outView = new DataView(tmpBuff);
- for (let i = 0; i < len; i++) {
- outView.setUint8(i, inView.getUint8(count + i))
- }
- wx.writeBLECharacteristicValue({
- deviceId: that.data.devices['deviceId'],
- serviceId: that.data.devices['serviceId'],
- characteristicId: that.data.devices['characteristicId'],
- value: tmpBuff,
- success(res) {
- console.log('writeBLECharacteristicValue success', res.errMsg)
- wx.onBLECharacteristicValueChange((characteristic) => {
- console.log("read datagram==============", util.ab2hex(characteristic.value))
- var datagram = util.ab2hex(characteristic.value);
- that.pushDatagramBuff(datagram);
- })
- wx.readBLECharacteristicValue({
- deviceId: that.data.devices['deviceId'],
- serviceId: that.data.devices['serviceId'],
- characteristicId: that.data.devices['characteristicId'],
- success: function (res) {
- console.log('readBLECharacteristicValue')
- }
- })
- },
- fail(res) {
- console.log('writeBLECharacteristicValue success', res.errMsg)
- }
- })
- count += len;
- }
- if (count >= buffer.byteLength) {
- wx.readBLECharacteristicValue({
- deviceId: that.data.devices['deviceId'],
- serviceId: that.data.devices['serviceId'],
- characteristicId: that.data.devices['characteristicId'],
- success: function (res) {
- console.log('readBLECharacteristicValue')
- }
- })
- break;
- }
- }
- },
- timeCallback() {
- let that = this;
- task_timer = setTimeout(function () {
- console.log("------------------------------------Time CallBack----------------------------");
- if (that.data.trySendCount == 0) {
- console.log("index " + that.data.datagramIndex);
- let datagram = that.data.datagramCache[that.data.datagramIndex];
- that.sendDatagramToRtu(datagram);
- if (that.data.datagramCache.length == that.data.datagramIndex + 1) {
- that.setData({
- datagramIndex: 0,
- trySendCount: 1
- })
- } else {
- that.setData({
- datagramIndex: that.data.datagramIndex + 1,
- trySendCount: 1
- })
- }
- } else {
- let count = that.data.trySendCount + 1;
- if (count >= 4) {
- count = 0;
- }
- that.setData({
- trySendCount: count
- })
- }
- that.timeCallback();
- }, 3000);
- },
- cancelTime() {
- if (task_timer != undefined) {
- clearTimeout(task_timer);
- task_timer = undefined;
- }
- this.setData({
- datagramIndex: 0,
- trySendCount: 0
- })
- }
- })
|