IT

SwitchBot API

IFTTT不発事故に起因する2021年版AirconShutdownの善後策。

SwitchBotハブミニ

SwitchBotハブミニ

これまではTwitter経由のIFTTTで家電リモコンSwitchBotを制御していたところ、2022年版IRKitでは直接APIを叩くようにできたので、SwitchBotSwitchBot Open APIを叩くことに。

SwitchBot Open API

https://api.switch-bot.com/v1.0/devices/**<deviceId>**/commands

というRESTエンドポイントに制御データをPOSTする枠組み。****で指定する対象装置は

curl --request GET 'https://api.switch-bot.com/v1.0/devices' \
  --header 'Authorization: 認証トークン' \
  --header 'Content-Type: application/json; charset=utf8'

で一覧を取得できる。なお、認証トークンはSwitchBotをHub経由でAPIから操作するに倣い、SwitchBotアプリの「開発者向けオプション」から取得できる。

ちなみに、エアコンの制御データのパラメータは

deviceType
commandType
Command
command parameter
Description
…となっているので、、エアコン停止用の
{  "command": "setAll", "parameter": "25,1,1,off", "commandType": "command"}

というデータを"switchbot_aircon_off.json"というファイルにして

#!/bin/bash
BASEPATH=$(dirname $0);
SWITCHBOT_API="https://api.switch-bot.com/v1.0"
SWITCHBOT_TOKEN="90edf....3431"
hdr_auth="Authorization:${SWITCHBOT_TOKEN}"
hdr_type="Content-Type: application/json"
# BODY="@${BASEPATH}/switchbot_aircon_off.json"
BODY='{"commandType": "command", "command": "setAll", "parameter": "25,1,1,off"}'
AIRCON_1F="01-2020XXXXXXXX-32"  # 1F
AIRCON_2F="01-2020YYYYYYYY-52"  # 2F
AIRCON_3F="01-2020ZZZZZZZZ-82"  # 3F
for DEVICE_ID in $AIRCON_1F $AIRCON_2F $AIRCON_3F;
do
    URL="${SWITCHBOT_API}/devices/${DEVICE_ID}/commands"
    curl "${URL}" \
         --silent -O /dev/null \
         -H "${hdr_auth}" -H "${hdr_type}" \
         -X POST -d "${BODY}"
done

というスクリプトを回せばエアコン3台が順次停止になる運びだ。

アクセシビリティ

以前、MdNの記事第8回 音声読み上げとWebライティングに触発されて、価格表示としての¥100を100円に変更した。

要旨としては【アクセシビリティ向上】Webサイトの音声読み上げの注意点と必要性

まず1つ目は、テキストの表記によって意図した通りに読み上げられないことがある点です。記号や省略記号も、音声読み上げ機能では正しく内容を伝えられません。たとえば、3000などの数字は、全角で「3000」のように記述すると「さんぜろぜろぜろ」と読み上げられてしまいます。また、※や¥などの記号も読み上げられないので、注意が必要です。

と書いてある通りなのだが、そうは言ってもその記事自体、投稿日表記**“2020/09/01”**というダメな形式になっていて「お前が言うな」と言いたいところだが、実際のところはフレームワークがあるので「言うは易し行うは難し」ところだ。

実際のところ"YYYY/MM/DD"の日付表記を"YYYY年MM月DD日"表記に整理しようとしたのだがURLに含まれる部分などを除外する事ができずに断念して今に至るのだが、よく考えると本文中には"YYYY/MM/DD"という日付表記は無さそうなので、再び立ち上がることに。

というわけで、参考リンク行の日付表記だけ"YYYY年MM月DD日"表記に整理する観点で、以下のsedスクリプトによる対処を実施。

