CCS811空気品質センサーに温湿度補正の実行
CCS811を使った空気品質センサーを使っているけど、夜になると次第に異常な値になっていく。
原因はよく掴めないままだけど、CCS811の機能の中に温湿度で補正をかける処理がある。補正といってもちょっとした程度かと思っているけど、時間経過とともに大きく変化していることから、1時間おきに温湿度補正をかけるようにプログラムを追加してみた。
色々と処理を触ってみるけど、時間が経つと大きな値が取れる状態になってしまう。倍率みたいな設定項目あるのかな…
Cable Gate による録画予約
ケーブルテレビより、古い STB で Cable Gate のサイトを使った録画予約ができなくなるとの警告。STB は更新してるから使えなくなるという心配はない…というか、Cable Gate の録画予約が使える対象機種なのに、試したことがない機能を発見。
せっかくだし、STB の機器ID, STB-IDを調べて登録。しかし、設定を登録した時点では予約機能が使えなかったが、数日後の今日確認したら、Web画面での予約機能が使えるようになっていた。(クラウド側の対応に時間がかかったのかな) でも、これで出先からでも録画予約が可能。(あんまり使うことないとは思うけど)

ブレーカー落ちた
洗濯機の乾燥機能が動かなくなり、修理に来てもらって無事動いたのはいいけど、夜にブレーカーが落ちた。
自宅サーバへの被害も考え、UPS電源の電圧を APCUPSD でモニタリングしていて、電源電圧が下がると、google-home で警告メッセージが流れるようにしてあるんだが、動作せずに落ちてる。nagios4 の LOG をみると、電圧低下は検出しているけど、通知が発動していない。なんでやねん。
(2023-12-03追記)
別のタイミングでは、警告メッセージの読み上げは動いていた。夜間はスピーカ音量を落としているので、気づきにくい音になってたけど。
Kindle Fire HD
ママが、電子書籍で読む機会が増えた…ということで、Kindle Fire HD を購入した。早速セットアップ。自宅ネットワークに登録し、アカウントの設定やら Netflix アカウントの登録やらを終える。
Alexa
んで、Alexa も使えるし「Alexa, 今日の天気は?」を試してる。まあ、我が家はすでに Homebridge が動いていて「Hey Siri」、「OK Google」で、温湿度確認やらTVのON/OFFやら色々なことができる状態。でも、homebridge オタ状態なので「Alexa, テレビをつけて!」もやりたくなってくる。
homebridge-alexa
ググると、当然のように「Alexa経由で家の外からRaspberry Pi(Homebridge)に指示」というページが見つかる。このページに記載されているように、(1) homebridge-alexa をインストール、(2) 中継用のクラウドのアカウント作成、(3) Kindle 側に homebridge スキルのインストールを行う。

Switchbot Plug の制御
電気毛布が必要な時期、外出時の電源を切り忘れるのを防ぐために、昨年導入していた Switchbot Plug 。
スマホの SwitchBot アプリのタイマー機能で朝に強制オフの制御していたけど、寝る時にスイッチを入れるのは、自分が不在の時だとムダだし、homebridge や cron で制御するのも面白そう。
switchbot-utility のインストール
ということで、Raspberry-Pi に、switchbot-utility をインストール。
((( 事前にSwitchbot アプリは設定済み ))) $ sudo pip3 install switchbot-utility $ cd /usr/local/lib/python3.9/dist-packages/switchbot_utility
制御するには、Switchbot アプリのトークンと秘密鍵が必要なので、アプリを起動して「プロフィール」、「設定」の画面を開いて、「アプリバージョン」の表示を 10 回連打すると、「開発者向けオプション」を表示できる。この画面を開いてトークンとクライアントシークレットをコピーし、上記の switchbot_utility のフォルダ内に、settings.json のファイル名で保存。

Python で以下のスクリプトを実行すると、switchbot-utility で扱えるデバイスの一覧 deviceList.txt が作られる。
((( settings.json )))
// Switchbot アプリで取得したトークンとシークレットを、
// switchbot_utilitiy のフォルダに settings.json で保存しておく
{
"token": "xxxxx....",
"secret": "yyyyy...."
}
((( devicelist.py )))
// Python で以下のスクリプトを実行すると、deviceList.txt が作られる。
// 以下を devicelist.py で保存し、python3 devicelist.py で実行!
from switchbot_utility.switchbot import Switchbot
switchbot = Switchbot()
switchbot.devicelist()
((( deviceList.txt )))
441793xxxxxx, 電気毛布, Plug, 000000000000
C5B496xxxxxx, エアコン, Bot, 000000000000
実際に、Switchbot Plug を動かすために、下記のscriptでスイッチを制御できるようにしてみた。
#!/usr/bin/python3
# -*- mode: python; coding: utf-8; tab-width: 4 ; -*-
# SwitchBot をON/OFFする
import sys
import time
import os
from switchbot_utility.switchbot_plug import SwitchbotPlug
# ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~
# 制御するSwitchBot に合わせて、上記~~~ を書き換える。
sb_dir = '/usr/local/lib/python3.9/dist-packages/switchbot_utility'
# Switch Bot Plug MAC ADDR
# deviceList.txt 調べた MACアドレスを記入
sb_plug_macaddr = '441793xxxxxx'
# コマンドライン引数プロセス名
script_file_name = sys.argv.pop( 0 )
# コマンドライン引数 -d <デバイスID>
while len( sys.argv ) >= 2 and sys.argv[0] == '-d' :
sys.argv.pop( 0 )
sb_plug_macaddr = sys.argv.pop( 0 )
# setting.jsonを読み込むため
os.chdir( sb_dir )
# SwitchBot Plug に接続
sb_plug = SwitchbotPlug( sb_plug_macaddr )
# ~~~~~~~~~~~~~ この部分に制御対象用のコンストラクタを書けばいい
if len( sys.argv ) == 0 :
# 引数なしは、状態を表示
print( sb_plug.get_power() )
elif len( sys.argv ) == 1 :
# status | on | off | toggle or turn
arg = sys.argv.pop()
if arg == 'status' :
# exitでスイッチ状態を返す
sys.exit( 0 if sb_plug.get_power() == 'on' else 1 )
elif arg == 'on' :
sb_plug.turn_on() # ON
elif arg == 'off' :
sb_plug.turn_off() # OFF
elif arg == 'toggle' or arg == 'turn' :
# スイッチを反転
pw = sb_plug.get_power()
if pw == 'on' :
sb_plug.turn_off()
elif pw == 'off' :
sb_plug.turn_on()
このプログラムを、homebridge-cmdswitch2 の設定に加える。
{
"platform": "cmdSwitch2",
"name": "cmdSwitch2",
"switches": [
{
"name": "電気毛布",
"on_cmd": "/usr/local/bin/switchbot-plug.py on",
"off_cmd": "/usr/local/bin/switchbot-plug.py off",
"state_cmd": "/usr/local/bin/switchbot-plug.py status"
}
]
}
ということで、「OK Google, 電気毛布を点ける」でON、朝は起床時間にあわせたタイマーでOFF完成。










