Страница 118 из 124

Re: Простые устройства / Simple Devices

Добавлено: Вс дек 20, 2020 5:19 pm
redmax144
Добрый день. Наткнулся тут на один очень не приятный баг в простых устройствах, связанный с управлением другим устройством по датчику движения. К примеру у нас имеется датчик движения и по событию от него мы хотим на время включить прожектор. В настройках устройства связываем датчик с прожектором, ставим время работы и идём гулять под датчиком или дёргать метод "motionDetected". По итогу прожектор зажигается, и вместе с ним в скрипте SMotions_motionDetected простых устройств запускается таймер - motion_timer (по умолчанию 20 секунд), который возвращает статус датчика движения в ноль командой sg('Motion01.status",0); При этом снова вызывается связанное устройство (в нашем случае прожектор), которому снова прилетает команда на включение. Таким образом, в 11:00:00 срабатывает датчик движения, включается прожектор, в 11:00:20 снова подаётся команда на включение прожектора, и Алиса снова уведомляет о включении устройства.
Попробовав вручную выполнять команду sg('Motion01.status",0); из консоли - снова имеем включение прожектора. То есть не важно что получает свойство, ноль или единицу, прожектор всё равно включается. Любое изменение свойства система расценивает как сработку датчика движения, но так быть не должно...

Решением вижу отвязывать метод StatusUpdated от изменения статуса. Но как-то топорно, может я что упустил...

После написания продолжил просмотр форума и понял, что я не один кто с таким столкнулся, https://mjdm.ru/forum/viewtopic.php?f=8 ... ва#p116736
Предлагают править код, но после обновлений всё вернётся на свои места.

Re: Простые устройства / Simple Devices

Добавлено: Вс янв 03, 2021 2:05 pm
Shk
Всем привет! Есть предложение в ПУ "Термостат", да и в разные выключатели добавить свойство типа "object_status". Очень уж напрашивается решение. Пример. Котлом управляет релюха типа Sonoff, связанная через MQTT с MD. Где-то в комнате стоит Sonoff с датчиком температуры. Все завязано через ПУ "Термостат". Все хорошо работает до пропажи света или "глюка" со связью. Перезагрузка реле котла и все встало намертво. Прошивка релюхи не запоминает состояние до отключения питания. :(
Добавил свойство "object_status" к термостату и подвязал его через MQTT. Теперь термостат отправляет на релюху котла "relay_status" - 1 (например). Если релюха приняла - отправляет термостату "object_status"-1. То есть просто дублирует сигнал.
В onNewMinute добавил проверку

if (gg('Thermostat01.relay_status') <> gg('Thermostat01.object_status')) { // Проверка включения отопления
$termo =gg('Thermostat01.relay_status');
sg('Thermostat01.relay_status', $termo);
}
Задача кода - если состояние термостата не совпадает с состоянием объекта - обновлять в MQTT топик от термостата, пока реле не сработает.
Для выключателей таким образом решается вопрос с запоминанием состояния при сбоях питания.
Забыл сказать, что прошивка релюхи котла после перезагрузки "сбрасывает" в 0 "object_status".

Re: Простые устройства / Simple Devices

Добавлено: Вс янв 03, 2021 2:52 pm
nick7zmail
Shk писал(а):
Вс янв 03, 2021 2:05 pm
Всем привет! Есть предложение в ПУ "Термостат", да и в разные выключатели добавить свойство типа "object_status". Очень уж напрашивается решение. Пример. Котлом управляет релюха типа Sonoff, связанная через MQTT с MD. Где-то в комнате стоит Sonoff с датчиком температуры. Все завязано через ПУ "Термостат". Все хорошо работает до пропажи света или "глюка" со связью. Перезагрузка реле котла и все встало намертво. Прошивка релюхи не запоминает состояние до отключения питания. :(
Добавил свойство "object_status" к термостату и подвязал его через MQTT. Теперь термостат отправляет на релюху котла "relay_status" - 1 (например). Если релюха приняла - отправляет термостату "object_status"-1. То есть просто дублирует сигнал.
В onNewMinute добавил проверку

if (gg('Thermostat01.relay_status') <> gg('Thermostat01.object_status')) { // Проверка включения отопления
$termo =gg('Thermostat01.relay_status');
sg('Thermostat01.relay_status', $termo);
}
Задача кода - если состояние термостата не совпадает с состоянием объекта - обновлять в MQTT топик от термостата, пока реле не сработает.
Для выключателей таким образом решается вопрос с запоминанием состояния при сбоях питания.
Забыл сказать, что прошивка релюхи котла после перезагрузки "сбрасывает" в 0 "object_status".
Че за бред? При включении, даже если не запомнилось состояние - оно отправляется же в mqtt. Т.е. до выключения было 1, после выключения питания стало 0 - дак этот 0 ведь улетит в MQTT...а термостат прочитает его, и, если условия температуры соответствуют - поменяет на 1 обратно...просто привяжите его к статусу реле и всё.

Re: Простые устройства / Simple Devices

Добавлено: Вс янв 03, 2021 3:07 pm
Shk
nick7zmail писал(а):
Вс янв 03, 2021 2:52 pm
Че за бред? При включении, даже если не запомнилось состояние - оно отправляется же в mqtt. Т.е. до выключения было 1, после выключения питания стало 0 - дак этот 0 ведь улетит в MQTT...а термостат прочитает его, и, если условия температуры соответствуют - поменяет на 1 обратно...просто привяжите его к статусу реле и всё.
Не бред. :) Отключение питания - это частный случай. ОК. Сработает.
Пример. Реле не поймало сигнал от термостата на включение "relay_status" (1). Сигнал был слабый, или занято чём-то или "отваливалось" в тот момент. Соответственно не обновило "object_status" (0). Термостат тоже висит с "relay_status" (1) без обновления топика. (Температура падает, повода обновлять топик нет). Топик "relay_status" не обновляется, реле не реагирует. Все зависло. :)
Если объединить "object_status" и "relay_status" картинка не поменяется.
На реле стоит прошивка ESP Easy Mega. Как ни бился, но она может принять топик только в момент отправки. Прозевала - все печально. Использую из-за подключения 4 датчиков DS18b20 на одном пине.

Re: Простые устройства / Simple Devices

Добавлено: Вс янв 03, 2021 8:35 pm
nick7zmail
Shk писал(а):
nick7zmail писал(а):
Вс янв 03, 2021 2:52 pm
Че за бред? При включении, даже если не запомнилось состояние - оно отправляется же в mqtt. Т.е. до выключения было 1, после выключения питания стало 0 - дак этот 0 ведь улетит в MQTT...а термостат прочитает его, и, если условия температуры соответствуют - поменяет на 1 обратно...просто привяжите его к статусу реле и всё.
Не бред. :) Отключение питания - это частный случай. ОК. Сработает.
Пример. Реле не поймало сигнал от термостата на включение "relay_status" (1). Сигнал был слабый, или занято чём-то или "отваливалось" в тот момент. Соответственно не обновило "object_status" (0). Термостат тоже висит с "relay_status" (1) без обновления топика. (Температура падает, повода обновлять топик нет). Топик "relay_status" не обновляется, реле не реагирует. Все зависло. :)
Если объединить "object_status" и "relay_status" картинка не поменяется.
На реле стоит прошивка ESP Easy Mega. Как ни бился, но она может принять топик только в момент отправки. Прозевала - все печально. Использую из-за подключения 4 датчиков DS18b20 на одном пине.
И снова я нифига не понял...если условное реле не включилось (не дошёл сигнал), температура продолжает падать - При очередном обновлении температуры снова должна быть попытка включить реле

