anatsuk1のウェブログ

ブログを書いてみたい!

Raspberry Piでスマートリモコンを作る!

スマートリモコン

スマート赤外線リモコン、Infrasmaconを遂にリリースした

InfrasmaconのGitHubページ github.com

電化製品を、赤外線を送信して、コントロールする!

Siriと連携することで、話しかけてシーリングライト、エアコンをONできる!

HomeKitネットワークに参加させよう!

Infrasmacon

Infrasmaconはスマートな赤外線リモートコントローラーだよ。

  • たくさんの電化製品をコントロールする!
  • HomeKitのデバイスにして、HomePodのSiriに声で楽しく依頼をする。
  • iPhoneのHomeアプリで、コントロールする。

構成

事前準備

赤外線デバイス「RPZ-IR-Sensor」

f:id:anatsuk1:20210224223644j:plain
RPZ-IR-Sensorを装着したRaspberry Pi 4B

pigpioライブラリ

pigpioサービスををインストールして即時スタートする!

サービスを有効にして再起動時に開始するようにもする!

sudo apt install pigpio
sudo service pigpiod start
sudo systemctl enable pigpiod.service

cgirが使うPython3パッケージ

pigpio、docoptパッケージをインストールするのよ。

sudo apt install python3-pip
sudo pip3 install pigpio docopt

cgirをインストール

インストール先は、/var/opt/が最近は好みかな。

git clone https://github.com/IndoorCorgi/cgir
sudo cp -R ./cgir /var/opt/

HomeKitエミュレータ「Homebridgeとプラグイン

Homebridge

Homebridge、PluginのHomebridge Config UI Xインストールコマンド

sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x

HomebridgeはHomeKit非対応デバイススマートデバイスにする。

Homebridge Config UI Xはコンフィグ画面のhttpサーバーだよ。 ブラウザでHomebridgeコンフィグするのが便利になる。おすすめ。

Homebridgeサービスをpiユーザーで動かす

sudo hb-service install --user pi

hb-serviceのhbはHomeBridgeの頭文字。 ユーザーはpiがおすすめ。ユーザーをhomebridgeにすると、Raspberry Pi OSのパーミッションを変更するのよね。

Homebridge Cmd4をインストール

MacOSのブラウザでhttp:<Raspberry Pi IP address>:8581を閲覧すると、Homebridge Config UI Xが表示される!

f:id:anatsuk1:20210224215337p:plain
Found Homebridge Cmd4

プラグイン」で、「Homebridge Cmd4」を検索してインストールしてね。

開発ソフトウェア「Infrasmacon」

Infrasmaconを知る。

github.com

Infrasmaconは赤外線デバイスをコントロールする。

  • 赤外線コードを電化製品に送信する。
  • 電化製品の状態を取得する。
  • 赤外線デバイスに登録済みの赤外線コードを選択する。

Infrasmaconの設定方法

  1. 好みに合わせて、config.jsonを記述する!
  2. 環境に合わせて、infrared_device.pyを設定と移植する。

詳しくは、GitHubのページを見てね。

インストール

スクリプトを用意しているから使ってね!

example.install_infrasmacon.shは、機微情報を置き換えているよ。 Dysonの扇風機を使うときは有効活用してね!

mv example.install_infrasmacon.sh install_infrasmacon.sh
install_infrasmacon.sh

スマートリモコン!

スマートリモコン操作イメージ

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

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

  3. Infrasmaconは、赤外線リモコンコードを送信する。

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

Infrasmaconの動き

  1. ホームアプリのGUIイベントでソフトウェアが起動!
  2. ホームアプリの「デバイス」「明るさ」に応じて、シーリングライトのリモコンデータを送信する。
    • 100%: 光量は最大、白色
    • 99-20%: 光量は中間、暖色
    • 19-1%: 常夜灯
    • 0%: 消灯

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

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

Homebridgeの設定ファイル

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

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

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

