anatsuk1のウェブログ

ブログを書いてみたい!

Ubuntu ServerでTimeMachine

サーバーでTimeMachineしたい!

ラズパイでTimeMachineしていた。

MacBook ProでTimeMachineしていた。

サーバーでTimeMachineしたい! Samsung 860 EVO 1TB SATA 1TをAmazonで購入した。 サーバーのスナップショットの取得も考えて。

www.samsung.com

ラズパイとMackBook ProのTimeMachineは過去記事を見てね😁

anatsuk1.hatenablog.com

anatsuk1.hatenablog.com

LVMしたい!

Samsungのデバイスパスをチェック。

ディスクの一覧コマンド。

sudo parted -l

俺のサーバーは/dev/sdaを表示する。

LVM領域を確保するよ

partedコマンドでインタラクティブサーバーに伝えていくよ。

$ sudo parted /dev/sda 

↓出力です。

GNU Parted 3.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

パーティションテーブルをGPTにするよ。

(parted) mklabel gpt 

パーティション作成するよ。

(parted) mkpart primary 0% 100%

LVMフラグを立てるよ

(parted) set 1 lvm on  

LVMしたのでインタラクティブを終える。

(parted) quit

TimeMachineパーティションを作るよ。

PV、VG、LVを作るよ。 作ったLVをTimeMachineパーティションにするよ。

PV作成コマンド

$ sudo pvcreate /dev/sda1 

出力

  Physical volume "/dev/sda1" successfully created.

VG作成コマンド

$ sudo vgcreate backup-vg /dev/sda1

出力

  Volume group "backup-vg" successfully created

LV作成コマンド

$ sudo lvcreate -n timemachine -L 256G backup-vg

出力

  Logical volume "timemachine" created.

pvs, vgs, lvsコマンドで属性、サイズを確認するよ。

フォーマットするよ。

$ sudo mkfs.ext4 /dev/backup-vg/timemachine 

ext4にしてみたよ。他にbtrfs、xfsも悩んだけどね😁。

自動マウントするよ。

fstabに書くパスを調べる。

ls -la /dev/disk/by-id/

VGとLVの名前を含むシンボリックリンクが指す、dm-xを覚える。 他にUUIDを含むシンボリックリンクも、同じdm-xを指している。

UUIDを含むシンボリックリンクをfstabに書いたよ。

/dev/disk/by-id/dm-uuid-LVM-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /mnt/timemachine ext4 defaults 0 0

xは秘密の文字で伏せ字だよ。

Sambaの設定

TimeMachine用のユーザーを追加するよ。

adduser journey

パスワード以外は、そのままエンターを押して欲しい。

Sambaの設定は、過去記事をみてね😆fstabの書き方も書いたよ。

Raspberry PiでTime Machine - anatsuk1のウェブログ

ハックするよ。

TimeMachineでバックアップが終わってから /VolumesをFinderで見る。 (もしかしたら、さらにTimeMachineに入って出る条件がいるかも)

MacのスナップショットがFinderで良くわかる形式、スナップショット取得日時のMacintosh HDの内容が全て含まれて、良い。

Raspberry PiでDyson Cooling FanをSiriする

Dysonで快適な生活

エアコンの能力をフルに使おうと、Bic Cameraでサーキュレーターを左から右に見ている。

Dysonはひとつのハードウェアで空気清浄機、加湿器、扇風機の機能を持つ。すごく良いサーキュレータになると想う。

キレイな空気、空気の循環、夏には強風にして、吹き出し口の前に行く。動いている部分は危ないが、止まって見えるので安全で良い。

今回はDysonをSiriで風を出そう!

homebridge-dyson-linkプラグイン

DysonをlinkするHomeBridgeプラグインを使ってみる。

Dysonは非公開のMQTTプロトコルで、センサー情報の取得、風速、風量の設定をする。

インストール

sudo npm install -g homebridge-dyson-link

config.json設定

       {
         "platform": "DysonPlatform",
         "name": "DysonPlatform",
         "accessories": [
            {
               "displayName": "DysonFan",
               "ip": "DYSON-IP",
               "serialNumber": "DYSON-SERIALNUMBER",
               "password": "DYSON-PASSWORD",
               "focusModeVisible" : false
            }
         ]
      },

"DYSON-IP"、"DYSON-SERIALNUMBER"、"DYSON-PASSWORD"は内緒にしたいので、ローカルで書き換えてね。

IPはブロードバンドルータDHCP固定割当設定で固定IPにね。

SSIDWi-Fiパスワードはマニュアルに貼ってるシールで確認してね😊

俺は、自分のGitHubからCloneして、config.jsonをデプロイするときに、DYSON-*ワードを、bashスクリプトで自動で置換する。 bashスクリプトを見てね😄

#!/usr/bin/env bash

echo "Copy config.json to /var/lib/homebridge/"
cp ./config.json /var/lib/homebridge/

echo "Modifiy /var/lib/homebridge/config.json"
sed -i -e 's/DYSON-IP/192.168.10.XX/g' /var/lib/homebridge/config.json
sed -i -e 's/DYSON-SERIALNUMBER/DYSON-XXX-XX-XXXXXXXX-XXX/g' /var/lib/homebridge/config.json
sed -i -e 's/DYSON-PASSWORD/XXXXXXXX/g' /var/lib/homebridge/config.json

秘密の文字は、Xでマスクしているよ。

感想

エアコンと連動してDysonを自動運転にしてる。空気がきれい。暖かくもなったのよ。

参考

id:aakiraのハック。wiresharkは便利。俺もハックで使用するよ。

aakira.hatenablog.com

homebridge-dyson-linkプラグインGitHub。今も開発を継続している。期待できるよ。

github.com

MQTTで操作をJavaで。

【Java】Dysonの家電をプログラム経由で操作したり室温を取得したりする | のんぽぐ

HomebridgeでON!

Homeridge

新しい記事を公開してるよ。見てね!

anatsuk1.hatenablog.com

ここからは古い記事だよ

Homebridgeは、インストールすれば機能を追加できる、たくさんのプラグインを持っている。

HomeKit非対応デバイスをSiriで操作する。

シーリングライト、シーリングファンDyson 空気清浄機、Signify Philips HueをHomebridgeで操作してみよう!

adrsirlib デプロイ

ADRSIR 学習リモコンHATを操作するライブラリを配置する。 ビットトレードワンのOfficialサンプルコードは読みたくなかった。

より良いソースコードを見つけた。adrsirlib。

ドキュメントが簡潔で便利なライブラリ。開発者id:tokieng良いエンジニア。

tokieng.hatenablog.com

俺は、adrsirlibを、/user/local/etcに、格納するのよねー。

rootユーザーになってデプロイ!

デプロイのイメージ

pi@raspberrypi:/usr/local/etc/adrsirlib $ ls -l
total 12
-rwxr--r-- 1 root root 2131 Nov 27 15:28 adrsirlib.py
-rwxr-xr-x 1 root root 2121 Nov 27 15:28 ircontrol
drwxr-xr-x 2 root root 4096 Dec  5 13:06 irdata

CMD4 インストール

CMD4 Plugin for Homebridgeはプラグイン

github.com

インストールコマンド

sudo npm install -g --unsafe-perm homebridge-cmd4

自作スクリプト「cmd4_adrsir」

cmd4_adrsirを知る。

俺が作った便利なPythonスクリプト。赤外線リモコンコードを送信する!

github.com

HomeKit非対応デバイスの操作イメージ

  1. 俺が、iPhoneのホームアプリを起動する。

  2. 俺が、ホームアプリのアクセサリーを操作する。

  3. ラズパイは、赤外線リモコンコードを送信する。

f:id:anatsuk1:20201207224652p:plain
ホームアプリでコマンド実行

