エアコン配管用パテ(白)200g - オーム(OHM)

オーム(OHM)

5.0 / 5.0

外側のエアコンのパテが割れきっていて劣化がひどいので盛りなおした。200gのパテを2つ(400g)使った。

内側も割れてるんだけど、こちらは新しくせず既存のを取り外さずに屋内用の穴うめパテでとりあえず埋めた。

サイネージ HDMI CEC 連携

カレンダーを表示するおうちサイネージ というのを作っていたがモニタの置き場がなくなってしまったので、テレビ画面に映すことにしてみた。

Google TV と Switch でしか使わないので、普段は基本的に Google TV のリモコンで操作している。しかし Raspberry Pi の HDMI を繋いで外部入力をそちらにすると、Google TV のリモコンからの操作 (HDMI CEC信号) をテレビ(SONY BRAVIA)が無視するという困った挙動になった。

試行錯誤してみると Raspberry Pi を HDMI CEC デバイスとして単に参加させる (以下のように)と、他の機器の CEC 信号も無視しなくなるようだった。

# 再生デバイスとして CEC デバイスのネットワークに参加
 cec-ctl --playback

他のデバイスのCEC信号を受けて自動表示

ここまではいいとして、カレンダーアプリはある程度自動的に起動してくれないと見ないため、Google TV のリモコンから電源をオフにすると、自動的に Raspberry Pi のカレンダーを表示する、という挙動にしたくなった。cec-ctl --monitor で HDMI CEC のイベントをストリーム取得できるようなので、これを利用してフックし、他の機器からのSTANDBYがきたら、Raspberry Pi 側に画面を切り替えるという処理を入れた。

 #!/usr/bin/env python3
 import subprocess
 import time
 import re
 import sys
 
 # ====== 設定値 ======
 CEC_ADAPTER_INIT_CMD = ["/usr/bin/cec-ctl", "--playback"]
 CEC_MONITOR_CMD = ["/usr/bin/cec-ctl", "--monitor"]
 TV_ON_CMDS = [
     ["/usr/bin/cec-ctl", "--to", "0", "--image-view-on"],
     ["/usr/bin/cec-ctl", "--to", "0", "--active-source", "phys-addr=4.0.0.0"]
 ]
 DEBUG = True
 # ====================
 
 
 def log(msg):
     """ログ出力(デバッグ時のみ)"""
     if DEBUG:
         print(f"[{time.strftime('%H:%M:%S')}] {msg}", flush=True)
 
 
 def run_cmd(cmd):
     """単発コマンド実行"""
     try:
         subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
         log(f"Executed: {' '.join(cmd)}")
     except subprocess.CalledProcessError as e:
         log(f"Command failed: {cmd} ({e})")
 
 
 def main():
     log("Initializing CEC adapter...")
     run_cmd(CEC_ADAPTER_INIT_CMD)
 
     log("Starting CEC monitor...")
     proc = subprocess.Popen(
         CEC_MONITOR_CMD,
         stdout=subprocess.PIPE,
         stderr=subprocess.STDOUT,
         text=True
     )
 
     last_device_standby = 0
 
     try:
         for line in proc.stdout:
             line = line.strip()
             if not line:
                 continue
 
             # 他のデバイスが STANDBY 送信
             if re.search(r"Received from Playback Device", line) and "STANDBY" in line:
                 log("Detected STANDBY from another playback device")
                 time.sleep(3)
                 for cmd in TV_ON_CMDS:
                     run_cmd(cmd)
 
     except KeyboardInterrupt:
         log("Interrupted by user")
     finally:
         proc.terminate()
         log("Monitor stopped")
 
 
 if __name__ == "__main__":
     if sys.version_info < (3, 6):
         print("Python 3.6+ is required", file=sys.stderr)
         sys.exit(1)
     main()

これを systemd にいれておく

