ホーム » コンピュータ (ページ 4)

コンピュータ」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

curl で switchbot API v1.1 を呼出す

Amazon タイムセールで、SwitchBot CO2 センサー付き温湿度計の割引がでていたので、Hub mini セットで発注。CO2センサーは以前 CCS811 でモニタリングしていたけど、もともと精度が悪かったし異常値がでるようになってモニタリングをやめてるので、SwitchBot で復活させたくて、買ってしまった。だけど、CO2センサーは発送が始まらず、Hub mini だけが届く。ということで、ひとまず Hub mini で遊ぶ。

curl で switchbot API の情報を取得する

Python などで API をたたく記事が多いけど、もう少しシンプルにできないかということで、手抜き curl で試してみる。

まずは、最もシンプルな、v1.0 で取得する方法。

最初の token, secret には、SwitchBot スマホアプリで入手したものを書き込む。(v1.0では secret 使ってないけど)

#!/bin/bash

token="xxxxxx....xxxxxxx"
secret="yyyy...yyy"

url_list_v10="https://api.switch-bot.com/v1.0/devices"

curl -s -H "Authorization:${token}" "${url_list_v10}"

switchbot API v1.1 で取得する

ちょっと面倒だけど、セキュリティ的には v1.1 で取得するのが定番。最初は Unauthorized で失敗して色々と試行錯誤したけど、openssl … -binary がキモだった。(こちらの記事を見て、sha256 のハッシュの形式が違うのに気づけた。)

#!/bin/bash

token="xxxxxx....xxxxxxx"
secret="yyyy...yyy"

t="$(/usr/bin/date +%s%3N)"     # time = Epoch time 13桁
nonce="$(/usr/bin/uuidgen)"     # uuid
sign=$(echo -n "$token$t$nonce" \
       | /usr/bin/openssl dgst -sha256 -hmac "$secret" -binary \
       | /usr/bin/base64 -w 0)
url_list_v11="https://api.switch-bot.com/v1.1/devices"

curl -s --request GET \
    -H "Content-Type: application/json" \
    -H "Authorization: ${token}" \
    -H "sign: ${sign}" -H "nonce: ${nonce}" -H "t: ${t}" \
    "${url_list_v11}"

取得した json コンテンツから特定のデバイスの情報を抜粋する

結果は、JSON 形式なので、jq を使って必要な場所だけ抜粋する。

$ bash swbot.sh \
  | jq '.body.deviceList[] | select( .deviceId == "ZZZZZZZZZZZZZZZZ")'

Switchbot meter plus から温度,湿度を表示

Switchbot Hub mini が無い時は、温湿度計(meter plus)からのデータ取得は Bluetooth 経由で動かしていたので、Raspberry Pi で温度を取得していたが、この方法であれば LAN 接続であればどこからでも取得可能なので便利。

(略)
swbot_meter="ZZZZZZZZZZZZZZZZ"
url_list_v11_meter="${url_list_v11}/${swbot_meter}/status"

curl -s --request GET \
     -H "Content-Type: application/json" \
     -H "Authorization: ${token}" \
     -H "sign: ${sign}" -H "nonce: ${nonce}" -H "t: ${t}" \
     "${url_list_v11_meter}" \
  | jq -r '.body | "Temperature: " + (.temperature|tostring) + "C\n" \
                   + "Humidity: "  + (.humidity|tostring) + "%"'

これで、温度、湿度がとれる。これなら munin 用のスクリプトも shell で簡単に書けそう。だけど、バッテリー残量(.battery)は 60% 台まで落ちているはずだけど、100% なんだよな。他の SwitchBot Plug でも、電力値が取れなかったりと SwitchBotAPI は、全機能を網羅していない様子。

Windows 11 Upgrade できるようになった!?

とっくの昔に、Win11 Upgrade不可能と診断されてたんだけど、なんで今頃 Upgrade の画面出てくるんだ?
Windows 10 アップグレード 22H2 の更新の追加に合わせて基準が変わったのかと、思わず期待したけど、やっぱりダメなんじゃん。

sshd のエラーメッセージ

sshd の設定をあまり見直していないが、下記のメッセージが出るようになっている。

2024-10-05T20:03:58.314494+09:00 xxxx sshd[176045]: rexec line 15: Deprecated option UsePrivilegeSeparation
2024-10-05T20:03:58.314710+09:00 xxxx sshd[176045]: rexec line 18: Deprecated option KeyRegenerationInterval
2024-10-05T20:03:58.314778+09:00 xxxx sshd[176045]: rexec line 19: Deprecated option ServerKeyBits
2024-10-05T20:03:58.314840+09:00 xxxx sshd[176045]: rexec line 31: Deprecated option RSAAuthentication
2024-10-05T20:03:58.314896+09:00 xxxx sshd[176045]: rexec line 38: Deprecated option RhostsRSAAuthentication
2024-10-05T20:20:31.361176+09:00 xxxx sshd[177351]: Unable to load host key: /etc/ssh/ssh_host_dsa_key

どれも、関連する行をコメントアウトで対応。

mariadb のエラー対策

別件で /var/log/syslog を確認したら、下記のエラーが大量に出力されている。

