ホーム » コンピュータ » Linux (ページ 10)

Linux」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

UbuntuなMacbookair(2011)、WiFi動かず

以前に愛用していたMacbook Air(2011)だけど、性能不足からUbuntuを入れていたけど、ちょい Terminal として使おうと起動させたら、Ubuntuは立ち上がるけど、WiFiがつながらない。色々再起動もかけたけど、やっぱり起動せず。限界かなぁ…

どうも、アップデートでインストール時に入っていた WiFi のドライバが消えたみたい。macbookair の WiFi ドライバは、別途入れる必要があるみたいだな。

$ sudo aptitude install firmware-b43-installer bcmwl-kernel-source

ということで、無事 WiFi が復活。まだまだ、使い倒そう。

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

IFTTT利用を最小限に

IFTTT が 有料のIFTTT Pro のサービスに移行となり、無料契約だとアプレットを3つまでしか使えない。早々に、IFTTT からの警告メールが届き、10/7 までに契約すれば月額費用は、自分で決められるといった内容。

自宅では、Raspberry-Pi で動かしている機能や、赤外線リモコンを Google Home から制御するために、IFTTT にかなり依存していた。最近は Netflix とか Hulu とか、色々と契約しているし、出費とならないようにIFTTT 依存から脱却を図ろう。

arpに169.254.x.xが出てくる

自宅サーバの状況を見ていたら、169.254.185.142 という IP アドレスが ARP の一覧に出てくる。

MACアドレスを見ると、設置している Raspberry-Pi と同じ。

リンクローカルアドレス

以前にも同様のエントリーが出てきたことがあったので、改めて原因をしらべると、こちらに該当すると思われる解説記事。

DHCPの異常で、アドレスが得られない時に、暫定で割り振るIPアドレスみたい。その他の原因も考えられると説明があるが、実際数日間に DHCP の設定を触っていたから、出てきてもしかたがないかな。

間違ったARPエントリを消す

“arp -d 169.254.x.x”で、エントリーを消そうと思うがうまく消えてくれない。深く考えてもキリがないので、夜中にサーバの再起動させよう。

うまく消えないので、色々調べながら、以下のコマンドで消せた。

“ip -4 neigh del 169.254.x.x lladdr yy:yy:yy:yy:yy:yy dev eth0″

サーバダウン

朝起きて、”OK, Google” と叫んでも、”WiFiが繋がっていない”とのエラー。確認すると、サーバが落ちている。サーバでDHCPも動かしているので、サーバが落ちると家の中のネットワークが全部動かなくなる。それらしい時間 2020/08/20,01:15 頃の syslog などを確認するが、心配な log もあるけど、通してみると定常的な spam 系のアクセスっぽいので、原因不明。

サーバもそれなりに長期間運用しているので、新たに /var/log/trouble というフォルダを作って、syslog, messages, access.log, error.log などをコピーしておく。

昨日のWiFi中継機を増設した影響かとも思ったが、無関係かな。

muninで室内温度と外気温度の同時表示

今まで、室内温度のセンサーと、室外(といっても2F廊下)の温度を測ってきたけど、蒸し暑い夜にどの位の温度差があるのか2つのグラフを見比べるのではなく、1つのグラフで比較したくなった。

それぞれの、mrtg のプログラムを連結するのではなく、mrtg script の出力を合成する script を書いてみた。

WordPress 5.5 を適用

WordPressを触っていたら、version 5.5 が公開となったみたい。

新しい機能なのか、編集画面に URL 張り付けただけで、↓うまく引用してくれらぁ。

WordPress 5.5「エクスタイン」

Google Home セットアップ中はiPhoneのProxyはオフ

Google Home アプリの設定を確認していたら、ファームウェアの更新みたいな表示が出たので Google Home mini の初期化(本体裏のスイッチ長押し)を行う。
# たぶん、これもproxy経由が原因だったんだろうな。

