影刀RPA 电力抄表自动化计量系统数据采集与用电分析作者林焱一、什么情况用影刀处理抄表数据电力公司、工厂园区、写字楼物业都面临同样的问题有几十上百个电表每月要人工抄录一遍再手动录入用电管理系统。物业员工每月要花整整两天在这件事上。更糟的是抄表人员偶尔手写失误导致账单核对时出现差异。用影刀对接能量管理系统EMS/SCADA可以实现每月自动从系统导出各表计的用电数据与上月数据对比计算用电量自动生成账单异常用电量自动预警某租户用电量突增50%店群矩阵自动化突破运营极限二、实战一从EMS系统批量采集抄表数据大多数园区有能量管理平台一般是B/S架构网页里面存着每个表计的读数。Step 1登录EMS系统获取表计列表【打开网页】URLhttp://192.168.1.100/ems/login 【填写】#username 内容${管理员账号} 【填写】#password 内容${管理员密码} 【点击】#login-btn 【等待跳转到】/ems/dashboardStep 2遍历所有表计采集本月末读数# 进入表计管理页面yingdao.open_url(http://192.168.1.100/ems/meters/list)yingdao.wait_for_element(.meter-list)metersyingdao.find_elements(.meter-row)meter_data[]formeterinmeters:meter_idmeter.find_element(.meter-id).text meter_namemeter.find_element(.meter-name).text locationmeter.find_element(.location).text# 点击进入该表计详情meter.find_element(.detail-link).click()yingdao.wait_for_element(.reading-history)# 获取最新读数latest_readingyingdao.find_element(.latest-reading-value).text reading_timeyingdao.find_element(.latest-reading-time).text meter_data.append({表计ID:meter_id,表计名称:meter_name,安装位置:location,本月末读数:float(latest_reading),采集时间:reading_time,})yingdao.go_back()yingdao.wait(0.5)print(f共采集{len(meter_data)}个表计数据)三、实战二计算用电量并生成账单importpandasaspdfromdatetimeimportdatetime# 读取本月采集数据df_currentpd.DataFrame(meter_data)df_current.to_excel(C:\\电力\\本月读数.xlsx,indexFalse)# 读取上月数据df_previouspd.read_excel(C:\\电力\\上月读数.xlsx)# 合并计算用电量df_mergeddf_current.merge(df_previous,on表计ID,suffixes(_本月,_上月))df_merged[本月用电量度]df_merged[本月末读数_本月]-df_merged[本月末读数_上月]# 电价配置可从Excel读入electricity_price0.85# 元/度实际应分用电类型峰谷平df_merged[本月电费元]df_merged[本月用电量度]*electricity_price df_merged[本月电费元]df_merged[本月电费元].round(2)# 异常检测用电量环比增幅超过50%df_previous_prevpd.read_excel(C:\\电力\\上上月读数.xlsx)df_3monthsdf_merged.merge(df_previous_prev,on表计ID,suffixes(,_上上月))df_3months[上月用电量]df_3months[本月末读数_上月]-df_3months[本月末读数_上上月]df_3months[环比增幅](df_3months[本月用电量度]-df_3months[上月用电量])/df_3months[上月用电量]*100# 找出异常表计anomaliesdf_3months[df_3months[环比增幅]50]发送异常预警如果 len(anomalies) 0 【发送企业微信消息】 收件人物业经理 内容⚡ 用电异常预警${len(anomalies)}个表计本月用电量环比增幅超过50% 详情${anomalies[[表计名称,安装位置,环比增幅]].to_string()}temu店群自动化报活动案例四、实战三生成租户用电账单# 读取租户与表计对应关系tenant_meterpd.read_excel(C:\\电力\\租户表计对照.xlsx)# 字段租户名称, 表计ID列表多个ID用逗号分隔# 按租户汇总bills[]for_,rowintenant_meter.iterrows():tenantrow[租户名称]meter_ids[m.strip()forminstr(row[表计ID]).split(,)]# 汇总该租户所有表计tenant_usagedf_merged[df_merged[表计ID].isin(meter_ids)]total_kwhtenant_usage[本月用电量度].sum()total_feetenant_usage[本月电费元].sum()bills.append({租户:tenant,用电量度:total_kwh,电费元:round(total_fee,2),账期:f{datetime.now().year}年{datetime.now().month}月})bills_dfpd.DataFrame(bills)bills_df.to_excel(C:\\电力\\账单汇总.xlsx,indexFalse)五、踩坑记录坑1电表读数有小数位精度问题电表读数精确到小数点后2位直接用float相减会有浮点误差0.10.2≠0.3。计算时先转为整数*100最后再除以100。坑2换表后读数清零表计更换时本月初读数会比上月末读数小导致计算出负用电量。需要在流程中判断如果本月末读数 上月末读数说明换表改用本月末读数从0开始计作为用电量。坑3EMS系统在月末数据延迟有些EMS平台月末结算数据要延迟到次月1日才入库。抄表流程建议设在每月2日运行而不是31日。坑4多电价制峰谷平计费工商业用电有峰谷平三档电价EMS系统应该分别记录了峰段、谷段、平段的用电量。汇总时分别乘以对应单价不能统一用一个电价。适用人群物业管理员、园区能源管理、电力公司抄表员难度⭐⭐⭐需要了解EMS系统和用电计费规则