らくの備忘録ブログ

アウトプットの練習中です。

シャオミの温湿度計をHomebridgeに連携してみた

アリエクスプレスで1個400円で買える温湿度計(四角形の Hygrothermograph 2 / LYWSD03MMC)を4個買ってみました。4.5cm四方で厚さ1cm、小さく軽くてボタン電池式なので、どこにでも放り込んでおけます。

測定した温度・湿度は、シャオミのMi Homeアプリで確認できます。

メリット :過去のデータをグラフで表示できる
デメリット:現在の温度湿度を確認するのに一つずつタップする必要がある。
      データ取得に数十秒かかる。
      複数の温湿度計のデータを一度に表示できない。

Raspberry PiにインストールしたHomebridge上で動作する「Homebridge-mi-hygrothermograph」プラグインGithubで公開されていて、iPhoneの「ホーム」アプリで測定した現在の温度湿度が表示できるようなので試してみました。

  1. Homebridgeのインストール

  2. bluetoothライブラリ、homebridge-mi-hygrothermographのインストール

    $ sudo apt install bluetooth bluez libbluetooth-dev libudev-dev
    
    $ sudo npm install -g --unsafe-perm homebridge-mi-hygrothermograph

    続いて、root権限以外でNode.jsがbluetoothにアクセスできるように、以下のコマンドを実行します。

    sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

  3. MACアドレスを調べ、復号用鍵 "Mi Bind Key" を取得する

    温湿度計2(LYWSD03MMC)は、Homebridge-mi-hygrothermographに対応していますが、測定結果が暗号化されているので、データを読み出すには復号用鍵の取得が必要です。Telink Flasherのサイトへ行きます。

    MACアドレスを調べるためには、copy linkの右にあるChromeリンクのアドレスをコピーして新しいタブに貼り付けて、

    Experimental Web Platform featuresの右にあるDisabledをEnabledに変更し、右下のRelaunchでChromeを再起動します。


    再度Telink Flasherのサイトへ行き、Get Advertising MACの右横にチェックを入れて有効にしてConnectをクリックすると、Chrome上でBluetoothバイスのスキャンが始まります。LYWSD03MMCが温湿度計2で、復号用鍵を取得したい温湿度計を選んで「ペア設定」をクリックします。(LYWSD03MMCのMACアドレスはA4:C1:38で始まるので、ここで表示されるMACアドレスはコピーしない)

    ペア設定をクリックした後、数十秒すると、温度、湿度、電池電圧が6秒間隔で表示され、その下にMACアドレスが表示されるのでメモしておいてください。

    その下のDo Activationをクリックすると、Device known idとMiトークン、バインドキーが表示されます。必要なのはバインドキーなので、コピーしておいてください。

Raspberry Pi 外付けデバイスなしのフルリモート設定(バックスラッシュが打てない問題)

MacからVNCか画面共有でラスパイに接続するのに慣れると、困った問題が出てくる。

それは・・・バックスラッシュ( \ ) が打てない問題。

  1. システム環境設定(×)
    システム環境設定 → キーボード → 入力ソース → キーボードの部分を下にスクロール
    f:id:rakmaker:20210629224527p:plain

    すると、"¥"キーで入力する文字: \ (バックスラッシュ) が出てくるので選択
    f:id:rakmaker:20210629224631p:plain

    しかし、こちらに書かれている通り、VNCや画面共有ではこの設定は無効だった。


  2. Karabiner-Elementsを使う方法(×)
    これもCaps Lockの代用などでバックスラッシュにする設定があるが、VNCや画面共有では無効だった。昔のOSではできたらしい。


  3. Mozcに単語登録する方法(○)
    ラズパイアイコン → 設定 → Mozcの設定 → 辞書 → ユーザ辞書の編集
    から、よみに「¥」と「ー」でバックスラッシュを入力する。
    f:id:rakmaker:20210629225027p:plain

    しかし、このバックスラッシュがそもそも入力できない!!
    その時は、ターミナルからOption + ¥を入力して、

    bash : $'\245': コマンドが見つかりません

    と出てきたバックスラッシュをコピー&ペーストすればOK。ああ手がかかる。
    f:id:rakmaker:20210629225446p:plain



    こういうしょーもないことでも軽く2時間は溶けてしまう。で、何がやりたかったんだっけ??というオチに。

    読んでいただいた人に少しでも時短になれば。

Raspberry Pi SDカードのバックアップ

ここまで環境構築できたところで、SDカードをバックアップしておく。

PCにSDカードのイメージを保存する方法もあるが、PCの容量を圧迫することと、イメージの未使用領域を圧縮するにはひと手間かかるので、直接新しいSDカードにバックアップする方が簡単と思う。microSDは最近安価だし。

新しいSDカードをラズパイのUSBポートに挿入する。左側のmicroSDアダプタで当初試したが、"Could not create partition"エラーが出て途中で止まったり、"Copy complete."と表示されコピー後のSDカードでは起動しなかった。右側のUSBアダプタでは正常にコピーできた。

f:id:rakmaker:20210613112444j:plainf:id:rakmaker:20210613122709j:plain


ラズパイアイコン → アクセサリ → SD Card Copier を起動する。
f:id:rakmaker:20210613112653p:plain

New partition UUIDsにチェックを入れておく。

  • Copy From Device:ラズパイにコピー元のmicro SDカード /dev/mmcblk0
  • Copy To Device:USBポートに挿したコピー先のmicro SDカード /dev/sda

Startをクリックすると、This will erase all content on the device 'Mass Storage Device'. Are you sure?と聞かれるので、USBポートに挿したmicro SDカードの中身が空であることを確認して Yes を選択する。

f:id:rakmaker:20210613121408p:plain
容量が小さいせいか、Copy completeと表示され数分でコピー完了。コピー後のSDカードで起動できることを確認しておきましょう。

Raspberry Pi セキュリティ向上のための設定

ラズパイがサイバー攻撃の温床になっているとの話があるので、知らないうちに加担しないようセキュリティ設定を見直しておく。c60evaporatorさんのQiitaによく書かれている。

①ユーザ名とパスワードを変更
groups pi
sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio 新ユーザ名

最後に新ユーザ名を追記するのを忘れないように。

②自動ログインの解除とpiユーザの削除

2021年6月時点では、Qiitaの記事で紹介されているraspi-configとバージョンが異なるため、以下から設定を変更する。

1 System Options
f:id:rakmaker:20210613090225p:plain

S5 Boot / Auto Loginから設定可能
f:id:rakmaker:20210613090606p:plain

紹介したQiitaの記事によると、Boot optionでB1 Consoleを選択すると書かれている。B1を選択してリブートすると、macの画面共有で
f:id:rakmaker:20210613093058p:plain
と表示される。Macのターミナルを起動して、ssh (新ユーザ名)@raspberrypi.localでSSH接続して「piユーザの削除」を進める。

sudo userdel -r pi

の実行後に

userdel: グループ pi には他のメンバーがいるので削除しませんでした

と表示されたが、

id -a pi

で確認すると

userdel: ユーザ 'pi' は存在しません

と表示されたのでユーザ piの削除はできているようだ。

続いて同様に、MacのターミナルからSSH接続した状態で、

sudo raspi-config

を実行し、
1 System Options
 > S5 Boot / Auto Login
 > B4 Desktop Autologin Desktop GUI, automatically logged in as '(新ユーザ名)' user
を選択すると、次回からはログインIDとパスワードなしでGUIにログインできる。(Qiitaの記事の「起動時認証ユーザを「pi」→新ユーザに変更」は不要)

SSHのポート番号を22から他番号に変更

ポート番号を忘れる可能性があるので、こちらは実施しないこととした。

SSHを公開鍵認証に変更
ssh-keygen -t rsa -b 4096

-C メールアドレスは任意とのことで、省略

Macのターミナルから

scp -P22 id_rsa.pub (新ユーザ名)@raspberrypi.local:/home/(新ユーザ名)/.ssh

と入力し、新ユーザ名のパスワードを入力すると、Macからラズパイの/home/(新ユーザ名)/.ssh/ にid_rsa.pubが転送される。

「公開鍵認証での接続を確認」では以下のように入力し、ラズパイにSSH接続できればOK。

ssh (新ユーザ名)@raspberrypi.local


uzimihsrさんの記事の「ちゃんとパスワード認証が無効化されているか確認する」を参考に、Macに保存した秘密鍵(id_rsa)の名前をid_rsa.bkupなどに変更し、秘密鍵がなければSSH接続できないことを確認しておくといい。(確認終了後は忘れずにid_rsaに戻しておく)

Raspberry Pi 外付けデバイスなしのフルリモートでインストールする方法(2)

続いて、

  • フォントの変更
  • 日本語入力の設定

を進める。

  1. フォントの変更
    デフォルトでは「直」「反」などが中華フォントになっているので、変更する

    左上のラズパイアイコン→設定→外観の設定
    f:id:rakmaker:20210612211928p:plain

    システム→フォント から Noto Sans CJK JP Lightの10ポイントに変更する
    f:id:rakmaker:20210612212051p:plain

    タスクバー→サイズ から 中(24x24) を選択する

    続いて、LX Terminalのフォントも変更する
    LX Terminalを開き、編集(E) → 設定(S) を開き、PalleteでTangoを選び、背景色を白に変更。全景色を黒に近いグレーに設定。合わせてフォントもNoto Mono Regularの10ポイントに変更する。(お好みで)
    f:id:rakmaker:20210612213700p:plain

    変更後のイメージはこちら
    f:id:rakmaker:20210612213823p:plain


  2. 日本語入力の設定
    既にFcitxとMozcはインストール済みだったので、日本語入力起動のショートカットキーを設定する。

    左上のラズパイアイコン → 設定 → Fcitx を開くと、以下のように英語(US)とMozc(日本語)が表示されている。
    f:id:rakmaker:20210612222222p:plain

    かな入力派はkyuridenamidaさんが紹介されているこの設定がベストと思われる。「を」を入力しようとすると「わ」になったり自動で英数字に戻ったりしていたが、入力メソッドの上に日本語(OADG 109A)を設定すると「を」は入力できるようになった。「ー」はシフトキーを押しながら入力が必要で、これは色々設定を変えてみたがうまくいかなかった。
    f:id:rakmaker:20210613000748p:plain

    Macのキーボードには「全角/半角」キーがないので、「全体の設定」タブを開き、Zenkakuhankaku をクリックし、Shift + Space に変更する。Shiftを押しながらスペースを押しても反映されない場合は、スペースを押しながらShiftを押す。
    f:id:rakmaker:20210612222447p:plain

    (備考1)
    MacではCtrl + Spaceを入力文字切替に確保されていて、ひらがな→英字→カタカナ の切替画面が表示される。画面共有(リモート)でラズパイに接続している場合、ラズパイ側がアクティブになっていてもMacの入力切替が優先されるので、ラズパイでの入力文字切替はShift + Space を使用する。
    (備考2)
    FcitxとMozcの違いは、YasuhiroABEさんのQiitaによく書かれている。キーボードからの入力を横取りするプログラムがFcitx、日本語に変換するプログラムがMozcとのこと。

    実際に画面共有内で日本語と英字を切り替えながら入力するときは、Macの入力文字切替を「英字ーかな入力」にしておく。

    続いて必要に応じ、設定 > Mozcの設定 を選択し、基本設定(ローマ字入力・かな入力)やキー設定(MS-IMEATOK)を変更する。

Raspberry Pi 外付けデバイスなしのフルリモートでインストールする方法(1)

