SBTReadSettingParamVCtr.swift 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. //
  2. // SBTReadSettingParamVCtr.swift
  3. // SolarBT
  4. //
  5. // Created by weclouds on 2019/5/24.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import RxCocoa
  10. import RxSwift
  11. struct FileInfo {
  12. var fileName : String?
  13. var isDelete : Bool?
  14. var isInBox : Bool?
  15. }
  16. class SBTReadSettingParamVCtr: UIViewController {
  17. var isDemo: Bool?
  18. var isOld : Bool?
  19. var peripheralName :String?
  20. var MaxVoltage : String?
  21. var IchageRage: String?
  22. var contentURL :[URL]? = [URL]()
  23. var dataSource2 :[FileInfo]? = [FileInfo]()
  24. var showDataArr :[FileInfo]? = [FileInfo]()
  25. //不同电池类型的指令数组
  26. var userArr :[String] = [String]() //自定义
  27. var liArr :[String] = [String]()//锂电池数组
  28. var commentArr:[String] = [String]() // 其他公共指令数组
  29. var isDelete : Bool? = false
  30. var importCMDArr = [String]()// 导入的数组
  31. var paramContent: String?{
  32. didSet{
  33. if let paramContent = self.paramContent {
  34. //先解密一次 解密base64 字符串
  35. //截取字符串 去掉最前面三个字符
  36. //在解密一次 base64 解密
  37. let encode = paramContent
  38. let encode1 = encode.fromBase64()
  39. let encode2 = encode1?.subString(start: 3)
  40. // print(encode2)
  41. let code = encode2?.fromBase64()
  42. // self.contentLabel.text = code
  43. }else{
  44. }
  45. }
  46. }
  47. //@IBOutlet weak var contentLabel: UILabel!
  48. @IBOutlet weak var contentView: UIView!
  49. @IBOutlet weak var searchBox: UIView!
  50. @IBOutlet weak var searchField: UITextField!
  51. @IBOutlet weak var importBtn: UIButton!
  52. var collectionView : UICollectionView?
  53. override func viewDidLoad() {
  54. super.viewDidLoad()
  55. self.title = "Paramter_Import".da_localizedStr()
  56. // self.contentLabel.text = "从其他应用分享到本app 并完成读取"
  57. getFileData()
  58. createUI()
  59. let deleteBtn = UIBarButtonItem(image: UIImage(named: "shanchu"), style: .plain, target: self, action: #selector(deleteAction))
  60. // self.navigationItem.rightBarButtonItem = deleteBtn
  61. }
  62. @objc func deleteAction(_ sender : UIBarButtonItem) {
  63. self.isDelete = !self.isDelete!
  64. self.collectionView?.reloadData()
  65. }
  66. @IBAction func importAction(_ sender: Any) {
  67. if self.importCMDArr.count != 0 {
  68. let arr = self.importCMDArr
  69. BabyBluetoothSwift.shareInstance()?.writeData2222(arr, completionHandler: { (result) in
  70. self.g_toast("Paramter_import_successfully".da_localizedStr())
  71. })
  72. let alert = SBTExportDataVCtr()
  73. if isDemo == true{
  74. let dict = SBTData().DemoData
  75. alert.alartTitle = (dict["ProdctName"] as! String)
  76. }else{
  77. if self.isOld == true{
  78. alert.alartTitle = "Paramterimported".da_localizedStr()
  79. }else{
  80. alert.alartTitle = (AppShare.dataDict["ProdctName"] as! String)
  81. }
  82. }
  83. alert.loadingImage = UIImage(named: "import")
  84. alert.message = "Paramter_importing".da_localizedStr()
  85. alert.show()
  86. alert.dismiss(2)
  87. }
  88. }
  89. @objc func showMessage() {
  90. g_toast("Paramter_import_successfully".da_localizedStr())
  91. }
  92. }
  93. extension SBTReadSettingParamVCtr{
  94. func getFileData() {
  95. self.dataSource2?.removeAll()
  96. let manager = FileManager.default
  97. let home = NSHomeDirectory() // 获取沙盒根路径
  98. let url = home + "/Documents/Inbox/"
  99. let iSExit = manager.fileExists(atPath: url)
  100. if iSExit == true {
  101. do {
  102. let cintents1 = try manager.contentsOfDirectory(atPath: url)
  103. print("cintents:\(cintents1)\n")
  104. for content in cintents1{
  105. let file = FileInfo(fileName: content, isDelete: false, isInBox: true)
  106. self.dataSource2?.append(file)
  107. }
  108. //获取路径名称
  109. let contentsOfURL = try? manager.contentsOfDirectory(at: URL(string: url)!,
  110. includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
  111. print("contentsOfURL: \(contentsOfURL)")
  112. for aURL in contentsOfURL! {
  113. contentURL?.append(aURL)
  114. }
  115. } catch let error {
  116. log.debug("Error occurs ---\(error)")
  117. }
  118. }
  119. do {
  120. let documentPath = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
  121. let SaveDataPath = documentPath.appendingPathComponent("SaveData")
  122. let cintents2 = try manager.contentsOfDirectory(atPath: SaveDataPath.path)
  123. print("cintents:\(cintents2)\n")
  124. for content2 in cintents2{
  125. let file = FileInfo(fileName: content2, isDelete: false, isInBox: false)
  126. self.dataSource2?.append(file)
  127. // self.deleteArr?.append(false)
  128. // self.isInboxArr?.append(false)
  129. // self.dataSource?.append(content2)
  130. }
  131. let contentsOfURL2 = try? manager.contentsOfDirectory(at: SaveDataPath,
  132. includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
  133. for bURL in contentsOfURL2! {
  134. contentURL?.append(bURL)
  135. }
  136. for _ in 0..<contentsOfURL2!.count{
  137. }
  138. } catch let error {
  139. log.debug(" 保存数据 --Error occurs ---\(error)")
  140. }
  141. showDataArr = dataSource2
  142. self.collectionView?.reloadData()
  143. }
  144. func createUI() {
  145. searchField.placeholder = "Enter_keywords_to_search".da_localizedStr()
  146. importBtn.setTitle("Import".da_localizedStr(), for: UIControl.State.normal)
  147. let layout = UICollectionViewFlowLayout.init()
  148. let width = (self.contentView.width - 16) / 5
  149. let height = 120.0
  150. layout.itemSize = CGSize(width: Double(width), height: height)
  151. layout.minimumLineSpacing = 0
  152. layout.minimumInteritemSpacing = 0
  153. collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
  154. collectionView!.backgroundColor = UIColor.white
  155. collectionView!.delegate = self
  156. collectionView!.dataSource = self
  157. collectionView!.register(UINib(nibName: "SBTFileCell", bundle: nil), forCellWithReuseIdentifier: "fileCell")
  158. self.contentView.addSubview(collectionView!)
  159. collectionView!.snp.makeConstraints { (make) in
  160. make.top.bottom.equalToSuperview()
  161. make.left.equalToSuperview().offset(8)
  162. make.right.equalToSuperview().offset(-8)
  163. }
  164. //搜索框外边框
  165. self.searchBox.layer.masksToBounds = true
  166. self.searchBox.layer.cornerRadius = 5
  167. self.searchBox.layer.borderColor = UIColor(hexString: "#D2D2D2")?.cgColor
  168. self.searchBox.layer.borderWidth = 1.0
  169. // fillCode
  170. let bgLayer1 = CAGradientLayer()
  171. bgLayer1.colors = [UIColor(red: 1, green: 0.52, blue: 0.07, alpha: 1).cgColor, UIColor(red: 1, green: 0.67, blue: 0, alpha: 1).cgColor]
  172. bgLayer1.locations = [0, 1]
  173. bgLayer1.frame = self.importBtn.bounds
  174. bgLayer1.startPoint = CGPoint(x: 1, y: 1)
  175. bgLayer1.endPoint = CGPoint(x: 0, y: 0)
  176. importBtn.layer.addSublayer(bgLayer1)
  177. importBtn.layer.masksToBounds = true
  178. importBtn.layer.cornerRadius = 22.5
  179. //
  180. self.searchField.delegate = self
  181. }
  182. }
  183. extension SBTReadSettingParamVCtr: UITextFieldDelegate{
  184. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  185. // let _newFiles = self.dataSource2
  186. // var filesNS : [FileInfo]
  187. // if let text = textField.text,
  188. // let textRange = Range(range, in: text) {
  189. // let updatedText = text.replacingCharacters(in: textRange,
  190. // with: string)
  191. // log.debug("更新的输入 ---\(updatedText)")
  192. // filesNS = (_newFiles?.filter({ (file) -> Bool in
  193. // return file.fileName?.contains(updatedText) == true
  194. // }))!
  195. // }else{
  196. // filesNS = _newFiles!
  197. // }
  198. //
  199. // self.dataSource2 = filesNS
  200. //
  201. //
  202. // self.collectionView?.reloadData()
  203. return true
  204. }
  205. func textFieldDidEndEditing(_ textField: UITextField) {
  206. let _newFiles = self.dataSource2
  207. var filesNS : [FileInfo]
  208. if textField.text == "" || textField.text == nil {
  209. filesNS = showDataArr!
  210. }else{
  211. log.debug("更新的输入 ---\(textField.text!)")
  212. filesNS = (_newFiles?.filter({ (file) -> Bool in
  213. return file.fileName?.contains(textField.text!) == true
  214. }))!
  215. }
  216. self.dataSource2?.removeAll()
  217. self.dataSource2 = filesNS
  218. log.debug("新数组 -- \(self.dataSource2)")
  219. self.collectionView?.reloadData()
  220. }
  221. }
  222. extension SBTReadSettingParamVCtr: UICollectionViewDelegate,UICollectionViewDataSource{
  223. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  224. return self.dataSource2?.count ?? 0
  225. }
  226. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  227. let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "fileCell", for: indexPath) as! SBTFileCell
  228. let file = self.dataSource2![indexPath.row]
  229. cell.fileInfo = file
  230. return cell
  231. }
  232. func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  233. let file = self.dataSource2![indexPath.row]
  234. if self.isDelete == true {
  235. //删除沙盒内容
  236. let isInbox = file.isInBox
  237. let manager = FileManager.default
  238. if isInbox == true {
  239. let home = NSHomeDirectory() // 获取沙盒根路径
  240. let url = home + "/Documents/Inbox/" + file.fileName!
  241. let filePath = URL(fileURLWithPath: url)
  242. do{
  243. try manager.removeItem(at: filePath)
  244. g_showHUD("deleteSussess".da_localizedStr())
  245. }catch{
  246. g_showHUD("deleteFail".da_localizedStr())
  247. }
  248. }else{
  249. let documentPath = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
  250. let SaveDataPath = documentPath.appendingPathComponent("SaveData")
  251. let filePath = SaveDataPath.appendingPathComponent(file.fileName!)
  252. do{
  253. try manager.removeItem(at: filePath)
  254. g_showHUD("删除成功")
  255. }catch{
  256. g_showHUD("删除失败")
  257. }
  258. }
  259. // isInboxArr?.remove(at: indexPath.row)
  260. // dataSource?.remove(at: indexPath.row)
  261. // deleteArr?.remove(at: indexPath.row)
  262. dataSource2?.remove(at: indexPath.row)
  263. self.collectionView?.reloadData()
  264. }else{
  265. // log.debug("点击了 \(contentURL![indexPath.row])")
  266. let fileURL = contentURL![indexPath.row]
  267. //reading
  268. do {
  269. let text2 = try String(contentsOf: fileURL, encoding: .utf8)
  270. // log.debug(text2)
  271. decodeFileData(text2)
  272. }
  273. catch {
  274. /* error handling here */
  275. }
  276. }
  277. }
  278. //处理数据
  279. func decodeFileData(_ text:String ) {
  280. //先解密一次 解密base64 字符串
  281. //截取字符串 去掉最前面三个字符
  282. //在解密一次 base64 解密
  283. let encode = text
  284. let encode1 = encode.fromBase64()
  285. let encode2 = encode1?.subString(start: 3)
  286. // print(encode2)
  287. let code = encode2?.fromBase64()
  288. log.debug("\(code!)")
  289. //分享来的
  290. let shareParamDict : [String:String] = stringValueDic(code!)! as! [String : String]
  291. userArr.removeAll()
  292. liArr.removeAll()
  293. commentArr.removeAll()
  294. let key = DeviceDictKey()
  295. //先设置 电池类型
  296. let BatTypeSet = shareParamDict[key.BatTypeSet] // 蓄电池类型
  297. let batTypeSetHexStr = String(format: "%04X", Int(BatTypeSet!)!)
  298. let batTypeSet_cmd = "FF06E004" + batTypeSetHexStr
  299. userArr.append(batTypeSet_cmd)
  300. commentArr.append(batTypeSet_cmd)
  301. liArr.append(batTypeSet_cmd)
  302. // let oldVolt = AppShare.paramDataDict[key.BatRateVolt] as! String
  303. //参数设置
  304. let autoRecogn = shareParamDict[key.autoRecognition] // 是否自动识别
  305. let BatRateVolt = shareParamDict[key.BatRateVolt] //系统电压设置
  306. var voltage = ""
  307. //如果是自动识别
  308. if autoRecogn == "1"{
  309. let oldVolt = String(format: "%2X", Int(AppShare.dataDict[key.BatRateVolt] as! String)!)
  310. voltage = "FF" + oldVolt
  311. }else{
  312. let oldVolt1 = String(format: "%2X", Int(BatRateVolt!)!)
  313. voltage = oldVolt1 + "00"
  314. }
  315. let BatRateVolt_cmd = "FF06E003" + voltage
  316. userArr.append(BatRateVolt_cmd)
  317. commentArr.append(BatRateVolt_cmd)
  318. liArr.append(BatRateVolt_cmd)
  319. let IchageRage = shareParamDict[key.IchageRage] //最大充电电流
  320. let IchageRageFloat = Double(IchageRage!)
  321. let result_int = Int(IchageRageFloat! * 100)
  322. let IchageRage_cmd = String(format: "FF06E001%04X",result_int)
  323. userArr.append(IchageRage_cmd)
  324. commentArr.append(IchageRage_cmd)
  325. liArr.append(IchageRage_cmd)
  326. if self.isDemo == false {
  327. if self.isOld == false{
  328. let CmdPowerOnOff = shareParamDict[key.CmdPowerOnOff] // 开关控制
  329. if CmdPowerOnOff != "" || CmdPowerOnOff != "--"{
  330. let CmdPowerOnOff_cmd = String(format: "FF06DF00%04X", Int(CmdPowerOnOff!)!)
  331. userArr.append(CmdPowerOnOff_cmd)
  332. commentArr.append(CmdPowerOnOff_cmd)
  333. liArr.append(CmdPowerOnOff_cmd)
  334. }
  335. }
  336. }
  337. if self.isOld == false {
  338. let ChgMaxTemper = shareParamDict[key.ChgMaxTemper] // 充电上限温度
  339. if ChgMaxTemper != "--"{
  340. let ChgMaxTemper_cmd = String(format: "FF06E015%04X", Int(ChgMaxTemper!)!)
  341. userArr.append(ChgMaxTemper_cmd)
  342. commentArr.append(ChgMaxTemper_cmd)
  343. liArr.append(ChgMaxTemper_cmd)
  344. }
  345. let ChgMinTemper = shareParamDict[key.ChgMinTemper] // 充电下限温度
  346. if ChgMinTemper != "--"{
  347. // 先判断正负
  348. var ChgMinTemper_cmd = ""
  349. let ChgMinTemperInt = Int(ChgMinTemper!)
  350. if ChgMinTemperInt! < 0 { //负数
  351. let resutA = ChgMinTemper!.subString(start: 1)
  352. let resubB = Int(resutA)
  353. let resubC = resubB! | 128
  354. ChgMinTemper_cmd = String(format: "FF06E016%04X", resubC) // 转化为十六进制
  355. }else{// 正数
  356. ChgMinTemper_cmd = String(format: "FF06E016%04X", ChgMinTemperInt!)
  357. }
  358. userArr.append(ChgMinTemper_cmd)
  359. commentArr.append(ChgMinTemper_cmd)
  360. liArr.append(ChgMinTemper_cmd)
  361. }
  362. }
  363. //==============================分割线================
  364. let BatOverVolt = shareParamDict[key.BatOverVolt] //超压电压
  365. let BatOverVolt_cmd = setVoltCMD(BatOverVolt!, firstcmd: "E005")
  366. userArr.append(BatOverVolt_cmd)
  367. let BatChgLimitVolt = shareParamDict[key.BatChgLimitVolt] //充电限制电压
  368. let BatChgLimitVolt_cmd = setVoltCMD(BatChgLimitVolt!, firstcmd: "E006")
  369. userArr.append(BatChgLimitVolt_cmd)
  370. let BatImprovChgVolt = shareParamDict[key.BatImprovChgVolt] // 提升充电电压/过充电压
  371. let BatImprovChgVolt_cmd = setVoltCMD(BatImprovChgVolt!, firstcmd: "E008")
  372. userArr.append(BatImprovChgVolt_cmd)
  373. let BatFloatChgVolt = shareParamDict[key.BatFloatChgVolt] //浮充充电电压 /过充返回电压
  374. let BatFloatChgVolt_cmd = setVoltCMD(BatFloatChgVolt!, firstcmd: "E009")
  375. userArr.append(BatFloatChgVolt_cmd)
  376. let BatImprovChgBackVolt = shareParamDict[key.BatImprovChgBackVolt] // 提升充电返回电压
  377. let BatImprovChgBackVolt_cmd = setVoltCMD(BatImprovChgBackVolt!, firstcmd: "E00A")
  378. userArr.append(BatImprovChgBackVolt_cmd)
  379. let BatImprovChgTime = shareParamDict[key.BatImprovChgTime] //提升充电时间
  380. let BatImprovChgTime_cmd = String(format: "FF06E012%04X", Int(BatImprovChgTime!)!)
  381. userArr.append(BatImprovChgTime_cmd)
  382. //------------------------------
  383. let CoeffTemperCompen = shareParamDict[key.CoeffTemperCompen] // 温度补偿系数
  384. let CoeffTemperCompen_cmd = String(format: "FF06E014%04X", Int(CoeffTemperCompen!)!)
  385. userArr.append(CoeffTemperCompen_cmd)
  386. commentArr.append(CoeffTemperCompen_cmd)
  387. //------------------------
  388. let BatConstChgVolt = shareParamDict[key.BatConstChgVolt] // 均衡充电电压
  389. let BatConstChgVolt_cmd = setVoltCMD(BatConstChgVolt!, firstcmd: "E007")
  390. userArr.append(BatConstChgVolt_cmd)
  391. let BatConstChgTime = shareParamDict[key.BatConstChgTime] // 均衡充电时间
  392. let BatConstChgTime_cmd = String(format: "FF06E011%04X", Int(BatConstChgTime!)!)
  393. userArr.append(BatConstChgTime_cmd)
  394. let BatConstChgGapTime = shareParamDict[key.BatConstChgGapTime] // 均衡充电间隔 /自动均衡
  395. let BatConstChgGapTime_cmd = String(format: "FF06E013%04X", Int(BatConstChgGapTime!)!)
  396. userArr.append(BatConstChgGapTime_cmd)
  397. if self.isOld == false {
  398. let BattEqualChgImmediate = shareParamDict[key.BattEqualChgImmediate] // 手动均衡
  399. let BattEqualChgImmediate_cmd = String(format: "FF06DF0D%04X", Int(BattEqualChgImmediate!)!)
  400. userArr.append(BattEqualChgImmediate_cmd)
  401. }
  402. let BatOverDischgBackVolt = shareParamDict[key.BatOverDischgBackVolt] //过放返回电压
  403. let BatOverDischgBackVolt_cmd = setVoltCMD(BatOverDischgBackVolt!, firstcmd: "E00B")
  404. userArr.append(BatOverDischgBackVolt_cmd)
  405. let BatUnderVolt = shareParamDict[key.BatUnderVolt] // 欠压警告电压
  406. let BatUnderVolt_cmd = setVoltCMD(BatUnderVolt!, firstcmd: "E00C")
  407. userArr.append(BatUnderVolt_cmd)
  408. let BatOverDischgVolt = shareParamDict[key.BatOverDischgVolt] // 过放电压
  409. let BatOverDischgVolt_cmd = setVoltCMD(BatOverDischgVolt!, firstcmd: "E00D")
  410. userArr.append(BatOverDischgVolt_cmd)
  411. let BatDischgLimitVolt = shareParamDict[key.BatDischgLimitVolt] //放电限制电压
  412. let BatDischgLimitVolt_cmd = setVoltCMD(BatDischgLimitVolt!, firstcmd: "E00E")
  413. userArr.append(BatDischgLimitVolt_cmd)
  414. let BatOverDischgDelayTime = shareParamDict[key.BatOverDischgDelayTime] //过放延时时间
  415. let BatOverDischgDelayTime_cmd = setVoltCMD(BatOverDischgDelayTime!, firstcmd: "E010")
  416. userArr.append(BatOverDischgDelayTime_cmd)
  417. //==============================================
  418. if self.isOld == false {
  419. let DisChagMaxTemper = shareParamDict[key.DisChagMaxTemper] // 放电上限温度
  420. if DisChagMaxTemper != "--"{
  421. let DisChagMaxTemper_cmd = String(format: "FF06E017%04X", Int(DisChagMaxTemper!)!)
  422. userArr.append(DisChagMaxTemper_cmd)
  423. commentArr.append(DisChagMaxTemper_cmd)
  424. liArr.append(DisChagMaxTemper_cmd)
  425. }
  426. let DisChaMinTemper = shareParamDict[key.DisChaMinTemper] // 放电下限温度
  427. if DisChaMinTemper != "--"{
  428. // 先判断正负
  429. var DisChaMinTemper_cmd = ""
  430. let DisChaMinTemperInt = Int(DisChaMinTemper!)
  431. if DisChaMinTemperInt! < 0 { //负数
  432. let resutA1 = DisChaMinTemper!.subString(start: 1)
  433. let resubB1 = Int(resutA1)
  434. let resubC1 = resubB1! | 128
  435. DisChaMinTemper_cmd = String(format: "FF06E018%04X", resubC1) // 转化为十六进制
  436. }else{// 正数
  437. DisChaMinTemper_cmd = String(format: "FF06E018%04X", DisChaMinTemperInt!)
  438. }
  439. userArr.append(DisChaMinTemper_cmd)
  440. commentArr.append(DisChaMinTemper_cmd)
  441. liArr.append(DisChaMinTemper_cmd)
  442. }
  443. }
  444. let DcLoadMode = shareParamDict[key.DcLoadMode] // 直流工作模式
  445. let DcLoadMode_cmd = String(format: "FF06E01D%04X", Int(DcLoadMode!)!)
  446. userArr.append(DcLoadMode_cmd)
  447. commentArr.append(DcLoadMode_cmd)
  448. liArr.append(DcLoadMode_cmd)
  449. let LightCtrlDelayTime = shareParamDict[key.LightCtrlDelayTime] //光控延时时间
  450. let LightCtrlDelayTime_cmd = String(format: "FF06E01E%04X", Int(LightCtrlDelayTime!)!)
  451. userArr.append(LightCtrlDelayTime_cmd)
  452. commentArr.append(LightCtrlDelayTime_cmd)
  453. liArr.append(LightCtrlDelayTime_cmd)
  454. let LightCtrlVolt = shareParamDict[key.LightCtrlVolt] // 光控电压
  455. let LightCtrlVolt_cmd = setVoltCMD(LightCtrlVolt!, firstcmd: "E01F")
  456. userArr.append(LightCtrlVolt_cmd)
  457. commentArr.append(LightCtrlVolt_cmd)
  458. liArr.append(LightCtrlVolt_cmd)
  459. let tx = shareParamDict[key.tx]
  460. var tx_funcStr = ""
  461. if tx == "000"{
  462. tx_funcStr = "0000"
  463. }else if tx == "001"{
  464. tx_funcStr = "0200"
  465. }else if tx == "010"{
  466. tx_funcStr = "0400"
  467. }else if tx == "011"{
  468. tx_funcStr = "0600"
  469. }else if tx == "100"{
  470. tx_funcStr = "0800"
  471. }
  472. let tx_cmd = "FF10E021" + tx_funcStr
  473. userArr.append(tx_cmd)
  474. commentArr.append(tx_cmd)
  475. liArr.append(tx_cmd)
  476. let rx = shareParamDict[key.rx]
  477. var rx_funcStr = ""
  478. if rx == "000"{
  479. rx_funcStr = "0000"
  480. }else if rx == "001"{
  481. rx_funcStr = "1000"
  482. }else if rx == "010"{
  483. rx_funcStr = "2000"
  484. }else if rx == "011"{
  485. rx_funcStr = "3000"
  486. }else if rx == "100"{
  487. rx_funcStr = "4000"
  488. }
  489. let rx_cmd = "FF10E021" + rx_funcStr
  490. userArr.append(rx_cmd)
  491. commentArr.append(rx_cmd)
  492. liArr.append(rx_cmd)
  493. importCMDArr.removeAll()
  494. if BatTypeSet == "0"{
  495. self.importCMDArr = userArr
  496. }else if BatTypeSet == "6"{
  497. self.importCMDArr = liArr
  498. }else{
  499. self.importCMDArr = commentArr
  500. }
  501. }
  502. // MARK: 字符串转字典
  503. func stringValueDic(_ str: String) -> [String : Any]?{
  504. let data = str.data(using: String.Encoding.utf8)
  505. if let dict = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String : Any] {
  506. return dict
  507. }
  508. return nil
  509. }
  510. }
  511. func setVoltCMD(_ Volt :String,firstcmd:String) -> String {
  512. let VoltFloat = (Volt as NSString).doubleValue
  513. let VoltData = VoltFloat * 10
  514. let Volt_cmd = String(format: "FF06%@%04X", firstcmd,VoltData) // 转化为十六进制
  515. return Volt_cmd
  516. }
  517. // MARK: 字典转字符串
  518. func dicValueString(_ dic:[String : Any]) -> String?{
  519. let data = try? JSONSerialization.data(withJSONObject: dic, options: [])
  520. let str = String(data: data!, encoding: String.Encoding.utf8)
  521. return str
  522. }
  523. /*
  524. */