Claude-skill-registry 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.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/add-sensor" ~/.claude/skills/majiayu000-claude-skill-registry-add-sensor && rm -rf "$T"
manifest: skills/data/add-sensor/SKILL.md
safety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
  • references .env files
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content

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:

  1. Check sensor appears in Settings → Devices & Services → MQTT → Enviro+ Sensor
  2. Verify in Developer Tools → States (filter for "enviro")
  3. Check unit of measurement displays correctly
  4. 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
    .env
    is still in
    .gitignore
  • No credentials in code
  • Test with
    read_sensors.py
    first

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).