Простые устройства / Simple Devices
Модератор: immortal
-
- Сообщения: 44
- Зарегистрирован: Чт янв 28, 2016 8:18 pm
- Благодарил (а): 13 раз
- Поблагодарили: 5 раз
Re: Простые устройства / Simple Devices
Добрый день. Наткнулся тут на один очень не приятный баг в простых устройствах, связанный с управлением другим устройством по датчику движения. К примеру у нас имеется датчик движения и по событию от него мы хотим на время включить прожектор. В настройках устройства связываем датчик с прожектором, ставим время работы и идём гулять под датчиком или дёргать метод "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
Предлагают править код, но после обновлений всё вернётся на свои места.
Попробовав вручную выполнять команду sg('Motion01.status",0); из консоли - снова имеем включение прожектора. То есть не важно что получает свойство, ноль или единицу, прожектор всё равно включается. Любое изменение свойства система расценивает как сработку датчика движения, но так быть не должно...
Решением вижу отвязывать метод StatusUpdated от изменения статуса. Но как-то топорно, может я что упустил...
После написания продолжил просмотр форума и понял, что я не один кто с таким столкнулся, https://mjdm.ru/forum/viewtopic.php?f=8 ... ва#p116736
Предлагают править код, но после обновлений всё вернётся на свои места.
- Shk
- Сообщения: 41
- Зарегистрирован: Вс ноя 26, 2017 3:00 pm
- Откуда: Запорожье
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Re: Простые устройства / Simple Devices
Всем привет! Есть предложение в ПУ "Термостат", да и в разные выключатели добавить свойство типа "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".
Добавил свойство "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".
Raspberry Pi4+esp8266
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Простые устройства / Simple Devices
Че за бред? При включении, даже если не запомнилось состояние - оно отправляется же в mqtt. Т.е. до выключения было 1, после выключения питания стало 0 - дак этот 0 ведь улетит в MQTT...а термостат прочитает его, и, если условия температуры соответствуют - поменяет на 1 обратно...просто привяжите его к статусу реле и всё.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".
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- Shk
- Сообщения: 41
- Зарегистрирован: Вс ноя 26, 2017 3:00 pm
- Откуда: Запорожье
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Re: Простые устройства / Simple Devices
Не бред. Отключение питания - это частный случай. ОК. Сработает.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 на одном пине.
Raspberry Pi4+esp8266
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Простые устройства / Simple Devices
И снова я нифига не понял...если условное реле не включилось (не дошёл сигнал), температура продолжает падать - При очередном обновлении температуры снова должна быть попытка включить реле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
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- Shk
- Сообщения: 41
- Зарегистрирован: Вс ноя 26, 2017 3:00 pm
- Откуда: Запорожье
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Re: Простые устройства / Simple Devices
Гммм... С термостатом кажется погорячился... Хотя "затыка" на нем образовалась. Сперва так и посадил управление по одному статусу реле. За два дня раза 4 отлавливал не выключенный (или еще хуже - не включенный вовремя) котел. После первого случая добавил для контроля просто вывод в топик состояния с реле котла. Ну и "ловил" при глюках отсутствие изменений в этом топике. Вот и решил что термостат не обновляет свой топик при изменении температуры. И сгородил систему для принудительного обновления топика. Хотя самое странное что проблема всеже ушла. Уже почти день работает нормально.nick7zmail писал(а): ↑Вс янв 03, 2021 8:35 pmИ снова я нифига не понял...если условное реле не включилось (не дошёл сигнал), температура продолжает падать - При очередном обновлении температуры снова должна быть попытка включить реле
Отправлено с моего Xperia XZ1 Compact через Tapatalk
PS А для обычных реле, управляемых например с кнопки в браузере, предложение остается актуальным. В отличие от термостата там нечему "подергать" состояние и обновить топик. Да и по-хорошему одно резервное свойство не помешало бы. Есть подозрение что добавленное "ручками" после обновления "снесет". А про писывать промежуточные устройства как-то не в тему...
Raspberry Pi4+esp8266
-
- Сообщения: 8
- Зарегистрирован: Пт июл 29, 2016 12:40 am
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Re: Простые устройства / Simple Devices
Всем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.
-
- Сообщения: 2084
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: Простые устройства / Simple Devices
посмотреть шаблоны в каталоге /templates/classes/viewsalexfrolkin писал(а): ↑Чт янв 07, 2021 7:04 pmВсем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.
- За это сообщение автора Logrus поблагодарил:
- alexfrolkin (Чт янв 07, 2021 7:25 pm)
- Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
- Shk
- Сообщения: 41
- Зарегистрирован: Вс ноя 26, 2017 3:00 pm
- Откуда: Запорожье
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Re: Простые устройства / Simple Devices
Всем привет! Для тех кому интересно - управление от нескольких термостатов на один нагреватель.
Создаем в ПУ два термостата "Температура спальни" и "Температура кухни".
...и одно устройство типа "Реле", назовем его "Котел". На него вешается управление котлом.
Про соответственно два датчика температуры и их привязку к термостатам говорить особо не буду. В настройках датчиков температуры вкладка "Связанные устройства" добавляется связь типа "Пересылка данных".
Теперь основное, можно двумя вариантами:
1) В onNewMinute вставляется код
При необходимости иметь больше термостатов дописывается
gg('Thermostat01.relay_status')+gg('Thermostat02.relay_status')+gg('Thermostat03.relay_status')+......==0
С первым способом все. Котел будет работать пока не выключатся все термостаты. Если какой либо из термостатов в режиме "Выкл" он учитываться не будет. Недостаток : задержка переключения - одна минута.
2) Код
добавляется для каждого термостата в метод valueUpdated, во вкладке "Действия" ПУ. Причем в условии обязательно должны быть указаны все термостаты.
Со вторым способом тоже все. Проверка условия вкл/выкл котла происходит практически без задержки. Но вроде подгружает сервер.
Создаем в ПУ два термостата "Температура спальни" и "Температура кухни".
...и одно устройство типа "Реле", назовем его "Котел". На него вешается управление котлом.
СпойлерПоказать
Теперь основное, можно двумя вариантами:
1) В onNewMinute вставляется код
СпойлерПоказать
// ПРОВЕРКА СОСТОЯНИЯ ТЕРМОСТАТОВ
if (gg('Thermostat01.relay_status')+gg('Thermostat02.relay_status')==0) {
sg('Relay01.status',0);
} else {
sg('Relay01.status',1);
}
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);
}
sg('Relay01.status',0);
} else {
sg('Relay01.status',1);
}
Со вторым способом тоже все. Проверка условия вкл/выкл котла происходит практически без задержки. Но вроде подгружает сервер.
- Рейтинг: 1.16%
Raspberry Pi4+esp8266
- woow
- Сообщения: 821
- Зарегистрирован: Пн июл 04, 2016 8:46 am
- Откуда: Mazeikiai
- Благодарил (а): 125 раз
- Поблагодарили: 46 раз
Re: Простые устройства / Simple Devices
Моё мнение, что термостат или любой ответственный регулятор должен жить автономно не зависимо от сервера, чтобы не было вопросов "что будет, если повиснет сервер",
"что будет, если не станет связи" и т.д. через сервер получать данные о состоянии, отправлять корректировки если нужно поднять или понизить температуру (или другие регулировочные параметры), изменить хистерез. Тот самый ESP контроллер способен без проблем решать такие вопросы
"что будет, если не станет связи" и т.д. через сервер получать данные о состоянии, отправлять корректировки если нужно поднять или понизить температуру (или другие регулировочные параметры), изменить хистерез. Тот самый ESP контроллер способен без проблем решать такие вопросы
- Рейтинг: 1.16%
Raspberry Pi 3B+