Raspberry Pi Zero W: Difference between revisions

 
(171 intermediate revisions by the same user not shown)
Line 43: Line 43:
::ホスト名は必要なら変更
::ホスト名は必要なら変更
::ロケーション、特に '''I4 Change Wi-fi Country''' は '''JP''' にする事。技適に関わる。
::ロケーション、特に '''I4 Change Wi-fi Country''' は '''JP''' にする事。技適に関わる。
:::CLI でのみ使うので、ロケールは ja_JP にはしたくないので、といって en_US もどっちでもいいので 女王陛下に敬意を評して GB のままにしておく;)
:::CLI でのみ使うので、ロケールは ja_JP にはしたくない。とはいってもわざわざ en_US する必要も無いので 女王陛下に敬意を評して GB のままにしておく;)
:::Serial Console や SSH でしか触らないので keyboard layout は気にしない。
:::Serial Console や SSH でしか触らないので keyboard layout は気にしない。
:::時刻はUTCではしんどいのでローカルタイム JST-9 にする。
:::時刻は UTC ではしんどいのでローカルタイム JST-9 にする。もちろん hardware clock は UTC のまま。
::インターフェースは必要な物を有効にする。たぶん SPI, I2C, {Serial は、すでに設定済みのはず} ぐらい。
::インターフェースは必要な物を有効にする。たぶん SPI, I2C, {Serial は、すでに設定済みのはず} ぐらい。
:[https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config github raspi-config]
:[https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config github raspi-config]


== WiFi Settings ==
WPA2-PSK:AES
<syntaxhighlight lang="bash" enclose="div">
wpa_passphrase "YOUR_SSID" "YOUR_ACCESS_KEY"
</syntaxhighlight>
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
<syntaxhighlight lang="text" enclose="div">
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="YOUR_SSID"
    psk=HASH(256-bit pre-shared WPA key generated by wpa_passphrase utility)
    scan_ssid=0
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    group=CCMP
}
</syntaxhighlight>
:電波法を遵守するために "country=JP" は忘れずに
wpa-supplicant が自動的に wlan0 を UP する。もし UP しなければ下記のコマンドを使う
<syntaxhighlight lang="bash" enclose="div">
sudo wpa_cli reconfigure
</syntaxhighlight>
== OS Settings ==
パッケージの更新
パッケージの更新
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
Line 88: Line 119:
</syntaxhighlight>
</syntaxhighlight>


