Дергать релюшку, 2 варианта

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

Модератор: immortal

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

Дергать релюшку, 2 варианта

Сообщение yden » Пт май 17, 2019 9:01 am

Здравствуйте.
Подскажите пожалуйста, как будет правильнее.
Объект мдм реле, связан по mqtt с исполнительным устройством (ардуинка, есп, мега). Фрагменты кода, включающее это реле.
1. вариант кода:

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

if (!gg('ReleSvetSan.status')) sg('ReleSvetSan.status', 1);
Мдм проверяет включено ли реле, если нет - включить.

2. вариант

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

sg('ReleSvetSan.status', 1);
Мдм без проверки состояния дергает релюшку.

1 вариант вроде более предпочтителен, но если по какой то причине статус реле остался в мдм как "включен", а на самом деле нет, то мдм его никогда не включит. Нужно вручную передергивать статус.
2 вариант постоянно дергает релюшку. Каждую минуту (если стоит в onnewminute - например для света). Этот вариант избавлен от проблемы 1 варианта. Но не повредит ли функционированию\быстродействию в целом всего мдм?

благодарю
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Дергать релюшку, 2 варианта

Сообщение Chainik » Пт май 17, 2019 9:58 am

Я пошел другим путем. Статус реле выставляется из метода после проверки фактического состояния реле.

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

$state = file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
} else {
 setGlobal('Relay_014-07.status', 0);
}
Таким образом, если статус по каким-то причинам не соответствует фактическому состоянию реле, при первом исполнении метода статус "синхронизируется" с реальным состоянием релюшки.
yden
Сообщения: 141
Зарегистрирован: Пн авг 22, 2016 10:03 am
Благодарил (а): 28 раз
Поблагодарили: 5 раз

Re: Дергать релюшку, 2 варианта

Сообщение yden » Пт май 17, 2019 10:19 am

Chainik писал(а):
Пт май 17, 2019 9:58 am
Я пошел другим путем. Статус реле выставляется из метода после проверки фактического состояния реле.

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

$state = file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
} else {
 setGlobal('Relay_014-07.status', 0);
}
Таким образом, если статус по каким-то причинам не соответствует фактическому состоянию реле, при первом исполнении метода статус "синхронизируется" с реальным состоянием релюшки.
Сенк
Я как понимаю для mqtt это не применимо?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Дергать релюшку, 2 варианта

Сообщение Chainik » Пт май 17, 2019 10:25 am

Честно говоря, не знаю, может и не применимо.
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Дергать релюшку, 2 варианта

Сообщение ZyaK » Вт июн 18, 2019 9:33 am

у меня по MQTT все релюхи, код выглядит вот так

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

global $session; //Обращаемся к глобальной переменной
if (preg_match('/включи/uis',$original)) {
   sayTo("Включаю весь свет в спальне", 2, $session->data['TERMINAL']);
  callMethod("Lamp1_4.turnOn");
  callMethod("Lamp1_5.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
  sayTo("Выключаю яркий свет в спальне", 2, $session->data['TERMINAL']);
 callMethod("Lamp1_4.turnOff");
} else {
 sayTo("Непонятно что со светом в спальне", 2, $session->data['TERMINAL']);
}
PI2 + MQTT + 5 ESP8266 + Atmega16
Ответить