Множественные реакции на единичное событие в Zigbee2MQTT

при нажатии Zigbee кнопки в Zigbee2MQTT возникает сразу несколько записей. Для локализации проблемы сократил скрипты короче короткого:

log(“start rules”);
publish( “zigbee2mqtt/0xa4c13827afbf22b7/set”, JSON.stringify({“state_l1”: “OFF”,“state_l2”: “OFF”,“state_l3”: “OFF”}), 2, false);
log (“all relay off”);

на что получаю в логах:

19-12-2022 11:54:59.984 [wb-rules] INFO: reloading file: /etc/wb-rules/rules.js
19-12-2022 11:54:59.290 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099284,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.269 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099258,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.262 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099258,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.207 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099201,linkquality:3,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.191 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099187,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.116 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099109,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.099 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099096,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:59.099 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-19 08:54:59: MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{last_seen:1671440099096,linkquality:7,state_l1:OFF,state_l2:OFF,state_l3:OFF,state_l4:OFF}’
19-12-2022 11:54:58.990 [wb-rules] INFO: [rule info] all relay off
19-12-2022 11:54:58.988 [wb-rules] INFO: [rule info] start rules

из оборудования:
WB7 (2207),
Модуль расширения WBE2R-R-ZIGBEE v.2
и 4-х канальное Zigbee реле
+Zigbee2MQTT
Кто-нибудь знает что происходит?
буду признателен за помощь

ЗЫ: какое-то время назад работало нормалью, и вот опять :slight_smile:
в логах при загрузке проскакивали ошибки, которых раньше не было:

19-12-2022 02:29:58.076 [ssh] /etc/ssh/sshd_config line 37: Deprecated option RhostsRSAAuthentication
19-12-2022 02:29:58.076 [ssh] /etc/ssh/sshd_config line 37: Deprecated option RhostsRSAAuthentication
19-12-2022 02:29:58.076 [ssh] /etc/ssh/sshd_config line 30: Deprecated option RSAAuthentication
19-12-2022 02:29:58.076 [ssh] /etc/ssh/sshd_config line 19: Deprecated option ServerKeyBits
19-12-2022 02:29:58.076 [ssh] /etc/ssh/sshd_config line 18: Deprecated option KeyRegenerationInterval
19-12-2022 02:29:58.046 [init.scope] Reloading OpenBSD Secure Shell server.
19-12-2022 02:29:58.019 the NTP socket is in use, exiting

и такие:

19-12-2022 02:29:01.290 [wb-rules] ERROR: [rule error] failed to open config file: /etc/wb-mqtt-dac.conf
19-12-2022 02:29:01.288 [wb-rules] ERROR: [rule error] failed to open config file: /var/lib/wb-mqtt-dac/conf.d/system.conf

Добрый день.
Вот тут https://support.wirenboard.com/t/odno-nazhatie-knopki-privodit-k-trem-soobshheniyam-v-nodered/ уже рассматривался вопрос. Вкратце: Подпишитесь на топик zigbee2mqtt, если само устройство трижды отправляет сообщение - то игнорировать его надо программно.

Спасибо.
Но почему бы устройство вдруг решило отправлять побольше сообщений? Оно же отправляло нормально неделю назад…
мне кажется на железку надо грешить в последнюю очередь

вот пример из раньшего времени:
12-12-2022 10:44:48.611 [zigbee2mqtt] Zigbee2MQTT:info 2022-12-12 07:44:48: MQTT publish: topic ‘zigbee2mqtt/my relay1’, payload ‘{“last_seen”:1670831088598,“linkquality”:54,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“OFF”,“state_l4”:“OFF”}’

Так проверьте… Подпишитесь - посмотрите. Это проще и быстрее чем обсуждать возможные причины.

Под кнопкой имеете ввиду физическую кнопку на устройстве? И зачем вы при старте скрипта отправляете устройству команду через publish?

Расскажите подробнее по шагам, что делаете и что хотите получить. Сейчас, к сожалению, со стороны выглядит как попытка сделать что-то без понимания результата, но я уверен, что это не так.

конечно я пытаюсь быть осмысленным :slight_smile:
задача управление вентиляторами конвекторов. К ним проложены только питание а там 3 положения. Поэтому читаем состояние вентилятора на термостате BAC-002ALN и устанавливаем соответствующее состояние зигби реле. НО. Это даже не важно. Я удалил все скрипты и оставил только одну команду, которая выполняется 1 раз при загрузке скрипта, чтобы не отвлекаться на другие варианты. И она генерит множество сообщений. Я подписался на топик. Там действительно проходит несколько сообщений подряд.
Исполнение одного Publish генерит 14 сообщений (7 пар, в паре - одинаковые last_seen)
как в такой ситуации обрабатывать zigbee кнопки по last_seen? (сообщения от кнопки тоже дуплицируются)

========
1671616476365
36
OFF
OFF
OFF
OFF
1671616476365
36
OFF
OFF
OFF
OFF
1671616476383
40
OFF
OFF
OFF
OFF
1671616476383
40
OFF
OFF
OFF
OFF
1671616476439
40
OFF
OFF
OFF
OFF
1671616476439
40
OFF
OFF
OFF
OFF
1671616476464
40
OFF
OFF
OFF
OFF
1671616476464
40
OFF
OFF
OFF
OFF
1671616476517
40
OFF
OFF
OFF
OFF
1671616476517
40
OFF
OFF
OFF
OFF
1671616476517
40
OFF
OFF
OFF
OFF
1671616476517
40
OFF
OFF
OFF
OFF
1671616476535
40
OFF
OFF
OFF
OFF
1671616476535
40
OFF
OFF
OFF
OFF

