IDCF クラウド で500円/月未満の仮想マシンを手に入れる

国内の VPS は概ね 500円/月 くらいの料金が安めの基準になっていて、IDCF クラウドでもスターター向け最小構成が 500円/月 になっています。
料金のシミュレーションでもこの料金が最低のように見えますが、ログインして仮想マシンを作成する際にカスタム構成にするとさらに安い料金で仮想マシンを手に入れられます。

仮想マシンの作成では Light.S1 を選択します、これで200円/月。

f:id:k-side:20160830101017p:plain

イメージの選択ではおすすめ Template ではなく、 ISO にある debian の ISO を選択します。

f:id:k-side:20160830101018p:plain

するとボリュームサイズを自分でセットできるようになるので標準の15GBよりも小さい数字を入れます。
例えば 5GB なら ディスクだけで 100円/月 で利用できます。

f:id:k-side:20160830101019p:plain

イメージの選択でおすすめ Template から選ぶとこのように強制的に15GB割り当てられるのでディスクで 300円/月 が必要です。

f:id:k-side:20160830101020p:plain

Light.S1 + 5GB ボリュームなら 300円/月 で仮想マシンを持つことができます。
当然ストレージが小さいので運用には工夫が必要になりますが、外に置く VPN のサーバーだけとか、フロントエンドだけ置いてデータはローカルや別の(サービス|仮想マシン)に置くなどですかね。

現在は Light.S1 + 5GB ボリュームを使って OpenStreetMap のタスクマネージメントツールを動かしています。
このツールは PythonPostgreSQL で動くもので、ボリュームの空き容量が 2.1GB ほどになっています。 価格帯的に512MBが多いところですが、 Light.S1 では1GBが割り当てられるので動作は割と軽快です。

事情に合致すれば安く仮想マシンを手に入れることができます。

Windows で Git のエディタに Visual Studio Code を設定した時の話

WindowsPowerShell 上で Git を操作していて、コメントを打とうとしたときにデフォルトのエディタだと日本語が打てずにずっと適当な英語でコメントを付けていました。
当然そんなことをしていたらなんのコメントだかサッパリわからなくなるので外部エディタを Visual Studio Code に設定したのですが。

PS> git config --global core.editor code

意気揚々とコミットすると

PS> git commit -a
Aborting commit due to empty commit message.

oh...
git commit からコメント用ファイルが VS Code に渡された瞬間にシェル側の待機が解除されてしまうのでコミットメッセージがねぇよとキレられてしまいました。

VS Code の起動オプションを確認すると、ウィンドウが閉じられるまでシェルを待たせるっぽいオプションがありました。

PS> code -h
<snip>
  -w, --wait
      Wait for the window to be closed before returning.
<snip>

そんなわけで今度は -w を付けて外部エディタをセットします。

PS> git config --global core.editor "code -w"

コミットしてみると…

PS> git commit -a

VS Code が起動してシェルが待機状態になりました。
コメントを編集・保存してウィンドウを閉じるとシェルに戻ってコミットが完了します。

で、日本語のコメントを打てるようになったのですが、結局うまいコメントを付けられずになんのコメントなのか微妙にわからない状態は解決されませんでした。
おしまい。

BME280 で取得した室温を zabbix_sender で Zabbix サーバーに送る

昨日、センサーモジュールから値を取得するスクリプトを一般ユーザーで実行できるようにしたので、取得した値を Zabbix サーバーに投げることにしました。

使うのは Zabbix サーバーにデータを投げる zabbix_sender です。

zabbix_sender のインストール

公式サイトから 3.0.3 のソースをダウンロードして展開します。

$ tar zxvf zabbix-3.0.3.tar.gz
$ cd zabbix-3.0.3/

--enable-agent を付けてコンフィグファイルを作ってから make します。

$ ./configure --enable-agent
$ make
$ sudo make install

Zabbix サーバーの設定

Zabbix サーバーのフロントエンドにアクセスして、設定ホスト%対象のホスト%アイテムとたどってアイテムの作成をクリック。

f:id:k-side:20160713114239p:plain

アイテムの作成画面では次の様にセット。

項目
名前 室温(適当でOK)
タイプ Zabbix トラッパー
キー room_temp(わかれば適当でOK)
データ型 数値(浮動小数)
単位 ℃(わかれば適当でOK)

f:id:k-side:20160713114240p:plain

最後に追加をクリックしてアイテムの作成は完了。

zabbix_sender コマンドを実行する

次のオプションを付けて zabbix_sender を実行します。

オプション 渡す値
-z Zabbix サーバーのホストネームか IP アドレス
-s Zabbix に登録してあるホストネーム
-vv コマンド結果を詳細に標準出力する(vを2つ)
-k Zabbix サーバーでアイテムにセットしたキーの名称
-o キーの値、今回であれば室温(bme280.py の結果から)

今回は次のようなコマンドになりました。

$ /usr/local/bin/zabbix_sender -z 192.168.10.11 -s RaspberryPi -vv -k room_temp -o `/home/zoar/src/ss/bme280.py | cut -f1 -d','

結果は次のような感じ。

zabbix_sender [18751]: DEBUG: answer [{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000107"}]
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000107"
sent: 1; skipped: 0; total: 1

processed: 1となっていれば成功。
失敗したら中身を確認して再チャレンジ。

Zabbix サーバーで確認

送信が成功したっぽかったら Zabbix のフロントエンドにアクセスして値を持ってるか確認します。
監視データ最新データで名前にアイテムの名前を入れてフィルタリングをクリックすると出てくると思います。

f:id:k-side:20160713114241p:plain

チェック時刻がどう見ても業務時間中です、ありがとうございました。

右側にあるグラフをクリックするとグラフを見ることができますが、値が1つだけだと直線で表示されるだけでした。

後はコマンドをシェルスクリプトなりにして cron に登録すれば Zabbix サーバーに向かって定期的に値を飛ばし続けてくれるはずです。

BME280 をからのデータを一般ユーザーで受け取る

debian jessie では GPIO 関係が一般ユーザーで利用できるようですが、現在は wheezy を利用しているので毎度 sudo しないといけません。

$ cat /etc/debian_version 
7.11

bme280_sample.py をそのまま実行すると Permission denied と言われてしまうのでアクセスしているデバイスを調べますした。

$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 -- 

/devi2c-1 にアクセスしているのでこいつのパーミッションを調べます。

$ ls -la /dev/i2c-1
crw-rw---T 1 root i2c 89, 1 Jul 12 20:20 /dev/i2c-1

i2c グループなら書き込みもできそうなので自分を i2c グループに追加します。

$ sudo usermod -aG i2c zoar

再起動してみて sudo なしに実行できれば OK。

$ python bme280_sample.py
temp :  28.85 ℃
pressure : 1004.26 hPa
hum :  45.11 %

これで今後の実行には sudo なしでいけるのでちょっとは楽に使えそうです。

BME280 の出力結果をカンマ区切りにしてみた

先日のRaspberry Pi に BME280 モジュールを接続して温度、湿度、気圧を計測するで出力された結果をカンマ区切りになるように変更してみました。

スイッチサイエンスで公開しているスクリプトを実行すると出力が次のようになります。

$ sudo python bme280_sample.py
temp : 26.36  ℃
pressure : 1007.30 hPa
hum :  62.44 %

結果を目視で確認するには十分ですが、結果を再利用しようとするとちょっと困るかもしれません。
なのでカンマ区切りで出力するようにスクリプトを変更しました。
次のように出力されます。

$ sudo bme280.py
26.36,62.44,1007.30

とりあえずパッチはこんな感じです。
python いじったの初めてかもしれない

patch コマンドで適用できます。
必要なら元のファイルをコピーするなどして使うといいと思います。

$ patch -u bme_sample.py < bme280.patch

出力結果は awk などを使って適当に取り出しができると思います。

Raspberry Pi に BME280 モジュールを接続して温度、湿度、気圧を計測する

BME280 モジュールを Raspberry Pi に接続して温度、湿度、気圧を計測したときのメモです。
BME280 はスイッチサイエンスからピンがはんだ付けされていないものを購入しました。

BME280搭載 温湿度・気圧センサモジュール

BME280搭載 温湿度・気圧センサモジュール

こちらの Qiita 記事を参考にしています、接続もこの通りです。

まず i2c 関係のツールが入っていないのでこれと、smbus をインストールします。

$ sudo apt-get install i2c-tools python-smbus -y

起動時にモジュールを読み込めるように設定を追加します。

$ sudo vi /boot/config.txt
device_tree=bcm2708-rpi-b.dtb
device_tree_param=i2c1=on
device_tree_param=spi=on

最後に追加すれば大丈夫っぽいです。
再起動してくればモジュールが読まれます。

これでモジュールにアクセスできるはずです。
i2cdetect でアドレスを確認すると、0x76 を使っています。

$ 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: -- -- -- -- -- -- 76 --

スイッチサイエンスで公開しているスクリプトで各種データを取り出せるので取ってきます。

$ mkdir ~/src/ss
$ cd ss
$ wget https://raw.githubusercontent.com/SWITCHSCIENCE/BME280/master/Python27/bme280_sample.py

BME280 にアクセスできるアドレスが 0x76 でなかった場合はダウンロードしたスクリプトの7行目に書かれたアドレスを変更すれば大丈夫な気がします。

i2c_address = 0x76

sudo でスクリプトを実行するとセンサーで取得した値が返ってきます。

$ sudo python bme280_sample.py
temp : 26.36  ℃
pressure : 1007.30 hPa
hum :  62.44 %

ファイルサーバーの隣にセンサーを設定しています。

User Local の人工知能ボット API で Hubot と会話した話

User Local という会社で人工知能ボット API が提供されているという情報があったのでその時点で申し込み、API が用意できたよというメールが来たので Hubot 用のスクリプトを書いてみました。
メッセージを JSON で渡すこともできるような記述を見た気がしたのですが、公式を見たところメッセージを URL エンコードして送る方が記述が多いのでそっちを使ってます。
プラットフォームの指定もできるようですが、Hubot で書いてコンソールで試した後に Twitter 用設定しようとしたのでプラットフォームは指定していません。

…なんかインデントがうまく表示されないっぽい?

カッコイイコードじゃない気がしますが、コンソールから起動して会話できたので OK ってことで。

キャラクターの設定できるようですが今は猫と犬と老人だったかな…他のがいいや、もっとできるようになったらその辺も使ってみたいです。

予定では今月下旬にプログラミング不要なフレームワークが公開されるっぽいので、そっち使った方が楽かもしれないですね。