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" ) ;
?>
wsl2 の設定
WSL2 の設定
((( /etc/fstab ))) LABEL=cloudimg-rootfs / ext4 defaults 0 0 Z: /mnt/z drvfs defaults 0 0
Microsoft Terminal の設定
((( settingsjson )))
{
:
"defaultProfile": "デフォルトで起動するコマンドのguid",
:
"profiles":
{
"defaults":
{
// Put settings here that you want to apply to all profiles.
// ターミナルのフォント
"fontFace": "Cascadia Code",
// ターミナルの色構成のデフォルト
"colorScheme": "Solarized Light",
// ターミナルのカーソル形状のデフォルト
"cursorShape": "filledBox"
},
"list":
[
:
{
"guid": "{...}",
"hidden": false,
"name": "Ubuntu-20.04",
"source": "Windows.Terminal.Wsl",
// ログインした時のホームディレクトリ指定
"startingDirectory": "//wsl$/Ubuntu-20.04/home/t-saitoh"
}
]
},
:
}
wsl2の再インストール
wslの設定ファイルの /etc/fstab を間違った設定をしたようで、wsl(Debian)が起動しなくなった。C:\Users\ユーザ名\AppData…? の中から実体を探せば直せそうだったけど、サクっと直ればいいなと思って Microsoft Store で WSL 環境をアンインストールした。
ただ、このやり方はまずいやり方だったようで、不備のある設定がどこかに生き残ったようで、新たに入れようとした Ubuntu 20LTS のインストールが始まらない。
色々と確認したけど再起動すると、WSL の仮想マシンを立ち上げようとがんばろうとするのか、数分間ブラックアウトするようになるし、最悪。時間がたつとようやくWindows にloginできたので、「設定」-「アプリ」-「Windows のその他の機能」で、WSL 自体を削除&再設定したら、Ubuntu 20 LTS のインストールが始まった。
amavisd-newでDKIMのエラー
数日前から、以下のようなエラーメールが届くようになった。
Argument "1.20200513.1" isn't numeric in numeric ge (>=) at /usr/share/perl5/Mail/SpamAssassin/Plugin/DKIM.pm line 686. Argument "1.20200513.1" isn't numeric in numeric ge (>=) at /usr/share/perl5/Mail/SpamAssassin/Plugin/DKIM.pm line 809.
どうも、DKIM の Perl スクリプトが amavisd-new のバージョン確認で、実数形式のバージョン番号の比較でエラーになっている様子。ge 使えって書いてあるし、そうしてみた。でも、versionが9.9超えたら、また変になるよな。まあ、両方とも 1.2とか2.1とかだし 9.9 超える頃には、更新かかるだろ。
686: -if ($version >= 0.31) {
+if ($version ge "0.31") {
809: -if (Mail::DKIM::Verifier->VERSION >= 0.40) {
+if (Mail::DKIM::Verifier->VERSION ge "0.40") {
サーバ原因不明のフリーズ
休みののんびりする中、自宅サーバがフリーズ。出先だったのでママが恐る恐るリセット。
普通に起動したけど、icinga, munin を見ても予兆の変な雰囲気は無かった。
自宅に帰って改めてフリーズ時間の履歴を見ると、以下のようなところで syslog が途切れていた。
Apr 29 09:49:53 perrine postfix/smtpd[1325089]: connect from unknown[185.143.xx.xx] ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
この後、このIPアドレスから以下のような接続が続いている。postfix の脆弱性でもあるのかな。侵入には失敗しているようだが、なんか不気味。あまりにも不気味だし、繰り返し login を試しているし、iptables で接続をブロックする。
Apr 29 10:27:08 perrine postfix/smtpd[1943]: connect from unknown[185.143.xx.xx] Apr 29 10:27:10 perrine postfix/smtpd[1937]: warning: unknown[185.143.xx.xx]: SASL LOGIN authentication failed: authentication failure
bc.googleusercontent.com からの大量アクセス
サーバの負荷が急に上がってきた。
アクセス元を確かめると、35.210.166.102 。調べると 102.166.210.35.bc.googleusercontent.com. からのアクセスで、関連記事を調べるとこういった記事が上がってくる。Google 提供のクラウドみたいで個人からのアクセスらしい。どちらにしろ、10秒程度で次々とページを漁ってる、とてもマナーが悪いクローラー。User-Agent は、以下のようになっている。 https://velen.io をアクセスするけど、つながらない。
"Mozilla/5.0 (compatible; VelenPublicWebCrawler/1.0; +https://velen.io)"
ひとまず、FireWall の IPアドレス指定で接続拒否を行う。
((( /var/www/html/robots.txt ))) User-agent: VelenPublicWebCrawler Disallow: /
WP Fastest Cache を試す
PHP の 7.4 への切り替えを行ったけど、インストール済みのパッケージに Cache 関連のモジュールがあって、あらためて WordPress の Cache を調べてみた。
WP Fastest Cache を Install
簡単に導入できそうな、WP Fastest Cache というのがあったので、導入してみた。
WordPressの普通のプラグインの要領でインストール。WordPress の左メニューに WP Fastest Cache が追加されるので選んでから、キャッシュさせたい項目を選んで保存するだけ。
職場の WordPress にも入れてみた。でも、どこまで効果が出ているかは、よくわからない。ある程度運用してから、CPU 負荷を確認するしかないかな。
追加
数日の様子を見たけど、サーバとしては特に負荷が下がったという雰囲気は無いな。
ただ、ページの表示は早くなったような気がする。
homebridge-peopleの設定
homebridgeの記事を探していたら、homebridge-people を見つける。ping の結果を、人感センサーの ON/OFF 情報として扱うことができる。ping のホスト名をスマホのIPアドレスを指定すれば、自宅に居る/居ないとして把握できる。
$ sudo npm install -g homebridge-people
$ emacs .homebridge/config.json
"platforms": [
{
"platform": "People",
"threshold" : 15,
"anyoneSensor" : false,
"nooneSensor" : false,
"webhookPort": 51828,
"cacheDirectory": "./.node-persist/storage",
"pingInterval": 10000,
"ignoreReEnterExitSeconds": 0,
"people" : [
{
"name" : "斉藤徹",
"target" : "iphonex-tsaitoh",
"threshold" : 15,
"pingInterval": 10000,
"ignoreReEnterExitSeconds": 0
}
]
}
]
本当は、ホームハブを導入することで、Home のオートメーションと連動させて、○○が家に帰ったら、○○するといったことができるんだけど、ホームハブが無いのでできない。そうなってくると、HomePod が欲しくなってくる。