ради эксперимента изменил скрипт и добавил еще одну строку

log(“start rules”);
publish( “zigbee2mqtt/0xa4c13827afbf22b7/set”, JSON.stringify({“state_l1”: “OFF”,“state_l2”: “OFF”,“state_l3”: “OFF”}), 2, false); // отправляем команду zigbee relay
publish( “zigbee2mqtt/0xa4c13827afbf22b7/set”, JSON.stringify({“state_l1”: “ON”,“state_l2”: “OFF”,“state_l3”: “OFF”}), 2, false); // отправляем команду zigbee relay
log (“end rules”);

получил отклик точно такой же но в 2раза больше ( по 14 на каждый publish)

также меня смутило сообщение(это адрес реле):

======
Zigbee2mqtt
wb-rules
{“message”:“Publish ‘set’ ‘state’ to ‘0xa4c13827afbf22b7’ failed: ‘Error: Command 0xa4c13827afbf22b7/1 genOnOff.off({}, {"sendWhen":"immediate","timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"srcEndpoint":null,"reservedBits":0,"manufacturerCode":null,"transactionSequenceNumber":null,"writeUndiv":false}) failed (Data request failed with error: ‘MAC no ack’ (233))’”,“meta”:{“friendly_name”:“0xa4c13827afbf22b7”},“type”:“zigbee_publish_error”}

повторюсь все было нормально и вдруг вот так. очень странно
я совсем небольшой специалист в этом, поэтому обращаюсь к умным людям

Это сообщение об ошибке, что команда устройству не доставлена.

Вот тут я не понял, кто отправляет сообщения — устройство? Как вы их отлавливаете? Обмен происходит так: вы с помощью publish отправляете команду в топик Zigbee-устройства, далее zigbee2mqtt видит это сообщение и отправляет его устройству по протоколу Zigbee. Некоторые устройства присылают в подтверждение кроме статуса и своё текущее состояние.

Возможно, вы действительно, отловили какой-то баг, поэтому попрошу сделать ещё пару шагов и написать результат по каждому из них:

  1. Удалите строки с publish из скрипта и перезапустите wb-rules в консоли командой systemctl restart wb-rules и убедитесь, что сообщения не публикуются.
  2. Добавьте в скрипт одну строку и снова выполните в консоли systemctl restart wb-rules. Убедитесь, что снова публикация происходит много раз.

Также пришлите, пожалуйста, диагностический архив, инструкция. Архив лучше выгрузить сразу после ваших экспериментов по шагам выше.

Спасибо.
я использую команду
mosquitto_sub -t /devices/#
смотрю все топики
я отключил всё кроме: 3-х zigbee устройств 4-х канальное реле, розетка, кнопка и термостат BAC-002ALN по modbus.
все скрипты удалены, есть только один скрипт с одним publish. я добавляю или удаляю пустую строку и сохраняю. в этот момент он (скрипт) единожды (я надеюсь) исполняется. при этом в отдельном окне, где запущен mosquitto_sub -t /devices/# вижу в онлайне все сообщения.

я сейчас сделаю все как Вы сказали

Смотреть надо в топик самого z2m то есть в zigbee2mqtt/#

я очистил файл правил. перезапустил wb-rules. вставил publish и получаю ошибку при сохранении. а строка копипаст
Script error: SyntaxError: error parsing token (line 2)
duk_lexer.c:1272
rules.js

Save

1

2
publish (“zigbee2mqtt/0xa4c13827afbf22b7/set”, JSON.stringify({“state_l1”: “OFF”,“state_l2”: “OFF”,“state_l3”: “OFF”}), 2, false);
3

4

и в MQTT channels такая запись:

{“message”:“Publish ‘set’ ‘state’ to ‘0xa4c13827afbf22b7’ failed: ‘Error: Command 0xa4c13827afbf22b7/1 genOnOff.off({}, {"sendWhen":"immediate","timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"srcEndpoint":null,"reservedBits":0,"manufacturerCode":null,"transactionSequenceNumber":null,"writeUndiv":false}) failed (Data request failed with error: ‘MAC no ack’ (233))’”,“meta”:{“friendly_name”:“0xa4c13827afbf22b7”},“type”:“zigbee_publish_error”}

Напишите, пожалуйста, результат по каждому пункту, что я просил сделать. Прям так же с цифрами.

  • удалил скрипты все
  • systemctl restart wb-rules
  • mosquitto_sub -t zigbee2mqtt/#
  • создал файл Rules.js
  • вставил в файл:
    publish(“zigbee2mqtt/0xa4c13827afbf22b7/set”, JSON.stringify({“state_l1”: “OFF”,“state_l2”: “OFF”,“state_l3”: “ON”}), 2, false);
  • нажал сохранить
  • получил в консоле семь сообщений:
    online
    {“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213060,"linkquality":43,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213060,“linkquality”:43,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213077,"linkquality":47,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213077,“linkquality”:47,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213134,"linkquality":47,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213134,“linkquality”:47,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213164,"linkquality":47,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213164,“linkquality”:47,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213213,"linkquality":43,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213213,“linkquality”:43,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213213,"linkquality":43,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213213,“linkquality”:43,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/0xa4c13827afbf22b7’, payload ‘{"last_seen":1671633213234,"linkquality":43,"state_l1":"OFF","state_l2":"OFF","state_l3":"ON","state_l4":"OFF"}’”}
    {“last_seen”:1671633213234,“linkquality”:43,“state_l1”:“OFF”,“state_l2”:“OFF”,“state_l3”:“ON”,“state_l4”:“OFF”}
    log_20221221T173537.log (4.9 КБ)

Как и предполагалось, устройство несколько раз передает свое состояние.
Советую debounce использовать или другое программное решение.