desc:首页报警

main
xiaowusky 2 years ago
parent c49e13497f
commit 13fe654299

@ -2,7 +2,6 @@ package com.yinuo.safetywatcher.watcher
import com.common.commonlib.CommonApplication import com.common.commonlib.CommonApplication
import com.common.commonlib.db.DBUtils import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.dao.WarningDao
import com.common.commonlib.db.entity.Warning import com.common.commonlib.db.entity.Warning
import com.yinuo.safetywatcher.TestUtils import com.yinuo.safetywatcher.TestUtils
import com.yinuo.safetywatcher.watcher.constant.CAMERA_DNS import com.yinuo.safetywatcher.watcher.constant.CAMERA_DNS
@ -51,7 +50,7 @@ class App : CommonApplication() {
val warningList = warningDao.queryWarningsNoEndTime() val warningList = warningDao.queryWarningsNoEndTime()
warningList?.apply { warningList?.apply {
forEach { warning -> forEach { warning ->
warning.endTime = trySetEndTime(warningDao, warning) warning.endTime = trySetEndTime(warning)
} }
warningDao.updateAll(warningList) warningDao.updateAll(warningList)
} }
@ -80,8 +79,9 @@ class App : CommonApplication() {
} }
} }
private suspend fun trySetEndTime(warningDao: WarningDao, warning: Warning): Long { private suspend fun trySetEndTime(warning: Warning): Long {
val latest = warningDao.findLatestByName(warning.gasName) val gasDao = DBUtils.gasDao();
return if (latest?.endTime!! > 0L) latest.endTime else System.currentTimeMillis() val latest = gasDao.findLatestByName(warning.gasName)
return latest?.time ?: System.currentTimeMillis()
} }
} }

@ -5,6 +5,7 @@ import android.os.Looper
import com.common.commonlib.db.DBUtils import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.Gas import com.common.commonlib.db.entity.Gas
import com.common.commonlib.db.entity.GasType import com.common.commonlib.db.entity.GasType
import com.common.commonlib.db.entity.Warning
import com.common.commonlib.utils.MMKVUtils import com.common.commonlib.utils.MMKVUtils
import com.common.serialport.utils.HexUtils import com.common.serialport.utils.HexUtils
import com.yinuo.library.vlc.TxtOverlay import com.yinuo.library.vlc.TxtOverlay
@ -148,29 +149,60 @@ object ParseHelper {
*/ */
private fun insertGasData(gasType: String, value: Double, unit: String, rangHexLong: Long) { private fun insertGasData(gasType: String, value: Double, unit: String, rangHexLong: Long) {
GlobalScope.launch { GlobalScope.launch {
// 设置水印数据 // TODO 阈值范围
setOverlayData() val min = 0.0
val max = 0.0
// 存储量程最大值
MMKVUtils.put("range_${gasType}", "0$unit~$rangHexLong$unit")
// 构造气体数据 // 构造气体数据
val timeMillis = System.currentTimeMillis() val timeMillis = System.currentTimeMillis()
val gas = Gas(timeMillis, gasType, value, unit) val gas = Gas(timeMillis, gasType, value, unit, min, max)
val gasDao = DBUtils.gasDao() val gasDao = DBUtils.gasDao()
gasDao.insert(gas) gasDao.insert(gas)
// 存储范围最大值
MMKVUtils.put("range_${gasType}", "0$unit~$rangHexLong$unit")
try { // TODO 告警处理
// 上传实时气体数据 val warningDao = DBUtils.warningDao()
tempGasData.add(gas) val warning = warningDao.findLatestByName(gasType)
if (tempGasData.size > GAS_CLOUD_UPLOAD_SIZE_ONCE) { if (value < min || value > max) {
devicesApi.uploadGasData(tempGasData) if (warning == null || warning.endTime > 0) {
tempGasData.clear() warningDao.insert(
Warning(
gasType,
value,
unit,
System.currentTimeMillis(),
min,
max
)
)
}
} else {
warning?.let {
it.endTime = System.currentTimeMillis()
warningDao.update(it)
} }
} catch (e: Exception) {
// e.printStackTrace()
LogUtils.v("uploadGasData error, ${e.message}")
} }
// 设置水印数据
setOverlayData()
// 实时数据上传后台
uploadGasData(gas)
}
}
private suspend fun uploadGasData(gas: Gas) {
try {
// 上传实时气体数据
tempGasData.add(gas)
if (tempGasData.size > GAS_CLOUD_UPLOAD_SIZE_ONCE) {
devicesApi.uploadGasData(tempGasData)
tempGasData.clear()
}
} catch (e: Exception) {
LogUtils.v("uploadGasData error, ${e.message}")
} }
} }

@ -6,6 +6,7 @@ import android.os.Process
import android.view.View import android.view.View
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.common.commonlib.db.DBUtils
import com.common.commonlib.utils.NetworkHelper import com.common.commonlib.utils.NetworkHelper
import com.yinuo.library.vlc.IFrameCallBack import com.yinuo.library.vlc.IFrameCallBack
import com.yinuo.library.vlc.RtspSurfaceRender2 import com.yinuo.library.vlc.RtspSurfaceRender2
@ -25,6 +26,7 @@ import com.yinuo.safetywatcher.watcher.utils.BatteryHelper
import com.yinuo.safetywatcher.watcher.utils.SimHelper import com.yinuo.safetywatcher.watcher.utils.SimHelper
import com.yinuo.safetywatcher.watcher.utils.WifiHelper import com.yinuo.safetywatcher.watcher.utils.WifiHelper
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class HomeActivity : NoOptionsActivity() { class HomeActivity : NoOptionsActivity() {
@ -105,11 +107,13 @@ class HomeActivity : NoOptionsActivity() {
//mHasSensorData = true //mHasSensorData = true
mBinding.errorView.visibility = mBinding.errorView.visibility =
if (!AppData.hasCameraData()) View.VISIBLE else View.GONE if (!AppData.hasCameraData()) View.VISIBLE else View.GONE
val errorRes = if (!AppData.hasCameraData() && !AppData.hasSensorData()) R.drawable.ic_nosingal else R.drawable.ic_icon val errorRes =
if (!AppData.hasCameraData() && !AppData.hasSensorData()) R.drawable.ic_nosingal else R.drawable.ic_icon
mBinding.errorView.setImageResource(errorRes) mBinding.errorView.setImageResource(errorRes)
// tipView // tipView
mBinding.tipView.visibility = if (!AppData.hasCameraData() && AppData.hasSensorData()) View.VISIBLE else View.GONE mBinding.tipView.visibility =
if (!AppData.hasCameraData() && AppData.hasSensorData()) View.VISIBLE else View.GONE
mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap()) mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap())
} }
} }
@ -148,12 +152,39 @@ class HomeActivity : NoOptionsActivity() {
AppData.setSensorData(true) AppData.setSensorData(true)
closeLoadingDialog() closeLoadingDialog()
changeViewStatus() changeViewStatus()
setWarnView()
watchSensor(DELAY_TIME_CHECK_SENSOR) watchSensor(DELAY_TIME_CHECK_SENSOR)
} }
watchSensor(DELAY_TIME_CHECK_SENSOR) watchSensor(DELAY_TIME_CHECK_SENSOR)
GasUtils.initPort() GasUtils.initPort()
} }
/**
* 设置告警视图展示
*/
private fun setWarnView() {
GlobalScope.launch {
val warningDao = DBUtils.warningDao()
val warningList = warningDao.queryWarningsNoEndTime()
val builder = StringBuilder()
warningList?.forEachIndexed { index, it ->
builder.append(it.gasName).append("浓度异常,")
.append("当前值: ${it.gasValue} ${it.unit}")
if (index != warningList.size - 1) {
builder.append("\n")
}
}
launch(Dispatchers.Main) {
if (builder.toString().isNotEmpty()) {
mBinding.tvWarn.text = builder.toString()
mBinding.tvWarn.visibility = View.VISIBLE
} else {
mBinding.tvWarn.visibility = View.GONE
}
}
}
}
/** /**
* 监视传感器 * 监视传感器
*/ */

