|  | 1 năm trước cách đây | |
|---|---|---|
| bin | 1 năm trước cách đây | |
| core | 1 năm trước cách đây | |
| doc | 1 năm trước cách đây | |
| include | 1 năm trước cách đây | |
| lib | 1 năm trước cách đây | |
| paho.mqtt.c | 1 năm trước cách đây | |
| src | 1 năm trước cách đây | |
| test | 1 năm trước cách đây | |
| .gitignore | 1 năm trước cách đây | |
| LICENSE | 1 năm trước cách đây | |
| Makefile | 1 năm trước cách đây | |
| README.md | 1 năm trước cách đây | |
| time_test.txt | 1 năm trước cách đây | 
mqtt测试服务器报警模块
AalrmModule 是一个报警模块,可以通过扫描数据库中的数据,根据设置的规则进行故障报警的独立程序
前置条件:需要mysql数据库,linux c环境(centos等) 1.拷贝本项目到服务器,在AlarmModule目录下执行
make2.启动服务
cd bin make reboot3.停止服务
cd bin make stop4.查看日志
tail -f -n 1000 /tmp/log/xinyun_mqtt_alarm.svr.log
考虑到物联网项目中,设备数量和节点数量的不断增多, 
使用之前扫描数据库历史表和逐条解析接收报文方式,会导致性能问题和其他误报警等问题,
因此采用此方式定时扫描数据库status表,根据设定的阈值规则进行告警判断。
int CoreAlarmGateway() //扫描网关设备数据
int CoreAlarmNode() //扫描节点设备数据
继电器数据判断(错误码中包括了设备上传的各种报警)
//继电器状态:
#define SW_ON                           0     //0x0000:继电器合闸
#define SW_MANUAL_CONTROL               32    //0x0020:继电器远程拉闸
#define SW_TIMER_CONTROL                16    //0x0010: 继电器自动时间段拉闸
#define SW_TEMPERATURE_HUMIDITY_ALARM   513   //0x0201:继电器温湿度报警拉闸 需报警
#define SW_FIRE_ALARM                   514   //0x0202:继电器烟感报警拉闸 需报警
#define SW_TILT_ALARM                   515   //0x0203:继电器倾斜报警拉闸 需报警
#define SW_LOCK_ALARM                   516   //0x0204:继电器锁具报警拉闸 需报警
#define SW_LINE_TEMPERATURE_ALARM       517   //0x0205:继电器线温报警拉闸 需报警
#define SW_OVERVOLTAGE                  1     //0x0001:过压拉闸 需报警
#define SW_UNDERVOLTAGE                 2     //0x0002:欠压拉闸 需报警
#define SW_OVERLOAD_ALARM               4     //0x0004: 过载拉闸 需报警
#define SW_ELECTRIC_EXCESS              8     //0x0008:用电超额拉闸
#define SW_OVER_SWITCH_OUT_COUNT        64    //0x0040:超自动合闸次数
#define SW_FAST_CURRENT                 128   //0x0080:快速电流拉闸
这部分数据通过RelayAlarm函数处理
结合时间段,拉合闸状态、电流阈值的告警
自动模式合闸时间段继电器拉闸 告警
自动模式拉闸时间继电器合闸    告警
继电器拉闸状态有电流              告警
继电器合闸状态无电流         告警
继电器合闸状态电流偏离正常阈值  告警(需事先采集正常电流最大最小值)
-- 报警清理
UPDATE dev_fault SET fault_state=3
-- 设置设备能报警 SELECT * FROM dev_status WHERE alarm_enable=1
UPDATE dev_status SET alarm_enable=1 where gateway_mac='39FFD7054658383726860743'
----------------------------------------------------------------------------------------------------------------------------------------------------
-- 网关报警数据查询
SELECT t1.device_mac,t1.gateway_mac,t2.device_name,t2.control_mode,t1.update_time,
                t1.current_on_off,t1.current_electric,t1.original_relay,t2.swith_time1,t2.swith_time2,t2.swith_time3,t2.swith_time4,
                t2.electric_wave_set,t2.electric_wave_min,t2.electric_wave_max,t1.command_update_time 
FROM dev_status AS t1 
INNER JOIN dev_info_gateway AS t2 
ON t1.device_mac = t2.device_mac 
WHERE TIMESTAMPDIFF(MINUTE, t1.update_time, NOW()) < 10 
AND t1.current_online=1 
AND t1.original_relay IS NOT NULL 
AND t1.current_electric IS NOT NULL 
AND t1.electric_update_flag=1
AND t1.alarm_enable=1
-- 故障表查询
select device_mac,device_mac_node,fault_state,fault_count,fault_time,relay_code from dev_fault 
where device_mac = '39FFD7054658383726860743' 
and device_mac_node = '0F0000000001'
and relay_code = 1105
-----------------------------------------------------------------------------------------------------------------------------------------------------
-- 节点报警数据查询
SELECT t1.device_mac,t1.gateway_mac,t3.device_name,t2.device_name,t2.control_mode,t1.update_time,t1.current_on_off,t1.current_electric,
       t1.original_relay,t2.swith_time1,t2.swith_time2,t2.swith_time3,t2.swith_time4,t2.electric_wave_set,t2.electric_wave_min,t2.electric_wave_max,t1.command_update_time 
FROM dev_status AS t1 
INNER JOIN dev_info_node AS t2 
ON t1.device_mac = t2.device_mac 
AND t1.gateway_mac=t2.gateway_mac 
INNER JOIN dev_info_gateway AS t3
ON t2.gateway_mac = t3.device_mac 
WHERE TIMESTAMPDIFF(MINUTE, t1.update_time, NOW()) < 10 
AND t1.current_online=1 
AND t1.original_relay IS NOT NULL 
AND t1.current_electric IS NOT NULL 
AND t1.electric_update_flag=1
AND t1.alarm_enable=1
-- 故障表查询
select device_mac,device_mac_node,fault_state,fault_count,fault_time,relay_code from dev_fault 
where device_mac = '39FFD7054658383726860743' 
and device_mac_node = '202105070106' 
and relay_code = 1105
-------------------------------------------------------------------------------------------------------------------
-- 采集设备当天电流最小最大值
SELECT
  MIN(current_electric)/10000.0 AS min_current,
  MAX(current_electric)/10000.0 AS max_current
FROM
  dev_status_history_202312
WHERE
  DATE(FROM_UNIXTIME(update_time)) = CURDATE()
  AND device_mac = '39FFD7054658383726860743'
  AND current_electric > 100;