通过 curl 使用 iAqualink

通过 curl 使用 iAqualink,提供以 shell 为先的方式进行 iAqualink 身份验证,并读取泳池、水疗池、辅助设备和 eXO 氯化器数据,无需运行 MCP 服务器。

chrischall
2026年10月16日
0 收藏
73 下载

安装与下载

1 ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install iaqualink-curl

2 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/
工作区 {'/skills/'}

优先级:工作区 › 全局 › 内置

3 提示词安装

将此提示词复制到 Openclaw 即可自动安装。

请帮我使用 Clawhub 安装 skill-iaqualink-curl。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

更倾向于下载?

获取包含原生技能文件的ZIP压缩包。

下载技能 (.zip)

基本信息

名称 通过 curl 使用 iAqualink
Slug iaqualink-curl
创建者 chrischall
创建时间 2026-10-16 06:11:02
更新时间 2026-10-16 06:11:02
收藏数 0
使用量 73
浏览量 2

安装指南

  1. ClawHub CLI 从源直接安装技能的最快方式。
    npx clawhub@latest install iaqualink-curl
  2. 手动安装 将技能文件夹复制到以下位置之一
    全局模式
    ~/.openclaw/skills/
    工作区
    /skills/
    优先级:工作区 > 本地 > 内置
  3. 提示词安装 将此提示词复制到 OpenClaw 即可自动安装。
    请帮我使用 Clawhub 安装 iaqualink-curl。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
    更倾向于下载?
    获取包含原生技能文件的ZIP压缩包。
    下载技能 (.zip)

什么是

此 Openclaw Skills 集成通过 shell 命令和 curl 直接连接 iAqualink 云端,让开发者能够登录、列出泳池系统、检查 iAqua 主屏幕和辅助设备屏幕,并读取 eXO 氯化器影子状态。它适用于一次性终端查询、脚本、API 调试和轻量级自动化。
此技能的请求方案基于 iaqualink-py 0.7.0 推导,默认使用 macOS Keychain 凭据。它主要用于读取和诊断;对话式控制和经过验证的写入应使用 iaqualink MCP 工具。除已确认的登录端点和应用密钥外,实时验证仍待完成。

应用场景

直接从终端查看泳池、水疗池和空气温度。
列出 iAqualink 系统及其序列号、设备类型和名称。
检查 iAqua 水泵、加热器、设定点、辅助电路和灯具。
读取 eXO 氯化器连接状态、盐水氯化、pH、ORP 和滤泵状态。
围绕 iAqualink 读取响应构建 shell 脚本或监控任务。
无需启动浏览器、桥接程序或 iaqualink-mcp 服务器即可调试 iAqualink API 行为。
后续请求返回 HTTP 401 时,安全地刷新过期会话。

工作原理

将 iAqualink 电子邮件地址和密码存储在名为 iaqualink 的 macOS Keychain 项目中,或通过 IAQ_EMAIL 和 IAQ_PASSWORD 环境变量覆盖。
加载 iaqualink.sh 辅助脚本,以使用 iaq_* shell 函数。
运行一次 iaq_login,建立经过身份验证的云会话;不要循环重试失败的登录,因为反复失败可能导致账户锁定。
使用 iaq_devices 发现系统,并确认每台设备属于 iAqua 还是 eXO 安装。
使用 iaq_home、iaq_auxes 或 iaq_shadow 查询相关端点,然后将 JSON 响应传递给 jq 等工具进行筛选和报告。
如果后续请求返回 401,运行 iaq_refresh;只有刷新被拒绝时才再次运行 iaq_login。
执行写入前先读取当前状态,因为 iAqua 控件是切换开关;建议使用 MCP 集成来进行确认和更安全的对话式控制。

配置指南

创建 Keychain 凭据并加载辅助脚本:

account 是你的 iAqualink 电子邮件地址;密码会以安全方式提示输入

security add-generic-password -s iaqualink -a 'you@example.com' -w
. skills/iaqualink-curl/references/iaqualink.sh
登录一次:
iaq_login
可选配置包括用于覆盖凭据的 IAQ_EMAIL 和 IAQ_PASSWORD、用于打印已隐藏敏感信息的请求但不发送请求的 IAQ_DRY_RUN=1,以及用于更改会话文件位置的 IAQ_SESSION。默认会话文件为 ~/.iaqualink-curl/session.json;该文件创建时权限为 600,应视为凭据。删除该文件即可退出登录。
这些操作方案基于 iaqualink-py 0.7.0 推导,API 的部分功能仍待实时验证。请使用文档说明的登录流程,并在生产环境自动化前验证响应。

数据架构

此技能处理围绕系统、设备类型、屏幕数据和报告状态组织的 JSON 响应。
资源 关键字段或结构 常见用途
设备列表 包含 serial_number、device_type 和 name 的数组 发现 iAqua 和 eXO 系统
iAqua 主屏幕 home_screen[4:],表示为 {name: state} 行 读取温度、设定点、水泵和加热器
iAqua 辅助设备数据 devices_screen[3:][],包含带键的状态对象 检查辅助电路和灯具
eXO 影子状态 state.reported,包含 aws.status 和 equipment.swc_0 读取连接、产出、SWC、增强模式、pH、ORP 和滤泵值
会话文件 $IAQ_SESSION 中的 JSON,默认路径为 ~/.iaqualink-curl/session.json 持久保存已验证的会话状态;文件权限为 600
对于 iAqua 主屏幕状态,0 表示关闭,1 表示开启,2 表示待机,3 表示已启用或正在加热,空值表示没有读数。辅助脚本会输出适用于 jq、shell 管道、监控和调试的 JSON。API 结构详情参见 docs/IAQUALINK-API.md。

高级特性

通过 macOS Keychain 安全查找凭据,并支持环境变量覆盖。
$IAQ_SESSION
持久保存会话,并限制文件权限。
IAQ_DRY_RUN=1
检查请求,密码会被隐藏。
输出便于
jq
处理的 JSON,可用于自定义仪表板、脚本、警报和报告。

工作原理

iaq_refresh
恢复会话,避免不必要的登录尝试。
提取温度、水泵、加热器、辅助设备、氯化器、pH、ORP 和连接状态。
可选地通过
iaq_command
支持写入,包括温度命令;同时请注意 iAqua 控件是切换开关,应先读取状态。
使用文档规定的期望状态负载格式异步写入 eXO 影子状态;需要验证写入并取得用户确认时,请使用 MCP 工具。


name: iaqualink-curl description: Read an iAqualink (Zodiac / Jandy / Fluidra) pool system straight from a shell with curl — sign in, list systems, and fetch the iAqua home/aux screens or an eXO chlorinator's shadow — without running the iaqualink-mcp server. Use for a one-off "what's the pool temperature" from the terminal, scripting, or debugging the API. Credentials come from the macOS Keychain item "iaqualink". Derived from iaqualink-py 0.7.0; live verification pending.

iAqualink via curl

Derived from iaqualink-py 0.7.0 — live verification pending. The recipes transcribe the open-source client Home Assistant uses; only the login endpoint and app key have been confirmed live. Shape reference: ../../docs/IAQUALINK-API.md.

The iAqualink cloud is reachable server-side with a plain email/password sign-in — no browser, no bridge. Prefer the iaqualink-mcp tools (the iaqualink skill) for anything conversational or for control: they verify writes and bind confirmations. Use this for reads and debugging.

Setup (once)

# The Keychain item: account = your iAqualink email, password = the secret (prompted).

security add-generic-password -s iaqualink -a 'you@example.com' -w
. skills/iaqualink-curl/references/iaqualink.sh # bash or zsh

IAQ_EMAIL / IAQ_PASSWORD override the Keychain; IAQ_DRY_RUN=1 prints each request (password redacted) instead of sending it. The helper keeps its own session at $IAQ_SESSION (default ~/.iaqualink-curl/session.json, mode 600 — a credential; delete it to sign out).

Sign in — once, never in a loop
iaq_login

A refusal means the email/password is wrong. Fix it and try once — never retry in a loop: repeated failed sign-ins are how accounts get locked. When a later call answers 401, run iaq_refresh (and iaq_login only if that is refused too).

Reads

iaq_devices | jq -r '.[] | [.serial_number, .device_type, .name] | @tsv'

# iAqua (device_type "iaqua"): the home screen — rows 4+ are {name: state}

iaq_home IAQ123 | jq '.home_screen[4:] | add | {air_temp, pool_temp, spa_temp, pool_set_point, spa_set_point, pool_pump, spa_pump, pool_heater, spa_heater}'

# states: "0" off, "1" on, "2" standby, "3" enabled (heating); "" = no reading
# iAqua aux circuits and lights

iaq_auxes IAQ123 | jq '.devices_screen[3:][] | to_entries[0] | {aux: .key} + (.value | add)'

# eXO (device_type "exo"): the shadow

iaq_shadow EXO456 | jq '.state.reported | {connection: .aws.status, heating, swc: .equipment.swc_0 | {production, swc, boost, low, ph_sp, orp_sp, filter_pump}}'

Writes (prefer the MCP)

iAqua set_pool_pump, set_spa_pump, set_pool_heater, set_spa_heater, set_solar_heater and set_aux_ are toggles: read get_home / get_devices first and send only when the state differs, or you will flip it the wrong way.

iaq_command IAQ123 set_temps 'temp1=102&temp2=86' # with a spa: temp1 = spa, temp2 = pool (send both)

eXO writes are POST …/devices/v1//shadow with {"state":{"desired":{…}}} and apply asynchronously — see the API doc's table.

Script the Mechanics

iAqualink Pool & Spa Control