{"id":57,"date":"2026-06-08T20:11:22","date_gmt":"2026-06-08T11:11:22","guid":{"rendered":"https:\/\/fideafact.ddns.net\/?p=57"},"modified":"2026-06-08T20:11:38","modified_gmt":"2026-06-08T11:11:38","slug":"raspberrypi-zero-w2-%e7%9b%a3%e8%a6%96%e3%83%bb%e8%87%aa%e5%8b%95%e5%be%a9%e6%97%a7%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0-%e3%81%be%e3%81%a8%e3%82%81","status":"publish","type":"post","link":"https:\/\/fideafact.ddns.net\/?p=57","title":{"rendered":"RaspberryPi Zero W2 \u76e3\u8996\u30fb\u81ea\u52d5\u5fa9\u65e7\u30b7\u30b9\u30c6\u30e0 \u307e\u3068\u3081"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u30b7\u30b9\u30c6\u30e0\u69cb\u6210<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u5668<\/th><th>IP\u30a2\u30c9\u30ec\u30b9<\/th><th>\u5f79\u5272<\/th><\/tr><\/thead><tbody><tr><td>RaspberryPi (\u76e3\u8996\u5074)<\/td><td>192.168.11.22<\/td><td>\u76e3\u8996\u30fb\u5236\u5fa1<\/td><\/tr><tr><td>RaspberryPi Zero W2<\/td><td>192.168.11.50<\/td><td>\u76e3\u8996\u5bfe\u8c61\uff08\u6e29\u6e7f\u5ea6\u8a08\u6e2c\uff09<\/td><\/tr><tr><td>TP-Link Tapo \u30b9\u30de\u30fc\u30c8\u30d7\u30e9\u30b0<\/td><td>192.168.11.52<\/td><td>Zero W2\u306e\u96fb\u6e90\u5236\u5fa1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u52d5\u4f5c\u30d5\u30ed\u30fc<\/h3>\n\n\n\n<pre class=\"wp-block-code has-vivid-green-cyan-color has-text-color has-link-color wp-elements-e343cc521cc02c15c1ee31e75bb8fb19\"><code>30\u79d2\u3054\u3068\u306bPing\u76e3\u8996\n        \u2193\n  3\u56de\u9023\u7d9a\u5931\u6557\uff1f\n        \u2193 YES\n  \ud83d\udce7 \u30e1\u30fc\u30eb\u300c\u30c0\u30a6\u30f3\u691c\u51fa\u300d\u9001\u4fe1\n        \u2193\n  SSH reboot \u8a66\u884c\n     \u2193           \u2193\n   \u6210\u529f         \u5931\u6557\n  60\u79d2\u5f85\u6a5f   \ud83d\udce7 \u30e1\u30fc\u30eb\u300cTapo\u96fb\u6e90\u30b5\u30a4\u30af\u30eb\u5b9f\u884c\u300d\n               Tapo\u96fb\u6e90OFF(5\u79d2)\u2192ON\n               60\u79d2\u5f85\u6a5f\n                  \u2193\n            \u5fa9\u65e7\u78ba\u8a8d\n          \u2193               \u2193\n        \u5fa9\u65e7           \u307e\u305f\u5931\u6557\n  \ud83d\udce7\u300c\u5fa9\u65e7\u3057\u307e\u3057\u305f\u300d  \ud83d\udce7\u300c\u624b\u52d5\u5bfe\u5fdc\u304c\u5fc5\u8981\u300d<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u30d5\u30a1\u30a4\u30eb\u69cb\u6210<\/h3>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-f18f7ab94e60130fa725487f095b08a6\"><code>\/home\/zero\/scripts\/\n\u251c\u2500\u2500 monitor_zero.py       # \u76e3\u8996\u30b9\u30af\u30ea\u30d7\u30c8\u672c\u4f53\n\u2514\u2500\u2500 zero_monitor.log      # \u52d5\u4f5c\u30ed\u30b0\n\n\/etc\/systemd\/system\/\n\u2514\u2500\u2500 zero-monitor.service  # systemd\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e3b\u8981\u8a2d\u5b9a\u5024\uff08monitor_zero.py\uff09<br>~\/scripts\/monitor_zero.py\u306b\u66f8\u304d\u8fbc\u307f<\/h3>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-a6359b1ba3e7f68e22b36eebd2d6f0fe\"><code>#!\/usr\/bin\/env python3\n# monitor_zero.py\n\nimport subprocess\nimport time\nimport logging\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\nfrom datetime import datetime\nfrom tapo import ApiClient  # pip3 install tapo\n\n# =====================\n# === \u8a2d\u5b9a\u30a8\u30ea\u30a2 ===\n# =====================\n\n# --- Zero W2 ---\nZERO_IP       = \"192.168.11.50\"   # Zero W2\u306e\u56fa\u5b9aIP\nZERO_USER     = \"zero\"            # Zero W2\u306eSSH\u30e6\u30fc\u30b6\u30fc\u540d\n\n# --- \u76e3\u8996\u30d1\u30e9\u30e1\u30fc\u30bf ---\nCHECK_INTERVAL  = 30   # \u76e3\u8996\u9593\u9694\uff08\u79d2\uff09\nPING_TIMEOUT    = 5    # ping\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\uff08\u79d2\uff09\nFAIL_THRESHOLD  = 3    # \u9023\u7d9a\u5931\u6557\u56de\u6570\u3067\u30ea\u30ab\u30d0\u30ea\u958b\u59cb\nBOOT_WAIT_SEC   = 60   # \u518d\u8d77\u52d5\u5f8c\u306e\u5f85\u6a5f\u6642\u9593\uff08\u79d2\uff09\nPOWER_OFF_SEC   = 5    # \u96fb\u6e90OFF\u4fdd\u6301\u6642\u9593\uff08\u79d2\uff09\n\n# --- Tapo \u30b9\u30de\u30fc\u30c8\u30d7\u30e9\u30b0 ---\nTAPO_IP       = \"192.168.11.52\"          # Tapo\u30d7\u30e9\u30b0\u306eIP\nTAPO_EMAIL    = \"your@email.com\"          # Tapo\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30e1\u30fc\u30eb\nTAPO_PASSWORD = \"your_tapo_password\"      # Tapo\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\n\n# --- \u30e1\u30fc\u30eb\u901a\u77e5 ---\nSMTP_HOST     = \"smtp.gmail.com\"          # SMTP\u30b5\u30fc\u30d0\u30fc\nSMTP_PORT     = 587\nSMTP_USER     = \"your@gmail.com\"          # \u9001\u4fe1\u5143\u30e1\u30fc\u30eb\nSMTP_PASSWORD = \"your_app_password\"       # Gmail\u30a2\u30d7\u30ea\u30d1\u30b9\u30ef\u30fc\u30c9\nMAIL_TO       = \"alert@example.com\"       # \u901a\u77e5\u5148\u30e1\u30fc\u30eb\n\n# --- \u30ed\u30b0 ---\nLOG_FILE = \"\/home\/zero\/scripts\/zero_monitor.log\"\n\n# =====================\n\nlogging.basicConfig(\n    filename=LOG_FILE,\n    level=logging.INFO,\n    format='%(asctime)s %(levelname)s %(message)s'\n)\n\ndef log(msg: str, level=\"info\"):\n    print(f\"&#91;{datetime.now().strftime('%H:%M:%S')}] {msg}\")\n    getattr(logging, level)(msg)\n\n# ---------- Ping ----------\ndef ping(ip: str) -> bool:\n    result = subprocess.run(\n        &#91;\"ping\", \"-c\", \"1\", \"-W\", str(PING_TIMEOUT), ip],\n        capture_output=True\n    )\n    return result.returncode == 0\n\n# ---------- SSH\u518d\u8d77\u52d5 ----------\ndef ssh_reboot() -> bool:\n    try:\n        result = subprocess.run(\n            &#91;\"ssh\",\n             \"-o\", \"ConnectTimeout=5\",\n             \"-o\", \"StrictHostKeyChecking=no\",\n             f\"{ZERO_USER}@{ZERO_IP}\",\n             \"sudo reboot\"],\n            capture_output=True, timeout=10\n        )\n        return result.returncode == 0\n    except Exception as e:\n        log(f\"SSH reboot\u5931\u6557: {e}\", \"error\")\n        return False\n\n# ---------- Tapo\u96fb\u6e90\u5236\u5fa1 ----------\nasync def tapo_power_cycle():\n    try:\n        client = ApiClient(TAPO_EMAIL, TAPO_PASSWORD)\n        device = await client.p105(TAPO_IP)  # P115\u306e\u5834\u5408\u306f p115()\n\n        log(\"Tapo: \u96fb\u6e90OFF\")\n        await device.off()\n        time.sleep(POWER_OFF_SEC)\n\n        log(\"Tapo: \u96fb\u6e90ON\")\n        await device.on()\n        return True\n    except Exception as e:\n        log(f\"Tapo\u5236\u5fa1\u5931\u6557: {e}\", \"error\")\n        return False\n\n# ---------- \u30e1\u30fc\u30eb\u901a\u77e5 ----------\ndef send_mail(subject: str, body: str):\n    try:\n        msg = MIMEMultipart()\n        msg&#91;\"From\"]    = SMTP_USER\n        msg&#91;\"To\"]      = MAIL_TO\n        msg&#91;\"Subject\"] = subject\n\n        msg.attach(MIMEText(body, \"plain\", \"utf-8\"))\n\n        with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as server:\n            server.starttls()\n            server.login(SMTP_USER, SMTP_PASSWORD)\n            server.sendmail(SMTP_USER, MAIL_TO, msg.as_string())\n\n        log(f\"\u30e1\u30fc\u30eb\u9001\u4fe1\u6210\u529f: {subject}\")\n    except Exception as e:\n        log(f\"\u30e1\u30fc\u30eb\u9001\u4fe1\u5931\u6557: {e}\", \"error\")\n\n# ---------- \u30e1\u30a4\u30f3\u30eb\u30fc\u30d7 ----------\nimport asyncio\n\nasync def main():\n    fail_count    = 0\n    alerted       = False  # \u9023\u7d9a\u30a2\u30e9\u30fc\u30c8\u3092\u9632\u3050\u30d5\u30e9\u30b0\n    log(\"=== Zero W2 Monitor \u958b\u59cb ===\")\n\n    while True:\n        is_alive = ping(ZERO_IP)\n\n        if is_alive:\n            if fail_count > 0:\n                log(f\"\u2705 Zero W2 \u5fa9\u65e7\u78ba\u8a8d\uff08{fail_count}\u56de\u5931\u6557\u5f8c\uff09\")\n                send_mail(\n                    subject=\"\u2705 &#91;ZeroW2] \u5fa9\u65e7\u3057\u307e\u3057\u305f\",\n                    body=f\"RaspberryPi Zero W2 \u304c\u5fa9\u65e7\u3057\u307e\u3057\u305f\u3002\\n\"\n                         f\"\u9023\u7d9a\u5931\u6557\u56de\u6570: {fail_count}\\n\"\n                         f\"\u5fa9\u65e7\u6642\u523b: {datetime.now()}\"\n                )\n                alerted = False\n            fail_count = 0\n\n        else:\n            fail_count += 1\n            log(f\"\u26a0\ufe0f  Ping\u5931\u6557 ({fail_count}\/{FAIL_THRESHOLD}): {ZERO_IP}\", \"warning\")\n\n            if fail_count >= FAIL_THRESHOLD:\n                log(\"\ud83d\udd34 Zero W2 \u30c0\u30a6\u30f3\u691c\u51fa\u3002\u5fa9\u65e7\u51e6\u7406\u3092\u958b\u59cb\u3057\u307e\u3059\", \"error\")\n\n                if not alerted:\n                    send_mail(\n                        subject=\"\ud83d\udd34 &#91;ZeroW2] \u30c0\u30a6\u30f3\u691c\u51fa\uff01\u5fa9\u65e7\u51e6\u7406\u4e2d\",\n                        body=f\"RaspberryPi Zero W2 \u304c\u30c0\u30a6\u30f3\u3057\u307e\u3057\u305f\u3002\\n\"\n                             f\"\u81ea\u52d5\u5fa9\u65e7\u3092\u8a66\u307f\u3066\u3044\u307e\u3059\u3002\\n\"\n                             f\"\u691c\u51fa\u6642\u523b: {datetime.now()}\\n\"\n                             f\"\u5bfe\u8c61IP: {ZERO_IP}\"\n                    )\n                    alerted = True\n\n                # --- Step1: SSH\u3067\u518d\u8d77\u52d5\u3092\u8a66\u307f\u308b ---\n                log(\"Step1: SSH reboot \u3092\u8a66\u307f\u307e\u3059...\")\n                if ssh_reboot():\n                    log(f\"SSH reboot\u9001\u4fe1\u6210\u529f\u3002{BOOT_WAIT_SEC}\u79d2\u5f85\u6a5f...\")\n                    time.sleep(BOOT_WAIT_SEC)\n                else:\n                    # --- Step2: SSH\u3082\u5931\u6557 \u2192 Tapo\u3067\u5f37\u5236\u96fb\u6e90\u30b5\u30a4\u30af\u30eb ---\n                    log(\"Step2: SSH\u5931\u6557 \u2192 Tapo\u96fb\u6e90\u30b5\u30a4\u30af\u30eb\u3092\u5b9f\u884c\u3057\u307e\u3059...\", \"warning\")\n                    send_mail(\n                        subject=\"\u26a1 &#91;ZeroW2] Tapo\u96fb\u6e90\u30b5\u30a4\u30af\u30eb\u5b9f\u884c\",\n                        body=f\"SSH reboot\u306b\u5931\u6557\u3057\u305f\u305f\u3081\u3001\\n\"\n                             f\"Tapo\u30b9\u30de\u30fc\u30c8\u30d7\u30e9\u30b0\u3067\u96fb\u6e90\u3092\u518d\u6295\u5165\u3057\u307e\u3059\u3002\\n\"\n                             f\"\u5b9f\u884c\u6642\u523b: {datetime.now()}\"\n                    )\n                    success = await tapo_power_cycle()\n                    if success:\n                        log(f\"\u96fb\u6e90\u30b5\u30a4\u30af\u30eb\u5b8c\u4e86\u3002{BOOT_WAIT_SEC}\u79d2\u5f85\u6a5f...\")\n                        time.sleep(BOOT_WAIT_SEC)\n                    else:\n                        log(\"\u274c Tapo\u5236\u5fa1\u3082\u5931\u6557\u3002\u624b\u52d5\u5bfe\u5fdc\u304c\u5fc5\u8981\u3067\u3059\", \"error\")\n                        send_mail(\n                            subject=\"\u274c &#91;ZeroW2] \u81ea\u52d5\u5fa9\u65e7\u5931\u6557\uff01\u624b\u52d5\u5bfe\u5fdc\u304c\u5fc5\u8981\",\n                            body=f\"SSH\u30fbTapo\u4e21\u65b9\u306e\u5fa9\u65e7\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\\n\"\n                                 f\"\u624b\u52d5\u3067\u306e\u78ba\u8a8d\u304c\u5fc5\u8981\u3067\u3059\u3002\\n\"\n                                 f\"\u5931\u6557\u6642\u523b: {datetime.now()}\"\n                        )\n\n                fail_count = 0  # \u30ab\u30a6\u30f3\u30c8\u30ea\u30bb\u30c3\u30c8\n\n        await asyncio.sleep(CHECK_INTERVAL)\n\nif __name__ == \"__main__\":\n    asyncio.run(main())<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ZERO_IP         = \"192.168.11.50\"   # Zero W2\u306eIP\nZERO_USER       = \"zero\"            # Zero W2\u306eSSH\u30e6\u30fc\u30b6\u30fc\nCHECK_INTERVAL  = 30                # \u76e3\u8996\u9593\u9694\uff08\u79d2\uff09\nFAIL_THRESHOLD  = 3                 # \u9023\u7d9a\u5931\u6557\u56de\u6570\nBOOT_WAIT_SEC   = 60                # \u518d\u8d77\u52d5\u5f8c\u306e\u5f85\u6a5f\u6642\u9593\nTAPO_IP         = \"192.168.11.52\"   # Tapo\u30d7\u30e9\u30b0\u306eIP\nSMTP_HOST       = \"smtp.gmail.com\"  # \u30e1\u30fc\u30eb\u9001\u4fe1\u30b5\u30fc\u30d0\u30fc<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">systemd\u30b5\u30fc\u30d3\u30b9\uff08zero-monitor.service\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\/etc\/systemd\/system\/zero-monitor.service\u3000\u306b\u4fdd\u5b58<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ini<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-60a61126f970cff953d888ca878ace4b\"><code>&#91;Unit]\nDescription=RaspberryPi Zero W2 Monitor\nAfter=network-online.target\nWants=network-online.target\n\n&#91;Service]\nType=simple\nExecStart=\/usr\/bin\/python3 \/home\/zero\/scripts\/monitor_zero.py\nRestart=always\nRestartSec=10\nUser=zero\nWorkingDirectory=\/home\/zero\/scripts\nStandardOutput=append:\/home\/zero\/scripts\/stdout.log\nStandardError=append:\/home\/zero\/scripts\/stderr.log\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4fdd\u5b58\u5f8c\uff08Ctrl+O \u2192 Enter \u2192 Ctrl+X\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-8506adc1bd17cfb9f6b56ce312439b64\"><code>sudo systemctl daemon-reload\nsudo systemctl restart zero-monitor\nsleep 10\ncat ~\/scripts\/stderr.log\ncat ~\/scripts\/stdout.log<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u6642\u306e\u30c8\u30e9\u30d6\u30eb\u3068\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c8\u30e9\u30d6\u30eb<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td><code>Failed at step USER<\/code><\/td><td><code>User=pi<\/code>\u304c\u5b58\u5728\u3057\u306a\u3044<\/td><td><code>User=zero<\/code>\u306b\u5909\u66f4<\/td><\/tr><tr><td><code>No module named 'tapo'<\/code><\/td><td>\u30e9\u30a4\u30d6\u30e9\u30ea\u672a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/td><td><code>pip3 install tapo --break-system-packages<\/code><\/td><\/tr><tr><td><code>PermissionError log<\/code><\/td><td>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u6a29\u9650\u4e0d\u8db3<\/td><td><code>sudo chown -R zero:zero ~\/scripts<\/code><\/td><\/tr><tr><td>Tapo\u63a5\u7d9a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/td><td>Tapo\u306eIP\u304c\u9593\u9055\u3044<\/td><td><code>192.168.1.102<\/code>\u2192<code>192.168.11.52<\/code>\u306b\u4fee\u6b63<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4fbf\u5229\u306a\u30b3\u30de\u30f3\u30c9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-389a63cc29c9b614a813f731b86f8783\"><code># \u30b5\u30fc\u30d3\u30b9\u72b6\u614b\u78ba\u8a8d\nsudo systemctl status zero-monitor\n\n# \u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30ed\u30b0\u78ba\u8a8d\ntail -f ~\/scripts\/zero_monitor.log\n\n# \u30b5\u30fc\u30d3\u30b9\u518d\u8d77\u52d5\nsudo systemctl restart zero-monitor\n\n# \u30b5\u30fc\u30d3\u30b9\u505c\u6b62\nsudo systemctl stop zero-monitor\n\n# \u8d77\u52d5\u6642\u306e\u81ea\u52d5\u8d77\u52d5\u78ba\u8a8d\nsudo systemctl is-enabled zero-monitor<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u52d5\u4f5c\u78ba\u8a8d\u6e08\u307f\u7d50\u679c<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\u2705 Ping\u76e3\u8996          \u6b63\u5e38\u52d5\u4f5c\n\u2705 SSH reboot\u8a66\u884c    \u6b63\u5e38\u52d5\u4f5c\n\u2705 Tapo\u96fb\u6e90\u30b5\u30a4\u30af\u30eb  \u5b9f\u969b\u306bZero W2\u306e\u5fa9\u65e7\u3092\u78ba\u8a8d\n\u2705 \u30e1\u30fc\u30eb\u901a\u77e5        \u9001\u53d7\u4fe1\u78ba\u8a8d\u6e08\u307f\n\u2705 systemd\u81ea\u52d5\u8d77\u52d5   \u6709\u52b9\u5316\u6e08\u307f<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udce7 \u5b9f\u969b\u306b <code> \u2705 [ZeroW2] \u5fa9\u65e7\u3057\u307e\u3057\u305f<\/code> \u306e\u30ed\u30b0\u304c\u8a18\u9332\u3055\u308c\u3001 Tapo\u306b\u3088\u308b\u96fb\u6e90\u30b5\u30a4\u30af\u30eb\u3067Zero W2\u304c\u81ea\u52d5\u5fa9\u65e7\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u6e08\u307f\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u4e2d\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3082\u306e\u306f\u4ee5\u4e0b\u306e2\u3064\u3067\u3059\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3082\u306e<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. tapo\uff08Python\u30e9\u30a4\u30d6\u30e9\u30ea\uff09<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-8f78ea2594e8ef55e0e2f95dd1d491b6\"><code>pip3 install tapo --break-system-packages<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">TP-Link Tapo\u30b9\u30de\u30fc\u30c8\u30d7\u30e9\u30b0\u3092\u30ed\u30fc\u30ab\u30ebAPI\u3067\u5236\u5fa1\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. nmap\uff08\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\uff09<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-a939659f3e5eecb7249d14b474549d27\"><code>sudo apt install nmap -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">LAN\u5185\u306e\u30c7\u30d0\u30a4\u30b9IP\u3092\u63a2\u3059\u305f\u3081\u306b\u4f7f\u7528\u3057\u307e\u3057\u305f\u3002\uff08Zero W2\u306eIP\u30a2\u30c9\u30ec\u30b9\u7279\u5b9a\u306e\u305f\u3081\uff09<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u78ba\u8a8d\u30b3\u30de\u30f3\u30c9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-red-color has-text-color has-link-color wp-elements-7c0adb26cdd28ccf2d001e8ab6c53dfb\"><code># tapo\u306e\u78ba\u8a8d\npip3 show tapo\n\n# nmap\u306e\u78ba\u8a8d\nnmap --version<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">nmap\u306fIP\u30a2\u30c9\u30ec\u30b9\u7279\u5b9a\u306e\u305f\u3081\u306b\u4e00\u6642\u7684\u306b\u4f7f\u3063\u305f\u3060\u3051\u306a\u306e\u3067\u3001\u4e0d\u8981\u3067\u3042\u308c\u3070\u524a\u9664\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt remove nmap -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u30b7\u30b9\u30c6\u30e0\u69cb\u6210 \u6a5f\u5668 IP\u30a2\u30c9\u30ec\u30b9 \u5f79\u5272 RaspberryPi (\u76e3\u8996\u5074) 192.168.11.22 \u76e3\u8996\u30fb\u5236\u5fa1 RaspberryPi Zero W2 192.168.11.50 \u76e3\u8996\u5bfe\u8c61\uff08\u6e29\u6e7f\u5ea6\u8a08\u6e2c\uff09 TP-Lin [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10],"tags":[31,52,32,33,37,34,36,30,35,40,29,55,44,53],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-garage-products","category-raspberrypi","tag-gmail","tag-ip","tag-nmap","tag-ping","tag-python","tag-ssh-reboot","tag-systemd","tag-tapo","tag-35","tag-40","tag-29","tag-55","tag-44","tag-53"],"_links":{"self":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=57"}],"version-history":[{"count":1,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":58,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions\/58"}],"wp:attachment":[{"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fideafact.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}