alexa-remote-controlをREFRESH_TOKENで
- Raspberry Pi 3B+
- Raspberry Pi OS Bullseye with Desktop (GUI)
alexa-remote-control 0.20
Amazon Echoで時報する - Azzologに使っているalexa-remote-controlが、2月の頭ごろから動かなくなっていたようだ。ちょうどADSLのサービス終了でバタバタしたのと重なって、なかなか気づけなかったのだが、どうやらalexa.amazom.co.jpの認証が変わった(Old optionが使えなくなった)っぽい。 New option REFRESH_TOKENに切り替えることにする。
The Alexa-App way of logging in is using a REFRESH_TOKEN which allows for obtaining the session cookies.
REFRESH_TOKENを取得するのに alexa-cookie-cliを使わせてもらうので、まず、JavaScript実行環境を確認しておこう。
Node.js
なるほど。
$ sudo apt install nodejs $ sudo apt install npm
そしてalexa-cookie-cliは、alexa-cookieのラッパーなので、パッケージで2つインストールしておく。
$ npm install alexa-cookie2@4.1.3 $ npm install commander@8.2.0
バージョンが違うと、うまくREFRESH_TOKENを返してくれない。指定しておくべし。自分の場合は、commanderのバージョンが違っていた。
アレクサでインターホンの通知をする - Qiita
がこのままだと失敗する。おそらく、利用している alexa-cookie2のバージョンが古い(4.0.1)ためだと思われる
用意ができたところで、
Raspberry Piを有線ネットワークからのWi-fiルータにする
- Raspberry Pi 3B+
- Raspberry Pi OS Bullseye with Desktop (GUI)
Raspberry PiでWi-fiアクセスポイント - Azzologの逆バージョン。
ADSLが突然サービス終了し、しばらくテザリングでネットワーク環境をごまかすことにした。とは言え、ごまかしてる間だけ、すべてのデバイスのWi-fi設定を変更するのは面倒である。お役御免になっていたホテルWi-fiを活用して、今と同じWi-fi環境を作り、そこからラズパイを経由してテザリングすることを思いついた。つまりはラズパイのルータ利用である。
ちなみにStretchはwpa_supplicantをアンインストールしてしまっており、Wi-fiクライアントにしようと思うとイッターネットにつないで、再インストールしないといけないといけないという、本末転倒な状況になってしまったので、クリーンなBullseyeで。
エレコム WRH-150x
動作モード
「アクセスポイントモード」では、WAN設定画面が表示されず、WAN側のEthenetポートはDHCPクライアントとなって、DHCPサーバがないとIPアドレスは振られない。LAN側と同じアドレス空間でラズパイのeth0を固定IPアドレスにすればよいかと思ったが、そうは問屋が卸さなかった。どうやらラズパイ側からの行き先が分からなくて、ロストしてるようだ。
「ルータモード」を選択してLAN側のWi-fiネットワークと、WAN側のEthernetネットワークをそれぞれ作ることにする。
WAN設定
「固定IP」を設定する。ラズパイでDHCPサーバを立ててもよいのだが、ポイントtoポイントでわざわざそこまでする必要もない。デフォルトゲートウェイとDNSはラズパイのeth0へ向ける。
iPhone / iPadからSambaできないとき
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
iPhone 12 / iPad mini (第6世代)
ラズパイもCUIに慣れてしまった。たまにイッターネットからファイルをダウンロードするのは、ブラウザで探す方が楽なので、iPhone / iPadでダウンロードしたファイルをラズパイへファイル共有できるようにしておこうと思う。となると、ラズパイをファイルサーバにして、iOSのファイルアプリから共有するのが手っ取り早いだろう。
Samba
おっと。
操作を完了できませんでした 属性が見つかりません
iOS14.5.1からの仕様で外部ファイルシステムにはそのままでは保存出来なくなっている。
やり方は以下の通り。
1. samba-vfs-moduelsの追加
sudo apt-get install samba-vfs-modules
2. /etc/samba/smb.confの[global]項目に以下を追加
fruit:nfs_aces = no
fruit:aapl = yes
vfs objects = catia fruit streams_xattr
3. smbd/nmbdの再起動
sudo /etc/init.d/smbd restart
sudo /etc/init.d/nmbd restart
壊れたLinkstationのHDDからデータ救出できた話
- Raspberry Pi 3B+
とても長らくお世話になってきたNAS、Linkstation LS-CH500Lも、いよいよステータスランプが赤色点滅したのはずいぶん前のこと。幸いコントローラーの障害のみで、HDDだけ抜き取ってラズパイにUSB接続したら、データは無事だった。ラッキーである。
Linkstation LS-CH500L
分解してHDDを抜き出す。SATA接続の3.5インチ。
SATAについて、軽く振り返る。なるほど。
シリアルATAとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
apt install xfsprogs
Linkstation LS-CH500Lのファイルシステムは、XFSとのこと。
Raspberry Piのファイルシステムは、ext4。なのだが、
コマンド一つでOKです
$sudo apt install xfsprogs
ダメならもうあきらめようと思いつつ、外付けHDDケースに入れてラズパイにつないでみると…はい、フツーにアクセスできたのでした。
ファイルシステムについても、軽く振り返る。なるほどなるほど。
【ざっくり概要】Linuxファイルシステムの種類や作成方法まとめ!
家に帰るとSwitchbotロックを自動解錠
せっかくのスマートロックだから、家に近づいたら勝手に鍵を開けてくれるといいなと思う。しかしながら、SwitchbotロックはIFTTTでは鍵を開閉したりはできないようだ。
MQTTブローカーをかませて、流れは以下の通り。
- IFTTで位置情報をトリガーに、BeebotteにWebhook
- BeebotteがPublish
- ラズパイでSubscribe
- ラズパイでSwitchbot APIを操作して解錠
IFTTT + Beebotte
IFTTTのトリガーをロケーションに変更する。
systemd
デーモン化する。
mh-z19 sensor PWM Cons : Slow, in about 1 second necessary to get data.
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
- CO2センサーモジュール MH-Z19C
センサー情報から室内環境のロギングや、アクションを実行するのに、いくつかシェルスクリプトやPythonプログラムを用意してcronしている。ところが先日、思い立って重畳なプログラムを書き直したあたりからか、ところどころログが記録されなくなってきた。とうやら処理時間が短縮されて、プロセスが競合してしまうようになったんじゃないかと思う。いいんだか、わるいんだか。
/var/log/cron
まず、cronのログを確認しようと思ったが、
【Linux】/var/log/cron.logが存在しない場合 - (O+P)ut
syslogの設定ファイルは/etc/rsyslog.confに存在しているので、cronに関する記載有無を確認します。
デフォルトで以下のようにコメントアウトされている
#cron.*
コメントアウトをはずして、有効にする。
rsislog?と思ったら、今はreliable syslog = rsyslogらしい。よくsyslogと言うけれど。
rsyslogとsyslogの違い - Qiita
古いのがsyslogで新しいのがrsyslog
それと、よくわからないから、できるだけ多くログがほしい。
cronのログを確認する方法 | Armadillo
cronのログを有効にするには /etc/default/cronファイルのEXTRA_OPTSを設定します。
※ここでは例として、すべてのログを有効にするEXTRA_OPTS='-L 15'とします。
しばらくログを取ってみると、ところどころ
(pi) CMD ([***] /use/bin/python3 ***.py) (CRON) error (grandchild #*** failed with exit status 1) (pi) END ([***] /use/bin/python3 ***.py)
と、ある。どうやらこの.pyが失敗しているようなのだが、普通に実行すると、普通に完了する。
しばし黙考。cronは一気に同時プロセスする。同じタイミングでcronしている別の.pyは、普通にCMD - ENDしているようだ。共通しているのは、CO2濃度を取りに行く動作かなと。おそらく、競合してしまうのではないだろうか。
Python 3.5
例外処理
腕があれば、例外処理でログ取ってはっきり対処もできるのだろうが(while Trueで行けるかとも思ったが、ダメだった)、どうも思ったように動いてくれない。
Pythonの例外処理とは?try・except・else・finallyの使い方【処理を続行する方法】│とことん独学ブログ
time.sleep(3)
そう言えば、
PWM support. · UedaTakeyuki/mh-z19 Wiki · GitHub
Slow, in about 1 second necessary to get data.
だったな。失敗している.pyに、time.sleep(3)を入れてみる。
。。OKになった。ちなみに1秒だとときどきNG。2秒だと2、3日に1回NG。
WARNING: REMOTE HOST IDENTIFICATION CHANGED!
たまに古いサーバアドレスへSSHしようとした時に。
そうしょっちゅうはないことだし、当然に忘れてしまって毎回、調べ直すハメになるので、メモしておこう。
$ssh-keygen -R example.com
WARNINGから、ssh-keygen -Rのyes/no確認してくれるといいなと思ったけど、中間者攻撃対策のこと、あまり考えずにやっちゃったらヤバいから、こうなってるんだろうな、きっと。
ついでにフィンガープリントについても、お勉強。
SSHにおけるフィンガープリントとは。ホスト認証とあわせて解説