Правило Drool с примером скользящего окна

#drools

#пускает слюни

Вопрос:

Я новичок в Drools и пытаюсь использовать скользящее окно в drool для получения нескольких данных датчиков. Документ, за которым я следую, является https://docs.jboss.org/drools/release/7.47.0.Final/drools-docs/html_single/index.html#cep-sliding-windows-con_decision-engine

Вот мой класс POJO:

 package com.ruletemplate;

public class RuleTemplate {
private String DeviceName;
private String ParameterName;
private int ParameterValue;
private String AlertMessage; 

public RuleTemplate( String parametername )
{
    this.ParameterName = parametername;
}

public String getParameterName() {
    return ParameterName;
}
public void setPropertyName(String parametername) {
    this.ParameterName = parametername;
}

public int  getParameterValue() {
    return ParameterValue;
}
public void setParameterValue(int parametervalue) {
    this.ParameterValue = parametervalue;
}

public String getDeviceName() {
    return DeviceName;
}

public void setDeviceName(String devicename) {
    this.DeviceName = devicename;
}

public String getAlertMessage() {
    return AlertMessage;
}

public void setAlertMessage(String alertmessage) {
    this.AlertMessage = alertmessage;
}    
}
 

Механизм drool работает на Azure Databricks runtime версии 7.0 ML (включает Apache Spark 3.0.0, Scala 2.12)

Правило drool определяется как:

 import com.ruletemplate.RuleTemplate
rule 'Rule_Pump_Controller_Test_Device_12'
agenda-group 'Pump_Controller_Test_Device'
when
ruletemplate: RuleTemplate(ParameterName=='Voltage', ParameterValue > 0, ParameterValue < 
40)  over window:time(1m)
then
ruletemplate.setAlertMessage(ruletemplate.getDeviceName()  ','  
ruletemplate.getParameterName()  ', ' ruletemplate.getParameterValue()  
',3,Nodename,ActionsName');
end
 

Способ запуска правила:

 val ruletemplate=new RuleTemplate(TelemetryName)
ruletemplate.setParameterValue(TelemetryValue.toInt)
ruletemplate.setDeviceName(Deviceid)
session.insert(ruletemplate) 
agenda.getAgendaGroup(Deviceid).setFocus();              
session.fireAllRules()
 

Это отлично работает без добавления скользящего временного окна.После добавления скользящего окна правило вычисляется, но возвращает null .Ищу некоторую помощь в примерах или документе о том, как мы можем определить скользящее окно с накоплением за конечный промежуток времени и для тех, которые определены выше (без накопления).

Комментарии:

1. Вы настроили свое приложение для запуска Drools в потоковом режиме, а не в облачном режиме по умолчанию, правильно?

2. Да, оно находится в потоковом режиме.

3. Но что это окно должно делать? Концептуально это не имеет никакого смысла. Если вы используете его accumulate , например, для an, то это означает «если мы накопим достаточное количество событий, удовлетворяющих этим условиям, за этот промежуток времени», но на самом деле это не имеет смысла для «одного события за определенный период времени».

4. Большое спасибо за помощь. Идея заключалась в том, чтобы использовать накопление события для окна (скажем, напряжения> 3 В для окна за последние 10 минут), а затем запустить действие. Я согласен, что для single window это может быть недопустимым случаем, но для accumulate это было бы идеально.

5. Он накапливает показания напряжения с датчика в течение минуты, и если среднее значение для этого окна больше 10, тогда выполните действие. Но мне до сих пор не удалось заставить его работать.