Google Home 初期化に失敗

普通に初期化を行うが、最終段階でエラーの表示で「…セットアップされているようですが、iPhoneからの通信に応答しませんでした。Google Home mini と iPhone が相互に通信出来ないネットワークに接続されている可能性があります…」といったエラーが表示され、初期化に失敗する。いろいろと試したが、失敗するが、ふと自宅内で Squid の キャッシュProxyサーバを運用しているのを思い出した…。

Proxyをオフにしたら、無事接続成功となった。

Proxy 自動設定Scriptの適用

他にも色々と試すと、Proxy設定がONだと、iPhone から Google Home mini へのストリーミングもできなくなっている。

最終的には、iPhone の WiFi 設定で、Proxy 設定の自動化で、Proxy設定のJavaScript(proxy.pac: 同じサブネット内は Proxy を使わない)を設定となった。

IFTTTのwebhooksトリガーでLINEメッセージ送信

家に帰る時に、家族のLINEに「今から帰る」とメッセージを送りたいんだけど、iOSのショートカットだと、メッセージ文面をいちいち入力する必要がある。そこで、LINEのメッセージ送信は、IFTTT に任せることにして、スマホでショートカットなり、ショートカットのオートメーションから、LINEメッセージ送信を起動したい。

また、IFTTTの JSON形式を返すWebhook trigger だと、safari が開いたままになるので、webhook trigger を起動し、x-callback-url を返す trigger ページを作ってみた。

<?php
// IFTTTのwebhookトリガを呼出す
//  x-callback-url の機能で呼び出し側(shortcut)に戻る

// ifttt webhook url
$ifttt_webhook = "https://maker.ifttt.com/trigger/%s/with/key/xxxxxxxxxxxxxxxxx_xxxxxx" ;
$mykey = "yyyyyyyyyyyyyyyyyyyyyy" ;

// パラメータを読み込む
$key = isset( $_GET[ "K" ] ) ? $_GET[ "K" ] : "" ;
$command = isset( $_GET[ "C" ] ) ? $_GET[ "C" ] : "" ;
$json = file_get_contents( "php:input" ) ;

// 想定外の接続は無視
if ( $_SERVER['HTTPS'] != 'on' || $key != $mykey )
    exit( 1 ) ;

// 時間によるwebhook呼出し制限の前処理
$localtime = localtime( time() , true ) ;
$l_hour = $localtime[ "tm_hour" ] ;
$l_week = $localtime[ "tm_wday" ] ;

// webhookの呼出し
function post_webhook( $trigger , $json ) {
    global $ifttt_webhook ;
    $url = sprintf( $ifttt_webhook , $trigger ) ;
    $opts = array(
        'http' => array(
            'method' => 'POST' ,
            'header' => 'Content-type: application/json; charset=UTF-8' ,
            'content' => $json ) ) ;
    $context = stream_context_create( $opts ) ;
    header( "Content-Type: application/json; charset=utf-8" ) ;
    // x-callback-urlで処理後はショートカットに戻す
    header( "Location: shortcuts://" ) ;
    // IFTTTのtriggerを呼出す
    print file_get_contents( $url , false , $context ) ;
}

// GETパラメータで呼び出しするwebhookを切り替え
if ( $command == "go_home" ) {
    // ショートカットからの呼出し用
    // go_homeリクエストを中継
    post_webhook( "go_home" , $json ) ;
} else if ( $command == "go_home_time" ) {
    // オートメーションからの呼出し用
    // 平日の帰宅時間のみ中継
    if ( 17 <= $l_hour && $l_hour < 21
         && 1 <= $l_week && $l_week <= 5 )
        post_webhook( "go_home" , $json ) ;
    else
        exit( 0 ) ;
} else {
    exit( 1 ) ;
}
header( "Content-Type: application/json; charset=utf-8" ) ;
?>

Google 検索

My Google   Yahoo

Microsoft

ファンサイト