cmd4_adrsirの動き

  1. ホームアプリのGUIイベントでアクティベート。
  2. ホームアプリの「デバイス」「明るさ」に応じて、adrsirlibを使ってシーリングライトのリモコンデータを送信する。
    • 100%: 光量はFULL、白色
    • 99-20%: 光量はIntermidiate、暖色
    • 19-1%: 常夜灯
    • 0%: 消灯

シーリングライトは、リラックスシーンでは80%に設定しよう😊

それで、俺はリラックスする。

Homebridgeの設定ファイル

Homebridgeの設定ファイル、config.jsonを作成したい? HomebridgeのGitHubで書き方を調べよう! ファイルは/var/lib/homebridgeに置いてね。

設定ファイルにシーリングライトを加えるよ。state_cmd属性の値は、cmd4_adrsirを実行するパスを書くのん。

config.json設定ファイルの参考情報

デバッグ

homebridgeのデータ置き場にCMD4はある

/var/lib/homebridge

homebridgeサービスの再起動

sudo systemctl restart homebridge.service

シーリングライト

Siriにリラックスとお願いすると、Panasonicのシーリングライトは、オレンジ色で照明を少し落とした、暖かい雰囲気になる。

エアコン

次は、俺は、Dyson空気清浄機を買って、cmd4_adrsirの動きをModifyする!

参考

Homebridgeインストール記事。超重要。

anatsuk1.hatenablog.com

スマートリモコンに赤外線学習リモコンボード RPi-IREXを使う人もいるよ。

Raspberry Pi をスマートリモコン化 -その2- | Raspberry Pi

ラズパイにHomebridgeをインストールする解説をしている人。

ラズパイ(Raspberry Pi)にhomebridgeをインストールする方法 | ラズパイで家電をコントロールする | ホームアプリの使い方:HomeKitでスマートホーム、家電を音声コントロール | iPod/iPad/iPhoneのすべて

次回はエアコンをリラックスにしようかな😆

qiita.com

Raspberry PiでHomeKit

SiriとHomeKitは仲良し

スマートホームはSiriに頼むと簡単!

HomeKitとSiriの連携はGood。ラズパイのhomebridgeと自家製スクリプトで赤外線を発信する。

↓の記事の続きだよ。 anatsuk1.hatenablog.com

homebridgeを使いたい

node.jsのインストール

nodejsの公式ページでインストールコマンドがわかる。 github.com

新しいバージョンを使うと良いよ。'Node.js v12.x:'ではこう。最新版では、機能を追加、バグを修正、して使いやすい。

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

Homebridgeのインストール

HomePodとiPad miniがホームハブになるの。

俺はラズパイをHomebridgeをデーモンにしてホームハブにする。 ラズパイでプログラムしてやりたいことがあるの。

インストールコマンド

sudo npm install -g --unsafe-perm homebridge

起動確認 -Uは、環境設定ディレクトリへのパス。デフォルトはHomeディレクトリだった🤔

homebridge -U /var/lib/homebridge/

画面にログが出る。031-45-156 が PINだよ。 確認して、CTL-CでHomebridgeをストップさせてね。

Dec 08 18:35:38 raspberrypi homebridge[17276]: Or enter this code with your HomeKit app on your iOS device to pair with 
Dec 08 18:35:38 raspberrypi homebridge[17276]:                        
Dec 08 18:35:38 raspberrypi homebridge[17276]:     ┌────────────┐
Dec 08 18:35:38 raspberrypi homebridge[17276]:     │ 031-45-156 │
Dec 08 18:35:38 raspberrypi homebridge[17276]:     └────────────┘
Dec 08 18:35:38 raspberrypi homebridge[17276]:                        
Dec 08 18:35:38 raspberrypi homebridge[17276]: [12/8/2020, 18:35:38] Homebridge is running on port 51826.

デーモン化

新しくsystemdの設定ファイルを作成する。

nano /etc/systemd/system/homebridge.service

コピペしてね♪

[Unit]
Description=Homebridge server daemon
After=syslog.target network-online.target

[Service]
Type=simple
User=pi
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

homebridgeの設定ファイルを作成する。

nano /etc/default/homebridge

コピーして♪

# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/lib/homebridge

# If you uncomment the following line, homebridge will log more 
# You can display this via systemd's journalctl: journalctl -f -u homebridge
# DEBUG=*

homebridgeサービスの再起動

sudo systemctl restart homebridge.service

ホームアプリにホームハブ

PINを調べるよ。

journalctl -e

ジャーナル出力「031-45-156」がPINだよ。

ec 07 00:35:23 raspberrypi homebridge[10888]: Or enter this code with your HomeKit app on your iOS device to pair with 
Dec 07 00:35:23 raspberrypi homebridge[10888]:                        
Dec 07 00:35:23 raspberrypi homebridge[10888]:     ┌────────────┐
Dec 07 00:35:23 raspberrypi homebridge[10888]:     │ 031-45-156 │
Dec 07 00:35:23 raspberrypi homebridge[10888]:     └────────────┘
Dec 07 00:35:23 raspberrypi homebridge[10888]:                        
Dec 07 00:35:23 raspberrypi homebridge[10888]: 2020-12-06T15:35:23.532Z HAP-NodeJS:EventedHTTPServer Server listening on
Dec 07 00:35:23 raspberrypi homebridge[10888]: [12/7/2020, 00:35:23] Homebridge is running on port 51826.

これでHomeKitのホームハブになるよ。 iPhoneのホームアプリで、PINを使って登録してね🤗

gitとVisual Studio Code

開発環境

Microsoft統合開発環境は昔から良い。Visual Studio 6は大ヒットしたよ。サポート期間の完了して、使いたい人がいたよ。

ブレークポイント、ステップ実行、サクサクにマウスで操作できて良い。

diffはもちろんVSCodeで表示したい!

~/.gitconfig

参考にしてね😆

[core] editor = code --wait

[user] email = anatsuk1@example.com ⇦ 秘密です。 name = anatsuk1

[diff] tool = default-difftool

[difftool "default-difftool"] cmd = code --wait --diff $LOCAL $REMOTE

MacBook ProでTimeMachine

Time Machineが気になる

TimeMachineでThunderbolt 3で接続したUSB SSDに定期的にバックアップを取っている。

TimeMachineを実行する時間が長くて、異常に思い調査を開始した。

ベンチマーク

USB SSDベンチマークを取る。

f:id:anatsuk1:20201205002404j:plain
ADATA UFD BenchMark

遅かった。

Amazon

USB SSDが書き込み速度が30MB/sは遅すぎるとAmazonに相談して、交換が良いと二人で考えた。

TimeMachine設定

macOSのディスク管理ツール「ディスクユーティリティ」を使う。 USB SSDをフォーカスして、消去を選ぶ ポップアップで選ぶ内容。方式を先に選ばないと、フォーマットにAPFSは出てこないことに注意😆

名前: ADATA UFD

フォーマット: APFS(大文字/小文字を区別、暗号化)

方式: GUIDパーティションマップ

USB SSDの速度が遅くならないといいな。 このまましばらく様子を見るね。

macOSでSSH接続を記憶する

SSHで簡単にログイン

LANにたくさんデバイスを接続したい。サーバーでファイルサービスを提供している。ラズパイとサーバーをコマンド実行しているときにふと、ユーザー名を入力するのが、ちと手間かな。

~/.ssh/configを使ってみる。

2回目以降のパスワード入力を省略して便利に。

controlmaster auto
controlpersist 30
controlpath  ~/.ssh/ControlMaster-%r-%h.%p

ファイルサーバとラズパイの設定。

Host <FileServer>
    HostName <FileServer>.local
    User <UserId>
    Port 22
    TCPKeepAlive yes
    IdentitiesOnly no

Host raspberrypi
    HostName raspberrypi.local
    User pi
    Port 22 
    TCPKeepAlive yes
    IdentitiesOnly no 

これで、ssh <FileServer>とか、ssh raspberrypiでユーザ名の入力なしにログインできる。うーん便利。

ふたつターミナル起動して、ふたつめはパスワード入力は省略されるよ。