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 では、スイッチの操作で時間のかかる処理のコマンドで、一部動きがおかしいのもあるけど、スマホ版だと問題なく動くようなので、この画面はあくまで設定用かな。
サーバダウン
朝起きて、”OK, Google” と叫んでも、”WiFiが繋がっていない”とのエラー。確認すると、サーバが落ちている。サーバでDHCPも動かしているので、サーバが落ちると家の中のネットワークが全部動かなくなる。それらしい時間 2020/08/20,01:15 頃の syslog などを確認するが、心配な log もあるけど、通してみると定常的な spam 系のアクセスっぽいので、原因不明。
サーバもそれなりに長期間運用しているので、新たに /var/log/trouble というフォルダを作って、syslog, messages, access.log, error.log などをコピーしておく。
WordPress 5.5 を適用
WordPressを触っていたら、version 5.5 が公開となったみたい。
新しい機能なのか、編集画面に URL 張り付けただけで、↓うまく引用してくれらぁ。
homebridge-peopleの設定
homebridgeの記事を探していたら、homebridge-people を見つける。ping の結果を、人感センサーの ON/OFF 情報として扱うことができる。ping のホスト名をスマホのIPアドレスを指定すれば、自宅に居る/居ないとして把握できる。
$ sudo npm install -g homebridge-people
$ emacs .homebridge/config.json "platforms": [ { "platform": "People", "threshold" : 15, "anyoneSensor" : false, "nooneSensor" : false, "webhookPort": 51828, "cacheDirectory": "./.node-persist/storage", "pingInterval": 10000, "ignoreReEnterExitSeconds": 0, "people" : [ { "name" : "斉藤徹", "target" : "iphonex-tsaitoh", "threshold" : 15, "pingInterval": 10000, "ignoreReEnterExitSeconds": 0 } ] } ]
本当は、ホームハブを導入することで、Home のオートメーションと連動させて、○○が家に帰ったら、○○するといったことができるんだけど、ホームハブが無いのでできない。そうなってくると、HomePod が欲しくなってくる。
speedtest-cliとrrdtool
インターネットとの通信速度を計測する speedtest-cli で Linux の上で測定できそうなので、毎日測定するようにしてみた。MRTG を単純に使うと5分おきになってしまうので、rrdtool を使って1日1回更新にてデータを生成させる。
#!/usr/bin/perl my $pgname = "speedtest" ; my $rrdfile = "/var/lib/munin/localdomain/localhost.localdomain-$pgname.rrd" ; my $graphfile = "/var/cache/munin/www/localdomain/localhost.localdomain/$pgname.png" ; my $rrdtool = "/usr/bin/rrdtool" ; my $speedtest = "/usr/local/sbin/speedtest-cli" ; my $time = time() ; my $debug = 0 ; sub fetchvalue { my ($upv , $dwv) = @_ ; my $upload = 0 , $download = 0 ; open( FH , "$speedtest |" ) or die( "Can't open $speedtest." ) ; while( my $line = ) { if ( $line =~ /^Upload:\s*([\d\.]+)\s*(M|K|)bit\/s/i ) { $upload = $1 ; $upload *= 1000000 if ( $2 eq "M" ) ; $upload *= 1000 if ( $2 eq "K" || $2 eq "k" ) ; } if ( $line =~ /^Download:\s*([\d\.]+)\s*(M|K|)bit\/s/i ) { $download = $1 ; $download *= 1000000 if ( $2 eq "M" ) ; $download *= 1000 if ( $2 eq "K" || $2 eq "k" ) ; } } close( FH ) ; $$upv = $upload ; $$dwv = $download ; } sub create { my $cmd = "$rrdtool create $rrdfile" ." --step 86400" ." DS:upload:GAUGE:200000:0:U" ." DS:download:GAUGE:200000:0:U" ." RRA:LAST:0.5:1:7" ." RRA:AVERAGE:0.5:3:7" ." RRA:MIN:0.5:3:7" ." RRA:MAX:0.5:3:7" ; print $cmd."\n" if ( $debug ) ; system( $cmd ) ; } sub update { # rrdファイルが無ければ作る create() unless( -f $rrdfile ) ; # 値を取得して更新 my $upv , $dwv ; fetchvalue( \$upv , \$dwv ) ; my $cmd = "$rrdtool update $rrdfile" ." N:$upv:$dwv" ; print $cmd."\n" if ( $debug ) ; system( $cmd ) ; } sub graph { my $start = $time - 3600*24*200 ; my $cmd = "$rrdtool graph $graphfile" ." --imgformat PNG" ." --start $start" ." --end $time" ." --title \"SpeedTest\"" ." --height 150" ." --font DEFAULT:7:Consolas" ." --vertical-label \"bit/sec\"" ." --color FRAME#f3f3f3" ." --color AXIS#F3F3F3" ." --color SHADEA#f3f3f3" ." --color SHADEB#f3f3f3" ." --color ARROW#f3f3f3" ." COMMENT:\" cur avg min max\\n\"" ." DEF:upload=$rrdfile:upload:LAST" ." LINE:upload#00FF00:\"Upload \"" ." GPRINT:upload:LAST:\"%6.2lf%s /\"" ." GPRINT:upload:AVERAGE:\"%6.2lf%s /\"" ." GPRINT:upload:MIN:\"%6.2lf%s /\"" ." GPRINT:upload:MAX:\"%6.2lf%s \\n\"" ." DEF:download=$rrdfile:download:LAST" ." CDEF:download_minus=download,-1,*" ." LINE:download_minus#0000FF:\"Download\"" ." GPRINT:download:LAST:\"%6.2lf%s /\"" ." GPRINT:download:AVERAGE:\"%6.2lf%s /\"" ." GPRINT:download:MIN:\"%6.2lf%s /\"" ." GPRINT:download:MAX:\"%6.2lf%s \\n\"" ." > /dev/null" ; print $cmd."\n" if ( $debug ) ; system( $cmd ) ; } if ( @ARGV > 0 && $ARGV[0] eq "config" ) { create() ; } elsif ( @ARGV > 0 && $ARGV[0] eq "update" ) { update() ; } elsif ( @ARGV > 0 && $ARGV[0] eq "graph" ) { graph() ; } else { update() ; graph() ; }
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 で可能。
geoipdeny より kr, tw, hk を削除
最近、自宅よりアクセスできないサイトがあるみたい。特に日本のページのはずだけど、WiFi を切って携帯キャリア接続にすると、問題なく見える。あるとすれば、自宅のファイアウォールの問題か。
自宅では、IPアドレスの国ドメイン割り振り情報を元に、特定の国の IP アドレスをフィルタで接続を拒否している。対象国は自宅サーバへのアクセス履歴で私に縁の無い国から選んだ。でも、最近ではネットワーク接続的に近隣の国のサーバを経由している場合もある。そうなってくると、韓国kr、台湾tw、香港hk の制限が問題になっている可能性が高い。
ということで、これらの国を削除してフィルタを作り直し。