smnhooi’s blog

下手な殴り書きをひたすら書いていきます。文章がお見苦しかったらすみません。

リモコンのリモコン

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をメールで通知 - ひゃまだのブログ

スクリプトはほぼ拾ってきたもののままなので割愛しますがつまり、

  1. 今のグローバルIPを取得する
  2. ファイルで保存されている前のグローバルIPを読み込む
  3. 両者を比較する
  4. 不一致だったら保存してメールで送信

をするスクリプトを組めばよいです。

そして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は以下を行いました。

  1. WOLを有効にする。
  2. パスなしで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です。タイムスタンプとか変わってどうなるかわかりませんがとりあえずこれで構築します。

 

パーティションを選んで設定から「マウントオプションの編集」を選択。

以下のダイアログが出るのでこう編集すれば次回から自動的にマウントしてくれます。

f:id:smnhooi:20200814180516j:plain
ディスクマウント設定
  • 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からアクセスできるようになっています。
サービス再起動すればリブートしなくても済むとは思いますが、調べるのが面倒なのでリブート。

f:id:smnhooi:20200814183234p:plain

こんな感じでアクセスできるようになります。
初回はログインダイアログが表示されているので追加したSambaユーザの情報を入力します。

  • バックアップソフト

バックアップソフトはBuckupを使用します。
以前はRAIDを組むことを試みていたのですが、ソフトRAIDはかなり低速でうまくいかず、ハードRAIDもなぜかは忘れましたがうまくいきませんでした。なので、もう手動バックアップにすることにします。ちなみにRAID0は前のメインPCで組んだことがありますが、非常に高速になりかつ安定もしていたので良かったです。崩すときは大変でしたが。

適当にコピー設定して試しにコピーしてみます。
f:id:smnhooi:20200814184635p:plain

しばらくすると正常に終了しました。
ちなみに2回目を実行してみたらファイルは変更されていないのですぐに終了しました。

いいソフトですね。

元フォルダにファイルを追加したもそれだけコピーしてくれますし、更新した場合も再コピーしてくれます。削除した場合も削除するか尋ねてくれるので安心です。


しばらくこれで運用してみたいと思います。