時代に追いつくMining Log

マイニングが流行ってから一足遅れて世界に飛び込んだ人の日々の記録と成長を記録していきます

RaspberryPiによる完全遠隔物理PC電源制御と強制再起動の実行

初めに

お久しぶりです。最近はchiaは価格もふわふわしながらも安定しており、マイニングの方も安定して稼働していたため特に書くことがありませんでした。今回、題名ではちょっと変な事をやろうとしていると思われますが、ただ単にRaspberryPiを用いてサーバーのフロントパネルコネクタのrebootピンを制御しようという話です、そんなにやってる事は難しい訳ではありません。
目的としては、メモリクラッシュはOSクラッシュなど再起動コマンドが通らなかったりsshがそもそも通らなくなってしまった時ように遠隔再起動を行えるようにしたいという事です。遠隔地にマイニングリグを設置する際や、自分が遠出している時にリグがクラッシュしてしまった際に対応出来るようにします。

必要機材

今回RaspberryPi以外に必要となる電子部品があります。それがリレーモジュールと言われる物です。

Amazon.co.jp: Arduino ARM PIC AVR DSP PLC 電子用 リレー モジュール シールド (5V 2チャンネル) : パソコン・周辺機器

自分が購入したものはこれです。ただ、買ったのがかなり前で現在は在庫切れとなってしまっていますので、同様の別商品でも同様のことが出来ます。注意する点としては、駆動用電圧が5Vの物と12Vの物がありますが、RaspberryPiからの電圧は12Vは出ていないため5Vの物を購入してください。また、2台制御しようとするならば上のリンクのように2つリレーモジュールがあるものが良いですが、1つでいいならば1つの物でも問題ありません。
他に必要な物はメスーメス、メスーオスジャンパーです。ラズパイとリレーを接続したり、リレーとマザーボードを接続したりします。これに関してはオスーオス、オスーメス、メスーメスのジャンパーがセットで売ってるのでまとめて買っておくと別の用途でも使えるので持っておくと便利です。fanコネクタの延長や裸のマザーボードの電源スイッチの延長などに使えます。

他にあった方が便利な物はブレッドボードなどです。これはあると回路の仮組みが出来るので、動作確認などに使えます。本番環境で用いると抜ける可能性があるので自分は仮組み専用にしています。

手順や回路作成

リレーモジュールはInput端子に電圧をかけることによって、Output側の導通スイッチを切り替える部品のことを指しています。つまり、ラズパイからプログラムでInputに3.3Vをかけることによってマザーボード側のreboot端子のショートを機械的に再現するということです。

まずは適当に回路を作っていきます。自分の買ったリレーモジュールの場合は、JD-VCC,VCCのジャンパーを外して、JD-VCCに5V、VCCに3.3V、GNDをGNDに接続します。今あるamazonの1個のリレーモジュールの場合はDC+に5V、DC-をGNDに落とします。
f:id:takaindex:20211122170347p:plain
こちらがラズパイのピン配置となっています。この場合、5Vが2番、3.3Vが1番、GNDが6番となっています。
そして、Input端子に自分はGPIO17を接続しました。画像でいう11番です。GPIOピンがコードから制御できるピンとなっています。コードではこのGPIOの番号を仕様して書いていきます。
あとはリレーモジュール側の端子をオスーメスピンを使ってマザーボードに繋げるようにします。基本的にリレーモジュール側の3つの端子の真ん中が共通部分、左右の片方がInputがない場合に通電している端子、もう片方がInputに電圧がかかっている時に通電する端子となります。ボードによって書き方は変わっていますが、NO1,NC1とあるような物はNOが通常時開放側、NCが通常時閉じています。心配な方は特に電圧をかけていない状態で通電チェックをしてみてください。今回は通常時開放されている端子を使います。コード制御で開放側を一定時間閉じてショートさせます。
実際に組んだ回路がこんな感じになりました。
f:id:takaindex:20211122171307j:plain
外周のケースは3Dプリンタで作りました。リレーモジュールの基盤裏が端子剥き出しだったので、サーバーケース内でのショートが怖かったのでまとめてケースを作りました。

