DetailBLEWorkUtil.swift 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. //
  2. // DetailBLEWorkUtil.swift
  3. // SolarBT
  4. //
  5. // Created by weclouds on 2019/11/4.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. struct Pool {
  10. var count : Int
  11. var container : [String:String]
  12. init() {
  13. self.container = [String:String]()
  14. self.count = 0
  15. }
  16. //判断是否为空
  17. func isEmpty() -> Bool {
  18. return container.keys.count == 0
  19. }
  20. //判断池子是否已经满了 达到一定的数量就满了
  21. func size() -> Int {
  22. return container.keys.count
  23. }
  24. //清空池子
  25. mutating func clear() {
  26. container.removeAll()
  27. }
  28. //往池子里添加元素
  29. mutating func add(_ key :String,_ value : String) {
  30. container[key] = value
  31. count += 1
  32. }
  33. }
  34. class PoolWork : NSObject {
  35. /*
  36. 输入 :读取回来一次数据 Pool1
  37. 输出 :输出pool2的数据
  38. */
  39. var pool1 : Pool!
  40. var pool2 : Pool!
  41. var maxSize : Int //最大长度
  42. override init() {
  43. pool1 = Pool()
  44. pool2 = Pool()
  45. maxSize = 0
  46. }
  47. func run() {
  48. pool2.clear()
  49. //记录pool1 的数量
  50. maxSize = pool1.count
  51. pool2 = pool1
  52. }
  53. func getData() -> Pool {
  54. //断言
  55. assert(pool2.count < maxSize, "数据不足 ,无法提供数据")
  56. return pool2
  57. }
  58. /*1 Start
  59. 2 Pause
  60. */
  61. }
  62. class DetailBLEWorkUtil: NSObject {
  63. var pool1 : Pool!
  64. var pool2 : Pool!
  65. var isOld : Bool? = false
  66. var cumulativeDict : [String: Any] = [String: Any]()
  67. var deviceDetailData: [String: Any] = [String: Any]()
  68. var dataDict : [String: Any] = [String: Any]()
  69. var paramDataDict : [String: Any] = [String: Any]()
  70. var realDataDict : [String:Any] = [String:Any]()
  71. var cumulativeDataDict : [String :Any] = [String: Any]() /// 累计数据
  72. let key: DeviceDictKey = DeviceDictKey()
  73. var historyDataArr: [[String: String]] = [[String: String]]()
  74. static var share : DetailBLEWorkUtil = {
  75. let tool = DetailBLEWorkUtil()
  76. return tool
  77. }()
  78. override init() {
  79. pool1 = Pool()
  80. pool2 = Pool()
  81. }
  82. func sendRealStatusCMD() {//0.850956+0800 0.513711+0800
  83. if self.isOld == true {
  84. let arr = ["FF03000A0001","FF03E0030001","FF03E0080001","FF030100000A","FF0301200003"]
  85. BabyBluetoothSwift.shareInstance()?.loopWriteDataWite(arr, type: "RealStatus", completionHandler: { (result) in
  86. log.debug("返回数据 --- \(ReceiveData)")
  87. self.realdata_000A(result!["FF03000A0001"] as! String)
  88. self.realdata_E003(result!["FF03E0030001"] as! String)
  89. self.realdata_E008(result!["FF03E0080001"] as!String)
  90. self.realdata_0100(result!["FF030100000A"] as! String)
  91. self.realdata_0120(result!["FF0301200003"] as! String)
  92. })
  93. }else{
  94. let arr = ["FF03000A0001","FF03E0030001","FF03E0080001","FF0300FD000D"]
  95. BabyBluetoothSwift.shareInstance()?.loopWriteDataWite(arr,type: "RealStatus", completionHandler: { (result) in
  96. log.debug("返回数据 --- \(result)")
  97. self.realdata_000A(result!["FF03000A0001"] as! String)
  98. self.realdata_00FD(result!["FF0300FD000D"] as! String)
  99. self.realdata_E003(result!["FF03E0030001"] as! String)
  100. self.realdata_E008(result!["FF03E0080001"] as!String)
  101. })
  102. }
  103. }
  104. }
  105. extension DetailBLEWorkUtil{
  106. //实时数据
  107. func realdata_000A(_ reciveData : String) {
  108. let str0 = reciveData
  109. log.debug("处理真实数据 - \(str0)")
  110. //系统支持的最高电压
  111. let num00 = UUUtils.numberHexString(str0.subString(start: 7 , length: 2))
  112. log.debug("额定充电电流: \(num00!)")
  113. realDataDict[key.MaxVolt] = "\(num00!)"
  114. pool1.add(key.MaxVolt, "\(num00!)")
  115. deviceDetailData[key.MaxVolt] = "\(num00!)"
  116. let num0 = UUUtils.numberHexString(str0.subString(start: 7 + 2, length: 2))
  117. log.debug("额定充电电流: \(num0!)")
  118. // dataDict[key.IchageRage] = "\(num0!)"
  119. realDataDict[key.IchageRage] = "\(num0!)"
  120. pool1.add(key.IchageRage, "\(num0!)")
  121. deviceDetailData[key.IchageRage] = "\(num0!)"
  122. }
  123. func realdata_E003(_ reciveData : String) {
  124. let str0 = reciveData
  125. log.debug("处理真实数据 - \(str0)")
  126. //e003
  127. // FF
  128. let FF = str0.subString(start: 7 , length: 2)
  129. if FF == "FF"{
  130. // dataDict[key.autoRecognition] = "1"
  131. realDataDict[key.autoRecognition] = "1"
  132. pool1.add(key.autoRecognition, "1")
  133. deviceDetailData[key.autoRecognition] = "1"
  134. }else{
  135. // dataDict[key.autoRecognition] = "0"
  136. realDataDict[key.autoRecognition] = "0"
  137. pool1.add(key.autoRecognition, "0")
  138. deviceDetailData[key.autoRecognition] = "0"
  139. }
  140. // 判断是否自动识别
  141. let num0 = UUUtils.numberHexString(str0.subString(start: 7 + 2 , length: 2))
  142. log.debug("系统电压设置 - \(num0!)")
  143. deviceDetailData[key.BatRateVolt] = "\(num0!)"
  144. realDataDict[key.BatRateVolt] = "\(num0!)"
  145. pool1.add(key.BatRateVolt, "\(num0!)")
  146. }
  147. func realdata_E008(_ reciveData : String) {
  148. let str0 = reciveData
  149. log.debug("处理真实数据 - \(str0)")
  150. //e003
  151. //e008
  152. let num5 = UUUtils.numberHexString(str0.subString(start: 7 , length: 4))
  153. log.debug("提升充电电压/过充返回电压\(num5!.floatValue * 0.1)")
  154. deviceDetailData[key.BatImprovChgVolt] = "\(String(format: "%.1f", num5!.floatValue * 0.1))"
  155. realDataDict[key.BatImprovChgVolt] = "\(String(format: "%.1f", num5!.floatValue * 0.1))"
  156. }
  157. //读取名称
  158. func readdata_0049(_ reciveData : String){
  159. let str0 = reciveData
  160. log.debug("处理真实数据 - \(str0)")
  161. var productNameDict : [String:String] = [String:String]()
  162. if self.isOld == true {
  163. productNameDict[key.productName] = ""
  164. deviceDetailData[key.productName] = ""
  165. }else{
  166. var num5 = UUUtils.string(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
  167. log.debug("要解析的十六进制 \( str0.subString(start: 7 , length: str0.count - 12))")
  168. num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
  169. log.debug("设备名称 \(num5)")
  170. //f16d33 575578 e565b 065fd8 0906ed179
  171. if num5 == nil || num5 == "" {
  172. let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
  173. productNameDict[key.productName] = ChineseString
  174. deviceDetailData[key.productName] = ChineseString
  175. log.debug("设备中文名称 \(ChineseString!)")
  176. }else{
  177. productNameDict[key.productName] = num5
  178. deviceDetailData[key.productName] = num5
  179. }
  180. }
  181. }
  182. func real_000B000F(_ reciveData : String) {
  183. let str0 = reciveData
  184. log.debug("处理真实数据 - \(str0)")
  185. //1400
  186. //额定放电电流
  187. let num00 = UUUtils.numberHexString(str0.subString(start: 7, length: 2))
  188. log.debug("额定放电电流:\(num00!)")
  189. deviceDetailData[key.idischagRate] = "\(num00!)"
  190. //产品类型
  191. let num0 = UUUtils.numberHexString(str0.subString(start: 9, length: 2))
  192. log.debug("产品类型:\(num0)")
  193. var device_type = ""
  194. switch num0?.intValue {
  195. case 0:
  196. device_type = "Controller_household".da_localizedStr()
  197. case 1:
  198. device_type = "Controller_street_light".da_localizedStr()
  199. case 3:
  200. device_type = "Inverter".da_localizedStr()
  201. case 4:
  202. device_type = "All-in-one_inverter".da_localizedStr()
  203. default:
  204. break
  205. }
  206. deviceDetailData[key.device_type] = device_type
  207. var num1 = UUUtils.string(fromHexString: str0.subString(start: 11, length: 32))
  208. num1 = num1?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
  209. log.debug("产品型号\(num1)")
  210. deviceDetailData[key.product_type] = num1!
  211. //软件版本
  212. // let num2 = UUUtils.numberHexString(str0.subString(start: 11 + 32, length: 8))
  213. let a = UUUtils.numberHexString(str0.subString(start: 11 + 32, length: 2))
  214. let b = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2, length: 2))
  215. let c = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2 + 2, length: 2))
  216. let d = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2 + 2 + 2, length: 2))
  217. log.debug("软件版本 : V \(b!).\(c!).\(d!)")
  218. deviceDetailData[key.softWareCersion] = "V\(b!).\(c!).\(d!)"
  219. //硬件版本
  220. let m1 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8, length: 2))
  221. let m2 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2, length: 2))
  222. let m3 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2 + 2, length: 2))
  223. let m4 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2 + 2 + 2, length: 2))
  224. log.debug("硬件版本 : V\(m2!).\(m3!).\(m4!)")
  225. // 序列号
  226. deviceDetailData[key.hardWareCersion] = "V \(m2!).\(m3!).\(m4!)"
  227. // let num4 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 , length: 8))
  228. let num41 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 , length: 2))
  229. let num42 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 2 , length: 2))
  230. let num43 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 4 , length: 4)) //补足5位
  231. log.debug("\( String(format: "%05d", num43!.intValue))") // 年月(低十六位)
  232. deviceDetailData[key.productSN] = "\(num41!)\(num42!)\( String(format: "%05d", num43!.intValue))"
  233. }
  234. func realdata_000B(_ reciveData : String) {
  235. let str0 = reciveData
  236. log.debug("处理真实数据 - \(str0)")
  237. //1400
  238. //额定放电电流
  239. let num00 = UUUtils.numberHexString(str0.subString(start: 7, length: 2))
  240. log.debug("额定放电电流:\(num00!)")
  241. deviceDetailData[key.idischagRate] = "\(num00!)"
  242. //产品类型
  243. let num0 = UUUtils.numberHexString(str0.subString(start: 9, length: 2))
  244. log.debug("产品类型:\(num0)")
  245. var device_type = ""
  246. switch num0?.intValue {
  247. case 0:
  248. device_type = "Controller_household".da_localizedStr()
  249. case 1:
  250. device_type = "Controller_street_light".da_localizedStr()
  251. case 3:
  252. device_type = "Inverter".da_localizedStr()
  253. case 4:
  254. device_type = "All-in-one_inverter".da_localizedStr()
  255. default:
  256. break
  257. }
  258. deviceDetailData[key.device_type] = device_type
  259. var num1 = UUUtils.string(fromHexString: str0.subString(start: 11, length: 32))
  260. num1 = num1?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
  261. log.debug("产品型号\(num1)")
  262. deviceDetailData[key.product_type] = num1!
  263. //软件版本
  264. // let num2 = UUUtils.numberHexString(str0.subString(start: 11 + 32, length: 8))
  265. let a = UUUtils.numberHexString(str0.subString(start: 11 + 32, length: 2))
  266. let b = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2, length: 2))
  267. let c = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2 + 2, length: 2))
  268. let d = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2 + 2 + 2, length: 2))
  269. log.debug("软件版本 : V \(b!).\(c!).\(d!)")
  270. deviceDetailData[key.softWareCersion] = "V\(b!).\(c!).\(d!)"
  271. //硬件版本
  272. let m1 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8, length: 2))
  273. let m2 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2, length: 2))
  274. let m3 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2 + 2, length: 2))
  275. let m4 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2 + 2 + 2, length: 2))
  276. log.debug("硬件版本 : V\(m2!).\(m3!).\(m4!)")
  277. // 序列号
  278. deviceDetailData[key.hardWareCersion] = "V \(m2!).\(m3!).\(m4!)"
  279. // let num4 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 , length: 8))
  280. let num41 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 , length: 2))
  281. let num42 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 2 , length: 2))
  282. let num43 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 4 , length: 4)) //补足5位
  283. log.debug("\( String(format: "%05d", num43!.intValue))") // 年月(低十六位)
  284. deviceDetailData[key.productSN] = "\(num41!)\(num42!)\( String(format: "%05d", num43!.intValue))"
  285. // var num5 = UUUtils.string(fromHexString: str0.subString(start: 255 , length: 32)) // 最大32字节 12568哦哦哦泈色系儿子儿媳妇
  286. var num5 = UUUtils.string(fromHexString: str0.subString(start: 255 , length: 64))
  287. log.debug("要解析的十六进制 \( str0.subString(start: 255 , length: 64))")
  288. num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
  289. log.debug("设备名称 \(num5)")
  290. //f16d33 575578 e565b 065fd8 0906ed179
  291. if num5 == nil || num5 == "" {
  292. let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 255 , length: 64))
  293. // ff ff
  294. deviceDetailData[key.productName] = ChineseString
  295. log.debug("设备中文名称 \(ChineseString!)")
  296. }else{
  297. deviceDetailData[key.productName] = num5
  298. }
  299. let year = UUUtils.numberHexString(str0.subString(start: 75, length: 2))
  300. let mouth = UUUtils.numberHexString(str0.subString(start: 75 + 2, length: 2))
  301. let day = UUUtils.numberHexString(str0.subString(start: 75 + 2, length: 2))
  302. log.debug("生产日期 : \(year!)-\(mouth!)-\(day!)")
  303. }
  304. //温度处理
  305. func temp(with num:NSNumber)-> String{
  306. let numInt = num.intValue
  307. // let q1 = UUUtils.numberHexString(q)?.intValue
  308. let q2 = numInt & 128
  309. print("判断正负\(q2)")
  310. if q2 != 128 {
  311. log.debug("温度\(num.floatValue )")
  312. return "\(num.intValue )"
  313. }else{
  314. log.debug("温度: -\(numInt & 127 )")
  315. return "-\(numInt & 127 )"
  316. }
  317. }
  318. //1s刷新一次
  319. //实时数据
  320. func realdata_00FD(_ reciveData : String) {
  321. let str0 = reciveData
  322. log.debug("处理真实数据 - \(str0)")
  323. var num0A = UUUtils.getBinaryByHex(str0.subString(start: 11 , length: 8))
  324. let num0A_1 = num0A?.subString(start: 0, length: 16)
  325. let num0A_2 = num0A?.subString(start: 16, length: 16)
  326. let num0A_II = num0A_2! + num0A_1!
  327. num0A = num0A_II
  328. log.debug("太阳能板状态\(num0A!)")
  329. var solarStatusStr = ""
  330. let B30 = num0A?.subString(start: 1, length: 1)
  331. let B29 = num0A?.subString(start: 2, length: 1)
  332. let B28 = num0A?.subString(start: 3, length: 1)
  333. let B27 = num0A?.subString(start: 4, length: 1)
  334. let B26 = num0A?.subString(start: 5, length: 1)
  335. let B25 = num0A?.subString(start: 6, length: 1)
  336. let B24 = num0A?.subString(start: 7, length: 1)
  337. let B23 = num0A?.subString(start: 8, length: 1)
  338. //负载
  339. let B20 = num0A?.subString(start: 11, length: 1)
  340. let B19 = num0A?.subString(start: 12, length: 1)
  341. let B15 = num0A?.subString(start: 16, length: 1)
  342. //系统
  343. let B21 = num0A?.subString(start: 10, length: 1)
  344. let B14 = num0A?.subString(start: 17, length: 1)
  345. let B13 = num0A?.subString(start: 18, length: 1)
  346. //蓄电池状态
  347. let B22 = num0A?.subString(start: 9, length: 1)
  348. let B18 = num0A?.subString(start: 13, length: 1)
  349. let B17 = num0A?.subString(start: 14, length: 1)
  350. let B16 = num0A?.subString(start: 15, length: 1)
  351. let B12 = num0A?.subString(start: 19, length: 1)
  352. let B11 = num0A?.subString(start: 20, length: 1)
  353. let B10 = num0A?.subString(start: 21, length: 1)
  354. var batteryStatusStr = ""
  355. if B10 == "1" {
  356. batteryStatusStr = "BMS_overcharge_protection".da_localizedStr()
  357. }
  358. if B11 == "1" {
  359. batteryStatusStr = "Battery_low_temperature_protection,_stop_charging".da_localizedStr()
  360. }
  361. if B12 == "1" {
  362. batteryStatusStr = "Battery_reverse_polarity".da_localizedStr()
  363. }
  364. if B16 == "1" {
  365. batteryStatusStr = "Battery_over_discharge".da_localizedStr()
  366. }
  367. if B17 == "1" {
  368. batteryStatusStr = "Battery_overvoltage".da_localizedStr()
  369. }
  370. if B18 == "1" {
  371. batteryStatusStr = "Undervoltage_warning".da_localizedStr()
  372. }
  373. if B22 == "1" {
  374. batteryStatusStr = "External_ambient_temperature_is_too_high".da_localizedStr()
  375. }
  376. if B10 == "0" && B11 == "0" && B12 == "0" && B16 == "0" && B17 == "0" && B18 == "0" && B22 == "0"{
  377. batteryStatusStr = "Normal".da_localizedStr()
  378. }
  379. deviceDetailData[key.batteryStatus] = batteryStatusStr
  380. realDataDict[key.batteryStatus] = batteryStatusStr
  381. //太阳能状态
  382. if B23 == "1" {
  383. solarStatusStr = "PV_input_power_is_too_large".da_localizedStr()
  384. }
  385. if B24 == "1" {
  386. solarStatusStr = "Short_circuit_of_photovoltaic_input".da_localizedStr()
  387. }
  388. if B25 == "1" {
  389. solarStatusStr = "Overvoltage_at_the_photovoltaic_input".da_localizedStr()
  390. }
  391. if B26 == "1" {
  392. solarStatusStr = "Solar_panel_countercurrent".da_localizedStr()
  393. }
  394. if B27 == "1" {
  395. solarStatusStr = "Solar_panel_working_point_overpressure".da_localizedStr()
  396. }
  397. if B28 == "1" {
  398. solarStatusStr = "Solar_panel_reverse_connection".da_localizedStr()
  399. }
  400. deviceDetailData[key.solarStatus] = solarStatusStr
  401. realDataDict[key.solarStatus] = solarStatusStr
  402. let num0 = UUUtils.getBinaryByHex(str0.subString(start: 7, length: 4))
  403. log.debug("00FD \(num0!)")
  404. let low_8_bit = UUUtils.numberHexString(str0.subString(start: 9, length: 2))
  405. log.debug("low_8_bit - \(low_8_bit)")
  406. //1000000000000000
  407. var changeStatus = ""
  408. if low_8_bit == 0 {
  409. changeStatus = "Charging_is_not_turned_on".da_localizedStr()
  410. }else if low_8_bit == 1 {
  411. changeStatus = "Start_charging_mode".da_localizedStr()
  412. }else if low_8_bit == 2 {
  413. changeStatus = "MPPT_charge_mode".da_localizedStr()
  414. }else if low_8_bit == 3 {
  415. changeStatus = "Equalizing_charge_mode".da_localizedStr()
  416. }else if low_8_bit == 4 {
  417. changeStatus = "Floating_charge_mode".da_localizedStr()
  418. }else if low_8_bit == 5 {
  419. changeStatus = "Boost_charge_mode".da_localizedStr()
  420. }else if low_8_bit == 6 {
  421. changeStatus = "Current_limiting_(super_power)".da_localizedStr()
  422. }else if low_8_bit == 7 {
  423. changeStatus = "Fully_charged".da_localizedStr()
  424. }
  425. if B23 == "0" && B24 == "0" && B25 == "0" && B26 == "0" && B27 == "0" && B28 == "0" {
  426. dataDict[key.solarStatus] = changeStatus
  427. realDataDict[key.solarStatus] = changeStatus
  428. }
  429. //0000 0000 0000 0000 从后往前数
  430. let loadStatus = "\(num0?.subString(start: 0, length: 1) ?? "")"
  431. var loadStatusStr = ""
  432. if B15 == "1" {
  433. loadStatusStr = "Open_load".da_localizedStr()
  434. }
  435. if B19 == "1" {
  436. loadStatusStr = "Load_short_circuit".da_localizedStr()
  437. }
  438. if B20 == "1" {
  439. loadStatusStr = "Excessive_load_power_or_overload".da_localizedStr()
  440. }
  441. if B15 == "0" && B19 == "0" && B20 == "0" {
  442. if loadStatus == "0" {
  443. loadStatusStr = "Load_is_off".da_localizedStr()
  444. }else if loadStatus == "1" {
  445. loadStatusStr = "Load_is_on".da_localizedStr()
  446. }
  447. }
  448. log.debug("负载状态 :\(num0?.subString(start: 7, length: 1))") // 低八位
  449. deviceDetailData[key.loadStatus] = loadStatusStr
  450. realDataDict[key.loadStatus] = loadStatusStr
  451. //太阳能电压 0107
  452. let num1 = UUUtils.numberHexString(str0.subString(start: 47, length: 4))
  453. print("太阳能电压 \(num1!.floatValue * 0.1)" )
  454. let solarV = String(format: "%.1f", num1!.floatValue * 0.1)
  455. deviceDetailData[key.solarVoltage] = "\(solarV)"
  456. realDataDict[key.solarVoltage] = "\(solarV)"
  457. // 太阳能电流 0108
  458. let num2 = UUUtils.numberHexString(str0.subString(start: 47 + 4, length: 4))
  459. print("太阳能电流 \(num2!.floatValue * 0.01)")
  460. deviceDetailData[key.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
  461. realDataDict[key.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
  462. // 太阳能功率 0109
  463. let num2_1 = UUUtils.numberHexString(str0.subString(start: 47 + 4 + 4, length: 4))
  464. print("太阳能功率 \(num2_1!)")
  465. deviceDetailData[key.solarPower] = "\(num2_1!)"
  466. realDataDict[key.solarPower] = "\(num2_1!)"
  467. //蓄电池 电压
  468. let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
  469. print("蓄电池电压 \(num3!.floatValue * 0.1)")
  470. deviceDetailData[key.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
  471. realDataDict[key.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
  472. let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5, length: 4))
  473. print("蓄电池电流\(num4!.floatValue * 0.01)")
  474. deviceDetailData[key.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
  475. realDataDict[key.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
  476. let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6 + 2 , length: 2))
  477. print("温度 \(temp(with: num5!))")
  478. deviceDetailData[key.batteryTemp] = "\(temp(with: num5!))"
  479. realDataDict[key.batteryTemp] = "\(temp(with: num5!))"
  480. //负载
  481. let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7, length: 4))
  482. print("负载电压\(num6!.floatValue * 0.1)")
  483. deviceDetailData[key.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
  484. realDataDict[key.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
  485. let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
  486. print("负载电流\(num7!.floatValue * 0.01)")
  487. deviceDetailData[key.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
  488. realDataDict[key.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
  489. let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
  490. print("功率 \(num8! )")
  491. realDataDict[key.loadPower] = "\(num8!)"
  492. deviceDetailData[key.loadPower] = "\(num8!)"
  493. }
  494. //FF030115000B
  495. //ff031400000000000000000000000000 0000 0000 0000 0064 0b《》
  496. //13 * 4
  497. //处理历史数据
  498. func hisData(_ reciveData:String) {
  499. let str0 = reciveData
  500. log.debug("处理真实数据 - \(str0)")
  501. if str0.count != 13 * 4 {
  502. return
  503. }
  504. var F000Dict = [String: String]()
  505. //蓄电池当天最低电压
  506. let num0 = UUUtils.numberHexString(str0.subString(start: 7, length: 4))
  507. log.debug("蓄电池当天最低电压: \( String(format: "%.1f", num0!.floatValue * 0.1))")
  508. F000Dict[key.his_batteryVoltageMin] = String(format: "%.1f", num0!.floatValue * 0.1)
  509. //蓄电池当天最高电压
  510. let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4, length: 4))
  511. log.debug("蓄电池当天最高电压\(String(format: "%.1f", num1!.floatValue * 0.1))")
  512. F000Dict[key.his_batteryVoltageMax] = String(format: "%.1f", num1!.floatValue * 0.1)
  513. let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 2, length: 4))
  514. log.debug("当天充电最大电流\(String(format: "%.2f", num2!.floatValue * 0.01))")
  515. F000Dict[key.his_chargingCurrentMax] = String(format: "%.2f", num2!.floatValue * 0.01)
  516. let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 3, length: 4))
  517. log.debug("当天放电最大电流\(String(format: "%.2f", num3!.floatValue * 0.01))")
  518. F000Dict[key.his_dischargeCurrentmax] = String(format: "%.2f", num3!.floatValue * 0.01)
  519. let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
  520. log.debug("当天充电最大功率\(num4!)" )
  521. F000Dict[key.his_chargingPowerMax] = "\(num4!)"
  522. let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5 , length: 4))
  523. log.debug("当天放电最大功率\(num5!)")
  524. F000Dict[key.his_dischargePowerMax] = "\(num5!)"
  525. let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6, length: 4))
  526. log.debug("充电安时数 \(num6!)")
  527. F000Dict[key.his_chargingAmpereHour] = "\(num6!)"
  528. let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7 , length: 4))
  529. log.debug("放电安时数 \(num7!)")
  530. F000Dict[key.his_dischargeAmpereHour] = "\(num7!)"
  531. let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
  532. log.debug("当天发电量 \(num8!)")
  533. F000Dict[key.his_generationCapacity] = "\(num8!)"
  534. let num9 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
  535. log.debug("充电量 \(num9!)")
  536. F000Dict[key.his_dischargeCapacity] = "\(num9!)"
  537. historyDataArr.append(F000Dict)
  538. }
  539. func realdata_F000(_ reciveData : String) {
  540. hisData(reciveData)
  541. }
  542. func realdata_F001(_ reciveData : String) {
  543. hisData(reciveData)
  544. }
  545. func realdata_F002(_ reciveData : String) {
  546. hisData(reciveData)
  547. }
  548. func realdata_F003(_ reciveData : String) {
  549. hisData(reciveData)
  550. }
  551. func realdata_F004(_ reciveData : String) {
  552. hisData(reciveData)
  553. }
  554. func realdata_F005(_ reciveData : String) {
  555. hisData(reciveData)
  556. }
  557. func realdata_F006(_ reciveData : String) {
  558. hisData(reciveData)
  559. }
  560. func realdata_F007(_ reciveData : String) {
  561. hisData(reciveData)
  562. deviceDetailData[key.historydatas] = historyDataArr
  563. cumulativeDict[key.historydatas] = historyDataArr
  564. }
  565. func realdata_0115(_ reciveData :String) {
  566. let str0 = reciveData
  567. log.debug("处理真实数据 - \(str0)")
  568. //
  569. let num0 = UUUtils.numberHexString(str0.subString(start: 7 , length: 4))
  570. log.debug("总运行天数 - \(num0!)")
  571. cumulativeDict[key.runTime] = ("\(num0!)")
  572. deviceDetailData[key.runTime] = ("\(num0!)")
  573. let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4 , length: 4))
  574. log.debug("蓄电池总过放次数 - \(num1!)")
  575. cumulativeDict[key.overTimes] = "\(num1!)"
  576. deviceDetailData[key.overTimes] = "\(num1!)"
  577. let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 8 , length: 4))
  578. log.debug("蓄电池总充满次数 - \(num2!)")
  579. cumulativeDict[key.fullTimes] = "\(num2!)"
  580. deviceDetailData[key.fullTimes] = "\(num2!)"
  581. let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 12 , length: 8))
  582. log.debug("蓄电池总充电安时数 - \(num3!)")
  583. cumulativeDict[key.chargingAmpereHour] = "\(num3!)"
  584. deviceDetailData[key.chargingAmpereHour] = "\(num3!)"
  585. let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 , length: 8))
  586. log.debug("蓄电池总放电安时数 - \(num4!)")
  587. cumulativeDict[key.dischargeAmpereHour] = "\(num4!)"
  588. deviceDetailData[key.dischargeAmpereHour] = "\(num4!)"
  589. let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 * 2 , length: 8))
  590. // let num5 = UUUtils.numberHexString("ffffffff")
  591. log.debug("累计发电量 - \(num5!)")
  592. cumulativeDict[key.generatEnergyTotal] = "\(num5!)"
  593. let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 * 3, length: 8))
  594. log.debug("累计用电量 - \(num6!)")
  595. cumulativeDict[key.usedEnergyTotal] = "\(num6!)"
  596. deviceDetailData[key.usedEnergyTotal] = "\(num6!)"
  597. NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifisionDeviceDatailDataHistoryDataRecieve), object: nil, userInfo: cumulativeDict)
  598. }
  599. func realdata_DF0D(_ reciveData : String) {
  600. let str0 = reciveData
  601. log.debug("处理真实数据 - \(str0)")
  602. // <ff030200 009190>
  603. let num0 = UUUtils.numberHexString(str0.subString(start: 7, length: 4))
  604. log.debug("手动均衡 —— \(num0)")
  605. var canhandle = ""
  606. if num0?.intValue == 0 {
  607. canhandle = "Prohibited".da_localizedStr()
  608. }else if num0?.intValue == 1{
  609. canhandle = "Enable".da_localizedStr()
  610. }
  611. deviceDetailData[key.BattEqualChgImmediate] = canhandle
  612. paramDataDict[key.BattEqualChgImmediate] = canhandle
  613. log.debug(" kNotifisionDeviceDatailDataBaseInfoRecieve \(deviceDetailData)")
  614. }
  615. func realdata_0100(_ reciveData : String) {
  616. let str0 = reciveData
  617. log.debug("处理真实数据 - \(str0)")
  618. //太阳能电压 0107
  619. let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7, length: 4))
  620. print("太阳能电压 \(num1!.floatValue * 0.1)" )
  621. let solarV = String(format: "%.1f", num1!.floatValue * 0.1)
  622. deviceDetailData[key.solarVoltage] = "\(solarV)"
  623. realDataDict[key.solarVoltage] = "\(solarV)"
  624. // 太阳能电流 0108
  625. let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
  626. print("太阳能电流 \(num2!.floatValue * 0.01)")
  627. deviceDetailData[key.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
  628. realDataDict[key.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
  629. // 太阳能功率 0109
  630. let num2_1 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
  631. print("太阳能功率 \(num2_1!)")
  632. deviceDetailData[key.solarPower] = "\(num2_1!)"
  633. realDataDict[key.solarPower] = "\(num2_1!)"
  634. //蓄电池 电压 101
  635. let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 1, length: 4))
  636. print("蓄电池电压 \(num3!.floatValue * 0.1)")
  637. deviceDetailData[key.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
  638. realDataDict[key.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
  639. //蓄电池电流 102
  640. let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 2, length: 4))
  641. print("蓄电池电流\(num4!.floatValue * 0.01)")
  642. deviceDetailData[key.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
  643. realDataDict[key.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
  644. //蓄电池温度 0103
  645. let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 3 , length: 2))
  646. print("温度 \(temp(with: num5!))")
  647. deviceDetailData[key.batteryTemp] = "\(temp(with: num5!))"
  648. realDataDict[key.batteryTemp] = "\(temp(with: num5!))"
  649. //负载电压 0104
  650. let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
  651. print("负载电压\(num6!.floatValue * 0.1)")
  652. deviceDetailData[key.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
  653. realDataDict[key.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
  654. //负载电流 0105
  655. let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5, length: 4))
  656. print("负载电流\(num7!.floatValue * 0.01)")
  657. deviceDetailData[key.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
  658. realDataDict[key.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
  659. //负载功率 0106
  660. let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6, length: 4))
  661. print("功率 \(num8! )")
  662. realDataDict[key.loadPower] = "\(num8!)"
  663. deviceDetailData[key.loadPower] = "\(num8!)"
  664. }
  665. func realdata_0120(_ reciveData : String) {
  666. let str0 = reciveData
  667. log.debug("处理真实数据 - \(str0)")
  668. var num0A = UUUtils.getBinaryByHex(str0.subString(start: 11 , length: 8))
  669. let num0A_1 = num0A?.subString(start: 0, length: 16)
  670. let num0A_2 = num0A?.subString(start: 16, length: 16)
  671. let num0A_II = num0A_2! + num0A_1!
  672. num0A = num0A_II
  673. log.debug("太阳能板状态\(num0A!)")
  674. var solarStatusStr = ""
  675. let B30 = num0A?.subString(start: 1, length: 1)
  676. let B29 = num0A?.subString(start: 2, length: 1)
  677. let B28 = num0A?.subString(start: 3, length: 1)
  678. let B27 = num0A?.subString(start: 4, length: 1)
  679. let B26 = num0A?.subString(start: 5, length: 1)
  680. let B25 = num0A?.subString(start: 6, length: 1)
  681. let B24 = num0A?.subString(start: 7, length: 1)
  682. let B23 = num0A?.subString(start: 8, length: 1)
  683. //负载
  684. let B20 = num0A?.subString(start: 11, length: 1)
  685. let B19 = num0A?.subString(start: 12, length: 1)
  686. let B15 = num0A?.subString(start: 16, length: 1)
  687. //系统
  688. let B21 = num0A?.subString(start: 10, length: 1)
  689. let B14 = num0A?.subString(start: 17, length: 1)
  690. let B13 = num0A?.subString(start: 18, length: 1)
  691. //蓄电池状态
  692. let B22 = num0A?.subString(start: 9, length: 1)
  693. let B18 = num0A?.subString(start: 13, length: 1)
  694. let B17 = num0A?.subString(start: 14, length: 1)
  695. let B16 = num0A?.subString(start: 15, length: 1)
  696. let B12 = num0A?.subString(start: 19, length: 1)
  697. let B11 = num0A?.subString(start: 20, length: 1)
  698. let B10 = num0A?.subString(start: 21, length: 1)
  699. var batteryStatusStr = ""
  700. if B10 == "1" {
  701. batteryStatusStr = "BMS_overcharge_protection".da_localizedStr()
  702. }
  703. if B11 == "1" {
  704. batteryStatusStr = "Battery_low_temperature_protection,_stop_charging".da_localizedStr()
  705. }
  706. if B12 == "1" {
  707. batteryStatusStr = "Battery_reverse_polarity".da_localizedStr()
  708. }
  709. if B16 == "1" {
  710. batteryStatusStr = "Battery_over_discharge".da_localizedStr()
  711. }
  712. if B17 == "1" {
  713. batteryStatusStr = "Battery_overvoltage".da_localizedStr()
  714. }
  715. if B18 == "1" {
  716. batteryStatusStr = "Undervoltage_warning".da_localizedStr()
  717. }
  718. if B22 == "1" {
  719. batteryStatusStr = "External_ambient_temperature_is_too_high".da_localizedStr()
  720. }
  721. if B10 == "0" && B11 == "0" && B12 == "0" && B16 == "0" && B17 == "0" && B18 == "0" && B22 == "0"{
  722. batteryStatusStr = "Normal".da_localizedStr()
  723. }
  724. deviceDetailData[key.batteryStatus] = batteryStatusStr
  725. realDataDict[key.batteryStatus] = batteryStatusStr
  726. //太阳能状态
  727. if B23 == "1" {
  728. solarStatusStr = "PV_input_power_is_too_large".da_localizedStr()
  729. }
  730. if B24 == "1" {
  731. solarStatusStr = "Short_circuit_of_photovoltaic_input".da_localizedStr()
  732. }
  733. if B25 == "1" {
  734. solarStatusStr = "Overvoltage_at_the_photovoltaic_input".da_localizedStr()
  735. }
  736. if B26 == "1" {
  737. solarStatusStr = "Solar_panel_countercurrent".da_localizedStr()
  738. }
  739. if B27 == "1" {
  740. solarStatusStr = "Solar_panel_working_point_overpressure".da_localizedStr()
  741. }
  742. if B28 == "1" {
  743. solarStatusStr = "Solar_panel_reverse_connection".da_localizedStr()
  744. }
  745. deviceDetailData[key.solarStatus] = solarStatusStr
  746. realDataDict[key.solarStatus] = solarStatusStr
  747. //0120
  748. let num0 = UUUtils.getBinaryByHex(str0.subString(start: 7, length: 4))
  749. log.debug("00FD \(num0!)")
  750. let low_8_bit = UUUtils.numberHexString(str0.subString(start: 9, length: 2))
  751. log.debug("low_8_bit - \(low_8_bit)")
  752. //1000000000000000
  753. var changeStatus = ""
  754. if low_8_bit == 0 {
  755. changeStatus = "Charging_is_not_turned_on".da_localizedStr()
  756. }else if low_8_bit == 1 {
  757. changeStatus = "Start_charging_mode".da_localizedStr()
  758. }else if low_8_bit == 2 {
  759. changeStatus = "MPPT_charge_mode".da_localizedStr()
  760. }else if low_8_bit == 3 {
  761. changeStatus = "Equalizing_charge_mode".da_localizedStr()
  762. }else if low_8_bit == 4 {
  763. changeStatus = "Floating_charge_mode".da_localizedStr()
  764. }else if low_8_bit == 5 {
  765. changeStatus = "Boost_charge_mode".da_localizedStr()
  766. }else if low_8_bit == 6 {
  767. changeStatus = "Current_limiting_(super_power)".da_localizedStr()
  768. }else if low_8_bit == 7 {
  769. changeStatus = "Fully_charged".da_localizedStr()
  770. }
  771. // realDataDict[key.solarStatus] = solarStatusStr
  772. if B23 == "0" && B24 == "0" && B25 == "0" && B26 == "0" && B27 == "0" && B28 == "0" {
  773. dataDict[key.solarStatus] = changeStatus
  774. realDataDict[key.solarStatus] = changeStatus
  775. }
  776. //0000 0000 0000 0000 从后往前数
  777. let loadStatus = "\(num0?.subString(start: 0, length: 1) ?? "")"
  778. var loadStatusStr = ""
  779. if B15 == "1" {
  780. loadStatusStr = "Open_load".da_localizedStr()
  781. }
  782. if B19 == "1" {
  783. loadStatusStr = "Load_short_circuit".da_localizedStr()
  784. }
  785. if B20 == "1" {
  786. loadStatusStr = "Excessive_load_power_or_overload".da_localizedStr()
  787. }
  788. if B15 == "0" && B19 == "0" && B20 == "0" {
  789. if loadStatus == "0" {
  790. loadStatusStr = "Load_is_off".da_localizedStr()
  791. }else if loadStatus == "1" {
  792. loadStatusStr = "Load_is_on".da_localizedStr()
  793. }
  794. }
  795. log.debug("负载状态 :\(num0?.subString(start: 7, length: 1))") // 低八位
  796. deviceDetailData[key.loadStatus] = loadStatusStr
  797. realDataDict[key.loadStatus] = loadStatusStr
  798. }
  799. }
  800. /*
  801. let solarVoltage = Float(dataDict[key.solarVoltage] as! String)
  802. let solarCurrent = Float(dataDict[key.solarCurrent] as! String)
  803. let solarPower = String(format: "%.0f", solarVoltage! * solarCurrent!)
  804. self.solarPowerValue = (dataDict[key.solarPower] as! String)
  805. let solarStatusStr = dataDict[key.solarStatus] as? String
  806. let value1 = RealTimeValue(itemValue: "\(dataDict[key.solarVoltage]!)V", itemValue2: "\(dataDict[key.solarCurrent]!)A" , itemValue3: "\(solarPower)W", status: solarStatusStr == "" ? "Normal".da_localizedStr() : solarStatusStr, switchValue: "-")
  807. let batteryTemp1 = dataDict[key.batteryTemp]!
  808. var batterTempStr = ""
  809. let userDef = UserDefaults.standard
  810. let isCentigrade = userDef.value(forKey: TEMPISCENTIGRADE) as? String
  811. if isCentigrade != nil{
  812. if isCentigrade == "1"{
  813. batterTempStr = "\(batteryTemp1)℃"
  814. }else if isCentigrade == "0"{
  815. let fahrenhit = (batteryTemp1 as! String).centigradeToFahrenheit()
  816. batterTempStr = "\(fahrenhit)℉"
  817. }
  818. }else{
  819. batterTempStr = "\(batteryTemp1)℃"
  820. }
  821. let value2 = RealTimeValue(itemValue: "\(dataDict[key.batteryVoltage]!)V" , itemValue2: "\(dataDict[key.batteryCurrent]!)A", itemValue3: batterTempStr, status: dataDict[key.batteryStatus]as? String, switchValue: "-")
  822. let loadStatusStr = dataDict[key.loadStatus]as? String
  823. var loadSwitchValue = "1"
  824. if loadStatusStr == "Load_is_on".da_localizedStr() {
  825. loadSwitchValue = "1"
  826. }else{
  827. loadSwitchValue = "0"
  828. }
  829. var value3 = RealTimeValue(itemValue: "\(dataDict[key.loadVoltage]!)V", itemValue2: "\(dataDict[key.loadCurrent]!)A", itemValue3: "\(dataDict[key.loadPower]!)W", status: dataDict[key.loadStatus]as? String, switchValue: loadSwitchValue)
  830. if self.isDemo == true{
  831. value3 = RealTimeValue(itemValue: "\(dataDict[key.loadVoltage]!)V", itemValue2: "\(dataDict[key.loadCurrent]!)A", itemValue3: "\(dataDict[key.loadPower]!)W", status: dataDict[key.loadStatus]as? String, switchValue: "1")
  832. }
  833. dataSource?.append(value1)
  834. dataSource?.append(value2)
  835. dataSource?.append(value3)
  836. if self.isDemo == false {
  837. let allDataDict = AppShare.dataDict
  838. let BatImprovChgVolt = allDataDict[key.BatImprovChgVolt] as! String //提升充电电压
  839. let IchageRage = allDataDict[key.IchageRage] as! String // 额定充电电流
  840. let batRateVolt = allDataDict[key.BatRateVolt] as! String //系统电压
  841. let a = Float(BatImprovChgVolt)
  842. let b = Float(batRateVolt)
  843. let c = Float(IchageRage)
  844. let solarPowerMaxFloat = a! * (b! / 12) * c!
  845. log.debug("表盘最大值 \(solarPowerMaxFloat)")
  846. let solarPowerFloat = Float(solarPower)
  847. var curentSolarPower = Float(0.0)
  848. if solarPowerFloat != 0.0 {
  849. curentSolarPower = solarPowerFloat! / solarPowerMaxFloat
  850. }else{
  851. curentSolarPower = 0.0
  852. }
  853. log.debug("当前功率-- \(curentSolarPower)")
  854. self.solarPower = CGFloat(curentSolarPower)
  855. let LoadMode = allDataDict[key.DcLoadMode] as! String
  856. // if LoadMode == "手动模式"{
  857. self.isManual = true
  858. // }
  859. }else{
  860. let demoeData = SBTData().DemoData
  861. let BatImprovChgVolt = demoeData[key.BatImprovChgVolt] as! String //提升充电电压
  862. let IchageRage = demoeData[key.IchageRage] as! String // 额定充电电流
  863. let batRateVolt = demoeData[key.BatRateVolt] as! String //系统电压
  864. let a = Float(BatImprovChgVolt)
  865. let b = Float(batRateVolt)
  866. let c = Float(IchageRage)
  867. let solarPowerMaxFloat = a! * (b! / 12) * c!
  868. log.debug("表盘最大值 \(solarPowerMaxFloat)")
  869. let solarPowerFloat = Float(solarPower)
  870. var curentSolarPower = Float(0.0)
  871. if solarPowerFloat != 0.0 {
  872. curentSolarPower = solarPowerFloat! / solarPowerMaxFloat
  873. }else{
  874. curentSolarPower = 0.0
  875. }
  876. log.debug("当前功率-- \(curentSolarPower)")
  877. self.solarPower = CGFloat(curentSolarPower)
  878. let LoadMode = demoeData[key.DcLoadMode] as! String
  879. // if LoadMode == "手动模式"{
  880. self.isManual = true
  881. // }
  882. }
  883. isSwitchHiddenArr = [true,true,false]
  884. }
  885. }
  886. */