Skip to content

Conversation

@Kampi
Copy link
Owner

@Kampi Kampi commented Oct 14, 2025

Summary by CodeRabbit

  • New Features

    • BeeLight firmware: environmental sensor (illuminance, temperature, pressure, humidity, battery), identify/join behavior, periodic sampling, optional IAQ/VOC/CO2 measurement clusters, and board support for nRF54L15.
  • Hardware

    • Complete KiCad project and PCB assets with templates and resources.
  • CI/CD

    • New workflows to build firmware, generate PCB releases, and produce Zigbee config artifacts.
  • Documentation

    • Added README, RELEASE guide, diagrams, and changelogs.
  • Chores

    • Formatting, ignore rules, manifests, helper scripts and tooling commands.

Kampi and others added 7 commits October 13, 2025 19:07
Working on revision 2.0

- Remove old files

- Replace nRF53 with nRF54L15

- Update README.md
- Update converter for z2m
- Update documentation

- Fix typos in DTS includes
- Fix wrong patch command

- Add BME688
- Add dimension to PCB specification Kibot output
- Add blocklist to west.yml
- Add missing mounting holes
- Add custom cluster for VOC, IAQ and CO2 for Zigbee2Mqtt
- Add patches for custom cluster for ncs-zigbee
- Add west command to build and flash the device configuration
- Add 3D files for the housing
- Add 3D printer project for the housing
- Add KiBot template from Vincent
- Add CI/CD for firmware
- Add CI/CD pipeline for Zigbee configuration
- Add housing version 22
- Add latest patches for APDS-9306

- Change ADC filter capacitor to 1 nF - Update documentation with current consumption

- Optimizing power consumption (40 uA with sensors and Zigbee)
- Remove old files
- Remove log files from artifacts

- Replace nRF53 with nRF54L15

- Update README.md
- Update converter for z2m
- Update documentation

- Fix typos in DTS includes
- Fix wrong patch command
- Fix wrong battery conversion

- Add BME688
- Add dimension to PCB specification Kibot output
- Add blocklist to west.yml
- Add missing mounting holes
- Add custom cluster for VOC, IAQ and CO2 for Zigbee2Mqtt
- Add patches for custom cluster for ncs-zigbee
- Add west command to build and flash the device configuration
- Add 3D files for the housing
- Add 3D printer project for the housing
- Add KiBot template from Vincent
- Add CI/CD for firmware
- Add CI/CD pipeline for Zigbee configuration
- Add housing version 22
- Add latest patches for APDS-9306

- Change ADC filter capacitor to 1 nF - Update documentation with current consumption
- Change log level to CONFIG_BEELIGHT_SENSORS_LOG_LEVEL

- Optimizing power consumption (40 uA with sensors and Zigbee)

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
- Simplify BeeLight headers
- Add group-filter to west manifest
- Add commit template

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke>
- Remove GPIO I2C from rev 2 device tree
- Fix wrong pinctrl references for I2C2

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke>
@Kampi Kampi added this to the Revision 2 milestone Oct 14, 2025
@Kampi Kampi self-assigned this Oct 14, 2025
@Kampi Kampi added bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request labels Oct 14, 2025
@Kampi Kampi force-pushed the 2.1_Dev branch 2 times, most recently from 1ae0d9c to 776e35b Compare October 15, 2025 11:25
@coderabbitai
Copy link

coderabbitai bot commented Oct 15, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

📝 Walkthrough

Walkthrough

Adds repository metadata and CI; introduces a Zephyr/Zigbee firmware app (board, DT overlays, Kconfig, drivers, sensors, events, ZCL cluster extensions), West commands and scripts, and a complete KiCad hardware project with Kibot automation, templates, resources, and many configuration artifacts.

Changes

