-
Notifications
You must be signed in to change notification settings - Fork 95
Document ESPresense v4 #249
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
WalkthroughDocumentation reorganization splits settings into distinct hardware and network pages, moves calibration/technical guides into a Guides section, relocates integrations under /integrations, removes sensors and initial-settings pages, adjusts navigation metadata, and adds a Playwright-based screenshot automation script. Changes
Sequence Diagram(s)sequenceDiagram
participant Script as scripts/capture-screenshots.js
participant Browser as Chromium (Playwright)
participant Server as Local dev server
participant FS as Filesystem
Script->>Browser: launch browser (mobile viewport)
Script->>Server: request /settings
Browser->>Server: GET /settings
Server-->>Browser: HTML/CSS/JS
Browser->>FS: capture full-page screenshot -> `settings_screen.png`
Script->>Server: request /settings (locate calibration section)
Browser->>Server: GET /settings (DOM)
Browser-->>Browser: wrap calibration section (if found)
Browser->>FS: capture `calibration_screen.png`
Script->>Server: request /hardware
Browser->>Server: GET /hardware
Browser->>FS: capture `hardware_screen.png`
Script->>Server: request /network
Browser->>Server: GET /network
Browser->>FS: capture `network_screen.png`
Script->>Browser: close browser
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
configuration/sensors.md (1)
24-24: "GPIO pin number" is standard technical terminology.Static analysis flagged "GPIO pin number" as redundant since "PIN" technically stands for "Personal Identification Number". However, in embedded systems and electronics documentation, "GPIO pin number" is widely understood standard terminology that clearly communicates the concept. No change needed.
Also applies to: 37-37, 45-45, 55-55, 65-65
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
images/sensors_screen.pngis excluded by!**/*.png
📒 Files selected for processing (2)
configuration/sensors.mdconfiguration/settings.md
🧰 Additional context used
🪛 LanguageTool
configuration/sensors.md
[style] ~24-~24: This phrase is redundant (‘N’ stands for ‘number’). Consider using “pin”.
Context: ... etc.) * Pin (-1 to disable) - GPIO pin number for the LED data line, or -1 to disable...
(PIN_NUMBER)
[style] ~37-~37: This phrase is redundant (‘N’ stands for ‘number’). Consider using “pin”.
Context: ...IR motion pin (-1 for disable)** - GPIO pin number for PIR sensor, or -1 to disable * **PI...
(PIN_NUMBER)
[style] ~45-~45: This phrase is redundant (‘N’ stands for ‘number’). Consider using “pin”.
Context: ...ar motion pin (-1 for disable)** - GPIO pin number for radar sensor, or -1 to disable * **...
(PIN_NUMBER)
[style] ~55-~55: This phrase is redundant (‘N’ stands for ‘number’). Consider using “pin”.
Context: ... Switch pin (-1 for disable) - GPIO pin number for the switch, or -1 to disable * **Sw...
(PIN_NUMBER)
[style] ~65-~65: This phrase is redundant (‘N’ stands for ‘number’). Consider using “pin”.
Context: ... Button pin (-1 for disable) - GPIO pin number for the button, or -1 to disable * **Bu...
(PIN_NUMBER)
🔇 Additional comments (3)
configuration/sensors.md (2)
1-73: Excellent documentation structure and content!The new sensors documentation page is well-organized, comprehensive, and clearly explains all LED and GPIO sensor configuration options. The hierarchical structure, consistent formatting, and helpful tips section make this easy to follow.
13-13: Image file exists and is properly included.The referenced image
sensors_screen.pngis present in theimages/directory.configuration/settings.md (1)
47-47: Good cross-reference to maintain discoverability.The link to the new sensors page is clear and maintains easy navigation to the relocated LED and GPIO sensor configuration documentation. The relative link format
[Sensors](sensors)is correct for Jekyll pages in the same directory.
f5ebb1e to
7048e05
Compare
Deploying espresense with
|
| Latest commit: |
2cae141
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://5bd82b57.espresense.pages.dev |
| Branch Preview URL: | https://wip.espresense.pages.dev |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@configuration/sensors.md`:
- Around line 23-26: Update the phrasing for the LED pin field to be more
concise by replacing "GPIO pin number" with "GPIO pin" wherever the Pin entry
appears (e.g., the bullet "* **Pin (-1 to disable)** - GPIO pin number for the
LED data line, or -1 to disable" and the analogous Pin bullets at the other
sections mentioned); keep the surrounding text ("-1 to disable", "for the LED
data line", etc.) unchanged so only the phrase "GPIO pin number" is renamed to
"GPIO pin" for consistency across the document.
| * **LED Type** - Select the type of addressable LED strip (WS2812, SK6812, etc.) | ||
| * **Pin (-1 to disable)** - GPIO pin number for the LED data line, or -1 to disable | ||
| * **Count (only applies to Addressable LEDs)** - Number of LEDs in the strip | ||
| * **LED Control** - Control mode for the LED behavior |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Simplify “pin number” phrasing to reduce redundancy.
Consider replacing “GPIO pin number” with “GPIO pin” for brevity and consistency across the lists.
✏️ Suggested edit
-* **Pin (-1 to disable)** - GPIO pin number for the LED data line, or -1 to disable
+* **Pin (-1 to disable)** - GPIO pin for the LED data line, or -1 to disable
...
-* **PIR motion pin (-1 for disable)** - GPIO pin number for PIR sensor, or -1 to disable
+* **PIR motion pin (-1 for disable)** - GPIO pin for PIR sensor, or -1 to disable
...
-* **Radar motion pin (-1 for disable)** - GPIO pin number for radar sensor, or -1 to disable
+* **Radar motion pin (-1 for disable)** - GPIO pin for radar sensor, or -1 to disable
...
-* **Switch pin (-1 for disable)** - GPIO pin number for the switch, or -1 to disable
+* **Switch pin (-1 for disable)** - GPIO pin for the switch, or -1 to disable
...
-* **Button pin (-1 for disable)** - GPIO pin number for the button, or -1 to disable
+* **Button pin (-1 for disable)** - GPIO pin for the button, or -1 to disableAlso applies to: 36-38, 44-46, 54-56, 64-66
🧰 Tools
🪛 LanguageTool
[style] ~24-~24: This phrase is redundant (‘N’ stands for ‘number’). Consider using “pin”.
Context: ... etc.) * Pin (-1 to disable) - GPIO pin number for the LED data line, or -1 to disable...
(PIN_NUMBER)
🤖 Prompt for AI Agents
In `@configuration/sensors.md` around lines 23 - 26, Update the phrasing for the
LED pin field to be more concise by replacing "GPIO pin number" with "GPIO pin"
wherever the Pin entry appears (e.g., the bullet "* **Pin (-1 to disable)** -
GPIO pin number for the LED data line, or -1 to disable" and the analogous Pin
bullets at the other sections mentioned); keep the surrounding text ("-1 to
disable", "for the LED data line", etc.) unchanged so only the phrase "GPIO pin
number" is renamed to "GPIO pin" for consistency across the document.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In `@configuration/network.md`:
- Around line 11-41: Apply minor copy and capitalization edits across the
Network doc: change "WiFi" -> "Wi‑Fi" in labels ("WiFi SSID", "WiFi Password"),
change "non encrypted mqtt server (SSL is *NOT* supported)" to "non‑encrypted
MQTT server (SSL is NOT supported)", change "Include pre-released versions in
auto-update" to "Include pre‑release versions in auto‑update", and adjust
"Seconds to wait in captive portal before rebooting" to "Seconds to wait in
captive portal before reboot" for concision; verify headings "Room
Configuration", "WiFi Configuration", "MQTT Configuration", and "Updating"
remain consistent and apply these edits to the matching bullet lines shown in
the diff.
In `@configuration/settings.md`:
- Around line 28-41: The "Counting" and "Filtering" sections in
configuration/settings.md contain multiple typos and inconsistent
capitalization; update the headings and bullets to correct spelling and casing
(e.g., change "usecase" to "use case", "gleen" to "glean", "auto discovery" to
"auto-discovery", "less that" to "less than", and capitalize vendor labels like
"apple"→"Apple" and "msft:cdp"→"Microsoft:cdp" or otherwise normalize vendor
naming), ensure consistent punctuation and sentence case across bullets, and
standardize examples such as "exp:20" formatting so both sections read clearly
and consistently under the "Counting" and "Filtering" headings.
🧹 Nitpick comments (4)
scripts/capture-screenshots.js (3)
4-5: Consider making the IP address configurable.The hardcoded IP
192.168.129.190limits portability. Other developers or CI environments will have different device addresses.♻️ Suggested improvement using environment variable
-const IP = '192.168.129.190'; -const BASE_URL = `http://${IP}`; +const IP = process.env.ESPRESENSE_IP || '192.168.129.190'; +const BASE_URL = `http://${IP}`; + +if (!process.env.ESPRESENSE_IP) { + console.warn('ESPRESENSE_IP not set, using default:', IP); +}
21-21: Prefer waiting for specific elements over fixed timeouts.
waitForTimeout(2000)is a Playwright anti-pattern that can cause flaky behavior. Consider waiting for a specific selector that indicates content is loaded.This also applies to lines 58 and 71.
♻️ Example improvement
-await page.waitForTimeout(2000); +await page.waitForSelector('h2', { state: 'visible' });
27-46: DOM manipulation logic is brittle.The Calibration section extraction relies on finding an
<h2>with exact text "Calibration" and traversing siblings. If the page structure changes, this will fail silently (just logs an error). Consider adding more defensive checks or documenting the expected DOM structure.package.json (1)
15-17: Consider pinning Playwright for explicit version control.The project uses Playwright screenshots (
scripts/capture-screenshots.js), and browser binaries change in minor version updates. Whilepackage-lock.jsoncurrently locks the exact version (1.58.1), the^1.58.1constraint allows upgrades when dependencies are reinstalled or regenerated. Pinning explicitly clarifies intent and prevents unintended browser changes affecting screenshot output.🧷 Suggested pin (optional)
- "playwright": "^1.58.1", + "playwright": "1.58.1",
| The ESP32 will launch a captive browser (under its own SSID) on first normal boot after flashing that will allow you to configure network settings. These settings are accessible from the **Network** page in the device web UI. | ||
|
|
||
| <div class="clearfix" markdown=1> | ||
|
|
||
| <img src="/images/network_screen.png" alt="Screenshot of ESP32 initial settings interface" style="float:right;margin-left:20px;width:200px"> | ||
|
|
||
| ## Room Configuration | ||
| * Room name - This is the name that will identify this sensor in Home Assistant, as well as the state of mqtt_room sensor. Use a upper/lower word and we'll slugify it for the places that need that | ||
|
|
||
| ## WiFi Configuration | ||
| * WiFi SSID - Enter WiFi SSID | ||
| * Available Networks - Dynamic list of available networks | ||
| * WiFi Password - Enter WiFi Password | ||
| * Seconds to wait in captive portal before rebooting | ||
| * Ethernet Type - Select your ethernet connection type if applicable | ||
|
|
||
| ## MQTT Configuration | ||
| * Server - MQTT Broker address (e.g. mqtt.example.com) non encrypted mqtt server (SSL is *NOT* supported) | ||
| * Port - MQTT Broker port (e.g. 1883) | ||
| * Username - Optional. Note: Since MQTT connections are unencrypted, these credentials will be transmitted in plaintext. Consider using these only in trusted networks. | ||
| * Password - Optional. | ||
| * Send to discovery topic - enables home assistant mqtt topic (/homeassistant) | ||
| * Home Assistant discovery topic prefix - customize the discovery topic prefix | ||
| * Send to telemetry topic - enables stats about availability also used by counting | ||
| * Send to devices topic - instead of all mashed together topic, this adds a device to the path (much easier to understand in mqtt explorer) | ||
|
|
||
| ## Updating | ||
| * Automatically update - If enabled we'll ask github for the latest version and if it's not the same version as current update to it | ||
| * Include pre-released versions in auto-update - Modifies the above check to include pre-releases | ||
| * Arduino OTA Update - If enabled you can remotely flash this device using the standard (espota/arduino) protocol. Keep disabled for less memory usage, and security. | ||
| * Update URL - If set will update from this url on next boot |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor copy edits for clarity and capitalization.
A few small tweaks improve readability (Line 18, Line 28, Line 38, Line 40).
✍️ Suggested edits
-* Room name - This is the name that will identify this sensor in Home Assistant, as well as the state of mqtt_room sensor. Use a upper/lower word and we'll slugify it for the places that need that
+* Room name - This is the name that will identify this sensor in Home Assistant, as well as the state of mqtt_room sensor. Use an upper/lower-case word and we'll slugify it where needed
-* Server - MQTT Broker address (e.g. mqtt.example.com) non encrypted mqtt server (SSL is *NOT* supported)
+* Server - MQTT Broker address (e.g. mqtt.example.com) non-encrypted MQTT server (SSL is *NOT* supported)
-* Automatically update - If enabled we'll ask github for the latest version and if it's not the same version as current update to it
+* Automatically update - If enabled we'll ask GitHub for the latest version and if it's not the same version as current update to it
-* Arduino OTA Update - If enabled you can remotely flash this device using the standard (espota/arduino) protocol. Keep disabled for less memory usage, and security.
+* Arduino OTA Update - If enabled you can remotely flash this device using the standard (espota/arduino) protocol. Keep disabled for less memory usage and for security.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| The ESP32 will launch a captive browser (under its own SSID) on first normal boot after flashing that will allow you to configure network settings. These settings are accessible from the **Network** page in the device web UI. | |
| <div class="clearfix" markdown=1> | |
| <img src="/images/network_screen.png" alt="Screenshot of ESP32 initial settings interface" style="float:right;margin-left:20px;width:200px"> | |
| ## Room Configuration | |
| * Room name - This is the name that will identify this sensor in Home Assistant, as well as the state of mqtt_room sensor. Use a upper/lower word and we'll slugify it for the places that need that | |
| ## WiFi Configuration | |
| * WiFi SSID - Enter WiFi SSID | |
| * Available Networks - Dynamic list of available networks | |
| * WiFi Password - Enter WiFi Password | |
| * Seconds to wait in captive portal before rebooting | |
| * Ethernet Type - Select your ethernet connection type if applicable | |
| ## MQTT Configuration | |
| * Server - MQTT Broker address (e.g. mqtt.example.com) non encrypted mqtt server (SSL is *NOT* supported) | |
| * Port - MQTT Broker port (e.g. 1883) | |
| * Username - Optional. Note: Since MQTT connections are unencrypted, these credentials will be transmitted in plaintext. Consider using these only in trusted networks. | |
| * Password - Optional. | |
| * Send to discovery topic - enables home assistant mqtt topic (/homeassistant) | |
| * Home Assistant discovery topic prefix - customize the discovery topic prefix | |
| * Send to telemetry topic - enables stats about availability also used by counting | |
| * Send to devices topic - instead of all mashed together topic, this adds a device to the path (much easier to understand in mqtt explorer) | |
| ## Updating | |
| * Automatically update - If enabled we'll ask github for the latest version and if it's not the same version as current update to it | |
| * Include pre-released versions in auto-update - Modifies the above check to include pre-releases | |
| * Arduino OTA Update - If enabled you can remotely flash this device using the standard (espota/arduino) protocol. Keep disabled for less memory usage, and security. | |
| * Update URL - If set will update from this url on next boot | |
| The ESP32 will launch a captive browser (under its own SSID) on first normal boot after flashing that will allow you to configure network settings. These settings are accessible from the **Network** page in the device web UI. | |
| <div class="clearfix" markdown=1> | |
| <img src="/images/network_screen.png" alt="Screenshot of ESP32 initial settings interface" style="float:right;margin-left:20px;width:200px"> | |
| ## Room Configuration | |
| * Room name - This is the name that will identify this sensor in Home Assistant, as well as the state of mqtt_room sensor. Use an upper/lower-case word and we'll slugify it where needed | |
| ## WiFi Configuration | |
| * WiFi SSID - Enter WiFi SSID | |
| * Available Networks - Dynamic list of available networks | |
| * WiFi Password - Enter WiFi Password | |
| * Seconds to wait in captive portal before rebooting | |
| * Ethernet Type - Select your ethernet connection type if applicable | |
| ## MQTT Configuration | |
| * Server - MQTT Broker address (e.g. mqtt.example.com) non-encrypted MQTT server (SSL is *NOT* supported) | |
| * Port - MQTT Broker port (e.g. 1883) | |
| * Username - Optional. Note: Since MQTT connections are unencrypted, these credentials will be transmitted in plaintext. Consider using these only in trusted networks. | |
| * Password - Optional. | |
| * Send to discovery topic - enables home assistant mqtt topic (/homeassistant) | |
| * Home Assistant discovery topic prefix - customize the discovery topic prefix | |
| * Send to telemetry topic - enables stats about availability also used by counting | |
| * Send to devices topic - instead of all mashed together topic, this adds a device to the path (much easier to understand in mqtt explorer) | |
| ## Updating | |
| * Automatically update - If enabled we'll ask GitHub for the latest version and if it's not the same version as current update to it | |
| * Include pre-released versions in auto-update - Modifies the above check to include pre-releases | |
| * Arduino OTA Update - If enabled you can remotely flash this device using the standard (espota/arduino) protocol. Keep disabled for less memory usage and for security. | |
| * Update URL - If set will update from this url on next boot |
🧰 Tools
🪛 LanguageTool
[grammar] ~28-~28: Use a hyphen to join words.
Context: ...oker address (e.g. mqtt.example.com) non encrypted mqtt server (SSL is NOT supp...
(QB_NEW_EN_HYPHEN)
[uncategorized] ~38-~38: The official name of this software platform is spelled with a capital “H”.
Context: ...matically update - If enabled we'll ask github for the latest version and if it's not ...
(GITHUB)
🤖 Prompt for AI Agents
In `@configuration/network.md` around lines 11 - 41, Apply minor copy and
capitalization edits across the Network doc: change "WiFi" -> "Wi‑Fi" in labels
("WiFi SSID", "WiFi Password"), change "non encrypted mqtt server (SSL is *NOT*
supported)" to "non‑encrypted MQTT server (SSL is NOT supported)", change
"Include pre-released versions in auto-update" to "Include pre‑release versions
in auto‑update", and adjust "Seconds to wait in captive portal before rebooting"
to "Seconds to wait in captive portal before reboot" for concision; verify
headings "Room Configuration", "WiFi Configuration", "MQTT Configuration", and
"Updating" remain consistent and apply these edits to the matching bullet lines
shown in the diff.
| ## Counting | ||
| This is a beta feature, it is for the usecase where a device fingerprint doesn't come up with a unique device but you can gleen useful info from the number of unique macs that are currently broadcasting within a certain distance of the base station. This is most useful for exp:20 (covid exposure apps), apple: (apple devices), or msft:cdp (microsoft devices). Once configured auto discovery will add a Count sensor to your ESPresense device. | ||
|
|
||
| * Include device ids - ids to count | ||
| * Start counting/stop counting (meters) - instead of a HARD line we support allowing a device to "enter" once it gets below a certain distance and only leave when going above a different larger distance. If you set them to the same value you'll get the HARD line | ||
| * Include device with age less than - Since we're just getting stateless advertisements we also need the device to "LEAVE" if not seen within a certain amount of time | ||
| * Include id prefixes (space separated) | ||
| * Start counting devices less than distance (in meters) - "Enter" distance: device counts when closer than this. | ||
| * Stop counting devices greater than distance (in meters) - "Leave" distance: device stops counting when further than this. Setting this higher than the start distance creates a hysteresis zone to prevent rapid toggling. | ||
| * Include devices with age less than (in ms) - Since we're just getting stateless advertisements we also need the device to "LEAVE" if not seen within a certain amount of time. | ||
|
|
||
| ## Filtering | ||
|
|
||
| * Include only sending these ids to mqtt - Just like it says, if set ONLY ids that match this come to mqtt | ||
| * Exclude sending these ids to mqtt - If set will filter out just these ids | ||
| * Maximum distance to report - If the distance is over 16 meters, it's probably crap and not worth even including in a trilaterization attempt, so don't bother sending to mqtt | ||
| * Skip reporting if not seen (in milliseconds) / report early if beacon has moved more than this distance. The basic logic is if i've reported this recently check out how long it's been and how far we've moved. If it's been > than the distance here it will report. If its over the skip reporting ms then we'll send the report with whatever the current distance is. | ||
| * Include only sending these ids to mqtt (eg. apple:iphone10-6 apple:iphone13-2) - If set ONLY ids that match this come to mqtt. | ||
| * Exclude sending these ids to mqtt (eg. exp:20 apple:iphone10-6) - If set will filter out just these ids. | ||
| * Maximum distance to report (in meters) - If the distance is over this value (default 16m), it's likely inaccurate and not worth including in trilateration. | ||
| * Report early if beacon has moved more than this distance (in meters) - If the device moves more than this distance, report immediately. | ||
| * Skip reporting if message age is less that this (in milliseconds) - The logic is: if reported recently, check time elapsed and distance moved. If moved > "Report early" distance, report immediately. If time elapsed > "Skip reporting" time, report regardless of movement. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tighten typos/capitalization in Counting + Filtering.
There are a few spelling/capitalization issues (e.g., “usecase”, “gleen”, “apple”, “auto discovery”, “less that”).
✍️ Suggested cleanup
-This is a beta feature, it is for the usecase where a device fingerprint doesn't come up with a unique device but you can gleen useful info from the number of unique macs that are currently broadcasting within a certain distance of the base station. This is most useful for exp:20 (covid exposure apps), apple: (apple devices), or msft:cdp (microsoft devices). Once configured auto discovery will add a Count sensor to your ESPresense device.
+This is a beta feature. It is for the use case where a device fingerprint doesn't come up with a unique device, but you can glean useful info from the number of unique MACs that are currently broadcasting within a certain distance of the base station. This is most useful for exp:20 (COVID exposure apps), Apple: (Apple devices), or msft:cdp (Microsoft devices). Once configured, auto-discovery will add a Count sensor to your ESPresense device.
-* Skip reporting if message age is less that this (in milliseconds) - The logic is: if reported recently, check time elapsed and distance moved. If moved > "Report early" distance, report immediately. If time elapsed > "Skip reporting" time, report regardless of movement.
+* Skip reporting if message age is less than this (in milliseconds) - The logic is: if reported recently, check time elapsed and distance moved. If moved > "Report early" distance, report immediately. If time elapsed > "Skip reporting" time, report regardless of movement.🧰 Tools
🪛 LanguageTool
[grammar] ~29-~29: Ensure spelling is correct
Context: ...g This is a beta feature, it is for the usecase where a device fingerprint doesn't come...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[grammar] ~29-~29: Ensure spelling is correct
Context: ...ome up with a unique device but you can gleen useful info from the number of unique m...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[uncategorized] ~29-~29: Did you mean the proper noun “Apple” (= technology company)?
Context: ...r exp:20 (covid exposure apps), apple: (apple devices), or msft:cdp (microsoft device...
(APPLE_PRODUCTS)
[grammar] ~29-~29: Use a hyphen to join words.
Context: ...microsoft devices). Once configured auto discovery will add a Count sensor to you...
(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
In `@configuration/settings.md` around lines 28 - 41, The "Counting" and
"Filtering" sections in configuration/settings.md contain multiple typos and
inconsistent capitalization; update the headings and bullets to correct spelling
and casing (e.g., change "usecase" to "use case", "gleen" to "glean", "auto
discovery" to "auto-discovery", "less that" to "less than", and capitalize
vendor labels like "apple"→"Apple" and "msft:cdp"→"Microsoft:cdp" or otherwise
normalize vendor naming), ensure consistent punctuation and sentence case across
bullets, and standardize examples such as "exp:20" formatting so both sections
read clearly and consistently under the "Counting" and "Filtering" headings.
…onfiguration content.
Improve documentation and make it match ESPresense v4.
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.