| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- //
- // SBTRealTimeStatusVCtr.swift
- // SolarBT
- //
- // Created by weclouds on 2019/1/28.
- // Copyright © 2019 weclouds. All rights reserved.
- //
- import UIKit
- import PKHUD
- struct ReatTimeName {
- var title:String?
- var itemName1:String?
- var itemName2:String?
- var itemName3:String?
- }
- struct RealTimeValue {
- var itemValue:String?
- var itemValue2:String?
- var itemValue3:String?
- var status:String?
- var switchValue:String?
-
- }
- class SBTRealTimeStatusVCtr: UIViewController {
- var preVC : SBTDeviceDetaiVCtr?
- var isWrite : Bool? = true// 是否读取自动
- var isOld :Bool?
- var deviceName:String? // 设备名称
-
- var bleKey:String?
-
- var isSwitchHiddenArr :[Bool]? = [true,true,false]
- var isDemo:Bool? = false
- var titleArr : [ReatTimeName]?
- var dataSource : [RealTimeValue]?
- var solarPower : CGFloat?
- var solarPowerValue :String? = "0"
-
- var uartCommandTimer : Timer? // 定时器
- var isManual:Bool? = false // 是否手动模式
- @IBOutlet weak var tableView: UITableView!
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- initData()
-
- createUI()
- }
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
- }
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(animated)
-
- if self.isDemo == false {
- notificationRegister()
- Thread.sleep(forTimeInterval: 0.1)
-
- }
-
- }
-
- override func viewDidAppear(_ animated: Bool) {
- super.viewDidAppear(animated)
-
- }
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
- if self.isDemo == false {
- notificationUnRegister()
- }
-
- }
-
- }
- extension SBTRealTimeStatusVCtr{
- func createUI() {
-
- self.tableView.delegate = self
- self.tableView.dataSource = self
- self.tableView.separatorStyle = .none
- self.tableView.register(UINib(nibName: "SBTRTStatusCell", bundle: nil), forCellReuseIdentifier: "SBTRTStatusCell")
- self.tableView.register(UINib(nibName: "SBTDashboardCell", bundle: nil), forCellReuseIdentifier: "SBTDashboardCell")
- }
- }
- extension SBTRealTimeStatusVCtr:UITableViewDelegate,UITableViewDataSource{
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return 4
- }
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- if indexPath.row == 0 {
- return 205
- }else{
- return 119
- }
- }
-
-
- //缓存高度 这个 跟定时器一起使用
- func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
- if indexPath.row == 0 {
- return 205
- }else{
- return 119
- }
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- if indexPath.row == 0 {
- let cell = tableView.dequeueReusableCell(withIdentifier: "SBTDashboardCell") as! SBTDashboardCell
- cell.solarPower = self.solarPower
- cell.solarPowerValue = self.solarPowerValue
- cell.selectionStyle = .none
- return cell
- }else{
- let cell = tableView.dequeueReusableCell(withIdentifier: "SBTRTStatusCell") as! SBTRTStatusCell
- cell.selectionStyle = .none
- cell.isSwitchHidden = isSwitchHiddenArr![indexPath.row - 1]
- var isHandle = false
- if indexPath.row == 3{
- cell.isDemo = self.isDemo
-
- cell.switchCallback = {(isOn) in
- log.debug("开关状态 - \(isOn)")
- cell.isSwitchEnabled = self.isManual!
- //判断 发送 读取
- if self.isDemo == true{
- var realTime = RealTimeValue(itemValue: "14.1V", itemValue2: "8.06A", itemValue3: "114W", status: "Load_is_on".da_localizedStr(), switchValue:"0")
- if isOn == true{
- realTime = RealTimeValue(itemValue: "14.1V", itemValue2: "8.06A", itemValue3: "114W", status: "Load_is_on".da_localizedStr(), switchValue:"1")
- }else{
- realTime = RealTimeValue(itemValue: "0.0V", itemValue2: "0.00A", itemValue3: "0W", status: "Load_is_off".da_localizedStr(), switchValue:"0")
- }
- self.dataSource![indexPath.row - 1] = realTime
- self.tableView.reloadData()
- }else{
- if self.isManual == true{
- log.debug("手动修改开关 ---")
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifitionSBTDeviceDetaiVCtrRealTimerStop), object: nil)
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifitionSBTDeviceDetaiVCtrHistoryTimerStop), object: nil)
- delay(3, closure: {
- self.sendLoadSwitchCMD(isOn)
- })
- }
- }
- }
- }
- let titleModel = titleArr![indexPath.row - 1]
- cell.titleModel = titleModel
- let dataModel = dataSource![indexPath.row - 1]
- cell.valueModel = dataModel
- return cell
- }
-
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- // reloadData()
- }
-
-
- }
- //处理数据
- extension SBTRealTimeStatusVCtr{
-
-
- func sendLoadSwitchCMD(_ switchOn : Bool) {
-
- var arr : [String] = [String]()
- if switchOn == true {
- arr = ["FF06010A0080"] // 1000 0000
- }else{
- arr = ["FF06010A0000"]
- }
- log.debug("设置负载开关 -- arr ---| ---\(arr)")
-
- BabyBluetoothSwift.shareInstance()?.writeData(arr.first, completionHandler: { (result) in
- log.debug("发送完成 --\(result)")
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: kNotifitionSBTDeviceDetaiVCtrRealTimerStart), object: nil)
- })
- }
-
-
- //注册通知、 获取数据
- func notificationRegister() {
- NotificationCenter.default.addObserver(self, selector: #selector(SBTRealTimeStatusVCtr.uartDataReciveNotify(_:)), name: NSNotification.Name(rawValue: kBabyBluetoothNotificationUartDataRecieve), object: nil)
-
-
-
- //获取数据
- NotificationCenter.default.addObserver(self, selector: #selector(SBTRealTimeStatusVCtr.updateChuange), name: NSNotification.Name(rawValue: kNotifisionDeviceDatailDataRealDataRecieve), object: nil)
-
- }
-
- @objc func updateChuange(_ notif:Notification) {
- log.debug(notif.userInfo)
- let dataDict = notif.userInfo
-
- loadUIRefresh(dataDict as! [String : Any])
-
- }
- //注销通知
- func notificationUnRegister() {
- NotificationCenter.default.removeObserver(self)
- }
- //通知事件
- @objc func uartDataReciveNotify(_ notify:Notification) {
-
- }
-
- func loadUIRefresh(_ dataDict : [String: Any] ) {
- DispatchQueue.main.async {
- self.dataSource?.removeAll()
- self.isSwitchHiddenArr?.removeAll()
-
- let key = DeviceDictKey()
- let solarVoltage = Float(dataDict[key.solarVoltage] as! String)
- let solarCurrent = Float(dataDict[key.solarCurrent] as! String)
- let solarPower = String(format: "%.0f", solarVoltage! * solarCurrent!)
- self.solarPowerValue = (dataDict[key.solarPower] as! String)
-
- let solarStatusStr = dataDict[key.solarStatus] as? String
- let value1 = RealTimeValue(itemValue: "\(dataDict[key.solarVoltage]!)V", itemValue2: "\(dataDict[key.solarCurrent]!)A" , itemValue3: "\(solarPower)W", status: solarStatusStr == "" ? "正常" : solarStatusStr, switchValue: "-")
-
-
- let batteryTemp1 = dataDict[key.batteryTemp]!
- var batterTempStr = ""
- let userDef = UserDefaults.standard
- let isCentigrade = userDef.value(forKey: TEMPISCENTIGRADE) as? String
- if isCentigrade != nil{
- if isCentigrade == "1"{
- batterTempStr = "\(batteryTemp1)℃"
- }else if isCentigrade == "0"{
- let fahrenhit = (batteryTemp1 as! String).centigradeToFahrenheit()
- batterTempStr = "\(fahrenhit)℉"
- }
- }else{
- batterTempStr = "\(batteryTemp1)℃"
- }
-
- let value2 = RealTimeValue(itemValue: "\(dataDict[key.batteryVoltage]!)V" , itemValue2: "\(dataDict[key.batteryCurrent]!)A", itemValue3: batterTempStr, status: dataDict[key.batteryStatus]as? String, switchValue: "-")
-
- let loadStatusStr = dataDict[key.loadStatus]as? String
- var loadSwitchValue = "1"
-
- if loadStatusStr == "Load_is_on".da_localizedStr() {
- loadSwitchValue = "1"
- }else{
- loadSwitchValue = "0"
- }
- let 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)
- self.dataSource?.append(value1)
- self.dataSource?.append(value2)
- self.dataSource?.append(value3)
- // let allDataDict = AppShare.dataDict
- let BatImprovChgVolt = dataDict[key.BatImprovChgVolt] as! String //提升充电电压 E008
-
- let batRateVolt = dataDict[key.BatRateVolt] as! String //系统电压 E003
- let IchageRage = dataDict[key.IchageRage] as! String // 额定充电电流 E001
- let a = Float(BatImprovChgVolt) //提升充电电压
- let b = Float(batRateVolt) // 系统电压
- let c = Float(IchageRage) // 额定充电电流
- let solarPowerMaxFloat = a! * (b! / 12) * c!
-
- log.debug("表盘最大值 \(solarPowerMaxFloat)")
- let solarPowerFloat = Float(solarPower)
- var curentSolarPower = Float(0.0)
- if solarPowerFloat != 0.0 {
- curentSolarPower = solarPowerFloat! / solarPowerMaxFloat
- }else{
- curentSolarPower = 0.0
- }
-
- log.debug("当前功率-- \(curentSolarPower)")
-
- self.solarPower = CGFloat(curentSolarPower)
- // let LoadMode = allDataDict[key.DcLoadMode] as! String
- // if LoadMode == "手动模式"{
- // self.isManual = true
- // }
- self.isSwitchHiddenArr = [true,true,false]
- //self.createUI()
- self.tableView.reloadData()
- }
- }
- // 刷新数据 刷新当前页
-
- func initData() {
- titleArr = [ReatTimeName]()
- dataSource = [RealTimeValue]()
-
- let model1 = ReatTimeName(title: "Solar_panel".da_localizedStr(), itemName1: "Voltage".da_localizedStr(), itemName2: "Current".da_localizedStr(), itemName3: "Power".da_localizedStr())
- let model2 = ReatTimeName(title: "Battery".da_localizedStr(), itemName1: "Voltage".da_localizedStr(), itemName2: "Current".da_localizedStr(), itemName3: "Temperature".da_localizedStr())
- let model3 = ReatTimeName(title: "Load".da_localizedStr(), itemName1: "Voltage".da_localizedStr(), itemName2: "Current".da_localizedStr(), itemName3: "Power".da_localizedStr())
-
- titleArr?.append(model1)
- titleArr?.append(model2)
- titleArr?.append(model3)
-
- if self.isDemo == true {
- let data = SBTData()
-
- getData(data.DemoData)
- }else{
- let plist = CLDeviceDataPlist()
- let dataDict = plist.findData(deviceDetailPlist, key: self.bleKey!)
-
- getData(dataDict as! [String : Any])
-
- }
-
- }
- //ff 10 00 49 00 10 20 31 32 333435 36373839 30 00 00 00 00 00 00 59 d5
- func getData(_ dataDict:[String:Any]) {
-
- isSwitchHiddenArr?.removeAll()
- dataSource?.removeAll()
- let key = DeviceDictKey()
- let solarVoltage = Float(dataDict[key.solarVoltage] as! String)
- let solarCurrent = Float(dataDict[key.solarCurrent] as! String)
- let solarPower = String(format: "%.0f", solarVoltage! * solarCurrent!)
- self.solarPowerValue = (dataDict[key.solarPower] as! String)
- let solarStatusStr = dataDict[key.solarStatus] as? String
- let value1 = RealTimeValue(itemValue: "\(dataDict[key.solarVoltage]!)V", itemValue2: "\(dataDict[key.solarCurrent]!)A" , itemValue3: "\(solarPower)W", status: solarStatusStr == "" ? "Normal".da_localizedStr() : solarStatusStr, switchValue: "-")
- let batteryTemp1 = dataDict[key.batteryTemp]!
- var batterTempStr = ""
- let userDef = UserDefaults.standard
- let isCentigrade = userDef.value(forKey: TEMPISCENTIGRADE) as? String
- if isCentigrade != nil{
- if isCentigrade == "1"{
- batterTempStr = "\(batteryTemp1)℃"
- }else if isCentigrade == "0"{
- let fahrenhit = (batteryTemp1 as! String).centigradeToFahrenheit()
- batterTempStr = "\(fahrenhit)℉"
- }
- }else{
- batterTempStr = "\(batteryTemp1)℃"
- }
- let value2 = RealTimeValue(itemValue: "\(dataDict[key.batteryVoltage]!)V" , itemValue2: "\(dataDict[key.batteryCurrent]!)A", itemValue3: batterTempStr, status: dataDict[key.batteryStatus]as? String, switchValue: "-")
- let loadStatusStr = dataDict[key.loadStatus]as? String
- var loadSwitchValue = "1"
-
- if loadStatusStr == "Load_is_on".da_localizedStr() {
- loadSwitchValue = "1"
- }else{
- loadSwitchValue = "0"
- }
-
- 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)
-
- if self.isDemo == true{
- 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")
-
- }
- dataSource?.append(value1)
- dataSource?.append(value2)
- dataSource?.append(value3)
-
- if self.isDemo == false {
- let allDataDict = AppShare.dataDict
- let BatImprovChgVolt = allDataDict[key.BatImprovChgVolt] as! String //提升充电电压
- let IchageRage = allDataDict[key.IchageRage] as! String // 额定充电电流
- let batRateVolt = allDataDict[key.BatRateVolt] as! String //系统电压
- let a = Float(BatImprovChgVolt)
- let b = Float(batRateVolt)
- let c = Float(IchageRage)
- let solarPowerMaxFloat = a! * (b! / 12) * c!
-
- log.debug("表盘最大值 \(solarPowerMaxFloat)")
- let solarPowerFloat = Float(solarPower)
- var curentSolarPower = Float(0.0)
- if solarPowerFloat != 0.0 {
- curentSolarPower = solarPowerFloat! / solarPowerMaxFloat
- }else{
- curentSolarPower = 0.0
- }
-
- log.debug("当前功率-- \(curentSolarPower)")
-
- self.solarPower = CGFloat(curentSolarPower)
- let LoadMode = allDataDict[key.DcLoadMode] as! String
- // if LoadMode == "手动模式"{
- self.isManual = true
- // }
- }else{
- let demoeData = SBTData().DemoData
- let BatImprovChgVolt = demoeData[key.BatImprovChgVolt] as! String //提升充电电压
- let IchageRage = demoeData[key.IchageRage] as! String // 额定充电电流
- let batRateVolt = demoeData[key.BatRateVolt] as! String //系统电压
- let a = Float(BatImprovChgVolt)
- let b = Float(batRateVolt)
- let c = Float(IchageRage)
- let solarPowerMaxFloat = a! * (b! / 12) * c!
-
- log.debug("表盘最大值 \(solarPowerMaxFloat)")
- let solarPowerFloat = Float(solarPower)
- var curentSolarPower = Float(0.0)
- if solarPowerFloat != 0.0 {
- curentSolarPower = solarPowerFloat! / solarPowerMaxFloat
- }else{
- curentSolarPower = 0.0
- }
-
- log.debug("当前功率-- \(curentSolarPower)")
-
- self.solarPower = CGFloat(curentSolarPower)
-
- let LoadMode = demoeData[key.DcLoadMode] as! String
-
- // if LoadMode == "手动模式"{
- self.isManual = true
- // }
-
- }
-
-
-
- isSwitchHiddenArr = [true,true,false]
- }
- }
|