在传感器监控系统中,我用DolphinDB流数据异常检测引擎实现2分钟内若温度传感器出现2次40度以上,一次30度以上就报警的功能时,碰到报警输出时间不对的问题,代码如下:
login("admin","123456")
st=streamTable(1000000:0,`deviceID`ts`temperature`speed,[INT,DATETIME,FLOAT,INT])
enableTableShareAndPersistence(st,`sensor,false, true, 1000000)
//创建报警表
share streamTable(1000:0, `time`deviceID`anomalyType`anomalyString, [TIMESTAMP,INT,INT, SYMBOL]) as warningTable
//创建异常检测引擎,2分钟内,温度传感器出现2次40度以上,一次30度以上,报警
engine = createAnomalyDetectionEngine(name="engine1", metrics=<[sum(temperature > 40) > 2 && sum(temperature > 30) > 0 ]>,dummyTable=sensor, outputTable=warningTable, timeColumn=`ts,keyColumn=`deviceID ,windowSize= 120,step=30)
subscribeTable(tableName="sensor", actionName="sensorAnomalyDetection", offset=0,handler= append!{engine}, msgAsTable=true)
//模拟写入流表
def writeData(){
deviceNum = 3
for (i in 0:600) {
data = table(take(1..deviceNum,deviceNum) as deviceID ,take(now().datetime(),deviceNum) as ts,rand(10..41,deviceNum) as temperature,rand(2000..3000,deviceNum) as speed)
sensor.append!(data)
sleep(1000)
}
}
submitJob("simulateData", "simulate sensor data", writeData)
执行后,查询报警表warningTable,结果如下:
这个时间1970.01.19不对,应该是当前时间。