ホーム » コンピュータ » Raspberry-Pi (ページ 4)

Raspberry-Pi」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

homebridge-gsh と cec-client

homebridge-gshで、google-homeからHomeKit(homebridge)を制御

自宅で homebridge-config-ui-x で、家電制御の設定が楽になり、homebridge-gsh にて、Google Home から Apple の HomeKit の制御を呼び出せるようにしてみた。今までは赤外線リモコンベースなので、テレビのON/OFFがトグル動作で怪しかったが、HomeKit 経由だと、TVにつなげた HDMI 接続のRaspberry-Pi から HDMI 接続の他の機器に、ON/OFF を明示的に制御ができるようになる。

cec-client で 電源ON/OFF ができなくなった

無事、homebridge-gsh が動き出したのに、CATVSTB の電源が ON/OFF できない。入力切替は正しく動いているのに…
cec-client の動作状況を表示させながらうごかすと、定番の 「echo “on 1” | cec-client -s」で動かない。メッセージを見ると、対象機器がうまく選べないのが原因みたい。
CEC では、物理機器番号と論理機器番号で管理されていて、物理機器番号が決まらないのに on はできない…といったのが原因みたい。cec-client のバージョンがあがり、その辺がいいかげんなコマンドが送れないようになったようだ。

しかたがないので、CEC-O-MATIC のページにて、他の方法を試すと、以下のコマンドなら、正しく電源のON/OFFができた。

$ echo "tx 26:36"    | cec-client -s   # チューナーをけす Recording2 → Tuner2 standby
$ echo "tx 26:44:6C" | cec-client -s   # Recording2 → Tuner2 User Control Pressed Power Off
$ echo "tx 26:44:6D" | cec-client -s   # Recording2 → Tuner2 User Control Pressed Power On

ということで、cec-client を呼び出す処理を、上記のコマンドを使うようにして、無事 google-home から HomeKit 呼び出しに成功。

google-home に、”NHK をつける” と話しかけると、homebridge-gsh 経由で homebridgeが呼び出され、「地デジ切替と1チャンネルの赤外線信号」をだすし、”チューナーを消す”と言えば、cec-client 経由でtx 26:44:6c を送ってチューナーの電源が切れる。超便利。

(追記)

“tx 2X:44:6D” による電源ONは、HDMIの電源連動機能が動かないみたい。”on Y” だと、(TVで連動ON設定が必要だけど)チューナーの電源を入れれば、TVも連動してONになっていた。しかし、”tx 2X:44:6D”ではテレビがつかない。TV側の連動機能を知らないうちにOFFにしたのかと思ったけど、リモコンでチューナーをつければテレビ付くし。

ということで、cec-client を使って電源操作するシェルスクリプトに、TVの電源ON動作を行う機能を追加しておいた。

homebridge-config-ui-x を入れる

Appleの家電制御のためのHomeKitと互換性のあるソフト homebridge だけど、以前より家電の赤外線リモコンで活用しているが、google home との連携もさせたくって、homebridge-gsh を入れようとしたが、nodejs のバージョンが古く、インストールに失敗していた。

Google Home Mini で家電を制御するために、iPhone に eRemote 用のアプリを入れて、制御もしているけど、テレビなどの電源ボタンがトグル動作で、ON/OFF を正しく認識しないので、操作性が悪い。homebridge では、テレビにつけた Raspberry-Pi から、cec-client を使って、電源操作や入力切替操作が行えるので、基本は homebridge ベースに切り替えたい。

インストール

今回、nodejs のリポジトリを nodejs の本家を使うように設定して、nodejs を最新の 12.x に上げる。合わせて、設定ユーザインタフェースが便利な、homebridge-config-ui-x を入れてみた。

# リポジトリを登録
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
$ sudo aptitude update ; sudo aptitude safe-upgrade

# Node.js のインストール
$ sudo aptitude install -y nodejs
$ sudo npm install -g npm

# homebridge-config-ui-x のインストール 
$ sudo npm install -g homebridge-config-ui-x

config-ui-x を使えば、config.json の編集機能があるし、その編集も各モジュール単位で編集もできるので便利。一部のモジュールは、config.json で触る必要があって、その切り分けで手間取った。

この Web-UI では、スイッチの操作で時間のかかる処理のコマンドで、一部動きがおかしいのもあるけど、スマホ版だと問題なく動くようなので、この画面はあくまで設定用かな。

HomeKit/homebridgeをラズパイで再開

一時期、google home notifier のインストールで削除した Siri を使うための HomeKit 互換の homebridge を raspberry-pi の上に再インストールを行った。

Google Home Mini を喋らせるためにインストールした google home notifier では、node.js を使うため(あとで問題がないと分かったけど)に、一旦機能を止めていたけど、機能の競合の起こりにくい raspberry-pi に暇つぶしも兼ねて homebridge を入れる。

インストールにあたり、赤外線リモコンの制御の python-broadlink を raspberry-pi にインストールしたので、単独でテレビのON/OFF/ビデオ入力切替の cec もあるから、サーバを活用しなくても済む。

