Счётчик с интервалами напоминания о проведении ТО

Я хочу поставить водосчётчик, чтобы он считал количество использованной воды и через определённые промежутки литров выдавал сигнал о необходимости проведения обслуживания: заменить фильтр, досыпать соль и т.д., т.к. каждое действие нужно проводить через определённое количество литров.
А то это бывает забывается и уже меняешь когда видно, что с водой что-то не так, либо соль закончилась, либо фильтр забился и т.д.
В общем есть счётчик, который постоянно увеличивается, и надо чтобы через определённые периоды значений загорались уведомления в интерфейсе.

Я составил предварительный код.

var WaterCounter = "wb-mio-gpio_70:2/Counter 10";
var WaterConsumption = "Water/Consumption";
var SaltChangePeriod = 500; 
var FilterChangePeriod = 1000;


defineVirtualDevice("Water", {
    title: "Вода",
    cells: {
      Name: {
        title: "Название",
        type: "text",
        value: "Вода",
      },
      Consumption: {
        title: "Расход воды",
        type: "value",
        value: "",
        units: "л",
        precision: 0,
      },
      SaltChange: {
        title: "Подсыпать соль",
        type: "switch",
        value: false,
        readonly: true
      },
      SaltChangeDone: {
        title: "Соль подсыпана",
        type: "switch",
        value: false,
      },     
      FilterChange: {
        title: "Заменить фильтр",
        type: "switch",
        value: false,
        readonly: true
      },
      FilterChangeDone: {
        title: "Фильтр заменили",
        type: "switch",
        value: false,
      }
  }
});

// действия при изменении счётчика воды
defineRule("WaterCounterRule", { 
  whenChanged: WaterCounter, 
  then: function (newValue, devName, cellName) {

    dev[WaterConsumption] = newValue*4.5;   // запись значения в ячейку виртуального устройства

    // каждые 500, 1000, 1500 и т.д. литров надо делать следующее
    if ( WaterConsumption % SaltChangePeriod === 0 ) { 
    																									// 1 - выводим alarm на домовой HMI панели
        SendTelegramMsg( 'Расход воды = ' + dev[WaterConsumption] + ' л. Необходимо досыпать соль.' ); 	// 2 - отправляем сообщение в телегу
    	dev["Water/SaltChange"] = true;   																// 3 - устанавливаем значение SaltChange = true

    }

  }
});

// действия при нажатии SaltChangeDone 
defineRule("SaltChangeDoneRule", { 
  whenChanged: "Water/SaltChangeDone", 
  then: function (newValue, devName, cellName) {
    if ( newValue == true) { 
    	dev["Water/SaltChange"] = false;        // SaltChange возвращается к состоянию false только после нажатия кнопки SaltChangeDone
    }
  }
});

В нём есть несколько нюансов:

  1. Мне непонятно как выводить alarm на домовой HMI панели (это видимо тоже самое что и alarm в окне веб-интерфейса). Сообщение в телегу - это хорошо, но их бывает слишком много. Можно и пропустить.
  2. Возможно неплохая идея продолжать выводить alarm в HMI и слать сообщения в телегу два раза в сутки (в 9 и 19) пока не нажата кнопка SaltChangeDone. Может быть как-то в cron эти строки завернуть или в начале каждого дня делать проверку и если проверка не выполнена, то держи два уведомления.
  3. При нажатии SaltChangeDone просто возвращается состояние false у переключателя SaltChange. А было бы неплохо обнулять счётчик (или начинать новый отсчёт от момента нажатия SaltChangeDone), т.к. от напоминания до действия могло пройти какое-то время и какие-то литры.

Здравствуйте.

Насколько я понял, вам нужна помощь в написании скрипта?
Если так, то у нас есть справочные и обучающие материалы, а также недавно вышла очень полезная статья. От себя порекомендую воспользоваться бесплатным полноценным чат AI, например.

На каком ПО функционируют данные HMI панели? SVG?

Саму HMI панель я ещё только планирую купить.
Скорее всего вашу 8".
Пока что SVG панели для HMI у меня отображаются в веб-интерфейсе.
В указанных справочных и обучающих материалах нет ничего про всплывающие окна типа alarm.

Недавно была добавлена как раз такая ссылка.

У вас остались еще какие-либо вопросы?