Skip to content

Conversation

@mattreim
Copy link
Contributor

@mattreim mattreim commented Sep 12, 2025

  • The ingress.html now fits Home Assistant better and there was no dark mode either.

----Light mode----

deCONZ_light

----Dark mode----

deCONZ_dark
  • The DOCS.md has been adapted to the current circumstances.

  • This manufacturer is written in lowercase dresden elektronik. The integration has already been adjusted #150355.

  • Expand English tanslation

Summary by CodeRabbit

  • New Features

    • Refreshed ingress page with light/dark theming, responsive card layout, simplified buttons and custom ripple interaction; improved metadata and accessibility.
  • Documentation

    • Revised setup, backup/restore and firmware instructions to Phoscon App wording; standardized warnings; expanded English port descriptions; added 8.4.0 changelog entry; updated VNC download reference.
  • Style

    • Standardized branding to “dresden elektronik”; capitalization fixes for IKEA and LEDVANCE; updated page title.
  • Chores

    • Bumped add-on manifest to 8.4.0.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 12, 2025

📝 Walkthrough

Walkthrough

Version bumped to 8.4.0. Documentation, translations, and UI text updated to prefer Phoscon App terminology and lowercase "dresden elektronik". Ingress page rebuilt with metadata, CSS variables (light/dark), responsive layout, and a lightweight ripple interaction. Minor branding capitalization fixes in OTA scripts. No runtime API changes.

Changes

Cohort / File(s) Summary of changes
Release & manifest
deconz/CHANGELOG.md, deconz/config.yaml
Added top-level changelog entry for version 8.4.0; bumped manifest from 8.3.08.4.0; description branding changed to dresden elektronik.
Ingress UI overhaul
deconz/rootfs/usr/share/www/ingress.html
Rebuilt ingress page: added HTML metadata (lang, charset, viewport, color-scheme, title), introduced CSS variables with dark-mode overrides, new centered .card layout, simplified button row (Phoscon / deCONZ), lightweight CSS/JS ripple, responsive tweaks, and updated copy/links.
Documentation updates
deconz/DOCS.md
Reworded navigation paths and hardware guidance; replaced many “WebUI” references with Phoscon App wording (backups, firmware, settings); standardized punctuation; updated VNC download link; minor formatting harmonization.
Branding & readmes
README.md, deconz/README.md
Lowercased brand name from Dresden Elektronik to dresden elektronik in README text.
Translations (network ports)
deconz/translations/en.yaml
Clarified network port descriptions: 40850/tcp → deCONZ API backend (Phoscon/REST access), 5900/tcp → VNC GUI access (not secured), 8081/tcp → WebSocket for external apps (e.g., Node-RED).
OTA service log text
deconz/rootfs/etc/services.d/otau-ikea/run, deconz/rootfs/etc/services.d/otau-ledvance/run
Minor branding/capitalization changes in comments and log messages (e.g., IKEA, LEDVANCE); no control-flow changes.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Ingress
    participant Phoscon
    participant deCONZ

    rect rgb(248,249,255)
    User->>Ingress: Open ingress URL
    Ingress-->>User: Render card UI (theme vars + buttons)
    end

    rect rgb(240,255,240)
    User->>Ingress: Click "Phoscon"
    Note right of Ingress #dff7e2: ripple animation then navigate
    Ingress-->>Phoscon: Open Phoscon App URL (target="_blank")
    end

    rect rgb(255,245,235)
    User->>Ingress: Click "deCONZ"
    Note right of Ingress #ffe8d6: ripple animation then navigate (VNC/GUI)
    Ingress-->>deCONZ: Open deCONZ GUI/VNC URL (target)
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title "deCONZ: Update ingress, docs and a few corrections [2]" clearly refers to real aspects present in the changeset. It explicitly mentions the two major changes (ingress page updates and DOCS.md updates) and acknowledges additional corrections (branding standardization to lowercase, translation updates, log message capitalization fixes, and version bump). While the phrasing uses somewhat broad language like "Update ingress" without specifying the dark mode/theming system, and "corrections" could be more specific, the title is not vague or generic in the manner of "misc updates" or "stuff." A teammate scanning the history would reasonably understand that this PR involves updates to the ingress page, documentation, and various minor refinements.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 59dbfdb and 71972a0.

📒 Files selected for processing (1)
  • deconz/CHANGELOG.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • deconz/CHANGELOG.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build aarch64 deconz add-on
  • GitHub Check: Build armhf deconz add-on

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.

Copy link
Contributor

@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: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
deconz/config.yaml (1)

37-37: Align docs/translations with singular device schema

  • deconz/DOCS.md documents "Option: devices" (deconz/DOCS.md:151) while the add-on option in the schema is device (deconz/config.yaml:28,37). Update DOCS.md to use device.
  • deconz/translations/en.yaml uses the key device (deconz/translations/en.yaml:3) but the display name is "Devices" (same in de.yaml). Make the display label singular ("Device"/"Gerät") or add a short clarifying note that top-level manifest devices (deconz/config.yaml:16) is the host-permissions list and the user-facing option is device.
deconz/rootfs/etc/services.d/otau-ledvance/run (1)

33-37: Bug: DL_DONE is not incremented

((DL_DONE+1)) is a no-op; rate limiting will never trigger, risking API throttling.

Apply:

-    ((DL_DONE+1))
+    ((DL_DONE+=1))
🧹 Nitpick comments (12)
deconz/CHANGELOG.md (1)

3-10: Polish wording for style consistency

Prefer “for example” over “e.g.” and expand language names for clarity.

Apply:

-## 8.3.0
-
-- Ingress entry page revised (e.g. light/dark mode)
-- Add de translation and en translation expanded
+## 8.3.0
+
+- Ingress entry page revised (for example, light and dark mode)
+- Add German translation and expand English translation
deconz/DOCS.md (6)

31-31: Use bold UI path, not code styling.

Align with guide and earlier steps.

-`Settings -> System -> Hardware -> All hardware` page. It is recommended
+**Settings** -> **System** -> **Hardware** -> **All hardware** page. It is recommended

36-39: Remove HTML line break and tighten example lead-in.

Avoid inline HTML and keep instructions direct.

-   the device name in quotes: e.g. something like <br>
+   the device name; for example:

43-45: Format UI button names with bold and remove curly quotes.

Follow UI string formatting rule.

-After installing and starting this add-on, you can use the “deCONZ” button to access the
-deCONZ GUI via VNC or the “Phoscon” button to configure further settings in the Phoscon App.
+After installing and starting this add-on, select **deCONZ** to access the deCONZ GUI via VNC,
+or select **Phoscon** to configure settings in the Phoscon App.

92-95: Make firmware upgrade instructions concise.

Remove fluff and front the goal.

-This add-on allows you to upgrade your firmware straight from the Phoscon App with ease.
-
-Go to `Settings -> Gateway` and click the upgrade button.
+Upgrade firmware in the Phoscon App.
+
+In the Phoscon App, go to **Settings** -> **Gateway**, then select the upgrade button.

109-110: Fix article and simplify the warning.

Grammar and tone.

-**WARNING:** Do not use the following settings to set up a integration manually
-from within Home Assistant!
+**WARNING:** Do not use these settings to set up an integration in Home Assistant.

156-156: Unify the UI path.

Earlier you used “Settings -> System -> Hardware -> All hardware”. Keep it consistent here.

-`Settings -> Hardware -> All hardware` page. It is recommended
+**Settings** -> **System** -> **Hardware** -> **All hardware** page. It is recommended
deconz/rootfs/usr/share/www/ingress.html (2)

3-4: Add basic metadata for accessibility and responsive layout.

Add lang, charset, and viewport.

-<html>
-  <head>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>deCONZ | dresden elektronik</title>

208-211: Harden external links.

Include noopener with noreferrer to prevent reverse tabnabbing.

-            <a href="https://phoscon.de/en/conbee/software#phoscon-app" target="_blank" rel="noreferrer">Phoscon App</a>
+            <a href="https://phoscon.de/en/conbee/software#phoscon-app" target="_blank" rel="noopener noreferrer">Phoscon App</a>
@@
-            <a href="https://phoscon.de/en/conbee/software#deconz" target="_blank" rel="noreferrer">deCONZ GUI</a>
+            <a href="https://phoscon.de/en/conbee/software#deconz" target="_blank" rel="noopener noreferrer">deCONZ GUI</a>
deconz/rootfs/etc/services.d/deconz/discovery (3)

53-60: Use timeouts when validating the existing API key.

Avoids blocking on network issues.

-    http_code=$(curl -s -o /dev/null -w "%{http_code}" \
+    http_code=$(curl -sS --connect-timeout 2 --max-time 4 -o /dev/null -w "%{http_code}" \
         "http://${TARGET_IP}:${API_PORT}/api/${api_key}/config")

67-75: Set content type and timeouts when creating the API key.

Improves robustness with the deCONZ API.

-        if result="$(curl --silent --show-error --request POST \
-            -d '{"devicetype": "Home Assistant"}' \
+        if result="$(curl --silent --show-error --connect-timeout 2 --max-time 4 \
+            --request POST -H 'Content-Type: application/json' \
+            -d '{"devicetype": "Home Assistant"}' \
             "http://${TARGET_IP}:${API_PORT}/api")"; then

85-93: Add timeouts when fetching bridge ID.

Same reason: avoid stalls.

-    if result="$(curl --silent --show-error \
+    if result="$(curl --silent --show-error --connect-timeout 2 --max-time 4 \
         --request GET "http://${TARGET_IP}:${API_PORT}/api/${api_key}/config")"; then
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 6e93e73 and 2bd1fc1.

📒 Files selected for processing (12)
  • README.md (1 hunks)
  • deconz/CHANGELOG.md (1 hunks)
  • deconz/DOCS.md (6 hunks)
  • deconz/Dockerfile (1 hunks)
  • deconz/README.md (1 hunks)
  • deconz/config.yaml (1 hunks)
  • deconz/rootfs/etc/services.d/deconz/discovery (1 hunks)
  • deconz/rootfs/etc/services.d/otau-ikea/run (1 hunks)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (1 hunks)
  • deconz/rootfs/usr/share/www/ingress.html (1 hunks)
  • deconz/translations/de.yaml (1 hunks)
  • deconz/translations/en.yaml (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
*/**(html|markdown|md)

⚙️ CodeRabbit configuration file

*/**(html|markdown|md): - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.

  • Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
  • In step-by-step instructions, front the location phrase in the instructional sentence.
  • In step-by-step instructions, front the 'goal' in the instructional sentence.
  • In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
  • do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

*/**(html|markdown|md): - Use bold to mark UI strings.

  • If "" are used to mark UI strings, replace them by bold.

  • Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"

  • Use sentence-style capitalization also in headings.

do not comment on HTML used for icons

Avoid flagging inline HTML for embedding videos in future reviews for this repository.

Files:

  • deconz/CHANGELOG.md
  • deconz/README.md
  • deconz/Dockerfile
  • deconz/config.yaml
  • deconz/DOCS.md
🪛 GitHub Check: YAMLLint
deconz/translations/de.yaml

[failure] 18-18:
line too long


[failure] 17-17:
line too long

deconz/translations/en.yaml

[failure] 18-18:
line too long


[failure] 17-17:
line too long

🪛 GitHub Actions: Lint
deconz/translations/en.yaml

[error] 17-17: yamllint: line-length violation on line 17:81: line too long (84 > 80 characters) in ./deconz/translations/en.yaml.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build aarch64 deconz add-on
  • GitHub Check: Build armhf deconz add-on
🔇 Additional comments (12)
deconz/README.md (1)

5-5: Branding casing aligned with manufacturer

Lowercasing to “dresden elektronik” matches the official style and is consistent across the PR.

README.md (1)

22-22: Consistent branding

Casing updated to “dresden elektronik” is correct and consistent with other files.

deconz/rootfs/etc/services.d/otau-ikea/run (1)

15-15: Correct brand capitalization in log

“IKEA” capitalization fix is correct.

deconz/Dockerfile (1)

38-38: Reduce image size: apt cache cleanup

Adding apt-get clean in the same RUN layer is correct and reduces image size. LGTM.

deconz/config.yaml (2)

2-2: Version bump

8.3.0 matches the changelog entry.


6-6: Description branding

Casing change to “dresden elektronik” is correct.

deconz/rootfs/etc/services.d/otau-ledvance/run (1)

5-5: Brand capitalization fixes

“OSRAM LEDVANCE” capitalization in header and logs is correct.

Also applies to: 12-12, 16-16

deconz/translations/en.yaml (1)

4-4: Label pluralization looks good.

"Devices" matches the docs intent and branding updates.

deconz/DOCS.md (3)

182-184: Tighten step wording.

[ suggest_nitpick ]

-  **Settings** -> **Gateway** -> **Backup options** button, next create
+  **Settings** -> **Gateway** -> **Backup options**, then create

189-189: Clarify restore instruction.

[ suggest_nitpick ]

-6. Restore the backup you created at the first step at the same location in the Phoscon App as before.
+6. Restore the backup at the same location in the Phoscon App as in step 1.

151-151: Option name mismatch — config.yaml contains both devices: and device:

config.yaml shows a top-level devices: (line 16) and indented device: entries (lines 28, 37). Confirm which key is the intended add-on option and make DOCS.md match the schema.

  • If the schema key is device, change the header in DOCS.md to:

    Option: device (required)

  • If the schema key is devices, update examples/translations to use devices.

config.yaml — lines: 16, 28, 37.

deconz/rootfs/etc/services.d/deconz/discovery (1)

101-106: Confirm host value expected by HA discovery consumers

rg returned no matches for bashio::discovery; cannot verify consumers in repo. Confirm whether discovery expects the documented alias "core-deconz" instead of hostname—if so, change:

-    host "$(hostname)" \
+    host "core-deconz" \

Copy link
Contributor

@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: 4

♻️ Duplicate comments (2)
deconz/rootfs/etc/services.d/deconz/discovery (2)

23-37: Resolved earlier concern: reachability loop now uses curl timeouts and exits cleanly.

This addresses the prior “add timeouts and fail path” feedback.


77-78: Good: API key no longer logged.

This addresses the credential exposure concern from earlier review.

🧹 Nitpick comments (3)
deconz/translations/de.yaml (1)

7-15: Consistency: capitalize protocol acronyms (APS/ZCL/ZDP/OTAU) and “Info”

German/English mix is fine, but acronyms are typically uppercase; this matches deCONZ terms and improves UI polish. Align with en.yaml if it already defines the style.

   dbg_aps:
-    name: Debug aps
+    name: Debug APS
   dbg_info:
-    name: Debug info
+    name: Debug Info
   dbg_otau:
-    name: Debug otau
+    name: Debug OTAU
   dbg_zcl:
-    name: Debug zcl
+    name: Debug ZCL
   dbg_zdp:
-    name: Debug zdp
+    name: Debug ZDP
deconz/rootfs/etc/services.d/deconz/discovery (2)

20-22: Nice: centralized API host/port.

Good step toward configurability. Minor: consider marking them readonly.

-TARGET_IP="127.0.0.1"
-API_PORT="40850"
+declare -r TARGET_IP="127.0.0.1"
+declare -r API_PORT="40850"

50-55: Guard sqlite3 usage to avoid hard failure on missing binary.

Add a quick pre-flight check and skip the DB read if sqlite3 isn’t present.

-# Read API key from database
-if [ -n "$DATA_STORE" ]; then
-    api_key=$(sqlite3 "${DATA_STORE}" \
-        'SELECT apikey FROM auth WHERE devicetype="Home Assistant" ORDER BY createdate DESC LIMIT 1' 2>/dev/null)
-fi
+# Read API key from database
+if [ -n "$DATA_STORE" ]; then
+    if command -v sqlite3 >/dev/null 2>&1; then
+        api_key=$(sqlite3 "${DATA_STORE}" \
+            'SELECT apikey FROM auth WHERE devicetype="Home Assistant" ORDER BY createdate DESC LIMIT 1' 2>/dev/null)
+    else
+        bashio::log.warning "sqlite3 not available; skipping DB lookup for API key."
+    fi
+fi
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 2bd1fc1 and 82b4361.

📒 Files selected for processing (3)
  • deconz/rootfs/etc/services.d/deconz/discovery (1 hunks)
  • deconz/translations/de.yaml (1 hunks)
  • deconz/translations/en.yaml (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • deconz/translations/en.yaml
🧰 Additional context used
🪛 GitHub Check: YAMLLint
deconz/translations/de.yaml

[failure] 20-20:
line too long

🪛 GitHub Actions: Lint
deconz/translations/de.yaml

[error] 20-20: yamllint failed on ./deconz/translations/de.yaml: line too long (85 > 80 characters) (line-length)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build aarch64 deconz add-on
🔇 Additional comments (3)
deconz/rootfs/etc/services.d/deconz/discovery (3)

39-49: DB fallback path looks good.

The alternate dresden-elektronik location and clear logs will help with migrations.


106-111: Confirm discovery schema expects numeric port (using caret).

Using “^” to emit a JSON number is typical for bashio, but please confirm Home Assistant’s deCONZ discovery schema expects an integer here.

Would you like me to open a follow-up to check the integration’s discovery schema and adjust if it expects a string?


115-118: Clear success/failure logs on discovery send.

Helpful for users and support triage.

Copy link
Contributor

@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: 2

♻️ Duplicate comments (1)
deconz/rootfs/etc/services.d/deconz/discovery (1)

23-33: Fix success-at-attempt-30 bug in readiness loop.
If the API becomes reachable exactly on the 30th try, i remains 30 and the script exits as “not reachable.”

Use a ready flag:

 # Wait until deCONZ API is reachable
 bashio::log.info "Waiting for deCONZ API to be available..."
+ready=0
 for i in $(seq 1 30); do
     if curl -fsS --connect-timeout 1 --max-time 2 -o /dev/null \
        "http://${TARGET_IP}:${API_PORT}/api"; then
         bashio::log.info "deCONZ API is reachable."
-        break
+        ready=1
+        break
     fi
     sleep 1
 done

-if [ "$i" -eq 30 ]; then
+if [ "$ready" -ne 1 ]; then
     bashio::log.error "deCONZ API is not reachable after 30 seconds – stopping discovery."
     exit 1
 fi

Also applies to: 34-37

🧹 Nitpick comments (5)
deconz/translations/de.yaml (1)

6-15: Unify capitalization of debug labels (optional)

Use uppercase acronyms (APS, ZCL, ZDP, OTAU) and title-case “Info” for consistency with typical UI labels.

   dbg_aps:
-    name: Debug aps
+    name: Debug APS
   dbg_info:
-    name: Debug info
+    name: Debug Info
   dbg_otau:
-    name: Debug otau
+    name: Debug OTAU
   dbg_zcl:
-    name: Debug zcl
+    name: Debug ZCL
   dbg_zdp:
-    name: Debug zdp
+    name: Debug ZDP
deconz/rootfs/etc/services.d/deconz/discovery (4)

20-22: Allow host/port overrides via env for flexibility.
Lets power users/tests point discovery at a different IP/port without editing the script.

Apply:

-TARGET_IP="127.0.0.1"
-API_PORT="40850"
+TARGET_IP="${DECONZ_API_HOST:-127.0.0.1}"
+API_PORT="${DECONZ_API_PORT:-40850}"

34-37: Exit code policy: consider exiting 0 to avoid addon restart loops.
If discovery is ancillary, a non-zero exit may cause s6 to keep restarting the service.

Option if you prefer non-fatal behavior:

-    bashio::log.error "deCONZ API is not reachable after 30 seconds – stopping discovery."
-    exit 1
+    bashio::log.error "deCONZ API is not reachable after 30 seconds – stopping discovery."
+    exit 0

Please confirm intended s6 behavior for this script in this service context.


39-49: Read SQLite DB in read-only mode to avoid locks.
Prevents write-lock contention with deCONZ while querying.

Adjust the sqlite3 call (works when the CLI supports URI and mode=ro):

-    api_key=$(sqlite3 "${DATA_STORE}" \
+    api_key=$(sqlite3 "file:${DATA_STORE}?mode=ro" \
         'SELECT apikey FROM auth WHERE devicetype="Home Assistant" ORDER BY createdate DESC LIMIT 1' 2>/dev/null)

If the base image sqlite3 lacks URI support, keep current behavior.

Also applies to: 50-55


71-83: Optional: log deCONZ error reason at debug level during key creation.
Helps diagnose “link button not pressed” vs. other failures without leaking secrets.

You can extract and log the error description when no key is returned:

             if bashio::var.has_value "${api_key}"; then
                 bashio::log.info "API key successfully created after ${i} seconds."
                 break
             fi
+            err="$(bashio::jq "${result}" '.[0].error.description // empty')"
+            if [ -n "$err" ]; then
+                bashio::log.debug "API key creation attempt ${i}: ${err}"
+            fi
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 82b4361 and 484785c.

📒 Files selected for processing (2)
  • deconz/rootfs/etc/services.d/deconz/discovery (1 hunks)
  • deconz/translations/de.yaml (1 hunks)
🧰 Additional context used
🪛 GitHub Check: YAMLLint
deconz/translations/de.yaml

[failure] 20-20:
trailing spaces

🪛 GitHub Actions: Lint
deconz/translations/de.yaml

[error] 20-20: yamllint: trailing spaces detected at line 20, column 54 (trailing-spaces).

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Build aarch64 deconz add-on
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build amd64 deconz add-on
🔇 Additional comments (7)
deconz/rootfs/etc/services.d/deconz/discovery (7)

12-12: LGTM: Clear startup log.
Helpful for tracing discovery lifecycle.


68-89: LGTM: API-key creation hardened (timeouts, content-type, masked logs).
Solid improvements; good retry window and clean logging.


90-106: LGTM: bridge-id retrieval is robust (timeouts + strict hex validation).
Prevents “null”/empty values from being accepted.


107-111: LGTM: graceful exit when bridge ID cannot be obtained.
Avoids noisy failures when deCONZ isn’t ready yet.


115-115: Confirm var.json caret semantics for numeric port.
Caret prefix should keep the value unquoted. Just double-check against current bashio version.


122-122: LGTM: positive confirmation log on successful discovery.
Good operator feedback.


124-124: LGTM: error log on discovery failure.
Appropriate visibility without leaking payload.

Copy link
Contributor

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
deconz/rootfs/etc/services.d/otau-ledvance/run (1)

23-26: Validate required fields and avoid corrupt/partial files.

Skip entries with missing metadata and write downloads atomically with curl -f to prevent saving HTML/partial files as firmware.

     OSRAM_COMPANY=$( echo "${OSRAM_DATA}" | jq --raw-output ".firmwares[$i].identity.company  // empty" 2>/dev/null)
     OSRAM_PRODUCT=$( echo "${OSRAM_DATA}" | jq --raw-output ".firmwares[$i].identity.product  // empty" 2>/dev/null)
     OTAU_FILENAME=$( echo "${OSRAM_DATA}" | jq --raw-output ".firmwares[$i].name  // empty" 2>/dev/null)
     OTAU_URL="$URL_OSRAM/download/${OSRAM_COMPANY}/${OSRAM_PRODUCT}/latest"    
+    # Skip if any required field is missing
+    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
+        continue
+    fi
@@
-    curl -s -L -o "${OTAU_FILE}" "${OTAU_URL}" || true
+    # Download atomically; only move into place on success
+    curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}" && \
+      mv -f "${OTAU_FILE}.tmp" "${OTAU_FILE}" || true
     ((DL_DONE+=1))

Also applies to: 28-33

♻️ Duplicate comments (1)
deconz/rootfs/etc/services.d/deconz/discovery (1)

23-36: Fix 30th-attempt success being treated as failure (off-by-one).

If the API becomes reachable exactly on the 30th attempt, you log success and then immediately treat it as a failure because $i equals 30. Use a readiness flag instead of comparing $i.

 # Wait until deCONZ API is reachable
 bashio::log.info "Waiting for deCONZ API to be available..."
-for i in $(seq 1 30); do
+ready=0
+for i in $(seq 1 30); do
     if curl -fsS --connect-timeout 1 --max-time 2 -o /dev/null \
        "http://${TARGET_IP}:${API_PORT}/api"; then
         bashio::log.info "deCONZ API is reachable."
-        break
+        ready=1
+        break
     fi
     sleep 1
 done
 
-if [ "$i" -eq 30 ]; then
+if [ "$ready" -ne 1 ]; then
     bashio::log.error "deCONZ API is not reachable after 30 seconds – stopping discovery."
     exit 0
 fi
🧹 Nitpick comments (9)
deconz/rootfs/etc/services.d/otau-ledvance/run (2)

20-22: Harden JSON parsing against schema changes/invalid payloads.

Make length computation tolerant to missing keys or invalid JSON.

-OSRAM_DATA_SIZE="$(echo "${OSRAM_DATA}" | jq --raw-output '.firmwares | length')"
+OSRAM_DATA_SIZE="$(
+  jq -er '.firmwares // [] | length' <<<"${OSRAM_DATA}" 2>/dev/null || echo 0
+)"

34-38: Use arithmetic test; avoid '[ ... ]' with '=='.

This is clearer and shell-agnostic.

-if [ "$((DL_DONE % 10))" == "0" ]; then
+if (( DL_DONE % 10 == 0 )); then
deconz/rootfs/usr/share/www/ingress.html (3)

165-181: Duplicate ripple implementations (CSS ::after + JS) cause double flashes. Pick one.

Keep the JS ripple (better click-positioned) and remove the CSS pseudo-element.

-      .mdc-button::after {
-        content: "";
-        position: absolute;
-        border-radius: 50%;
-        width: 100px;
-        height: 100px;
-        transform: scale(0);
-        background: rgba(255,255,255,0.4);
-        opacity: 0;
-        transition: transform 0.5s, opacity 1s;
-        pointer-events: none;
-      }
-      .mdc-button:active::after {
-        transform: scale(1.8);
-        opacity: 0.6;
-        transition: 0s;
-      }

Also applies to: 224-238


151-164: Respect reduced-motion preference.

Disable ripple/animations for users with prefers-reduced-motion.

       @keyframes ripple {
         to {
           transform: scale(4);
           opacity: 0;
         }
       }
+      @media (prefers-reduced-motion: reduce) {
+        * { animation: none !important; transition: none !important; }
+        .ripple { display: none !important; }
+      }

Also applies to: 224-238


80-84: Remove hard-coded left offset on title.

The 60px left margin looks like a leftover spacer; let toolbar padding handle alignment.

-      .toolbar h1 {
-        margin: 0 0 0 60px;
+      .toolbar h1 {
+        margin: 0;
         font-size: 20px;
         font-weight: 500;
       }
deconz/rootfs/etc/services.d/deconz/discovery (4)

39-49: Downgrade severity when DB is missing; it's not fatal.

Missing DB only skips local lookup; the flow still creates/validates an API key. Use warning to avoid noisy “error” logs for a non-fatal path.

-        bashio::log.error "No database found in either path! Proceeding without serial."
+        bashio::log.warning "No database found in either path; proceeding without serial."

50-55: Guard against missing sqlite3 binary.

If sqlite3 isn’t present, this will fail silently. Add an explicit check and log once.

 # Read API key from database
 if [ -n "$DATA_STORE" ]; then
-    api_key=$(sqlite3 "${DATA_STORE}" \
-        'SELECT apikey FROM auth WHERE devicetype="Home Assistant" ORDER BY createdate DESC LIMIT 1' 2>/dev/null)
+    if command -v sqlite3 >/dev/null 2>&1; then
+        api_key=$(sqlite3 "${DATA_STORE}" \
+            'SELECT apikey FROM auth WHERE devicetype="Home Assistant" ORDER BY createdate DESC LIMIT 1' 2>/dev/null)
+    else
+        bashio::log.warning "sqlite3 binary not found; skipping DB lookup for API key."
+    fi
 fi

73-93: Optional: clarify link-button wait loop messaging.

When the POST returns the typical “link button not pressed” error, you silently retry. Consider a single info-level message like “Waiting for Phoscon authentication…” on first failure, then debug logs to avoid user confusion.


95-115: Optional: shorten serial poll interval after first success signal.

If config is reachable, polling every 5s for up to ~2 minutes is conservative. You could use a shorter interval (e.g., 2s) for the first 20s to speed up happy-path onboarding.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between c6a5f8f and a05711b.

📒 Files selected for processing (8)
  • deconz/CHANGELOG.md (1 hunks)
  • deconz/DOCS.md (6 hunks)
  • deconz/config.yaml (3 hunks)
  • deconz/rootfs/etc/services.d/deconz/discovery (1 hunks)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (2 hunks)
  • deconz/rootfs/usr/share/www/ingress.html (1 hunks)
  • deconz/translations/de.yaml (1 hunks)
  • deconz/translations/en.yaml (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
  • deconz/CHANGELOG.md
  • deconz/translations/en.yaml
  • deconz/config.yaml
  • deconz/DOCS.md
  • deconz/translations/de.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build aarch64 deconz add-on
🔇 Additional comments (3)
deconz/rootfs/etc/services.d/otau-ledvance/run (1)

5-5: Branding/casing updates look good.

Consistent “OSRAM LEDVANCE” usage and improved log wording.

Also applies to: 12-12, 16-16

deconz/rootfs/usr/share/www/ingress.html (2)

8-31: New theming and dark-mode support LGTM.

Good use of CSS vars, readable palette, and dark-mode overrides.

Also applies to: 31-55, 56-63


206-215: Ingress copy/links look good.

Clear phrasing, correct external link attributes, and concise CTA buttons.

Also applies to: 217-219

Copy link
Contributor

@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: 2

♻️ Duplicate comments (1)
deconz/rootfs/etc/services.d/otau-ledvance/run (1)

15-16: Hardened curl flags and failure path—LGTM.
Matches the prior recommendation to fail fast and back off.

🧹 Nitpick comments (3)
deconz/rootfs/etc/services.d/otau-ledvance/run (3)

20-21: Make JSON parsing resilient if .firmwares is missing or JSON is invalid.
Default to empty array and suppress jq errors to avoid noisy logs/empty var pitfalls.

-OSRAM_DATA_SIZE="$(echo "${OSRAM_DATA}" | jq --raw-output '.firmwares | length')"
+OSRAM_DATA_SIZE="$(jq -r '.firmwares // [] | length' <<<"${OSRAM_DATA}" 2>/dev/null || echo 0)"

26-31: URL-encode path components to avoid 404s on spaces/special chars.
Encode company and product before composing the download URL.

-    OTAU_URL="$URL_OSRAM/download/${OSRAM_COMPANY}/${OSRAM_PRODUCT}/latest"
+    OSRAM_COMPANY_ESC="$(printf '%s' "${OSRAM_COMPANY}" | jq -sRr @uri)"
+    OSRAM_PRODUCT_ESC="$(printf '%s' "${OSRAM_PRODUCT}" | jq -sRr @uri)"
+    OTAU_URL="${URL_OSRAM}/download/${OSRAM_COMPANY_ESC}/${OSRAM_PRODUCT_ESC}/latest"

42-46: Use arithmetic test for modulo check.
Minor readability/intent improvement.

-    if [ "$((DL_DONE % 10))" == "0" ]; then
+    if (( DL_DONE % 10 == 0 )); then
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between a05711b and e49aa55.

📒 Files selected for processing (1)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build aarch64 deconz add-on
🔇 Additional comments (2)
deconz/rootfs/etc/services.d/otau-ledvance/run (2)

5-5: Branding/casing update looks good.


12-12: Clear startup log message—LGTM.

Copy link
Contributor

@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: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
deconz/rootfs/etc/services.d/otau-ledvance/run (1)

56-60: Fix rate-limit sleep: currently sleeps even when no downloads occurred.
With DL_DONE=0 initially, 0 % 10 == 0 triggers a 65s sleep on every iteration that skipped download. Gate on DL_DONE > 0.

Apply:

-    if [ "$((DL_DONE % 10))" == "0" ]; then
+    if (( DL_DONE > 0 && DL_DONE % 10 == 0 )); then
         # LEDVANCE/OSRAM API RateLimits : The rate limit 10 calls per 60 seconds or quota 100 MB per month.
-        DL_DONE=0
-        sleep 65
+        sleep 65
     fi

Optional: track API call attempts (success or failure) separately to respect a “10 calls/min” limit even on failures.

🧹 Nitpick comments (2)
deconz/rootfs/etc/services.d/otau-ledvance/run (2)

28-31: Optional: log skip reason for missing fields at debug level.
Helps diagnose catalog anomalies without noisy logs.

Example:

-    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
-        continue
-    fi
+    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
+        bashio::log.debug "Skipping firmware index ${i}: missing company/product/name."
+        continue
+    fi

46-55: Harden downloads; consider retrying on transient errors.
Good atomic move and cleanup. Add retry for all transient errors if supported by curl in base image.

Apply:

-    if curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then
+    if curl -fsSL --retry 3 --retry-all-errors --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then

Please confirm curl --version supports --retry-all-errors in this add-on base. If not, keep current flags.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between e49aa55 and 4aea16a.

📒 Files selected for processing (1)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (2 hunks)
🔇 Additional comments (2)
deconz/rootfs/etc/services.d/otau-ledvance/run (2)

5-5: Branding/header looks good.
Consistent with other updates in this PR.


12-12: Startup log message LGTM.
Clear and consistent.

Copy link
Contributor

@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: 1

🧹 Nitpick comments (3)
deconz/rootfs/etc/services.d/otau-ledvance/run (3)

29-37: Validate before encoding/building URL

Minor: skip empty fields first, then compute encoded segments and OTAU_URL. Avoids doing work (and briefly forming URLs) with empty inputs.

Apply:

-    # Encode path segments for safety
-    OSRAM_COMPANY_ESC="$(jq -rn --arg s "${OSRAM_COMPANY}" '$s|@uri')"
-    OSRAM_PRODUCT_ESC="$(jq -rn --arg s "${OSRAM_PRODUCT}" '$s|@uri')"
-    OTAU_URL="${URL_OSRAM}/download/${OSRAM_COMPANY_ESC}/${OSRAM_PRODUCT_ESC}/latest"
-
-    # Skip if any required field is missing
-    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
-        continue
-    fi
+    # Skip if any required field is missing
+    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
+        continue
+    fi
+
+    # Encode path segments for safety (after validation)
+    OSRAM_COMPANY_ESC="$(jq -rn --arg s "${OSRAM_COMPANY}" '$s|@uri')"
+    OSRAM_PRODUCT_ESC="$(jq -rn --arg s "${OSRAM_PRODUCT}" '$s|@uri')"
+    OTAU_URL="${URL_OSRAM}/download/${OSRAM_COMPANY_ESC}/${OSRAM_PRODUCT_ESC}/latest"

39-49: Good sanitization; consider enforcing max filename length

Current basename/vendor/product sanitization looks solid. Optional: clamp final filename to ≤255 bytes to avoid FS edge cases.

Example replacement for the final path assignment:

-    OTAU_FILE="/data/otau/${CO_SAN}-${PRD_SAN}-${OTAU_BASENAME}"
+    PREFIX="${CO_SAN}-${PRD_SAN}-"
+    MAXLEN=255
+    MAX_BASELEN=$(( MAXLEN - ${#PREFIX} ))
+    if (( ${#OTAU_BASENAME} > MAX_BASELEN )); then
+        OTAU_BASENAME="${OTAU_BASENAME:0:MAX_BASELEN}"
+    fi
+    OTAU_FILE="/data/otau/${PREFIX}${OTAU_BASENAME}"

64-68: Prefer arithmetic test for rate-limit modulo

Use (( ... )) and guard against DL_DONE=0 to be explicit.

Apply:

-    if [ "$((DL_DONE % 10))" == "0" ]; then
+    if (( DL_DONE > 0 && DL_DONE % 10 == 0 )); then
         # LEDVANCE/OSRAM API RateLimits : The rate limit 10 calls per 60 seconds or quota 100 MB per month.
         DL_DONE=0
         sleep 65
     fi
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 4aea16a and 4231a4c.

📒 Files selected for processing (1)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build aarch64 deconz add-on
🔇 Additional comments (3)
deconz/rootfs/etc/services.d/otau-ledvance/run (3)

15-18: Resilient fetch + backoff: LGTM

Good use of curl -fsSL, retries, timeout, and a clear backoff path.


20-23: JSON validation with jq -er: LGTM

Failing fast on malformed payloads and backing off is correct.


25-25: Loop bound arithmetic: LGTM

Using OSRAM_DATA_SIZE directly in (( ... )) avoids the previous quoting pitfall.

Copy link
Contributor

@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: 0

🧹 Nitpick comments (6)
deconz/rootfs/etc/services.d/otau-ledvance/run (6)

1-3: Enable strict mode and safe IFS early.

Prevents subtle bugs on unset vars/pipelines and word-splitting issues.

 # shellcheck shell=bash
 # ==============================================================================
+# Fail fast and use safe word-splitting
+set -Eeuo pipefail
+IFS=$'\n\t'
 # Download available firmware update for OSRAM LEDVANCE

12-12: Include add-on version in startup log.

Adds useful context in logs.

-bashio::log.info "Running the OSRAM LEDVANCE OTA updater..."
+bashio::log.info "Running the OSRAM LEDVANCE OTA updater... (add-on $(bashio::addon.version))"

15-18: Harden curl retries/connect timeout.

Covers transient TLS/resolve errors and slow connects.

-if ! OSRAM_DATA="$(curl -fsSL --retry 3 --retry-delay 2 --max-time 30 "${URL_OSRAM}")"; then
+if ! OSRAM_DATA="$(curl -fsSL --retry 3 --retry-all-errors --retry-delay 2 --connect-timeout 10 --max-time 30 "${URL_OSRAM}")"; then

Note: --retry-all-errors requires curl ≥ 7.71. If unavailable in the base image, drop that flag.


39-49: Good sanitization; also clamp name lengths to avoid >255-byte filenames.

Some vendor/product/filenames can be long; trim parts to remain portable across filesystems.

     OTAU_BASENAME="${OTAU_BASENAME//[^A-Za-z0-9._-]/_}"
-    CO_SAN="${OSRAM_COMPANY//[^A-Za-z0-9._-]/_}"
-    PRD_SAN="${OSRAM_PRODUCT//[^A-Za-z0-9._-]/_}"
+    CO_SAN="${OSRAM_COMPANY//[^A-Za-z0-9._-]/_}"
+    PRD_SAN="${OSRAM_PRODUCT//[^A-Za-z0-9._-]/_}"
+    # Clamp component lengths to keep final filename <255 bytes
+    CO_SAN="${CO_SAN:0:32}"
+    PRD_SAN="${PRD_SAN:0:64}"
+    OTAU_BASENAME="${OTAU_BASENAME:0:150}"
     OTAU_FILE="/data/otau/${CO_SAN}-${PRD_SAN}-${OTAU_BASENAME}"

69-73: Rate-limit by attempts, not only successes.

The API limits “calls per 60s”; failed attempts still count. Track attempts to avoid 429s.

-DL_DONE=0
+DL_DONE=0
+CALLS=0
 ...
-    if curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then
+    ((CALLS+=1))
+    if curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then
         if mv -f "${OTAU_FILE}.tmp" "${OTAU_FILE}"; then
             ((DL_DONE+=1))
 ...
-    if [ "$((DL_DONE % 10))" == "0" ]; then
+    if [ "$((CALLS % 10))" -eq 0 ] && [ "${CALLS}" -ne 0 ]; then
-        # LEDVANCE/OSRAM API RateLimits : The rate limit 10 calls per 60 seconds or quota 100 MB per month.
-        DL_DONE=0
+        # LEDVANCE/OSRAM API RateLimits: 10 calls per 60 seconds, 100 MB/month.
         sleep 65
     fi

54-67: Verify LEDVANCE 'sha256' before the atomic move and set explicit file mode

File: deconz/rootfs/etc/services.d/otau-ledvance/run (lines 54–67)

  • LEDVANCE Zigbee firmware API provides a per-firmware SHA‑256 in the "sha256" JSON field — compute sha256 of "${OTAU_FILE}.tmp" and compare before mv; on mismatch rm -f "${OTAU_FILE}.tmp" and continue.
  • After successful mv, set predictable permissions: chmod 0644 "${OTAU_FILE}" || true.
-    if curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then
+    if curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then
+        # TODO (optional): verify checksum if provided by API before moving
         if mv -f "${OTAU_FILE}.tmp" "${OTAU_FILE}"; then
+            chmod 0644 "${OTAU_FILE}" || true
             ((DL_DONE+=1))
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 4231a4c and 02f545d.

📒 Files selected for processing (1)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (1 hunks)
🔇 Additional comments (4)
deconz/rootfs/etc/services.d/otau-ledvance/run (4)

5-5: LGTM: Branding/title update.


20-23: LGTM: Validate JSON payload and back off on failure.


25-33: LGTM: Loop bounds and URI-encoding.

Using arithmetic context for the bound and percent-encoding path segments is correct.


34-37: LGTM: Required-field guard.

Prevents malformed entries from progressing.

Copy link
Contributor

@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: 0

♻️ Duplicate comments (1)
deconz/rootfs/etc/services.d/otau-ledvance/run (1)

20-23: JSON validation with jq -er is spot on.

This prevents silent no-ops on malformed payloads and backs off correctly.

🧹 Nitpick comments (6)
deconz/rootfs/etc/services.d/otau-ledvance/run (6)

15-17: Add explicit Accept header for robustness.

Some APIs vary response by content negotiation. Request JSON explicitly.

-if ! OSRAM_DATA="$(curl -fsSL --retry 3 --retry-all-errors --retry-delay 2 --connect-timeout 10 --max-time 30 "${URL_OSRAM}")"; then
+if ! OSRAM_DATA="$(curl -fsSL --retry 3 --retry-all-errors --retry-delay 2 --connect-timeout 10 --max-time 30 \
+  -H "Accept: application/json" "${URL_OSRAM}")"; then

29-37: Skip early before URI-encoding to save work and logs.

Guard on missing fields before the encode/build step.

-    # Encode path segments for safety
-    OSRAM_COMPANY_ESC="$(jq -rn --arg s "${OSRAM_COMPANY}" '$s|@uri')"
-    OSRAM_PRODUCT_ESC="$(jq -rn --arg s "${OSRAM_PRODUCT}" '$s|@uri')"
-    OTAU_URL="${URL_OSRAM}/download/${OSRAM_COMPANY_ESC}/${OSRAM_PRODUCT_ESC}/latest"
-
-    # Skip if any required field is missing
-    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
-        continue
-    fi
+    # Skip if any required field is missing
+    if [ -z "${OSRAM_COMPANY}" ] || [ -z "${OSRAM_PRODUCT}" ] || [ -z "${OTAU_FILENAME}" ]; then
+        continue
+    fi
+    # Encode path segments for safety
+    OSRAM_COMPANY_ESC="$(jq -rn --arg s "${OSRAM_COMPANY}" '$s|@uri')"
+    OSRAM_PRODUCT_ESC="$(jq -rn --arg s "${OSRAM_PRODUCT}" '$s|@uri')"
+    OTAU_URL="${URL_OSRAM}/download/${OSRAM_COMPANY_ESC}/${OSRAM_PRODUCT_ESC}/latest"

39-49: Cap final path length to avoid filesystem max-name issues.

Very long company/product/filename combos can exceed 255 bytes. Truncate basename to keep path safe.

     OTAU_BASENAME="${OTAU_BASENAME//[^A-Za-z0-9._-]/_}"
     CO_SAN="${OSRAM_COMPANY//[^A-Za-z0-9._-]/_}"
     PRD_SAN="${OSRAM_PRODUCT//[^A-Za-z0-9._-]/_}"
-    OTAU_FILE="/data/otau/${CO_SAN}-${PRD_SAN}-${OTAU_BASENAME}"
+    OTAU_FILE="/data/otau/${CO_SAN}-${PRD_SAN}-${OTAU_BASENAME}"
+    # Ensure path length stays well below typical 255-byte limits
+    MAX_FILEPATH=240
+    avail=$(( MAX_FILEPATH - ${#CO_SAN} - ${#PRD_SAN} - 2 )) # 2 hyphens
+    if [ "${avail}" -lt 1 ]; then avail=1; fi
+    if [ ${#OTAU_BASENAME} -gt "${avail}" ]; then
+        OTAU_BASENAME="${OTAU_BASENAME:0:${avail}}"
+        OTAU_FILE="/data/otau/${CO_SAN}-${PRD_SAN}-${OTAU_BASENAME}"
+    fi

55-67: Harden download curl like the index fetch and surface errors.

Retry all transient errors and set a connect-timeout.

-    if curl -fsSL --retry 3 --retry-delay 2 --max-time 60 -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then
+    if curl -fsSL --retry 3 --retry-all-errors --retry-delay 2 --connect-timeout 10 --max-time 60 \
+         --show-error -o "${OTAU_FILE}.tmp" "${OTAU_URL}"; then

69-73: Rate-limit by requests, not only successful downloads.

Failures still hit the API; consider throttling on attempts to respect “10 calls/min”.

Add a requests counter near DL_DONE (outside this hunk):

# near: DL_DONE=0
DL_REQ=0

Increment before each attempt and throttle on DL_REQ:

-    if (( DL_DONE > 0 && DL_DONE % 10 == 0 )); then
+    if (( DL_REQ > 0 && DL_REQ % 10 == 0 )); then
         # LEDVANCE/OSRAM API RateLimits : The rate limit 10 calls per 60 seconds or quota 100 MB per month.
-        DL_DONE=0
+        DL_REQ=0
         sleep 65
     fi

And just before the curl call:

((DL_REQ+=1))

1-3: Enable strict mode and cleanup trap (optional hardening).

Reduce footguns and clear partials on termination.

Add near the top (outside the shown diff hunk):

set -Eeuo pipefail
trap 'rm -f /data/otau/*.tmp 2>/dev/null || true' TERM INT EXIT

If the global trap feels too broad, track the current tmp file in a var and remove only that on EXIT.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 02f545d and c5f61d3.

📒 Files selected for processing (1)
  • deconz/rootfs/etc/services.d/otau-ledvance/run (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build aarch64 deconz add-on

Copy link
Contributor

@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: 2

🧹 Nitpick comments (3)
deconz/rootfs/usr/share/www/ingress.html (3)

80-84: Remove leftover left margin on toolbar title (layout nit).

margin: 0 0 0 60px; appears to reserve space for a non-existent icon. It misaligns the title on small screens.

-.toolbar h1 {
-  margin: 0 0 0 60px;
+.toolbar h1 {
+  margin: 0;

4-6: Advertise supported color schemes to the UA.

Small enhancement: helps form controls and scrollbars match your themes.

   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
+  <meta name="color-scheme" content="light dark">
   <title>deCONZ | dresden elektronik</title>

19-27: Double-check contrast for toolbar and button colors.

Please verify WCAG AA contrast for:

  • Light toolbar #009AC7 on white text,
  • Button default #009AC7 on white text,
  • Dark toolbar #101E24 on --primary-text-color.

If any fail, slightly darken the background colors or lighten text.

Also applies to: 43-51, 138-149

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between c5f61d3 and 40456ff.

📒 Files selected for processing (1)
  • deconz/rootfs/usr/share/www/ingress.html (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build aarch64 deconz add-on
  • GitHub Check: Build armhf deconz add-on
🔇 Additional comments (1)
deconz/rootfs/usr/share/www/ingress.html (1)

165-168: Good accessibility touch with reduced motion.

Honoring prefers-reduced-motion is spot on.

Copy link
Contributor

@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: 0

♻️ Duplicate comments (2)
deconz/rootfs/usr/share/www/ingress.html (2)

144-151: Add a :focus fallback (plus forced-colors) for broader a11y support.

You restored focus with :focus-visible—great. Add a generic :focus fallback for browsers lacking :focus-visible, and support Windows High Contrast.

 .mdc-button {
@@
-  outline: none;
+  outline: none;
 }
 .mdc-button:focus-visible {
   outline: 2px solid var(--primary-color);
   outline-offset: 2px;
   box-shadow: 0 0 0 3px rgba(3,169,244,0.35);
 }
+/* Fallback for browsers without :focus-visible */
+.mdc-button:focus {
+  outline: 2px solid var(--primary-color);
+  outline-offset: 2px;
+  box-shadow: 0 0 0 3px rgba(3,169,244,0.35);
+}
+/* Remove fallback ring for mouse users when :focus-visible is supported */
+.mdc-button:focus:not(:focus-visible) {
+  outline: none;
+  box-shadow: 0 2px 4px rgba(0,0,0,0.08);
+}
+
+@media (forced-colors: active) {
+  .mdc-button {
+    forced-color-adjust: none;
+    background: ButtonFace;
+    color: ButtonText;
+    border: 1px solid CanvasText;
+  }
+  .mdc-button:hover { background: Highlight; color: HighlightText; }
+  .mdc-button:focus { outline: 2px solid Highlight; outline-offset: 2px; }
+}

217-231: Ripple center fallback: LGTM; add clamping to keep ripple in-bounds.

Centering for keyboard events is in place. Clamp x/y to [0, width/height] to avoid off-edge placement on atypical events.

       const rect = button.getBoundingClientRect();
       const size = Math.max(rect.width, rect.height);
       ripple.style.width = ripple.style.height = size + 'px';
       const isKeyboard = (e.detail === 0 && e.clientX === 0 && e.clientY === 0);
-      const x = isKeyboard ? rect.width / 2 : (e.clientX - rect.left);
-      const y = isKeyboard ? rect.height / 2 : (e.clientY - rect.top);
+      const clamp = (v, min, max) => Math.min(Math.max(v, min), max);
+      const xRel = isKeyboard ? rect.width / 2 : (e.clientX - rect.left);
+      const yRel = isKeyboard ? rect.height / 2 : (e.clientY - rect.top);
+      const x = clamp(xRel, 0, rect.width);
+      const y = clamp(yRel, 0, rect.height);
       ripple.style.left = (x - size / 2) + 'px';
       ripple.style.top = (y - size / 2) + 'px';
🧹 Nitpick comments (2)
deconz/rootfs/usr/share/www/ingress.html (2)

109-117: Don’t remove underlines from body-text links.

Keeping underlines for inline links improves discoverability; restrict “no underline” to the button anchors only.

-a {
-  text-decoration: none;
-  color: var(--link-color);
-  font-weight: 500;
-  transition: color 0.3s;
-}
-a:hover {
-  color: var(--link-hover-color);
-  text-decoration: none;
-}
+a { color: var(--link-color); font-weight: 500; transition: color 0.3s; }
+a:hover { color: var(--link-hover-color); }
+/* Keep underlines for inline/text links */
+.card p a { text-decoration: underline; text-underline-offset: 2px; }
+/* Buttons remain without underlines */
 .mdc-button {
@@
-  text-decoration: none;
+  text-decoration: none;
 }

Also applies to: 125-146


171-174: Scope reduced-motion overrides more narrowly.

Disabling all animations/transitions globally can affect UA controls or future content. Limit to ripple and button transitions.

-@media (prefers-reduced-motion: reduce) {
-  * { animation: none !important; transition: none !important; }
-  .ripple { display: none !important; }
-}
+@media (prefers-reduced-motion: reduce) {
+  .ripple { display: none !important; }
+  .mdc-button { transition: none !important; }
+}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 40456ff and acf5175.

📒 Files selected for processing (1)
  • deconz/rootfs/usr/share/www/ingress.html (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build aarch64 deconz add-on
  • GitHub Check: Build armhf deconz add-on
🔇 Additional comments (2)
deconz/rootfs/usr/share/www/ingress.html (2)

4-7: Themeing and dark-mode meta: LGTM.

Good use of CSS variables, color-scheme meta, and prefers-color-scheme overrides.

Also applies to: 9-31, 32-56


204-207: Good security defaults on external links.

target="_blank" with rel="noopener noreferrer" is correct.

@mattreim
Copy link
Contributor Author

All errors should now be fixed.

@mattreim mattreim changed the title Update deCONZ: Ingress, discovery, doc, translations and a few corrections deCONZ: Update ingress, discovery, doc, translations and a few corrections Sep 13, 2025
Copy link
Member

@frenck frenck left a comment

Choose a reason for hiding this comment

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

Stopped the review process. This pull request does to much, without much explanation.

It needs to be split into multiple smaller PRs that only handle a single concern at the time.

../Frenck

@home-assistant home-assistant bot marked this pull request as draft September 14, 2025 17:30
@frenck
Copy link
Member

frenck commented Oct 7, 2025

@frenck Now your suggestions and some improvements have been incorporated.

You didn't. My original review comment was about:

Stopped the review process. This pull request does to much, without much explanation.
It needs to be split into multiple smaller PRs that only handle a single concern at the time.

See: #4161 (review)

You haven't done that. See also our contribution guidelines here:

https://developers.home-assistant.io/docs/review-process#creating-the-perfect-pr

../Frenck

@frenck frenck marked this pull request as draft October 7, 2025 07:24
@mattreim
Copy link
Contributor Author

mattreim commented Oct 7, 2025

I've put enough work and time into this PR. The ingress.html has been aligned with the DOCS.md and en.yaml. Only the discovery is a bugfix, but if you don't want to fix it, I can remove it. You have to tell me what you want.

@bcutter
Copy link

bcutter commented Oct 7, 2025

Side-eying this PR and recent comments, from a long-term user perspective without coding skills:

  • Please don't blame HA for reminding on the guidelines. I wasn't aware of them but likely they make sense (e. g. the rule to atomize changes: if a change needs to be rolled back but the others are fine).
  • We are highly dependent on volunteers like @mattreim and their important contribution. Otherwise there won't be ANY updates (!). In my opinion still Dresden Elektronik should take care of their addon, unfortunately this never ending story is the result of unsolved different motivations, priorities, resources, bad or no communication and lack of responsibility and the will to take or give control.
  • While I appreciate (sometimes even rely on) getting new releases within a few weeks (expectations adjusted to reality over the years...), we have seen updates of the addon in the past which needed to roll back as they basically broke the addon, in short: testing and stability over quick update availability.

@mattreim
Copy link
Contributor Author

mattreim commented Oct 7, 2025

@bcutter Thank you very much for your detailed comment. As a long-time open source smart home user, I started helping with a few projects about two years ago. Always with the intention of improving stability and giving something back to the community. The deCONZ developers usually also have their own add-ons or programs that they maintain and therefore cannot contribute to all systems. Because I have some experience with deCONZ and also help there, I wanted to contribute to this add-on. I have been testing all the changes in my repository, sometimes for weeks. For this reason, I also reset the otau-ledvance script because some firmware files were no longer downloading. The rest runs very well and reliably on my main system.

@mattreim
Copy link
Contributor Author

mattreim commented Oct 7, 2025

I encountered a problem: If the discovery script works, all users with the integration should switch to the "Home Assistant" API key. This will fix the internal communication and this issue. I'm not entirely sure whether the "pydeconz" API key needs to be deleted first, but I've already thought of a workaround for that. Give something back to the community ;)

@bcutter And thank you again, it really shows that with such large projects the individual building blocks are important in order to keep it alive or even reactivate it.

@frenck
Copy link
Member

frenck commented Oct 9, 2025

I've put enough work and time into this PR. The ingress.html has been aligned with the DOCS.md and en.yaml. Only the discovery is a bugfix, but if you don't want to fix it, I can remove it. You have to tell me what you want.

The problem is this PR does multiple things, I'm not against you fixing multiple things. But a PR should do 1 thing. Please split it up in multiple PRs.

I wouldn't expect an improvement, bugfix, and dependency bump to ever sit in a single contribution.

../Frenck

@mattreim mattreim changed the title deCONZ v2.31.2: Update ingress, discovery, docs and a few corrections deCONZ v2.31.2: Update ingress, docs and a few corrections Oct 9, 2025
@mattreim mattreim changed the title deCONZ v2.31.2: Update ingress, docs and a few corrections deCONZ: Update ingress, docs and a few corrections Oct 9, 2025
@mattreim
Copy link
Contributor Author

mattreim commented Oct 9, 2025

@frenck I have now broken it down into three PRs.

  • 8.3.0 - Bump deCONZ to v2.31.2
  • 8.4.0 - deCONZ: Update ingress, docs and a few corrections
  • 8.5.0 - deCONZ: Fix discovery script

@mattreim mattreim marked this pull request as ready for review October 9, 2025 17:19
Copy link
Contributor

@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: 0

🧹 Nitpick comments (1)
deconz/CHANGELOG.md (1)

5-7: Clarify the 8.3.0 bullet wording

These release notes read less direct than prior entries. Consider tightening the phrasing so each bullet leads with the goal. For example:

-- Ingress entry page revised (for example, light and dark mode)
-- Update DOCS.md and a few corrections
+- Add light and dark mode support to the ingress entry page
+- Refresh DOCS.md and apply related corrections
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between f70c6f9 and 5d8e7ea.

📒 Files selected for processing (1)
  • deconz/CHANGELOG.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
*/**(html|markdown|md)

⚙️ CodeRabbit configuration file

*/**(html|markdown|md): - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.

  • Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
  • In step-by-step instructions, front the location phrase in the instructional sentence.
  • In step-by-step instructions, front the 'goal' in the instructional sentence.
  • In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
  • do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

*/**(html|markdown|md): - Use bold to mark UI strings.

  • If "" are used to mark UI strings, replace them by bold.

  • Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"

  • Use sentence-style capitalization also in headings.

do not comment on HTML used for icons

Avoid flagging inline HTML for embedding videos in future reviews for this repository.

Files:

  • deconz/CHANGELOG.md

@mattreim mattreim changed the title deCONZ: Update ingress, docs and a few corrections deCONZ: Update ingress, docs and a few corrections [1] Oct 10, 2025
Copy link
Contributor

@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: 0

🧹 Nitpick comments (3)
deconz/DOCS.md (3)

31-33: Switch to imperative tone for hardware path guidance.

Documentation guidelines call for direct instructions. Reword to give a clear action and eliminate “may”.

As per coding guidelines

-If you're using Home Assistant you may find the correct value for this on the
-**Settings** -> **System** -> **Hardware** -> **All hardware** page. It is recommended
-to use a "by-id" path to the device if one exists, as it is not subject to
-change if other devices are added to the system.
+In Home Assistant, go to **Settings** -> **System** -> **Hardware** -> **All hardware** to find the device path.
+Use a "by-id" path when available because it does not change when you add other hardware.

43-44: Use direct instruction for web UI entry points.

Keep the tone instructional by leading with the location and removing “you can”.

As per coding guidelines

-After installing and launching this add-on, you can select **deCONZ** under web UI to access
-the deCONZ GUI via VNC, or select **Phoscon** to configure the settings in the Phoscon App.
+In the add-on web UI, select **deCONZ** to access the deCONZ GUI via VNC, or select **Phoscon** to configure settings in the Phoscon App.

160-161: Tighten wording in device path example.

Avoid “above mentioned”; prefer clearer Microsoft Style phrasing.

As per coding guidelines

-   (and similar for RaspBee and the original ConBee, replace `XXXXXXXX` with the value you see in your above mentioned hardware page)
+   (and similar for RaspBee and the original ConBee; replace `XXXXXXXX` with the value shown on that hardware page)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 5d8e7ea and 0100019.

📒 Files selected for processing (1)
  • deconz/DOCS.md (7 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
*/**(html|markdown|md)

⚙️ CodeRabbit configuration file

*/**(html|markdown|md): - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.

  • Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
  • In step-by-step instructions, front the location phrase in the instructional sentence.
  • In step-by-step instructions, front the 'goal' in the instructional sentence.
  • In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
  • do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

*/**(html|markdown|md): - Use bold to mark UI strings.

  • If "" are used to mark UI strings, replace them by bold.

  • Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"

  • Use sentence-style capitalization also in headings.

do not comment on HTML used for icons

Avoid flagging inline HTML for embedding videos in future reviews for this repository.

Files:

  • deconz/DOCS.md
🪛 LanguageTool
deconz/DOCS.md

[grammar] ~31-~31: There might be a mistake here.
Context: ...All hardware page. It is recommended to use a "by-id" path to the device if o...

(QB_NEW_EN)


[grammar] ~32-~32: There might be a mistake here.
Context: ...e if one exists, as it is not subject to change if other devices are added to the...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ..., "/dev/ttyAMA0", or "/dev/ttyACM0". 2. Click on "SAVE" to save the add-on confi...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...select deCONZ under web UI to access the deCONZ GUI via VNC, or select **Phos...

(QB_NEW_EN)


[grammar] ~61-~61: There might be a mistake here.
Context: ...s add-on, back up your configuration via the Phoscon App and restore it after ins...

(QB_NEW_EN)


[grammar] ~113-~113: There might be a mistake here.
Context: ...se the following settings: - Host: core-deconz - (API) Port: 40850 - **WebSocket Port...

(QB_NEW_EN)


[grammar] ~114-~114: There might be a mistake here.
Context: ...Host**: core-deconz - (API) Port: 40850 - WebSocket Port: 8081 _Note: The abo...

(QB_NEW_EN)


[grammar] ~154-~154: There might be a mistake here.
Context: ...All hardware page. It is recommended to use a "by-id" path to the device if o...

(QB_NEW_EN)


[grammar] ~155-~155: There might be a mistake here.
Context: ...e if one exists, as it is not subject to change if other devices are added to the...

(QB_NEW_EN)


[grammar] ~161-~161: Use a hyphen to join words.
Context: ...XXwith the value you see in your above mentioned hardware page) -"/dev/ttyUSB...

(QB_NEW_EN_HYPHEN)


[grammar] ~182-~182: There might be a mistake here.
Context: ...ckup and download it onto your computer. 2. Uninstall the add-on. 3. In Home Assista...

(QB_NEW_EN)


[style] ~186-~186: This sentence contains multiple usages of the word “again”. Consider removing or replacing it.
Context: ...e deCONZ add-on again, and configure it again according to the [instructions](#config...

(REPETITION_OF_AGAIN)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Build amd64 deconz add-on
  • GitHub Check: Build armhf deconz add-on
  • GitHub Check: Build aarch64 deconz add-on

@mattreim mattreim requested a review from sairon October 14, 2025 15:30
@mattreim mattreim changed the title deCONZ: Update ingress, docs and a few corrections [1] deCONZ: Update ingress, docs and a few corrections [2] Oct 17, 2025
Copy link
Member

@agners agners left a comment

Choose a reason for hiding this comment

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

This is still a bit mixed bag with DOCS.md updates, naming corrections and ingress page changes, but since its mainly ingress, I am fine with it.

However, for some reason the ingress page changes doesn't seem to look the same is in the screenshot. Also dark mode seems not to work. I restarted the add-on with the change and double checked the ingress.html file, it matches what this PR provides. Did maybe some changes got lost in the course of this PR?

image

@mattreim
Copy link
Contributor Author

mattreim commented Oct 23, 2025

This is still a bit mixed bag with DOCS.md updates, naming corrections and ingress page changes, but since its mainly ingress, I am fine with it.

However, for some reason the ingress page changes doesn't seem to look the same is in the screenshot. Also dark mode seems not to work. I restarted the add-on with the change and double checked the ingress.html file, it matches what this PR provides. Did maybe some changes got lost in the course of this PR?

image

It's still the old page, but after clearing your browser cache, the new one should appear.. To check it, I looked at it again with HTML Online Viewer and it works as expected.

@agners
Copy link
Member

agners commented Oct 23, 2025

Hm, I realized that Ctrl+F5 does not force a refresh of iframes, so the browser simply showed the cached version. Right clicking inside the ingress iframe and refreshing the frame specifically made the new page load (this is available in Firefox as well as in Chrome) 👍 .

It seems to me that browser still should request the content more aggressively, but maybe the ingress proxy causes some issues here. But anyhow, all this is unrelated to this PR.

Copy link
Member

@agners agners left a comment

Choose a reason for hiding this comment

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

LGTM, thanks!

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants