add-sensor
Use when user wants to add a new sensor to the Enviro+ monitoring system, or asks to monitor a new data point. Guides through importing libraries, initialization, reading sensor values, publishing to Adafruit IO and Home Assistant, updating documentation, testing, and rate limit verification.
When & Why to Use This Skill
This Claude skill provides a comprehensive, step-by-step framework for expanding the Enviro+ monitoring system. It streamlines the integration of new hardware sensors by guiding users through library initialization, data normalization, and seamless publishing to platforms like Adafruit IO and Home Assistant, ensuring robust and scalable IoT data tracking.
Use Cases
- Expanding IoT Capabilities: Easily add new environmental sensors (e.g., gas, light, or noise) to an existing Raspberry Pi-based monitoring setup with automated code guidance.
- Smart Home Integration: Streamline the process of mapping new sensor data to Home Assistant entities and dashboards for advanced home automation and climate control.
- System Reliability & Compliance: Ensure new sensor integrations adhere to Adafruit IO API rate limits and hardware constraints to prevent data loss or system instability.
- Hardware Debugging: Utilize standardized testing patterns to identify and fix common hardware issues like stale sensor readings or incorrect unit measurements.
| name | add-sensor |
|---|---|
| description | Use when user wants to add a new sensor to the Enviro+ monitoring system, or asks to monitor a new data point. Guides through importing libraries, initialization, reading sensor values, publishing to Adafruit IO and Home Assistant, updating documentation, testing, and rate limit verification. |
Add New Sensor to Enviro+ Logger
This skill guides you through the complete process of adding a new sensor to the project.
Prerequisites
Before adding a sensor:
- Sensor library must be installed in the virtual environment
- Sensor must be hardware-compatible with Raspberry Pi
- Consider Pi Zero 2W's limited resources
Step-by-Step Process
1. Import Sensor Library
Add the sensor library import at the top of publish_to_adafruit.py
from your_sensor_library import SensorClass
2. Initialize Sensor
Add initialization in the read_sensors() function
def read_sensors():
sensors = {}
try:
# ... existing code ...
# Initialize new sensor
new_sensor = SensorClass()
# ... rest of function ...
3. Read Sensor Value
Get the sensor value and add to sensors dict with a clear key name
Important: If the sensor uses analog/ADC readings, it may return stale data on first read (like BME280 and MICS6814). Test this and discard first reading if needed:
# If sensor needs first reading discard:
_ = new_sensor.read()
time.sleep(0.1)
# Get actual reading
value = new_sensor.read()
sensors['new_sensor_name'] = round(value, 2)
4. Publish to Adafruit IO
Add feed mapping in publish_to_adafruit() function's feed_mapping dict:
feed_mapping = {
'temperature': 'enviro-temperature',
'pressure': 'enviro-pressure',
# ... existing feeds ...
'new_sensor_name': 'enviro-new-sensor', # Add this
}
5. Publish to Home Assistant
Add sensor configuration in publish_to_homeassistant() function's sensor_configs dict:
sensor_configs = {
'temperature': {
'name': 'Enviro+ Temperature',
'unit': '°C',
'device_class': 'temperature',
'icon': 'mdi:thermometer'
},
# ... existing sensors ...
'new_sensor_name': {
'name': 'Enviro+ New Sensor',
'unit': 'UNIT', # e.g., 'Pa', '%', 'lx'
'device_class': 'CLASS', # e.g., 'pressure', 'humidity', 'illuminance'
'icon': 'mdi:ICON_NAME'
}
}
Home Assistant device_class reference:
- Temperature:
device_class: 'temperature', unit:'°C' - Pressure:
device_class: 'atmospheric_pressure', unit:'hPa' - Humidity:
device_class: 'humidity', unit:'%' - Light:
device_class: 'illuminance', unit:'lx'(NOT 'lux'!) - Custom: Omit device_class, use descriptive icon
Icon reference: Browse Material Design Icons
6. Update Documentation
README.md:
- Add sensor to the feeds list
- Explain what it measures and typical values
- Update sensor description section
CLAUDE.md (or SKILLS.md if not merged):
- Add sensor details to hardware section
- Document any special considerations (calibration, warm-up, etc.)
7. Test Manually
Run at least 3 times to verify stability:
source ~/.virtualenvs/pimoroni/bin/activate
python3 /home/kleinmatic/Code/enviroplus-logger/publish_to_adafruit.py
8. Verify in Home Assistant
If Home Assistant publishing is enabled:
- Check sensor appears in Settings → Devices & Services → MQTT → Enviro+ Sensor
- Verify in Developer Tools → States (filter for "enviro")
- Check unit of measurement displays correctly
- Verify icon appears as expected
9. Rate Limit Check
Critical: Ensure total publishing time doesn't exceed Adafruit IO limits
- Free tier: 30 data points/minute maximum
- Each sensor takes 0.5 seconds to publish
- Formula:
(number_of_sensors × 0.5 seconds) < 30 seconds
Currently: 8 sensors × 0.5s = 4 seconds ✓
With your new sensor: 9 sensors × 0.5s = 4.5 seconds ✓
If you exceed 30 seconds total, you'll get 429 rate limit errors.
10. Update Dependencies
If you installed a new library:
source ~/.virtualenvs/pimoroni/bin/activate
pip freeze > requirements.txt
Important Reminders
Don't Add Excessive Logging
- microSD card longevity concerns on Pi Zero
- Current logging is acceptable but don't expand it
- Remove temporary debug print statements before committing
Test First Reading Behavior
Many analog sensors return stale data on first read. Always test:
source ~/.virtualenvs/pimoroni/bin/activate
python3 -c "
from your_sensor import Sensor
import time
sensor = Sensor()
print('First reading:', sensor.read())
time.sleep(0.1)
print('Second reading:', sensor.read())
time.sleep(10)
print('After 10s idle:', sensor.read())
time.sleep(0.1)
print('Second after idle:', sensor.read())
"
If first readings are different, discard them like BME280 and MICS6814.
Security Check
Before committing:
- Verify
.envis still in.gitignore - No credentials in code
- Test with
read_sensors.pyfirst
Common Issues
Sensor not appearing in Home Assistant:
- Check Home Assistant logs: Settings → System → Logs
- Look for MQTT discovery errors
- Verify MQTT broker is running
- Check device_class/unit compatibility
Rate limit 429 errors:
- Too many sensors or publishing too frequently
- Reduce cron frequency or number of sensors
Stale readings:
- Add first reading discard pattern
- Test over 10+ minute period for gas sensors (warm-up time)
After Adding Sensor
Run the publishing script manually a few times, then monitor the cron job logs:
tail -f /home/kleinmatic/Code/enviroplus-logger/sensor_log.txt
Verify data appears correctly in both Adafruit IO and Home Assistant (if enabled).