用于实现设备供电、态势、IT资源等的监控调度,采用可定制的定时、定期、条件、启停、轮询等任务策略以及终端可视化监控实现设备自动化运维管理,与采集服务(pyfree-gather-master)配套使用
1)总概述:
调度软件通过配置任务策略实现自动化运维,通过告警策略配置实现实时监控,数据源来自各个采集软件的tcp/ip通信推送
2)类图:
1)实时数据:
实时数据采用区域-设备-点是三个层级展示,目前区域仅在调度软件推送上层应用才有意义,在每个调度软件内,只有一个区域信息
设备信息可以对应实际设备也可以是自由定义的虚拟设备,来自不同实际设备的采集点可以自由配置挂载到各个定义设备上
可以为设备创建虚拟点,目前虚拟点用于实现更复杂的组态任务调度、告警策略配置,后续也会加入虚拟点的基于实际点的加权计算表达
实时数据在数值变化或定期推送给上层应用或第三平台
实时数据的业务结构可在dev.xml进行配置
2)数据记录:
通过udp通信将数据推送到记录软件实现历史数据存储。
3)任务调度(详见后面的编外知识扩展):
任务调度涉及的判定条件有数值变化、时间、程序启停等划分为不同任务策略,并不同条件可以进行组合,例如轮询策略任务中,加上如时间范围的限制
通过虚拟点进行串联,可以实现不同任务策略的组合策略,实现复杂逻辑的调度任务
任务调度线程实时检索各个配置任务的条件,满足条件时会构建控制信息进行立刻执行,也可以将其加入执行队列中由其他线程处理
具体任务策略及其配置在plan.xml实现,请参看demo-project/monitor/plan.xml。
4)告警策略:
告警分析目前分为三个方面,
5)对外接口:
做了两处源码调整:
由于acl提供的日志记录的时间只到秒级别,本项目需要毫秒的级别,因此修改了一下其源码,
在lib_acl/src/stdlib/acl_mylog.c文件中,将acl_logtime_fmt函数实现调整为:
void acl_logtime_fmt(char *buf, size_t size)
{
//time_t now;
struct timeval tm0;
gettimeofday(&tm0, NULL);
time_t now = tm0.tv_sec;
#ifdef ACL_UNIX
struct tm local_time;
//(void) time (&now);
(void) localtime_r(&now, &local_time);
strftime(buf, size, "%Y/%m/%d %H:%M:%S", &local_time);
sprintf(buf, "%s.%03d ", buf,(int)(tm0.tv_usec/1000));
#elif defined(ACL_WINDOWS)
struct tm *local_time;
//(void) time (&now);
local_time = localtime(&now);
strftime(buf, size, "%Y/%m/%d %H:%M:%S", local_time);
sprintf(buf, "%s.%03d ",buf, (int)(tm0.tv_usec/1000));
#else
# error "unknown OS type"
#endif
}
如果不需要毫秒级的时间格式,就不必修改。
其二:
需要修改acl库的源码,在lib_acl/src/stdlib/iostuff/acl_readable.c的int acl_readable(ACL_SOCKET fd)函数中
fds.events = POLLIN | POLLPRI;
由于win中调用了WSAPoll函数,而Winsock provider不支持POLLPRI与POLLWRBAND,调整为:
fds.events = POLLIN | POLLPRI;
#ifdef ACL_WINDOWS
fds.events &=~(POLLPRI|POLLWRBAND);
#endif
sqlite
sqlite为sqlite数据库的c接口,源码本项目经过整理为cmake工程,直接进入到sqlite目录按cmake编译即可
libuuid
libuuid主要用于生成uuid使用,其下载地址:https://sourceforge.net/projects/libuuid/
下载后解压,解压文件已自行下载的版本为准:tar -zxvf libuuid-1.0.3.tar.gz
编译:
cd libuuid-1.0.3
./configure --prefix=you_dir/uuid #不指定目录,默认/usr/local,注意不支持相对路径
make && make install
iot_aliyun
iot_aliyun目录是阿里云物联网平台提供的c++_SDK包编译的头文件和库,采用的是iotkit-embedded-2.3.0.zip源码编译的。
最新版本可以去阿里云物联网平台官网下载,新版本有些函数会有变更,本调度软件涉及阿里云物联网接口部分需要作出调整。
mosquitto
mosquitto是支持mqtt消息队列通信的c++库,其下载地址:http://mosquitto.org/download/
具体编译请参考其说明文档,其config.mk文件有各种编译输出目录、依赖配置,请按说明配置
linux编译 项目编译需要cmake+gcc支持,目前本项目的编译环境是centos7.3,由于需要将git相关信息写入程序,需要安装git
或在CMakeLists.txt中注销:"execute_process(COMMAND /bin/bash ../build.sh)"
编译命令类似如下:
cd monitor-master
mkdir build-linux
cd build-linux
cmake ..
make
win编译 当前win编译测试采用vs2015+cmake编译,例子如下
备注:若需要32为支持请去掉Win64指定,msbuild为vs的命令编译工具,可以直接vs打开工程文件编译
打开vs的命令行工具
cd monitor-master
mkdir build-win
cd build-win
cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release ..
msbuild pyfree-monitor.sln /p:Configuration="Release" /p:Platform="x64"
或
cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Debug ..
msbuild pyfree-monitor.sln /p:Configuration="Debug" /p:Platform="x64"
由于acl第三方库win静态库有点大,本项目debug版本库不上传编译好的库,请自行编译,需要做一处调整 需要修改acl库的源码,在lib_acl/src/stdlib/iostuff/acl_readable.c的int acl_readable(ACL_SOCKET fd)函数中
fds.events = POLLIN | POLLPRI;
由于win中调用了WSAPoll函数,而Winsock provider不支持POLLPRI与POLLWRBAND,调整为:
fds.events = POLLIN | POLLPRI;
#ifdef ACL_WINDOWS
fds.events &=~(POLLPRI|POLLWRBAND);
#endif
linux
环境搭建
主机win64系统
在demo-project\client_test提供了简单的本地可视化控制终端(pyfree_client.exe),,与调度软件采用tcp-socket通信。
如果需要linux或android版本的请去顶级目录下software_test\client\touch自行编译
虚拟机
采用VMware工具创建虚拟机,centos7.3系统,本样例的网络地址设置192.168.174.130,
开启虚拟机的共享文件夹功能,将项目挂载到虚拟机上
程序配置
编译的调度软件输出在demo-project/monitor
程序启动有根据磁盘或网卡校验的License约束,与采集软件一致
因此需要向生成License的sn.txt输出文件,启动虚拟机,进入其目录执行指令构建:
./SWL 0 22 或 ./SWL 1 22
生成License的sn.txt,如果与采集软件部署在同一台设备,生成一次就能拷贝过来使用
如果没用SWL程序,去顶级目录下的swLicense项目编译生成,支持cmake编译
项目配置
appconf.xml:主要设置程序需要的连接信息、对外接口信息配置以及设备配置文件、调度策略文件、告警策略文件等路径指定
dev.xml:设备信息配置,具体看配置文件说明
plan.xml:任务策略配置,具体看配置说明
alarm.xml:告警策略配置,具体看配置说明
pmap.xml:来自各个采集软件的点信息与各设备下点信息的映射配置,具体看配置说明
win64
服务安装,管理员启动cmd,进入demo-project/monitor目录:
安装:pyfree-monitor.exe install
卸载:pyfree-monitor.exe uninstall
在任务管理器或服务管理页面可以启停服务或配置其服务相关信息
更新:在任务管理器停止服务,拷贝pyfree-monitor.exe覆盖完成更新
阿里云物联网平台支持
【1】需要注册阿里云账号,并开通物联网平台服务
【2】在阿里云物联网平台创建网关产品
创建设备产品并定义设备产品功能
【3】创建网关设备以及实体设备的实例
并设备实例设置为网关设备的子设备
【4】在appconf.xml配置网关设备的三元组信息
<AliyunConf>
<!-- 阿里云物联网平台接口开关 -->
<AliyunIoFunc>0</AliyunIoFunc>
<!--网关设备三元组信息-->
<product_key>a1D1cOroRQp</product_key>
<product_secret>***</product_secret>
<device_name>pyfree_zh</device_name>
<device_secret>***</device_secret>
</AliyunConf>
【5】在dev.xml配置子设备的三元组信息以及对应产品下的点key信息
<dev devID="4" devType="3" GID="1" name="pcs" desc="播放器"
product_key="a12BjHSYgZ6" product_secret="***" device_name="pyfree_zh01" device_secret="***">
<pInfo pID="3" pType="1" name="onplaying" desc="播放状态" aliyun_key="play" UpLoopTime_ali="600"/>
<pInfo pID="4" pType="1" name="onplay" desc="正播放状态" aliyun_key="playing" UpLoopTime_ali="600"/>
</dev>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )