Обновление данных в панеле управления

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

Модератор: immortal

Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Обновление данных в панеле управления

Сообщение woow » Пт фев 03, 2017 11:42 am

К МЖД подключил привязал ESP8266 с датчиком BMЕ280 к МЖД. Всё работает данные по MQTT принимаются, но если отключить ESP -об этом МЖД не понимает в панели управления температура, влажность, давление показывает последние значение, даже после перезапуска МЖД.
Raspberry Pi 3B+
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Обновление данных в панеле управления

Сообщение DimSun75 » Пт фев 03, 2017 11:54 am

woow писал(а):К МЖД подключил привязал ESP8266 с датчиком BMЕ280 к МЖД. Всё работает данные по MQTT принимаются, но если отключить ESP -об этом МЖД не понимает в панели управления температура, влажность, давление показывает последние значение, даже после перезапуска МЖД.
Не до конца понял, но похоже, что в нужных топиках нужно поставить флаг retain. Тогда при подписке на данный топик брокер будет отправлять текущее значение клиенту

Отправлено с моего SM-G850F через Tapatalk
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Обновление данных в панеле управления

Сообщение woow » Сб фев 04, 2017 1:27 am

DimSun75 писал(а): Не до конца понял, но похоже, что в нужных топиках нужно поставить флаг retain. Тогда при подписке на данный топик брокер будет отправлять текущее значение клиенту
Поставил флаги retain, но всё по преждему по MQTT данные не поступают а на панеле "застывшие" цифры последней передачи.
Raspberry Pi 3B+
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Обновление данных в панеле управления

Сообщение DimSun75 » Сб фев 04, 2017 1:36 am

Что за панель? Какая прошивка в ESP?
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Обновление данных в панеле управления

Сообщение woow » Сб фев 04, 2017 2:38 am

DimSun75 писал(а):Что за панель?
http:// ваш IP/admin.php?pd=pz_&md=panel&inst=&action=mqtt

и соответственно Терминал / консоль или как там ещё лицевая оболочка или интерфейс пользователя
DimSun75 писал(а): Какая прошивка в ESP?
А прошивка к чему? Если ESP отключена и её не стало.
Raspberry Pi 3B+
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Обновление данных в панеле управления

Сообщение DimSun75 » Сб фев 04, 2017 9:25 am

woow писал(а):
DimSun75 писал(а):Что за панель?
http:// ваш IP/admin.php?pd=pz_&md=panel&inst=&action=mqtt

и соответственно Терминал / консоль или как там ещё лицевая оболочка или интерфейс пользователя
DimSun75 писал(а): Какая прошивка в ESP?
А прошивка к чему? Если ESP отключена и её не стало.
Извиняюсь за мою тупость, но в чем вопрос? Нет esp - нет данных, цифры застываю. Включаете esp - данные появляются. Если так, то вроде все правильно работает

update:

А вот если нужно чтобы МЖД понимал достоверные данные или нет, то есть несколько путей решения вопроса:

1. Добавить esp в модуль "Устройства Online", и по наличию или отсутствию устройства определять достоверны ли данные
2. В классе, куда записываются полученные данные, добавить свойство alive, updated, updatedTime и метод примерно такого содержания:

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

 $this->setProperty("updated",time());
 $this->setProperty("updatedTime",date("H:i",time()));
 $this->setProperty("alive",1); 
 
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
 $alive_timeout=30*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); 
выбрав его в качестве метода при изменении у какого нибудь полученного свойства, например у давления. При этом esp должно выдавать давление с определенной периодичностью. Время $alive_timeout должно быть больше, чем период выдачи значения с esp. Теперь по значению свойства alive МЖД может определить достоверны ли данные или нет.
За это сообщение автора DimSun75 поблагодарил:
zhulen820 (Сб ноя 18, 2017 6:00 pm)
Рейтинг: 1.16%
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Обновление данных в панеле управления

Сообщение woow » Сб фев 04, 2017 11:37 am

При чём тут тупость, если такой пример, что МЖД следит за обогревом на даче (на улице февраль -20), там уже давно терморегулятор загнулся, а вы всё ещё видите что температура на даче +15 градусов, потребление электро тоже в норме, и приезжаете а там уже давно всё инеем покрылось.
Можете по подробней куда эти строки вписывать?
Raspberry Pi 3B+
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Обновление данных в панеле управления

Сообщение DimSun75 » Сб фев 04, 2017 1:48 pm

Вот теперь понятно. Я не знаю уровень ваших знаний, поэтому объясню с самого начала.

1. Создаем класс, например Sensors.
2. Добавляем в него метод onValueChange. В качестве кода вставляем приведены мной выше.
3. Добавляем свойство updated.
4. Добавляем свойство updatedTime
5. Добавляем свойство alive
6. Добавляем свойство value. В "Запускать метод при изменении" выбираем onValueChange.
7. Добавляем объект, например Temper1.
8. Идём в модуль mqtt. То, что вы назвали панелью, просто список всех топиков, на которые подписан МЖД. Заходим в свойства топика с нужной нам температурой. В "Связанный объект" выбираем наш Temper1, а "Свойство" - value.

Ну вот и все. Что у нас получилось: esp публикует значение температуры. Брокер mqtt передаёт его мжд, а он записывает его в свойство value объекта Temper1. Далее запускается метод onValueChange. В этом методе в свойства updated и updatedTime объекта Temper1 записывается текущее время. (Это время последнего обновления значения температуры). Далее устанавливается свойство alive в 1. Это говорит о том, что данные получены и актуальны. И далее запускается таймер, при срабатывании которого свойство alive устанавливается в 0. Если данные из esp поступают с периодичностью, например 1 минута, то этот таймер нужно запускать секунд на 70 например.

Теперь можно Temper1.value вставлять куда угодно. Это текущее значение температуры. При этом если Temper1.alive равен 1, то значения актуальны, а если 0, то нет. И в Temper1.updatedTime можно увидеть время последнего получения данных.

Можно в методе onNewMinute проверять значение Temper1.alive и если оно равно 0, то бить тревогу.

Примерно как-то так это работает. Я бы вообще мог посоветовать никакие классы не создавать, а использовать новый модуль "Простые устройства". Там это все реализованно из коробки.Но во первых, не знаю есть ли он в стабильной ветке. И во вторых, для температуры там таймер взводится на 2 дня, что уж очень много. А просто поправить его не так и просто

Отправлено с моего SM-G850F через Tapatalk
За это сообщение автора DimSun75 поблагодарили (всего 2):
samum (Вс фев 05, 2017 2:07 pm) • woow (Сб фев 09, 2019 12:31 am)
Рейтинг: 2.33%
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Обновление данных в панеле управления

Сообщение woow » Сб фев 04, 2017 4:18 pm

Спасибо за помощь но для меня всё таки сложно, очевидно не угадали уровня ... :)
Мною был создан объект
Объект :климат
Класс : климат
свойства климат.humidity
свойства климат.presure
свойства климат.temperature
так сюда ещё добавлять эти доп. свойства?
Методы : климат->onValueChange
Может быть что то подобное есть описано где то.
Raspberry Pi 3B+
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Обновление данных в панеле управления

Сообщение DimSun75 » Сб фев 04, 2017 5:07 pm

woow писал(а):Спасибо за помощь но для меня всё таки сложно, очевидно не угадали уровня ... :)
Мною был создан объект
Объект :климат
Класс : климат
свойства климат.humidity
свойства климат.presure
свойства климат.temperature
так сюда ещё добавлять эти доп. свойства?
Методы : климат->onValueChange
Может быть что то подобное есть описано где то.
Объекты и классы лучше поразному называть, чтобы не путаться.

В класс климат добавить свойства alive, updated и updatedTime. У любого из свойств humidity, presume или temperature выбрать запускать метод при изменении onValueChange.

Отправлено с моего SM-G850F через Tapatalk
Ответить