Cohort / File(s) Summary
Repo metadata & templates
/.coderabbit.yaml, /.github/.commit-msg-template, /.github/FUNDING.yml
New CodeRabbit configuration, commit message template, and FUNDING metadata.
CI workflows
/.github/workflows/firmware.yaml, /.github/workflows/pcb.yaml, /.github/workflows/zigbee.yaml
New GitHub Actions for firmware builds, PCB/KiBot release pipeline, and Zigbee config generation.
Top-level docs & diagrams
/README.md, /RELEASE.md, /docs/BeeLight.drawio
New README, release process doc, and hardware diagram added.
Firmware repo layout & configs
/firmware/.gitignore, /firmware/app/.gitignore, /firmware/app/.vscode/*, /firmware/app/CHANGELOG.md, /firmware/app/CMakeLists.txt, /firmware/app/Kconfig*, /firmware/app/Kconfig.sysbuild, /firmware/app/VERSION, /firmware/app/prj.conf, /firmware/app/config/*.conf, /firmware/app/west.yml, /firmware/app/zigbee_config.yml
Project layout, VSCode settings, version constants, build configs, prj.conf, debug/release config files, west manifest and Zigbee config added/updated.
Board support: BeeLight nRF54L15
/firmware/app/boards/kampi/beelight/*
New board YAML, CMake, Kconfig entries, defconfigs, DTS/DTSI, pinctrl, overlays, partition layout and secure/non-secure variants.
App code & Zigbee device
/firmware/app/src/main.c, /firmware/app/src/beelight/*.h
New Zigbee environment sensor application, device context, cluster wiring, and BeeLight headers (BSEC2/no-BSEC2 variants).
Events subsystem
/firmware/app/src/events/*
New ZBUS channel types, event structs, periodic work, init, handlers, and SYS_INIT wiring.
Sensors: modules & drivers
/firmware/app/src/sensors/*, drivers/sensor/apds9306/*, dts/bindings/sensor/avago,apds9306.yaml
New battery, light (APDS9306), environment (BME688/BSEC optional) sensor modules; APDS9306 driver, bindings, and multiple driver patches.
Zigbee cluster extensions (IAQ/VOC/CO2)
/firmware/app/patches/ncs-zigbee/0001-Add-cluster-for-IAQ-VOC-and-CO2.patch, lib/zboss/include/zcl/*, lib/zboss/src/zcl/*, lib/zboss/src/CMakeLists.txt
New ZCL cluster headers/sources, cluster IDs, vendor flags, server/client init and attribute validation, and CMake entries.
Zephyr/NCS driver patches
/firmware/app/patches/zephyr/*
Patches to integrate APDS9306 driver and fixes (return checks, reset removal, lux conversion, indexing changes) into Zephyr/NCS.
West commands & scripts
/firmware/app/scripts/west-commands.yml, /firmware/app/scripts/astyle_format_west_command.py, /firmware/app/scripts/upload-config.py, /firmware/app/scripts/.gitignore
New West commands: code formatter and upload-config; pycache ignored.
Build helpers & style
/firmware/app/misc/astyle.cfg, firmware/app/scripts/*, CMakeLists updates
AStyle configuration and a West-format command; CMake wiring to include new sources and conditional sensor inclusion.
App sources wiring
/firmware/app/src/{events,sensors}/CMakeLists.txt, other target_sources edits
Added file-glob for event sources and conditional inclusion of sensor sources.
West manifest (submodules)
/firmware/app/west.yml
West manifest with remotes (ncs, bosch), group-filter and project entries (ncs-zigbee, nrf, bsec2).
Hardware: KiCad project & assets
/hardware/BeeLight.kicad_pro, /hardware/BeeLight.kicad_pro-bak, /hardware/BeeLight.kicad_sch, /hardware/BeeLight.xml, /hardware/CHANGELOG.md, /hardware/LICENSE, /hardware/.gitignore, /hardware/README.md
Full KiCad project files, schematic exports, license, changelog, ignore rules, and hardware README added.
Kibot automation & resources
/hardware/kibot_launch.sh, /hardware/kibot_resources/*, /hardware/kibot_yaml/*.yaml
Kibot launcher script, Docker helpers, changelog/sheet helper scripts, templates, color themes, and many KiBot YAML outputs/filters/templates.
Kibot templates & fabrication notes
/hardware/kibot_resources/templates/*, /hardware/Templates/*
Assembly/fabrication notes and multiple KiCad/KiBot title-block and PCB template files added.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Pre-merge checks

✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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 and usage tips.

@Kampi
Copy link
Owner Author

Kampi commented Oct 15, 2025

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Oct 15, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 50

🧹 Nitpick comments (43)
firmware/app/config/debug.conf (1)

13-13: Consider increasing the RTT output buffer size.

The 128-byte RTT output buffer may be insufficient for scenarios with verbose logging or high-frequency log events. This could lead to blocking behavior (given line 11's block mode) or performance degradation.

Consider increasing to at least 256 or 512 bytes if memory permits.

Apply this diff to increase the buffer size:

-CONFIG_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE=128
+CONFIG_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE=256
hardware/Templates/KDT_Template.kicad_wks (1)

170-187: Check Revision field positioning consistency.

The Revision label and value are positioned at x=17.989, but in the GIT variant (KDT_Template_GIT.kicad_wks), the same fields are positioned at x=25.989. This positional difference between related templates could cause layout inconsistencies when switching between template variants.

hardware/Templates/KDT_Template_GIT.kicad_wks (2)

385-393: Font size inconsistency for PROJECT_NAME.

The ${PROJECT_NAME} field uses font size 2 2 at Line 390, while the non-GIT variant (KDT_Template.kicad_wks) and other templates use 2.5 2.5. This inconsistency may result in different visual layouts between template variants.


1-4: Generator version inconsistency across templates.

This template uses generator_version "9.0" while most other templates in the family use "8.0". While this may be intentional to support different KiCad versions, ensure this version difference is documented and that both versions are compatible with the target KiCad installation.

hardware/Templates/KDT_Template_PCB_GIT_A3.kicad_wks (2)

1-4: Generator version inconsistency across PCB templates.

This template uses generator_version "9.0" while other PCB templates (A3, A4, A5) use "8.0". Ensure this version difference is intentional and compatible with the target KiCad installation.


385-393: Font size inconsistency for PROJECT_NAME.

The ${PROJECT_NAME} field uses font size 2 2, while non-GIT PCB templates use 2.5 2.5. This may result in visual layout differences between GIT and non-GIT template variants.

firmware/app/patches/ncs-zigbee/0001-Add-cluster-for-IAQ-VOC-and-CO2.patch (1)

60-105: Fix duplicated IAQ/VOC include blocks.

The same #if defined(ZB_ZCL_SUPPORT_CLUSTER_IAQ/VOC_MEASUREMENT) blocks are repeated three times. This is dead noise and risks future merge conflicts. Please keep a single guard/include pair per cluster.

firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_0_defconfig (1)

1-2: Document the I2C hardware limitation.

The comment indicates that hardware I2C pins don't work in this version, necessitating the bitbanging workaround. This impacts performance and should be tracked for resolution.

Consider:

  1. Creating an issue to track the hardware I2C problem
  2. Adding this limitation to the board's documentation or README
  3. Investigating the root cause (hardware revision, pin configuration, or driver issue)

Would you like me to generate a draft issue template for tracking this hardware limitation?

hardware/kibot_resources/scripts/docker_kibot_linux.sh (2)

5-7: Address shellcheck warnings for safer variable assignments.

The script has several shellcheck violations:

  1. Declaring and assigning in one line can mask return values (SC2155)
  2. Command substitutions should be quoted to prevent word splitting (SC2046)

Apply this diff to address the warnings:

-export USER_ID=$(id -u)
-export GROUP_ID=$(id -g)
-export USER_NAME=$(whoami)
+USER_ID="$(id -u)"
+GROUP_ID="$(id -g)"
+USER_NAME="$(whoami)"
+export USER_ID GROUP_ID USER_NAME

9-9: Consider removing sudo if the user is in the docker group.

The script uses sudo docker run, which may not be necessary if the user is already in the docker group. This could cause unnecessary permission elevation and prompt for passwords.

Consider adding a check or documenting that users should add themselves to the docker group:

-sudo docker run --rm -it \
+docker run --rm -it \

Alternatively, add a comment explaining when sudo is needed.

README.md (1)

88-92: Consider removing the blank line inside the blockquote.

The blank line at line 90 inside the NOTE blockquote violates markdown style guidelines. While this doesn't affect functionality, removing it improves consistency.

Apply this diff:

 > **NOTE**
-> You have to provide a Mouser API key with a variable called `MOUSER_KEY` to make use of the KiCost feature in the Kibot job.
 
 > **NOTE**
+> You have to provide a Mouser API key with a variable called `MOUSER_KEY` to make use of the KiCost feature in the Kibot job.
+>
 > The programming connector is optional and can be left out or unsoldered after flashing the device.
hardware/kibot_resources/scripts/get_changelog_version.py (1)

29-32: Avoid catching generic Exception.

Catching a generic Exception at line 31 can mask unexpected errors and make debugging difficult. Consider catching specific exceptions like IOError or OSError for file operations.

Apply this diff:

     except FileNotFoundError:
         return f"File '{file_path}' not found."
-    except Exception as e:
+    except (IOError, OSError) as e:
         return f"An error occurred: {e}"
hardware/kibot_resources/scripts/get_sheet_title.py (2)

18-19: Remove unused variable title.

The variable title is extracted but never used in the function logic.

Apply this diff:

                 name = sheet.get("name")
-                title_block = sheet.find("title_block")
-                title = title_block.find("title").text if title_block is not None else None
                 if name:

30-35: Avoid catching generic Exception.

Catching a generic Exception at line 34 can mask unexpected errors. Consider catching specific exceptions or at least logging the full traceback for debugging.

Apply this diff:

     except FileNotFoundError:
         print("Error: XML File not found")
-    except Exception as e:
+    except (IOError, OSError, ValueError) as e:
         print(f"Error: {e}")
firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_0.overlay (1)

33-36: Prefer resolved numeric constant for full-ohms.

Arithmetic in DT works via CPP, but 10400 is clearer and avoids preprocessor dependency.

-        full-ohms = <(8200 + 2200)>;
+        full-ohms = <10400>;
hardware/kibot_resources/templates/fabrication_notes.txt (3)

8-10: Fix typo: “circumsized” → “circumscribed”.

-    DIMENSIONS OF CIRCUMSIZED RECTANGLE SHOWN ON THIS
+    DIMENSIONS OF CIRCUMSCRIBED RECTANGLE SHOWN ON THIS

28-30: Hyphenate and casing for compliance phrasing.

-8)  VENDOR SHOULD FOLLOW ROHS COMPLIANT PROCESS 
-    AND Pb FREE FOR MANUFACTURING
+8)  VENDOR SHOULD FOLLOW RoHS-COMPLIANT PROCESS 
+    AND Pb‑FREE MANUFACTURING

35-36: Units formatting (degree symbol).

-   B.  Tg 150 C OR EQUIVALENT.
+   B.  Tg 150°C OR EQUIVALENT.
hardware/kibot_launch.sh (4)

12-13: Avoid nested quotes in kibot_config to drop the need for eval.

-kibot_config="-c 'kibot_yaml/kibot_main.yaml'"
+kibot_config="-c kibot_yaml/kibot_main.yaml"

83-91: Quote PID file path and variables.

-            if [[ -f $pid_file ]]; then
-                pid=$(cat $pid_file)
+            if [[ -f "$pid_file" ]]; then
+                pid="$(cat "$pid_file")"
                 if kill -0 $pid 2>/dev/null; then
                     echo -e "${YELLOW}A server is already running on PID $pid. Please stop it first with --stop-server.${NC}"
                     exit 1
                 else
                     echo -e "${YELLOW}Stale PID file detected. Removing it.${NC}"
-                    rm -f $pid_file
+                    rm -f "$pid_file"
                 fi
             fi

95-111: Quote PID paths when stopping the server.

-            if [[ -f $pid_file ]]; then
-                pid=$(cat $pid_file)
+            if [[ -f "$pid_file" ]]; then
+                pid="$(cat "$pid_file")"
                 if kill -0 $pid 2>/dev/null; then
                     echo -e "${GREEN}Stopping HTTP server with PID $pid...${NC}"
                     kill $pid
-                    rm -f $pid_file
+                    rm -f "$pid_file"
                     echo -e "${GREEN}Server stopped.${NC}"
                     exit 0
                 else
                     echo -e "${YELLOW}No running server found. Removing stale PID file.${NC}"
-                    rm -f $pid_file
+                    rm -f "$pid_file"
                     exit 1
                 fi
             else

173-179: Avoid eval; execute commands directly.

With kibot_config fixed, eval is unnecessary.

-echo -e "${GREEN}Running: $kibot_command1${NC}"
-eval $kibot_command1
+echo -e "${GREEN}Running: $kibot_command1${NC}"
+$kibot_command1
 if [[ "$costs_flag" == false ]]; then
     echo -e "${GREEN}Running: $kibot_command2${NC}"
-    eval $kibot_command2
+    $kibot_command2
 fi
firmware/app/patches/zephyr/0001-drivers-sensor-Add-support-for-Broadcom-APDS-9306.patch (1)

318-324: Make the work item per‑device, not global.

Global apds9306_worker_item breaks with multiple instances and can race. Store k_work_delayable inside apds9306_data and init in apds9306_init.

Would you like a patch to move the delayable work into struct apds9306_data and initialize it during device init?

firmware/app/src/events/CMakeLists.txt (1)

1-2: Add CONFIGURE_DEPENDS to the glob.

Without CONFIGURE_DEPENDS, adding a new .c file in this directory won’t trigger CMake to pick it up until you force a reconfigure, which is easy to miss. Updating the glob keeps the build in sync automatically.

Apply this diff:

-file(GLOB event_sources *.c)
+file(GLOB event_sources CONFIGURE_DEPENDS *.c)
firmware/app/src/sensors/light.c (1)

43-45: Remove unnecessary memset before immediate field assignment.

The memset is redundant since evt.light is immediately assigned on the next line. Direct initialization would be cleaner.

Apply this diff to simplify:

-            struct light_event evt;
-
-            memset(&evt, 0, sizeof(struct light_event));
-
-            evt.light = sensor_val.val1;
+            struct light_event evt = {
+                .light = sensor_val.val1
+            };
firmware/app/scripts/astyle_format_west_command.py (2)

33-33: Prefix unused argument with underscore.

The unknown_args parameter is required by the WestCommand interface but is not used in this implementation. Prefix it with an underscore to indicate it's intentionally unused.

-    def do_run(self, args, unknown_args):
+    def do_run(self, args, _unknown_args):

36-37: Simplify boolean comparison.

Comparing args.dry_run == True is verbose. Use args.dry_run directly for truth checks.

-        if(args.dry_run == True):
+        if args.dry_run:
firmware/app/src/events/events.c (2)

18-23: Include zbus header explicitly to avoid transitive-dependency breakage

Make zbus dependency explicit.

 #include <zephyr/init.h>
 #include <zephyr/kernel.h>
 #include <zephyr/logging/log.h>
+
+#include <zephyr/zbus/zbus.h>
 
 #include "events/events.h"

69-99: Avoid claiming the channel just to read user_data; prevent work-queue blocking

zbus_chan_claim/finish isn’t needed to read user_data and K_FOREVER can block the system work queue. Use container_of on item or directly reschedule the known delayable; keep publish unchanged.

 static void handle_24h_timeout(struct k_work *item)
 {
     struct periodic_event evt = {
     };
-    struct k_work_delayable *work = NULL;
+    struct k_work_delayable *work =
+        CONTAINER_OF(item, struct k_work_delayable, work);
 
     LOG_DBG("24 h timeout");
 
-    zbus_chan_claim(&periodic_24h_chan, K_FOREVER);
-    work = (struct k_work_delayable *)zbus_chan_user_data(&periodic_24h_chan);
     k_work_reschedule(work, K_MSEC(24 * 60 * 60 * 1000UL));
-    zbus_chan_finish(&periodic_24h_chan);
 
     zbus_chan_pub(&periodic_24h_chan, &evt, K_NO_WAIT);
 }
 
 static void handle_5min_timeout(struct k_work *item)
 {
     struct periodic_event evt = {
     };
-    struct k_work_delayable *work = NULL;
+    struct k_work_delayable *work =
+        CONTAINER_OF(item, struct k_work_delayable, work);
 
     LOG_DBG("5 min timeout");
 
-    zbus_chan_claim(&periodic_5min_chan, K_FOREVER);
-    work = (struct k_work_delayable *)zbus_chan_user_data(&periodic_5min_chan);
     k_work_reschedule(work, K_MSEC(5 * 60 * 1000UL));
-    zbus_chan_finish(&periodic_5min_chan);
 
     zbus_chan_pub(&periodic_5min_chan, &evt, K_NO_WAIT);
 }
hardware/BeeLight.kicad_pro (2)

541-546: Template path likely stale

vrml points to ZSWatch.wrl; update or drop if unused.

-      "vrml": "../cad/ZSWatch.wrl"
+      "vrml": "../cad/BeeLight.wrl"

710-766: In-project metadata consistency

COMPANY is "null" here but "Kampis‑Elektroecke" in KiBot config; align to avoid mismatched docs.

-    "COMPANY": "null",
+    "COMPANY": "Kampis-Elektroecke",
.github/workflows/pcb.yaml (2)

215-223: Use direct exit-code check (SC2181) and remove unused variable (SC2034)

Tighten shell; eliminates fragile $? checks and unused vars.

-          revision=$(python3 kibot_resources/scripts/get_changelog_version.py -f CHANGELOG.md)
-          if [[ $? -ne 0 ]]; then
+          if ! revision=$(python3 kibot_resources/scripts/get_changelog_version.py -f CHANGELOG.md); then
               echo -e "${YELLOW}Warning: Unable to determine version from CHANGELOG.md. Defaulting to empty revision.${NC}"
               revision=""
           fi

61-69: Quote variable expansions and drop unused variables (shellcheck SC2086/SC2034)

Add double quotes around vars in shell scripts; remove unused last_tag in both jobs.

-          last_tag=$(git describe --tags --abbrev=0 || echo "")
+          last_tag="$(git describe --tags --abbrev=0 || echo "")"
@@
-            version_arg="-E REVISION='${last_tag}'"
+            version_arg="-E REVISION='${last_tag}'"
@@
-          echo "version_arg=${version_arg}" >> $GITHUB_ENV
-          echo "additional_args=${additional_args}" >> $GITHUB_ENV
+          echo "version_arg=${version_arg}" >> "$GITHUB_ENV"
+          echo "additional_args=${additional_args}" >> "$GITHUB_ENV"
@@
-          zip -r ${{ env.kicad_board }}.zip ${{ env.kibot_output_dir }}-${{ env.kibot_variant }}
+          zip -r "${{ env.kicad_board }}.zip" "${{ env.kibot_output_dir }}-${{ env.kibot_variant }}"
@@
-          rm -rf ${KICAD_LIBRARY}
+          rm -rf "${KICAD_LIBRARY}"

Please run actionlint locally to confirm all SC2086/SC2034/SC2181 warnings are resolved after applying these representative changes.

Also applies to: 161-171, 247-254, 85-88

hardware/kibot_yaml/kibot_main.yaml (1)

49-67: Quote template tokens to satisfy YAML linters (YAMLlint error on '@')

KiBot replaces @tokens@, but plain YAML parsers flag list items like @NETLIST_OUTPUT@. Quote these tokens to improve linting without changing behavior.

Example:

-      - @NETLIST_OUTPUT@
+      - '@NETLIST_OUTPUT@'
-      - @PDF_SCHEMATIC_OUTPUT@
+      - '@PDF_SCHEMATIC_OUTPUT@'
-      - @MD_README_OUTPUT@
+      - '@MD_README_OUTPUT@'

Apply similarly to other occurrences. [Based on static analysis hints]

firmware/app/src/main.c (1)

299-347: Rated voltage attribute uses renamed macro

If you adopt SENSOR_RATED_VOLTAGE_MV, update here accordingly.

Apply this diff:

-    dev_ctx.power_attr.rated_voltage = SENSOR_RATET_VOLTAGE_MV / 100;
+    dev_ctx.power_attr.rated_voltage = SENSOR_RATED_VOLTAGE_MV / 100;
firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_1.overlay (1)

39-46: Remove redundant compatible override
The &i2c20 node and its pinctrl-0/1 phandles are defined (and inherit compatible = "nordic,nrf-twim") in nrf54l15_cpuapp_common.dtsi. In beelight_nrf54l15_cpuapp_1.overlay, you only need:

&i2c20 {
    status = "okay";
    /* other overrides… */
};

