名称: skylight
描述: 与 Skylight Calendar 智能相框交互 - 管理日历事件、家庭任务、购物/待办清单、任务箱项目和奖励积分。适用于用户需要查看/创建日历事件、管理家庭任务、处理购物或待办清单、查询奖励积分或与其 Skylight 智能显示屏互动时。
主页: https://ourskylight.com
元数据:
clawdbot:
emoji: 📅
requires:
bins:
- curl
env:
- SKYLIGHT_FRAME_ID
primaryEnv: SKYLIGHT_EMAIL
通过非官方 API 控制 Skylight Calendar 智能相框。
设置环境变量:
- SKYLIGHT_URL: API 基础 URL (默认: https://app.ourskylight.com)
- SKYLIGHT_FRAME_ID: 您的相框(家庭)ID — 登录 ourskylight.com,点击您的日历,从 URL 中复制数字部分 (例如,从 https://ourskylight.com/calendar/4197102 中获取 4197102)
身份验证 (选择一种方式):
选项 A - 邮箱/密码 (推荐):
- SKYLIGHT_EMAIL: 您的 Skylight 账户邮箱
- SKYLIGHT_PASSWORD: 您的 Skylight 账户密码
选项 B - 预先捕获的令牌:
- SKYLIGHT_TOKEN: 完整的 Authorization 请求头值 (例如 Basic abc123...)
通过邮箱和密码登录生成令牌:
# 登录并获取用户凭证
LOGIN_RESPONSE=$(curl -s -X POST "$SKYLIGHT_URL/api/sessions" \
-H "Content-Type: application/json" \
-d '{
"email": "'"$SKYLIGHT_EMAIL"'",
"password": "'"$SKYLIGHT_PASSWORD"'",
"name": "",
"phone": "",
"resettingPassword": "false",
"textMeTheApp": "true",
"agreedToMarketing": "true"
}')
# 从响应中提取 user_id 和 user_token
USER_ID=$(echo "$LOGIN_RESPONSE" | jq -r '.data.id')
USER_TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.data.attributes.token')
# 生成 Basic 认证令牌 (user_id:user_token 的 base64 编码)
SKYLIGHT_TOKEN="Basic $(echo -n "${USER_ID}:${USER_TOKEN}" | base64)"
# 现在所有 API 请求都使用 $SKYLIGHT_TOKEN
登录接口返回:
- data.id: 用户 ID
- data.attributes.token: 用户令牌
将两者组合为 {user_id}:{user_token} 并进行 base64 编码,用于 Basic 认证。
如果您希望手动捕获令牌:
app.ourskylight.com 启用 SSL 代理Authorization 请求头的值 (例如 Basic <token>)令牌在登出后会失效;重新登录后需要重新捕获。
响应使用 JSON:API 格式,包含 data、included 和 relationships 字段。
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/calendar_events?date_min=2025-01-27&date_max=2025-01-31" \
-H "Authorization: $SKYLIGHT_TOKEN" \
-H "Accept: application/json"
查询参数:
- date_min (必需): 开始日期 YYYY-MM-DD
- date_max (必需): 结束日期 YYYY-MM-DD
- timezone: 时区字符串 (可选)
- include: 相关资源的 CSV 列表 (categories,calendar_account,event_notification_setting)
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/source_calendars" \
-H "Authorization: $SKYLIGHT_TOKEN"
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/chores?after=2025-01-27&before=2025-01-31" \
-H "Authorization: $SKYLIGHT_TOKEN"
查询参数:
- after: 开始日期 YYYY-MM-DD
- before: 结束日期 YYYY-MM-DD
- include_late: 包含逾期任务 (布尔值)
- filter: 按 linked_to_profile 筛选
curl -s -X POST "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/chores" \
-H "Authorization: $SKYLIGHT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": {
"type": "chore",
"attributes": {
"summary": "Take out trash",
"status": "pending",
"start": "2025-01-28",
"start_time": "08:00",
"recurring": false
},
"relationships": {
"category": {
"data": {"type": "category", "id": "CATEGORY_ID"}
}
}
}
}'
任务属性:
- summary: 任务标题
- status: pending 或 completed
- start: 日期 YYYY-MM-DD
- start_time: 时间 HH:MM (可选)
- recurring: 布尔值
- recurrence_set: 重复任务的 RRULE 字符串
- reward_points: 整数 (可选)
- emoji_icon: 表情符号 (可选)
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/lists" \
-H "Authorization: $SKYLIGHT_TOKEN"
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/lists/{listId}" \
-H "Authorization: $SKYLIGHT_TOKEN"
响应包含 data.attributes.kind (shopping 或 to_do) 以及包含清单项目的 included 数组。
清单项目属性:
- label: 项目文本
- status: pending 或 completed
- section: 分区名称 (可选)
- position: 排序顺序
curl -s -X POST "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/task_box/items" \
-H "Authorization: $SKYLIGHT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": {
"type": "task_box_item",
"attributes": {
"summary": "Pack lunches"
}
}
}'
任务箱属性:
- summary: 任务标题
- emoji_icon: 表情符号 (可选)
- routine: 布尔值 (可选)
- reward_points: 整数 (可选)
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/categories" \
-H "Authorization: $SKYLIGHT_TOKEN"
类别用于将任务分配给家庭成员。属性包括:
- label: 类别名称 (例如 "Mom", "Dad", "Kids")
- color: 十六进制颜色 #RRGGBB
- profile_pic_url: 头像 URL
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/rewards" \
-H "Authorization: $SKYLIGHT_TOKEN"
可选查询参数:redeemed_at_min (日期时间) 用于按兑换日期筛选。
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/reward_points" \
-H "Authorization: $SKYLIGHT_TOKEN"
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID" \
-H "Authorization: $SKYLIGHT_TOKEN"
curl -s "$SKYLIGHT_URL/api/frames/$SKYLIGHT_FRAME_ID/devices" \
-H "Authorization: $SKYLIGHT_TOKEN"
jq 解析 JSON:API 响应