diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml
new file mode 100644
index 0000000..93a6ce2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml
new file mode 100644
index 0000000..93a6ce2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml
new file mode 100644
index 0000000..a09a07f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_2.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml
new file mode 100644
index 0000000..93a6ce2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml
new file mode 100644
index 0000000..a09a07f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_2.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml
new file mode 100644
index 0000000..21e3d58
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_3.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml
new file mode 100644
index 0000000..93a6ce2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml
new file mode 100644
index 0000000..a09a07f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_2.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml
new file mode 100644
index 0000000..21e3d58
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_3.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml
new file mode 100644
index 0000000..21fa5b9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_4.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml
new file mode 100644
index 0000000..93a6ce2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml
new file mode 100644
index 0000000..a09a07f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_2.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml
new file mode 100644
index 0000000..21e3d58
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_3.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml
new file mode 100644
index 0000000..21fa5b9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_4.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_motion_senser.xml b/app/src/main/res/layout/activity_motion_senser.xml
new file mode 100644
index 0000000..87fde81
--- /dev/null
+++ b/app/src/main/res/layout/activity_motion_senser.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/SmartKitchen.jks b/app/SmartKitchen.jks
new file mode 100644
index 0000000..5ab2be7
--- /dev/null
+++ b/app/SmartKitchen.jks
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 03d3f5d..445738d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_motion_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ holder.logTimeView.text = dataRows[position]
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val logTimeView: TextView = itemView.findViewById(R.id.logTimeView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index b57604b..c883156 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.util.Log
+import com.casic.br.R
import com.casic.br.callback.OnImageCompressListener
import com.casic.br.model.ErrorMessageModel
import com.casic.br.utils.LocaleConstant
@@ -122,4 +123,23 @@
"wg2" -> "智能网关"
else -> "其他"
}
+}
+
+//电量转图片
+fun String.toBatteryImage(): Int {
+ if (this.isBlank()) {
+ return R.drawable.ic_battery_0
+ }
+ try {
+ when (this.toInt()) {
+ in 0..10 -> return R.drawable.ic_battery_0
+ in 11..30 -> return R.drawable.ic_battery_1
+ in 31..60 -> return R.drawable.ic_battery_2
+ in 61..90 -> return R.drawable.ic_battery_3
+ in 91..100 -> return R.drawable.ic_battery_4
+ }
+ } catch (e: ClassCastException) {
+ e.printStackTrace()
+ }
+ return R.drawable.ic_battery_0
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 7f4b807..cf0ef3d 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -11,14 +11,12 @@
import com.casic.br.extensions.selectCategory
import com.casic.br.model.RecommendModel
import com.casic.br.utils.DeserializeModel
-import com.casic.br.utils.LocaleConstant
import com.casic.br.view.AddDeviceActivity
import com.casic.br.view.AllDeviceActivity
import com.casic.br.view.LoginActivity
import com.casic.br.view.device.*
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
@@ -61,7 +59,6 @@
val recommendAdapter = RecommendAdapter(requireContext(), recommendModels)
recommendRecyclerView.adapter = recommendAdapter
recommendAdapter.setOnItemClickListener(object : RecommendAdapter.OnItemClickListener {
-
override fun onItemClick(position: Int) {
}
@@ -80,12 +77,7 @@
override fun onResume() {
super.onResume()
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
val deviceModels = bean.deviceList
@@ -158,7 +150,13 @@
}
selectedCategory.contains("wg2") -> {
//网关
- requireContext().navigatePageTo(deviceModel.devId)
+ requireContext().navigatePageTo(
+ deviceModel.devId
+ )
+ }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ requireContext().navigatePageTo()
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
index 51c107c..695b39a 100644
--- a/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
+++ b/app/src/main/java/com/casic/br/utils/DeserializeModel.kt
@@ -20,6 +20,24 @@
return userDetailModel.data
}
+ fun getHomeId(): Long {
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ return if (homeId == "") {
+ val userModel = getUserModel()
+ if (userModel == null) {
+ Long.MAX_VALUE
+ } else {
+ if (userModel.syncDeptid == "") {
+ Long.MAX_VALUE
+ } else {
+ userModel.syncDeptid.toLong()
+ }
+ }
+ } else {
+ homeId.toLong()
+ }
+ }
+
fun isLogin(): Boolean {
val loginTime = SaveKeyValues.getValue(LocaleConstant.LOGIN_TIME, 0L) as Long
return if (loginTime == 0L) {
diff --git a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
index 237917f..6bd7edc 100644
--- a/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AllDeviceActivity.kt
@@ -6,7 +6,7 @@
import com.casic.br.R
import com.casic.br.adapter.AddedDeviceAdapter
import com.casic.br.extensions.selectCategory
-import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.DeserializeModel
import com.casic.br.view.device.CookerActivity
import com.casic.br.view.device.FireplaceActivity
import com.casic.br.view.device.RangeHoodActivity
@@ -16,7 +16,6 @@
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.bean.HomeBean
@@ -45,12 +44,7 @@
}
override fun initData() {
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- Log.e(kTag, "homeId is null")
- return
- }
- TuyaHomeSdk.newHomeInstance(homeId.toLong())
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
.getHomeDetail(object : ITuyaHomeResultCallback {
override fun onSuccess(bean: HomeBean) {
deviceModels = bean.deviceList
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index a796171..8a2c6c8 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -7,14 +7,12 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
@@ -53,9 +51,8 @@
return@setOnClickListener
}
LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
val userModel = DeserializeModel.getUserModel()!!
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(DeserializeModel.getHomeId(),
object : ITuyaActivatorGetToken {
override fun onSuccess(token: String) {
//调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
@@ -75,7 +72,7 @@
override fun onActiveSuccess(devResp: DeviceBean?) {
//将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(devResp!!,userModel)
+ deviceViewModel.addDevice(devResp!!, userModel)
}
override fun onStep(step: String?, data: Any?) {
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
index b5f86e8..e1be1b1 100644
--- a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -7,7 +7,6 @@
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
-import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.casic.br.widgets.WaterRippleView
import com.gyf.immersionbar.ImmersionBar
@@ -15,7 +14,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.android.ble.api.LeScanSetting
import com.tuya.smart.android.ble.api.ScanDeviceBean
@@ -134,44 +132,44 @@
nextStepButton.setOnClickListener {
LoadingDialogHub.show(this, "设备配网中,请稍后")
val userModel = DeserializeModel.getUserModel()!!
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val homeId = DeserializeModel.getHomeId()
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
- ITuyaActivatorGetToken {
- override fun onSuccess(token: String?) {
- val multiModeActivatorBean = MultiModeActivatorBean()
- multiModeActivatorBean.homeId = homeId.toLong()
- multiModeActivatorBean.deviceType = deviceBean!!.deviceType
- multiModeActivatorBean.uuid = deviceBean!!.uuid
- multiModeActivatorBean.address = deviceBean!!.address
- multiModeActivatorBean.mac = deviceBean!!.mac
- multiModeActivatorBean.ssid = params[0]
- multiModeActivatorBean.pwd = params[1]
- multiModeActivatorBean.token = token
- multiModeActivatorBean.timeout = 120000
+ TuyaHomeSdk.getActivatorInstance()
+ .getActivatorToken(homeId, object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
- // 开始配网
- TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
- multiModeActivatorBean,
- object : IMultiModeActivatorListener {
- override fun onSuccess(deviceBean: DeviceBean?) {
- //将绑定的设备存入自己的数据库
- deviceViewModel.addDevice(deviceBean!!, userModel)
- }
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
- override fun onFailure(code: Int, msg: String?, handle: Any?) {
- Log.d(kTag, "errorMsg: $msg")
- "添加设备失败".show(context)
- LoadingDialogHub.dismiss()
- }
- })
- }
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
- override fun onFailure(errorCode: String?, errorMsg: String?) {
- "获取设备配网Token失败,无法配网".show(context)
- LoadingDialogHub.dismiss()
- }
- })
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
new file mode 100644
index 0000000..5ecd0c8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/MotionSensorActivity.kt
@@ -0,0 +1,128 @@
+package com.casic.br.view.device
+
+import android.os.Handler
+import android.util.Log
+import android.view.View
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.adapter.MotionLogAdapter
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.extensions.selectCategory
+import com.casic.br.extensions.toBatteryImage
+import com.casic.br.utils.DeserializeModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.timestampToTime
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import kotlinx.android.synthetic.main.activity_motion_senser.*
+import kotlinx.android.synthetic.main.include_device_title.*
+import java.util.*
+
+/**
+ * 运动传感器
+ * TODO 数据上报暂缓
+ * */
+class MotionSensorActivity : KotlinBaseActivity() {
+
+ private val kTag = "MotionSensorActivity"
+ private val context = this@MotionSensorActivity
+ private val dataTimer by lazy { Timer() }//数据上传Timer
+ private val timeLinkedList = LinkedList()
+ private lateinit var weakReference: WeakReferenceHandler
+ private lateinit var motionAdapter: MotionLogAdapter
+ private var dataBeans: MutableList = ArrayList()
+
+ override fun initLayoutView(): Int = R.layout.activity_motion_senser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ motionAdapter = MotionLogAdapter(this, dataBeans)
+ motionRecyclerView.adapter = motionAdapter
+ //每隔5s传一次数据到服务器
+ dataTimer.schedule(object : TimerTask() {
+ override fun run() {
+ TuyaHomeSdk.newHomeInstance(DeserializeModel.getHomeId())
+ .getHomeDetail(object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean) {
+ bean.deviceList.forEach {
+ val selectedCategory = it.selectCategory()
+ if (selectedCategory.contains("0204")) {
+ //人体传感器
+ val msg = weakReference.obtainMessage()
+ msg.what = 2022102001
+ msg.obj = it
+ weakReference.sendMessage(msg)
+ }
+ }
+ }
+
+ override fun onError(errorCode: String, errorMsg: String) {
+ Log.d(kTag, "onError: $errorMsg")
+ }
+ })
+ }
+ }, 0, 5000)
+ }
+
+ private val callback = Handler.Callback { message ->
+ if (message.what == 2022102001) {
+ val it = message.obj as DeviceBean
+ deviceStateView.text = if (it.isOnline) {
+ "设备在线"
+ } else {
+ "设备已离线"
+ }
+ titleView.text = it.name
+ Glide.with(context)
+ .load(it.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ val value = it.dps["103"].toString()
+ batteryView.setBackgroundResource(value.toBatteryImage())
+ batteryValueView.text = "${value}%"
+
+ if (it.dps["101"] as Boolean) {
+ val time = (it.dpsTime["101"].toString().toLong()).timestampToTime()
+ timeLinkedList.add(time)
+ //需要判断当前最后一次时间喝上一次事件是否相同,相同就跳过
+ if (timeLinkedList.size == 1) {
+ dataBeans.add(timeLinkedList.last)
+ } else if (timeLinkedList.last != timeLinkedList[timeLinkedList.size - 2]) {
+ dataBeans.add(timeLinkedList.last)
+ }
+ motionAdapter.notifyDataSetChanged()
+ } else {
+ Log.d(kTag, "未检测到人体数据")
+ }
+ }
+ true
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ dataTimer.cancel()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
index 5ab7f58..39214b2 100644
--- a/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/SmartGatewayActivity.kt
@@ -82,11 +82,6 @@
.apply(RequestOptions.circleCropTransform())
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
-// deviceSubInstance.registerSubDevListener(object :TuyaSubDeviceListener(){
-// override fun onSubDevDpUpdate(nodeId: String?, dps: String?) {
-// Log.d(kTag, "onDpUpdate: $dps")
-// }
-// })
}
override fun onResume() {
@@ -131,10 +126,10 @@
val selectedCategory = deviceModel.selectCategory()
Log.d(kTag, "设备类型: $selectedCategory")
when {
-// selectedCategory.contains("rs") -> {
-// //热水器
-// navigatePageTo(deviceModel.devId)
-// }
+ selectedCategory.contains("0204") -> {
+ //人体传感器
+ navigatePageTo()
+ }
// selectedCategory.contains("yyj") -> {
// //油烟机
// navigatePageTo(deviceModel.devId)
diff --git a/app/src/main/res/drawable/ic_battery_0.xml b/app/src/main/res/drawable/ic_battery_0.xml
new file mode 100644
index 0000000..38425b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_0.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_1.xml b/app/src/main/res/drawable/ic_battery_1.xml
new file mode 100644
index 0000000..93a6ce2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_2.xml b/app/src/main/res/drawable/ic_battery_2.xml
new file mode 100644
index 0000000..a09a07f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_2.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_3.xml b/app/src/main/res/drawable/ic_battery_3.xml
new file mode 100644
index 0000000..21e3d58
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_3.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_battery_4.xml b/app/src/main/res/drawable/ic_battery_4.xml
new file mode 100644
index 0000000..21fa5b9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery_4.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_motion_senser.xml b/app/src/main/res/layout/activity_motion_senser.xml
new file mode 100644
index 0000000..87fde81
--- /dev/null
+++ b/app/src/main/res/layout/activity_motion_senser.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_motion_rv_l.xml b/app/src/main/res/layout/item_motion_rv_l.xml
new file mode 100644
index 0000000..fd907cc
--- /dev/null
+++ b/app/src/main/res/layout/item_motion_rv_l.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file