Amazon Echoで時報する

まあ、定型アクションでやってあげればよいのだけど、

毎時分、登録するのもとてもうざいので、ラズパイで

alexa-remote-control 0.20

を、cronすればいいじゃん!となった。

当初は、はりきって、Alexaのおしゃべりで「○時です」とか発話してもらってみたが、これはこれでさすがにうざいので、控えめなサウンドで十分ですね。ただし、alexa-remote-control で鳴らないサウンド - Azzologがあるので、注意。

cron

それではさっそくcrontabしてみたのだけど、寝てる時間も鳴ったらうざいから、8〜24時だけにする。、、、時間になっても、鳴らない。

〜24時

cronで8時から24時まで実行したい
「8-0」もしくは「8-24」のどちらでも構文エラーとなってしまい設定できません。

0,8-23
じゃダメですか?

あ。

ついでにcronについて、もひとつの勘違いごと。

23時台

もし、8:00~24:00の間で5分おき、というのであれば、
*/5 8-23 * * *
0 0 * * *

あー。。。
分 = * は、「23時まで」じゃなくて、「23時台」の意味だよね。

室内環境を可視化する

 

ラズパイで、一度はやってみたい電子工作♡

BME280使用 温湿度・気圧センサモジュールキット

でまあ、しばらく使っていたのだけれど、

Switchbot温湿度計 API v1.0

そういえばうちには買ってはみたものの、イマイチこれだけでは家電制御に使えなかったSwitchbot温湿度計があった。APIで取ってしまえば、ラズパイ周りはすっきりするなと。

 

Switchbotロックの自動解錠の際、API v1.1がリリースされているので書き換えた。

 

ただ、温湿度計だと、気圧は取れないのだよね。しかしながら考えてみると、気圧なんてものは別に室内屋外で大して変わることもない訳だ。であれば、

OpenWeatherMap Current Weather Data

 

CO2センサーモジュール MH-Z19C

室内換気のタイミングを教えてもらわないと、ついつい閉め切りっ放しにしてしまう。BME280と共存配線図がありがたかった。

しかしながら、Raspberry Pi OSをStretchにしたら、、、MESHハブアプリ用のRaspberry Piで、MH-Z19Cのデータが読み取れない - Azzolog

 

vcgencmd measure_temp

データが取れるなら、CPU温度も気になるところ。

取ってみたら、ものの見事に気温の変化と相関するのには驚いた。

 

Googleスプレッドシート

これくらいデータをかき集めたら、後はGoogleスプレッドシートに溜め込むべし。

Raspberry Piでproxyサーバ

うちは未だADSLで困ってはいないが、やはり決して高速とは言えない。なので、少しでも快適に使えるようにと広告ブロックとキャッシュを試してみた。結論は、今はPrivoxyとDnsmasqだけでよいかな、という、顛末記。

 

Privoxy 3.0 + Squid 3.5 x Dnsmasq 2.76

目論見は、

  1. Privoxyで広告ブロック
  2. Squidでキャッシュ
  3. DnsmasqでDNSキャッシュ

 

まず、2. Squidでキャッシュで、つまづく。

(参考)ついでに、キャッシュ Proxy も設定する

PrivoxySquid に変更。

$ sudo vi /etc/privoxy/config

forward-socks4a / 127.0.0.1:3128

forward-socks4 / 127.0.0.1:3128

forward-socks5 / 127.0.0.1:3128

が、うまく動かない。ずっとグルグルしてて、レスポンスをうまく処理できていない感じ。HTTPSをほどかないとダメなのか?

とりあえず#しておくが、これではSquidにはforwardされないはずだなあ。

 

次に、1. Privoxyで広告ブロックでも、つまずいた。

privoxy-blocklist.sh

adblockerの最新広告フィルタールールを適用

広告除去で老舗のadblockerのフィルタールールを、privoxy用に変換して使用する。

ALWというこちらのページの方が、なんとこの自動変換スクリプトを作ってくださっているので、こちらを拝借する。

とのことだが、残念ながらそうは問屋が卸さなかった。ググってみると、URLがなくなっているのね。

赤坂タロウの日記: Privoxyで広告ブロック

# ↓ダウンロード先のURLを修正。これをやっとかないと、オリジナルの adblockplus.mozdev.org は「host not found」となり、後の工程で一部のファイルが生成されなくなる(それなりに動きはするが)。要注意。

URLS=("https://easylist.github.io/easylist/easylist.txt" "https://easylist.github.io/easylist/easyprivacy.txt")

 

URLSを修正すると、doneするのだが、

この自動変換スクリプトが、privoxyの設定も自動的に行なってくれるという、痒いところに手が届く素晴らしさ。

までは、やっぱりやってくれてないみたいで。

 

シェルスクリプトのどこかを直さないといけないのか、調べてみるか?と考えていたが、続けて読んでいくと、

privoxy-adblock

4.YouTubeなどの日本独自広告の除去

で、生成元のeasylistも読んでくれてそうだから、privoxy-blocklist.shはrmすることにする。

 

心を新たに続けていくと、

# リスト更新サイトを、環境変数で、渡さねばならない、との事(↓)