おまけ : 最低限の初期設定をコマンドラインで実行するには
おまけ : (ネットワークが無い環境で)最低限の初期設定をコマンドラインで実行するには
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
passwd
passwd
Line 95: Line 126:
sudo systemctl restart rsyslog
sudo systemctl restart rsyslog
sudo systemctl restart cron
sudo systemctl restart cron
sudo apt-get update
sudo apt-get -y upgrade
sudo sed -i --follow-symlinks "s/^country=.*/country=JP/g" /etc/wpa_supplicant/wpa_supplicant.conf
sudo sed -i --follow-symlinks "s/^country=.*/country=JP/g" /etc/wpa_supplicant/wpa_supplicant.conf
sudo rm /etc/ssh/ssh_host_* && sudo dpkg-reconfigure openssh-server
sudo rm /etc/ssh/ssh_host_* && sudo dpkg-reconfigure openssh-server
sudo shutdown -r now
sudo shutdown -r now
</syntaxhighlight>
</syntaxhighlight>
= UART =
Zero W の UART は BROADCOM BCM2835 SoC に実装されている PL011 と mini-UART がある。
PL011 は ARM core 実装の UART。 mini-UART は低スループットの第2番目の UART という位置付け。
[https://www.raspberrypi.org/documentation/configuration/uart.md The Raspberry Pi UARTs]
<syntaxhighlight lang="text" enclose="div">
uart-pl011 (PL011)
bcm2835-aux-uart (mini UART)
</syntaxhighlight>
= Over Clock =
<syntaxhighlight lang="text" enclose="div">
bcm2835-cpufreq: min=700000 max=1000000
</syntaxhighlight>
<syntaxhighlight lang="bash" enclose="div">
pi@raspberrypi:/boot $ vcgencmd measure_clock arm
frequency(45)=700000000
</syntaxhighlight>
Zero W で Over Clock が出来るか試してみた。raspi-config では "This Pi cannot be overclocked." と弾かれる。
/boot/config.txt で
<syntaxhighlight lang="text" enclose="div">
arm_freq=1000
</syntaxhighlight>
としてみたが変化なし。 Zero W では Over Clock はできないっぽい。
おおぉ
<syntaxhighlight lang="bash" enclose="div">
pi@raspberrypi:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1000000
  |
pi@raspberrypi:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
700000
</syntaxhighlight>
なるほど 動的に変更してるようだ。
デフォルトが
<syntaxhighlight lang="text" enclose="div">
arm_freq=1000
</syntaxhighlight>
だった。
[https://www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md config.txt - Overclocking options]
<syntaxhighlight lang="text" enclose="div">
force_turbo=1
</syntaxhighlight>
にしたら常時 1GHz になるとおもわれるが無駄なので標準のままにする。逆に arm_freq_min を下げてもいいぐらいだ。


= Devise Tree =
= Devise Tree =
Line 130: Line 211:
:MAKEDEV のエラーは無視してよい /dev/i2c-1 がすでにあるはず。
:MAKEDEV のエラーは無視してよい /dev/i2c-1 がすでにあるはず。


= WiFi Settings =
WPA2-PSK:AES
<syntaxhighlight lang="bash" enclose="div">
wpa_passphrase "YOUR_SSID" "YOUR_ACCESS_KEY"
</syntaxhighlight>
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
<syntaxhighlight lang="text" enclose="div">
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="YOUR_SSID"
    psk=HASH(256-bit pre-shared WPA key generated by wpa_passphrase utility)
    scan_ssid=0
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    group=CCMP
}
</syntaxhighlight>
:電波法を遵守するために "country=JP" は忘れずに
wpa-supplicant が自動的に wlan0 を UP する。もし UP しなければ下記のコマンドを使う
<syntaxhighlight lang="bash" enclose="div">
sudo wpa_cli reconfigure
</syntaxhighlight>


= CPU Temperature =
= CPU Temperature =
Line 182: Line 234:
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
cd /opt
cd /opt
sudo wget https://nodejs.org/dist/v6.11.2/node-v6.11.2-linux-armv6l.tar.xz
sudo wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-armv6l.tar.xz
sudo tar xfJ node-v6.11.2-linux-armv6l.tar.xz
sudo tar xfJ node-v10.16.0-linux-armv6l.tar.xz
sudo ln -s /opt/node-v6.11.2-linux-armv6l /opt/node
sudo chown -R root: node-v10.16.0-linux-armv6l
sudo ln -s /opt/node-v10.16.0-linux-armv6l /opt/node
sudo ln -s /opt/node/bin/* /usr/bin/
sudo ln -s /opt/node/bin/* /usr/bin/
sudo ln -s /opt/node/include/* /usr/include/
sudo ln -s /opt/node/include/* /usr/include/
Line 194: Line 247:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
sudo aptitude -y install libavahi-compat-libdnssd-dev
sudo npm install -g --unsafe-perm homebridge
sudo npm install -g --unsafe-perm homebridge
sudo npm install -g homebridge-cmdswitch2
sudo npm install -g --unsafe-perm homebridge-config-ui-x
</syntaxhighlight>
</syntaxhighlight>
'''libavahi-compat-libdnssd-dev'''は不要になった。(node.js module が mdns から bonjour-hap に変わった)


[http://www.omiya-giken.com/?page_id=837 irMagician] 買うぞ!
n
<syntaxhighlight lang="bash" enclose="div">
n list
n lts
systemctl stop homebridge
n prune
systemctl start homebridge
</syntaxhighlight>
 
= HomeBridge with iOS11 =
 
 
[https://github.com/nfarina/homebridge/issues/1501 Not working with IOS11]
 
* Upgrade homebridge to newest version: npm install -g homebridge
* Stop homebridge service
* rm -rf ~/.homebridge/persist
* rm -rf ~/.homebridge/accessories
* Under ~/.homebridge/config.json, change your "username": "11:22:33:44:55:66" to something else
* Start homebridge service
* Delete homebridge accessory from home app
* Add homebridge accessory to home app and enter pin etc
 
 
= HomeBridge, HomeKit, Home Hub, Apple TV =
Multicast 攻撃で、自宅のホームルータが死ぬ。ルータ再起動で復活はする。Apple AirMac にするのがよさそう。原因がうっすら判明。
 
IGMP 系が関連ありそうなので調べた結果、家の環境では、IGMP querier (IGMP クエリア機能) を投げる機器がないのが問題らしい。
https://bitbucket.org/marc_culler/querierd/
 
この設定で様子を見る。今の所問題なし。解決といっていい。
 
 
あとは
<syntaxhighlight lang="text" enclose="div">
net.ipv4.icmp_echo_ignore_broadcasts=0
</syntaxhighlight>
これは必要らしい。
:セキュリティ的には DoS の可能性があるのだが許容した。
 
 
= Home.app で頻繁に "Apple TVが応答しません。" がでる =
 
Raspiで wlan0 のパワーセービング機能をオフになっていることを確認。
<syntaxhighlight lang="bash" enclose="div">
sudo iw wlan0 set power_save off
</syntaxhighlight>
 
brcmfmac: power management disabled
:boot 時にメッセージが出ていたらOK
 
 
結局、いろいろ考察した結果、Apple TV の Home hub と iCloud のコネクションが落ちているのが原因ぽいので、デバイスの状態を iCloud に通知すればイケるかもしれないで、(ダミーの) device の'''状態を変化させて'''定期的に送信する処理を homebridge-cmdswitch2 の polling 機能で実装した。
以前よりはマシになった(気がする)が、やはり「応答しません」は出る。
 
<syntaxhighlight lang="text" enclose="div">
        {
            "name": "DUMMY-STATUS",
            "on_cmd": "/bin/true",
            "off_cmd": "/bin/true",
            "state_cmd": "/usr/local/bin/status-toggle.sh",
            "polling": true,
            "interval": 600
        }
</syntaxhighlight>
 
 
ステータスをトグルさせて返すスクリプト (/usr/local/bin/status-toggle.sh)
<syntaxhighlight lang="bash" enclose="div">
#!/bin/bash
 
LOCKFILE=/tmp/status-toggle.lock
STATUSFILE=/tmp/status-toggle.dat
 
(
    flock -n 201 || exit 1
 
    status=$((`cat ${STATUSFILE}`==0))
    echo ${status} > ${STATUSFILE}
    exit ${status}
 
) 201>"${LOCKFILE}"
</syntaxhighlight>
 
"Apple TVが応答しません。" の場合に mDNS でサービスをブラウズしたら、IP address が IPv6 を返していた。これが怪しい。当面定期的の AppleTV の IP に IPv4 アドレスで定期的に arp + icmp を送って様子みる。
 
"Apple TVが応答しません。" 問題は解決不能として諦める。
 
 
Raspberry Pi 3 B+ に変えて、有線接続にしたら解消しました。まーそーだろーなー
 
= disable IPv6 =
業界的にはよろしくないが、IPv6 を殺した。インターネットの接続先プロバイダーが IPv4 Only なので...
 
/boot/cmdline.txt に追加
<syntaxhighlight lang="text" enclose="div">
ipv6.disable=1
</syntaxhighlight>
 
パラノイアならw
 
/etc/sysctl.conf
<syntaxhighlight lang="text" enclose="div">
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.wlan0.disable_ipv6=1
</syntaxhighlight>
 
/etc/modprobe.d/ipv6.conf
<syntaxhighlight lang="text" enclose="div">
alias net-pf-10 off
alias ipv6 off
options ipv6 disable_ipv6=1
blacklist ipv6
</syntaxhighlight>
 
= irMagician =
[http://www.omiya-giken.com/?page_id=837 irMagician] 買うぞ!。。。買った :)


  [http://www.omiya-giken.com/?page_id=2100 irMagicianをSiriから使う | 大宮技研 合同会社]
  [http://www.omiya-giken.com/?page_id=2100 irMagicianをSiriから使う | 大宮技研 合同会社]
[https://itdecoboconikki.com/2017/05/01/raspberry-pi-irmagician/ raspberry piとirMagicianを使って赤外線で家電を操作]
[http://qiita.com/PonDad/items/a17d8b7d0be59f4c7f18 iOS10「ホーム」アプリと「Raspberry Pi + irMagician」でお手軽家電操作。]
[http://yosuke403.hatenablog.com/entry/2017/01/07/220619 irMagician + Raspberry Pi + HomeKitで家電を遠隔&音声制御する - YSNHatenaBlog]
[http://netbuffalo.doorblog.jp/archives/4872290.html 小型赤外線(IR)リモコン irMagician ファースト・インプレッション]
[https://pondad.net/iot/2016/09/10/siri-irmagician.html Siriさんに電気をつけてもらう。 - ポンダッドの日記]
[http://www.omiya-giken.com/?page_id=1344 赤外線リモコンデータ | 大宮技研 合同会社]
[http://blog.maripara.org/entry/2017/02/14/012619 赤外線リモコン irMagician を組み立てました - まりぱらおーぐ]
ダイキンのエアコンの操作は単純には成功しなかった。(リモコン型番 ARC446A3)
[http://blog.fchiba.net/archives/172484.html Raspberry Piでエアコンを操作できる赤外線リモコンを作った]
:ここ↑が一番役にたった。
<syntaxhighlight lang="text" enclose="div">
1) “bit 0”×5回+ストップ信号+ギャップスペース
2) リーダー信号+データ信号(64bit)+ストップ信号+ギャップスペース
3) リーダー信号+データ信号(64bit)+ストップ信号+ギャップスペース
4) リーダー信号+データ信号(152bit)+ストップ信号
</syntaxhighlight>
どうも 2, 3 のストップ信号のあとの長いギャップ(赤外線を照射していない部分)が正しくキャプチャーできていないようだ。その部分を修正したら動くようになる。
どうもキャプチャーで桁あふれか変換ミスをしてるっぽい。いろいろ調べた結果 unsigned char に収まらないのが原因。オーバーフローしてもエラーとして扱っていないのでわからないのも問題。
K (Set Post scaler) を 255 に設定してから キャプチャー すれば ダイキン エアコン の問題点はクリアできた。
[http://akizukidenshi.com/download/k4174_format.pdf ■家電協フォーマット■]
HomeKit の Home Hub としての Apple TV が欲しくなってきた...
[https://github.com/zasf/IRdaikinARC466 https://github.com/zasf/IRdaikinARC466]
[http://www.mcmajan.com/mcmajanwpr/blog/2013/10/21/ir-daikin-decodificare-protocolli-infrarossi-complessi/ IR Daikin: decodificare protocolli infrarossi complessi. | McMajan]
:フォーマットがわかってきたので発見できた情報
homebridge-cmd 等で呼び出す場合は、ちゃんと排他処理しましょう。
次は [https://github.com/luisiam/homebridge-cmdswitch2 homebridge-cmdswitch2] というのを試そう。
:homebridge-cmdswitch2 の方が出来が良いので書き換えた。


= FileBeat =
= FileBeat =
Line 207: Line 421:
本家スタティックリンク版発見
本家スタティックリンク版発見
  [https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/ https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/]
  [https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/ https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/]
:filebeat-linux-arm がそれだが、完全に head の build だった
:filebeat-linux-arm がそれだが、完全に HEAD の build だった
  INFO Setup Beat: filebeat; Version: 7.0.0-alpha1-git23d9fe6
  INFO Setup Beat: filebeat; Version: 7.0.0-alpha1-git23d9fe6
:動いてはいる ;)
:動いてはいる ;)
Line 252: Line 466:
Thu 10 Aug 2017 09:33:36 JST  -0.290283 seconds
Thu 10 Aug 2017 09:33:36 JST  -0.290283 seconds
</syntaxhighlight>
</syntaxhighlight>
= AirPlay =
[https://github.com/mikebrady/shairport-sync https://github.com/mikebrady/shairport-sync]
= AirPlay video streaming =
[https://osmc.tv/ https://osmc.tv/]
iOS10 ではダメだそうだ (中古の AppleTV 買うか...)
= HDMI & CEC =
consoleblank=0
echo "scan" | cec-client -d 1 -s
http://www.cec-o-matic.com/
cec-client -m -d 8 -b -r
= 純正ケース問題 =
純正ケースをつかっていると、コネクター類が深くささらない。どうも掃除とかで意図せずうごかして HDMI-CEC の信号が突然来なくなる事象がふえたので、結局これを買った。(在庫切れかもしれず)
https://www.amazon.co.jp/Goliton%C2%AE-FPV-HDTV%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AB%E3%83%A1%E3%83%A9%E7%A9%BA%E4%B8%AD%E6%92%AE%E5%BD%B1%E7%94%A8-20cm-%E3%83%95%E3%83%A9%E3%83%83%E3%83%88%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-%E4%B8%8A%E5%90%91%E3%81%8D-90%E5%BA%A6-FPV-Mini-FPC-%E5%A4%89%E6%8F%9B%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB/dp/B075GT2MGJ
この L 型コネクターはしっかりささる。ボッタクリの値段がついたのももあるので注意すること。千円前後ならOK
= らずぱい怪談 =
誰もいない部屋のテレビがついた。しかも入力切替までしてラズパイの画面が出ていた...
<syntaxhighlight lang="text" enclose="div">
hdmi_ignore_cec_init=1
</syntaxhighlight>
:この呪文を /boot/config.txt に書くと治るらしいwww
この機能があるなら、IR 経由でなくても homebridge で TV がコントロールできそうだ。
<syntaxhighlight lang="bash" enclose="div">
sudo apt-get install cec-utils
</syntaxhighlight>
homebridge-cec-accessory, homebridge-cec, homebridge-platform-cec, homebridge-hdmi 等
[http://tsaitoh.net/~t-saitoh/mt/2016/11/cec-client-homebridge.php cec-clientをhomebridgeから制御 - T-Saitoh's Diary]
[https://www.npmjs.com/package/homebridge-cec-accessory homebridge-cec-accessory]
:これを使ってみる
::[http://libcec.pulse-eight.com/Vendor/Support メーカーにより使える機能に制限がある]のでけっしてバラ色ではない。
= Raspbian Jessie to Raspbian 9 Stretch =
[https://www.raspberrypi.org/blog/raspbian-stretch/ Raspbian Stretch has arrived for Raspberry Pi]
なぬ。メジャーバージョンアップだ。すでにラズパイの download page も新しいのを推してる
[https://linuxconfig.org/raspbian-gnu-linux-upgrade-from-jessie-to-raspbian-stretch-9 Raspbian GNU/Linux upgrade from Jessie to Raspbian Stretch 9]
[https://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html 第4章 Debian 8 (jessie) からのアップグレード]
/etc/network/interfaces
<syntaxhighlight lang="diff" enclose="div">
--- interfaces.dpkg-old 2017-07-05 19:55:26.182496782 +0900
+++ interfaces 2017-09-01 22:30:58.645695819 +0900
@@ -5,16 +5,3 @@
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
-
-auto lo
-iface lo inet loopback
-
-iface eth0 inet manual
-
-allow-hotplug wlan0
-iface wlan0 inet manual
-    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
-
-allow-hotplug wlan1
-iface wlan1 inet manual
-    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
</syntaxhighlight>
かといって /etc/network/interfaces.d/ には何もない。