手順は、過去の自分のインストールメモを参考。ちょっと手間取ったけど。

ということで、

  • テレビ,チューナー,PS4のON/OFF
  • 2つの照明のON/OFF
  • 室内/室外の温度計の表示

が、Hey, Siri で可能。

ラズパイのインタフェース名

自宅の raspberry-pi の設定を触っていて、何気に raspi-config を起動して設定を確認していたら、適当にポチポチさわってて、Network Options, N3 Network Interface Names の設定を触ったようで、再起動がかかったらネットワークがつながらない。

しかたがないので USBキーボードとHDMI のモニタつなげて、直接設定を触ろうとするものの、HDMI に信号が出てこない。

これでは、設定を触ろうにも何もできない。

raspi-config を使わないで設定を変更

もう raspberry-pi 単独では触りようがないので、micro-SD を外して、母艦のサーバで 起動時の設定を触ることとした。

間違って触った Network Interface Names は、古い eth0 などのインタフェース名でなく、enx112233aabbcc みたいな MAC アドレス を交えた新しいインタフェース名を使うような設定(predictable interface naming)。この機能が動き出したおかげで、インタフェースの初期化に失敗している。この設定を戻さないと。

$ sudo bash
((( raspberry-piの/bootフォルダをマウント )))
# mount -t vfat /dev/sdd1 /mnt  デバイス名/sddの部分は要変更

((( predictable interface naming を無効化 )))
# vi /mnt/cmdline.txt
net.ifnames=0  ファイル末尾に追加

((( sshサーバ機能を有効化 ))) 
# touch /mnt/ssh

((( HDMI の出力を有効化 )))
# vi /mnt/config.txt
hdmi_safe=1    先頭の方のこの行をコメントアウト
               低解像度のsafeモードでHDMIを設定

# umount /mnt
((( raspberry-piのrootをマウント )))
# mount -t ext4 /dev/sdd2 /mnt
((( ネットワークの設定ファイルを変更 )))
# vi /mnt/etc/dhcpcd.conf
...

んで、母艦で編集していた micro-SD を raspberry-pi に差し戻して起動。

Raspberry-Pi のファーム壊れた

Raspberry-Pi、ネットワーク越しに rpi-update してた途中でWiFi中継器のネットワークが切れてしまった。おかげでファームウェアの更新に失敗。どうもファームウェアがぶっ飛んだようで、起動しなくなった。タイミング最悪。

その RPi は、ITオンチな1F両親向けに、家族の予定をLED掲示板に表示させてるために使ってた。でも、買い替えるといっても RPi4 買うほどの処理じゃないしな。

難しい話抜きで、Google Nest 買った方が便利かな。でも、OK,Google、使いこなせないだろうしなぁ…

iphoneの検知難しい

大学でアパート住まいの子供が、帰っているのか確認するために、LINE beacon を置いて検知を試したけど、bluetooth を切って既読スルーなヤツなので、ほとんど検知することができない。

そこで、アパートでは無線LANルータを使ってるし Raspberry-Pi で、arpalert を使えば簡単に検知できるだろうと、実験中。でも iPhone はセキュリティ対策なのか、 arp の返答は必要最小限なので同じサブネットとはいえ、そのままでは通信の必要の無い raspberry-pi には、ARP 情報が送られてこない。また ping には返答しないようで、単純に ping で確認も困難。ということで単純な arpalert では検知が難しいなぁ。

定時処理で、”arping -c 1 -I wlan0 IPHONEのIPアドレス” を実行させて、強制的に ARP を送ってもらうか…

家族専用LINEボット

LINE本社で開催されていたハッカソンの引率をする中、自分でも家族専用のLINE-botを作ってみた

LINEトークのメール転送

自宅では、家族のLINEグループを作っているけど、家に帰るといった連絡を親にも伝えたいことが多かった。しかし、両親そろってネット音痴でスマホを使いこなせないし、LINEを使うなんて無理。一方、我が家では、両親の居間のTVの脇に、LEDメッセンジャーを置いてあり、Raspberry-Pi をつないで家族のその日のスケジュールを表示するようにしてあった。さらに、Raspberry-Pi にメールを送ると、LEDメッセンジャーにメールのタイトル部を表示するようにしてあった。

そこで、今回、Webにあった LINE Messenger API を使った、オーム返しするボットのプログラムを参考に、特定のメッセージを、LEDメッセンジャー用のメールに転送させてみた。

{CAPTION}

実際に運用して、LINEボット経由で、LEDメッセンジャーに「今から帰る」を送ってみたけど、ちゃんとメッセージが伝わっていた。

LINE Beacon

ハッカソンでは、LINE Beacon を貸してもらえて、これも使ってみた。我が家では、お兄ちゃんが今年から大学でアパート住まいになったけど、慣れてくるとなかなか家に連絡をくれない。ママはアパートにカメラ置こうとか言うけど、それはお兄ちゃんも嫌がるよ。

