Страница 1 из 1

Пир, мдм, вентилятор

Добавлено: Ср июл 15, 2020 8:18 pm
yden
Добрый.
Подскажите пожалуйста. Вопрос по датчикам движения - использую обычные охранные, подключены к ардуино нано. Ардуинка в свою очередь шлет 1 по mqtt каждый факт срабатывания, мдм пишет эту 1 в свойство1 объекта, и изменением его запускает метод, где идет проверка изменился ли статус свойства2 (если ранее не было движения, то свойство2 этого объекта меняет статус, если ранее было движение - то игнорируется. Плюс запускается таймер на обнуление свойства2 - 10 минут):

Код: Выделить всё

sg('PirBed.motion', 1);
setTimeOut("TimerMotionBed", "sg('PirBed.motion', 0);", 60*10);
Вроде нормально работает. Но на кухне у меня пир командует через связку мдм+megaD оборотами вентилятора вытяжки. Если есть движение то обороты падают до минимальных, нет движения - максимальные.
В реальности: захожу на кухню, карлсон сбрасывает обороты - норма. Я на кухне, отрабатывает 10 минутный таймер, свойство2 объекта обнуляется, карлсон включается на полную. Дернешся, пир сменит свое состояние, этот факт отработал мдм и вентилятор опять тихо шуршит. Это иногда напрягает - хочется идеального :) - пока я на кухне карлсон на минимуме, без всяких дерганий с моей стороны.
Как я вижу работу системы: мдм должен знать что в помещении есть кто-то живой не только в момент отработки таймера и соответственно дергать карлсон в том случае, когда реально минут 10 никто не дернулся в помещении.
Пробовал делать чтобы при каждом срабатывании пира передвигался таймер включения карлсона на максимум - работало, но это как то не рационально - дергать каждый раз базу, методы, передвигать таймеры.
Может есть более правильный способ достичь желаемое?

благодарю

Re: Пир, мдм, вентилятор

Добавлено: Ср июл 15, 2020 9:29 pm
xor
yden писал(а):
Ср июл 15, 2020 8:18 pm
Добрый.
Подскажите пожалуйста. Вопрос по датчикам движения - использую обычные охранные, подключены к ардуино нано. Ардуинка в свою очередь шлет 1 по mqtt каждый факт срабатывания, мдм пишет эту 1 в свойство1 объекта, и изменением его запускает метод, где идет проверка изменился ли статус свойства2 (если ранее не было движения, то свойство2 этого объекта меняет статус, если ранее было движение - то игнорируется. Плюс запускается таймер на обнуление свойства2 - 10 минут):

Код: Выделить всё

sg('PirBed.motion', 1);
setTimeOut("TimerMotionBed", "sg('PirBed.motion', 0);", 60*10);
Вроде нормально работает. Но на кухне у меня пир командует через связку мдм+megaD оборотами вентилятора вытяжки. Если есть движение то обороты падают до минимальных, нет движения - максимальные.
В реальности: захожу на кухню, карлсон сбрасывает обороты - норма. Я на кухне, отрабатывает 10 минутный таймер, свойство2 объекта обнуляется, карлсон включается на полную. Дернешся, пир сменит свое состояние, этот факт отработал мдм и вентилятор опять тихо шуршит. Это иногда напрягает - хочется идеального :) - пока я на кухне карлсон на минимуме, без всяких дерганий с моей стороны.
Как я вижу работу системы: мдм должен знать что в помещении есть кто-то живой не только в момент отработки таймера и соответственно дергать карлсон в том случае, когда реально минут 10 никто не дернулся в помещении.
Пробовал делать чтобы при каждом срабатывании пира передвигался таймер включения карлсона на максимум - работало, но это как то не рационально - дергать каждый раз базу, методы, передвигать таймеры.
Может есть более правильный способ достичь желаемое?

благодарю
в мдм, как мне кажется, для этого лучше использовать методы класса комнат - онАктивити и онИдле, они завязаны на свойство Кто-то_в_помещении. а уж его-то и дд включать/выключать. одним или несколькими, не важно

Re: Пир, мдм, вентилятор

Добавлено: Ср июл 15, 2020 9:34 pm
Chainik
yden писал(а):
Ср июл 15, 2020 8:18 pm
...
Пробовал делать чтобы при каждом срабатывании пира передвигался таймер включения карлсона на максимум - работало, но это как то не рационально - дергать каждый раз базу, методы, передвигать таймеры.
Может есть более правильный способ достичь желаемое?
Базу вы и так каждый раз дергаете при срабатывании датчика движения. Так что считаю, что все правильно вы делали, когда передвигали таймер. Тем более это всего лишь одна строчка кода, добавленная к коду, который выполняется при срабатывании датчика.

Код: Выделить всё

setTimeOut("TimerКарлсон", "cm('Карлсон.НаМаксимум');", 60*10);
Можно, конечно, раз в 10 минут запускать проверку, срабатывал ли датчик движения за последние 10 минут

Код: Выделить всё

if (getHistoryMax("PirBed.motion", strtotime("-10 minute")) == 1) {
   cm('Карлсон.НаМинимум');
} else {
   cm('Карлсон.НаМаксимум');
   }
В этом случае надо организовать периодический запуск такого кода (что, в общем-то, тоже не сложно).

Re: Пир, мдм, вентилятор

Добавлено: Ср июл 15, 2020 9:51 pm
Logrus
проще в какое нибудь свойство/ивент с дд записывать имя об!екта комнаты, если с другого дд то переписывать если не совпало
если в свойстве китчен то обороты на минимум
если кто то пошорохается в другой и не будет активности в кухне то скакнет на максимум
это лучше всяких опросов, или вообще ппц дергать исторические
у меня у дд вообще свойства статус нет. тем паче с историей в нем