Delete the compatible = "nordic,nrf-twim"; line.

firmware/app/src/beelight/beelight_nobsec2.h (3)

22-35: Minor doc nit: “informations” → “information”.

Also consider removing the empty “Client” section or listing intended client clusters for clarity.


104-116: Groups attr present but no Groups cluster declared.

device_ctx_t contains zb_zcl_groups_attrs_t, but Groups cluster is not in the cluster list or simple descriptor. Either add the Groups cluster (server/client as intended) or remove the field to avoid confusion.


128-137: Unused macro parameter identify_client_attr_list.

The parameter is never used in ZB_DECLARE_ENV_SENSOR_CLUSTER_LIST. Either remove it, or add the Identify client cluster descriptor to align with the signature.

Example (removing the unused parameter):

-#define ZB_DECLARE_ENV_SENSOR_CLUSTER_LIST(                                 \
-    cluster_list_name,                                                      \
-    basic_attr_list,                                                        \
-    identify_client_attr_list,                                              \
-    identify_server_attr_list,                                              \
-    power_attr_list,                                                        \
-    illu_attr_list,                                                         \
-    temp_attr_list,                                                         \
-    pres_attr_list,                                                         \
-    hum_attr_list)                                                          \
+#define ZB_DECLARE_ENV_SENSOR_CLUSTER_LIST(                                 \
+    cluster_list_name,                                                      \
+    basic_attr_list,                                                        \
+    identify_server_attr_list,                                              \
+    power_attr_list,                                                        \
+    illu_attr_list,                                                         \
+    temp_attr_list,                                                         \
+    pres_attr_list,                                                         \
+    hum_attr_list)                                                          \

