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

Новые релизы, обновления и т.п.

Модератор: immortal

redmax144
Сообщения: 43
Зарегистрирован: Чт янв 28, 2016 8:18 pm
Благодарил (а): 13 раз
Поблагодарили: 5 раз

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

Сообщение redmax144 » Вс дек 20, 2020 5:19 pm

Добрый день. Наткнулся тут на один очень не приятный баг в простых устройствах, связанный с управлением другим устройством по датчику движения. К примеру у нас имеется датчик движения и по событию от него мы хотим на время включить прожектор. В настройках устройства связываем датчик с прожектором, ставим время работы и идём гулять под датчиком или дёргать метод "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
Предлагают править код, но после обновлений всё вернётся на свои места.
Аватара пользователя
Shk
Сообщения: 41
Зарегистрирован: Вс ноя 26, 2017 3:00 pm
Откуда: Запорожье
Благодарил (а): 5 раз
Поблагодарили: 9 раз

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

Сообщение 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 Pi4+esp8266
Аватара пользователя
nick7zmail
Сообщения: 7478
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 1973 раза

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

Сообщение nick7zmail » Вс янв 03, 2021 2:52 pm

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 обратно...просто привяжите его к статусу реле и всё.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Shk
Сообщения: 41
Зарегистрирован: Вс ноя 26, 2017 3:00 pm
Откуда: Запорожье
Благодарил (а): 5 раз
Поблагодарили: 9 раз

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

Сообщение Shk » Вс янв 03, 2021 3:07 pm

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
Сообщения: 7478
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 1973 раза

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

Сообщение nick7zmail » Вс янв 03, 2021 8:35 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 на одном пине.
И снова я нифига не понял...если условное реле не включилось (не дошёл сигнал), температура продолжает падать - При очередном обновлении температуры снова должна быть попытка включить реле

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

Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Shk
Сообщения: 41
Зарегистрирован: Вс ноя 26, 2017 3:00 pm
Откуда: Запорожье
Благодарил (а): 5 раз
Поблагодарили: 9 раз

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

Сообщение Shk » Вс янв 03, 2021 10:11 pm

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

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

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

Сообщение alexfrolkin » Чт янв 07, 2021 7:04 pm

Всем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.
Logrus
Сообщения: 1737
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 295 раз
Поблагодарили: 358 раз

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

Сообщение Logrus » Чт янв 07, 2021 7:18 pm

alexfrolkin писал(а):
Чт янв 07, 2021 7:04 pm
Всем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.
посмотреть шаблоны в каталоге /templates/classes/views
За это сообщение автора Logrus поблагодарил:
alexfrolkin (Чт янв 07, 2021 7:25 pm)
Рейтинг: 1.19%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Shk
Сообщения: 41
Зарегистрирован: Вс ноя 26, 2017 3:00 pm
Откуда: Запорожье
Благодарил (а): 5 раз
Поблагодарили: 9 раз

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

Сообщение Shk » Пн янв 25, 2021 9:21 pm

Всем привет! Для тех кому интересно - управление от нескольких термостатов на один нагреватель.
Создаем в ПУ два термостата "Температура спальни" и "Температура кухни".
...и одно устройство типа "Реле", назовем его "Котел". На него вешается управление котлом.
СпойлерПоказать
1.jpg
1.jpg (142.22 КБ) 458 просмотров
Про соответственно два датчика температуры и их привязку к термостатам говорить особо не буду. В настройках датчиков температуры вкладка "Связанные устройства" добавляется связь типа "Пересылка данных".
Теперь основное, можно двумя вариантами:
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, во вкладке "Действия" ПУ. Причем в условии обязательно должны быть указаны все термостаты.
Со вторым способом тоже все. Проверка условия вкл/выкл котла происходит практически без задержки. Но вроде подгружает сервер.
За это сообщение автора Shk поблагодарил:
Gasinskiy (Ср янв 27, 2021 7:35 am)
Рейтинг: 1.19%
Raspberry Pi4+esp8266
Аватара пользователя
woow
Сообщения: 798
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 119 раз
Поблагодарили: 45 раз

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

Сообщение woow » Пт фев 12, 2021 9:37 pm

Моё мнение, что термостат или любой ответственный регулятор должен жить автономно не зависимо от сервера, чтобы не было вопросов "что будет, если повиснет сервер",
"что будет, если не станет связи" и т.д. через сервер получать данные о состоянии, отправлять корректировки если нужно поднять или понизить температуру (или другие регулировочные параметры), изменить хистерез. Тот самый ESP контроллер способен без проблем решать такие вопросы
За это сообщение автора woow поблагодарил:
~220v (Пн фев 15, 2021 1:31 am)
Рейтинг: 1.19%
Raspberry Pi 3B+
Ответить