#!/bin/bash
PID=$$;
for f in $*;do
  OUTPUT=$f.${PID}
  sed -e 's/ *\(19[0-9][0-9]\)\/\([0-9]*\)\/\([0-9]*\)*$/ \1年\2月\3日/' \
      -e 's/ *\(20[0-9][0-9]\)\/\([0-9]*\)\/\([0-9]*\)*$/ \1年\2月\3日/' \
      -e 's/ *\([12][0-9][0-9][0-9]\)年0*\([0-9]*\)月0*\([0-9]*\)日$/ \1年\2月\3日/' $f > $OUTPUT
  touch --refer=$f $OUTPUT
  diff -q $f $OUTPUT > /dev/null
  if [ $? -ne 0 ]; then mv $OUTPUT $f; fi
  rm -f $OUTPUT
done

3つ目の正規表現で01月や01日の不要なゼロを削除するのが地味なポイントかな。

参照

MdN Design Interactive https://www.mdn.co.jp/di/

Webmedia https://www.itra.co.jp/webmedia/

東海総合通信局 https://www.soumu.go.jp/soutsu/tokai/

Wikipedia https://ja.wikipedia.org/wiki/

povo利用停止予告

昨年12月に移行した、povo回線。

【povo2.0】長期間トッピング未購入による利用停止予告

予告メール

6月1日で月額0円の条件とされた180日間を超えていたはずなのだが、ようやく『長期間トッピング未購入による利用停止予告』メールが着弾。

いつもpovoをご利用いただきありがとうございます。 ご契約のpovo2.0サービスは6月22日時点でトッピングを長期間未購入のため、このままトッピングのご購入が確認できない場合、7月4日より順次ご利用を停止いたします。 povo2.0ではトッピングを多数ご用意しており、お客様のご利用状況に合わせて自由にお選びいただけます。 ぜひ7月3日までにご購入をお願いいたします。

との事。

モバイル回線は0円運用中のpovoのみとなってしまったものの、「auひかり」やら「auでんき」やらで毎月2万円以上の支払いが続いているので"お得意様お目溢し"ルールが適用されているのかと思ったのだが、やっぱりそんなに都合の良い事は無かったらしい。

というわけで、220円smash.使い放題パック(24時間)か、390円データ追加1GB(7日間)のどちらを購入しようか、7月まで悩むことに。

参照

ケータイ Watch https://k-tai.watch.impress.co.jp/

ITmedia Mobile https://www.itmedia.co.jp/mobile/

povo2.0 https://povo.jp/

povoサポート https://kdlsupport.zendesk.com/hc/ja

Wikipedia http://ja.wikipedia.org/wiki/

PLEX PX-Q3PE4

2010年のPT2入手からはや12年。

PLEX PX-Q3PE4

地デジ・BS・CS対応 TVチューナー テレビチューナー PX-Q3PE4

PT3の入手からも10年が経過し、mirakurunとepgstationの環境もできたので、TS抜きができるPCI-Expressなチューナーを追加調達しておくことに。

PTxシリーズとは全く互換性は無いものの、地デジ・BS・CS対応テレビチューナー PX-Q3PE422,999円【楽天市場】風見鶏より調達。

参照

AKIBA PC Hotline! https://akiba-pc.watch.impress.co.jp/

株式会社プレクス http://www.plex-net.co.jp/

Qiita https://qiita.com/

GitHub https://github.com/

Wikipedia https://en.wikipedia.org/wiki/

Celeron G5905調達

Yahoo!おトク宝箱PayPayフリマの「1,111円引きクーポン」をGet。

☆未使用品☆Intel Celeron G5905 LGA1200☆純正クーラー付き☆

PayPayフリマより

…なわけで、PayPayフリマASUS Pro H510M-C/CSM用にLGA1200対応のCPUを物色していたところ、LGA1200対応の『☆送料無料☆未使用品☆Intel Celeron G5905 LGA1200☆純正クーラー付き☆#4』を発見。

2コア/2スレッドのローエンドだが、UHD Graphics 610なGPU内蔵なのでCore i3 10105のバックアップ要員として役に立ちそうだ。

