目次
原神プレイヤーなら誰もが一度は通る「3大やらかし」があります。
- 「樹脂があふれていた(満タン放置)」
- 「デイリー4つ終わったのに、キャサリンに報告し忘れた」
- 「HoYoLABのWebログボを押し忘れていた」
公式のスマホウィジェットから確認できるらしいのですが、PCで作業やゲームをしている最中に「いちいちスマホのロックを解除して確認する」のは面倒です。
というわけで、Homelab(Home Assistant)とLinuxデスクトップ(Conky)を連携させて、「原神の全プレイ状況+次期バージョンまでの秒単位カウントダウン」を常時監視できるデスクトップHUDを作りました。というかGemini先生に作ってもらいました。この記事もAIに備忘録としてまとめてもらったものです。
デスクトップに表示されている内容
サブモニター(縦置きディスプレイ)の右上に常駐しているHUDです。原神だけでなく、自室のスマートホームや宇宙天気、サーバーの稼働状態まで1つの画面にまとめています。

1. GENSHIN IMPACT(今回の主役)
- 天然樹脂 (110 / 200, 55%): 現在の樹脂量、視覚的なゲージバー、そして「本日22:57満タン」という正確な予測時刻。
- 洞天宝銭 (2400/2400): 塵歌壺の宝銭蓄積量。満タン放置によるロスを防止。
- 探索派遣 (2/5 完了): キャラクターの派遣完了状況。
- デイリー (0/4): 本日のデイリー依頼消化数。4/4完了かつキャサリン未報告の場合は赤く光って警告してくれます。
- 週ボス半額 (3回): 週ボス樹脂半額(30消費)の今週の残り回数。
- Webログボ (受取済): 本日分のHoYoLABログインボーナスを受け取ったかどうか。未受取なら赤色で通知。
- Ver.7.2まで (01:19:57:13): 次期バージョンアップデート(メンテ開始)までの秒単位カウントダウン。満了すると自動で次のバージョン(42日後)へ繰り上がります。
2. HOME & ENVIRONMENT(生活・自室環境)
- 外気/天気 (晴時々曇 17.3℃): 自宅周辺のリアルタイムな気象情報。
- iPhone (70%): iPhoneのバッテリー残量。充電中は雷マーク(⚡)が点灯します。
- 自室環境 (26.4℃ / 39% / 1012hPa / 521 ppm): BME680とPTH-9CWセンサーで計測した室温・湿度・気圧・CO2濃度。適正範囲を中心とした5段階でそれぞれ独立して色分け(青・水色・白・橙・赤)されます。
- しゃわキャン (封鎖中 YouTube): 「シャワーを浴びるまでYouTube等の娯楽サイトをDNS/プロキシレベルで封鎖する」自作の生活改善システム。
- ノエルAI (稼働中): 自宅で常駐稼働しているノエルさんAIエージェント(Style-Bert-VITS2音声連携)のステータス。
- Homelab (ALL GREEN): 自宅ラックで稼働中のサーバー群の死活監視。
3. SATELLITE & SPACE(おまけ)
- 次期迎撃 (METEOR-M2 4 / 本日13:44 El 63.7°): ロシアの気象衛星やNOAA衛星が自宅上空を通過するパス予測。SDR(ソフトウェアラジオ)による自動電波受信・雲画像復元と連動しています。
- 宇宙天気 (SFI 94 / Kp 2 静穏 / 電離層: 安定): 太陽活動(10.7cm電波流束)と地磁気活動(Kp指数)。無線通信や衛星受信のコンディション確認用。
はじめに
本記事で紹介する外部API連携や自動化の試行は自己責任でお願いします。この記事に従ったことでアカウント停止(BAN)等のいかなる不利益を被ったとしても、当方は責任を負いません!!!
規約とリスクについて
HoYoverseの利用規約では、自動化ツールや非公式スクリプトの使用について以下のように触れられています。
- 外部ツール(BOT)もしくはCOGNOSPHERE PTE. LTD. から公式に提供していないプログラムを使用し、自分が有利にゲーム進行し、もしくは正常なサービス利用を妨げる行為。
今回の仕組みは、ゲーム本体のメモリ改ざんやパケット傍受、チート行為とは全く異なります。あくまで「公式Webサイト(HoYoLAB)がスマホアプリ向けに返しているリアルタイム便覧のJSON」を、自分の認証Cookie(ltuid_v2 / ltoken_v2)を使って取得している形です。
海外フォーラム等を含めて調査した限り、この手のWeb API(便覧データ)の閲覧取得のみを理由としてゲームアカウントがBANされた事例は確認されていません(Home Assistantの原神インテグレーション等も世界中で広く使われています)。
ただし、「規約の文面を厳密に解釈すればグレーゾーンである」 ことには変わりありません。特にAPIに対して短時間に過剰なリクエストを送ったりすると、CAPTCHA(パズル認証)に引っかかったり、アクセス制限(Risk Error / 403)を食らうリスクがあります。
そのため、今回は「公式サーバーに極力負荷をかけず、安全第一で運用するためのアーキテクチャ」を意識して構築しました。
繰り返しますが、試す場合は必ず自己責任でお願いします。
全体アーキテクチャ
システム全体の連携構成は以下のようになっています。
[HoYoLAB Web API] │ │ (10分に1回だけ同期・負荷最小化) ▼[Homelab: Lumine (LXC)] - Python (genshin.py) による定期取得 (genshin-sync.timer) - 毎日04:05のWebログボ自動回収 (daily-claim.timer) │ │ (REST API プッシュ) ▼[Home Assistant (HA)] - 各種センサー (天然樹脂, 洞天宝銭, デイリー, 派遣, ログボ等) の集約 - 自室の温湿度・CO2・気象衛星迎撃予測などと同じハブで統合管理 │ │ (LAN内ポーリング) ▼[Linux Mint デスクトップ] - ha_fetcher.py: 1秒ループでブロック生成 ├─ クライアント側で樹脂の「8分毎自動回復」を線形補間 ├─ キャサリン未受取・Webログボのアラート着色 └─ 次期バージョンまでの秒単位カウントダウン (42日周期ロールオーバー) │ ▼[Conky HUD (DP-0 縦型サブモニター右上)] - 1.0秒間隔で描画こだわりポイント
1. API制限・BAN対策のための「クライアント側8分自動補間」
天然樹脂は「8分に1回復」します。 これをConky上でリアルタイムに数字を増やしたいからといって、1分おきや秒単位でHoYoLABのAPIを叩きまくるのは非常に危険(即BANやIPブロック対象)です。
そこで、APIを叩くのは 「10分に1回(Homelab側のsystemd timer)」 だけに留めました。
その代わり、Conky側のフェッチャースクリプトで、APIから返ってきた recovery_time(満タン予測時刻)と現在時刻の差分から、「今この瞬間、樹脂がいくつまで回復しているはずか」を数学的に逆算(線形補間)しています。
def interpolate_resin(resin_base, resin_max, recovery_time_full): if not recovery_time_full: return resin_base try: recovery_dt = datetime.strptime(recovery_time_full, "%Y-%m-%d %H:%M").replace(tzinfo=JST) now = datetime.now(JST) rem_sec = (recovery_dt - now).total_seconds() if rem_sec <= 0: return resin_max # 8分 (480秒) ごとに1回復 needed = math.ceil(rem_sec / 480.0) calc_val = resin_max - needed return max(resin_base, min(resin_max, calc_val)) except Exception: return resin_baseこれにより、公式サーバーへの通信は最小限に抑えつつ、画面上では8分経つごとにリアルタイムに樹脂の数値とゲージバーが増えるという、安全かつ快適な挙動を実現できました。
2. キャサリン報告忘れ(原石20個の損失)を防ぐアラート判定
デイリー依頼を4つ消化しても、キャサリンに追加報酬(原石×20個)を受け取り忘れて日をまたいでしまうのは、全旅人のトラウマです。
APIのレスポンスには、依頼完了数(4/4)だけでなく claimed_commission_reward(キャサリンから報酬を受け取ったかどうかの真偽値) が含まれています。
これを利用して、Conky上で色分けアラートを設定しました。
- 4/4 完了 & 受取済 → 緑色で
4/4 (受取済)(OK) - 4/4 完了 & 未受取 → 赤色で
4/4 (未受取)(今すぐ行け) - 進行中 → 通常の白色
def format_commissions(comm_state_str, claimed_reward): try: if "/4" in str(comm_state_str): done = str(comm_state_str).split("/")[0].strip() if done == "4": if claimed_reward: return "${color3}4/4 (受取済)${color}" # 緑 else: return "${color4}4/4 (未受取)${color}" # 赤 (警告) return f"${{color}}{comm_state_str}${{color}}" except Exception: return f"${{color}}{comm_state_str}${{color}}"視界の端が赤く光るので、受取忘れが物理的に完全にゼロになりました。
3. 次期バージョンまでの「秒単位カウントダウン」と自動ロールオーバー
次期バージョン(現在はVer.7.2)への秒読みカウントダウンも設置しました。
これまではバージョンアップ状況は全く気にならなかったのですが、ついに実装に追いついたので、次のバージョンが待ち遠しくなったためです。また、どうやら次のバージョンでは42日後にテイワットが滅亡するみたいなので、その意識を持っておくためです。
Conkyの更新間隔を update_interval = 1.0 に設定し、ha_fetcher.py のメインループも1秒おきに差分を計算することで、画面上で秒針のように dd:hh:mm:ssが滑らかにカウントダウンします。(残り24時間を切ると橙色、残り1時間を切ると赤色で強調されます)
原神のアップデートは基本的に 「42日間(6週間)周期」 で規則正しく水曜日に実施されます。
カウントダウンが 00:00:00:00 を迎えたら、手動で日時を直さなくても自動で42日後を加算し、バージョン表記もインクリメントするようにしました。
# 自動ロールオーバー: ターゲット時刻を過ぎたら42日加算して次期バージョンへ繰り上げwhile target_dt <= now: target_dt += timedelta(days=cycle_days) if "Ver." in version_name: parts = version_name.replace("Ver.", "").strip().split(".") major, minor = int(parts[0]), int(parts[1]) minor += 1 if minor >= 9: major += 1 minor = 0 version_name = f"Ver.{major}.{minor}"これでメンテナンス突入と同時に、自動的に「Ver.7.3まで」の新しいカウントダウンが始まります。
実際のConky設定と見栄え
Conky全体のカラーパレットは、Catppuccin Mocha調(サイバーパンク風のネオンカラー)で統一しています。
-- Typography & Colors (Noto Sans CJK JP)default_color = '#cdd6f4', -- 白 (正常)color1 = '#00e5ff', -- ネオンシアン (ヘッダー)color2 = '#89b4fa', -- ソフトブルー (ラベル)color3 = '#a6e3a1', -- ミントグリーン (良好・正常)color4 = '#f38ba8', -- コーラルレッド (警告・未受取)color5 = '#fab387', -- アンバー (注意・カウントダウン)color6 = '#cba6f7', -- ライラックパープル (補助)原神メトリクスだけでなく、自室の温湿度(BME680)やCO2濃度(PTH-9CW)、気象衛星(METEOR-M2)の迎撃時刻、Homelabサーバー群の死活監視(ALL GREEN)がすべて縦一列に並んでいる様子は、まさに「パーソナル指令室」といった趣があって毎日眺めるのが楽しいです。
おわり
以上、Home AssistantとConkyを組み合わせた「原神プレイ状況HUD」の構築記録でした。
スマホをわざわざ開かなくても、PC作業中にふと目をやるだけで「あ、樹脂そろそろ溢れそう」「キャサリンに報告しなきゃ」「あと1日でアプデだ」と直感的に把握できるのは、なかなか便利です。
最後にもう一度念を押しますが、外部APIの利用やトークンの取り扱い(Gitに絶対にコミットしない等)はくれぐれも自己責任でお願いします。
一部の情報は古くなっている可能性があります




