リモコンのリモコン
LIRCでラズパイから赤外線を扱えるようにします。
メモ程度の雑記。
sudo apt install lirc sudo nano /boot/config.txt
この中に以下を追記します。
dtoverlay=lirc-rpi dtparam=gpio_out_pin=22 dtparam=gpio_in_pin=17
再起動して以下のモジュールを認識しているか確認する。
lsmod lirc_rpi 8453 0 lirc_dev 10211 1 lirc_rpi rc_core 23776 1 lirc_dev
モジュールを追加します。
sudo nano /etc/modules lirc_dev lirc_rpi gpio_in_pin=[in gpio] gpio_out_pin=[out gpio]
/etc/lirc/hardware.confも書き換えます。
#Try to load appropriate kernel modules LOAD_MODULES=true # Run "lircd --driver=help" for a list of supported drivers. DRIVER="default" # usually /dev/lirc0 is the correct setting for systems using udev DEVICE="/dev/lirc0" MODULES="lirc_rpi" # Default configuration files for your hardware if any LIRCD_CONF="" LIRCMD_CONF=""
うちのリモコンはirrecordじゃ解析できなかったので、
応急処置としてRAWコードで送信します。
mode2 -d /dev/lirc0 > ~/recv.txt
これを各信号1つずつ行って、
Windowsへもってきて
表計算ソフトなりで成形します。
再びラズパイのほうへ送り返してlircd.confの中に書き込みます。
/etc/lirc/lircd.confを以下のように編集
パルス間隔は1行あたり15行くらいが目安かと。
begin remote name aircon flags RAW_CODES eps 30 aeps 100 gap 400000 toggle_bit_mask 0x0 begin raw_codes name off 3502 1738 449 415 458 1287 457 413 459 416 456 416 456 417 455 418 455 417...←切り出したパルス間隔 name humid27 3473 1753 426 427 446 1298 446 429 446 425 445 445 429 428 ......←切り出したパルス間隔 end raw_codes end remote
これで以下のコマンドによりエアコンがつけれるようになりました。
irsend SEND_ONCE aircon humid27
これを先のNASのON/OFFサイトと同じように組み込めば
出先からエアコンがつけれます。
ホームページを作ってNASの立ち上げ・終了をできるようにする
まずはホームページを作ります。
index.html
<html> <meta http-equiv="content-type" charset="utf-8"> <title> Home Controller </title> <body> <a href="nas_launch.php">NAS起動</a><br> <a href="nas_poweroff.php">NAS終了</a> </body> </html>
起動するにはWOLで起動させます。
nas_launch.php
<html> <meta http-equiv="content-type" charset="utf-8"> <title> Home Controller </title> <body> <?php exec("../shells/nas_launch.sh"); ?> WOLパケットを送信しました。<br> <a href="./">戻る</a> </body> </html>
スクリプトを作ります。
#! /bin/bash wakeonlan [MAC Addr]
ファイルのアクセス権を755にしておきます。
実行するのはwww-dataです。
終了する場合は少し大変です。
まずSSHをノンパスワードでログインできるようにします。
cd /var/www mkdir .ssh sudo chown .ssh www-data cd .ssh sudo -u www-data ssh-keygen -t rsa sudo scp id_rsa.pub [nas_username]@[ip_addr]:/home/[nas_username]
ここで、ssh-keygenはパスワードを入れずにひたすらエンターを押します。
ここでパスワードを入れてしまうとログイン時に毎回聞かれることになります。
NAS側では
cd ~/ mkdir .ssh chmod 700 id_rsa.pub cp id_rsa.pub .ssh/authorized_keys2 service sshd restart
これでwww-dataからパス無しでNASにログインできるようになります。
<html> <meta http-equiv="content-type" charset="utf-8"> <title> Home Controller </title> <body> <?php echo exec("../shells/nas_poweroff.sh"); ?> NASを終了させます。<br> <a href="./">戻る</a> </body> </html>
nas_poweroff.shは以下。
#! /bin/bash ssh [username]@[ip_addr] sudo poweroff
すんなり終了してくれました。
これで少しは便利になります。
Raspberry Pi でグローバルIP通知
まずOSの立ち上げを再度行います。
次使うのはJessie Lite版です。 通常版を使ったらいきなりGUIで立ち上がってしまい重かったのでLiteにしました。(NASは好んでGUI使ってるのに・・・)
サクッとSSHを有効にしてIPを固定します。
ちなみに初期パスワードが設定されていて、"raspberry"と打ってログインします。
IP固定方法がこのバージョンから変わっており、以下のファイルを編集します。
sudo nano /etc/dhcpcd.conf
このファイルの末尾に以下を追加。
interface eth0 static ip_address=192.168.15.4/24 static routers=192.168.15.1 static domain_name_servers=[DNS Name]
これで再起動したら固定にできました。
続いてターミナルからGmailを送信できるようにします。
以下をインストール
sudo apt install exim4
続いて設定を行います。
sudo dpkg-reconfigure exim4-config
基本的にデフォルトでいいですが、
## IP address or host name of the outgoing smarthost:
と出てきた時だけ「smtp.gmail.com::587」を記入します。
続いてアカウントの設定です。
sudo nano /etc/exim4/passwd.client
gmail-smtp.l.google.com:user_name@gmail.com:my_passwd *.google.com:user_name@gmail.com:my_passwd smtp.gmail.com:user_name@gmail.com:my_passwd
これで設定を反映します。
sudo update-exim4.conf
しかしこのままではGoogle側ではじかれてしまいました。
Googleアカウント→セキュリティ→安全性の低いアプリのアクセス
の設定をオンにします。
これでテスト送信してみます。
mail -s "mail test" to_address@hoge.hoge test [Ctrl+D] Cc: [Enter]
少し調べただけであっさり送れてしまえました。
続いて端末上でグローバルIPを取得します。
curl ifconfig.io
以前は別のサーバーを使っていましたが今は使えないようです。
前組んでいたシステムが突然動かなくなったのはこのせいか・・・・・
とりあえずスクリプトを組みましょう。
以下のものを参考にさせていただきました。
Raspberry Piで自宅のグローバルIPをメールで通知 - ひゃまだのブログ
スクリプトはほぼ拾ってきたもののままなので割愛しますがつまり、
をするスクリプトを組めばよいです。
そしてcrontabで定期実行できるようにします。
ついでに再起動しておきます。
crontab -e 5 * * * * /home/pi/tools/send sudo service cron restart
ちゃんと動いてはいるみたいです。
まあそんなに頻繁にIPは変わらないし、出先でいじりたくなることはそんなにないんですけどね。
グローバルIP通知方法-失敗-
いよいよラズパイで家電コントロールページを作ろうと思います。
がその前に出先からでも作業できるようにします。
自分のグローバルIPをネットから通知してもらい、
前回値と比較して変わっていればGmail経由でメールを送るようにします。
とりあえずメールが送信できないといけないみたいなので以下をインストール。
sudo apt-get install ssmtp
と思ったら途中でエラーが出て止まってしまう。
Reading package lists... Error! E: Unable to parse package file /var/lib/apt/lists/mirrordirector.raspbian.org_raspbian_dists_wheezy_main_binary-armhf_Packages (1) E: The package lists or status file could not be parsed or opened.
・・・OSが古いからか・・・・updateしても404をはいて一部アップデートできませんでした。
試しに
sudo nano /etc/apt/sources.list
の中に
deb http://ftp.jaist.ac.jp/raspbian jessie main contrib non-free deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ jessie main con$
と打ってやってみたらインストールしようとすることはできました。
途中で止まりましたが。。。
なのでjessieに上げようと思います。
それかとりあえず最新版かな。。。
最新版はJavaが入れられないことを確認済みです。
新しいラズパイを買おうにも結構高いですね。
NASのWOLを有効にする。
先日、NASを構築しましたが、これは常にONしておくつもりはありません。どうせ頻繁にアクセスするわけじゃないし、電気代がかかるからです。
しかし、使用するたびに電源を押したり、SSHにログインしてシャットダウンするのは面倒で、そのままだといずれ使わなくなってしまいます。
そこで、ワンクリックでシャットダウンできるところまで簡単にON/OFFできるようにします。
まずはNAS側の環境から。
NASは以下を行いました。
- WOLを有効にする。
- パスなしでpoweroffできるようにする。
まずはWOLを有効にします。
こちらの記事を全面的に参考にさせていただきました。
Ubuntu 20.04 で Wake-On-LAN を有効化する。
ethtoolsというものをインストールするそうです。
sudo ethtools [eth_name]
これでwake-onがgと表示されていればいいのですが、僕の環境ではやっぱり表示されていませんでした。
WOL有効化は毎回の起動時にコマンドを打たないといけないのですが、
はじめはinit.dで起動時のスクリプトを実行しようとしましたがうまくいかず、やむなくsystemDで実行することにしました。
sudo mkdir /etc/wol
次に中に起動用のスクリプトを書きます。
eth_nameの部分はifconfigを打つと出てきます。
#!/bin/sh /sbin/ethtool -s [eth_name] wol g
作成したスクリプトに実行権限をつけます。
次にサービス定義ファイルを/etc/systemd/system/wol.serviceとして作成します。
[Unit] Description=WOL [Service] Type=simple ExecStart=/etc/wol/wol.sh Restart=always [Install] WantedBy=multi-user.target
これでserviceを有効化すれば起動時に実行されます。
sudo systemctl enable wol.service
次にsudo poweroffです。
/etc/sudoersに以下を書き込みます。
#poweroff user_name ALL=NOPASSWD: /sbin/poweroff
これで
sudo poweroff
としてもパスワードを聞かれずに実行することができます。
ちなみにsudoersの中身を間違えるとsudoできなくなってしまいます。visudoを使うのが正攻法らしいのですが、僕はsuでルートに入って編集するようにしました。
Raspberry Pi 立ち上げ~IP固定まで(Wheezy)
赤外線リモコンで家電を操作したり、パソコンを起動したりするためにラズパイを立ち上げます。
まずは適当にOSが入ったSDカードを作ります。
僕のラズパイは初代のBなので最新のOSにアップデートしてしまうと何かと不便です。
例えばJavaなどが入らなくなっていたりします。
なので今回は2014/12/24にリリースされたwheezyバージョンを入れます。
インストール後はraspi-configで適当にsshを設定して、以降はモニタ不要です。
ちなみにこれは旧型のIP指定方法です。
現在は違ったやり方になっているので注意が必要です。
私もこれを知らずに仕方なくしばらくDHCPに割り当ててもらっていました。
まず以下のファイルの中身を確認します。
sudo nano /etc/network/interfaces
すると上部に以下のように書かれています。
DHCPと指定されているようです。
iface eth0 inet dhcp
そこでこれをコメントアウトし、以下のように書き換えます。
これでリブートすると別のIPになっています。SSHでログインする場合はIPの指定を変えなければいけません。
#iface eth0 inet dhcp iface eth0 inet static address 192.168.15.4 netmask 255.255.255.0 gateway 192.168.15.1
NAS構築メモ
今まで5億回、作っては壊してきたNASサーバをもう一度構成します。
- OS
OSはUbuntuデスクトップ版を利用します。(GUIは構築が楽なので・・・・)
インストールは最小構成で十分です。
- ディスクマウント
ディスクユーティリティでディスクをマウントします。
今回はすでにフォーマットしてあるディスクを使っています。
フォーマットはext4です。タイムスタンプとか変わってどうなるかわかりませんがとりあえずこれで構築します。
パーティションを選んで設定から「マウントオプションの編集」を選択。
以下のダイアログが出るのでこう編集すれば次回から自動的にマウントしてくれます。
- Samba設定
まずはsambaのインストールをします。
sudo apt install samba
次に以下のファイルに共有するフォルダの情報を書き込みます。
sudo nano /etc/samba/smb.conf
一番下に以下を書き込みました。
[PrimaryBackup] comment = Primary Backup path = /mnt/primaryBackup/main public = yes writable = yes guest ok = no guest only = no
"[PrimaryBackup]"と記載されているところがWindowsから見えるルートのファイル名になることに注意します。
(他のパラメータは何となく意味が分かりますが、[]の中身だけは何を表しているかパっとわかりません。)
sudo smbpasswd -a userName
ついでにSambaユーザを追加します。このuserNameはLinuxユーザと別でもいいのかな?
自分は同じ名前にしているのでできるかは知りません。
コマンドを実行してパスワードを入力します。
そしてリブートするとWindowsからアクセスできるようになっています。
サービス再起動すればリブートしなくても済むとは思いますが、調べるのが面倒なのでリブート。
こんな感じでアクセスできるようになります。
初回はログインダイアログが表示されているので追加したSambaユーザの情報を入力します。
- バックアップソフト
バックアップソフトはBuckupを使用します。
以前はRAIDを組むことを試みていたのですが、ソフトRAIDはかなり低速でうまくいかず、ハードRAIDもなぜかは忘れましたがうまくいきませんでした。なので、もう手動バックアップにすることにします。ちなみにRAID0は前のメインPCで組んだことがありますが、非常に高速になりかつ安定もしていたので良かったです。崩すときは大変でしたが。
適当にコピー設定して試しにコピーしてみます。
しばらくすると正常に終了しました。
ちなみに2回目を実行してみたらファイルは変更されていないのですぐに終了しました。
いいソフトですね。
元フォルダにファイルを追加したもそれだけコピーしてくれますし、更新した場合も再コピーしてくれます。削除した場合も削除するか尋ねてくれるので安心です。
しばらくこれで運用してみたいと思います。