シーリングライト

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

参考

Install Homebridge on Raspbian

Homebridgeのインストール、Homebridge Config UI X含む、のオフィシャルページ。

github.com

次回はとうとう、E17電球のONをSiriで依頼😆

JxyMemoriesでバックアップする♪

JxyMemories紹介

Ubuntu Serverのストレージをスケーラブルにバックアップしたい。想いを込めて開発したソフトウェアを紹介します。

JxyMemoriesは、俺の思い出をながーく残しておきたい。その気持ちから開発を始めて、めちゃめちゃ良いものを作った。

f:id:anatsuk1:20210217220324p:plain
JxyMemoriesイメージ

作りたい。思う。

macOSが持っているTimeMachine機能は良い。すごく短い間隔でストレージのスナップショットをバックアップディスクへ保存する。前回からの差分だけのみを保存するので、たくさんのスナップショットが、すごく小さいディスクへ収まる。

保存したスナップショットを全部もどすと、ストレージがタイムマシーンで過去に戻るイメージ。にピタッと合う。もちろん1個のファイルだけももどせるよ。

Ubuntuで、TimeMachineを以上のソフトウェアを作ったよ。 Ubuntuで、大事な思い出を取っておきたい。 みんな、使ってね♪

JxyMemoriesソフトウェア

JxyMemoriesが持っている機能:

  • LVM2のLV(logical volume)をバックアップする
  • 古くなったバップアップを自動的にレポジトリから取り除く
  • バップアップの一覧と詳細の情報を出力する
  • systemdのタイマーで継続的にバックアップする

バックアップを保存したリポジトリからLVMのLV(logical volume)を復元できる。もちろん、ファイル単体も復元できる。

バックアップの情報

Archive fingerprint: f6e5a3603aaf873fa1fe7827561d6c257b85aad579225fdfd564f26c7fb02b55
Comment: 
Hostname: xxxxx
Username: root
Time (start): Wed, 2021-02-17 21:00:52
Time (end): Wed, 2021-02-17 21:01:08
Duration: 15.51 seconds
Number of files: 173482
Command line: /usr/bin/borg create --verbose --filter AME --list --stats --show-rc --compression lz4 --one-file-system --exclude-caches --exclude /ubuntu-lv-jxy/swap.img --exclude /ubuntu-lv-jxy/root/.cache --exclude '/ubuntu-lv-jxy/home/*/.cache/*' --exclude '/ubuntu-lv-jxy/var/cache/*' --exclude '/ubuntu-lv-jxy/var/tmp/*' '/var/borg/repo.borg::{hostname}-ubuntu-lv-{now}' /ubuntu-lv-jxy
Utilization of maximum supported archive size: 0%
------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
This archive:                9.99 GB              6.34 GB             13.70 MB
All archives:                2.68 TB              2.27 TB             43.15 GB

                       Unique chunks         Total chunks
Chunk index:                  182561             10059377

GitHubレポジトリへのリンクを貼り付けておきますね💖

github.com

JxyMemoriesソフトウェアjxy-memories.py

Python3で書いたソフトウェアだよ。 好きな場所にインストールしてね!

anatsuk1@xxxxx:/usr/local/etc$ ls -la
total 24
drwxr-xr-x  2 root root  4096 Feb 15 15:04 .
drwxr-xr-x 10 root root  4096 Oct 22 22:58 ..
-rw-r--r--  1 root root    32 Feb 15 15:04 .borg-passphrase
-rwxr-xr-x  1 root root 11848 Feb 15 15:04 jxy-memories.py

バックアップ - LVM2のLV(logical volume)からスナップショットを作る - 作成したスナップショットをマウントする - マウントしたスナップショットをバックアップする

取り除き - 新しいバックアップは残し、古いバックアップをレポジトリから取り除く

JxyMemoriesソフトウェア systemdタイマー

