Skip to content

Rework the GPIO Header LED strip tutorial - #1064

Merged
bharvey88 merged 1 commit into
devfrom
docs/gpio-led-strip-cleanup
Aug 1, 2026
Merged

Rework the GPIO Header LED strip tutorial#1064
bharvey88 merged 1 commit into
devfrom
docs/gpio-led-strip-cleanup

Conversation

@bharvey88

Copy link
Copy Markdown
Contributor

What

Reworks the GPIO Header LED strip tutorial and the pages that share it.

The YAML was broken

The block told readers to set rmt_channel: 1, with a sentence explaining that channel 0 belongs to the built-in LED. ESPHome removed rmt_channel from esp32_rmt_led_strip entirely, so copying that block now fails validation. Current Apollo firmware declares the built-in rgb_light with no channel at all.

Removed the option and the explanation, and left a note so anyone who already copied the old block knows why theirs stopped working.

The images were ~17 MB per page load

22 photos, stored twice under two different name prefixes (44 files), most of them straight 3024x4032 phone shots at 0.5 to 1.8 MB each. CI only auto-resizes PNGs, so the JPGs went out at full size.

Now webp at 1000px on the long edge, one asset set, kebab-case names. The whole page is under 2 MB. The AIR-1 GPIO addon photos got the same treatment, which drops that page from roughly 25 MB to 1.3 MB as a side effect.

Across the asset directory this is 60 MB down to 3.3 MB.

Style guide pass

Bold paragraphs became real headings, so the page has sidebar entries for the first time. "Step 1." pseudo-steps became numbered lists. Added alt text to all 22 images, switched the generic fence to yaml, dropped the hardcoded price and the &nbsp; / <br> cruft, and fixed the run-on lines where two steps and an image were jammed into one sentence.

The AIR-1 copy said "MSR-2" throughout and illustrated the install with MSR-2 back plate photos. It now uses AIR-1 wording and the actual AIR-1 photos.

Five copies became one source

The tutorial existed as five near-identical files. products/msr2 is now the source; the Homey pages and the two orphaned copies include it with --8<--, matching the pattern the rest of the Homey tree already uses.

Left alone on purpose

  • This page says the 5V pin supplies 300mA. The AIR-1 GPIO addon page says under 350mA. Kept 300mA here rather than silently picking a number for both.
  • The two orphaned URLs (products/general/tutorials/... and homey/products/mtr1/...) are kept alive as includes rather than deleted with redirects.
  • Photo-heavy pages across the rest of the wiki have the same oversized-JPG problem, since CI only resizes PNGs. Out of scope here.

Verified

Checked in a browser against a local build: all images load, all have alt text, the annotation renders, no phantom list items from the indentation, step numbering correct, no horizontal overflow at 390px. Build is clean apart from a pre-existing M-1 link warning unrelated to these pages.

🤖 Generated with Claude Code

The YAML told readers to set rmt_channel: 1. ESPHome removed that option
from esp32_rmt_led_strip, so copying the block now fails validation. The
line and the sentence explaining it are gone, with a note so anyone who
copied the old version knows what broke.

Images were the other problem. The page carried 22 raw phone photos at
3024x4032, stored twice under two name prefixes, and CI only auto-resizes
PNGs so the JPGs shipped full size. That is roughly 17 MB per page load.
They are now webp at 1000px on the long edge, one asset set, kebab-case,
under 2 MB for the whole page. The AIR-1 GPIO addon photos got the same
treatment, so that page drops too.

Rewrote both tutorials to the style guide: real headings instead of bold
paragraphs, numbered lists instead of "Step 1." pseudo-steps, second
person, alt text on every image, and a yaml code fence. The AIR-1 copy
now uses AIR-1 wording and AIR-1 photos rather than showing MSR-2 back
plate shots.

The tutorial existed as five near-identical copies. products/msr2 is now
the source and the Homey pages plus the two orphaned copies include it,
matching how the rest of the Homey tree already works.

Two things left alone deliberately: the 300mA figure here still disagrees
with the 350mA on the AIR-1 addon page, and the orphaned URLs are kept
alive as includes rather than deleted with redirects.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@bharvey88, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 438b7b6a-8591-4fa8-b899-32b88a86b3ec

📥 Commits

Reviewing files that changed from the base of the PR and between 2c0c89e and 43c3d8f.

