节能减排

This commit is contained in:
jiang 2025-07-24 23:09:52 +08:00
parent d496cb81b4
commit 0097c0dc9f
2 changed files with 191 additions and 72 deletions

View File

@ -442,89 +442,90 @@
}
function deviceChartFn(data) {
let deviceName = [];
let consumptionKwh = []
data.map(item => {
deviceName.push(item.deviceName);
consumptionKwh.push(Number(parseFloat(item.consumptionKwh).toFixed(2)));
})
let pieData = data.map(item => ({
name: item.deviceName,
value: Number(parseFloat(item.consumptionKwh).toFixed(2))
}));
deviceChart.setOption({
animation: false,
tooltip: {
trigger: 'axis',
axisPointer: {type: 'shadow'}
trigger: 'item',
formatter: '{b}: {c} kWh ({d}%)'
},
textStyle: {color: '#FFFFFF'},
grid: {
left: 30, // 增大左边距,给长标签留出空间
right: 30,
top: 20,
bottom: 30,
containLabel: true
},
xAxis: {type: 'value'},
yAxis: {
type: 'category',
data: deviceName
textStyle: { color: '#FFFFFF' },
legend: {
orient: 'vertical',
left: 'left',
textStyle: { color: '#FFFFFF' }
},
series: [{
type: 'bar',
data: consumptionKwh,
itemStyle: {color: '#008781'},
name: '能耗占比',
type: 'pie',
radius: '55%',
center: ['50%', '50%'],
data: pieData,
label: {
show: true,
position: 'right',
formatter: '{b}: {d}%',
color: '#FFFFFF',
fontSize: 12,
formatter: '{c}'
fontSize: 12
},
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}]
});
}
function renewableUsedKwhFn(data) {
let deviceName = [];
let renewableUsedKwh = []
data.map(item => {
deviceName.push(item.deviceName);
renewableUsedKwh.push(Number(parseFloat(item.renewableUsedKwh).toFixed(2)));
})
let pieData = data.map(item => ({
name: item.deviceName,
value: Number(parseFloat(item.renewableUsedKwh).toFixed(2))
}));
renewableUsedKwhChart.setOption({
animation: false,
tooltip: {
trigger: 'axis',
axisPointer: {type: 'shadow'}
trigger: 'item',
formatter: '{b}: {c} kWh ({d}%)'
},
textStyle: {color: '#FFFFFF'},
grid: {
left: 30, // 增大左边距,给长标签留出空间
right: 30,
top: 20,
bottom: 30,
containLabel: true
},
xAxis: {type: 'value'},
yAxis: {
type: 'category',
data: deviceName
textStyle: { color: '#FFFFFF' },
legend: {
orient: 'vertical',
left: 'left',
textStyle: { color: '#FFFFFF' }
},
series: [{
type: 'bar',
data: renewableUsedKwh,
itemStyle: {color: '#008781'},
name: '可再生能源使用占比',
type: 'pie',
radius: '55%',
center: ['50%', '50%'],
data: pieData,
label: {
show: true,
position: 'right',
formatter: '{b}: {d}%',
color: '#FFFFFF',
fontSize: 12,
formatter: '{c}'
fontSize: 12
},
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}]
});
}
window.addEventListener('resize', function () {
trendChart.resize();
deviceChart.resize();

View File

@ -77,18 +77,125 @@
</div>
<script>
const adviceMap = {
'设备过载能耗': '检查设备运行负荷,适当分配工作任务,避免长时间高负荷运行。',
'能耗异常': '立即核查相关设备运行状态,排查是否存在故障或人为干预因素。',
'轻微异常': '持续观察能耗变化,记录趋势并安排定期巡检。',
};
// 从 URL 获取参数
function getQueryParam(param) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(param);
const device_anomaly_dict = {
'塔吊': {
'info': [
'使用频率略高,建议优化排班',
'短时间内作业密集,能耗轻微升高'
],
'warning': [
'高频率起吊任务持续 2 小时以上,能耗偏高',
'塔吊运转间隔过短,存在低效能耗'
],
'danger': [
'连续运行超 6 小时,疑似空转或控制异常',
'起重电机功率突增,可能存在电控系统故障'
]
},
'照明系统': {
'info': [
'白天开启部分照明区域',
'光照充足时未自动关闭灯具'
],
'warning': [
'夜间全部区域照明常开,未启用感应控制',
'楼道、空置区域照明长时间亮灯'
],
'danger': [
'多区域电流突升,疑似电路故障',
'照明系统异常重启,功率波动剧烈'
]
},
'办公区': {
'info': [
'空调温度设置偏低,能耗轻微升高',
'部分办公设备下班后未关闭'
],
'warning': [
'下班后空调/电脑/灯具未关闭,持续耗电',
'节假日期间未检测到办公人员但设备照常运行'
],
'danger': [
'空调系统异常自启动,持续运行超 12 小时',
'存在非办公类大功率设备接入,能耗异常'
]
},
'其他': {
'info': [
'监控与通信设备正常运行,功耗平稳',
'传感器网络轻微功耗波动'
],
'warning': [
'通信模块频繁重连,导致功率上升',
'部分感知终端异常活跃,数据回传功耗偏高'
],
'danger': [
'关键设备死机重启,功耗异常升高',
'系统故障导致数据上传异常,持续过载运行'
]
}
}
const device_energy_saving_suggestions = {
'塔吊': {
'info': [
'建议合理安排作业时间,避免频繁作业导致能耗升高。',
'调整作业密集时间,避免短时高负荷运转。'
],
'warning': [
'优化起吊任务调度,避免长时间高频运行。',
'增加运转间隔,减少低效能耗。'
],
'danger': [
'排查设备空转,及时修复控制异常。',
'检修起重电机电控系统,防止功率异常升高。'
]
},
'照明系统': {
'info': [
'根据自然光调整照明开启,避免白天浪费电力。',
'安装自动关灯装置,避免光照充足时灯具未关闭。'
],
'warning': [
'启用感应照明控制,避免夜间长期开灯。',
'关闭楼道及空置区域照明,减少无效耗电。'
],
'danger': [
'尽快检修电路,防止电流异常导致安全隐患。',
'升级控制系统,减少功率波动带来的损耗。'
]
},
'办公区': {
'info': [
'适当调节空调温度,减少不必要的能耗。',
'加强节能意识,下班关闭所有办公设备。'
],
'warning': [
'落实下班关闭设备制度,杜绝持续耗电。',
'节假日期间关闭空调及灯具,降低闲置能耗。'
],
'danger': [
'检修空调异常启动问题,防止长时间运行浪费。',
'禁止非办公大功率设备接入办公区。'
]
},
'其他': {
'info': [
'定期维护监控及通信设备,保持稳定功耗。',
'监控传感器网络,避免异常功耗波动。'
],
'warning': [
'修复通信模块故障,降低重连带来的能耗。',
'优化感知终端数据上传频率,减少功耗。'
],
'danger': [
'及时处理设备死机重启问题,避免异常功耗。',
'排查系统故障,防止持续过载运行。'
]
}
}
function setParams(data) {
let item = JSON.parse(data);
document.getElementById('device-name').innerText = item.deviceName;
@ -96,18 +203,29 @@
document.getElementById('anomalyDesc').innerText = item.anomalyDesc;
document.getElementById('time-range').innerText = `${item.lastRecordDate.split(' ')[1]} - ${item.statDate.split(' ')[1]}`;
// 先默认提示
let adviceText = '建议进一步检查设备状态或联系技术人员。';
// 根据异常类型填充建议措施
const advice = adviceMap[item.anomalyDesc] || '建议进一步检查设备状态或联系技术人员。';
document.getElementById('advice').innerText = advice;
// 取设备、等级、描述
let device = item.deviceName;
let level = item.anomalyLevel; // 必须是 info/warning/danger
let desc = item.anomalyDesc;
// 判断设备和等级是否存在对应数据
if (device_energy_saving_suggestions[device] && device_energy_saving_suggestions[device][level]) {
// 找到当前等级所有异常描述列表
let descList = device_anomaly_dict[device][level];
// 找到当前描述的索引
let idx = descList.indexOf(desc);
if (idx !== -1) {
// 根据索引取对应建议
adviceText = device_energy_saving_suggestions[device][level][idx];
}
}
document.getElementById('advice').innerText = adviceText;
}
// 示例调用(正式使用时替换 data 参数)
// setParams(JSON.stringify({
// deviceName: "空调1号",
// statDate: "2025-07-24",
// anomalyDesc: "设备过载能耗"
// }));
</script>
</body>
</html>