コードの作成

今回はサクッとpythonで作っていきます。
ぺぺっと書いたコードが以下の感じです。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GIPO.setup(17,GPIO.OUT)

GPIO.output(17,False)
time.sleep(0.7)
GPIO.output(17,True)
time.sleep(0.7)
GPIO.cleanup()

これをpower.pyとか適当にpy拡張子で保存してpython power.pyで走らせます。これで走らせてリレーモジュールがカチッと音がなれば完成です。一応通電チェックなどをしてください。開閉の挙動が逆っぽいイメージがしたら7,9行目のFalseとTrueを逆にしてみて試して見てください。自分は元々逆で書いていたのですが、挙動が逆っぽかったのでこっちにしました。
ここまでの動作チェックは別にoutput側を繋いでいなくても動作が出来るのでラズパイ単体で動作確認してください。そちらの方が安全なので。

サーバーに組み込み

ここまで出来たら、ラズパイ自体をサーバーケース内に格納します。あとはreboot端子を引っこ抜いてリレーモジュールから出ている端子を繋ぎます。ちなみに、ラズパイは完全に独立した状態で稼働させるのがおすすめです。起動用電力をサーバー側からとったり、ネットワークをサーバーを踏み台にしているとサーバーと一緒にラズパイも落ちるので、組み込んだとしても独立稼働するようにしておいた方がいいです。自分はケースのPCIスロットを1つ外してそこからLANケーブルと電源ケーブルをケース内に引いています。
組み込みが終わって蓋まで閉められたら一応動作確認として一度スクリプトを走らせておくと安心です。

応用編/複数台の制御を1台のラズパイで制御

もし複数台のリグの電源制御を行いたい場合、行いたいリグの台数分のリレーモジュールを購入します。もし2台の場合は上のリンクのような2連リレーモジュール、4台や8台用のリレーモジュールもあります。
基本的にはVCCやDCと書いてある端子はリレーモジュールや制御用チップに対する電源供給端子なので、そちら側は同様の接続を行います。複数あるInput端子に対してGPIOを複数挿していきます。例えばInput1にGPIO17,Input2にGPIO27,Input3にGPIO22などを挿していきます。コード側はスクリプトをファイルごとコピーして5,7,9行目の17を対応するGPIO番号に変更していきます。そして再起動したいGPIOが書いてあるスクリプトを走らせるようにすれば可能です。リレーモジュールは必要台数用意しないと、並列接続をした場合繋いであるリグが全部再起動します。

終わりに

自分は一時的に遠出をすることが増えてきて、その際に録画サーバーがOSごとクラッシュすることがあり、それ用に今回作成しました。ただ、これはマイニングリグ用にも使用出来るので今回まとめました。昔のethOSだとLinuxごとクラッシュすることが多く、その際にsshも入らない状態になっていたのでそれ用に買っていたのですが、それを今回流用しました。
本当はWake Up on Lanなどの機能がマザーボード側に備わっていると楽なのですが、古いマザーボードや通常使用を想定しているボードだと備わっていないことが多かったので、それ対策です。
ちなみに、知り合いの3Dプリンターの時に世話になった人にリレーモジュールを使用せずにGPIOのみを用いてreboot端子を制御することは出来ないのかと聞いたのですが、GPIO端子から電圧が入ってしまうため、ラズパイの回路が焼けるかマザーボード側の回路が焼けると言われました。素直にリレーモジュールを使いました。まあ、数百円程度の部品なのでやりたい人は買う価値あります。
今回はマイニングやサーバー運用に使える電子工作の話でした。これをきっかけにラズパイ電子工作に関してもっと知識を深めてもいいかなと思いました。

それではまた。