anatsuk1@xxxxx:/etc/systemd/system$ ls -la jxy-*
-rw-r--r-- 1 root root 96 Feb 14 00:08 jxy-memories.service
-rw-r--r-- 1 root root 99 Feb 14 00:08 jxy-memories.timer

タイマーユニットファイルを準備したよ。インターバル起動に便利!

小ネタ集でLVMとアカウントサービス

LVMコマンドでエラー

SDカードリーダーをUSBに接続時して、sudo lvdisplayを実行する。

  /dev/sdd: open failed: No medium found
  /dev/sdd: open failed: No medium found

俺は気にしないことにしたよ!

エラーはLVMがスキャンするデバイスの範囲を指定することで解決するよ。 とりあたまさんのおぼえがき: CentOS on CentOS

Environment
Ubuntu: 20.04.2.0 LTS (Focal Fossa)
LVM2: LVM version: 2.03.07(2) (2019-11-30)  Library version: 1.02.167 (2019-11-30)

journalログでエラー

Raspberry Pijournalctl -eでjournalログを見る。

lightdm[780]: Could not enumerate user data directory /var/lib/lightdm/data: Error opening directory '/var/lib/lightdm/data': No such file or directory

accountsserviceをインストールすると解決する。

sudo apt install accountsservice

できれば、無駄なソフトウェアはインストールしたくないが。。。

Environment
Raspberry Pi OS

ソフトバンクの「おうちでんき」を契約しよう!

電力自由化の波

TEPCO、東京ガス、はお得な契約プランを俺に進める。

東京ガスは、ガスをうちに送って、お湯を蛇口から出す手伝い。キッチン、バス、いつも快適に感じる。東京ガスが好き。

東京ガスからのお得な広告がきっかけで、お得なプランを契約する。

お得なプラン

新電力のお得プランをインターネットで発見!

東京ガスの広告に考えを委ねて、iPhoneで、バーコードを読み込み、お得プランにアクセスする。 東京ガスは、TEPCOと比べて、すごく期待を抱く金額を説明する。お得になる期待が非常に大きく広がる。

さらなる新電力を探す。

エネチェンジは、新電力のプランを比較するサイト。 enechange.jp

気になるお得なプランを折れ線グラフで見たい!

ソフトバンクの「おうちでんき」

もっともお得なプラン、ソフトバンクの「おうちでんき」を選んだ。

作ったグラフを見てね💖

f:id:anatsuk1:20210209224737p:plain
お得なプラン

Homebridge on Raspberry Pi でSiriとDysonとCMD4_ADRSIR

SiriとHomeKit

俺のSiriは長く考える。困っているように聞こえる。デバイスの応答が。。。

元気なときは返事が速い。はい!できました!

困っていると、一部のデバイスからの応答がありません。 電気は消えている、エアコンは止まっている。Dysonはナイトモード。

一部のデバイスを見てみよう!Siriのためにやろう!

Raspberry Piとlog

この記事の続編です。

anatsuk1.hatenablog.com

ラズパイにログインをしてみる。成功!よかった。 /var/logのログを眺めてみる。

cat /var/log/syslog

journalctlは矢印で上下移動するのに良い。

journalctl -e

ciaoが出力した記録がログにたくさん残っている。

近ごろ、PythonとHomebridgeとHomebridge-cmd4とhomebridge-dyson-linkをアップデートした。

相性問題かな?

アップデート

Homebridge-cmd4はversion 3.0.0で、メジャーバージョンアップする。

俺が作った便利なPythonスクリプトcmd4_adrsirもバージョンアップしよう!

  • ダブルクオーテーションが付いていることをJohnに質問をする。

    Johnは忙しい。俺のスクリプトでダブルクオーテーションを取り除こう。

  • 状態値が数値から文字列に変わっていたことも質問する。

    Johnはめっちゃ忙しい。俺のスクリプトも文字列値へ更新しよう!

cmd4_adrsirはこちら

github.com

Homebridge

