Install
openclaw skills install airshellAgent playbook for the AirShell open-source air quality sensor (github.com/oloapiu/airshell). Gives your agent domain knowledge about COโ, PM2.5, temperature...
openclaw skills install airshellAgent 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.
Before handling any message, check if references/deployment.md exists and is filled in.
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):
Based on the answers:
references/deployment.md with the deployment context and agreed thresholdsopenclaw gateway status)."After setup, references/deployment.md contains:
Always read this file before interpreting readings or giving advice.
Before giving ventilation advice (for any alarm โ including COโ), check outdoor conditions:
GET https://api.open-meteo.com/v1/forecast
?latitude={lat}&longitude={lon}
¤t=temperature_2m,relative_humidity_2m,pm2p5
&timezone=auto
Get lat/lon from references/deployment.md โ location.
Decision logic:
Never suggest opening a window if outdoor conditions are worse than indoor.
Read these before interpreting readings or recommending thresholds:
references/co2.md โ COโ thresholds, causes, advicereferences/pm25.md โ PM2.5 thresholds, causes, advicereferences/temp_humidity.md โ Temperature and humidity standardsreferences/deployment.md โ This specific installation (created during setup)references/deployment.md for contextGET {device_url}/statusGET {device_url}/api/readings?last=30mSame as RAISED but more direct โ the user may not have acted yet. Include how long it's been raised.
Usually no notification needed. Exceptions:
Acknowledge quietly. No notification needed unless something looks wrong.
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.
references/deployment.mdConfig 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": "<",
"raise": 18,
"clear": 20,
"smoothing_min": 10
},
"humidity_high": {
"measurand": "humidity",
"operator": ">",
"raise": 65,
"clear": 60,
"smoothing_min": 10
},
"humidity_low": {
"measurand": "humidity",
"operator": "<",
"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.
If references/deployment.md has a ## Purifier Control section with script and python paths:
{python} {script} {speed_high} to ramp up the purifier{python} {script} {speed_low} to drop it back to quietRun 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.