Дни рождения, праздники и другие тематические календари



  • Данный сниппет позволяет присвоить к устройству необходимое значение из списка исходя из текущей даты сервера.
    Заполняем список, переменную days по аналогии и пользуемся 😄

    module.exports = callback => {
      
      const days = {
        '06.04': 'Василиса',
        '31.05': 'Глеб',  
        '24.12': 'Святослав',   // 24 - день, 12 - месяц Декабрь
        
        '23.02': 'День защитника Отечества!',  
        '08.03': 'Международный женский день!',
        '31.12': 'Новый год!',
      }
      
    const dt = new Date();
    const currentDay = String(dt.getDate()).padStart(2,'0')+'.'+String(dt.getMonth()+1).padStart(2,'0');
      
      if (days[curentDay]) {
        callback(null, days[curentDay]);
      } else {
        callback(null, '');
      }
    };
    


  • @dev, прошу помощи. Не работает сниппет. Значение устройства получалось все время 0. Вывел значение переменной curentDay, а оно в виде 2020-04-08, соответсвенно в русскую локаль не переводится. Проверил на сервере. Стояла только локаль en-GB.UTF-8. Поставил en-US.UTF-8 и ru-RU.UTF-8, ru по умолчанию, пергрузил сервер. А значение curentDay опять 2020-04-08. Что можно сделать, чтобы заработал скрипт сниппета?



  • @dev, несколько вопросов. Сниппет должен быть применен к аналоговому датчику/актюатору? Можно как-то из вкладки "Параметры" устройства задавать дату? Интересует применение сниппета к задаче промывки/замены фильтра в системе водоснабжения.
    Хотелось бы:

    1. На мнемосхеме на значке (устройстве) фильтра увидеть сообщение красным цветом "Необходимо заменить" в заданную дату.
    2. Получить Push-сообщение или email/telegram.


  • @int144 Метод toLocaleDateString использует функционал операционной системы для форматирования текстового представления даты. Если не работает, можно напрямую форматировать дату в вид dd.mm :

    module.exports = callback => {
      const days = {
        '12.04': 'С днем космонавтики!',
        '31.12': 'Новый год!'
      }
    
    const dt = new Date();
    const currentDay = String(dt.getDate()).padStart(2,'0')+'.'+String(dt.getMonth()+1).padStart(2,'0');
    
    if (days[currentDay]) {
        callback(null, days[currentDay]);
      } else {
        callback(null, '');
      }
    };


  • @intrapro спасибо за ответ. А я сделал примерно тоже, только на уровне чайника
    const date = new Date();
    const dt = date.getDate();
    if (dt < 10) day = '0' + dt;
    else day = dt;
    const mn = date.getMonth() + 1;
    if (mn < 10) month = '0' + mn;
    else month = mn;
    const curentDay = day + '.' + month;



  • @int144 Вполне себе рабочий вариант 👍



  • Обновлено исправление в топике, всем спасибо 👍 😅



  • Пользователь @Alex_Jet написал в Дни рождения, праздники и другие тематические календари:

    аналоговому датчику

    Все верно

    Можно как-то из вкладки "Параметры" устройства задавать дату?

    такой возможности нет, если только отдельный сниппет на каждое устройство


Log in to reply