Note: Removing it is a breaking change; update all call sites accordingly.

firmware/app/patches/zephyr/0005-drivers-sensor-APDS9306-Add-lux-conversion.patch (2)

116-149: Integer lux conversion looks sane; consider documenting numeric bounds.

The formula avoids FP and stays within 32-bit even at max raw (24-bit) counts. Consider a short note on expected ranges/saturation behavior to guide consumers.


214-239: Set sensor_value.val2 to 0 in attr_get.

Minor: val2 is no longer initialized; set it to 0 for callers that expect a clean struct.

Apply:

 static int apds9306_attr_get(const struct device *dev, enum sensor_channel channel,
 			     enum sensor_attribute attribute, struct sensor_value *value)
 {
-	struct apds9306_data *data = dev->data;
+	struct apds9306_data *data = dev->data;
+	value->val2 = 0;
hardware/kibot_yaml/kibot_globals.yaml (1)

1-12: Optional: add explicit YAML document start for clarity.

Not required, but adding --- at top improves tooling compatibility.

Example:

+---
 # KiBot Globals
 # https://kibot.readthedocs.io/en/latest/configuration/global.html
hardware/kibot_yaml/kibot_out_csv_pos.yaml (1)

7-13: Consistency nit: quote all placeholder-valued scalars.

You already quote COMMENT/DIR. NAME was the outlier; after fixing, all are consistent. Consider keeping this rule across Kibot YAMLs.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 718af6f and 776e35b.

⛔ Files ignored due to path filters (15)
  • docs/images/Block diagram.png is excluded by !**/*.png
  • docs/images/HomeAssistant.png is excluded by !**/*.png
  • docs/images/Photo_1.png is excluded by !**/*.png
  • docs/images/Rendering.png is excluded by !**/*.png
  • docs/images/Zigbee2MQTT.png is excluded by !**/*.png
  • hardware/Logos/Dummy.png is excluded by !**/*.png
  • hardware/kibot_resources/fonts/Arial.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Arial_Bold.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Arial_Bold_Italic.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Arial_Italic.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Times New Roman Bold Italic.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Times New Roman Bold.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Times New Roman Italic.ttf is excluded by !**/*.ttf
  • hardware/kibot_resources/fonts/Times New Roman.ttf is excluded by !**/*.ttf
  • hardware/meta/icon.png is excluded by !**/*.png
📒 Files selected for processing (107)
  • .coderabbit.yaml (1 hunks)
  • .github/.commit-msg-template (1 hunks)
  • .github/FUNDING.yml (1 hunks)
  • .github/workflows/firmware.yaml (1 hunks)
  • .github/workflows/pcb.yaml (1 hunks)
  • .github/workflows/zigbee.yaml (1 hunks)
  • README.md (1 hunks)
  • RELEASE.md (1 hunks)
  • docs/BeeLight.drawio (1 hunks)
  • firmware/.gitignore (1 hunks)
  • firmware/app/.gitignore (1 hunks)
  • firmware/app/.vscode/launch.json (1 hunks)
  • firmware/app/.vscode/settings.json (1 hunks)
  • firmware/app/CHANGELOG.md (1 hunks)
  • firmware/app/CMakeLists.txt (1 hunks)
  • firmware/app/Kconfig (1 hunks)
  • firmware/app/Kconfig.sysbuild (1 hunks)
  • firmware/app/VERSION (1 hunks)
  • firmware/app/boards/kampi/beelight/Kconfig (1 hunks)
  • firmware/app/boards/kampi/beelight/Kconfig.beelight (1 hunks)
  • firmware/app/boards/kampi/beelight/Kconfig.defconfig (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp.dts (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp.yaml (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_0.overlay (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_0_defconfig (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_1.overlay (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_1_defconfig (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_defconfig (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_ns.dts (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_ns.yaml (1 hunks)
  • firmware/app/boards/kampi/beelight/beelight_nrf54l15_cpuapp_ns_defconfig (1 hunks)
  • firmware/app/boards/kampi/beelight/board.cmake (1 hunks)
  • firmware/app/boards/kampi/beelight/board.yml (1 hunks)
  • firmware/app/boards/kampi/beelight/nrf54l15_cpuapp_common-pinctrl.dtsi (1 hunks)
  • firmware/app/boards/kampi/beelight/nrf54l15_cpuapp_common.dtsi (1 hunks)
  • firmware/app/config/debug.conf (1 hunks)
  • firmware/app/config/release.conf (1 hunks)
  • firmware/app/misc/astyle.cfg (1 hunks)
  • firmware/app/patches/ncs-zigbee/0001-Add-cluster-for-IAQ-VOC-and-CO2.patch (1 hunks)
  • firmware/app/patches/zephyr/0001-drivers-sensor-Add-support-for-Broadcom-APDS-9306.patch (1 hunks)
  • firmware/app/patches/zephyr/0003-drivers-sensor-apds9306-fix-unchecked-return-value-c.patch (1 hunks)
  • firmware/app/patches/zephyr/0004-Remove-reset-from-apds9306-driver.patch (1 hunks)
  • firmware/app/patches/zephyr/0005-drivers-sensor-APDS9306-Add-lux-conversion.patch (1 hunks)
  • firmware/app/prj.conf (1 hunks)
  • firmware/app/scripts/.gitignore (1 hunks)
  • firmware/app/scripts/astyle_format_west_command.py (1 hunks)
  • firmware/app/scripts/upload-config.py (1 hunks)
  • firmware/app/scripts/west-commands.yml (1 hunks)
  • firmware/app/src/beelight/beelight.h (1 hunks)
  • firmware/app/src/beelight/beelight_bsec2.h (1 hunks)
  • firmware/app/src/beelight/beelight_nobsec2.h (1 hunks)
  • firmware/app/src/events/CMakeLists.txt (1 hunks)
  • firmware/app/src/events/Kconfig (1 hunks)
  • firmware/app/src/events/events.c (1 hunks)
  • firmware/app/src/events/events.h (1 hunks)
  • firmware/app/src/main.c (1 hunks)
  • firmware/app/src/sensors/CMakeLists.txt (1 hunks)
  • firmware/app/src/sensors/Kconfig (1 hunks)
  • firmware/app/src/sensors/battery.c (1 hunks)
  • firmware/app/src/sensors/environment.c (1 hunks)
  • firmware/app/src/sensors/light.c (1 hunks)
  • firmware/app/west.yml (1 hunks)
  • firmware/app/zigbee_config.yml (1 hunks)
  • hardware/.gitignore (1 hunks)
  • hardware/BeeLight.kicad_pro (1 hunks)
  • hardware/BeeLight.kicad_pro-bak (1 hunks)
  • hardware/BeeLight.kicad_sch (1 hunks)
  • hardware/BeeLight.xml (1 hunks)
  • hardware/CHANGELOG.md (1 hunks)
  • hardware/LICENSE (1 hunks)
  • hardware/Project Architecture.kicad_sch (1 hunks)
  • hardware/README.md (1 hunks)
  • hardware/Revision History.kicad_sch (1 hunks)
  • hardware/Templates/KDT_Template.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_GIT.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_PCB_A3.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_PCB_A4.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_PCB_A5.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_PCB_GIT_A3.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_PCB_GIT_A4.kicad_wks (1 hunks)
  • hardware/Templates/KDT_Template_PCB_GIT_A5.kicad_wks (1 hunks)
  • hardware/kibot_launch.sh (1 hunks)
  • hardware/kibot_resources/colors/Altium_Theme.json (1 hunks)
  • hardware/kibot_resources/scripts/docker_kibot_linux.sh (1 hunks)
  • hardware/kibot_resources/scripts/docker_kibot_windows.bat (1 hunks)
  • hardware/kibot_resources/scripts/get_changelog.py (1 hunks)
  • hardware/kibot_resources/scripts/get_changelog_version.py (1 hunks)
  • hardware/kibot_resources/scripts/get_sheet_title.py (1 hunks)
  • hardware/kibot_resources/templates/assembly_notes.txt (1 hunks)
  • hardware/kibot_resources/templates/fabrication_notes.txt (1 hunks)
  • hardware/kibot_resources/templates/impedance_table.txt (1 hunks)
  • hardware/kibot_resources/templates/readme.txt (1 hunks)
  • hardware/kibot_yaml/kibot_filt_exclude_testpoints.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_filt_field_rename.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_filt_testpoints.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_globals.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_main.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_blender.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_compress_fab.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_csv_bom.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_csv_drill_table.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_csv_pos.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_csv_report.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_csv_testpoints.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_csv_testpoints_simple.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_excellon_drill.yaml (1 hunks)
  • hardware/kibot_yaml/kibot_out_gerber.yaml (1 hunks)
⛔ Files not processed due to max files limit (29)
  • hardware/kibot_yaml/kibot_out_html_bom.yaml
  • hardware/kibot_yaml/kibot_out_html_ibom.yaml
  • hardware/kibot_yaml/kibot_out_html_kicanvas.yaml
  • hardware/kibot_yaml/kibot_out_html_kiri.yaml
  • hardware/kibot_yaml/kibot_out_logo_copy.yaml
  • hardware/kibot_yaml/kibot_out_md_report.yaml
  • hardware/kibot_yaml/kibot_out_mouser_bom.yaml
  • hardware/kibot_yaml/kibot_out_navigate_results.yaml
  • hardware/kibot_yaml/kibot_out_netlist.yaml
  • hardware/kibot_yaml/kibot_out_odb.yaml
  • hardware/kibot_yaml/kibot_out_pdf_assembly.yaml
  • hardware/kibot_yaml/kibot_out_pdf_fabrication.yaml
  • hardware/kibot_yaml/kibot_out_pdf_schematic.yaml
  • hardware/kibot_yaml/kibot_out_png_3d_viewer.yaml
  • hardware/kibot_yaml/kibot_out_production_doc.yaml
  • hardware/kibot_yaml/kibot_out_sch_variant.yaml
  • hardware/kibot_yaml/kibot_out_step.yaml
  • hardware/kibot_yaml/kibot_out_txt_report.yaml
  • hardware/kibot_yaml/kibot_out_xlsx_bom.yaml
  • hardware/kibot_yaml/kibot_pre_draw_stackup.yaml
  • hardware/kibot_yaml/kibot_pre_drc_report.yaml
  • hardware/kibot_yaml/kibot_pre_erc_report.yaml
  • hardware/kibot_yaml/kibot_pre_include_table.yaml
  • hardware/kibot_yaml/kibot_pre_set_text_variables.yaml
  • hardware/kibot_yaml/kicost_config_local.yaml
  • hardware/meta/info.html
  • prebuilt/zigbee_config.hex
  • z2m/data/configuration.yaml
  • z2m/data/external_converters/beelight.js
🧰 Additional context used
🪛 actionlint (1.7.8)
.github/workflows/pcb.yaml

61-61: shellcheck reported issue in this script: SC2034:warning:1:1: last_tag appears unused. Verify use (or export if used externally)

(shellcheck)


61-61: shellcheck reported issue in this script: SC2086:info:4:36: Double quote to prevent globbing and word splitting

(shellcheck)


61-61: shellcheck reported issue in this script: SC2086:info:6:52: Double quote to prevent globbing and word splitting

(shellcheck)


110-110: shellcheck reported issue in this script: SC2086:info:2:45: Double quote to prevent globbing and word splitting

(shellcheck)


126-126: shellcheck reported issue in this script: SC2086:info:2:46: Double quote to prevent globbing and word splitting

(shellcheck)


161-161: shellcheck reported issue in this script: SC2086:info:5:36: Double quote to prevent globbing and word splitting

(shellcheck)


161-161: shellcheck reported issue in this script: SC2086:info:8:52: Double quote to prevent globbing and word splitting

(shellcheck)


161-161: shellcheck reported issue in this script: SC2086:info:28:38: Double quote to prevent globbing and word splitting

(shellcheck)


161-161: shellcheck reported issue in this script: SC2086:info:29:46: Double quote to prevent globbing and word splitting

(shellcheck)


215-215: shellcheck reported issue in this script: SC2181:style:3:7: Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?

(shellcheck)


215-215: shellcheck reported issue in this script: SC2034:warning:5:5: revision appears unused. Verify use (or export if used externally)

(shellcheck)


247-247: shellcheck reported issue in this script: SC2086:info:1:8: Double quote to prevent globbing and word splitting

(shellcheck)


257-257: shellcheck reported issue in this script: SC2086:info:15:21: Double quote to prevent globbing and word splitting

(shellcheck)

.github/workflows/firmware.yaml

53-53: shellcheck reported issue in this script: SC2086:info:6:51: Double quote to prevent globbing and word splitting

(shellcheck)

🪛 Biome (2.1.2)
firmware/app/.vscode/launch.json

[error] 17-17: Expected a property but instead found '}'.

Expected a property here.

(parse)


[error] 18-18: Expected an array, an object, or a literal but instead found ']'.

Expected an array, an object, or a literal here.

(parse)

🪛 LanguageTool
hardware/README.md

[grammar] ~25-~25: There might be a mistake here.
Context: ...## SPECIFICATIONS | Parameter | Value | | --- | --- | | Dimensions | 32.0 × 24.0...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ...ONS | Parameter | Value | | --- | --- | | Dimensions | 32.0 × 24.0 mm | *** ##...

(QB_NEW_EN)

RELEASE.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...ute ## Table of Contents - Contribute - Table of Contents ...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...ute](#contribute) - Table of Contents - Hardware - [Maintainer](#m...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ...tents](#table-of-contents) - Hardware - Maintainer ## Hardware 1...

(QB_NEW_EN)

firmware/app/CHANGELOG.md

[grammar] ~13-~13: Ensure spelling is correct
Context: ...OSS R23 Added: - Add BME688 - Add suport for BME688 only and Bosch BSEC - Add bl...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

hardware/kibot_resources/templates/impedance_table.txt

[grammar] ~1-~1: There might be a mistake here.
Context: ...e, Impedance [ohms], Tolerance [%], Layer, Trace Width [mm], Gap [mm], Ref. ...

(QB_NEW_EN)


[grammar] ~1-~1: There might be a mistake here.
Context: ...Impedance [ohms], Tolerance [%], Layer, Trace Width [mm], Gap [mm], Ref. Layers ...

(QB_NEW_EN)


[grammar] ~1-~1: There might be a mistake here.
Context: ... Tolerance [%], Layer, Trace Width [mm], Gap [mm], Ref. Layers

(QB_NEW_EN)


[grammar] ~1-~1: There might be a mistake here.
Context: ... [%], Layer, Trace Width [mm], Gap [mm], Ref. Layers

(QB_NEW_EN)

hardware/kibot_resources/templates/readme.txt

[grammar] ~25-~25: There might be a mistake here.
Context: ...## SPECIFICATIONS | Parameter | Value | | --- | --- | | Dimensions | ${bb_w_mm} ...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ...ONS | Parameter | Value | | --- | --- | | Dimensions | ${bb_w_mm} × ${bb_h_mm} m...

(QB_NEW_EN)

README.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...& environment sensor for Home Automation](#beelight---zigbee-based-light--environment-sensor-for-home-automation) - Table of Contents ...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...-home-automation) - Table of Contents - About - [Technical features...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ...Contents](#table-of-contents) - About - Technical features...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...s](#technical-features) - Before you start - PCB - Firmware ...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...you start](#before-you-start) - PCB - Firmware - [Build the ...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...start) - PCB - Firmware - Build the firmware...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...sing-west) - Using the command line - Housing - [Zigbee](#zigbe...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ...(#using-the-command-line) - Housing - Zigbee - [Standard clust...

(QB_NEW_EN)


[grammar] ~18-~18: There might be a mistake here.
Context: ... - Housing - Zigbee - Standard cluster ...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ...(#custom-cluster) - Zigbee Dongle - [Install the device to Zigbee2MQTT](#inst...

(QB_NEW_EN)


[grammar] ~22-~22: There might be a mistake here.
Context: ... - Install the device to Zigbee2MQTT - [Directory structure](#directory-structur...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ...-edge MCU with an nRF54L, running Zephyr - Powered by a single coin cell - Can meas...

(QB_NEW_EN)


[grammar] ~36-~36: There might be a mistake here.
Context: ...g Zephyr - Powered by a single coin cell - Can measure - Temperature - Humidity...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ...ered by a single coin cell - Can measure - Temperature - Humidity - Pressure ...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ... coin cell - Can measure - Temperature - Humidity - Pressure - IAQ - CO2 eq...

(QB_NEW_EN)


[grammar] ~39-~39: There might be a mistake here.
Context: ...Can measure - Temperature - Humidity - Pressure - IAQ - CO2 equivalent - ...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ... - Temperature - Humidity - Pressure - IAQ - CO2 equivalent - VOC equivalen...

(QB_NEW_EN)


[grammar] ~41-~41: There might be a mistake here.
Context: ...rature - Humidity - Pressure - IAQ - CO2 equivalent - VOC equivalent - Li...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ... - Pressure - IAQ - CO2 equivalent - VOC equivalent - Light intensity - B...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...AQ - CO2 equivalent - VOC equivalent - Light intensity - Battery voltage - Sm...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...t - VOC equivalent - Light intensity - Battery voltage - Small housing (40x42 m...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ... - Light intensity - Battery voltage - Small housing (40x42 mm) - Very basic el...

(QB_NEW_EN)


[grammar] ~46-~46: There might be a mistake here.
Context: ...ttery voltage - Small housing (40x42 mm) - Very basic electronic → Can be assembled...

(QB_NEW_EN)


[style] ~47-~47: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...c electronic → Can be assembled by hand very easily - Zigbee2MQTT compatibility ![Block di...

(EN_WEAK_ADJECTIVE)


[grammar] ~47-~47: There might be a mistake here.
Context: ...c → Can be assembled by hand very easily - Zigbee2MQTT compatibility ![Block diagr...

(QB_NEW_EN)


[grammar] ~88-~88: There might be a mistake here.
Context: ... run it via CI/CD in GitHub. > NOTE > You have to provide a Mouser API key w...

(QB_NEW_EN)


[grammar] ~91-~91: There might be a mistake here.
Context: ...st feature in the Kibot job. > NOTE > The programming connector is optional ...

(QB_NEW_EN)


[grammar] ~156-~156: There might be a mistake here.
Context: ...re | 0x0403 | | Rel. Humidity | 0x0405 | | Light | 0x0400 | #### Custom cluster ...

(QB_NEW_EN)


[grammar] ~163-~163: There might be a mistake here.
Context: ...alueandtolerance`. | Cluster | ID | | ------- | -- | | IAQ | 0x1A0A | | VOC ...

(QB_NEW_EN)


[grammar] ~164-~164: There might be a mistake here.
Context: ...nce`. | Cluster | ID | | ------- | -- | | IAQ | 0x1A0A | | VOC | 0x1A0B | | CO2 ...

(QB_NEW_EN)


[grammar] ~165-~165: There might be a mistake here.
Context: ...| ID | | ------- | -- | | IAQ | 0x1A0A | | VOC | 0x1A0B | | CO2 | 0x1A0C | | Att...

(QB_NEW_EN)


[grammar] ~166-~166: There might be a mistake here.
Context: ...| -- | | IAQ | 0x1A0A | | VOC | 0x1A0B | | CO2 | 0x1A0C | | Attribute | ID | | -...

(QB_NEW_EN)


[grammar] ~173-~173: There might be a mistake here.
Context: ...Value | 0x0001 | | Max. Value | 0x0002 | | Tolerance | 0x0003 | #### Zigbee Don...

(QB_NEW_EN)


[grammar] ~182-~182: There might be a mistake here.
Context: ...ll the device to Zigbee2MQTT > NOTE > Because it´s not possible to use custo...

(QB_NEW_EN)


[grammar] ~183-~183: There might be a mistake here.
Context: ...NOTE > Because it´s not possible to use custom cluster with Zigbee2MQTT easily,...

(QB_NEW_EN)


[grammar] ~225-~225: There might be a mistake here.
Context: ...{ ...converters1, ...converters2 };toconst converters = { ...converters1, ...converters2, ...converters3 };6. Save the file 7. Switch to.../zigbee2m...

(QB_NEW_EN)


[grammar] ~227-~227: There might be a mistake here.
Context: ...ters3 };6. Save the file 7. Switch to.../zigbee2mqtt/node_modules/zigbee-herdsman/dist/zspec/zcl/definition8. Open the filecluster.js` and add the f...

(QB_NEW_EN)


[grammar] ~279-~279: Use a hyphen to join words.
Context: ...ry structure - 3d-print: All 3D print related files - cad: All relevant 3D m...

(QB_NEW_EN_HYPHEN)


[grammar] ~279-~279: There might be a mistake here.
Context: ...- 3d-print: All 3D print related files - cad: All relevant 3D models - docs: All k...

(QB_NEW_EN)


[grammar] ~280-~280: There might be a mistake here.
Context: ...ed files - cad: All relevant 3D models - docs: All kinds of project documentation lik...

(QB_NEW_EN)


[grammar] ~281-~281: There might be a mistake here.
Context: ...documentation like schematics, BOM, etc. - drawings: 2D drawings for subcomponents, etc. ...

(QB_NEW_EN)


[grammar] ~282-~282: There might be a mistake here.
Context: ...gs: 2D drawings for subcomponents, etc. - images: All documentation related images - ha...

(QB_NEW_EN)


[grammar] ~283-~283: Use a hyphen to join words.
Context: ...ts, etc. - images: All documentation related images - hardware: KiCad proje...

(QB_NEW_EN_HYPHEN)


[grammar] ~283-~283: There might be a mistake here.
Context: ...mages: All documentation related images - hardware: KiCad project for the PCB - firmware`...

(QB_NEW_EN)


[grammar] ~284-~284: There might be a mistake here.
Context: ... - hardware: KiCad project for the PCB - firmware: Zephyr project for the device firmware...

(QB_NEW_EN)


[grammar] ~285-~285: There might be a mistake here.
Context: ...: Zephyr project for the device firmware - prebuilt: Prebuilt binaries - production: Prod...

(QB_NEW_EN)


[grammar] ~286-~286: There might be a mistake here.
Context: ...firmware - prebuilt: Prebuilt binaries - production: Production files from the latest CI/CD...

(QB_NEW_EN)


[grammar] ~287-~287: There might be a mistake here.
Context: ...oduction files from the latest CI/CD run - z2m: Zigbee2MQTT related files ## Ressourc...

(QB_NEW_EN)


[grammar] ~288-~288: Use a hyphen to join words.
Context: ...he latest CI/CD run - z2m: Zigbee2MQTT related files ## Ressources - [Adding ...

(QB_NEW_EN_HYPHEN)


[grammar] ~292-~292: There might be a mistake here.
Context: ...urces - Adding new Zigbee2MQTT devices - [Zigbee Cluster Library Specification](ht...

(QB_NEW_EN)


[grammar] ~293-~293: There might be a mistake here.
Context: ... - Zigbee Cluster Library Specification - [Generating HEX files for Zigbee producti...

(QB_NEW_EN)


[grammar] ~294-~294: There might be a mistake here.
Context: ...iles for Zigbee production configuration](https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-nrf5sdk-tools/guides/generating_zigbee_hex.html) - [Zigbee Converters](https://github.com/Ko...

(QB_NEW_EN)


[grammar] ~295-~295: There might be a mistake here.
Context: ...ng_zigbee_hex.html) - Zigbee Converters - [KiBot Template](https://github.com/nguye...

(QB_NEW_EN)

hardware/kibot_resources/templates/fabrication_notes.txt

[grammar] ~5-~5: There might be a mistake here.
Context: ...INE DEFINED IN SEPARATE GERBER FILE WITH "Edge_Cuts.GBR" SUFFIX. DIMENSIONS OF ...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...ED HOLE LOCATIONS SHOWN ON THIS DRAWING FOR REFERENCE ONLY. 4) SURFACE FINISH: ...

(QB_NEW_EN)


[grammar] ~28-~28: Use a hyphen to join words.
Context: ...IN GERBER. 8) VENDOR SHOULD FOLLOW ROHS COMPLIANT PROCESS AND Pb FREE FOR MANU...

(QB_NEW_EN_HYPHEN)


[grammar] ~33-~33: There might be a mistake here.
Context: ...RING 9) PCB MATERIAL REQUIREMENTS: A. FLAMMABILITY RATING MUST MEET OR EXCEED ...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ...T OR EXCEED UL94V-0 REQUIREMENTS. B. Tg 150 C OR EQUIVALENT. C. EQUIVALENT M...

(QB_NEW_EN)


[grammar] ~36-~36: There might be a mistake here.
Context: ...REMENTS. B. Tg 150 C OR EQUIVALENT. C. EQUIVALENT MATERIAL SHALL BE RoHS COMPLI...

(QB_NEW_EN)


[grammar] ~50-~50: There might be a mistake here.
Context: ...{c2e_mm} mm HOLE TO HOLE ${h2h_mm} mm #?stackup and impedance_controlled #?st...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.18.1)
README.md

90-90: Blank line inside blockquote

(MD028, no-blanks-blockquote)

🪛 Ruff (0.14.0)
firmware/app/scripts/upload-config.py

4-4: Shebang is present but file is not executable

(EXE001)


4-4: Shebang should be at the beginning of the file

(EXE005)


62-62: Unused method argument: unknown_args

(ARG002)


75-75: Starting a process with a shell, possible injection detected

(S605)


76-76: Starting a process with a shell, possible injection detected

(S605)

hardware/kibot_resources/scripts/get_sheet_title.py

7-7: Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents

(S314)


19-19: Local variable title is assigned to but never used

Remove assignment to unused variable title

(F841)


34-34: Do not catch blind exception: Exception

(BLE001)

hardware/kibot_resources/scripts/get_changelog_version.py

31-31: Do not catch blind exception: Exception

(BLE001)

firmware/app/scripts/astyle_format_west_command.py

4-4: Shebang is present but file is not executable

(EXE001)


4-4: Shebang should be at the beginning of the file

(EXE005)


33-33: Unused method argument: unknown_args

(ARG002)


36-36: Avoid equality comparisons to True; use args.dry_run: for truth checks

Replace with args.dry_run

(E712)


46-46: subprocess call: check for execution of untrusted input

(S603)

🪛 Shellcheck (0.11.0)
hardware/kibot_resources/scripts/docker_kibot_linux.sh

[warning] 5-5: Declare and assign separately to avoid masking return values.

(SC2155)


[warning] 5-5: Quote this to prevent word splitting.

(SC2046)


[warning] 6-6: Declare and assign separately to avoid masking return values.

(SC2155)


[warning] 6-6: Quote this to prevent word splitting.

(SC2046)


[warning] 7-7: Declare and assign separately to avoid masking return values.

(SC2155)


[warning] 7-7: Quote this to prevent word splitting.

(SC2046)

🪛 YAMLlint (1.37.1)
hardware/kibot_yaml/kibot_filt_field_rename.yaml

[error] 17-17: syntax error: expected '', but found ''

(syntax)

hardware/kibot_yaml/kibot_out_csv_bom.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_main.yaml

[error] 51-51: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_csv_drill_table.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_csv_report.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_gerber.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_compress_fab.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_csv_pos.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_excellon_drill.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_csv_testpoints_simple.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_filt_exclude_testpoints.yaml

[error] 15-15: syntax error: expected '', but found ''

(syntax)

hardware/kibot_yaml/kibot_filt_testpoints.yaml

[error] 12-12: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_globals.yaml

[error] 40-40: syntax error: expected '', but found ''

(syntax)

hardware/kibot_yaml/kibot_out_blender.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

hardware/kibot_yaml/kibot_out_csv_testpoints.yaml

[error] 8-8: syntax error: found character '@' that cannot start any token

(syntax)

@Kampi Kampi force-pushed the 2.1_Dev branch 11 times, most recently from b727c47 to d4dc3f4 Compare October 15, 2025 15:00
@Kampi Kampi force-pushed the 2.1_Dev branch 10 times, most recently from 41c1140 to c9f0d33 Compare October 20, 2025 10:23
Kampi added 2 commits October 20, 2025 21:51
- CI/CD: Add CodeRabbit configuration file
- CI/CD: Fix issues reported by CodeRabbit

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke>
- Switch from CR2032 to CR2477 batteries for longer runtime

Closes #28

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
@Kampi Kampi force-pushed the 2.1_Dev branch 12 times, most recently from d41b081 to 8b86dac Compare November 7, 2025 08:51
- Update README
- Add release or debug info to Zigbee FW version
- Fixes from CodeRabbit
- Simplify the cluster definitions and rename them

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
Daniel Kampert added 2 commits November 10, 2025 05:36
- Wrong date variable in PCB CI/CD

Closes #48

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke>
@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants