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.db.DBUtils
import com.common.commonlib.db.dao.WarningDao
import com.common.commonlib.db.entity.Warning
import com.yinuo.safetywatcher.TestUtils
import com.yinuo.safetywatcher.watcher.constant.CAMERA_DNS
@ -51,7 +50,7 @@ class App : CommonApplication() {
val warningList = warningDao.queryWarningsNoEndTime()
warningList?.apply {
forEach { warning ->
warning.endTime = trySetEndTime(warningDao, warning)
warning.endTime = trySetEndTime(warning)
}
warningDao.updateAll(warningList)
}
@ -80,8 +79,9 @@ class App : CommonApplication() {
}
}
private suspend fun trySetEndTime(warningDao: WarningDao, warning: Warning): Long {
val latest = warningDao.findLatestByName(warning.gasName)
return if (latest?.endTime!! > 0L) latest.endTime else System.currentTimeMillis()
private suspend fun trySetEndTime(warning: Warning): Long {
val gasDao = DBUtils.gasDao();
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.entity.Gas
import com.common.commonlib.db.entity.GasType
import com.common.commonlib.db.entity.Warning
import com.common.commonlib.utils.MMKVUtils
import com.common.serialport.utils.HexUtils
import com.yinuo.library.vlc.TxtOverlay
@ -148,29 +149,60 @@ object ParseHelper {
*/
private fun insertGasData(gasType: String, value: Double, unit: String, rangHexLong: Long) {
GlobalScope.launch {
// 设置水印数据
setOverlayData()
// TODO 阈值范围
val min = 0.0
val max = 0.0
// 存储量程最大值
MMKVUtils.put("range_${gasType}", "0$unit~$rangHexLong$unit")
// 构造气体数据
val timeMillis = System.currentTimeMillis()
val gas = Gas(timeMillis, gasType, value, unit)
val gas = Gas(timeMillis, gasType, value, unit, min, max)
val gasDao = DBUtils.gasDao()
gasDao.insert(gas)
// 存储范围最大值
MMKVUtils.put("range_${gasType}", "0$unit~$rangHexLong$unit")
try {
// 上传实时气体数据
tempGasData.add(gas)
if (tempGasData.size > GAS_CLOUD_UPLOAD_SIZE_ONCE) {
devicesApi.uploadGasData(tempGasData)
tempGasData.clear()
// TODO 告警处理
val warningDao = DBUtils.warningDao()
val warning = warningDao.findLatestByName(gasType)
if (value < min || value > max) {
if (warning == null || warning.endTime > 0) {
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 androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope
import com.common.commonlib.db.DBUtils
import com.common.commonlib.utils.NetworkHelper
import com.yinuo.library.vlc.IFrameCallBack
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.WifiHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
class HomeActivity : NoOptionsActivity() {
@ -105,11 +107,13 @@ class HomeActivity : NoOptionsActivity() {
//mHasSensorData = true
mBinding.errorView.visibility =
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)
// 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())
}
}
@ -148,12 +152,39 @@ class HomeActivity : NoOptionsActivity() {
AppData.setSensorData(true)
closeLoadingDialog()
changeViewStatus()
setWarnView()
watchSensor(DELAY_TIME_CHECK_SENSOR)
}
watchSensor(DELAY_TIME_CHECK_SENSOR)
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
android:id="@+id/tv_warn"
android:layout_width="@dimen/_300dp"
android:layout_width="@dimen/_536dp"
android:layout_height="wrap_content"
android:padding="@dimen/_12dp"
android:gravity="center"
android:minHeight="@dimen/_100dp"
android:layout_marginTop="@dimen/_100dp"
android:layout_centerHorizontal="true"

@ -18,6 +18,9 @@ interface GasDao {
@Query("SELECT * FROM gas WHERE time BETWEEN :startTime AND :endTime")
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
suspend fun insertAll(gases: List<Gas>)

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

Loading…
Cancel
Save