送料込3,869円ならば悪くないよね、というわけでポチッとな。

参照

価格.com https://kakaku.com/

AKIBA PC Hotline! https://akiba-pc.watch.impress.co.jp/

Intel https://www.intel.com/

Intel https://ark.intel.com/

Wikipedia https://ja.wikipedia.org/wiki/

E3-1246 v3調達

昨日見つけた「Intel Xeon E3-1246 v3 SR1QZ LGA1150 Haswell 3.50GHz」。

Intel Xeon E3-1246 v3 SR1QZ LGA1150 Haswell 3.50GHz

ヤフオク!より

ブーストクロックはXeon E3-1275L v3と同じ3.90 GHzだが、こちらはベースクロックが3.50 GHzなので、TDPは若干大きい85Wとなる。

3番手のXeon E3 v3 ファミリーは不要かな…とも思ったが、すでに生産完了してしまった絶版製品なので5,000円台ならリスク回避としてストックしておいても損はないかと考え直し。

こちらも開始価格で入札しておいたところ、無事落札に成功。税・送料込5,640円で調達。

参照

Intel https://www.intel.com/

Intel https://ark.intel.com/

Wikipedia https://ja.wikipedia.org/wiki/

E3-1275L v3調達

ヤフオク!の200円引きクーポンが届いたので、ASUS Pro H510M-C/CSM用にLGA1200対応のCPUを物色開始。

★Intel Xeon E3-1275L V3 (4コア/8スレッド) LGA1150 省電力CPU 中古★

ヤフオク!より

まだ2世代前では手頃な価格には程遠いな~と、何気なくLGA1150対応のHaswellなCPUも調べたところ、「Intel Xeon E3-1246 v3 SR1QZ LGA1150 Haswell 3.50GHz」と、「Intel Xeon E3-1275L V3 (4コア/8スレッド) LGA1150 省電力CPU」を発見。

2018年のXeon E3-1265L v3と同じく、4コア/8スレッドで「インテル® HD グラフィックス」内蔵なXeon E3 v3 ファミリーなので、バックアップ要員にもってこいだ。

最高クロックは同じ3.90 GHzだが、ベースクロックが2.70 GHzと低い1275Lの方がTDP 45W。ちょっと割高だが、エコフレンドリーなCPUは流通量が少なく入手も困難だ。

開始価格で落札できるようならこれも縁という事で入札してたところ、無事7,000円で落札に成功。クーポン値引き・送料込6,800円で調達。

参照

Intel https://www.intel.com/

Intel https://ark.intel.com/

Wikipedia https://ja.wikipedia.org/wiki/

IRKit独立

2014年1月から12800台が生産され、2017年11月25日に完売したIRKitだが、なんと4月にサービス終了の案内が出ていた事に気づいた。

IRKit

2016年に購入したIRKit

2016年に調達した手元のIRKitも3月に復活したばかりだが、最初にサーバに接続してからでないと**“Device HTTP API"すら使えなくなる**という事で、打つ手なし。

と思いきや、

幸いにもIRKitのファームウェアはオープンソースであり、この問題を解決してくれた方がいらっしゃいます。 こちらのpull request https://github.com/irkit/device/pull/6 を書き込むと useCloudControl という設定をfalseにしてビルドすることで、サーバに接続する機能を停止します。この時ローカルネットワークは使えます。

という救済策が案内されていたので、早速GitHub - acourreges/device からファームウェアを入手してファームアップにトライ。

出荷時に設定されるWi-Fiアクセスポイントのパスワードとバージョン情報を適当に設定して、arduino-1.8.10でアップロード。

しかし、IRKitは再起動しても一向にLEDが赤明滅にならず。青点灯して消灯となってしまったのでRebootを繰り返しているものと思っていたのだが、アクセスポイントの接続状態をチェックしたところ以前の設定通り自宅のWiFiに繋がっていることが判明。pingでも応答があるし、curlにも従前通り反応。レスポンスヘッダのServer行で出力されるバージョンでもファームアップできていることが確認できた。

というわけで、自宅のWiFi接続情報が消えてなかったので、ファームアップしてもファクトリーリセットではないという事らしい。

ただavahi-browseに反応しなくなっていたので、setupMDNSだけはuseCloudControlの設定に依らず効くように変更し、最終的に変更点は以下の通り。

yano@GT110b:~/IRKit$ git clone https://github.com/acourreges/device.git
yano@GT110b:~/IRKit$ cd ~/IRKit/device
yano@GT110b:~/IRKit/device$ vi firmware/src/IRKit/GSwifi.cpp firmware/src/IRKit/IRKit.ino firmware/src/IRKit/cert.h
yano@GT110b:~/IRKit/device$ git diff -b
diff --git a/firmware/src/IRKit/GSwifi.cpp b/firmware/src/IRKit/GSwifi.cpp
index b6ed100..97713bf 100644
--- a/firmware/src/IRKit/GSwifi.cpp
+++ b/firmware/src/IRKit/GSwifi.cpp
@@ -1093,7 +1093,7 @@ int8_t GSwifi::startLimitedAP () {
     command(PB("AT+NSET=192.168.1.1,255.255.255.0,192.168.1.1",1), GSCOMMANDMODE_NORMAL);
     // password area overwritten in factory
-    cmd = PB("AT+WPAPSK=IRKitXXXX,XXXXXXXXXX",1);
+    cmd = PB("AT+WPAPSK=IRKit41D9,2041357304",1);
     strcpy( cmd+10, hostname() );
     cmd[19] = ',';
     command(cmd, GSCOMMANDMODE_NORMAL, GS_TIMEOUT_LONG);
diff --git a/firmware/src/IRKit/IRKit.ino b/firmware/src/IRKit/IRKit.ino
index 2351b59..1342f0a 100644
--- a/firmware/src/IRKit/IRKit.ino
+++ b/firmware/src/IRKit/IRKit.ino
@@ -315,14 +315,14 @@ void connect() {
     if (gs.isListening()) {
+        // start mDNS
+        gs.setupMDNS();
+
         if (!config::useCloudControl) {
             // No WAN access, we don't need to validate key, we're ready.
             IR_state( IR_IDLE );
             on_irkit_ready();
         } else {
-            // start mDNS
-            gs.setupMDNS();
-
             if (keys.isAPIKeySet() && ! keys.isValid()) {
                 irkit_httpclient_post_door();
             }
diff --git a/firmware/src/IRKit/cert.h b/firmware/src/IRKit/cert.h
index cf6dcb3..01fc839 100644
--- a/firmware/src/IRKit/cert.h
+++ b/firmware/src/IRKit/cert.h
@@ -20,7 +20,7 @@
 #include "GSwifi_const.h"
 // deviceapi.getirkit.com
-prog_uchar der[] PROGMEM = {
+const char der[] PROGMEM = {
     ESCAPE, 'W',
     0x30, 0x82, 0x2, 0xed, 0x30, 0x82, 0x2, 0x56,
     0xa0, 0x3, 0x2, 0x1, 0x2, 0x2, 0x9, 0x0,
diff --git a/firmware/src/IRKit/config.h b/firmware/src/IRKit/config.h
index 2888117..89fa3f6 100644
--- a/firmware/src/IRKit/config.h
+++ b/firmware/src/IRKit/config.h
@@ -31,13 +31,13 @@ namespace config {
     } LedFeedbackProfile;
     // Defines what kind of LED profile you want.
-    const LedFeedbackProfile ledFeedback = LED_QUIET;
+    const LedFeedbackProfile ledFeedback = LED_VERBOSE;
     // Enables/disables cloud-control through the "deviceapi.getirkit.com" server.
     // If you use your IRKit device exclusively over your LAN, you can disable
     // this option: the device won't send regular polling requests to the cloud server.
     // This also lets you setup your device without internet access (no need for a valid device key).
-    const bool useCloudControl = true;
+    const bool useCloudControl = false;
 }
yano@GT110b:~/IRKit/device$

サーバに接続しなくなるとiOSやAndroidのアプリも使えなくなるかと思いきや、同一LAN配下であればそのまま使えるようだ。

Mirakurun

ASRock H97 Pro4にXeon E3-1265L v3を載せたHaswellにPT3を入れ、テレビ録画サーバ機能を構築。

Mirakurun 3.9.0-rc.2

Chinachu/Mirakurun

mirakurunとepgstationをDockerで扱うl3tnun/docker-mirakurun-epgstationが楽チンっぽいので、あやかる事に。

最初はearth_pt3が動かなくて悩んだのだが、kernel 5.4で起動するとearth_pt3が動いたので、調べたところ5.13系の.koファイル自体が無かった。結局

$ KVERSION="5.13.0-44-generic"
$ sudo apt install -y linux-image-${KVERSION} ¥
                      linux-headers-${KVERSION} ¥
                      linux-modules-${KVERSION} ¥
                      linux-modules-extra-${KVERSION}

とする事で解決したので、どうやら5.13.0のkernelを入れる時にlinux-modules-extraを入れ忘れてたっぽい。

何はともあれl3tnun/docker-mirakurun-epgstationをgit clone。

~$ mkdir ~/mirakurun
~$ cd ~/mirakurun
~/mirakurun$ git clone https://github.com/l3tnun/docker-mirakurun-epgstation.git
~/mirakurun$ cd ~/mirakurun/docker-mirakurun-epgstation
~/mirakurun/docker-mirakurun-epgstation$ cp docker-compose-sample.yml docker-compose.yml
~/mirakurun/docker-mirakurun-epgstation$ cp epgstation/config/config.yml.template epgstation/config/config.yml
~/mirakurun/docker-mirakurun-epgstation$ cp epgstation/config/enc.js.template epgstation/config/enc.js
~/mirakurun/docker-mirakurun-epgstation$ cp epgstation/config/operatorLogConfig.sample.yml epgstation/config/operatorLogConfig.yml
~/mirakurun/docker-mirakurun-epgstation$ cp epgstation/config/epgUpdaterLogConfig.sample.yml epgstation/config/epgUpdaterLogConfig.yml
~/mirakurun/docker-mirakurun-epgstation$ cp epgstation/config/serviceLogConfig.sample.yml epgstation/config/serviceLogConfig.yml
~/mirakurun/docker-mirakurun-epgstation$ docker-compose run --rm -e SETUP=true mirakurun
~/mirakurun/docker-mirakurun-epgstation$

「ホスト上の pcscd は使わない」という事は、裏返すとコンテナ側でICカードリーダーをハンドルするという事になるので、そのまま背面のUSBポートにBCAS用のICカードリーダー"SCR3310"を挿し、docker-compose.ymlに設定を追加。

オンキヨー自己破産

オンキヨーのホームAV事業、シャープらに33億円で売却からほぼ1年。

ONKYO NR-365(B)

2015年2月に調達したNR-365(B)

オンキヨーホームエンターテイメント、自己破産申請。負債31億円というニュースに驚いた。

2020年に設立されてVOXX・シャープに譲渡した家庭向けAV事業会社であるオンキヨー株式会社ではなく、「松下電器から独立した五代武が1946年9月に株式会社大阪電気音響社として創立」された本家が自己破産という事らしい。

「e-onkyo music」も仏Xandrieに事業譲渡されてたとは、知らなかったよ。

参照

AV Watch https://pc.watch.impress.co.jp/

オンキヨーダイレクト https://onkyodirect.jp/

ハイレゾ音源配信サイト【e-onkyo music】 https://www.e-onkyo.com/

Wikipedia https://ja.wikipedia.org/wiki/