В общем проблему решил так:
! ````
var T1 = 3; //Стоимость тарифа Т1
var difference = 0; //Разница между старым и новым значением
createState('energy_count.Day', 0, {name: 'Day energy count', type: 'number', read: true, write: true, unit:'kWh'});
createState('energy_count.DayCost', 0, {name: 'Day energy cost', type: 'number', read: true, write: true, unit:'руб'});
createState('energy_count.costT1', T1, {name: 'Cost T1 per kWh', read: true, write: true, unit: 'руб/kWh'});
createState('energy_count.pmwh', 0, {name: 'pmwh без глюка', read: true, write: true, unit: 'kWh'});
! on({id: "javascript.0.energy_count.pmwh", change: "any"}, function (obj) {
if (obj.newState.val > obj.oldState.val && obj.oldState.val > 0) {
setState('javascript.0.energy_count.pmwh', obj.newState.val, true);
}
});
! on({id: "mqtt.0.ESP00163EB3.pmwh", change: "gt"}, function (obj) {
log('obj.newState.val = '+ obj.newState.val);
log('obj.oldState.val = '+ obj.oldState.val);
if (obj.newState.val > obj.oldState.val && obj.oldState.val > 0) {
difference = parseFloat((parseFloat(obj.newState.val) - parseFloat(obj.oldState.val))/1000);
log('difference = '+ difference);
var mD = Math.round ((parseFloat (getState("javascript.0.energy_count.Day").val) + difference)*1000)/1000;
var mDC = Math.round ((parseFloat (getState("javascript.0.energy_count.DayCost")).val + (difference * T1))*1000)/1000;
log('mD = '+ mD);
log('mDC = '+ mDC);
setState('javascript.0.energy_count.Day', mD, true);
setState('javascript.0.energy_count.DayCost', mDC, true);
}
});
! schedule("0 0 0 * * *", function () { //Каждый день в 00:00:00 обнуляем дневные показания
setState('javascript.0.energy_count.Day', 0, true);
setState('javascript.0.energy_count.DayCost', 0, true);
});
Теперь работает стабильно и без пропусков.
На очереди сохранение значения при перезагрузке.