Siriへ話しかけて質問をすると、Siriが困ったり、困らなかったり。

いまは、Homebridgeをデバッグオプションを付けて起動している。Siriが困ったら、記録されたデバッグログをみよう!

Homebridgeは、内部で使用するHAP-NodeJSが、まだまだ不安定で心配😆。

公式ページを見ると、bonjourサービスをbonjour-hapからciaoに置き換えたあとに、ciaoのバグが出続けている。

はやく安定してくれると、嬉しいのだが。。。

Ubuntu ServerでTime MachineとファイルサーバーをSambaで踊る。

SambaとFinderは複雑な関係

ファイルサーバーをUbuntu Severは担っている。ファイルサーバー、Time Machineサーバのサービス、両方ともSambaの担当する。Time Machineサーバーを始めたときから、ファイルサーバーへFinderでメディアファイルをコピーすると、Finderが、絶対に、フリーズして困る。

これは困るのでなんとかしよう!

Sambaのsmb.confを変えよう!

設定を変更する

Sambaの次の設定ファイルを書き換える。

/etc/samba/smb.conf

設定ファイルは、セクション、属性と設定値、を記述する。

フォーマットは次のとおり。

[セクション] ←  セクションの開始。
    属性 =  設定値

設定ファイルを書き換えると、ファイルサーバーへログイン時に使用するユーザー、公開ディレクトリのパス、ファイル参照権限、などをカスタマイズできる。

俺はいつも、nanoコマンドで設定ファイルを開いている。

コマンド例 :

sudo nano /etc/samba/smb.conf

登録済みユーザーに限り、ログインする

[global]セクションを変更するよ。

  map to guest = Never ← 値を変更したよ。
  guest ok = no        ← 新しく追加したよ。

登録済みのユーザーに限り、ログイン可能にしたよ。

  • map to guest = Never

    Sambaに登録済みユーザー「だけ」、ログインを成功する。

  • guest ok = no

    Guestアカウントを無効にする。

Mac向けのSambaにする


2021年2月14日アップデート

自作ツールの開発ワークディレクトリをSambaサーバーの共有フォルダにしてる。

設定ファイルをFinderで削除したとき、初めてみるポップアップを見た。 サーバーへsshで接続してから、lsをすると、削除したファイルと似た名前の隠しファイルできていた!

設定を良く眺めてみて、気分を変えてencodingでnativeにしようと思う。


[global]セクションの最後にfruitの属性値と設定値を加える!

   vfs objects = catia fruit streams_xattr
   fruit:aapl = yes
   fruit:nfs_aces = yes
   fruit:copyfile = yes
   fruit:zero_file_id = yes
   fruit:model = MacSamba

   fruit:resource = file
   fruit:metadata = netatalk
   fruit:locking = none
   fruit:encoding = native 
   fruit:veto_appledouble = yes

   fruit:wipe_intentionally_left_blank_rfork = yes
   fruit:delete_empty_adfiles = yes

fruit:lockingは、none。netatalkでは、Time MachineするとSambaがアボートするので、注意ね。

vfs_fruitを日本語で説明した、とても役に立つページ。

www.samba.gr.jp

ホームディレクトリへ書き込む。

[home]セクションの書き込みについて!

   read only = no           ← 書き換え
;   create mask = 0700      ← コメントアウトを使って行を無効にしたよ
;   directory mask = 0700   ← コメントアウトを使って行を無効にしたよ

read only = no: ディレクトリに書き込みするよ。読み込みと実行もするよ。

セクションのcreate maskと、directory maskを無効にして、Sambaのデフォルト値を使用するよ。

  • デフォルト値、create mask: 0744だよ。作成者は「フルアクセス」、他ユーザーは「読み出し」だよ。
  • デフォルト値、directory mask: 0755だよ。作成者は「フルアクセス」、他ユーザーは「読み出し、移動」だよ。

Time Machineだよ!

