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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
yden
Сообщения: 141
Зарегистрирован: Пн авг 22, 2016 10:03 am
Благодарил (а): 28 раз
Поблагодарили: 5 раз

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

Сообщение 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 никто не дернулся в помещении.
Пробовал делать чтобы при каждом срабатывании пира передвигался таймер включения карлсона на максимум - работало, но это как то не рационально - дергать каждый раз базу, методы, передвигать таймеры.
Может есть более правильный способ достичь желаемое?

благодарю
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Ср июл 15, 2020 9:29 pm

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 никто не дернулся в помещении.
Пробовал делать чтобы при каждом срабатывании пира передвигался таймер включения карлсона на максимум - работало, но это как то не рационально - дергать каждый раз базу, методы, передвигать таймеры.
Может есть более правильный способ достичь желаемое?

благодарю
в мдм, как мне кажется, для этого лучше использовать методы класса комнат - онАктивити и онИдле, они завязаны на свойство Кто-то_в_помещении. а уж его-то и дд включать/выключать. одним или несколькими, не важно
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Ср июл 15, 2020 9:34 pm

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

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

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

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

if (getHistoryMax("PirBed.motion", strtotime("-10 minute")) == 1) {
   cm('Карлсон.НаМинимум');
} else {
   cm('Карлсон.НаМаксимум');
   }
В этом случае надо организовать периодический запуск такого кода (что, в общем-то, тоже не сложно).
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Ср июл 15, 2020 9:51 pm

проще в какое нибудь свойство/ивент с дд записывать имя об!екта комнаты, если с другого дд то переписывать если не совпало
если в свойстве китчен то обороты на минимум
если кто то пошорохается в другой и не будет активности в кухне то скакнет на максимум
это лучше всяких опросов, или вообще ппц дергать исторические
у меня у дд вообще свойства статус нет. тем паче с историей в нем
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить