hsbox上にproxyを構築する手順

太陽光発電のモニタリングサービスが終了するため、データ取得を検討中です。このデータ取得のために、proxyを構築します。 誰でも簡単に導入できるようにするためにここでは、hsbox(無料版:freebox)上に構築してみます。

どのような構成にするのかは、過去の記事を参考にしてください。ここでは、hsboxに構築する手順に特化して記載します。

0.前準備

hsboxを構築する手順はここでは省きます。本家サイトの記事か、Vectorサイトのドキュメント入りアーカイブを参照してください。
有償版は、GUIから操作できるなど操作性が上がりますが、ここでは無償版でも使える機能をベースに記載します。

1.プロキシのインストール

hsbox1.3は、python3環境を構築済みなので、プロキシのインストールからはじめます。

■1. hsboxに、sshでログインします。  *参考:本家サイト
  ホームディレクトリ /hone/hsbox に移動。

■2. mitmproxy をインストール
pip3 install --user mitmproxy

■3. 実行パスを通す
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

■4. スクリプト等配置用のディレクトリ作成
mkdir /home/hsbox/pyd

2. mitmproxy 用解析・保存スクリプトを配置(仮版)

■/home/hsbox/pyd/fm_capture.py  を配置  (内容は以下)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File: ~/fm_capture.py

import json
import os
from datetime import datetime
from mitmproxy import http
from mitmproxy import ctx

DATA_DIR = "/home/hsbox/fm_data"   # ← 自分のホームに合わせて変更
os.makedirs(DATA_DIR, exist_ok=True)

def response(flow: http.HTTPFlow):
    # フロンティアモニターの送信先だけを対象にする
    if "frontier-monitor.com" not in flow.request.pretty_host:
        return

    if flow.request.path.startswith("/upload/data.php"):  # 実際のURLに合わせて調整可
        try:
            # POSTされたJSONを取得
            raw = flow.request.get_text()
            data = json.loads(raw)

            # タイムスタンプを付与(モニターの時刻を優先)
            timestamp = data.get("timestamp", datetime.now().isoformat())

            # 1. 生JSONを保存(デバッグ用)
            raw_file = f"{DATA_DIR}/raw_{timestamp.replace(':', '-')}.json"
            with open(raw_file, "w") as f:
                f.write(raw)

            # 2. 最新データを上書き保存
            latest_file = f"{DATA_DIR}/latest.json"
            with open(latest_file, "w") as f:
                json.dump(data, f, indent=2)

            # 3. SQLiteに挿入(初回はテーブル自動作成)
            import sqlite3
            db_path = f"{DATA_DIR}/fm_data.db"
            conn = sqlite3.connect(db_path)
            cur = conn.cursor()
            cur.execute("""
                CREATE TABLE IF NOT EXISTS power (
                    ts TEXT PRIMARY KEY,
                    generation INTEGER,
                    consumption INTEGER,
                    grid_buy INTEGER,
                    grid_sell INTEGER,
                    temperature REAL,
                    status INTEGER
                )
            """)
            cur.execute("""
                INSERT OR REPLACE INTO power VALUES (?, ?, ?, ?, ?, ?, ?)
            """, (
                timestamp,
                data.get("generation"),
                data.get("consumption"),
                data.get("grid_buy"),
                data.get("grid_sell"),
                data.get("temperature"),
                data.get("status")
            ))
            conn.commit()
            conn.close()

            ctx.log.info(f"[FM] データ保存成功 → {timestamp}")
        except Exception as e:
            ctx.log.error(f"[FM] エラー: {e}")

3. systemd サービスファイル

[Unit]
Description=Frontier Monitor Transparent Proxy
After=network.target
Wants=network.target

[Service]
Type=simple
User=hsbox
Environment="PATH=/home/hsbox/.local/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/home/hsbox/.local/bin/mitmdump --mode regular --listen-host 0.0.0.0 --listen-port 8080 --script /home/hsbox/pyd/fm_capture.py --quiet
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

※ファイルの書き込みはいろいろありますが、ルート権限で上書きcat するのか簡単でしょう。

4. 設定反映と起動

# ファイルを反映
sudo systemctl daemon-reload

# 自動起動設定+今すぐ起動
sudo systemctl enable fm-mitmproxy.service
sudo systemctl start fm-mitmproxy.service

# 状態確認
sudo systemctl status fm-mitmproxy.service
journalctl -u fm-mitmproxy.service -f # リアルタイムログ

参考

statusでの確認で、起動していれば次のように”active (running)”が表示されます

root@hsbox:~# sudo systemctl status fm-mitmproxy.service
● fm-mitmproxy.service - Frontier Monitor Transparent Proxy
Loaded: loaded (/etc/systemd/system/fm-mitmproxy.service; enabled; vendor >
Active: active (running) since Sun 2025-11-23 15:29:08 JST; 1 day 7h ago
Main PID: 135951 (mitmdump)
Tasks: 2 (limit: 4378)
Memory: 46.0M
CPU: 1min 2.732s
CGroup: /system.slice/fm-mitmproxy.service
mq135951 /usr/bin/python3 /home/hsbox/.local/bin/mitmdump --mode r>

11月 23 15:29:08 hsbox systemd[1]: Started Frontier Monitor Transparent Proxy.

動作確認

■curlで、 動作検証します。
curl -x http://<プロキシが動作するhsboxのIP>:8080 http://mic.or.jp/

例:
curl -x http://192.168.1.10:8080 http://mic.or.jp/

※とりあえず、確認できるのはhttpのみ、 httpsは次のステップです。

関連記事