← 返回 Skills 市场
oloapiu

AirShell 🐢

作者 oloapiu · GitHub ↗ · v1.1.1
cross-platform ⚠ suspicious
354
总下载
0
收藏
0
当前安装
4
版本数
在 OpenClaw 中安装
/install airshell
功能描述
Agent playbook for the AirShell open-source air quality sensor (github.com/oloapiu/airshell). Gives your agent domain knowledge about CO₂, PM2.5, temperature...
使用说明 (SKILL.md)

AirShell Skill 🐢

Agent playbook for the AirShell air quality sensor.

Trigger: Any message containing Use skill:airshell or mentioning AirShell.

Read this skill, then act. Don't summarize it back to the user.


Setup check

Before handling any message, check if references/deployment.md exists and is filled in.

  • If not: run the Setup Flow below.
  • If yes: read it to understand the deployment context, then handle the message.

Setup Flow — "AirShell awaiting setup" or first run

The sensor has no deployment context yet. Interview the user to configure it properly.

Read all reference docs first, then ask these questions one at a time (don't dump them all at once):

  1. Room — What room is the sensor in? (nursery, bedroom, home office, living room, classroom, etc.)
  2. Occupants — Who uses this room? (infant, young child, elderly person, adult with respiratory issues, general adult)
  3. Location — What city / climate is this? (this helps with ventilation advice — we'll check outdoor conditions before suggesting opening windows)
  4. Priorities — What matters most to you? (sleep quality, air quality, temperature comfort, all of the above)
  5. Notifications — How alert-happy should I be? (only urgent issues / also borderline readings / everything)

Based on the answers:

  1. Suggest appropriate alarm thresholds with reasoning (reference the docs for the standards that apply to their occupant type)
  2. Ask them to confirm or adjust
  3. Write references/deployment.md with the deployment context and agreed thresholds
  4. Determine your webhook URL and token — check your own agent/gateway configuration. Do not ask the user to provide these. If you cannot determine them, tell the user: "I need my webhook URL and token to connect to the sensor — this is how the sensor reaches me when an alarm fires. I couldn't find these automatically. You may need to check your agent's gateway config (for OpenClaw: openclaw gateway status)."
  5. POST the config to the device (see Pushing Config below)
  6. Confirm: "AirShell is configured for [room]. Watching CO₂, PM2.5, temperature, and humidity."

Deployment Context

After setup, references/deployment.md contains:

  • Room type and occupants
  • Location (lat/lon + description)
  • Climate notes
  • Agreed alarm thresholds and reasoning
  • Any special sensitivities or preferences

Always read this file before interpreting readings or giving advice.


Weather Context

Before giving ventilation advice (for any alarm — including CO₂), check outdoor conditions:

GET https://api.open-meteo.com/v1/forecast
  ?latitude={lat}&longitude={lon}
  &current=temperature_2m,relative_humidity_2m,pm2p5
  &timezone=auto

Get lat/lon from references/deployment.mdlocation.

Decision logic:

  • Temp high: outdoor temp \x3C indoor by 2°C+ → "open a window"; otherwise → "try a fan or AC"
  • Humidity high: outdoor humidity \x3C indoor by 5%+ → "ventilate"; otherwise → "try a dehumidifier"
  • PM2.5 high: check outdoor PM2.5 first — never suggest opening windows if outdoor air is worse

Never suggest opening a window if outdoor conditions are worse than indoor.


Reference Docs

Read these before interpreting readings or recommending thresholds:

  • references/co2.md — CO₂ thresholds, causes, advice
  • references/pm25.md — PM2.5 thresholds, causes, advice
  • references/temp_humidity.md — Temperature and humidity standards
  • references/deployment.md — This specific installation (created during setup)

Message Types

1. "AirShell alarm RAISED: \x3Calarm>"

  1. Read references/deployment.md for context
  2. Read the relevant reference doc for the measurand
  3. Fetch current readings: GET {device_url}/status
  4. Optionally pull recent trend: GET {device_url}/api/readings?last=30m
  5. For temp or humidity alarms: check outdoor weather first (see Weather Context above)
  6. Decide: is this worth alerting right now?
    • Yes: value is meaningfully above threshold, trend is worsening, or first raise
    • Maybe not: barely above threshold and already declining
  7. If yes → reply with a short plain-language message:
    • Lead with what's happening: "CO₂ in the nursery is at 850 ppm"
    • Add the so-what based on occupant type (more urgent for infants, elderly, respiratory issues)
    • Give context-aware advice — check outdoor conditions first
    • Keep it under 3 sentences

2. "AirShell alarm REPEAT: \x3Calarm>"

Same as RAISED but more direct — the user may not have acted yet. Include how long it's been raised.

3. "AirShell alarm CLEARED: \x3Calarm>"

Usually no notification needed. Exceptions:

  • Was raised for >30 min → brief "all clear" is reassuring
  • User asked to be notified on clear

4. "AirShell rebooted"

Acknowledge quietly. No notification needed unless something looks wrong.

5. User asks about air quality / AirShell

Query the sensor:

GET {device_url}/status                       → current values + alarm state
GET {device_url}/api/readings?last=2h         → recent trend
GET {device_url}/readings?limit=60            → last 60 readings

Report key metrics in plain language. Reference docs for interpretation if a value is borderline.

6. User asks to adjust thresholds

  • Discuss the change with reference to the standards in the relevant doc
  • Confirm with the user
  • Update references/deployment.md
  • POST updated config to the device

Pushing Config

Config is pushed via POST {device_url}/config.

Get device_url from references/deployment.md. Always include the gateway section.

{
  "skill": "airshell",
  "device_id": "{device_id}",
  "alarms": {
    "co2_high": {
      "measurand": "co2",
      "operator": ">",
      "raise": 800,
      "clear": 700,
      "smoothing_min": 5
    },
    "pm25_high": {
      "measurand": "pm25",
      "operator": ">",
      "raise": 50,
      "clear": 35,
      "smoothing_min": 3
    },
    "temp_high": {
      "measurand": "temp",
      "operator": ">",
      "raise": 24,
      "clear": 22,
      "smoothing_min": 10
    },
    "temp_low": {
      "measurand": "temp",
      "operator": "\x3C",
      "raise": 18,
      "clear": 20,
      "smoothing_min": 10
    },
    "humidity_high": {
      "measurand": "humidity",
      "operator": ">",
      "raise": 65,
      "clear": 60,
      "smoothing_min": 10
    },
    "humidity_low": {
      "measurand": "humidity",
      "operator": "\x3C",
      "raise": 30,
      "clear": 35,
      "smoothing_min": 10
    }
  },
  "notifications": {
    "default": {
      "on_raise": true,
      "on_clear": false,
      "repeat": {
        "enabled": true,
        "mode": "escalating",
        "intervals_min": [30, 20, 10]
      }
    }
  },
  "location": {
    "latitude": "{lat}",
    "longitude": "{lon}",
    "description": "{city}"
  },
  "gateway": {
    "webhook_url": "{your_webhook_url}",
    "token": "{your_webhook_token}",
    "channel": "{channel}",
    "to": "{recipient_id}"
  }
}

Fill in values from references/deployment.md. Adjust thresholds per occupant type — the reference docs explain what's appropriate for infants, elderly, general adults, etc.


Purifier Control (optional)

If references/deployment.md has a ## Purifier Control section with script and python paths:

  • On PM2.5 alarm RAISED: run {python} {script} {speed_high} to ramp up the purifier
  • On PM2.5 alarm CLEARED: run {python} {script} {speed_low} to drop it back to quiet

Run silently in the background — don't mention it to the user unless it fails. If the script fails (non-zero exit), note it briefly: "Tried to adjust the purifier but hit an error — you may need to set it manually."

If no purifier config in deployment.md, skip this entirely.


Tone

  • Direct and calm. No alarm unless the situation warrants it.
  • Calibrate urgency to occupant: infant/elderly = act fast; healthy adult = informative but relaxed
  • For borderline readings: informative, not panicky
  • Never just forward numbers — interpret them
安全使用建议
This skill appears to do what it says: monitor a local AirShell sensor, advise on CO₂/PM2.5/temp/humidity, and optionally push config and control a purifier. Before installing, consider: (1) Source is unknown — review files yourself if you need higher assurance. (2) Webhook token exposure: the skill asks the agent to find its gateway webhook URL and token and POST that to the device so the sensor can call back. Only use this with devices you trust on your network (untrusted devices could capture that token). If possible create a scoped/dedicated webhook or token for the sensor. (3) Purifier control is optional but requires storing VeSync credentials in environment variables — follow the docs and avoid hardcoding secrets. (4) The skill will call the local device_url and open-meteo; ensure device_url points to a trusted local IP/Tailscale host. If you want to reduce risk, run the setup interview and push config manually rather than letting the agent discover and post secrets automatically.
功能分析
Type: OpenClaw Skill Name: airshell Version: 1.1.1 The skill bundle facilitates air quality monitoring but includes high-risk capabilities such as local Python script execution (scripts/vesync_example.py) and instructions for the agent to retrieve its own gateway webhook token to send to a remote device (SKILL.md). While these actions are aligned with the stated purpose of connecting a sensor and controlling a purifier, the automated handling of sensitive credentials and the ability to run local code represent a significant attack surface. The skill also performs external network requests to api.open-meteo.com and user-defined device endpoints.
能力评估
Purpose & Capability
The name/description (air quality sensor playbook) matches what the files do: reading docs, polling a local device_url, posting device config, and optional purifier control. The included vesync example aligns with the documented optional purifier control in references/deployment.example.md.
Instruction Scope
Runtime instructions tell the agent to read local reference docs, call local device endpoints (GET {device_url}/status, POST {device_url}/config), and to determine the agent's webhook URL/token from the agent/gateway configuration. That gateway/token lookup is necessary for webhook-based operation but does require the agent to access its gateway config (potentially secrets). Instructions do not ask the agent to read unrelated user files or exfiltrate data to third-party endpoints; the only external web API is open-meteo for weather checks.
Install Mechanism
No install spec is provided (instruction-only), and the only code file is an optional example script. Nothing is downloaded or written to disk by an installer in the skill metadata.
Credentials
The skill declares no required env vars. The optional vesync example script does expect VESYNC_EMAIL / VESYNC_PASSWORD / VESYNC_DEVICE if the user chooses automatic purifier control; these are documented in the example but not mandatory. The agent will need access to its own webhook token or gateway config to configure the sensor, which is proportionate to the stated webhook-based design but is a sensitive capability the user should understand.
Persistence & Privilege
always:false and normal autonomous invocation. The skill writes and reads its own references/deployment.md as part of setup (expected). It does not request persistent system-wide privileges or modify other skills' configs.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install airshell
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /airshell 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.1.1
Fix: vesync credentials via environment variables, never hardcoded
v1.1.0
Optional purifier control via pyvesync — agent ramps purifier speed on PM2.5 alarms, drops back on clear
v1.0.1
Fix: always check outdoor PM2.5 before suggesting ventilation, including for CO₂ alarms
v1.0.0
Initial release — agent skill for the AirShell open-source air quality sensor
元数据
Slug airshell
版本 1.1.1
许可证
累计安装 0
当前安装数 0
历史版本数 4
常见问题

AirShell 🐢 是什么?

Agent playbook for the AirShell open-source air quality sensor (github.com/oloapiu/airshell). Gives your agent domain knowledge about CO₂, PM2.5, temperature... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 354 次。

如何安装 AirShell 🐢?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install airshell」即可一键安装,无需额外配置。

AirShell 🐢 是免费的吗?

是的,AirShell 🐢 完全免费(开源免费),可自由下载、安装和使用。

AirShell 🐢 支持哪些平台?

AirShell 🐢 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 AirShell 🐢?

由 oloapiu(@oloapiu)开发并维护,当前版本 v1.1.1。

💬 留言讨论