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

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

Модератор: immortal

Nilov
Сообщения: 7
Зарегистрирован: Пт дек 20, 2019 9:57 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение 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);
}
Nilov
Сообщения: 7
Зарегистрирован: Пт дек 20, 2019 9:57 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение 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);
}
Последний раз редактировалось Nilov Сб дек 21, 2019 12:11 am, всего редактировалось 1 раз.
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

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

Сообщение freesh » Сб дек 21, 2019 12:08 am

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);
}
}
Raspberry pi3, xiaomi, sonoff rf.
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

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

Сообщение freesh » Сб дек 21, 2019 12:14 am

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 если метод срабатывает только при ИЗМЕНЕНИИ :)
Если постоянный поток данных то да надо проверять.
Raspberry pi3, xiaomi, sonoff rf.
Nilov
Сообщения: 7
Зарегистрирован: Пт дек 20, 2019 9:57 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение 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 сек. сообщение: Восстановлено напряжение
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

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

Сообщение freesh » Сб дек 21, 2019 12:23 am

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']);
Raspberry pi3, xiaomi, sonoff rf.
Nilov
Сообщения: 7
Зарегистрирован: Пт дек 20, 2019 9:57 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение Nilov » Сб дек 21, 2019 12:30 am

как это проверить?
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

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

Сообщение freesh » Сб дек 21, 2019 12:33 am

Nilov писал(а):
Сб дек 21, 2019 12:30 am
как это проверить?
По идее можно в X-ray - methods

Или просто в скрипт добавить:
say($params['NEW_VALUE']);
say($params['OLD_VALUE']);

Тогда в лог алисы выведется :)
Raspberry pi3, xiaomi, sonoff rf.
Nilov
Сообщения: 7
Зарегистрирован: Пт дек 20, 2019 9:57 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение 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
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

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

Сообщение freesh » Сб дек 21, 2019 12:41 am

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);
}
}
За это сообщение автора freesh поблагодарил:
Nilov (Сб дек 21, 2019 1:17 am)
Рейтинг: 1.16%
Raspberry pi3, xiaomi, sonoff rf.
Ответить