⛔ Files ignored due to path filters (54)
  • docs/assets/0Jrm5FqWzsc9G2KmWBJWMLEr2J4aYyj4Bg.jpg is excluded by !**/*.jpg
  • docs/assets/1OhdBudlNh2Rk8SoytNKdoUHqknn8KA8sQ.png is excluded by !**/*.png
  • docs/assets/28MMBJEeIQOmwUGtP9L3cx0PtCaTL0HX_Q.png is excluded by !**/*.png
  • docs/assets/4Er61OH8tF-IaiVvom0cWPeOyfNkRWtibw.jpg is excluded by !**/*.jpg
  • docs/assets/4OHLuxZVKc1TcCGLfvAEf-1UUl-IzmeHzQ.jpg is excluded by !**/*.jpg
  • docs/assets/5qmwmycqbmvoz-mlkdotbzwkc-4-rei8a.jpg is excluded by !**/*.jpg
  • docs/assets/6uv5liNNA-wHLFfHxiadM56YpIonKQalTg.jpg is excluded by !**/*.jpg
  • docs/assets/9UJnA9aCGf0TNw1uc3ik2xEFxXlLs95bOw.jpg is excluded by !**/*.jpg
  • docs/assets/BDLaEPEomVhYjATCJMSVMltiTS9aoVY9YQ.jpg is excluded by !**/*.jpg
  • docs/assets/EQdHu-pdF_2D7T6GJkjdqSQYZptmHk-cmw.png is excluded by !**/*.png
  • docs/assets/GublKQEhWUdU-OxJiA948P3_HGiwxTpn4w.png is excluded by !**/*.png
  • docs/assets/JI4fSugUQvhRpK1FauJEEPoj3Vwe-QD02Q.jpg is excluded by !**/*.jpg
  • docs/assets/LwzqEXM9B89IWUQCIdZtwo_uYIbYVzdT0g.jpg is excluded by !**/*.jpg
  • docs/assets/Me6P6lhhZUQMhuY--kIQqoFHV6QgrxpO0g.jpg is excluded by !**/*.jpg
  • docs/assets/ObY0NPGDBIBaXPuhUVzo80fr1fToBm5ekg.png is excluded by !**/*.png
  • docs/assets/P3TZVCVhVSBYXFOWtPc4fZML_8-LQTEHQw.jpg is excluded by !**/*.jpg
  • docs/assets/YfpAVN1FtpsODgbFgZg8qEVBNjl3NgaAvQ.png is excluded by !**/*.png
  • docs/assets/a6nANg-L_gqIkPH6ZKQo6mCSSSbacF7FkQ.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-1.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-10.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-2.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-3.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-4.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-5.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-6.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-7.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-8.jpg is excluded by !**/*.jpg
  • docs/assets/air-1-gpio-header-wiki-pic-9.jpg is excluded by !**/*.jpg
  • docs/assets/air1-0Jrm5FqWzsc9G2KmWBJWMLEr2J4aYyj4Bg.jpg is excluded by !**/*.jpg
  • docs/assets/air1-1OhdBudlNh2Rk8SoytNKdoUHqknn8KA8sQ.png is excluded by !**/*.png
  • docs/assets/air1-28MMBJEeIQOmwUGtP9L3cx0PtCaTL0HX_Q.png is excluded by !**/*.png
  • docs/assets/air1-4Er61OH8tF-IaiVvom0cWPeOyfNkRWtibw.jpg is excluded by !**/*.jpg
  • docs/assets/air1-4OHLuxZVKc1TcCGLfvAEf-1UUl-IzmeHzQ.jpg is excluded by !**/*.jpg
  • docs/assets/air1-5qmwmycqbmvoz-mlkdotbzwkc-4-rei8a.jpg is excluded by !**/*.jpg
  • docs/assets/air1-6uv5liNNA-wHLFfHxiadM56YpIonKQalTg.jpg is excluded by !**/*.jpg
  • docs/assets/air1-9UJnA9aCGf0TNw1uc3ik2xEFxXlLs95bOw.jpg is excluded by !**/*.jpg
  • docs/assets/air1-BDLaEPEomVhYjATCJMSVMltiTS9aoVY9YQ.jpg is excluded by !**/*.jpg
  • docs/assets/air1-EQdHu-pdF_2D7T6GJkjdqSQYZptmHk-cmw.png is excluded by !**/*.png
  • docs/assets/air1-GublKQEhWUdU-OxJiA948P3_HGiwxTpn4w.png is excluded by !**/*.png
  • docs/assets/air1-JI4fSugUQvhRpK1FauJEEPoj3Vwe-QD02Q.jpg is excluded by !**/*.jpg
  • docs/assets/air1-LwzqEXM9B89IWUQCIdZtwo_uYIbYVzdT0g.jpg is excluded by !**/*.jpg
  • docs/assets/air1-Me6P6lhhZUQMhuY--kIQqoFHV6QgrxpO0g.jpg is excluded by !**/*.jpg
  • docs/assets/air1-ObY0NPGDBIBaXPuhUVzo80fr1fToBm5ekg.png is excluded by !**/*.png
  • docs/assets/air1-P3TZVCVhVSBYXFOWtPc4fZML_8-LQTEHQw.jpg is excluded by !**/*.jpg
  • docs/assets/air1-YfpAVN1FtpsODgbFgZg8qEVBNjl3NgaAvQ.png is excluded by !**/*.png
  • docs/assets/air1-a6nANg-L_gqIkPH6ZKQo6mCSSSbacF7FkQ.jpg is excluded by !**/*.jpg
  • docs/assets/air1-cS6XiR5FyO8wvSBi9sW3466gHoUWfT7HhA.png is excluded by !**/*.png
  • docs/assets/air1-hbfGA0fIQlpnykuuZOhiEuHlZDW7r3GfoQ.jpg is excluded by !**/*.jpg
  • docs/assets/air1-n0MT-JcoqRwPKYfZOaYyBD2RU4K3x_gmOA.jpg is excluded by !**/*.jpg
  • docs/assets/air1-oBW2IxCJX5zKaZGj_o4JtXuoulEGI8DH5Q.jpg is excluded by !**/*.jpg
  • docs/assets/cS6XiR5FyO8wvSBi9sW3466gHoUWfT7HhA.png is excluded by !**/*.png
  • docs/assets/hbfGA0fIQlpnykuuZOhiEuHlZDW7r3GfoQ.jpg is excluded by !**/*.jpg
  • docs/assets/n0MT-JcoqRwPKYfZOaYyBD2RU4K3x_gmOA.jpg is excluded by !**/*.jpg
  • docs/assets/oBW2IxCJX5zKaZGj_o4JtXuoulEGI8DH5Q.jpg is excluded by !**/*.jpg
📒 Files selected for processing (38)
  • docs/assets/air-1-gpio-header-wiki-pic-1.webp
  • docs/assets/air-1-gpio-header-wiki-pic-10.webp
  • docs/assets/air-1-gpio-header-wiki-pic-2.webp
  • docs/assets/air-1-gpio-header-wiki-pic-3.webp
  • docs/assets/air-1-gpio-header-wiki-pic-4.webp
  • docs/assets/air-1-gpio-header-wiki-pic-5.webp
  • docs/assets/air-1-gpio-header-wiki-pic-6.webp
  • docs/assets/air-1-gpio-header-wiki-pic-7.webp
  • docs/assets/air-1-gpio-header-wiki-pic-8.webp
  • docs/assets/air-1-gpio-header-wiki-pic-9.webp
  • docs/assets/gpio-led-dupont-hot-glue.webp
  • docs/assets/gpio-led-dupont-wires-1.webp
  • docs/assets/gpio-led-dupont-wires-2.webp
  • docs/assets/gpio-led-dupont-wires-3.webp
  • docs/assets/gpio-led-esphome-edit.webp
  • docs/assets/gpio-led-esphome-no-errors.webp
  • docs/assets/gpio-led-ha-color-picker.webp
  • docs/assets/gpio-led-ha-color-wheel.webp
  • docs/assets/gpio-led-ha-effect-list.webp
  • docs/assets/gpio-led-ha-entity.webp
  • docs/assets/gpio-led-msr2-align-x.webp
  • docs/assets/gpio-led-msr2-backplate-off-1.webp
  • docs/assets/gpio-led-msr2-backplate-off-2.webp
  • docs/assets/gpio-led-msr2-gpio-backplate.webp
  • docs/assets/gpio-led-msr2-header-seated.webp
  • docs/assets/gpio-led-msr2-press-header.webp
  • docs/assets/gpio-led-strip-arrow-1.webp
  • docs/assets/gpio-led-strip-arrow-2.webp
  • docs/assets/gpio-led-strip-jst-1.webp
  • docs/assets/gpio-led-strip-jst-2.webp
  • docs/assets/gpio-led-strip-lit.webp
  • docs/homey/products/air1/addons/adding-gpio-header-to-air-1.md
  • docs/homey/products/msr2/examples/gpio-header-control-an-led-strip.md
  • docs/homey/products/mtr1/examples/how-to-use-the-apollo-gpio-header-to-control-an-led-strip.md
  • docs/products/air1/addons/adding-gpio-header-to-air-1.md
  • docs/products/air1/examples/how-to-use-the-apollo-gpio-header-to-control-an-led-strip.md
  • docs/products/general/tutorials/how-to-use-the-apollo-gpio-header-to-control-an-led-strip.md
  • docs/products/msr2/examples/gpio-header-control-an-led-strip.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@bharvey88
bharvey88 merged commit 5dd6349 into dev Aug 1, 2026
1 check passed
@bharvey88
bharvey88 deleted the docs/gpio-led-strip-cleanup branch August 1, 2026 00:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant