姫路城を作ろう -準備編-

動機

前回のズゴックでのXFDズゴック温度計から気づくとはや半年以上が経過していました。
当初はネタとしても、用途としても満足をしていたのものの、使っていくうちに幾つか不満が出てきました。

  1. Bambooへの問い合わせがすべてRasperryPiで動いているGroovyのコードにかかれているため、Bambooの構成が変わるたびにGroovy修正→パッケージ→再デプロイが必要でメンテナンスが面倒でした、結果的にBambooの監視は途中から止めてしまっていました。
  2. Bambooのビルドのイベント以外でもLED光らせたら楽しいかなぁというイベント(プルリクエストとか)があるのに、上記の通りメンテナンスが面倒なので結局応用がきかせにくく、せっかくアイディアが思いついてもそのまま寝かせてしまっていました。
  3. 温度、湿度情報もMackerel以外でも使えそうなのに、RasperryPi上でコマンドを実行しないと値が取れないので使いにくくせっかくのデータが行かせていませんでした。

そこで今回は、この不満を解消しつつ、

  1. Go言語なんか目につく機会が多くなったんで、ここいらでちょっと使ってみたいなぁ。何ならDockerとかHashicorpとかコード読めるようになったら嬉しい!
  2. Rundeckって社内で使っている人も増えてるし、世間的にも流行ってるっぽいからちょっと使ってみたい。いやむしろ使うべき!

という個人的な野望を満たすため、ズゴックのアップデートを行うことにしました。

なんで姫路城?

という経緯でズゴックをアップデートしようと思い立ったものの

  1. スゴックは職場に置きっぱなしで手元になかった(そもそものうっかり!)
  2. ガンダムネタは鉄板かと思っていたが、最近入社した若者の中にはガンダムを知らないというケースがあった(ジェネレーションギャップ!!!)
  3. アニメより歴史的な建造物とかのほうが一般受けするんじゃないか(という下心!)
  4. 人型ロボットはスペースが少なくてセンサーの設置やケーブルの取り回しが大変
    といういくつか問題と前回の反省点がありました。

そんなことを考えて悶々とした日々を送っていたところ。
「なんか最近テレビで城の特集とかやってるし下町ロケットで仮面ライダードライブ(役だったひと)が入院中の子供に姫路城プレゼントしてたしこれはもう絶対城しかない」
というひらめきを得て、ズゴックから路線を変えて姫路城をベースに新しいデバイスを作ることにしました。

なんでGo言語

なんか(いまになって)流行ってる風なのと、風のうわさで「Go言語いいよいいよ」みたいな話は聞くものの、具体的に何がいいのかピンとこなかったので使ったらわかるかもしれないという淡い期待を込めてGo言語を採用しました。

なんでRundeckとかつかったの?

IBM Tivoli Workload SchedulerとかJP1 AJSとかControll-Mとかで苦しんできた過去を踏まえて、いま流行りっぽいオープンソースのジョブスケジューラの実力(の片鱗)を見てみたかったのと、「SSHログインしたら負け」というポリシーのもと、一旦作ったプロダクトの運用はSSHを使わずにできないといけないという流派の存在をしり、そのムーブメントに乗ってみようかと思ったので採用してみました。

アーキテクチャ

今回のポイントとしては

  • センサー、LEDの制御をREST API化して、Raspi本体からも、外部からも気軽に使えるようにする。
  • 物理ボタンを押した際のアクションをRundeckのJOB定義にすることにより、ブラウザからボタンの振る舞いを変更できるようにする。
    の2点です。

シンプルなのであまり参考になりませんが、LED、温度センサー、物理ボタンの処理シーケンスを書いてみました。

  • LED処理シーケンス
    姫路城LED操作
  • 温湿度計処理シーケンス
    姫路城温湿度取得
  • 物理ボタン処理シーケンス
    姫路城ボタン
    書いてみて再認識しましたがほんとに大したことないシーケンスですね。

準備

材料

電子部品系は秋月電子で購入し、プラモはヨドバシカメラで購入しました。

次回

今回は、なんとなくの設計と、材料を揃えました。
次回は、姫路城の築城について書きたいと思います。