2024-10-05T19:53:54.546148+09:00 xxxx mariadbd[1076]: 2024-10-05 19:53:54 3785 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'hist_type' at position 9 to have type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), found type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB').
2024-10-05T19:53:54.546217+09:00 xxxx mariadbd[1076]: 2024-10-05 19:53:54 3785 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).

エラーメッセージでググると、下記のコマンドで直るとのこと。

ALTER TABLE mysql.column_stats MODIFY histogram longblob;
ALTER TABLE mysql.column_stats MODIFY hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB');

ということで、実行してみる。

# mariadb -u root
:
MariaDB [(none)]> ALTER TABLE mysql.column_stats MODIFY histogram longblob;
Query OK, 0 rows affected (0.496 sec)
Records: 0  Duplicates: 0  Warnings: 0
MariaDB [(none)]> ALTER TABLE mysql.column_stats MODIFY hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB');
Query OK, 0 rows affected (0.176 sec)
Records: 0  Duplicates: 0  Warnings: 0

エラーメッセージは出なくなったようだ。

EP-716AをCUPSに登録

設定に失敗していたけど、改めてプリンタを cups に登録してみた。CUPS の Web 管理画面のプリンタ検索でいくつかの設定を自動的に見つけてくれるけど、ipp://* やら http://*:631 による設定だと うまくいかず、最終的に下記の設定でようやくうまくいった。

ここまでできると、いつでも印刷できるように、プリンタを Wake on LAN で起動できるといいんだけど、有線でつながっている必要もあるけど、EP-716A は 無線か USB なので無理。

睡眠時無呼吸症、無し

体格的にも睡眠時無呼吸症の心配してたけど、警告無くって一安心。
{CAPTION}ただ、日中も夜中も付けていると、手首が蒸れるように感じる時がある。さすがに毎日つけるのはやめようかな。

(追記) 2024-10-07

手首が蒸れる感じが気持ち悪いので、昼間は左手につけ、寝る時は右腕に付けて寝るようにしている。

Apple Watch 10 到着

注文していた Apple Watch Series 10 が届いた。発注当初は10/5-10/10 の到着予想だったのでニマニマ。

感想など

WatchOS11 に非対応となった Series5 だったので、機種変。やっぱり画面が大きいのはいいね。{CAPTION}

{CAPTION}

{CAPTION}

右上の日付表示が (… 表示になっているのがフォント調整されてない感。なんだかなぁ…

あと、Apple Watch スピーカーで音楽が流せるようになっているけど、予想以上に「まともな音質」で驚いた。

問題点

  • iOS18, watchOS10, macOS Sequoia どれもみたいだけど、更新に合わせ WiFi のプライベートMACアドレスが ON となる。改めて、プライベートMACアドレス OFF の設定が必要。
  • 「Assistive Touch で認証」を設定してみたが、普通にウォレットを起動しようとサイドボタンのダブルクリックしたけど、Assistive Touch の認証画面が表示される。このため自販機で Suica を使おうとしたけど、ウォレット画面がうまく呼び出せない。バグっぽいしひとまずAssistive Touch で認証を外す。
  • サイズが大きくなったから当たり前なんだけど、3Dプリンタで印刷した充電台にうまく置けない。台をやすりで削って置き位置を調整で対応。

下取り Apple Trade In

今回、お古の AW5 は、Apple Trade In にて下取りとした。6500円での下取りだけど、前回の下取りの時には、返送用の宅配の箱を送ってもらって、宅配業者に持ち込みだった。今回は、下取りの配送業者さんが来て、渡すだけ。目の前で、緩衝用フィルム材に入れて、小さい箱に入れて回収。3分もかからず下取り完了。(事前にリセット作業をやっておく必要はある)

Apple Watch Series 10

Apple Watch Series 5 を2019年10月より使っているが、WatchOS 11 では対応していない。販売から5年ということもあってそろそろ機種変更を検討。今回、Series 10 が出てきたことから、まずは発注。

居室-35.5℃

居室の温度が35.5℃になってた。

居室は、猫を飼っているのもあって、夏場も常時エアコンを動かしている。温度監視もしているから大丈夫と思っていたけど、警告に気づいたら35.5℃になってる。昼食時間だしエアコンを動かし早々に帰って確認。猫はばてていることはなく、問題なかった。

nagios4 で規定温度を越えたタイミングで送られる警告送信を使ってエアコンの信号を送っているはずなのに、うまく動作していなかったようだ。規定温度を越えた後でスマホでのリモート操作で間違って「子供部屋のエアコンをきる」つもりが「居室のエアコンをきる」の操作をしてしまったと思われる。(やばいと思った時には、子供部屋のエアコンがついていた。)

Teams更新

Microsoft Teams が Teams.Classic と Teams と2本入った状態だったけど、個人アカウントと仕事アカウントで使える最新版が出たということで、入れなおしてみたけど、最近使っていた Teams と変わりなかった。まあ、Teams.Classic を削除するいい機会にはなったかな。

改めて、個人アカウントを Teams に加えてみたけど、起動する度に個人アカウントだけが開き、メインで使っている仕事の Teams は改めて切り替えが必要。デフォルトアカウントで起動しないのは不便。3rd パーティーアプリでできるらしいけど、あんまり使いたくないし。ということで、実質個人アカウントの Teams 使っていないし、Teams より個人アカウント設定を削除となった。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト