2016年11月14日月曜日

Orange Pi PC をケースに組み込む

首を長くして待っていたケースが届きました\(^O^)/ 早速組み込むことにします。

中華クオリティで微妙にフィットしなかったらどうしようと思っていたのですが、実際組み立ててみると杞憂に終わりました。

本当はスモーク仕様のケースが欲しかったのですが、ファン付きのケースでスモーク仕様のものは探せませんでした。選択肢無しでクリアケースになりした。保護シールを貼ったままの方が艶消しでいい感じだったのですが、ただの保護シートですので気泡も目立ちますからサクっと剥がして組み立てました。

ちょっと悩んだのが 30mmファンを吸気・排気のどちらにセットするかでした。PCケースだったら排気なんでしょうが、本ケースはエアフローも期待できないので吸気にすることにしました。

あと、小さいファンは高い音が出るので、5V動作のファンを 3.3Vで動作させています。心持ち音が小さくなったと感じています。

ファン付きケースに入れる前後の CPU温度の推移ですが、次のようなグラフになりました。(左がむき出し状態、右がケース収納状態)

temp_01temp_02

外気温(室温)が変動すると実際の効果が見えなくなると思い、こっそり職場のマシン室で稼働させています。室温は概ね21℃を保っています。(左の図で 9時から13時ちょい前までフラットなのは電源off のため)

CPUの温度ですが、

  • むき出しの状態で使っていたときは 35℃前後
  • ファン付きケースに入れた状態では26℃前後
  • 負荷をかけるため UnixBench を動かした状態では47℃前後

で推移していました。Orange Pi PC で使用している Allwinner H3 の動作温度は -20~70℃とデータシートに記載されていました。高負荷で動かすことはないと思いますので、おそらく室温+10~15℃で動くと思っています。夏場も何とか乗り切れそうですね。

職場のマシン室にいつまでも置いておくわけにはいかないので、この後は自宅へ持ち帰える予定です。温度センサーをケース内へ組み込むのを忘れないようにしないと。

2016年11月12日土曜日

Orange Pi PC で MRTGの設定 (温度計測)

LM75温度センサーで温度計測ができるようになりましたので、室温とCPU温度をMRTGを利用してグラフ化してみました。

CPUの温度はOrangepi のフォーラムによると
cat /sys/devices/virtual/thermal/thermal_zone0/temp
で分かるようです。

/etc/mrtg.d 配下に temperature.sh を作りました。

#!/bin/sh

ROOM_TEMP=`/usr/sbin/i2cget -y 0 0x48 0x00 w | awk '{print \
(("0x"substr($1,5,2)substr($1,3,1))*0.0625)}'`
CPU_TEMP=`cat /sys/devices/virtual/thermal/thermal_zone0/temp`

echo $ROOM_TEMP
echo $CPU_TEMP
echo ""
echo ""
exit 0

mrtg.cfg に下記内容を追加しました。

## temperature ##
Target[opi-pc_temp]: `/etc/mrtg.d/temperature.sh`
Directory[opi-pc_temp]: localhost
MaxBytes[opi-pc_temp]: 100
Unscaled[opi-pc_temp]: dwmy
Options[opi-pc_temp]: gauge, absolute, growright, noinfo, nopercent
WithPeak[opi-pc_temp]: ymw
YLegend[opi-pc_temp]: 温度計測(℃)
ShortLegend[opi-pc_temp]: (℃)
LegendI[opi-pc_temp]: 室温
LegendO[opi-pc_temp]: CPU
Legend1[opi-pc_temp]: 室温
Legend2[opi-pc_temp]: CPU
Legend3[opi-pc_temp]: Max 室温
Legend4[opi-pc_temp]: Max CPU
Title[opi-pc_temp]: Orange Pi PC 温度計測
PageTop[opi-pc_temp]: <h1>Orange Pi PC 温度計測</h1>

 

2016/11/15 追記
Orange Pi PC をケースに組み込むでの試験結果も終わりましたので、新規に計測を始めました。合わせてディレクトリとファイル名が長すぎる気がしたので、こちらも短くしました。現在の設定は下記の通り。

後、今頃気がついたのですが YLegend は英記号以外だと表示できませんね。文字→jpeg変換をする際、1byte文字を、方法はよく分からないのですが90°左に回転させているようです。2byte文字だと上手くいかないようです。(ShortLegend の方は問題ないので、2byte文字表記のままです。)

$ sudo cat /etc/mrtg.cfg
######################################################################
# Multi Router Traffic Grapher -- Sample Configuration File
######################################################################
# This file is for use with mrtg-2.5.4c

# Global configuration
WorkDir: /var/www/mrtg
WriteExpires: Yes
#Title[^]: Traffic Analysis for
Title[^]: MRTG for

# 128K leased line
# ----------------
#Title[leased]: a 128K leased line
#PageTop[leased]: <H1>Our 128K link to the outside world</H1>
#Target[leased]: 1:public@router.localnet
#MaxBytes[leased]: 16000

##################################
## Orange Pi PC(192.168.11.252) ##
##################################
## CPU Used ##
Target[cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:test-ro@localhost
Directory[cpu]: opi-pc
MaxBytes[cpu]: 100
Unscaled[cpu]: dwmy
Options[cpu]: gauge, absolute, growright, noinfo, nopercent
WithPeak[cpu]: ymw
YLegend[cpu]: CPU Load
ShortLegend[cpu]: (%)
LegendI[cpu]: 1分間平均
LegendO[cpu]: 5分間平均
Legend1[cpu]: 1分間平均(%)
Legend2[cpu]: 5分間平均(%)
Legend3[cpu]: Max 1分間平均(%)
Legend4[cpu]: Max 5分間平均(%)
Title[cpu]: Orange Pi PC CPU使用率
PageTop[cpu]: <h1>Orange Pi PC CPU使用率</h1>

## temperature ##
Target[temp]: `/etc/mrtg.d/temperature.sh`
Directory[temp]: opi-pc
MaxBytes[temp]: 70
Unscaled[temp]: dwmy
Options[temp]: gauge, absolute, growright, noinfo, nopercent
WithPeak[temp]: ymw
YLegend[temp]: Temperature
ShortLegend[temp]: (℃)
LegendI[temp]: 室温
LegendO[temp]: CPU
Legend1[temp]: 室温
Legend2[temp]: CPU
Legend3[temp]: Max 室温
Legend4[temp]: Max CPU
Title[temp]: Orange Pi PC 温度計測
PageTop[temp]: <h1>Orange Pi PC 温度計測</h1>

2016年11月10日木曜日

amazon の安物 LM75A温度センサーについて

結構色々なところで売られているようですが、どこも回路図が無いようです。基板を見るとプルアップされているように思えるので、センサー単体でつないでおりますが特に問題は出ていません。

おそらくここの回路図と同じような構成なのではないかと思うのですが。

詳しい情報をお持ちの方がいましたらご教示ください。(アドレスの変更ぐらいは、ちゃんとした情報が欲しいですね。)

スケッチサイエンスさんのLM75B温度センサ(I2C接続)を買った方が苦労が無くていいかもしれません。値段もあまり変わらないし。(アドレス変更用のチップ抵抗を上手く付ける自信は無いですが...)

Orange Pi PC で LM75Aを使い温度計測 その2

さて、仮組みをしたはいいものの問題が発生している LM75A温度センサーの動作について引き続き検証をしてみます。

考えられる理由として

  1. はんだ付けがまずく、接触不良を起こしている。
  2. LM75A温度センサーのモジュールが壊れている。
  3. なにかとバッティングしている。

を考えてみました。

  1. はんだ付けは、ブレッドボードに装着後テスターで導通チェックするも問題は無さそう。
  2. モジュールに関しては、i2cdetect で何かあるため生きていると仮定。
  3. バッティングですかね?

と当たりを付けチェックしてみることにしました。

$ sudo ls /sys/class/i2c-adapter/i2c-0/
0-0048  delete_device  i2c-dev  new_device  subsystem
0-0077  device         name     power       uevent

なにやら 0-0048 と怪しげ(?)なディレクトリがあるではないですか。0-0048 の中身をのぞいてみると

$ sudo ls -l /sys/class/i2c-adapter/i2c-0/0-0048/
合計 0
lrwxrwxrwx 1 root root    0 11月 10 15:01 driver -> ../../../../../bus/i2c/drivers/pcf8591
drwxr-xr-x 3 root root    0 11月 10 12:45 hwmon
-r--r--r-- 1 root root 4096 11月 10 12:45 in0_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in1_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in2_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in3_input
-r--r--r-- 1 root root 4096 11月 10 15:01 modalias
-r--r--r-- 1 root root 4096 11月 10 12:45 name
-rw-r--r-- 1 root root 4096 11月 10 15:01 out0_enable
-rw-r--r-- 1 root root 4096 11月 10 15:01 out0_output
drwxr-xr-x 2 root root    0 11月 10 12:45 power
lrwxrwxrwx 1 root root    0 11月 10 12:45 subsystem -> ../../../../../bus/i2c
-rw-r--r-- 1 root root 4096  1月  1  1970 uevent

driver が pcf8591 にシンボリックリンクされています。lsmod で確認してみると pcf8591 がロードされていました。

$ lsmod
Module                  Size  Used by
sunxi_cir               1601  0
bmp085                  3487  0
pcf8591                 3363  0
gpio_sunxi              8269  0
8189es               1076034  0

pcf8591 ってなに? グーグル先生に聞いてみることにしました。AD/DAコンバータのようです、しかも悪いことにデフォルトで使われるアドレスが 0x48 です。LM75A温度センサー上にもコンバータがあるのでロードされているのでしょうか?

LM75A温度センサーのGNDのいずれかをパターンカット、A0~A2をVCCに10KΩでプルアップしアドレス変更って手もありますが、取りあえず rmmod で pcf8591 をアンロードし、i2cdetect → i2cget を実行してみました。

$ sudo rmmod pcf8591

$ sudo lsmod
Module                  Size  Used by
sunxi_cir               1601  0
bmp085                  3487  0
gpio_sunxi              8269  0
8189es               1076034  0

$ sudo i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

$ sudo i2cget -y 0 0x48 0x00 w
0xa014

おお、LM75A温度センサーを認識し、値も読み出せるではないですか。後は読み出した Hex の値を変換すれば良さそうです。

その前に、再起動をすると pcf8591 がロードされ読み出せない状態に陥ってしまうのでブラックリストのファイルを編集しておきましょう。最下行にでも  blacklist pcf8591 を追記しておいてください。

$ sudo vi /etc/modprobe.d/fbdev-blacklist.conf

Hex値の変換ですが、こちらのサイトを参考にして実行しました。スクリプト中の awk文は少々長いので、引用で使われている方を使うことにしました。

$ sudo i2cget -y 0 0x48 0x00 w | awk '{print(("0x"substr($1,5,2)substr($1,3,1))*0.0625)}'
20.625

おお、摂氏変換も上手くいっているようです。20.625℃のようです。

LM75A温度センサーの精度確認もしてみました。卓上の温度計付き目覚まし時計との比較ですが、

LM75A:20.9℃
時計 :20.8℃

ほぼ同じです。温度計目覚まし時計が正確かっていうと何の保証もないんですけど(笑) 大幅に違うことがないことが確認できれば ok です。

後は MRTG で室温とCPU温度を計測するようにしてみます。

2016年11月9日水曜日

Orange Pi PC で LM75Aを使い温度計測 その1

Orange Pi PC と一緒に頼んだケースが、また届いておりません。中国は出国しているので、近日中に届くと思うのですが。数ドルをけちらず Shenzhen Xunlong Software から買っていれば本体と一緒に届いたんですけどねぇ。(まぁ、届くのを待つのも楽しみの一つ?!)

amazon で頼んでいた LM75A温度センサーが届いておりましたので、ピンヘッダーを付けて温度計測ができるよう設定をしてみます。国内発送かと思いきや、こちらも中国発送でした。後から頼んだのに、ケースより先に届いておりました。

自分が注文したものは260円でしたが現在品切れで再入荷の見通し無し、同等品と思われるものは 11/10現在320円でした。通勤・通学で秋葉原を利用できるようでしたら、千石電商あたりでスイッチサイエンスのLM75B温度センサーを買っちゃった方がいいかもしれません。

ちなみに付属していたピンヘッダーはストレートタイプでしたが、ケース内収納を考えたとき L字の方が取り回しが効くと判断し、手持ちの L字ピンヘッダーを取り付けました。

Orange Pi PC との接続ですが、ブレッドボードを使って仮組みをすることにしました。センサーの動作電圧は 2.8~5.5Vですので 3.3Vで動作をさせることにしました。

LM75A

Orange Pi PC LM75Aセンサー
1 VCC
3 SDA
5 SCL
9 GND

こんな感じで接続をしました。

 

次に i2c関連のパッケージをインストールします。

$ sudo apt install i2c-tools
[sudo] password for koyama:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
  libi2c-dev python-smbus
推奨パッケージ:
  read-edid
以下のパッケージが新たにインストールされます:
  i2c-tools
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。



i2c-tools (3.1.1-1) を展開しています...
man-db (2.7.0.2-5) のトリガを処理しています ...
i2c-tools (3.1.1-1) を設定しています ...

提案と推奨のパッケージもインストールすることにします。

$ sudo apt install libi2c-dev python-smbus read-edid

Raspberry Pi の場合ですと i2c-devモジュールをロードする必要がありますが、Orange Pi はロードをしなくともデフォルトで有効になっているようです。念のため、確認をしてみます。

$ ls /dev/i2*
/dev/i2c-0  /dev/i2c-1

i2c用のディレクトリが見えるので有効になっているようです。LM75A温度センサーが認識されているか確認をしてみます。

$ sudo i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

バスは 0 と 1 の二つ、LM75A温度センサーはバス0 に接続されているようです。ただし、表示が "UU" になっていますので、なにか問題が起きているようです。

取りあえずデータが読み込めるか否かの確認をしてみました。

$ sudo i2cget -y 0 0x48 0x00 w
Error: Could not set address to 0x48: Device or resource busy

予想通り読み込めませんでした...

検証の続きは明日行うことにします。

2016年11月6日日曜日

Debian jessie で特定パッケージの自動更新を行わない

/etc/mrtg をちょっといじった関係で、mrtg パッケージの自動更新を無効化できないかグーグル先生に聞いてみました。

そのものずばりが、Debian(Ubuntu)で apt-get upgrade で自動更新したくない場合の対応にありました。自分の場合、更新させされなければok かつダウングレードすることも無いでしょうから簡単パターンで設定をしました。

$ echo mrtg hold | sudo dpkg --set-selections

$ dpkg --get-selections | grep hold
mrtg                                            hold

んー、いいんじゃない。

2016年11月4日金曜日

Orange Pi PC で MRTGの設定

I2C温度モジュールが届いたら、室温とCPU温度を MRTGで表示予定です。前段階として、諸情報を MRTGで表示できるよう設定をしました。

まずは MRTG・snmp関連のインストールをしました。一気にインストールしてもいいと思うのですが、個別に指定しました。file は未インストール→追加、sysv-rc-conf は chkconfig が debian には無いので代替えとして追加。オプションも chkconfig と同じようなので、インストール後 alias とかシンボリックリンクで chkconfig に関連付けると使いやすいかも。

$ sudo apt install apache2

$ sudo apt install mrtg

$ sudo apt install snmp snmpd

$ sudo apt install file

$ sudo apt install sysv-rc-conf

$ sudo apt install snmp-mibs-downloader

$ sudo download-mibs

export MIBS= に /usr/share/mibs を追加
$ sudo vi /etc/default/snmpd
export MIBS=/usr/share/mibs

"mibs : " をコメントアウト(先頭に '#' 挿入でも行削除でもお好みで。snmpwalk での出力結果が iso.~ から変わる)
$ sudo vi /etc/snmp/snmp.conf
mibs :

コミュニティ名とかは以前の設定を踏襲しました。

snmpd を再起動
$ sudo service snmpd restart

/etc/mrtg.cfg に下記内容を追加
$ sudo vi /etc/mrtg.cfg
##################################
## Orange Pi PC(192.168.11.252) ##
##################################
## CPU Used ##
Target[opi-pc_cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:test-ro@localhost
Directory[opi-pc_cpu]: localhost
MaxBytes[opi-pc_cpu]: 100
Unscaled[opi-pc_cpu]: dwmy
Options[opi-pc_cpu]: gauge, absolute, growright, noinfo, nopercent
YLegend[opi-pc_cpu]: CPU Load(%)
ShortLegend[opi-pc_cpu]: (%)
LegendI[opi-pc_cpu]: 1分間平均
LegendO[opi-pc_cpu]: 5分間平均
Legend1[opi-pc_cpu]: 1分間平均(%)
Legend2[opi-pc_cpu]: 5分間平均(%)
Title[opi-pc_cpu]: opi-pc_cpu使用率
PageTop[opi-pc_cpu]: <h1>Orange Pi PC CPU使用率</h1>

一通り設定が完了したのでおまじないを 3回実施。

$ sudo env LANG=C mrtg /etc/mrtg.cfg

ブラウザから http://192.168.11.252/mrtg/localhost/opi-pc_cpu.html にアクセスしましたが、Not Found とつれない表示... CentOS のときは特に追加設定しなくても見ることができたと思ったのですが。

apache2.conf に alias で /var/www/mrtg を追加しました。追加箇所は /var/www の記述の後にしました。Option は '-' 記述をしたときは、片割れを '+' or '-' を追加しておかないと再起動時にエラーになります。なんでエラーなのか気づくのに時間がかかりました...
$ sudo diff /etc/apache2/apache2.conf
Alias /mrtg /var/www/mrtg
<Directory /var/www/mrtg/>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

$ sudo service apache2 restart

 

mrtg_01
これでばっちり! と思ったのですが、コメント等に使っている2byte文字が化けています。CentOSのときは特に設定しなくても化けなかったのですが...

transrate で設定すればいいのかもしれませんが、コメント等の文字だけ化けずに表示されればいいのでページのソースを見てみました。

 

 

文字コードの指定が <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> とiso-8859-1 になっています。

$ file /usr/bin/mrtg
/usr/bin/mrtg: awk or perl script, ASCII text, with very long lines

mrtg は perlスクリプトですので、iso-8859-1 を指定している箇所を utf-8 に書き換えました。2カ所あるけど、片方はコメントなので 1カ所でよかったかも。

mrtg_02


修正後の表示です。文字化けせず期待通りの表示になっています。

 

 

 

 

表示も含め一通り完了なんですが、mrtg 本体が更新されると修正箇所が書き換えられちゃいますよね。気がついたときに修正すればいいんですが、あまりスマートな解決方法ではないですねぇ。

CentOS もページのソースをチェックしたのですが、iso-8859-1 のままで化けずに表示されています。暇なときに apache2の設定も含め、差異をチェックしてみることにします。

それから /etc の下で mrtg.cfg を修正するのはいいんですが、今後のこと考え、

$ sudo mkdir /etc/mrtg
$ sudo ln -s /etc/mrtg.cfg /etc/mrtg/mrtg.cfg

としておきました。/etc/mrtg 配下にシェルスクリプトを置いていく予定です。

2016/11/06 追記
 ディレクトリの場合、*.d にするのが通例(?)のようですので、/etc/mrtg → /etc/mrtg.d にしてみました。