package
main
import
(
"fmt"
"/bilibili/gengine/engine"
"/bilibili/gengine/engine"
"/bilibili/gengine/engine"
)
type
Temperature
struct
{
Tag string
//标签点名称
Value float64
//数据值
State int64
//状态
Event string
//报警事件
}
type
Water
struct
{
Tag string
//标签点名称
Value int64
//数据值
State int64
//状态
Event string
//报警事件
}
type
Smoke
struct
{
Tag string
//标签点名称
Value int64
//数据值
State int64
//状态
Event string
//报警事件
}
const
(
eventRule = `
rule
"TemperatureRule"
"温度事件计算规则"
begin
println(
"/***************** 温度事件计算规则 ***************/"
)
tempState = 0
if
< 0{
tempState = 1
}
else
if
> 80{
tempState = 2
}
if
!= tempState{
if
tempState == 0{
=
"温度正常"
}
else
if
tempState == 1{
=
"低温报警"
}
else
{
=
"高温报警"
}
}
else
{
=
""
}
= tempState
end
rule
"WaterRule"
"水浸事件计算规则"
begin
println(
"/***************** 水浸事件计算规则 ***************/"
)
tempState = 0
if
!= 0{
tempState = 1
}
if
!= tempState{
if
tempState == 0{
=
"水浸正常"
}
else
{
=
"水浸异常"
}
}
else
{
=
""
}
= tempState
end
rule
"SmokeRule"
"烟雾事件计算规则"
begin
println(
"/***************** 烟雾事件计算规则 ***************/"
)
tempState = 0
if
!= 0{
tempState = 1
}
if
!= tempState{
if
tempState == 0{
=
"烟雾正常"
}
else
{
=
"烟雾报警"
}
}
else
{
=
""
}
= tempState
end
`)
func
main(){
temperature := &Temperature{
Tag:
"temperature"
,
Value: 90,
State: 0,
Event:
""
,
}
water := &Water{
Tag:
"water"
,
Value: 0,
State: 0,
Event:
""
,
}
smoke := &Smoke{
Tag:
"smoke"
,
Value: 1,
State: 0,
Event:
""
,
}
dataContext := ()
(
"Temperature"
, temperature)
(
"Water"
, water)
(
"Smoke"
, smoke)
(
"println"
,)
ruleBuilder := (dataContext)
err1 := (eventRule)
if
err1 != nil {
panic(err1)
}
eng := ()
(ruleBuilder)
(
"temperature Event=%s\n"
, )
(
"water Event=%s\n"
, )
(
"smoke Event=%s\n"
, )
for
i := 0; i < 10; i++ {
= int64(i % 3)
(ruleBuilder)
(
"smoke Event=%s\n"
, )
}
}