Есть у меня интересная задача автоматизировать мониторинг принтеров Canon (парк из 40 принтеров: 20 G1430 USB и 20 G5040 LAN). Смог написать простенький npm пакет canon-monitor, но есть проблема:
- Не могу собирать состояние принтеров, если у них ошибка: SNMB выдает пустую таблицу при ошибках на G5040, а через WMI на G5040 и G1430 возвращается ErrorState и LastErrorState, но там null. С G5040 я обошел кетч ошибки парсингом их веб-морды с помощью puppeeter, но парсинг происходит всегда каждые 5 секунд, если принтер онлайн, потому что узнать, что у них ошибка, фактически можно только через веб-морду (поправьте, если это не так). Поэтому каждые 5 секунд происходит неприятная и сильная нагрузка на сервер.
Мне нужно собирать такие данные:
- Текущая ошибка (предыдущая не нужна, так как все ошибки будут кидаться в метрики принтера)
- Кол-во отпечатанных страниц (хоть как, хоть через очередь печати, дальше суммирование и в метрику)
- Состояние: ошибка/онлайн/оффлайн/печатает
- Кол-во чернил (только для G5040)
- Состояние наполненности памперса
Что я сейчас могу получить:
по WMI: workOffline true\false (принтер онлайн или нет), статус idle\printing
по SNMB (G5040): general status offline\online (остальные статусы хз, но не работают), up-time. prtAlertTable пустой и в случае ошибки не заполняется.
Что я делаю не так и как можно получить эти данные с принтеров?
1. разве у Canon нет инструментов для централизованного управления принтерами (тем более сетевыми)? раньше у них что-то подобное было - точно не помню...
2. пробовали поднять какой-нибудь принт-сервер и добавить в него принтера? так вы можете получить некий общий журнал/лог, из которого можно вытаскивать разные события
rPman, а вот фиг знает. Puppeter нажатие кнопки эмулирует, а потом читает значение элемента, каждые 5 секунд.
нет, у принтеров нет легкодоступного лога, было бы так, меня бы здесь не было