ということで、大学の行き帰りぐらいが通知で送られてくるだけでも、ありがたい。LINE Beacon であれば、お兄ちゃんのアパートにBeacon を置いて Beacon の Enter イベントで LINE に push 通知すればいい。といっても、ハッカソン終了時に Beacon は返却だったので、早速 LINE Beacon を発注。

うまく活用できるようになったら、一人住まいの義母用にもう1個発注になりそう。

追記 2018/12/24 届いた

追記 2019/01/05 子供のアパートに設置

子供にも安否確認のための設置を理解してもらい、無事アパートに設置。

ただ、LINEをあまり起動しないのか、通知も少ないけど、家の出入りは確認できそう。


暑さの測定

以前購入した、Raspberry-Pi 内蔵の MZ-80C のミニチュアは、温度・湿度・気圧のセンサーを付けて、2Fのトイレに設置していたけど、WiFiが若干不安定だったので、常時サーバで記録はしていなかった。しかし、この暑さなので、エアコンの無い部屋の温度を測定したかったので、改めて設定してみた。

Raspberry-Pi の inetd の echo サーバの所に温度測定スクリプトを記載して、”/usr/bin/nc raspberry-pi 7″ で測定できるように設定し、munin 用のデータ取得スクリプトを書いて設定。このクソ暑い温度を測ってみた。

家の西側の2会のトイレに設置しているので、夕方が最高温度で、家の中でも34℃越え。湿度は、トイレのドアを開放すると、大きく変化するようだ。

cec-clientをhomebridgeから制御

今までは、iOS の HOME 機能を、linux環境で動くフリー実装の homebridge を使って、赤外線リモコンを制御していた。 しかし、AV機器のON/OFFでは、電源ボタンでON⇒OFFなのかOFF⇒ON なのか分からない。このため、ネットワーク対応の機器だし、 ping の結果に応じて 電源ボタン信号を出していた。

ただ、TVなどは、電源OFFの状態でも、EPG情報取得などのために OS が動いているため、OFF 状態の判定に失敗する。

そこで、先日見つけた HDMI 経由から制御信号を送る cec-client を試してみた。cec-client では、機器のON/OFF を判定しているので、 確実に ON/OFF できるはず。cec-client は、サーバ機では使えなかったので、 Raspberry-Pi を使ってみた。

$ echo "on 1" | cec-client -d 1 -s      # 1番機器をON
$ echo "standby 2" | cec-client -d 1 -s # 2番機器をOFF
$ echo "scan" | cec-client -d 1 -s      # 機器一覧をスキャン
device #0: TV         ← REGZA
address:       0.0.0.0
vendor:        Toshiba
osd string:    TV
power status:  on
device #1: Recorder 1 ← VARDIA
address:       2.0.0.0← HDMI入力ソース番号
vendor:        Toshiba
osd string:    RD-S502
power status:  standby ← 電源状態
device #2: Recorder 2  ← Raspberry-Pi
address:       1.0.0.0
vendor:        Toshiba
osd string:    CECTester
power status:  o
device #3: Tuner 1    ← CATV-STB
address:       1.0.0.0
vendor:        Panasonic
osd string:    Tuner 1
power status:  on
device #4: Playback 1 ← PS4
address:       3.0.0.0
vendor:        Sony
osd string:    PlayStation 4
power status:  standby

AVソースの切り替え

今までは、赤外線リモコン信号で、ON/OFF を制御していたので、 HDMI 連動設定をしているおかげで、ケーブルTVのチューナーON で、テレビの電源も ON となり、さらにビデオ入力も対象機器に 切り替わる。

ただ、cec-client に切り替えたら、機器の制御信号をだすのが、 別機器なので、TV電源連動や、ビデオ入力切替連動とならない。

しかたがないので、TVのビデオ入力切替信号も出してみる。

echo "tx 2f:82:10:00" | cec-client -d 1 -s
# 2番のHDMIデバイス(raspberry-pi)から、
# 全デバイス宛て(f番)の信号で、
# 82 映像切替コマンドを送る。(TOSHIBA REGZAの場合)
# 10:00 は、ビデオ切り替えの番号

HDMI経由で機器制御cec-client

最近は、TV操作はケーブルテレビのチューナーで 行うことが増えたけど、以前は入力切替とかが面倒だった。 でも、HDMI 経由で入力切替などの設定を行ったら、 チューナーの電源を入れるだけで、TVの電源ONや、入力切替を やってくれる。

これらの制御は、HDMI の CEC 機能らしい。 この機能を活用したら、赤外線リモコンでTV制御しているのを、 もっとスマートにできるのでは….としらべたら、 linux 環境では cec-client というのがあるらしい。

ということで、サーバのHDMI出力をTV経由で接続すれば、 その他のチューナーやレコーダを制御できるはず。

ただ、linux の グラフィック機能は、Intel のオンボード。 よくよく調べると、Intel は、"Never work"なんて記事も見つかる。

対応手段としては、Raspberry-Pi をつなげて、ラズパイのHDMI 経由で 制御ができるんじゃねぇ?

今日のところは、メモだけ。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト