Недавно я начал программировать с помощью Drools Fusion, и у меня есть умный носитель, который отправляет данные о шагомерном и сердечном ритме на мой ноутбук. Затем я обрабатываю эти данные с использованием языка правил слюни. Но предположим, что у меня есть несколько умных носителей с каждым уникальным MAC-адресом. Я использую временные окна, и мой вопрос заключается в том, как я могу изменить свой файл правил, чтобы правила срабатывали только для событий с тем же macaddress и принимали соответствующие действия на основе этого MAC-адреса. Мой текущий файл правило заключается в следующем:Правила Drools для разных пользователей
import hellodrools.Steps
import hellodrools.HeartRate
import hellodrools.AppInfo
declare AppInfo
@role(event)
end
declare Steps
@role(event)
end
declare HeartRate
@role(event)
end
rule "ACC STEPS RULE"
when
accumulate(Steps($s : steps)
over window:time(1h) from entry-point "entrySteps";
$fst: min($s), $lst: max($s);
$lst - $fst < 50)
then
System.out.println("STEPS RULE: get moving!");
System.out.println($lst + " " + $fst);
end
rule "HEARTRATE RULE 1"
when
$heartrate : HeartRate(heartRate >= 150) from entry-point "entryHeartRate"
then
System.out.println("Heartrate is to high!");
end
rule "HEARTRATE RULE 2"
when
$heartrate : HeartRate(heartRate <= 50 && heartRate >= 35) from entry- point "entryHeartRate"
then
System.out.println("Heartrate is to low!");
end
rule "HEARTRATE RULE 3"
when
$heartrate : HeartRate(heartRate < 35 && heartRate >= 25) from entry-point "entryHeartRate"
then
System.out.println("Heartrate is critical low!");
end
rule "HEARTRATE RULE 4"
when
$max : Double() from accumulate(
HeartRate($heartrates : heartRate) over window:time(10s) from entry-point "entryHeartRate",
max($heartrates))&&
$min : Double() from accumulate(
HeartRate($heartrates : heartRate) over window:time(10s) from entry-point "entryHeartRate",
min($heartrates))&&
eval(($max - $min) >= 50)
then
System.out.println("Heartrate to much difference in to little time!");
end
Мои HeartRate события имеют следующие поля:
int heartRate;
Date timeStamp;
String macAddress;
Мои шаги события имеют следующие поля:
double steps;
Date timeStamp;
String macAddress;
Благодарим за ответ. Как я уже сказал, я только начинал с слюни, и я не понимаю этого. Я создал новый класс Walker с полем macAddress. Затем он объявил это как факт в моем файле правил: 'declare Walker @role (fact) end' и обновил мои правила. Затем я сделал следующее: 'Walker walker = new Walker (macAddress); entryPointSteps.insert (walker); 'Но ничего не произошло. Не могли бы вы объяснить это немного больше. Спасибо. – Tim
Если вы вставляете с помощью 'entryPointSteps', вам придется использовать' from entrySteps 'в правилах. Не так ли? – laune
Нет, это действительно проблема, спасибо! – Tim