Amazon Echoで時報する
- Amazon Echo Spot
まあ、定型アクションでやってあげればよいのだけど、
毎時分、登録するのもとてもうざいので、ラズパイで
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スプレッドシート
Raspberry Piでproxyサーバ
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
うちは未だADSLで困ってはいないが、やはり決して高速とは言えない。なので、少しでも快適に使えるようにと広告ブロックとキャッシュを試してみた。結論は、今はPrivoxyとDnsmasqだけでよいかな、という、顛末記。
Privoxy 3.0 + Squid 3.5 x Dnsmasq 2.76
目論見は、
まず、2. Squidでキャッシュで、つまづく。
(参考)ついでに、キャッシュ Proxy も設定する
$ 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がなくなっているのね。
# ↓ダウンロード先の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-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 → Privoxy → Squid → 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で、できることはほぼカバーされてるんじゃないか思われた。
PrivoxyもHTTPS 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 で鳴らないサウンド
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
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でログインループする
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
GUIのログイン画面でログインしようとしたところ、パスワード認証は成功するものの、デスクトップが表示されずに、再度ログイン画面が表示されてしまうという問題に遭遇しました。
おお、同じ症状だ。普段Raspberry Pi自体にはSSHでCUIなので、困っている訳ではないが、なんか気持ち悪い。もっかいクリーンインストールしかないかな、と思っていたら、参考にして解決できた。
lxsession
lxsessionのバイナリがなくなっていた事が原因でエラーになっていました。直前の作業で、パッケージをいくつか削除したので、その際に巻き込まれてしまったのかもしれません。
確かにその前に使えなかったパッケージをremoveしていて、まったく同じ巻き込まれ現象だったようで、
$ sudo apt install lxsession
で、見事に復旧。
昔のLinuxの印象は、一回壊れると自分のレベルではどうにもならない感じだったけど、考えてみたらマイクロアプリの集合体みたいなもんだろうから、再インストール繰り返してもクリーンなものなのかもしれない。
~/.Xauthority
こちらは最初に行きついた情報。今回、自分は確認したら'pi'のものだったので、これには当たらなかったのだが、このケースもあるのかもしれない。備忘録に。
`~/.Xauthority` の権限をlsコマンドなどで確認してもし`pi`以外のものだったら`pi`にしてログインし直しして直らないか.
$ sudo chown pi.pi ~pi/.Xauthority
RaspAPのメモ
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
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アクセスポイント
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
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