キーボードとディスプレイ、マウスをラズパイに接続してインストールするのは面倒。
ラズパイに接続するのはACアダプターとSDカードだけ! 全てMacから操作したい!というワガママな人達に最適な方法を備忘録として残しておく。ケーブルの類なしで使うことをヘッドレスというらしい。「ラズパイ ヘッドレスインストール」でググると色々出てくる。


  1. microSD 16GBを準備
    32GBでも良いが、大きすぎるとバックアップが大変

  2. Raspberry Pi Imagerを使ってRaspberry Pi OSをSDカードに書き込む
    からあげさんのQiitaを参考に、「SDへのイメージ書き込み」まで進める
    Raspberry Pi ImagerのセットアップからSD書き込み方法まで - Qiita

  3. donchanさんのブログを参考に、Raspberry Piにリモート接続するため、次の設定をする
    Raspberry Piのセットアップをヘッドレス(モニタなし、キーボードなし)で行う方法 - Reasonable Code

    $ ssh pi@raspberrypi.local

    と入力すると、リモートでラズパイにログインできる。

    (備考)

    SSHでログインしようとした時に、自分の環境では次の警告が表示された。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    
    It is also possible that a host key has just been changed.
    
    The fingerprint for the RSA key sent by the remote host is
    
    XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
    
    Please contact your system administrator. 
    
    Add correct host key in /Users/rakmaker/.ssh/known_hosts to get rid of this message.
    
    Offending RSA key in /Users/rakmaker/.ssh/known_hosts:8
    
    RSA host key for example.com has changed and you have requested strict checking.
    
    Host key verification failed.

     
    ホスト鍵が変わった場合に誰かが攻撃を仕掛けているとの警告で、今回はOSの再インストールが原因なので、macの~/.ssh/known_hostsに保存している8行目をコメントアウトして対処した。
    「SSHホスト鍵が変わってるよ!」と怒られたときの対処 - Qiita
    日頃sshで入っていたサーバーにログインできなくなった時 - Qiita|


  4. ログインパスワードを変更し、VNCを有効にする

    sudo raspi-config から、

    3 Interface Options を選択

    f:id:rakmaker:20210612162807p:plain

    P3 VNC を選択

    f:id:rakmaker:20210612162914p:plain

    はい を選択

    f:id:rakmaker:20210612162943p:plain

    このままではmacからcommand + Kで「画面共有」を実行した時に、エラーメッセージ "Cannot currently show the desktop" が表示されるので、合わせて解像度も設定しておくと良い。

    2 Display Options > D1 Resolution > DMT Mode 85 1280x720 を選択(お好みで)  


  5. ifconfig で、ipアドレスを調べておく
     

  6. mac標準アプリの「画面共有」は接続時にパスワードが必要なため、からあげさんのQiitaのnak435さんのコメントに書かれている以下の対応が必要。
    Mac標準のリモート接続でラズパイに繋ぐ方法 - Qiita

    macのターミナルからssh経由でラズパイにログインした状態で、以下を実行

    $ sudo vi /root/.vnc/config.d/vncserver-x11

    Authentication=VncAuth を末尾に追加し保存

    続いて、以下を実行し、画面共有接続用のパスワードを入力

    $ sudo vncpasswd -service


  7. macで、command + K で「画面共有」を開き、 以下のようにvnc://raspberrypi.local/ または、vnc://192.168.xx.xx/ (5番 ifconfigで調べたIPアドレスを入力)し、接続する
    f:id:rakmaker:20210612170357p:plain


    パスワードを聞かれたら、先ほどvncpasswdで設定したmacの画面共有接続用パスワードを入力すると、次の画面が表示されリモート接続が完了する。
    f:id:rakmaker:20210612163152p:plain

    Nextを押下して画面の指示に従い、タイムゾーンの設定やアップデートを実行しておく。
    アップデートにはRaspberry Pi 4でも数十分かかる。