diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 99731ed..ed32f72 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -4,14 +4,17 @@ import android.net.wifi.WifiManager import android.os.Handler import android.view.View +import androidx.lifecycle.ViewModelProvider import com.alibaba.fastjson.JSONObject import com.casic.br.R import com.casic.br.extensions.diffDate +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.bean.DeviceBean import kotlinx.android.synthetic.main.fragment_device_rangehood_status.* +import java.util.* class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { @@ -22,6 +25,9 @@ private val kTag = "StatusPageFragment" private var isDeviceWorking = false private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private val paramObject by lazy { org.json.JSONObject() }//数据Json对象 + private val dataTimer by lazy { Timer() }//数据上传Timer + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_device_rangehood_status @@ -31,6 +37,7 @@ override fun initData() { weakReference = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] } override fun onResume() { @@ -45,8 +52,12 @@ if (wifiStatusSwitch.isChecked) { wifiLayout.visibility = View.VISIBLE wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + + paramObject.put("wifiStatus", "ON") + paramObject.put("wifiName", wifiNameView.text) } else { wifiLayout.visibility = View.GONE + paramObject.put("wifiStatus", "OFF") } } @@ -55,7 +66,14 @@ } override fun initEvent() { - + //每隔5s传一次数据到服务器 + dataTimer.schedule(object : TimerTask() { + override fun run() { + val obj = org.json.JSONObject() + obj.put("cookerHoodInfo", paramObject) + deviceViewModel.addDeviceData(obj) + } + }, 0, 5000) } private val callback = Handler.Callback { message -> @@ -66,14 +84,27 @@ when (it) { "1" -> {//开关机 isDeviceWorking = parseObject[it] as Boolean + val switchStatus = if (isDeviceWorking) { + "1" + } else { + "0" + } + paramObject.put("switchStatus", switchStatus) } "11" -> {//设备状态,[off, low, high, strong, air, fangdaoguan, wash, delay, xunhang] val status = parseObject[it] as String - deviceStateView.text = if (status == "off") { - "已关机" - } else { - "工作中" + deviceStateView.text = when (status) { + "low" -> "低档" + "high" -> "高档" + "strong" -> "爆炒" + "air" -> "假日通风" + "fangdaoguan" -> "防倒灌" + "wash" -> "清洁" + "delay" -> "延迟关机" + "xunhang" -> "巡航" + else -> "OFF" } + paramObject.put("workStatus", status) } "12" -> {//累计工作时间 workingTimeView.text = if (isDeviceWorking) { @@ -81,6 +112,7 @@ } else { "0分" } + paramObject.put("runTime", workingTimeView.text) } "106" -> {//烟灶联动 val isLinkage = parseObject[it] as Boolean @@ -89,6 +121,12 @@ } else { "关" } + val smokeStove = if (isLinkage) { + "1" + } else { + "0" + } + paramObject.put("smokeStove", smokeStove) } "107" -> {//倒油提醒 val isPourOil = parseObject[it] as Boolean @@ -97,6 +135,12 @@ } else { "关" } + val oilPouringReminder = if (isPourOil) { + "1" + } else { + "0" + } + paramObject.put("oilPouringReminder", oilPouringReminder) } } } @@ -105,6 +149,9 @@ val deviceBean = message.obj as DeviceBean deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") ipAddressView.text = deviceBean.ip + + paramObject.put("usageTime", deviceUsedTimeView.text) + paramObject.put("deviceId", deviceBean.devId) } } true diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 99731ed..ed32f72 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -4,14 +4,17 @@ import android.net.wifi.WifiManager import android.os.Handler import android.view.View +import androidx.lifecycle.ViewModelProvider import com.alibaba.fastjson.JSONObject import com.casic.br.R import com.casic.br.extensions.diffDate +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.bean.DeviceBean import kotlinx.android.synthetic.main.fragment_device_rangehood_status.* +import java.util.* class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { @@ -22,6 +25,9 @@ private val kTag = "StatusPageFragment" private var isDeviceWorking = false private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private val paramObject by lazy { org.json.JSONObject() }//数据Json对象 + private val dataTimer by lazy { Timer() }//数据上传Timer + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_device_rangehood_status @@ -31,6 +37,7 @@ override fun initData() { weakReference = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] } override fun onResume() { @@ -45,8 +52,12 @@ if (wifiStatusSwitch.isChecked) { wifiLayout.visibility = View.VISIBLE wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + + paramObject.put("wifiStatus", "ON") + paramObject.put("wifiName", wifiNameView.text) } else { wifiLayout.visibility = View.GONE + paramObject.put("wifiStatus", "OFF") } } @@ -55,7 +66,14 @@ } override fun initEvent() { - + //每隔5s传一次数据到服务器 + dataTimer.schedule(object : TimerTask() { + override fun run() { + val obj = org.json.JSONObject() + obj.put("cookerHoodInfo", paramObject) + deviceViewModel.addDeviceData(obj) + } + }, 0, 5000) } private val callback = Handler.Callback { message -> @@ -66,14 +84,27 @@ when (it) { "1" -> {//开关机 isDeviceWorking = parseObject[it] as Boolean + val switchStatus = if (isDeviceWorking) { + "1" + } else { + "0" + } + paramObject.put("switchStatus", switchStatus) } "11" -> {//设备状态,[off, low, high, strong, air, fangdaoguan, wash, delay, xunhang] val status = parseObject[it] as String - deviceStateView.text = if (status == "off") { - "已关机" - } else { - "工作中" + deviceStateView.text = when (status) { + "low" -> "低档" + "high" -> "高档" + "strong" -> "爆炒" + "air" -> "假日通风" + "fangdaoguan" -> "防倒灌" + "wash" -> "清洁" + "delay" -> "延迟关机" + "xunhang" -> "巡航" + else -> "OFF" } + paramObject.put("workStatus", status) } "12" -> {//累计工作时间 workingTimeView.text = if (isDeviceWorking) { @@ -81,6 +112,7 @@ } else { "0分" } + paramObject.put("runTime", workingTimeView.text) } "106" -> {//烟灶联动 val isLinkage = parseObject[it] as Boolean @@ -89,6 +121,12 @@ } else { "关" } + val smokeStove = if (isLinkage) { + "1" + } else { + "0" + } + paramObject.put("smokeStove", smokeStove) } "107" -> {//倒油提醒 val isPourOil = parseObject[it] as Boolean @@ -97,6 +135,12 @@ } else { "关" } + val oilPouringReminder = if (isPourOil) { + "1" + } else { + "0" + } + paramObject.put("oilPouringReminder", oilPouringReminder) } } } @@ -105,6 +149,9 @@ val deviceBean = message.obj as DeviceBean deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") ipAddressView.text = deviceBean.ip + + paramObject.put("usageTime", deviceUsedTimeView.text) + paramObject.put("deviceId", deviceBean.devId) } } true diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 8c55803..40b71c3 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -107,7 +107,7 @@ suspend fun uploadImage(@Part file: MultipartBody.Part): String /** - * Banner + * 添加设备 */ @POST("/deviceInfo/add") suspend fun addDevice( @@ -116,6 +116,15 @@ ): String /** + * 上传设备数据 + */ + @POST("/deviceInfo/data") + suspend fun addDeviceData( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 推送消息列表 */ @POST("/appPushInfo/listPage") diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 99731ed..ed32f72 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -4,14 +4,17 @@ import android.net.wifi.WifiManager import android.os.Handler import android.view.View +import androidx.lifecycle.ViewModelProvider import com.alibaba.fastjson.JSONObject import com.casic.br.R import com.casic.br.extensions.diffDate +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.bean.DeviceBean import kotlinx.android.synthetic.main.fragment_device_rangehood_status.* +import java.util.* class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { @@ -22,6 +25,9 @@ private val kTag = "StatusPageFragment" private var isDeviceWorking = false private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private val paramObject by lazy { org.json.JSONObject() }//数据Json对象 + private val dataTimer by lazy { Timer() }//数据上传Timer + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_device_rangehood_status @@ -31,6 +37,7 @@ override fun initData() { weakReference = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] } override fun onResume() { @@ -45,8 +52,12 @@ if (wifiStatusSwitch.isChecked) { wifiLayout.visibility = View.VISIBLE wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + + paramObject.put("wifiStatus", "ON") + paramObject.put("wifiName", wifiNameView.text) } else { wifiLayout.visibility = View.GONE + paramObject.put("wifiStatus", "OFF") } } @@ -55,7 +66,14 @@ } override fun initEvent() { - + //每隔5s传一次数据到服务器 + dataTimer.schedule(object : TimerTask() { + override fun run() { + val obj = org.json.JSONObject() + obj.put("cookerHoodInfo", paramObject) + deviceViewModel.addDeviceData(obj) + } + }, 0, 5000) } private val callback = Handler.Callback { message -> @@ -66,14 +84,27 @@ when (it) { "1" -> {//开关机 isDeviceWorking = parseObject[it] as Boolean + val switchStatus = if (isDeviceWorking) { + "1" + } else { + "0" + } + paramObject.put("switchStatus", switchStatus) } "11" -> {//设备状态,[off, low, high, strong, air, fangdaoguan, wash, delay, xunhang] val status = parseObject[it] as String - deviceStateView.text = if (status == "off") { - "已关机" - } else { - "工作中" + deviceStateView.text = when (status) { + "low" -> "低档" + "high" -> "高档" + "strong" -> "爆炒" + "air" -> "假日通风" + "fangdaoguan" -> "防倒灌" + "wash" -> "清洁" + "delay" -> "延迟关机" + "xunhang" -> "巡航" + else -> "OFF" } + paramObject.put("workStatus", status) } "12" -> {//累计工作时间 workingTimeView.text = if (isDeviceWorking) { @@ -81,6 +112,7 @@ } else { "0分" } + paramObject.put("runTime", workingTimeView.text) } "106" -> {//烟灶联动 val isLinkage = parseObject[it] as Boolean @@ -89,6 +121,12 @@ } else { "关" } + val smokeStove = if (isLinkage) { + "1" + } else { + "0" + } + paramObject.put("smokeStove", smokeStove) } "107" -> {//倒油提醒 val isPourOil = parseObject[it] as Boolean @@ -97,6 +135,12 @@ } else { "关" } + val oilPouringReminder = if (isPourOil) { + "1" + } else { + "0" + } + paramObject.put("oilPouringReminder", oilPouringReminder) } } } @@ -105,6 +149,9 @@ val deviceBean = message.obj as DeviceBean deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") ipAddressView.text = deviceBean.ip + + paramObject.put("usageTime", deviceUsedTimeView.text) + paramObject.put("deviceId", deviceBean.devId) } } true diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 8c55803..40b71c3 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -107,7 +107,7 @@ suspend fun uploadImage(@Part file: MultipartBody.Part): String /** - * Banner + * 添加设备 */ @POST("/deviceInfo/add") suspend fun addDevice( @@ -116,6 +116,15 @@ ): String /** + * 上传设备数据 + */ + @POST("/deviceInfo/data") + suspend fun addDeviceData( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 推送消息列表 */ @POST("/appPushInfo/listPage") diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 0736ad3..4baebdb 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -256,6 +256,16 @@ } /** + * 添加设备数据到自己服务器 + */ + suspend fun addDeviceData(deviceData: JSONObject): String { + val requestBody = deviceData.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addDeviceData(AuthenticationHelper.token!!, requestBody) + } + + /** * 推送消息列表 */ suspend fun obtainMessageListByPage( diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt index 99731ed..ed32f72 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/StatusPageFragment.kt @@ -4,14 +4,17 @@ import android.net.wifi.WifiManager import android.os.Handler import android.view.View +import androidx.lifecycle.ViewModelProvider import com.alibaba.fastjson.JSONObject import com.casic.br.R import com.casic.br.extensions.diffDate +import com.casic.br.vm.DeviceViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.bean.DeviceBean import kotlinx.android.synthetic.main.fragment_device_rangehood_status.* +import java.util.* class StatusPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() { @@ -22,6 +25,9 @@ private val kTag = "StatusPageFragment" private var isDeviceWorking = false private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager } + private val paramObject by lazy { org.json.JSONObject() }//数据Json对象 + private val dataTimer by lazy { Timer() }//数据上传Timer + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_device_rangehood_status @@ -31,6 +37,7 @@ override fun initData() { weakReference = WeakReferenceHandler(callback) + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] } override fun onResume() { @@ -45,8 +52,12 @@ if (wifiStatusSwitch.isChecked) { wifiLayout.visibility = View.VISIBLE wifiNameView.text = wifi.connectionInfo.ssid.replace("\"", "") + + paramObject.put("wifiStatus", "ON") + paramObject.put("wifiName", wifiNameView.text) } else { wifiLayout.visibility = View.GONE + paramObject.put("wifiStatus", "OFF") } } @@ -55,7 +66,14 @@ } override fun initEvent() { - + //每隔5s传一次数据到服务器 + dataTimer.schedule(object : TimerTask() { + override fun run() { + val obj = org.json.JSONObject() + obj.put("cookerHoodInfo", paramObject) + deviceViewModel.addDeviceData(obj) + } + }, 0, 5000) } private val callback = Handler.Callback { message -> @@ -66,14 +84,27 @@ when (it) { "1" -> {//开关机 isDeviceWorking = parseObject[it] as Boolean + val switchStatus = if (isDeviceWorking) { + "1" + } else { + "0" + } + paramObject.put("switchStatus", switchStatus) } "11" -> {//设备状态,[off, low, high, strong, air, fangdaoguan, wash, delay, xunhang] val status = parseObject[it] as String - deviceStateView.text = if (status == "off") { - "已关机" - } else { - "工作中" + deviceStateView.text = when (status) { + "low" -> "低档" + "high" -> "高档" + "strong" -> "爆炒" + "air" -> "假日通风" + "fangdaoguan" -> "防倒灌" + "wash" -> "清洁" + "delay" -> "延迟关机" + "xunhang" -> "巡航" + else -> "OFF" } + paramObject.put("workStatus", status) } "12" -> {//累计工作时间 workingTimeView.text = if (isDeviceWorking) { @@ -81,6 +112,7 @@ } else { "0分" } + paramObject.put("runTime", workingTimeView.text) } "106" -> {//烟灶联动 val isLinkage = parseObject[it] as Boolean @@ -89,6 +121,12 @@ } else { "关" } + val smokeStove = if (isLinkage) { + "1" + } else { + "0" + } + paramObject.put("smokeStove", smokeStove) } "107" -> {//倒油提醒 val isPourOil = parseObject[it] as Boolean @@ -97,6 +135,12 @@ } else { "关" } + val oilPouringReminder = if (isPourOil) { + "1" + } else { + "0" + } + paramObject.put("oilPouringReminder", oilPouringReminder) } } } @@ -105,6 +149,9 @@ val deviceBean = message.obj as DeviceBean deviceUsedTimeView.text = String.format("${deviceBean.time.toString().diffDate()}天") ipAddressView.text = deviceBean.ip + + paramObject.put("usageTime", deviceUsedTimeView.text) + paramObject.put("deviceId", deviceBean.devId) } } true diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 8c55803..40b71c3 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -107,7 +107,7 @@ suspend fun uploadImage(@Part file: MultipartBody.Part): String /** - * Banner + * 添加设备 */ @POST("/deviceInfo/add") suspend fun addDevice( @@ -116,6 +116,15 @@ ): String /** + * 上传设备数据 + */ + @POST("/deviceInfo/data") + suspend fun addDeviceData( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 推送消息列表 */ @POST("/appPushInfo/listPage") diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 0736ad3..4baebdb 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -256,6 +256,16 @@ } /** + * 添加设备数据到自己服务器 + */ + suspend fun addDeviceData(deviceData: JSONObject): String { + val requestBody = deviceData.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addDeviceData(AuthenticationHelper.token!!, requestBody) + } + + /** * 推送消息列表 */ suspend fun obtainMessageListByPage( diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt index 55ecbb5..241ce48 100644 --- a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt @@ -10,6 +10,7 @@ import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState import com.tuya.smart.sdk.bean.DeviceBean +import org.json.JSONObject class DeviceViewModel : BaseViewModel() { fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel) = launch({ @@ -25,4 +26,9 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun addDeviceData(dataModel: JSONObject) = + launch({ RetrofitServiceManager.addDeviceData(dataModel) }, { + it.printStackTrace() + }) } \ No newline at end of file