sudo vi /etc/systemd/system/cec-init.service
 [Unit]
 Description=Configure HDMI CEC playback mode
 After=graphical.target
 Wants=graphical.target
 
 [Service]
 Type=oneshot
 ExecStart=/home/pi/cec.py
 RemainAfterExit=true
 
 [Install]
 WantedBy=multi-user.target
 sudo systemctl daemon-reload
 sudo systemctl enable cec-init.service
 sudo systemctl start cec-init.service
 
 sudo systemctl status cec-init.service 
 ● cec-init.service - Configure HDMI CEC playback mode
      Loaded: loaded (/etc/systemd/system/cec-init.service; enabled; preset: enabled)
      Active: activating (start) since Sat 2025-10-18 14:59:08 JST; 11min ago
    Main PID: 2820 (python3)
       Tasks: 2 (limit: 754)
         CPU: 371ms
      CGroup: /system.slice/cec-init.service
              ├─2820 python3 /home/pi/cec.py
              └─2823 /usr/bin/cec-ctl --monitor
 
 Oct 18 14:59:08 sinage systemd[1]: Starting cec-init.service - Configure HDMI CEC playback mode...
 Oct 18 14:59:08 sinage cec.py[2820]: [14:59:08] Initializing CEC adapter...
 Oct 18 14:59:09 sinage cec.py[2820]: [14:59:09] Executed: /usr/bin/cec-ctl --playback
 Oct 18 14:59:09 sinage cec.py[2820]: [14:59:09] Starting CEC monitor...
 Oct 18 15:00:42 sinage cec.py[2820]: [15:00:42] Detected STANDBY from another playback device
 Oct 18 15:00:45 sinage cec.py[2820]: [15:00:45] Executed: /usr/bin/cec-ctl --to 0 --image-view-on
 Oct 18 15:00:45 sinage cec.py[2820]: [15:00:45] Executed: /usr/bin/cec-ctl --to 0 --active-source phys-addr=4.0.0.0
 Oct 18 15:08:43 sinage cec.py[2820]: [15:08:43] Detected STANDBY from another playback device
 Oct 18 15:08:46 sinage cec.py[2820]: [15:08:46] Executed: /usr/bin/cec-ctl --to 0 --image-view-on
 Oct 18 15:08:46 sinage cec.py[2820]: [15:08:46] Executed: /usr/bin/cec-ctl --to 0 --active-source phys-addr=4.0.0.0
  1. トップ
  2. tech
  3. Raspberry Pi から HDMI-CEC コントロール

子どもがデカくなってきており集中して勉強できる「子ども部屋」が必要なのではないかという話になった。引っ越しも検討したけど、学区や家賃の問題があり、なんとか高校入学まではこのままでいけないかということに。

ということで自宅内のリレイアウト(模様替え)だけで「子ども部屋」を捻出することに。

基本要件

  • 子どもが寝るベッドを分ける
  • 勉強できるスペースをつくる

基本方針 (スペースの捻出)

  • ダイニングテーブルをなくし、リビングと食事スペースを統合する
  • その分のスペースを活用できるようにすべての要素を再配置する


事前に家具と間取りを Fusion (3Dモデリングソフト) でモデリングし、なんとか良い配置にならないか机上で試行錯誤してから着手した。だいたい1~2ヶ月ぐらいかけてマイグレーションしていった

フェーズ0

作業前

  • ダイニング: 部屋A
  • 仕事部屋: 部屋B
  • リビング: 部屋B
  • 寝室(子ども): 部屋C
  • 寝室(親): 部屋C

フェーズ1

ダイニングテーブルの廃棄とリビングの再配置

  • ダイニングテーブルの廃棄・椅子の廃棄
    • でかすぎるものは粗大。椅子はちょっと破壊して普通ごみ
  • リビングスペースの移設
    • テレビ台など
      • 放送設備は壊れていて見れない(見ない)ので配線を削除

一時的にローテーブルとアイロン台で食事をとるということに (のちに折り畳み式のローテーブルを買う)

  • リビング: 部屋A (ダイニング統合消滅)
  • 仕事部屋: 部屋B
  • 空きスペース: 部屋B
  • 寝室(子ども+親): 部屋C

フェーズ2

ベッドの移動。シングルベッド+セミダブルベッドを並べて3人で寝ていたのを、独立させる。(シングルベッドに子どもを寝かす予定だが、一旦自分がシングルに寝る)

  • リビング: 部屋A
  • 仕事部屋: 部屋B
  • 寝室(自分): 部屋B
  • 寝室(子ども+母親): 部屋C

