Страница 104 из 124
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:00 am
Nilov
Попробовал данный код, каждые 20 секунд сообщение в Телеграмм ((
Код: Выделить всё
if ($params['NEW_VALUE']!=$params['OLD_VALUE']) {
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
}
Без return a вообще ничего никуда не приходит, тишина(
Код: Выделить всё
if ($params['NEW_VALUE']!=$params['OLD_VALUE']) return;
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:08 am
Nilov
В моём понимании логика должна быть следующая:
через определенные промежутки времени (в моём случае 20 сек.) по MQTT прилетают сообщения от устройства 0, 0, 0, 0, 0, 0, 0 и т.д.
сравниваем последнее сообщение с предпоследним и если они не отличаются, т.е. равны то ничего не делаем.
Как только последнее сообщение стало отличаться от предпоследнего сразу говорим - Восстановлено напряжение или Пропало напряжение.
Как это в коде написать не понимаю.
А как это у меня работало пару лет назад в таком коде, вообще загадка:
Код: Выделить всё
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:08 am
freesh
Nilov писал(а): Сб дек 21, 2019 12:00 am
Попробовал данный код, каждые 20 секунд сообщение в Телеграмм ((
Код: Выделить всё
if ($params['NEW_VALUE']!=$params['OLD_VALUE']) {
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
}
Без return a вообще ничего никуда не приходит, тишина(
Код: Выделить всё
if ($params['NEW_VALUE']!=$params['OLD_VALUE']) return;
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
Я сначала ошибся в коде, посмотри последний вариант

if ($params['NEW_VALUE']!=$params['OLD_VALUE']) {
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
}
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:14 am
freesh
Nilov писал(а): Сб дек 21, 2019 12:08 am
В моём понимании логика должна быть следующая:
через определенные промежутки времени (в моём случае 20 сек.) по MQTT прилетают сообщения от устройства 0, 0, 0, 0, 0, 0, 0 и т.д.
сравниваем последнее сообщение с предпоследним и если они не отличаются, т.е. равны то ничего не делаем.
Как только последнее сообщение стало отличаться от предпоследнего сразу говорим - Восстановлено напряжение или Пропало напряжение.
Как это в коде написать не понимаю.
А как это у меня работало пару лет назад в таком коде, вообще загадка:
Код: Выделить всё
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
Логика правильная

и по идее можно вообще без проверки VALUE если метод срабатывает только при ИЗМЕНЕНИИ

Если постоянный поток данных то да надо проверять.
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:16 am
Nilov
if ($params['NEW_VALUE']!=$params['OLD_VALUE']) {
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
}
скопировал, вставил данный код = каждые 20 сек. сообщение: Восстановлено напряжение
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:23 am
freesh
Nilov писал(а): Сб дек 21, 2019 12:16 am
if ($params['NEW_VALUE']!=$params['OLD_VALUE']) {
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
}
скопировал, вставил данный код = каждые 20 сек. сообщение: Восстановлено напряжение
Эмм...
А параметры точно не меняются?
say($params['NEW_VALUE']);
say($params['OLD_VALUE']);
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:30 am
Nilov
как это проверить?
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:33 am
freesh
Nilov писал(а): Сб дек 21, 2019 12:30 am
как это проверить?
По идее можно в X-ray - methods
Или просто в скрипт добавить:
say($params['NEW_VALUE']);
say($params['OLD_VALUE']);
Тогда в лог алисы выведется

Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:40 am
Nilov
.Attention изменение состояния {"VALUE":"0", "OLD_VALUE":"0", "ORIGINAL_OBJECT_TITLE":"Sensor_state01"} 2019-12-21 00:37:09
Sensor_state01.Attention {"VALUE":"0", "OLD_VALUE":"0"} 2019-12-21 00:37:09
Re: Простые устройства / Simple Devices
Добавлено: Сб дек 21, 2019 12:41 am
freesh
Nilov писал(а): Сб дек 21, 2019 12:40 am
.Attention изменение состояния {"VALUE":"0", "OLD_VALUE":"0", "ORIGINAL_OBJECT_TITLE":"Sensor_state01"} 2019-12-21 00:37:09
Sensor_state01.Attention {"VALUE":"0", "OLD_VALUE":"0"} 2019-12-21 00:37:09
Получается там не NEW_VALUE а просто VALUE
Код: Выделить всё
if ($params['VALUE']!=$params['OLD_VALUE']) {
if (getGlobal('Sensor_state01'.'.'.'value') == 0) {
say('Восстановлено напряжение', 10);
}
if (getGlobal('Sensor_state01'.'.'.'value') == 1) {
say('Пропало напряжение', 10);
}
}