Сообщение с датчика когда никого нет дома

Я хочу чтобы мне приходили сообщения в телегу о движениях дома, когда меня там нет.

Я сделал виртуальную кнопку NobodyHome и условие if (‘NobodyHome/switch’ == true), внутри которого должна происходить проверка показаний с датчиков MotionCheck.
Но сообщения не приходят независимо от состояния топика NobodyHome/switch.

NobodyHome.js

defineVirtualDevice("NobodyHome", {
  title:  "NobodyHome",
  cells: {
    switch: {
      title: "Дома никого",
      type: "switch",
      readonly: false,
      value: false
    },

  }
});

rules.js

sensors = 	   ["wb-msw-v3_59/Current Motion", "wb-msw-v3_62/Current Motion", "wb-msw-v3_112/Current Motion", "wb-msw-v3_127/Current Motion", "wb-msw-v3_133/Current Motion", "wb-msw-v3_136/Current Motion"]
sensorNames =  ["комнате 1",    "комнате 2",    "комнате 3",   "комнате 4",    "комнате 5",                     "комнате 6"]


if ('NobodyHome/switch' == true) {
    defineRule("MotionCheck", { 
    whenChanged: sensors,
    then: function (newValue, devName, cellName) {
      if (newValue > 50) {
          var index = sensors.indexOf(devName + '/' + cellName);
          SendTelegramMsg('Есть движение в ' + sensorNames[index] + '. Уровень ' + newValue); // Call global function
          log ("Message 1 sent");                    // Write to debug console log message
      } 
    }
  });
}

А вот если я оставлю вот так, то всё работает, но сообщения сыпятся постоянно, когда они не нужны совсем
rules.js

sensors = 	   ["wb-msw-v3_59/Current Motion", "wb-msw-v3_62/Current Motion", "wb-msw-v3_112/Current Motion", "wb-msw-v3_127/Current Motion", "wb-msw-v3_133/Current Motion", "wb-msw-v3_136/Current Motion"]
sensorNames =  ["комнате 1",    "комнате 2",    "комнате 3",   "комнате 4",    "комнате 5",                     "комнате 6"]


defineRule("MotionCheck", { 
  whenChanged: sensors,
  then: function (newValue, devName, cellName) {
    if (newValue > 50) {
      var index = sensors.indexOf(devName + '/' + cellName);
      SendTelegramMsg('Есть движение в ' + sensorNames[index] + '. Уровень ' + newValue); // Call global function
      log ("Message 1 sent");                    // Write to debug console log message
    } 
  }
});

Первый вариант rules.js у вас работает так: если при инициализации ((ре)старте wb-rules) ‘NobodyHome/switch’ равен true, то правило будет объявлено и будет слать значения в телеграм независимо от состояния ‘NobodyHome/switch’. Если ‘NobodyHome/switch’ при инициализации не равен true, то правило объявлено не будет.

Второй вариант правильнее, но надо добавить условие:

sensors = ["wb-msw-v3_59/Current Motion", "wb-msw-v3_62/Current Motion", "wb-msw-v3_112/Current Motion", "wb-msw-v3_127/Current Motion", "wb-msw-v3_133/Current Motion", "wb-msw-v3_136/Current Motion"]
sensorNames = ["комнате 1", "комнате 2", "комнате 3", "комнате 4", "комнате 5", "комнате 6"]

defineRule("MotionCheck", {
    whenChanged: sensors,
    then: function (newValue, devName, cellName) {
        if (dev['NobodyHome/switch'] == false) {
          return;		
		}
        if (newValue > 50) {
            var index = sensors.indexOf(devName + '/' + cellName);
            SendTelegramMsg('Есть движение в ' + sensorNames[index] + '. Уровень ' + newValue); // Call global function
            log("Message 1 sent"); // Write to debug console log message
        }
    }
});

1 Like