フェーズ3

寝室にあった子どもの机と棚の移動。一旦リビングに移動

寝室にスペースができる。

  • リビング: 部屋A
  • 仕事部屋: 部屋B
  • 寝室(自分): 部屋B
  • 寝室(子ども+母親): 部屋C
  • 空きスペース: 部屋C

フェーズ4

寝室へ自分の作業机などをすべて移動

  • 寝室が仕事部屋になる
  • 壁柱などの移動があるのでかなり大変
  • リビング: 部屋A
  • 寝室(自分): 部屋B
  • 空きスペース: 部屋B
  • 寝室(子ども+母親): 部屋C
  • 仕事部屋: 部屋C

フェーズ5

「子ども部屋」の構築

3Dプリンタなどの移設。これはもともとあった部屋に残すのですこし位置をずらすだけ、、だけどベッドなどの兼ね合いで割と大変

子ども机を新たに買って、今までのものは棚として再配置し、勉強スペースを作る

  • リビング: 部屋A
  • 寝室(自分): 部屋B
  • 勉強机: 部屋B
  • 寝室(子ども+母親): 部屋C
  • 仕事部屋: 部屋C

部屋Bの半分ぐらいが「子ども部屋」として機能するように。ただまだ自分が「子ども部屋」のベッドで寝ている状態。タイミングをみて寝る場所を入れ替える。

2021年から使っているNASのHDDの音が気になるようになってしまった。作業部屋を移動したからかもしれないがなんとかすることに。

玄関に追い出す

箱に入れるとかも考えたが、同じ部屋に置いておくのは無理という結論にいたり、玄関に置き場所を確保した。

そのうえで 10Gbps の LAN をどうするかという問題に対処することに。

10Gbps 接続の選択肢

今までは 1m の DAC (ダイレクトアタッチケーブル) を使っていたが、玄関まで配線しようとすると 7m ぐらい必要。あんまり長い DAC よくなさそうだし高いので、この時点で排除して2択

  • AOC (Active Optical Cable)
    • 両端 SFP+ でケーブルは光ファイバ。光コネクタがなくて直結している。DACみたいに使える
    • 若干安い
  • 10GBASE-SR トランシーバ×2 + 光ファイバーケーブル
    • 一番汎用性が高い。光コネクタとかを理解する必要がある

一応 10GBASE-T のトランシーバ×2 + CAT6 LAN ケーブルという選択肢もあるかもだけど、消費電力は高いしコストも高いし信頼性も低いので新規導入では選択肢に入らないと思う。

結論としては 10GBASE-SR にした。

10GBASE-SR と光コネクタと光ファイバー

10GBASE-SR の SR は Short Range の略。MMF(マルチモードファイバー)というコアが比較的太くて機械的精度要求が低い光ファイバーを使い、300mぐらいまでの通信に使えるものらしい。意外とコスト低め。家庭内では十分

SFP+ の場合、光コネクタは LC を使うのがデファクトスタンダードらしい。

光ファイバーは OM3、OM4、OM5 などがマルチモードファイバーの規格名のようだ。数字が大きいほど性能が良いが、OM3でも十分なので一番安いのを選べばよい。つまり LC/LC OM3 となっている光ファイバーを買えばいい。

光ファイバーケーブルの接続

送受信で別々のファイバーを使うので、2本必要。duplex と書かれたものを買う。両端でペアになるように部品がついている。そしてペアのどっちがどっちのケーブルかわかるようになっている。そしてこれらはクロス接続する必要がある。

ただ今回買った光ファイバーは最初からクロス接続になるように配線されていた。買ってそのまま挿せばいいだけだった。

問題なくおわった

何もハマることなくすんなり接続できた。SFP+ はベンダーロックとかがあったりするので不安要素が多いのだけど、今回は大丈夫だった。

光ファイバーは最小曲げ半径が 7.5mm らしく意外を曲げられるようだ? しかしなんとなく銅線よりも取り回しに気をつかってしまう。

これで電気的に絶縁されて接続されてると思うと気分が良い

  1. トップ
  2. tech
  3. NASの10Gbps接続を10GBASE-SR(光ファイバー)に