@ -155,8 +155,10 @@
<TextView <TextView
android:id="@+id/tv_warn" android:id="@+id/tv_warn"
android:layout_width="@dimen/_300dp" android:layout_width="@dimen/_536dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/_12dp"
android:gravity="center"
android:minHeight="@dimen/_100dp" android:minHeight="@dimen/_100dp"
android:layout_marginTop="@dimen/_100dp" android:layout_marginTop="@dimen/_100dp"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"

@ -18,6 +18,9 @@ interface GasDao {
@Query("SELECT * FROM gas WHERE time BETWEEN :startTime AND :endTime") @Query("SELECT * FROM gas WHERE time BETWEEN :startTime AND :endTime")
suspend fun getAllByTime(startTime: Long, endTime: Long): List<Gas> suspend fun getAllByTime(startTime: Long, endTime: Long): List<Gas>
@Query("SELECT * FROM gas WHERE gas_name IS :name ORDER BY id DESC LIMIT 1")
suspend fun findLatestByName(name: String): Gas?
@Insert @Insert
suspend fun insertAll(gases: List<Gas>) suspend fun insertAll(gases: List<Gas>)

@ -52,7 +52,7 @@ public class RtspHelper {
options.add("--audio-time-stretch"); // time stretching options.add("--audio-time-stretch"); // time stretching
options.add("-vvv"); // verbosity options.add("-vvv"); // verbosity
options.add("--file-caching=2000"); options.add("--file-caching=2000");
options.add("--rtsp-frame-buffer-size=81920"); options.add("--rtsp-frame-buffer-size=163840");
options.add("--rtsp-tcp"); options.add("--rtsp-tcp");
mVlc = new LibVLC(Objects.requireNonNull(CommonApplication.Companion.getContext()), options); mVlc = new LibVLC(Objects.requireNonNull(CommonApplication.Companion.getContext()), options);

Loading…
Cancel
Save