GraveEaterMadison/Raspberry_pi_telegram_bot

GitHub: GraveEaterMadison/Raspberry_pi_telegram_bot

这是一个基于树莓派的多功能Telegram机器人,提供远程系统控制、自动化任务和硬件交互功能。

Stars: 31 | Forks: 1

# 树莓派 Telegram 机器人 ![Python](https://img.shields.io/badge/Python-3.11-blue.svg) ![Raspberry Pi](https://img.shields.io/badge/Raspberry%20Pi-Model%20B-orange) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) 一个多功能的 Telegram 机器人,运行在树莓派上,允许你通过 Telegram 远程控制你的树莓派并与之交互。监控系统健康状况、控制 GPIO 引脚、管理文件、运行 shell 命令、拍摄摄像头快照等等 —— 一切尽在 Telegram 中完成。 ## 目录 ## 功能 - **系统监控** — CPU、内存、磁盘、温度、运行时间和综合健康评分 - **交互式仪表盘** — 带有实时统计的内联键盘控制面板 - **远程 Shell** — 使用黑名单/白名单安全过滤器执行 shell 命令 - **文件管理** — 列出、读取、下载和上传文件 - **GPIO 控制** — 数字开关、PWM 占空比、伺服电机角度、I2C 总线扫描 - **摄像头** — 拍摄快照并运行带自动捕获的运动检测 - **网络工具** — IP 信息、WiFi 扫描、ping、端口扫描、网速测试 - **进程管理器** — 列出顶级进程并根据 PID 终止 - **指标与警报** — 后台指标收集,生成图表和阈值警报 - **AI 助手** — 通过 Anthropic Claude 或 OpenAI GPT 提问 - **任务调度器** — 调度命令每天在设定时间运行;管理 cron 作业 - **软件包管理器** — 搜索、安装和删除 APT 软件包 - **备份** — 创建树莓派目录的 `.tar.gz` 备份并发送至 Telegram - **天气** — 通过 OpenWeatherMap 获取当前天气 - **传感器中心** — 读取 DHT11/DHT22、BMP280 和 PIR 传感器 - **便签** — 基于 SQLite 的用户独立便签 - **授权与速率限制** — 仅白名单中的用户 ID 可使用该机器人 - **审计日志** — 每条命令都记录到 SQLite,包含时间戳和用户信息 ## 要求 - 运行 Raspberry Pi OS(基于 Debian)的树莓派 - Python 3.11+ - 一个 Telegram 账户和来自 [@BotFather](https://t.me/BotFather) 的机器人令牌 ## 安装 ### 1. 克隆仓库 ``` git clone https://github.com/GraveEaterMadison/Raspberry_pi_telegram_bot.git cd Raspberry_pi_telegram_bot ``` ### 2. 创建虚拟环境 ``` python3 -m venv venv source venv/bin/activate ``` ### 3. 安装依赖 ``` pip install -r requirements.txt ``` 对于可选的硬件支持,请先取消注释 `requirements.txt` 中的相关行,然后重新运行上述命令。或手动安装: ``` # GPIO pip install RPi.GPIO # 摄像头(Pi 4 及更新型号) pip install picamera2 # DHT11 / DHT22 传感器 pip install adafruit-circuitpython-dht adafruit-blinka # BMP280 压力/温度传感器 pip install bmp280 smbus2 # I2C 工具(通过 apt,非 pip) sudo apt install i2c-tools python3-smbus # 网络速度测试 pip install speedtest-cli ``` ### 4. 在 Telegram 上创建你的机器人 - 向 [@BotFather](https://t.me/BotFather) 发送消息并运行 `/newbot` - 按照提示操作并复制它提供给你的 API 令牌 ### 5. 设置你的环境文件 ``` cp .env.example .env nano .env ``` 至少设置这两个值: ``` TELEGRAM_BOT_TOKEN=your_token_here AUTHORIZED_USERS=123456789 ``` 要找到你的 Telegram 用户 ID,向 [@userinfobot](https://t.me/userinfobot) 发送消息。 ### 6. 运行机器人 ``` python main.py ``` ## 配置 所有配置均通过 `.env` 文件完成。将 `.env.example` 复制为 `.env` 并填入你的值。 | 变量 | 是否必需 | 默认值 | 描述 | |---|---|---|---| | `TELEGRAM_BOT_TOKEN` | ✅ | — | 来自 @BotFather 的令牌 | | `AUTHORIZED_USERS` | ✅ | — | 逗号分隔的 Telegram 用户 ID,例如 `123456789,987654321` | | `AI_PROVIDER` | 否 | `anthropic` | `anthropic` 或 `openai` | | `ANTHROPIC_API_KEY` | 否 | — | 用于 `/ai` 命令(在 console.anthropic.com 获取) | | `OPENAI_API_KEY` | 否 | — | 用于通过 OpenAI 的 `/ai` 命令 | | `OPENWEATHER_API_KEY` | 否 | — | 用于 `/weather`(在 openweathermap.org 获取免费密钥) | | `CAMERA_BACKEND` | 否 | `picamera2` | `picamera2`、`opencv` 或 `dummy` | | `GPIO_MODE` | 否 | `BCM` | `BCM` 或 `BOARD` | | `DHT_SENSOR_TYPE` | 否 | `DHT22` | `DHT11` 或 `DHT22` | | `DHT_PIN` | 否 | `4` | DHT 传感器的 GPIO 引脚号 | | `BMP280_ADDRESS` | 否 | `0x76` | BMP280 传感器的 I2C 地址 | | `PIR_PIN` | 否 | `17` | PIR 运动传感器的 GPIO 引脚号 | | `BACKUP_PATHS` | 否 | `/home/pi,/etc` | 逗号分隔的要备份的路径 | | `MAX_EXEC_OUTPUT` | 否 | `4000` | shell 命令输出的最大字符数 | | `RATE_LIMIT_PER_MINUTE` | 否 | `20` | 每个用户每分钟的最大命令数 | | `METRICS_HISTORY_SIZE` | 否 | `60` | 内存中保留的指标数据点数 | | `METRICS_INTERVAL` | 否 | `10` | 指标收集之间的秒数 | | `LOG_LEVEL` | 否 | `INFO` | `DEBUG`、`INFO`、`WARNING` 或 `ERROR` | | `DB_PATH` | 否 | `data/bot.db` | SQLite 数据库路径 | | `EXEC_WHITELIST` | 否 | _(空)_ | 逗号分隔的允许的命令。空 = 允许所有 | | `EXEC_BLACKLIST` | 否 | `rm -rf /,mkfs,dd if=/dev/zero` | 始终被阻止的命令模式 | ## 作为服务运行 要使用 systemd 在启动时自动运行机器人: ### 1. 复制服务文件 ``` sudo cp pibot.service /etc/systemd/system/pibot.service ``` ### 2. 需要时编辑路径 ``` sudo nano /etc/systemd/system/pibot.service ``` 确保 `WorkingDirectory`、`ExecStart` 和 `EnvironmentFile` 都指向你实际的安装位置。 ### 3. 启用并启动 ``` sudo systemctl daemon-reload sudo systemctl enable pibot sudo systemctl start pibot ``` ### 4. 检查状态和日志 ``` sudo systemctl status pibot journalctl -u pibot -f ``` ## 命令 ### 系统 | 命令 | 描述 | |---|---| | `/start` | 欢迎消息 | | `/help` | 列出所有命令 | | `/dashboard` | 交互式控制面板 | | `/info` | 完整系统概览 | | `/cpu` | 每个核心的 CPU 使用率和平均负载 | | `/ram` | 内存和交换分区使用情况 | | `/disk` | 每个分区的磁盘使用情况 | | `/uptime` | 系统运行时间 | | `/temperature` | CPU 温度及状态 | | `/healthscore` | 整体树莓派健康评分(0–100) | ### 网络 | 命令 | 描述 | |---|---| | `/ip` | 所有接口的 IP 地址 | | `/netinfo` | 网络接口统计 | | `/ping ` | ping 一台主机 | | `/wifi` | 扫描附近的 WiFi 网络 | | `/speedtest` | 网速测试 | | `/portscan [range]` | 扫描主机上的开放端口 | ### 电源与服务 | 命令 | 描述 | |---|---| | `/reboot` | 重启树莓派(要求确认) | | `/shutdown` | 关闭树莓派(要求确认) | | `/service ` | `start`、`stop`、`restart`、`status`、`enable`、`disable` 一个服务 | | `/services` | 列出所有运行中的 systemd 服务 | ### 远程执行 | 命令 | 描述 | |---|---| | `/exec ` | 运行 shell 命令 | | `/ps` | 按 CPU 使用率排序的前 20 个进程 | | `/kill ` | 向进程发送 SIGTERM 信号 | ### 文件 | 命令 | 描述 | |---|---| | `/ls [path]` | 列出目录(默认:`/home/pi`) | | `/cat ` | 读取文件内容 | | `/download ` | 将文件发送到 Telegram | | _(发送一个文件)_ | 将文件上传到树莓派的 `/tmp/telegram_uploads/` | ### GPIO 与硬件 | 命令 | 描述 | |---|---| | `/gpio ` | 将 GPIO 引脚设置为高电平或低电平 | | `/pwm <0-100>` | 设置引脚的 PWM 占空比 | | `/servo <0-180>` | 将伺服移动到指定角度 | | `/i2c` | 扫描 I2C 总线上连接的设备 | | `/sensors` | 读取 DHT、BMP280 和 CPU 温度传感器 | ### 摄像头 | 命令 | 描述 | |---|---| | `/snapshot` | 拍照并发送 | | `/motion ` | 切换带自动快照的运动检测 | ### 监控 | 命令 | 描述 | |---|---| | `/graph ` | 绘制指标历史图表 | | `/alert set ` | 设置资源警报,例如 `/alert set cpu > 85` | | `/alert list` | 列出你的活动警报 | | `/alert clear` | 清除你所有的警报 | | `/metrics` | 最近 10 次指标读数的表格 | ### AI(人工智能) | 命令 | 描述 | |---|---| | `/ai ` | 向 AI 助手提问任何问题 | ### 调度器 | 命令 | 描述 | |---|---| | `/schedule ` | 调度一个命令每天在指定时间运行 | | `/cron list` | 列出已调度的任务 | | `/cron del ` | 删除一个已调度的任务 | ### 便签 | 命令 | 描述 | |---|---| | `/note add ` | 保存一条便签 | | `/note list` | 列出你的便签 | | `/note del ` | 删除一条便签 | ### 软件包 | 命令 | 描述 | |---|---| | `/pkg search ` | 搜索 APT 软件包 | | `/pkg install ` | 安装一个软件包 | | `/pkg remove ` | 删除一个软件包 | | `/pkg update` | 运行 `apt update` | ### 杂项 | 命令 | 描述 | |---|---| | `/backup [paths...]` | 创建一个 `.tar.gz` 备份并发送 | | `/weather [city]` | 当前天气(如果省略城市,则根据 IP 自动检测) | ## 文件结构 ``` Raspberry_pi_telegram_bot/ │ ├── main.py # Entry point — registers all handlers ├── config.py # Loads all settings from .env ├── requirements.txt # Python dependencies ├── pibot.service # systemd service file ├── .env.example # Environment variable template ├── .env # Your local config (never commit this) │ ├── handlers/ │ ├── core.py # /start, /help, /dashboard │ ├── system.py # /info, /cpu, /ram, /disk, /uptime, /temperature, /healthscore │ ├── network.py # /ip, /netinfo, /ping, /wifi, /speedtest, /portscan │ ├── power.py # /reboot, /shutdown, /service, /services │ ├── exec_handler.py # /exec │ ├── files.py # /ls, /cat, /download, upload handler │ ├── gpio_handler.py # /gpio, /pwm, /servo, /i2c │ ├── camera.py # /snapshot, /motion │ ├── monitoring.py # /graph, /alert, /metrics │ ├── ai_handler.py # /ai │ ├── scheduler.py # /schedule, /cron, background scheduler loop │ ├── notes.py # /note │ ├── packages.py # /pkg │ ├── backup.py # /backup │ ├── weather.py # /weather │ ├── sensors.py # /sensors │ ├── process.py # /ps, /kill │ └── callbacks.py # Inline keyboard callback router │ ├── utils/ │ ├── auth.py # Authorization middleware and rate limiter │ ├── logger.py # SQLite audit logger │ ├── metrics.py # Background metrics collector │ └── pi_info.py # Legacy system utility functions │ └── data/ # Created at runtime ├── bot.db # SQLite database (audit log, notes, scheduler) └── bot.log # Log file ``` ## 安全性 - **授权** — `.env` 中的 `AUTHORIZED_USERS` 是 Telegram 用户 ID 的白名单。任何不在名单上的人都会收到“访问被拒绝”的消息。 - **速率限制** — 每个授权用户每分钟限制 `RATE_LIMIT_PER_MINUTE` 条命令(默认 20)。 - **执行安全** — `/exec` 根据 `EXEC_BLACKLIST` 检查每个命令。你还可以设置 `EXEC_WHITELIST` 仅允许特定命令。 - **文件访问** — `/ls`、`/cat`、`/download` 仅允许访问 `/home`、`/var/log`、`/etc`、`/tmp` 和 `/opt` 下的内容。 - **密钥** — 请保密你的 `.env` 文件。它默认被 gitignore,绝不应提交。 - **重启 / 关机** — 这两个命令在执行前都需要一个内联确认按钮。 ## 贡献 欢迎贡献!请 fork 本仓库,并提交包含你改进或错误修复的 pull request。 ## 许可证 本项目根据 MIT 许可证授权 —— 详见 [LICENSE](LICENSE) 文件。 由 [GraveEaterMadison](https://github.com/GraveEaterMadison) 使用 ❤️ 开发
标签:AI助手, DIY项目, GPIO控制, I2C通信, MIT许可, Python, SQLite, Telegram Bot, 仪表盘, 任务调度, 传感器集成, 包管理, 多引擎聚合, 安全认证, 家庭自动化, 开源, 摄像头控制, 数字取证, 数据备份, 文件管理, 无后门, 智能设备, 物联网, 监控系统, 硬件控制, 科技爱好者, 网络工具, 自动化脚本, 软件开发, 远程控制, 远程访问, 逆向工具