> Как получить общее число киловатт за месяц из этого скрипта?
Зачем? Счетчик как раз и дает общее число киловатт - сохраняйте его показание в базе и обрабатывайте. Я это делаю через grafana - вижу график общего потребления по месяцам. Скрипт же заточен под распределение этого показателя по тарифам. Возможно Вы хотите что-то иное…
Я скрипт немного расширил, посмотрите, может что-то полезное будет.
//---------------------------------Счетчик-----------------------------
createState("javascript.0.Values.Energy_total", 0,{name: "Потребление электроэнергии", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.Night", 0,{name: "Потребление электроэнергии тариф ночь", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.Peak", 0,{name: "Потребление электроэнергии тариф пик", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.Half_peak", 0,{name: "Потребление электроэнергии тариф полупик", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.M_night", 0,{name: "Тариф ночь в текущем месяце", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.M_рeak", 0,{name: "Тариф пик в текущем месяце", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.M_half_peak", 0,{name: "Тариф полупик в текущем месяце", unit: "кВт⋅ч", type: "number"});
createState("javascript.0.Energy.M_money", 0,{name: "Стоимость в текущем месяце", unit: "руб", type: "number"});
createState("javascript.0.Energy.Mlast_money", 0,{name: "Стоимость в предыдущем месяце", unit: "руб", type: "number"});
var total = "javascript.0.Values.Energy_total";
var night = "javascript.0.Energy.Night";
var peak = "javascript.0.Energy.Peak";
var h_peak = "javascript.0.Energy.Half_peak";
var delta;
var kt;
var money;
on({id: "modbus.3.inputRegisters.11.342_total_active_energy", change: "ne"}, function (obj) {
if(getState(total).val === 0){
setState(total, obj.state.val, true);
}
delta = obj.state.val - getState(total).val; //разница двух показаний счетчика
if(compareTime("6:00", "9:00", "between")){ //сдвиг на час назад от принятого
if(compareTime(new Date(getState(total).lc).toLocaleTimeString(), new Date().toLocaleTimeString(), "between", "6:00") && delta > 0.011){
kt = (new Date().setHours(6,0,0,0) - getState(total).lc)/(Date.parse(new Date()) - getState(total).lc);
setState(night, Math.round(100 * (getState(night).val + kt * delta))/100, true);
setState(peak, Math.round(100 * (getState(peak).val + (1 - kt) * delta))/100, true);
sendTo('telegram.0', 'Произошел сбой счетчика ЭЭ. Желательно скорректировать значения ночного и пикового тарифов.');
} else {
setState(peak, Math.round(100 * (getState(peak).val + delta))/100, true);
}
}
if(compareTime("9:00", "16:00", "between")){
if(compareTime(new Date(getState(total).lc).toLocaleTimeString(), new Date().toLocaleTimeString(), "between", "9:00") && delta > 0.011){
kt = (new Date().setHours(9,0,0,0) - getState(total).lc)/(Date.parse(new Date()) - getState(total).lc);
setState(peak, Math.round(100 * (getState(peak).val + kt * delta))/100, true);
setState(h_peak, Math.round(100 * (getState(h_peak).val + (1 - kt) * delta))/100, true);
sendTo('telegram.0', 'Произошел сбой счетчика ЭЭ. Желательно скорректировать значения пикового и полупикового тарифов.');
} else {
setState(h_peak, Math.round(100 * (getState(h_peak).val + delta))/100, true);
}
}
if(compareTime("16:00", "20:00", "between")){
if(compareTime(new Date(getState(total).lc).toLocaleTimeString(), new Date().toLocaleTimeString(), "between", "16:00") && delta > 0.011){
kt = (new Date().setHours(16,0,0,0) - getState(total).lc)/(Date.parse(new Date()) - getState(total).lc);
setState(h_peak, Math.round(100 * (getState(h_peak).val + kt * delta))/100, true);
setState(peak, Math.round(100 * (getState(peak).val + (1 - kt) * delta))/100, true);
sendTo('telegram.0', 'Произошел сбой счетчика ЭЭ. Желательно скорректировать значения полупикового и пикового тарифов.');
} else {
setState(peak, Math.round(100 * (getState(peak).val + delta))/100, true);
}
}
if(compareTime("20:00", "22:00", "between")){
if(compareTime(new Date(getState(total).lc).toLocaleTimeString(), new Date().toLocaleTimeString(), "between", "20:00") && delta > 0.011){
kt = (new Date().setHours(20,0,0,0) - getState(total).lc)/(Date.parse(new Date()) - getState(total).lc);
setState(peak, Math.round(100 * (getState(peak).val + kt * delta))/100, true);
setState(h_peak, Math.round(100 * (getState(h_peak).val + (1 - kt) * delta))/100, true);
sendTo('telegram.0', 'Произошел сбой счетчика ЭЭ. Желательно скорректировать значения пикового и полупикового тарифов.');
} else {
setState(h_peak, Math.round(100 * (getState(h_peak).val + delta))/100, true);
}
}
if(compareTime("22:00", "6:00", "between")){
if(compareTime(new Date(getState(total).lc).toLocaleTimeString(), new Date().toLocaleTimeString(), "between", "22:00") && delta > 0.011){
kt = (new Date().setHours(22,0,0,0) - getState(total).lc)/(Date.parse(new Date()) - getState(total).lc);
setState(h_peak, Math.round(100 * (getState(h_peak).val + kt * delta))/100, true);
setState(night, Math.round(100 * (getState(night).val + (1 - kt) * delta))/100, true);
sendTo('telegram.0', 'Произошел сбой счетчика ЭЭ. Желательно скорректировать значения полупикового и ночного тарифов.');
} else {
setState(night, Math.round(100 * (getState(night).val + delta))/100, true);
}
}
setState(total, obj.state.val, true);
//------------------
if(getState("javascript.0.Energy.M_night").val === 0){
setState("javascript.0.Energy.M_night", getState(night).val, true);
}
if(getState("javascript.0.Energy.M_рeak").val === 0){
setState("javascript.0.Energy.M_рeak", getState(peak).val, true);
}
if(getState("javascript.0.Energy.M_half_peak").val === 0){
setState("javascript.0.Energy.M_half_peak", getState(h_peak).val, true);
}
money = 1.92*(getState(night).val - getState("javascript.0.Energy.M_night").val) + 6.46*(getState(peak).val - getState("javascript.0.Energy.M_рeak").val) + 5.38*(getState(h_peak).val - getState("javascript.0.Energy.M_half_peak").val);
setState("javascript.0.Energy.M_money", Math.round(money), true);
});
schedule({date : 1, hour: 0, minute: 0}, function () {
setState("javascript.0.Energy.Mlast_money", getState("javascript.0.Energy.M_money").val, true);
setState("javascript.0.Energy.M_night", getState(night).val, true);
setState("javascript.0.Energy.M_рeak", getState(peak).val, true);
setState("javascript.0.Energy.M_half_peak", getState(h_peak).val, true);
});