手元の環境ではプリンターのセットアップをラクにするために、WindowsServerのActiveDirectoryでGPOを使ってプリンターを配信しています。
Windows Server 2008 R2 のGPOにて、クライアントにプリンタを配布する - メモ的な思考的な
その環境でEPSONのPX-105プリンタを配信しているのですが、
- 本体に液晶がない
- プリンターのインクが切れた時に、インク切れのインクタンクが光らない
- インク残量を見るためには、各端末にツールを入れる必要がある
というプリンタ仕様*1のため、インク残量が分かりにくく悩んでいました。
そんな中、設定ユーティリティのEpsonNet Config V4
にSNMPの項目があることに気づきました。試しにRubyスクリプトを使ってデータをとってみたところ、インク残量を取得することができました。
そこで、Sinatraを使ってグラフ表示すると自分以外の人でも状態が見えてラクだと考え、作ってみることにしました。
環境
Rubyを使った、SNMPの Printer MIBによるインク残量の取得
Rubyによるインク残量の取得は以下の記事がとても参考になりました。ありがとうございました。
rubyでsnmpを使ってネットワークプリンタのトナー残量チェック - ころもの記録
なお、community名はEpsonNet Config V4
で確認したものを使いました。
EpsonNet Config V4 - EPSON Download
また、EPSONのPrinter MIBに関する資料は以下のページにありました(が、実際のものを見るには登録が必要...)。
MIB2に対するエプソンの解釈標準 - EPSON
他に、Printer MIBに関するRFCを探してみたところ、以下のRFC1759とRFC3805がありました。上記のエプソンのページでは、
RFC1759で規定されているPrinterMIBの各項目
と書かれていたため、PX-105でもRFC1759を採用しているのかなと想像しましたが、詳しいところはよく分かりませんでした。
Sinatraでのグラフ表示
グラフ表示については、以前HighChartsを使ったことがあったため、今回も使ってみることにしました。
Ruby + Heroku + Highchartsで食べたリンゴの割合をグラフ化してみた - メモ的な思考的な
HighChartsを手頃に使えそうなgemを探してみたところ、 LazyHighCharts
があったため、使ってみることにしました。
michelson/lazy_high_charts
SInatraで使う場合には、公式のサンプルを参考に以下の記述を追加しました。
Sinatra lazy high charts example - michelson/lazy_high_charts
- gemに
actionview
を追加 require
した後にinclude LazyHighCharts::LayoutHelper
して使う
なお、今回使用するStacked Columnsのサンプルは以下にありました。
Example for stacked column - michelson/lazy_high_charts
また、「残量/100」のうちの残量をタンクの色にしたかったため、複数のグラフを用意して
div.chart { display: table-cell; }
のように、cssで横並びにする方法にしました。
本当は一つのグラフだけで表現したかったのですが、やり方が分からなかったため見送りました。
インク残量の定期メール送信
ブラウザでグラフ表示するのも手間に感じることもあるため、定期的にインク残量をチェックし、メールで送信することも考えました。
定期実行する方法
gemを探してみたところ、whenever
がWindows上では動かないようだったので、rufus-scheduler
の3.x系を使いました。
jmettraux/rufus-scheduler
使い方については、以下のBlogを参考にしました。
webサーバー死活監視自作してみた by ruby + sinatra + heroku - shoprevのブログ
メールの送信
Sinatraの公式でも紹介されていたgem Pony
を使用しました。
How do I send email from Sinatra? - Sinatra
adamwiggins/pony
メールに関する設定は gem dotenv
を使って、.env
ファイルに記載するようにしました。
RubyファイルのWindowsサービス化
普通のWindows7端末なので、WindowsUpdateなどが走ると再起動してしまうことから、以下を参考にWindowsサービス化しました。
Ruby 2.0 + Sinatra + Thin を Windows サービス化してみた - 記憶は削除の方向で
なお、サービスのGUIには表示されますが、GUIを使ってサービスの再起動をしてみたところ失敗したため、再起動などはコマンドラインから実行する必要があるようです。
Sinatraまわりで調べたこと
起動時に一度だけ行う処理の記載
configure
メソッドを使います。今回はrufus-schedulerのインスタンスを入れました。
Intro Configuration - Sinatra
configureで指定できる設定内容
以下に記載がありました。
Configuring Settings - Sinatra
ソースコード
GitHubに上げました。初めてSinatraをModuler Applicationとして作れたので良かったです。
thinkAmi/PrinterStatus - GitHub
実行結果のサンプル
参考資料
SNMPのPrinter MIB に関して、MIBオブジェクトの日本語解説が以下の書籍にあったので参考になりました。
- 作者: トッドラーダマッチャー,マシューガスト,Todd Radermacher,Matthew Gast,鷺谷好輝
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2001/08
- メディア: 単行本
- この商品を含むブログを見る