$ sudo bash privoxy-adblock.sh -p /etc/privoxy -u http://tofukko.r.ribbon.to/Adblock_Plus_list.txt -u https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt

との事だが、tofukko.r.ribbon.to/Adblock_Plus_list.txtはcannot be foundで、GitHubに引っ越してるみたいで、これも変えておく。

https://raw.githubusercontent.com/tofukko/filter/master/Adblock_Plus_list.txt

 

これでうまく行った。ということで、privoxy-adblockをcrotab -e。

 

ここでひとまず終わりなのだが、中途半端な気もしたので、他にも使えるものがないかと探してみたところ、

Privoxy 3.0 + Ziproxy 3.3 + Squid 3.5

3・Ziproxyとは?
名前の通り、Zipするproxyです。

HTTPでは通信をgzip圧縮することが出来、HTMLやCSSなどの場合は、CPUを少し使ってでも圧縮して流した方が効率がよくなります。
サーバ側とクライアント側がどちらも対応していれば利用できるので、通信量を削減とレスポンス時間の低減をしたい時に使用すると効果があります。

なるほど。

 

参考にして先の

PC → PrivoxySquid → Internet

から、

PC → Squid → Ziproxy → Privoxy → Internet

に構成変更してやると、これは多段プロキシもうまく動いたようだ。(Privoxy → Suquidは#してるので、コンフィグは元のまま)

 

せっかく導入したZiproxy、さらに圧縮できる設定がないかとググると、

圧縮Proxy(Ziproxy)活用によるインターネット回線高速化

ProcessToJP2 = true
# このオプションはぜひ「true」にしよう。jpegの後継規格であるjpeg2000へ画像を再圧縮する。

とのことなのだが、これはまたエラーになる。うまくいかないものだ。

 

そしてtail -fでaccess.logを流していて気がついたのだが、HTTPS通信についてSquidでCONNECTした後、どうもZiproxy(圧縮)とPrivoxy(広告ブロック)がスルーされてる気がする。

広告ブロックを活かすためにはPrivoxyを最初に持ってくればよいのだが、それではforward-が機能しないとまたグルグルである。ハマる。

 

うーん、、、やっぱりSSLをほどくしかないのか?ということで、ついに、

Squid 3.5 + SSL Bump

に、手を出してみたのだが、ビルドエラーが解消できず。。出直してきます。

 

そんなこんなで今のところを考えると、SSLをほどかないことにはサーバレベルのブロックのみで、一方でほとんどのサイトがHTTPSになっていることを考えると、PrivoxyとDnsmasqで、できることはほぼカバーされてるんじゃないか思われた。

 

PrivoxyHTTPS Inspectionに試験的に対応しているそうで、機能テストされてた方がいたので参考にしてみてたが、そこまで効果も見込めないというか、まあそれなりにブロックできていれば十分かもしれない。

Privoxy が HTTPS Inspection に対応したので試してみた | KUSONEKOの見る世界

 

ということで、最後にSquidとZiproxyをremove。

 

でも最後に、キャッシュ機能もないよりはマシかも、と思って、Squidよりお手軽なものも一応漁ってみた。

Polipo 1.1.1

軽量お手軽でキャッシュ機能付きなら、入れておいてもいいか、とも、思ったのだが、

Polipo is no longer maintained

Since then, the web has changed, and HTTP proxies are no longer useful: most traffic is encrypted, and a web proxy merely acts as a dumb intermediary for encrypted traffic.

確かに最近はほとんどHTTPSなので、これもremove。

alexa-remote-control で鳴らないサウンド

alexa-remote-control 0.20

2段階認証を設定している場合は、設定画面で「新しい認証アプリを追加」から「バーコードをスキャンできませんか?」をクリックして表示される52文字のキーを入力します。

 

できたできたと思って、

alexa-remote-control -e sound:<soundeffect_name>

しても、鳴らないサウンドがある。というか、結構どれも鳴らない。

 

おかしいなあと思ってググってみたところ、

指定するサウンド名は、以下のページ、とよく紹介されているのですが、すべてが鳴るわけではありません。

https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html

実際に鳴らせるサウンドは以下のページにありますが、上記ページのごく一部のようです。

Known available sounds: の箇所の Click to expand をクリックすると表示されます。

https://github.com/custom-components/alexa_media_player/wiki#known-available-sounds

とのこと。ふーむ。。

Raspberry Piでログインループする

 

GUIのログイン画面でログインしようとしたところ、パスワード認証は成功するものの、デスクトップが表示されずに、再度ログイン画面が表示されてしまうという問題に遭遇しました。

おお、同じ症状だ。普段Raspberry Pi自体にはSSHCUIなので、困っている訳ではないが、なんか気持ち悪い。もっかいクリーンインストールしかないかな、と思っていたら、参考にして解決できた。

 

lxsession

lxsessionのバイナリがなくなっていた事が原因でエラーになっていました。直前の作業で、パッケージをいくつか削除したので、その際に巻き込まれてしまったのかもしれません。

確かにその前に使えなかったパッケージをremoveしていて、まったく同じ巻き込まれ現象だったようで、

$ sudo apt install lxsession

で、見事に復旧。

 

昔のLinuxの印象は、一回壊れると自分のレベルではどうにもならない感じだったけど、考えてみたらマイクロアプリの集合体みたいなもんだろうから、再インストール繰り返してもクリーンなものなのかもしれない。

 

~/.Xauthority

こちらは最初に行きついた情報。今回、自分は確認したら'pi'のものだったので、これには当たらなかったのだが、このケースもあるのかもしれない。備忘録に。

`~/.Xauthority` の権限をlsコマンドなどで確認してもし`pi`以外のものだったら`pi`にしてログインし直しして直らないか.

$ sudo chown pi.pi ~pi/.Xauthority

RaspAPのメモ

RaspAP 2.8.6

 

Ad blocking

Ad blocking is enabled and active for clients connected to your AP.

なのだが、イマイチ適用されてない気がするので設定を確認してみる。

 

Manual installationのAd blockingを見てみると、

sudo cp /tmp/hostnames.txt /etc/raspap/adblock

sudo cp /tmp/domains.txt /etc/raspap/adblock

と書いているので、/etc/raspap/adblock/を見てみると、ちゃんとhostnames.txtとdomains.txtはある。

 

RaspAPのAd Blocking管理画面に、

This option adds conf-file and addn-hosts to the dnsmasq configuration.

と書いてあるので、/etc/dnsmasq.confを見てみるが、どうもそれらしい記述がないので、

conf-file=/etc/raspap/adblock/domains.txt

addn-hosts=/etc/raspap/adblock/hostnames.txt

を書き足しておく。

 

でまあ、FAQを参照すると、

Can I automatically update RaspAP's adblock lists?

In a typical setup, you may use the Ad blocking management page to manually update these lists. Alternatively, this user-contributed script will automatically fetch the latest blocklists on the schedule of your choosing (for example, daily, weekly, etc.) and reload dnsmasq. Credit to DanielLester83.

とのことなので、自動化するのに

Automated Adblock Updates

を使わせてもらって少し修正、crontab -e。

  • # sleep $(shuf -i 0-3600 -n1) #0-3600の範囲からシャッフルした1つめを取り出して待機はしなくてよいかな
  • service dnsmasq reload > /bin/systemctl restart dnsmasq #serviceとsystemctlには違いがあるのだろうが、systemctlを使うようにしている

 

ところでRaspAPのad blockingはdnsmasqのホストベース、ドメインベースの機能と分かった。であるならば、自動化してしまうとRaspAPでやる必要は必ずしもない訳で、他もそうならいっそのことと、

How do I uninstall RaspAP?

cd /var/www/html

sudo installers/uninstall.sh

途中systemctl disableができないとエラーが出たが、すでに止めてあるのでshから#してdone

Raspberry PiでWi-fiアクセスポイント

RaspAP 2.8.6

をインストールして、後はブラウザでかちゃかちゃやるのが楽チン。

 

なのだけど、できるだけミニマリストにやるなら、

hostapd 2.6 + Dnsmasq 2.76

だけでも動く。

hostapd 2.6

インストールしたらhostapdの設定をしていきます。

設定ファイルのパラメータ詳細は、hostapd.conf 覚書 - Qiitaを参照してチューニング。

 

パスフレーズは暗号化しておくかな。その際は、

wpa_passphrase=******

ではなく、

wpa_psk=******

に書くべし。

 

暗号化パスフレーズを得るのによく紹介される、

$wpa_passphrase SSID PASSPHRASE

だが、「コマンドが見つかりません」と怒られたのは、このコマンドがwpa_supplicantパッケージに含まれているからのようだ。

$sudo apt install wpasupplicant

…アンダーバーがないのが分かりづらい。

 

無線LANにWPAで接続するには? wpa_supplicantコマンド:ネットワーク管理の基本Tips - @IT

無線LANアクセスポイントにWPA(Wi-Fi Protected Access)で接続要求を行う「wpa_supplicant」

の他にお手軽な暗号化方法はないものか。

 

Dnsmasq 2.76

dnsmasqは小規模ネットワークで利用するDNSサーバ機能を持つアプリです。

と言いつつ、DHCPサーバとして設定するだけでは何なので、軽くこちらを参照させていただいて、もう少しDNSサーバっぽくなっていただく。

 

Make dnsmasq ad-block list

それからこちらを使わせていただいて、DNSフィルタリングで広告ブロックも導入しておく。

iptables

ところで、

最後に、上記のコマンドがラズパイが起動する際に実行されるように「rc.logal」のファイルを編集します。

については、いくつか流派があるらしい。ここで紹介されてるのは、iptables-save + rc.local派ということか。

まず保存の観点で分類すると、以下の2通りある。

1. 【シェルスクリプト派】
2. 【iptables-save派】iptables-save / iptables-restore

次にリストアの観点で分類すると、以下の4通りある。

1. 【cron派】@reboot
2. 【rc.local派】/etc/rc.local
3. 【if-pre-up.d派】/etc/network/if-pre-up.d/
4. 【systemd派】iptables-persistent / netfilter-persistent

iptables-save + systemd派ということで、

$ sudo apt install iptables-persistent