[timemachine]セクションを追加したよ!

[timemachine]
    path = /var/timemachine
    valid users = recorder

    access based share enum = yes
    browseable = yes

    writable = yes
    fruit:time machine = yes
    fruit:time machine max size = 256G
属性と設定値 効果
path = /var/timemachine Time Machineを保管するディレクトリ!
valid users = recorder ユーザー「recorder」だけ、アクセスする。
access based share enum = yes ユーザー「recorder」はFinderで見る!
browseable = yes ディレクトリをFinderで見る。
writable = yes 書き込みするディレクトリ。
fruit:time machine = yes [timemachine]セクションはTime Machine、Sambaに教えるよ。
fruit:time machine max size = 256G Time Machineのサイズは256GBまでね!

ファイルサーバーだよ

[archive]セクションを追加したよ!

ファイルサーバーの設定。 使っている属性、を知りたい人は、Time Machineだよ!を見てね!

    path = /var/archive
    valid users = xxxxxxxx

    access based share enum = yes
    browseable = yes

    writable = yes

何とかなった!

なんどもFinderでSambaへコピーを繰り返す。

Sambaを、実際に動かしながら、設定を発見した。

Sambaチューニングしているとき。

いちどFinderがフリーズしたら、macOSからFinderを強制終了する。macOSのシャットダウンも、正常に終了せずに、強制終了する。

コピーが成功したので、Time Machineでバックアップを実行すると、TimeMachineがフリーズする。SambaのパニックがSambaログに残っていた。

Samba設定を見つけて嬉しかった。この先ずっとこの設定で行ける。そう確信した。

Ubuntu ServerをBorgでバックアップしたい!

バックアップを考える。

Ubuntuサーバーは、思い出を記録したメディアファイルを、たくさん持っている。クリスマスに表参道で、想いがこもったイルミネーションを見て、好きな人に気持ちを伝えようと思った。

大事なメディアファイルを、バックアップしよう!

Borgを使う。

バックアッププログラムはたくさんある。

Timeshift、rsnapshot、rsync 、Duplicity、Déjà Dupフロントエンド、resticを、差分バックアップ方法、実績を、技術交流サイトで調べる。

Borgは、チャンクベースの差分バックアップで、バックアップのデータサイズを最小にする。優れたバックアッププログラムで正式にはBorgBackup!

俺は、LVMのもつSnapshot機能を使う。バックアップの頻度と保持期間はあと決めよう。

VGのSnapshot領域

VGのFree PEを、Snapshot領域に使うよ。 俺のLVはarchive。archiveを減らそう。Free PEは増える。

sudo lvreduce -r -L 200G /dev/ubuntu-vg/archive

lvreduceのrオプションは、データを残して、LVを減らす。Lオプションは減らした後のサイズだよ。

バックアップ自動作成の準備♪

Borgインストールコマンド

sudo apt install borgbackup

Borgレポジトリ作成

sudo borg init --encryption=repokey /var/borg/borg.repo

俺は、/var/borgにバックアップするよ。レポジトリへはパスフレーズで暗号化するの。

レポジトリを含むファイルシステムは、2GBぐらいのフリースペースがいると確信する。アクセスするユーザーは固定するよ。

もっと詳しく知りたい!

公式ドキュメント borgbackup.readthedocs.io

バックアップ自動作成

開発中のスクリプトを使ってね。使い方はGitHubページに載っているよ。

github.com

リストアできるかな?

俺は、レポジトリをマウントして、読み込む!

マウントに、libfuse、ユーザーランドファイルシステム、をインストールしてね♪

sudo apt install libfuse-dev 

マウントするよ。-oは他のユーザーからのアクセスする。 mybackupマウントポジション。コマンド実行前にディレクトリを作成してね。

sudo borg mount -o allow_other /var/borg/repo.borg ./mybackup/

borg extractを使うの?

borgbackup.readthedocs.io

Thanks