Страница 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);
}
}