123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203 |
- //
- // DeviceData.swift
- // SolarBT
- //
- // Created by weclouds on 2019/4/28.
- // Copyright © 2019 weclouds. All rights reserved.
- //
- /*
-
- 类型 + 序列号 + 名称
-
- 1 8 7
- 序列号:
- 实时状态1s刷新一次
- 字体大小 固定 不跟随系统
- 电压电流单位 小数
-
-
- 0
- */
- /*
- 功能
- 1、数据保存
- 2、数据读取
- 3、数据刷新
-
- 1、分4个
- 1、设备信息 (存储 - 读取- 更新) 3、历史数据 (存储 - 读取 - 更新)
- 2、实时数据 (存储-读取-更新)
-
- 4、数据设置 (存储 读取 更新)
- */
- import Foundation
- class DeviceData: NSObject {
-
-
- var dataDict : [String: Any] = [String: Any]()
- var paramDataDict : [String: Any] = [String: Any]()
- var realDataDict : [String:Any] = [String:Any]()
- var cumulativeDataDict : [String :Any] = [String: Any]() /// 累计数据
- let key: DeviceDictKey = DeviceDictKey()
-
- var historyDataArr: [[String: String]] = [[String: String]]()
- override init() {
- super.init()
- }
-
- //真实数据
- func realdata(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
- }
-
-
- //实时数据
- func realdata_000A(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- //系统支持的最高电压
- let num00 = UUUtils.numberHexString(str0.subString(start: 7 , length: 2))
- log.debug("额定充电电流: \(num00!)")
- dataDict[key.MaxVolt] = "\(num00!)"
- paramDataDict[key.MaxVolt] = "\(num00!)"
-
-
- let num0 = UUUtils.numberHexString(str0.subString(start: 7 + 2, length: 2))
- log.debug("额定充电电流: \(num0!)")
- dataDict[key.IchageRage] = "\(num0!)"
- paramDataDict[key.IchageRage] = "\(num0!)"
- }
-
- //读取名称
- func readdata_0049(_ reciveData : String){
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- var num5 = UUUtils.string(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
- log.debug("要解析的十六进制 \( str0.subString(start: 7 , length: str0.count - 12))")
- num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
- log.debug("设备名称 \(num5)")
- if num5 == nil || num5 == ""{
- let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
- log.debug("设备中文名称 \(ChineseString!)")
- }
- }
- func realdata_000B(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- //1400
- //额定放电电流
- let num00 = UUUtils.numberHexString(str0.subString(start: 7, length: 2))
- log.debug("额定放电电流:\(num00!)")
- dataDict[key.idischagRate] = "\(num00!)"
- //产品类型
- let num0 = UUUtils.numberHexString(str0.subString(start: 9, length: 2))
-
- log.debug("产品类型:\(num0)")
- var device_type = ""
- switch num0?.intValue {
- case 0:
- device_type = "控制器,家用"
- case 1:
- device_type = "控制器,路灯"
- case 3:
- device_type = "逆变器"
- case 4:
- device_type = "控逆一体机"
-
- default:
- break
- }
-
- dataDict[key.device_type] = device_type
- var num1 = UUUtils.string(fromHexString: str0.subString(start: 11, length: 32))
- num1 = num1?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
- log.debug("产品型号\(num1)")
- dataDict[key.product_type] = num1!
- //软件版本
- // let num2 = UUUtils.numberHexString(str0.subString(start: 11 + 32, length: 8))
- let a = UUUtils.numberHexString(str0.subString(start: 11 + 32, length: 2))
- let b = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2, length: 2))
- let c = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2 + 2, length: 2))
- let d = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 2 + 2 + 2, length: 2))
- log.debug("软件版本 : V \(b!).\(c!).\(d!)")
- dataDict[key.softWareCersion] = "V\(b!).\(c!).\(d!)"
- //硬件版本
- // let num3 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8, length: 8))
- let m1 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8, length: 2))
- let m2 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2, length: 2))
- let m3 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2 + 2, length: 2))
- let m4 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 2 + 2 + 2, length: 2))
- log.debug("硬件版本 : V\(m2!).\(m3!).\(m4!)")
- // 序列号
- dataDict[key.hardWareCersion] = "V \(m2!).\(m3!).\(m4!)"
- // let num4 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 , length: 8))
- let num41 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 , length: 2))
- let num42 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 2 , length: 2))
- let num43 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 4 , length: 4)) //补足5位
-
- log.debug("\( String(format: "%05d", num43!.intValue))") // 年月(低十六位)
-
- dataDict[key.productSN] = "\(num41!)\(num42!)\( String(format: "%05d", num43!.intValue))"
- // var num5 = UUUtils.string(fromHexString: str0.subString(start: 255 , length: 32)) // 最大32字节 12568哦哦哦泈色系儿子儿媳妇
-
- var num5 = UUUtils.string(fromHexString: str0.subString(start: 255 , length: 64))
- log.debug("要解析的十六进制 \( str0.subString(start: 255 , length: 64))")
- num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
- log.debug("设备名称 \(num5)")
- //f16d33 575578 e565b 065fd8 0906ed179
- if num5 == nil || num5 == "" {
- let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 255 , length: 64))
- // ff ff
- dataDict[key.productName] = ChineseString
- log.debug("设备中文名称 \(ChineseString!)")
- }else{
- dataDict[key.productName] = num5
- }
-
- // dataDict[key.productName] = "测试名称"
- //生产日期
- // let num6 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 4 * 4, length: 8))
- let year = UUUtils.numberHexString(str0.subString(start: 75, length: 2))
- let mouth = UUUtils.numberHexString(str0.subString(start: 75 + 2, length: 2))
- let day = UUUtils.numberHexString(str0.subString(start: 75 + 2, length: 2))
- log.debug("生产日期 : \(year!)-\(mouth!)-\(day!)")
- //mac地址
- // let num7 = UUUtils.numberHexString(str0.subString(start: 11 + 32 + 8 + 8 + 8 , length: 4))
- // log.debug("设备地址 \(num7)")
- //生产批次
- // var num5 = UUUtils.string(fromHexString: str0.subString(start: 255 , length: 64))
- // num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
- // log.debug("设备名称 \(num5)")
-
-
-
- }
- //温度处理
- func temp(with num:NSNumber)-> String{
- let numInt = num.intValue
- // let q1 = UUUtils.numberHexString(q)?.intValue
-
- let q2 = numInt & 128
- print("判断正负\(q2)")
- if q2 != 128 {
- log.debug("温度\(num.floatValue )")
- return "\(num.intValue )"
-
- }else{
-
- log.debug("温度: -\(numInt & 127 )")
- return "-\(numInt & 127 )"
- }
- }
- //1s刷新一次
-
- //实时数据
- func realdata_00FD(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
-
-
-
- //太阳能板状态 0 000 0000 0000 0000 0000 0000 0000 0010
- // 31
-
- let num0A = UUUtils.getBinaryByHex(str0.subString(start: 11 , length: 8))
- log.debug("太阳能板状态\(num0A!)")
-
- var solarStatusStr = ""
- let B30 = num0A?.subString(start: 1, length: 1)
- let B29 = num0A?.subString(start: 2, length: 1)
- let B28 = num0A?.subString(start: 3, length: 1)
- let B27 = num0A?.subString(start: 4, length: 1)
- let B26 = num0A?.subString(start: 5, length: 1)
- let B25 = num0A?.subString(start: 6, length: 1)
- let B24 = num0A?.subString(start: 7, length: 1)
- let B23 = num0A?.subString(start: 8, length: 1)
-
- //负载
- let B20 = num0A?.subString(start: 11, length: 1)
- let B19 = num0A?.subString(start: 12, length: 1)
- let B15 = num0A?.subString(start: 16, length: 1)
- //系统
- let B21 = num0A?.subString(start: 10, length: 1)
- let B14 = num0A?.subString(start: 17, length: 1)
- let B13 = num0A?.subString(start: 18, length: 1)
-
- //蓄电池状态
- let B22 = num0A?.subString(start: 9, length: 1)
- let B18 = num0A?.subString(start: 13, length: 1)
- let B17 = num0A?.subString(start: 14, length: 1)
- let B16 = num0A?.subString(start: 15, length: 1)
- let B12 = num0A?.subString(start: 19, length: 1)
- let B11 = num0A?.subString(start: 20, length: 1)
- let B10 = num0A?.subString(start: 21, length: 1)
-
- var batteryStatusStr = ""
- if B10 == "1" {
- batteryStatusStr = "BMS过充保护"
- }
- if B11 == "1" {
- batteryStatusStr = "电池低温保护,停止充电"
- }
- if B12 == "1" {
- batteryStatusStr = "电池反接"
- }
- if B16 == "1" {
- batteryStatusStr = "蓄电池过放"
- }
- if B17 == "1" {
- batteryStatusStr = "蓄电池超压"
- }
- if B18 == "1" {
- batteryStatusStr = "欠压警告"
- }
- if B22 == "1" {
- batteryStatusStr = "外部坏境温度过高"
- }
-
- if B10 == "0" && B11 == "0" && B12 == "0" && B16 == "0" && B17 == "0" && B18 == "0" && B22 == "0"{
- batteryStatusStr = "正常"
- }
- dataDict[key.batteryStatus] = batteryStatusStr
- realDataDict[key.batteryStatus] = batteryStatusStr
- //太阳能状态
-
- if B23 == "1" {
- solarStatusStr = "光伏输入功率过大"
- }
- if B24 == "1" {
- solarStatusStr = "光伏输入端短路"
- }
- if B25 == "1" {
- solarStatusStr = "光伏输入端超压"
- }
- if B26 == "1" {
- solarStatusStr = "太阳板逆流"
- }
- if B27 == "1" {
- solarStatusStr = "太阳板工作点超压"
- }
- if B28 == "1" {
- solarStatusStr = "太阳板反接"
- }
- dataDict[key.solarStatus] = solarStatusStr
- realDataDict[key.solarStatus] = solarStatusStr
- if B23 == "0" && B24 == "0" && B25 == "0" && B26 == "0" && B27 == "0" && B28 == "0" {
- dataDict[key.solarStatus] = batteryStatusStr
- realDataDict[key.solarStatus] = batteryStatusStr
- }
-
-
- let num0 = UUUtils.getBinaryByHex(str0.subString(start: 7, length: 4))
- log.debug("00FD \(num0!)")
- //0000 0000 0000 0000 从后往前数
- let loadStatus = "\(num0?.subString(start: 0, length: 1) ?? "")"
- var loadStatusStr = ""
-
- if B15 == "1" {
- loadStatusStr = "负载开路"
- }
- if B19 == "1" {
- loadStatusStr = "负载短路"
- }
- if B20 == "1" {
- loadStatusStr = "负载功率过大或负载过流"
- }
-
- if B15 == "0" && B19 == "0" && B20 == "0" {
- if loadStatus == "0" {
- loadStatusStr = "负载已关"
- }else if loadStatus == "1" {
- loadStatusStr = "负载已开"
- }
- }
-
-
-
- log.debug("负载状态 :\(num0?.subString(start: 7, length: 1))") // 低八位
- dataDict[key.loadStatus] = loadStatusStr
- realDataDict[key.loadStatus] = loadStatusStr
- //蓄电池状态
- // let batteryStatus = "\(num0?.subString(start: 8, length: 8) ?? "")"
-
-
- //太阳能电压 0107
- let num1 = UUUtils.numberHexString(str0.subString(start: 47, length: 4))
- print("太阳能电压 \(num1!.floatValue * 0.1)" )
- let solarV = String(format: "%.1f", num1!.floatValue * 0.1)
- dataDict[key.solarVoltage] = "\(solarV)"
- realDataDict[key.solarVoltage] = "\(solarV)"
-
- // 太阳能电流 0108
- let num2 = UUUtils.numberHexString(str0.subString(start: 47 + 4, length: 4))
- print("太阳能电流 \(num2!.floatValue * 0.01)")
- dataDict[key.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
- realDataDict[key.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
-
- // 太阳能功率 0109
- let num2_1 = UUUtils.numberHexString(str0.subString(start: 47 + 4 + 4, length: 4))
- print("太阳能功率 \(num2_1!)")
- dataDict[key.solarPower] = "\(num2_1!)"
- realDataDict[key.solarPower] = "\(num2_1!)"
-
- //蓄电池 电压
- let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
- print("蓄电池电压 \(num3!.floatValue * 0.1)")
- dataDict[key.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
- realDataDict[key.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
-
- let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5, length: 4))
- print("蓄电池电流\(num4!.floatValue * 0.01)")
- dataDict[key.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
- realDataDict[key.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
-
- let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6 + 2 , length: 2))
- print("温度 \(temp(with: num5!))")
- dataDict[key.batteryTemp] = "\(temp(with: num5!))"
- realDataDict[key.batteryTemp] = "\(temp(with: num5!))"
-
- //负载
- let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7, length: 4))
- print("负载电压\(num6!.floatValue * 0.1)")
- dataDict[key.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
- realDataDict[key.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
-
- let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
- print("负载电流\(num7!.floatValue * 0.01)")
- dataDict[key.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
- realDataDict[key.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
-
- let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
- print("功率 \(num8! )")
- dataDict[key.loadPower] = "\(num8!)"
- realDataDict[key.loadPower] = "\(num8!)"
-
- //
- // log.debug("实时数据 === \(dataDict)")
- //log.debug("返回数据实时数据-- \(self.realDataDict)")
-
- }
- //处理历史数据
- func hisData(_ reciveData:String) {
-
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- var F000Dict = [String: String]()
-
- //蓄电池当天最低电压
- let num0 = UUUtils.numberHexString(str0.subString(start: 7, length: 4))
- log.debug("蓄电池当天最低电压: \( String(format: "%.1f", num0!.floatValue * 0.1))")
- F000Dict[key.his_batteryVoltageMin] = String(format: "%.1f", num0!.floatValue * 0.1)
-
- //蓄电池当天最高电压
- let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4, length: 4))
-
- log.debug("蓄电池当天最高电压\(String(format: "%.1f", num1!.floatValue * 0.1))")
- F000Dict[key.his_batteryVoltageMax] = String(format: "%.1f", num1!.floatValue * 0.1)
-
- let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 2, length: 4))
- log.debug("当天充电最大电流\(String(format: "%.2f", num2!.floatValue * 0.01))")
- F000Dict[key.his_chargingCurrentMax] = String(format: "%.2f", num2!.floatValue * 0.01)
-
- let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 3, length: 4))
- log.debug("当天放电最大电流\(String(format: "%.2f", num3!.floatValue * 0.01))")
- F000Dict[key.his_dischargeCurrentmax] = String(format: "%.2f", num3!.floatValue * 0.01)
-
- let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
- log.debug("当天充电最大功率\(num4!)" )
- F000Dict[key.his_chargingPowerMax] = "\(num4!)"
- let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5 , length: 4))
- log.debug("当天放电最大功率\(num5!)")
- F000Dict[key.his_dischargePowerMax] = "\(num5!)"
- let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6, length: 4))
- log.debug("充电安时数 \(num6!)")
- F000Dict[key.his_chargingAmpereHour] = "\(num6!)"
- let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7 , length: 4))
- log.debug("放电安时数 \(num7!)")
- F000Dict[key.his_dischargeAmpereHour] = "\(num7!)"
- let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
- log.debug("当天发电量 \(num8!)")
- F000Dict[key.his_generationCapacity] = "\(num8!)"
- let num9 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
- log.debug("充电量 \(num9!)")
- F000Dict[key.his_dischargeCapacity] = "\(num9!)"
-
- historyDataArr.append(F000Dict)
- }
-
- func realdata_F000(_ reciveData : String) {
- hisData(reciveData)
-
- }
-
-
-
- func realdata_F001(_ reciveData : String) {
- hisData(reciveData)
- }
-
- func realdata_F002(_ reciveData : String) {
- hisData(reciveData)
- }
-
- func realdata_F003(_ reciveData : String) {
- hisData(reciveData)
- }
-
- func realdata_F004(_ reciveData : String) {
- hisData(reciveData)
- }
-
-
- func realdata_F005(_ reciveData : String) {
- hisData(reciveData)
- }
-
- func realdata_F006(_ reciveData : String) {
- hisData(reciveData)
- dataDict[key.historydatas] = historyDataArr
- }
-
- // func realdata_F007(_ reciveData : String) {
- // hisData(reciveData)
- //
- // dataDict[key.historydatas] = historyDataArr
- // }
- //
-
-
- func realdata_0115(_ reciveData :String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
- //
- let num0 = UUUtils.numberHexString(str0.subString(start: 7 , length: 4))
- log.debug("总运行天数 - \(num0!)")
- dataDict[key.runTime] = ("\(num0!)")
- // cumulativeDataDict[key.runTime] = ("\(num0!)")
-
- let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4 , length: 4))
- log.debug("蓄电池总过放次数 - \(num1!)")
- dataDict[key.overTimes] = "\(num1!)"
- // cumulativeDataDict[key.overTimes] = "\(num1!)"
-
- let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 8 , length: 4))
- log.debug("蓄电池总充满次数 - \(num2!)")
- dataDict[key.fullTimes] = "\(num2!)"
- // cumulativeDataDict[key.fullTimes] = "\(num2!)"
-
- let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 12 , length: 8))
- log.debug("蓄电池总充电安时数 - \(num3!)")
- dataDict[key.chargingAmpereHour] = "\(num3!)"
- // cumulativeDataDict[key.chargingAmpereHour] = "\(num3!)"
-
- let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 , length: 8))
- log.debug("蓄电池总放电安时数 - \(num4!)")
- dataDict[key.dischargeAmpereHour] = "\(num4!)"
- // cumulativeDataDict[key.dischargeAmpereHour] = "\(num4!)"
-
- let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 * 2 , length: 8))
- log.debug("累计发电量 - \(num5!)")
- dataDict[key.generatEnergyTotal] = "\(num5!)"
- // cumulativeDataDict[key.generatEnergyTotal] = "\(num5!)"
-
- let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 * 3, length: 8))
- log.debug("累计用电量 - \(num6!)")
- dataDict[key.usedEnergyTotal] = "\(num6!)"
- // cumulativeDataDict[key.usedEnergyTotal] = "\(num6!)"
-
-
- // log.debug("、统计数据 == \(cumulativeDataDict)")
- // AppShare.cumulativeDataDict = cumulativeDataDict
- // NotificationCenter.default.post(name: NSNotification.Name(kBabyBluetoothNotificationCumulativeDataRecieve), object: nil)
-
- }
- func realdata_E003(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- //e003
-
- // FF
- let FF = str0.subString(start: 7 , length: 2)
- if FF == "FF"{
- dataDict[key.autoRecognition] = "1"
- paramDataDict[key.autoRecognition] = "1"
- }else{
- dataDict[key.autoRecognition] = "0"
- paramDataDict[key.autoRecognition] = "0"
- }
- // 判断是否自动识别
- let num0 = UUUtils.numberHexString(str0.subString(start: 7 + 2 , length: 2))
- log.debug("系统电压设置 - \(num0!)")
- dataDict[key.BatRateVolt] = "\(num0!)"
- paramDataDict[key.BatRateVolt] = "\(num0!)"
- //e004
- let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4 , length: 4))
-
- var batterytype = ""
- switch num1?.intValue {
- case 0:
- batterytype = "自定义"
- case 1:
- batterytype = "开口铅酸FLD"
- case 2:
- batterytype = "密封铅酸SLD"
- case 3:
- batterytype = "胶体铅酸GEL"
- case 4:
- batterytype = "锂LI"
- case 5:
- batterytype = "三元锂电池"
- case 6:
- batterytype = "磷酸铁锂LI"
- case 7:
- batterytype = "超级电容"
- case 10:
- batterytype = "自定义(铅酸专用)"
- default: break
-
- }
- log.debug("电池类型: \(batterytype)")
- dataDict[key.BatTypeSet] = "\(batterytype)"
- paramDataDict[key.BatTypeSet] = "\(batterytype)"
- //e005
- let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 2 , length: 4))
- log.debug("超压电压: \(num2!.floatValue * 0.1)")
- dataDict[key.BatOverVolt] = "\(num2!.floatValue * 0.1)"
- paramDataDict[key.BatOverVolt] = "\(num2!.floatValue * 0.1)"
- //e006
- let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 3, length: 4))
- //BatChgLimitVolt
- log.debug("充电限制电压:\(num3!.floatValue * 0.1)")
- dataDict[key.BatChgLimitVolt] = "\(num3!.floatValue * 0.1)"
- paramDataDict[key.BatChgLimitVolt] = "\(num3!.floatValue * 0.1)"
- //e007
- let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
- log.debug("均衡充电电压\(num4!.floatValue * 0.1)")
- dataDict[key.BatConstChgVolt] = String(format: "%.1f", num4!.floatValue * 0.1)
- paramDataDict[key.BatConstChgVolt] = String(format: "%.1f", num4!.floatValue * 0.1)
- //e008
- let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5, length: 4))
- log.debug("提升充电电压/过充返回电压\(num5!.floatValue * 0.1)")
- dataDict[key.BatImprovChgVolt] = "\(String(format: "%.1f", num5!.floatValue * 0.1))"
- paramDataDict[key.BatImprovChgVolt] = "\(String(format: "%.1f", num5!.floatValue * 0.1))"
- //e009
- let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6, length: 4))
- log.debug("浮充充电电压/过充返回电压\(num6!.floatValue * 0.1)")
- dataDict[key.BatFloatChgVolt] = "\(num6!.floatValue * 0.1)"
- paramDataDict[key.BatFloatChgVolt] = "\(num6!.floatValue * 0.1)"
- //e00a
- let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7, length: 4))
- log.debug("提升充电返回电压\(num7!.floatValue * 0.1)")
-
- dataDict[key.BatImprovChgBackVolt] = String(format: "%.1f", num7!.floatValue * 0.1)
- paramDataDict[key.BatImprovChgBackVolt] = String(format: "%.1f", num7!.floatValue * 0.1)
- //e00b
- let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
- log.debug("过放返回电压\(num8!.floatValue * 0.1)")
- dataDict[key.BatOverDischgBackVolt] = "\(num8!.floatValue * 0.1)"
- paramDataDict[key.BatOverDischgBackVolt] = "\(num8!.floatValue * 0.1)"
- //e00c
- let num9 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
- log.debug("欠压警告电压\(num9!.floatValue * 0.1)")
- dataDict[key.BatUnderVolt] = "\(num9!.floatValue * 0.1)"
- paramDataDict[key.BatUnderVolt] = "\(num9!.floatValue * 0.1)"
- //e00d
- let num10 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 10, length: 4))
- log.debug("过放电压\(num10!.floatValue * 0.1)")
- dataDict[key.BatOverDischgVolt] = "\(num10!.floatValue * 0.1)"
- paramDataDict[key.BatOverDischgVolt] = "\(num10!.floatValue * 0.1)"
- //e00e
- let num11 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 11, length: 4))
- log.debug("放电限制电压\(num11!.floatValue * 0.1)")
- dataDict[key.BatDischgLimitVolt] = "\(num11!.floatValue * 0.1)"
- paramDataDict[key.BatDischgLimitVolt] = "\(num11!.floatValue * 0.1)"
- // //e00f
- // let num12 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 12, length: 4))
- // log.debug("充电截止SOC,放点截止SOC\(num12!)")
- //e010
- let num13 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 13, length: 4))
- log.debug("过放延时时间\(num13!)")
- dataDict[key.BatOverDischgDelayTime] = "\(num13!)"
- paramDataDict[key.BatOverDischgDelayTime] = "\(num13!)"
- //e011
- let num14 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 14, length: 4))
- log.debug("均衡充电时间\(num14!)")
- dataDict[key.BatConstChgTime] = "\(num14!)"
- paramDataDict[key.BatConstChgTime] = "\(num14!)"
- //e012
- let num15 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 15, length: 4))
- log.debug("提升充电时间 \(num15!)")
- dataDict[key.BatImprovChgTime] = "\(num15!)"
- paramDataDict[key.BatImprovChgTime] = "\(num15!)"
- //e013
- let num16 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 16, length: 4))
- log.debug("均衡充电间隔\(num16!)")
- dataDict[key.BatConstChgGapTime] = "\(num16!)"
- paramDataDict[key.BatConstChgGapTime] = "\(num16!)"
- //e014
- let num17 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 17, length: 4))
- log.debug("温度补偿系数\(num17!)")
- dataDict[key.CoeffTemperCompen] = "\(num17!)"
- paramDataDict[key.CoeffTemperCompen] = "\(num17!)"
- //e015
- let num18 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 18, length: 4))
- log.debug("充电上限温度\(temp(with: num18!))")
- dataDict[key.ChgMaxTemper] = "\(temp(with: num18!))"
- paramDataDict[key.ChgMaxTemper] = "\(temp(with: num18!))"
- //e016
- let num19 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 19, length: 4))
- log.debug("充电下限温度\(temp(with: num19!))")
- dataDict[key.ChgMinTemper] = "\(temp(with: num19!))"
- paramDataDict[key.ChgMinTemper] = "\(temp(with: num19!))"
- //e017
- let num20 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 20, length: 4))
- log.debug("放电上限温度\(temp(with: num20!))")
- dataDict[key.DisChagMaxTemper] = "\(temp(with: num20!))"
- paramDataDict[key.DisChagMaxTemper] = "\(temp(with: num20!))"
- //e018
- let num21 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 21, length: 4))
- log.debug("放电下限温度\(temp(with: num21!))")
- dataDict[key.DisChaMinTemper] = "\(temp(with: num21!))"
- paramDataDict[key.DisChaMinTemper] = "\(temp(with: num21!))"
- //e01d
- let num26 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 26, length: 4))
-
- var loadwordmode = ""
- switch num26?.intValue {
- case 0:
- loadwordmode = "Light_control".da_localizedStr()
- case 1:
- loadwordmode = "Light_control,_delay_1_hour".da_localizedStr()
- case 2:
- loadwordmode = "Light_control,_delay_2_hours".da_localizedStr()
- case 3:
- loadwordmode = "Light_control,_delay_3_hours".da_localizedStr()
- case 4:
- loadwordmode = "Light_control,_delay_4_hours".da_localizedStr()
- case 5:
- loadwordmode = "Light_control,_delay_5_hours".da_localizedStr()
- case 6:
- loadwordmode = "Light_control,_delay_6_hours".da_localizedStr()
- case 7:
- loadwordmode = "Light_control,_delay_7_hours".da_localizedStr()
- case 8:
- loadwordmode = "Light_control,_delay_8_hours".da_localizedStr()
- case 9:
- loadwordmode = "Light_control,_delay_9_hours".da_localizedStr()
- case 10:
- loadwordmode = "Light_control,_delay_10_hours".da_localizedStr()
- case 11:
- loadwordmode = "Light_control,_delay_11_hours".da_localizedStr()
- case 12:
- loadwordmode = "Light_control,_delay_12_hours".da_localizedStr()
- case 13:
- loadwordmode = "Light_control,_delay_13_hours".da_localizedStr()
- case 14:
- loadwordmode = "Light_control,_delay_14_hours".da_localizedStr()
- case 15:
- loadwordmode = "Manual_mode".da_localizedStr()
- case 16:
- loadwordmode = "Debug_mode".da_localizedStr()
- case 17:
- loadwordmode = "Normal-on_mode".da_localizedStr()
- case 18:
- loadwordmode = "Timed_mode".da_localizedStr()
-
- default:
- break
- }
- log.debug("直流负载工作模式\(loadwordmode)")
- dataDict[key.DcLoadMode] = "\(loadwordmode)"
- paramDataDict[key.DcLoadMode] = "\(loadwordmode)"
- //e01e
- let num27 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 27, length: 4))
- log.debug("光控延时时间\(num27!)")
- dataDict[key.LightCtrlDelayTime] = "\(num27!)"
- paramDataDict[key.LightCtrlDelayTime] = "\(num27!)"
- //d01f
- let num28 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 28, length: 4))
- log.debug("光控电压\(num28!)")
- dataDict[key.LightCtrlVolt] = "\(num28!)"
- paramDataDict[key.LightCtrlVolt] = "\(num28!)"
- }
-
- func realdata_DF00(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
- // <ff030200009190>
- let num0 = UUUtils.numberHexString(str0.subString(start: 7, length: 4))
- log.debug("开关控制 —— \(num0)")
- var cmd = ""
- if num0?.intValue == 0 {
- cmd = "Off".da_localizedStr()
- }else if num0?.intValue == 1{
- cmd = "On".da_localizedStr()
- }
- dataDict[key.CmdPowerOnOff] = cmd
- paramDataDict[key.CmdPowerOnOff] = cmd
- }
-
- func realdata_DF0D(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
- // <ff030200 009190>
- let num0 = UUUtils.numberHexString(str0.subString(start: 7, length: 4))
- log.debug("手动均衡 —— \(num0)")
- var canhandle = ""
- if num0?.intValue == 0 {
- canhandle = "Prohibited".da_localizedStr()
- }else if num0?.intValue == 1{
- canhandle = "Enable".da_localizedStr()
- }
- dataDict[key.BattEqualChgImmediate] = canhandle
- paramDataDict[key.BattEqualChgImmediate] = canhandle
- // let year = UUUtils.numberHexString(str0.subString(start: 7, length: 2))
- // let mouth = UUUtils.numberHexString(str0.subString(start: 7 + 2, length: 2))
- // let day = UUUtils.numberHexString(str0.subString(start: 7 + 2 + 2, length: 2))
- // log.debug("生产日期 : \(year!)-\(mouth!)-\(day!)")
- }
-
- func realdata_E021(_ reciveData : String) {
- let str0 = reciveData.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
- // <ff030201009000> str0.subString(start: 7, length: 4)
- let num0 = UUUtils.getBinaryByHex(str0.subString(start: 7, length: 4))
- //("0000000100000000")
- //00 000 001 00000000
- log.debug("E021 —— \(num0)")
- //RX
- let rx = num0?.subString(start: 2, length: 3)
-
- var rx_function = ""
- if rx == "000"{
- rx_function = "Normal_communication".da_localizedStr()
- }
- // else if rx == "001"{
- // rx_function = "远程开关"
- //
- // }else if rx == "010"{
- // rx_function = "负载输出设置"
- //
- // }else if rx == "011"{
- // rx_function = "负载输出开/关 反相"
- //
- // }else if rx == "100"{
- // rx_function = "负载输出开/关 正常"
- // }
- log.debug("Rx端口 \(rx_function)")
- dataDict[key.rx] = "\(rx_function)"
- paramDataDict[key.rx] = "\(rx_function)"
- let tx = num0?.subString(start: 5, length: 3)
- log.debug("")
-
- var tx_function = ""
- if tx == "000" {
- tx_function = "Normal_communication".da_localizedStr()
- }
- // else if tx == "001"{
- // tx_function = "虚拟负载输出"
- // }else if tx == "010"{
- // tx_function = "每0.01kwh脉冲"
- // }else if tx == "011"{
- // tx_function = "灯光调暗(pwm正常)"
- // }else if tx == "100"{
- // tx_function = "灯光调暗(pwm反相)"
- // }
-
- log.debug("tx端口 \(tx_function)")
- dataDict[key.tx] = "\(tx_function)"
- paramDataDict[key.tx] = "\(tx_function)"
-
-
- log.debug("返回数据paramDataDict-- \(self.paramDataDict)")
- AppShare.paramDataDict = self.paramDataDict
- NotificationCenter.default.post(name: NSNotification.Name(kNotifionCationBatParam), object: nil)
- }
-
- //获取设备数据
- func getDevieData(){
- BabyBluetoothSwift.shareInstance()?.testBlock2 = {[weak self](deviceData) in
-
- let a = deviceData?.value(forKey: ReceiveData) as! String
-
- let str0 = a.subString(start: 0, length: 6)
-
- log.debug("返回的数据 -- \(a)")
-
- if str0.subString(start: 1, length: 4) == "ff03" {
- let dataTagValue : String = deviceData?.value(forKey: DataTag) as! String
- if dataTagValue == "FF03000A0001"{
- self!.realdata_000A(a)
- }
- if dataTagValue == "FF03000B004E" {
- self!.realdata_000B(a)
- }
- if dataTagValue == "FF0300FD000D" {
- self!.realdata_00FD(a)
- }
- if dataTagValue == "FF03F000000A" {
- self!.historyDataArr.removeAll()
- self!.realdata_F000(a)
- }
- if dataTagValue == "FF03F001000A" {
- self!.realdata_F001(a)
- }
- if dataTagValue == "FF03F002000A" {
- self!.realdata_F002(a)
- }
- if dataTagValue == "FF03F003000A" {
- self!.realdata_F003(a)
- }
- if dataTagValue == "FF03F004000A" {
- self!.realdata_F004(a);
- }
- if dataTagValue == "FF03F005000A" {
- self!.realdata_F005(a);
- }
- if dataTagValue == "FF03F006000A" {
- self!.realdata_F006(a);
- }
- // if dataTagValue == "FF03F007000A" {
- // self!.realdata_F007(a);
- // }
- if dataTagValue == "FF030115000B"{
- self!.realdata_0115(a)
- }
- if dataTagValue == "FF03E003001E" {
- self!.realdata_E003(a);
- }
- if dataTagValue == "FF03DF000001" {
- self!.realdata_DF00(a);
- }
- if dataTagValue == "FF03DF0D0001" {
- self!.realdata_DF0D(a)
- }
- if dataTagValue == "FF03E0210001"{
- self!.realdata_E021(a)
- }
- if dataTagValue == "FF0300490020"{
- self!.readdata_0049(a)
- }
- }
- // log.debug("返回数据dataDict-- \(self!.dataDict)")
- AppShare.dataDict = self!.dataDict
-
- //kBabyBluetoothNotificationAllDataRecieve
- if AppShare.isRefresh == true {
- NotificationCenter.default.post(name: NSNotification.Name(kBabyBluetoothNotificationAllDataRecieve), object: nil)
- }
-
- }
- }
-
- //获取设备数据
- func getParamData(){
- // ["FF03000A0001","FF03E003001E","FF03DF000001","FF03DF0D0001","FF03E0210001"]
- BabyBluetoothSwift.shareInstance()?.testBlock2 = {[weak self](deviceData) in
-
- let a = deviceData?.value(forKey: ReceiveData) as! String
-
- let str0 = a.subString(start: 0, length: 6)
-
- log.debug("返回的数据 -- \(a)")
-
- if str0.subString(start: 1, length: 4) == "ff03" {
- let dataTagValue : String = deviceData?.value(forKey: DataTag) as! String
- if dataTagValue == "FF03000A0001"{
- self!.realdata_000A(a)
- }
- if dataTagValue == "FF03E003001E" {
- self!.realdata_E003(a);
- }
- if dataTagValue == "FF03DF000001" {
- self!.realdata_DF00(a);
- }
- if dataTagValue == "FF03DF0D0001" {
- self!.realdata_DF0D(a)
- }
- if dataTagValue == "FF03E0210001"{
- self!.realdata_E021(a)
- }
- }
-
-
- }
- }
-
-
- //获取实时数据
- func getRealData(){
- BabyBluetoothSwift.shareInstance()?.testBlock2 = {[weak self](deviceData) in
-
- let a = deviceData?.value(forKey: ReceiveData) as! String
-
- let str0 = a.subString(start: 0, length: 6)
- log.debug(" ------------ ======== ----返回的数据 -- \(a)")
-
- if str0.subString(start: 1, length: 4) == "ff03" {
-
- let dataTagValue : String = deviceData?.value(forKey: DataTag) as! String
-
- if dataTagValue == "FF0300FD000D" {
- let str0 = a.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- var realDataDict2 : [String:Any] = [String:Any]()
- let key2: DeviceDictKey = DeviceDictKey()
-
-
- //太阳能板状态 0 000 0000 0000 0000 0000 0000 0000 0010
- // 31
-
- let num0A = UUUtils.getBinaryByHex(str0.subString(start: 11 , length: 8))
- log.debug("太阳能板状态\(num0A!)")
-
- var solarStatusStr = ""
- let B28 = num0A?.subString(start: 3, length: 1)
- let B27 = num0A?.subString(start: 4, length: 1)
- let B26 = num0A?.subString(start: 5, length: 1)
- let B25 = num0A?.subString(start: 6, length: 1)
- let B24 = num0A?.subString(start: 7, length: 1)
- let B23 = num0A?.subString(start: 8, length: 1)
-
- //负载
- let B20 = num0A?.subString(start: 11, length: 1)
- let B19 = num0A?.subString(start: 12, length: 1)
- let B15 = num0A?.subString(start: 16, length: 1)
- //系统
-
- //蓄电池状态
- let B22 = num0A?.subString(start: 9, length: 1)
- let B18 = num0A?.subString(start: 13, length: 1)
- let B17 = num0A?.subString(start: 14, length: 1)
- let B16 = num0A?.subString(start: 15, length: 1)
- let B12 = num0A?.subString(start: 19, length: 1)
- let B11 = num0A?.subString(start: 20, length: 1)
- let B10 = num0A?.subString(start: 21, length: 1)
-
- var batteryStatusStr = ""
- if B10 == "1" {
- batteryStatusStr = "BMS过充保护"
- }
- if B11 == "1" {
- batteryStatusStr = "电池低温保护,停止充电"
- }
- if B12 == "1" {
- batteryStatusStr = "电池反接"
- }
- if B16 == "1" {
- batteryStatusStr = "蓄电池过放"
- }
- if B17 == "1" {
- batteryStatusStr = "蓄电池超压"
- }
- if B18 == "1" {
- batteryStatusStr = "欠压警告"
- }
- if B22 == "1" {
- batteryStatusStr = "外部坏境温度过高"
- }
-
- if B10 == "0" && B11 == "0" && B12 == "0" && B16 == "0" && B17 == "0" && B18 == "0" && B22 == "0"{
- batteryStatusStr = "正常"
- }
- realDataDict2[key2.batteryStatus] = batteryStatusStr
- //太阳能状态
-
- if B23 == "1" {
- solarStatusStr = "光伏输入功率过大"
- }
- if B24 == "1" {
- solarStatusStr = "光伏输入端短路"
- }
- if B25 == "1" {
- solarStatusStr = "光伏输入端超压"
- }
- if B26 == "1" {
- solarStatusStr = "太阳板逆流"
- }
- if B27 == "1" {
- solarStatusStr = "太阳板工作点超压"
- }
- if B28 == "1" {
- solarStatusStr = "太阳板反接"
- }
- realDataDict2[key2.solarStatus] = solarStatusStr
- if B23 == "0" && B24 == "0" && B25 == "0" && B26 == "0" && B27 == "0" && B28 == "0" {
- realDataDict2[key2.solarStatus] = batteryStatusStr
- }
-
- let num0 = UUUtils.getBinaryByHex(str0.subString(start: 7, length: 4))
- log.debug("00FD \(num0!)")
- //0000 0000 0000 0000 从后往前数
- let loadStatus = "\(num0?.subString(start: 0, length: 1) ?? "")"
- var loadStatusStr = ""
-
- if B15 == "1" {
- loadStatusStr = "负载开路"
- }
- if B19 == "1" {
- loadStatusStr = "负载短路"
- }
- if B20 == "1" {
- loadStatusStr = "负载功率过大或负载过流"
- }
-
- if B15 == "0" && B19 == "0" && B20 == "0" {
- if loadStatus == "0" {
- loadStatusStr = "负载已关"
- }else if loadStatus == "1" {
- loadStatusStr = "负载已开"
- }
- }
-
- log.debug("负载状态 :\(num0?.subString(start: 7, length: 1) ?? "")") // 低八位
- realDataDict2[key2.loadStatus] = loadStatusStr
- //蓄电池状态
-
- //太阳能电压 0107
- let num1 = UUUtils.numberHexString(str0.subString(start: 47, length: 4))
- print("太阳能电压 \(num1!.floatValue * 0.1)" )
- let solarV = String(format: "%.1f", num1!.floatValue * 0.1)
- realDataDict2[key2.solarVoltage] = "\(solarV)"
-
- // 太阳能电流 0108
- let num2 = UUUtils.numberHexString(str0.subString(start: 47 + 4, length: 4))
- log.debug("太阳能电流 \(num2!.floatValue * 0.01)")
- realDataDict2[key2.solarCurrent] = String(format: "%.2f", num2!.floatValue * 0.01)
-
- // 太阳能功率 0109
- let num2_1 = UUUtils.numberHexString(str0.subString(start: 47 + 4 + 4, length: 4))
- log.debug("太阳能功率 \(num2_1!)")
- realDataDict2[key2.solarPower] = "\(num2_1!)"
-
- //蓄电池 电压
- let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 4, length: 4))
- log.debug("蓄电池电压 \(num3!.floatValue * 0.1)")
- realDataDict2[key2.batteryVoltage] = String(format: "%.1f", num3!.floatValue * 0.1)
-
- let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 5, length: 4))
- log.debug("蓄电池电流\(num4!.floatValue * 0.01)")
- realDataDict2[key2.batteryCurrent] = String(format: "%.2f", num4!.floatValue * 0.01)
-
- let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 6 + 2 , length: 2))
-
- log.debug("温度、 \(num5!)")
- let numInt = num5!.intValue
- let q2 = numInt & 128
- var temp = ""
- print("判断正负\(q2)")
- if q2 != 128 {
- log.debug("温度\(num5!.intValue )")
- temp = "\(num5!.intValue )"
- }else{
- log.debug("温度: -\(numInt & 127 )")
- temp = "-\(numInt & 127 )"
- }
- //log.debug("温度 \(self!.temp(with: num5!))")
- realDataDict2[key2.batteryTemp] = temp
-
- //负载
- let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 7, length: 4))
- log.debug("负载电压\(num6!.floatValue * 0.1)")
- realDataDict2[key2.loadVoltage] = String(format: "%.1f", num6!.floatValue * 0.1)
-
- let num7 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 8, length: 4))
- log.debug("负载电流\(num7!.floatValue * 0.01)")
- realDataDict2[key2.loadCurrent] = String(format: "%.2f", num7!.floatValue * 0.01)
-
- let num8 = UUUtils.numberHexString(str0.subString(start: 7 + 4 * 9, length: 4))
- log.debug("功率 \(num8! )")
- realDataDict2[key2.loadPower] = "\(num8!)"
- AppShare.realDataDict = realDataDict2
- log.debug("返回数据实时数据-- \(AppShare.realDataDict)")
- NotificationCenter.default.post(name: NSNotification.Name(kBabyBluetoothNotificationUartDataRecieve), object: nil)
- }
- }
-
- }
- }
-
-
-
-
- //统计数据
- func getCumulativeData(){
- BabyBluetoothSwift.shareInstance()?.testBlock2 = {[weak self](deviceData) in
-
- let a = deviceData?.value(forKey: ReceiveData) as! String
-
- let str0 = a.subString(start: 0, length: 6)
- log.debug(" ------------ ======== ----返回的数据 -- \(a)")
-
- if str0.subString(start: 1, length: 4) == "ff03" {
-
- let dataTagValue : String = deviceData?.value(forKey: DataTag) as! String
-
- if dataTagValue == "FF030115000B" {
- let str0 = a.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
- //
- var cumulativeDataDict2 : [String :Any] = [String: Any]() /// 累计数据
- let key2: DeviceDictKey = DeviceDictKey()
- let num0 = UUUtils.numberHexString(str0.subString(start: 7 , length: 4))
- log.debug("总运行天数 - \(num0!)")
-
- cumulativeDataDict2[key2.runTime] = ("\(num0!)")
-
- let num1 = UUUtils.numberHexString(str0.subString(start: 7 + 4 , length: 4))
- log.debug("蓄电池总过放次数 - \(num1!)")
-
- cumulativeDataDict2[key2.overTimes] = "\(num1!)"
-
- let num2 = UUUtils.numberHexString(str0.subString(start: 7 + 8 , length: 4))
- log.debug("蓄电池总充满次数 - \(num2!)")
-
- cumulativeDataDict2[key2.fullTimes] = "\(num2!)"
-
- let num3 = UUUtils.numberHexString(str0.subString(start: 7 + 12 , length: 8))
- log.debug("蓄电池总充电安时数 - \(num3!)")
-
- cumulativeDataDict2[key2.chargingAmpereHour] = "\(num3!)"
-
- let num4 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 , length: 8))
- log.debug("蓄电池总放电安时数 - \(num4!)")
-
- cumulativeDataDict2[key2.dischargeAmpereHour] = "\(num4!)"
-
- let num5 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 * 2 , length: 8))
- log.debug("累计发电量 - \(num5!)")
-
- cumulativeDataDict2[key2.generatEnergyTotal] = "\(num5!)"
-
- let num6 = UUUtils.numberHexString(str0.subString(start: 7 + 12 + 8 * 3, length: 8))
- log.debug("累计用电量 - \(num6!)")
-
- cumulativeDataDict2[key2.usedEnergyTotal] = "\(num6!)"
-
-
- log.debug("、统计数据 == \(cumulativeDataDict2)")
- AppShare.cumulativeDataDict = cumulativeDataDict2
- NotificationCenter.default.post(name: NSNotification.Name(kBabyBluetoothNotificationCumulativeDataRecieve), object: nil)
- }
- }
-
-
- }
- }
-
- }
|