После пропадания питания V-OUT всегда выкл

  1. Берем WB7.4 testing
  2. Крыжик Relay&FETs V-Out переводим в ON
  3. Вырубаем контроллер, выдернув питалово. Свет пропал, а упса нет.
  4. Включаем контроллер.
  5. V-Out в off.

Пытаюсь воспроизвести WB7.4 для начала на stable
/etc/wb-mqtt-gpio.conf - по умолчанию.
Screenshot_20240702_153232
Оставляю включенным контрол, перезапускаю.

timeout 2 mosquitto_sub -v -t "/devices/wb-gpio/controls/V_OUT/#"
/devices/wb-gpio/controls/V_OUT/meta {"order":11,"readonly":false,"type":"switch"}
/devices/wb-gpio/controls/V_OUT/meta/order 11
/devices/wb-gpio/controls/V_OUT/meta/readonly 0
/devices/wb-gpio/controls/V_OUT/meta/type switch
/devices/wb-gpio/controls/V_OUT 1

Переключаюсь на testing.

Состояние восстанавливается. Собственно как и настроено.

journalctl -b 0 -u wb-mqtt-gpio

подозрительного нет. Как воспроизвести?

Вот прямо сейчас обновился на самое последнее и воспроизвел. На всякий

  1. обновился.
  2. пощелкал VOUT, оставляя его в ON
  3. рубанул питание
  4. контроллер загрузился
  5. VOUT OFF

На всякий диагностику прикладываю

приложен диагностический архив, доступен только сотрудникам поддержки
(472.2 KB)

Проверил с помощью reboot. VOUT на месте.
Так что для повторения надо рубить именно по питанию на входе

Сейчас попробую.

Отключил ИБП, заодно повключал три открытых коллектора
Screenshot_20240703_105715
Перезапускаю выключением.
Интересно, что последний (A1_OUT) который я выключал - не сохранился.
У вас так же?
Ну и пришлите пожалуйста /var/lib/wb-mqtt-gpio/libwbmqtt.db до перезагрузки и после.

after.db (8 KB)
это после

before.zip (310 Bytes)
А это ПЕРЕД (форму почему-то не хочет грузить его просто так, ставит after)

Но ситуация стала гораздо интереснее.

  1. На этот раз я VOUT не трогал.
  2. включил все a-out.
  3. подергал a1-out туда сюда (чтобы все были включены) (снял before)
  4. рубанул по питанию
  5. a1-out включен, остальные a - выключены!
  6. снял after

PS vout остался в порядке. так что тикет надо переименовывать “какая-то фигня с последней группой переключаителей при ребуте по питанию”

Да, высоковероятно что в
/var/lib/wb-mqtt-gpio/libwbmqtt.db запись идет не синхронно. а кэшируется. При этом для штатного завершения работы - кэш всегда успевает записаться.
UPD: Проверил еще, специально подождав ~полчаса. Да, сохраняется.

не, что-то другое

root@wirenboard-AG4LVLTQ:~# stat  /var/lib/wb-mqtt-gpio/libwbmqtt.db 
  File: /var/lib/wb-mqtt-gpio/libwbmqtt.db
  Size: 8192      	Blocks: 16         IO Block: 4096   regular file
Device: b302h/45826d	Inode: 28682       Links: 1
Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-06-26 09:13:55.223022094 +0300
Modify: 2024-07-03 15:13:28.784344620 +0300
Change: 2024-07-03 15:13:28.784344620 +0300
 Birth: 2023-12-21 16:55:51.778295002 +0300
root@wirenboard-AG4LVLTQ:~# stat  /var/lib/wb-mqtt-gpio/libwbmqtt.db 
  File: /var/lib/wb-mqtt-gpio/libwbmqtt.db
  Size: 8192      	Blocks: 16         IO Block: 4096   regular file
Device: b302h/45826d	Inode: 28682       Links: 1
Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-06-26 09:13:55.223022094 +0300
Modify: 2024-07-03 15:40:52.071532805 +0300
Change: 2024-07-03 15:40:52.071532805 +0300
 Birth: 2023-12-21 16:55:51.778295002 +0300
  1. Дал поработать
  2. снял статистику
  3. пощелкал выключателями
  4. тут же снял еще раз статистику.

По второму stat видно, что он меняет файл тут же, не ждет никаких сбросов кешей

А, cтоп, есть же еще кэш у FS. И он может всю малину портить. А в логах нет ничего про fsck…

Причем подозреваю что тут из-за ядра, нового То есть оно оптимизирует записи на EMMC кэшем, если принудительный sync сделать - то пишет. Но тут пожалуй моей компетенции мало - позову разработчиков. Обсудим глюк ли это.

Ну да, это кеширование FS. Проверьте, сработает ли фикс у вас. У меня - сработал

# cat /etc/systemd/system/libwbmqtt-saver.service 
[Unit]
Description=Drop file cache for libwbmqtt.db if it changed

[Service]
ExecStart=/bin/bash -c 'inotifywait -qq -e modify /var/lib/wb-mqtt-gpio/libwbmqtt.db && dd of=/var/lib/wb-mqtt-gpio/libwbmqtt.db oflag=nocache conv=notrunc,fdatasync count=0 status=none'
Restart=always

[Install]
WantedBy=multi-user.target

ну и потом systemctl daemon-reload , systemctl enable libwbmqtt-saver.service, systemctl start libwbmqtt-saver.service

Сервис тупо смотрит на изменение этого файлика и как только он поменялся, сбрасывает файловый кеш только для этого файла.

Можно пользовать для тех, у кого болит :slight_smile:

1 лайк

Ну и вариант 2 - лезть в код и ставить там принудительный сброс. Но тут и у меня компетенция кончилась :slight_smile:

Описал багу в трекере, подождем что разработчики решат - как обходить/чинить.
Вполне возможно что будут форсить запись по таймеру при наличии изменений.