物联网平台组件2: 平台校验规则
加载不通的规则引擎配置文件,使用DynamicExpresso校验采集数据,得出是否告警
rules.json
{ "Rules": [ { "Description": "温度超过阈值警报", "Condition": "temperature > 30", "Action": "HT" }, { "Description": "湿度低于阈值警报", "Condition": "humidity < 20", "Action": "LH" }, { "Description": "温度和湿度都正常", "Condition": "temperature <= 30 AND humidity >= 20", "Action": "THN" } ] }
RuleMgr.cs
using DynamicExpresso; using System.Text.Json; namespace ConfigRules { // 用于存储来自 JSON 文件的规则 public class Rule { public string Description { get; set; } public string Condition { get; set; } public string Action { get; set; } } public class RuleSet { public List<Rule> Rules { get; set; } } public class RuleMgr { static List<Rule> rules; public static void LoadConfig(string filePath) { try { var jsonString = File.ReadAllText(filePath); var ruleSet = JsonSerializer.Deserialize<RuleSet>(jsonString); rules = ruleSet?.Rules ?? new List<Rule>(); } catch (Exception ex) { Console.WriteLine($"[Error] RuleMgr,LoadConfig,errmsg:{ex.Message}"); } } public static void CompileCondition(Dictionary<string, double> datas) { try { var lstParam = new List<Parameter>(); foreach (var data in datas) { lstParam.Add(new Parameter(data.Key, data.Value));// 将传感器数据填入表达式的参数 } // 评估规则 var interpreter = new Interpreter(); foreach (var rule in rules) { var condition = rule.Condition.Replace(" AND ", " && ").Replace(" OR ", " || "); bool result = (bool)interpreter.Eval(condition, lstParam.ToArray()); if (result) { Console.WriteLine(rule.Description); switch (rule.Action) { case "HT": break; case "LH": break; case "THN": break; } } } } catch (Exception ex) { Console.WriteLine($"[Error] RuleMgr,CompileCondition,errmsg:{ex.Message}"); } } } }
Program.cs
namespace ConfigRules { internal class Program { static void Main(string[] args) { // 模拟传感器数据 var sensorData = new Dictionary<string, double> { { "temperature", 50 }, { "humidity", 10 } }; // 读取 JSON 文件中的规则 RuleMgr.LoadConfig("rules.json"); RuleMgr.CompileCondition(sensorData); Console.ReadLine(); } } }
qq:505645074
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律