Отправлено с моего Xperia XZ1 Compact через Tapatalk


Re: Простые устройства / Simple Devices

Добавлено: Вс янв 03, 2021 10:11 pm
Shk
nick7zmail писал(а):
Вс янв 03, 2021 8:35 pm
И снова я нифига не понял...если условное реле не включилось (не дошёл сигнал), температура продолжает падать - При очередном обновлении температуры снова должна быть попытка включить реле

Отправлено с моего Xperia XZ1 Compact через Tapatalk
Гммм... С термостатом кажется погорячился... Хотя "затыка" на нем образовалась. Сперва так и посадил управление по одному статусу реле. За два дня раза 4 отлавливал не выключенный (или еще хуже - не включенный вовремя) котел. После первого случая добавил для контроля просто вывод в топик состояния с реле котла. Ну и "ловил" при глюках отсутствие изменений в этом топике. Вот и решил что термостат не обновляет свой топик при изменении температуры. И сгородил систему для принудительного обновления топика. :) Хотя самое странное что проблема всеже ушла. Уже почти день работает нормально.
PS А для обычных реле, управляемых например с кнопки в браузере, предложение остается актуальным. В отличие от термостата там нечему "подергать" состояние и обновить топик. Да и по-хорошему одно резервное свойство не помешало бы. Есть подозрение что добавленное "ручками" после обновления "снесет". А про писывать промежуточные устройства как-то не в тему...

