這是一個用於抓取與提供 MozTW 摩茲工寮空間 環境資訊的 API 與 Telegram 機器人。基於 Hono 框架開發,可部署於 Cloudflare Workers 或 Node.js 環境。
提供簡單的 HTTP 端點供外部整合:
GET /: 回傳所有資訊 (JSON)。
機器人支援以下指令:
/space: 顯示完整的空間資訊(溫度、濕度、CO2)。
如果你只想在終端機快速查看資訊,可以使用:
npm run getnpm install將 .env.sample 複製為 .env 並填入相關資訊:
cp .env.sample .envTELEGRAM_BOT_TOKEN: 你的 Telegram Bot Token。SENSORS_CONFIG: 所有IoT設備的相關資訊,結構範例請看.env.sample檔案 (目前支援SwitchBot Meter/Hub 的設備)
- Cloudflare Workers 模式:
npm run dev - Node.js 伺服器模式:
npm run dev:node - Telegram Bot (Long Polling):
npm run dev:tg
本專案使用 Cloudflare KV 來暫存感測器資料與最後更新時間 (lastchange)。部署前請先建立對應的 KV Namespace:
npx wrangler kv:namespace create "SENSOR_KV"執行後,終端機會回傳一段包含 id 的 JSON 設定。請開啟 wrangler.jsonc,將其中的 id 欄位替換為您剛剛獲得的真實 ID:
(注意:程式碼固定使用 "SENSOR_KV" 作為 binding 名稱,請勿更改此欄位。
請將機器人 Token 與感測器設定存入 Cloudflare Workers 內部:
npx wrangler secret put TELEGRAM_BOT_TOKEN
npx wrangler secret put SENSORS_CONFIG
([{...}] 即可)
npm run deploy注意:部署到 Cloudflare 時請使用 Webhook 模式(
/bot端點),本地測試可使用 Long Polling (npm run dev:tg)。
https://api.telegram.org/bot<TG_TOKEN>/getWebhookInfo
https://api.telegram.org/bot<TG_TOKEN>/setWebhook?url=<YOUR_URL>/bot/<TG_TOKEN>
https://api.telegram.org/bot<TG_TOKEN>/deleteWebhook
本站已經整理成 /openapi.json 可供Swagger使用,亦可使用相容OpenAPI的客戶端(如:Insomnia)
要快速啟動 Swagger伺服器的話,可用以下指令
docker run -p 9000:8080 -e SWAGGER_JSON_URL=http://localhost:8787/openapi.json docker.swagger.io/swaggerapi/swagger-ui- 只要
fetch成功或收到webhook,且該裝置不是only_webhook的主動查詢,lastchange就會更新為當前時間。 - 這代表了「系統最後一次與該設備取得聯繫」的時間,與數值是否有變無關。
- 快取保護:系統會以
lastchange結合staleThresholdSeconds(預設 600s) 判定資料是否過期。若未過期,主動查詢時會直接回傳快取內容,不發起 API 請求與 KV 寫入。
- 只有當新取得的數值(如溫度)與資料庫中現有的數值不同時,才會更新這個項目的
lastchange。 - 如果數值相同,則保留舊的變動時間。
- 寫入優化:若所有感測數值均未變動,系統將跳過歷史紀錄 (Raw Ingestion) 的寫入,僅更新目前的狀態以節省 Cloudflare KV PUT 額度。
- 如果裝置設定為
only_webhook: true,則主動的fetch行為不會更新整體的lastchange。 - 該裝置的
lastchange只有在真正收到 Webhook 通知時才會變動,符合您「記錄上次被通知時間」的需求。