Re: Простые устройства / Simple Devices

Добавлено: Чт янв 07, 2021 7:04 pm
alexfrolkin
Всем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.

Re: Простые устройства / Simple Devices

Добавлено: Чт янв 07, 2021 7:18 pm
Logrus
alexfrolkin писал(а):
Чт янв 07, 2021 7:04 pm
Всем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.
посмотреть шаблоны в каталоге /templates/classes/views

Re: Простые устройства / Simple Devices

Добавлено: Пн янв 25, 2021 9:21 pm
Shk
Всем привет! Для тех кому интересно - управление от нескольких термостатов на один нагреватель.
Создаем в ПУ два термостата "Температура спальни" и "Температура кухни".
...и одно устройство типа "Реле", назовем его "Котел". На него вешается управление котлом.
СпойлерПоказать
1.jpg
1.jpg (142.22 КБ) 4415 просмотров
Про соответственно два датчика температуры и их привязку к термостатам говорить особо не буду. В настройках датчиков температуры вкладка "Связанные устройства" добавляется связь типа "Пересылка данных".
Теперь основное, можно двумя вариантами:
1) В onNewMinute вставляется код
СпойлерПоказать
// ПРОВЕРКА СОСТОЯНИЯ ТЕРМОСТАТОВ

if (gg('Thermostat01.relay_status')+gg('Thermostat02.relay_status')==0) {
sg('Relay01.status',0);
} else {
sg('Relay01.status',1);
}
При необходимости иметь больше термостатов дописывается
gg('Thermostat01.relay_status')+gg('Thermostat02.relay_status')+gg('Thermostat03.relay_status')+......==0

С первым способом все. Котел будет работать пока не выключатся все термостаты. Если какой либо из термостатов в режиме "Выкл" он учитываться не будет. Недостаток : задержка переключения - одна минута.

2) Код
СпойлерПоказать
if (gg('Thermostat01.relay_status')+gg('Thermostat02.relay_status')==0) {
sg('Relay01.status',0);
} else {
sg('Relay01.status',1);
}
добавляется для каждого термостата в метод valueUpdated, во вкладке "Действия" ПУ. Причем в условии обязательно должны быть указаны все термостаты.
Со вторым способом тоже все. Проверка условия вкл/выкл котла происходит практически без задержки. Но вроде подгружает сервер.

Re: Простые устройства / Simple Devices

Добавлено: Пт фев 12, 2021 9:37 pm
woow
Моё мнение, что термостат или любой ответственный регулятор должен жить автономно не зависимо от сервера, чтобы не было вопросов "что будет, если повиснет сервер",
"что будет, если не станет связи" и т.д. через сервер получать данные о состоянии, отправлять корректировки если нужно поднять или понизить температуру (или другие регулировочные параметры), изменить хистерез. Тот самый ESP контроллер способен без проблем решать такие вопросы