Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL #2889

Conversation

jp112sdl
Copy link
Contributor

@jp112sdl jp112sdl commented Nov 3, 2024

Adds missing SHORT_ON_MIN_LEVEL to PROFILE_x whereever SHORT_ON_LEVEL is also provided.

Related Issue

#2887

Types of changes

  • Docs change / refactoring / dependency upgrade
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Alternate Designs

Possible Drawbacks

Verification Process

Release Notes

Contributing checklist

  • My code follows the code style of this project.
  • I have read the CONTRIBUTING and LICENSE document.
  • I fully agree to distribute my changes under Apache 2.0 license.

Summary by CodeRabbit

  • New Features

    • Introduced a new configuration parameter SHORT_ON_MIN_LEVEL for enhanced control of device activation levels.
    • Added multiple Tcl scripts for configuring motion detectors, presence detectors, and water detection transmitters, improving user interface and operational flexibility.
  • Bug Fixes

    • Resolved issues related to missing configurations in various device profiles.
  • Documentation

    • Updated documentation to reflect new parameters and configurations for better user understanding.

Copy link

coderabbitai bot commented Nov 3, 2024

Walkthrough

This pull request introduces a new configuration parameter SHORT_ON_MIN_LEVEL across multiple Tcl configuration files for various virtual receivers and transceivers. The parameter, defined with a default value of 0.1 and a valid range from 0.0 to 1.0, is added to the PROFILE_2 and PROFILE_4 settings in several files, ensuring consistency in device configurations. Additionally, new Tcl script files are created for configuring motion detectors, presence detectors, and water detection transmitters, enhancing the web user interface's functionality.

Changes

File Path Change Summary
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL.patch Introduced SHORT_ON_MIN_LEVEL parameter (default 0.1, range 0.0 - 1.0) in multiple Tcl files.
.../ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring motion detector transceiver profiles in web UI.
.../ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl New Tcl script for configuring virtual motion detector profiles in web UI.
.../ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring presence detector profiles in web UI.
.../ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl New Tcl script for configuring water detection transmitter profiles in web UI.
.../DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring motion detector transceiver profiles in web UI.
.../DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl New Tcl script for configuring virtual motion detector profiles in web UI.
.../DIMMER_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring presence detector profiles in web UI.
.../DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl New Tcl script for configuring water detection transmitter profiles in web UI.
.../UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring motion detector profiles in web UI.
.../UNIVERSAL_ACTOR/PRESENCEDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring presence detector profiles in web UI.
.../UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl New Tcl script for configuring water detection transmitter profiles in web UI.
.../UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring motion detector profiles in web UI.
.../UNIVERSAL_LIGHT_RECEIVER_PWM/PRESENCEDETECTOR_TRANSCEIVER.tcl New Tcl script for configuring presence detector profiles in web UI.
.../UNIVERSAL_LIGHT_RECEIVER_PWM/WATER_DETECTION_TRANSMITTER.tcl New Tcl script for configuring water detection transmitter profiles in web UI.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant WebUI
    participant TclScript

    User->>WebUI: Request configuration settings
    WebUI->>TclScript: Load configuration parameters
    TclScript-->>WebUI: Return parameters including SHORT_ON_MIN_LEVEL
    WebUI->>User: Display configuration options
    User->>WebUI: Modify settings
    WebUI->>TclScript: Save updated configuration
    TclScript-->>WebUI: Confirm changes saved
    WebUI->>User: Notify success
Loading

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@jp112sdl jp112sdl changed the title 0188-WebUI-Fix-MissingEasymodeSHORT_MIN_LEVEL 0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL Nov 3, 2024
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: 71

🧹 Outside diff range and nitpick comments (46)
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL.patch (1)

4-7: Consider adding documentation for SHORT_ON_MIN_LEVEL parameter

The parameter has been consistently added across multiple device types, suggesting it's a fundamental configuration option. Consider adding documentation to explain:

  • The purpose and behavior of SHORT_ON_MIN_LEVEL
  • How it interacts with SHORT_ON_LEVEL
  • Any device-specific considerations

Also applies to: 14-17, 24-27, 34-37

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (1)

116-254: LGTM: HTML parameter generation is well-implemented.

The set_htmlParams procedure is well-structured with proper error handling. Consider adding documentation comments to describe the purpose of each parameter and their expected values.

Add documentation above the procedure:

+# set_htmlParams - Generates HTML parameters for profile configuration
+#
+# Parameters:
+#   iface - Interface identifier
+#   address - Device address
+#   pps - Profile parameter set
+#   pps_descr - Profile parameter description
+#   special_input_id - Special input identifier
+#   peer_type - Peer device type
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1)

116-256: Consider enhancing error handling in set_htmlParams.

While the HTML parameter generation is functional, it could benefit from more robust error handling:

  1. Add error checking for global variable access
  2. Implement error handling for parameter retrieval
  3. Add validation for special_input_id

Example improvement for global variable access:

-  global url receiver_address sender_address dev_descr_sender dev_descr_receiver
+  global url receiver_address sender_address dev_descr_sender dev_descr_receiver
+  foreach var {url receiver_address sender_address} {
+    if {![info exists $var]} {
+      error "Required global variable '$var' not found"
+    }
+  }
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1)

53-54: Consider adding range specification to SHORT_ON_MIN_LEVEL in Profile 1.

While the implementation is correct, consider matching Profile 2's range specification for consistency:

-set PROFILE_1(SHORT_ON_MIN_LEVEL) 0.100000
+set PROFILE_1(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/PRESENCEDETECTOR_TRANSCEIVER.tcl (3)

22-74: LGTM! Toggle profile parameters are well-defined.

The profile correctly implements all required parameters including the SHORT_ON_MIN_LEVEL parameter as specified in the PR objectives.

Consider adding comments to document the purpose and relationships between the various timing parameters (CT, JT, etc.) for better maintainability.


76-115: LGTM! Stairway light profile is properly configured.

The profile includes all necessary parameters including SHORT_ON_MIN_LEVEL and appropriate stairway-specific timing configurations.

Consider standardizing the indentation of parameter definitions for better readability:

-  set PROFILE_2(SHORT_ON_TIME_MODE) {0 1}
+set PROFILE_2(SHORT_ON_TIME_MODE) {0 1}

128-310: HTML parameter generation is comprehensive but could be more robust.

The implementation handles all UI elements and dynamic behavior well, but consider adding error handling for edge cases.

Consider adding error handling for:

  1. Missing or invalid profile data
  2. Failed JavaScript initialization
  3. Invalid parameter values

Example error handling:

 set cur_profile [get_cur_profile2 ps PROFILES_MAP PROFILE_TMP $peer_type]
+if {$cur_profile == ""} {
+    # Handle invalid profile
+    set cur_profile 0
+}
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1)

134-336: LGTM! UI generation logic is well-structured.

The UI generation code follows good practices with proper error handling and helper function usage. The JavaScript code for dynamic behavior is well-organized.

Consider adding documentation comments to describe the purpose and parameters of the set_htmlParams procedure for better maintainability.

Add documentation at the start of the procedure:

+# Description: Generates HTML parameters for configuring motion detector profiles
+# Parameters:
+#   iface - Interface identifier
+#   address - Device address
+#   pps - Parameter set array name
+#   pps_descr - Parameter set description array name
+#   special_input_id - Special input identifier
+#   peer_type - Type of the peer device
 proc set_htmlParams {iface address pps pps_descr special_input_id peer_type} {
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (2)

134-336: Consider refactoring the set_htmlParams procedure for better maintainability.

The procedure is quite long and handles multiple responsibilities. Consider breaking it down into smaller, focused functions:

  1. Profile initialization
  2. UI element generation
  3. Event handler setup

Example refactoring approach:

# Profile initialization
proc init_profile {prn ps cur_profile} {
    if {$cur_profile == $prn} then {
        array set PROFILE_$prn [array get ps]
    }
}

# UI element generation for a profile
proc generate_profile_ui {prn special_input_id} {
    # Extract UI generation logic here
}

# Main procedure
proc set_htmlParams {iface address pps pps_descr special_input_id peer_type} {
    # Initialize profiles
    foreach prn {1 2 3} {
        init_profile $prn $ps $cur_profile
    }
    
    # Generate UI for each profile
    foreach prn {1 2 3} {
        generate_profile_ui $prn $special_input_id
    }
}

300-320: Improve JavaScript code organization and reliability.

The JavaScript code has several areas for improvement:

  1. Inconsistent use of jQuery and vanilla JavaScript
  2. Global function declaration could cause naming conflicts
  3. Arbitrary timeout value might cause race conditions

Consider refactoring the JavaScript code:

 append HTML_PARAMS(separate_$prn) "<script type=\"text/javascript\">"
-      append HTML_PARAMS(separate_$prn) "changeHint = function(mode, prn) {"
+      append HTML_PARAMS(separate_$prn) "(function() {"
+      append HTML_PARAMS(separate_$prn) "  const changeHint = function(mode, prn) {"
       append HTML_PARAMS(separate_$prn) "var hintElm = jQuery(\"\[name='hintOnTime_\"+prn+\"'\]\"),"
       # ... rest of the function
-      append HTML_PARAMS(separate_$prn) "};"
+      append HTML_PARAMS(separate_$prn) "  };"

       append HTML_PARAMS(separate_$prn) "var mode=parseInt($ps(SHORT_ON_TIME_MODE)), _prn=$prn;"

-      append HTML_PARAMS(separate_$prn) "window.setTimeout(function(){"
+      append HTML_PARAMS(separate_$prn) "jQuery(document).ready(function() {"
         append HTML_PARAMS(separate_$prn) "changeHint(mode, _prn);"
-      append HTML_PARAMS(separate_$prn) "},50);"
+      append HTML_PARAMS(separate_$prn) "});"
+      append HTML_PARAMS(separate_$prn) "})();"
 append HTML_PARAMS(separate_$prn) "</script>"
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (1)

156-245: Reduce code duplication by refactoring repetitive blocks

The HTML parameter generation code between lines 156-245 for profiles is highly repetitive. Consider refactoring this code by using loops or extracting common code into procedures. This will enhance maintainability and reduce the likelihood of errors during future modifications.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl (2)

54-54: Ensure consistent format for SHORT_ON_MIN_LEVEL

In PROFILE_1, SHORT_ON_MIN_LEVEL is set as a single float value:

set PROFILE_1(SHORT_ON_MIN_LEVEL) 0.100000

Whereas in PROFILE_2, it's set with a range:

set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}

For consistency and to prevent potential parsing issues, consider using the same format for SHORT_ON_MIN_LEVEL in both profiles.

Also applies to: 94-94


163-181: Refactor duplicated code blocks to enhance maintainability

The code blocks from lines 163-181 and 208-226 are nearly identical, handling the setup of HTML parameters and UI elements for different profiles. Here's an excerpt from both sections:

Lines 163-181:

incr prn
if {$cur_profile == $prn} then {array set PROFILE_$prn [array get ps]}
append HTML_PARAMS(separate_$prn) "<div id=\"param_$prn\"><textarea id=\"profile_$prn\" style=\"display:none\">"
append HTML_PARAMS(separate_$prn) "\${description_$prn}"
append HTML_PARAMS(separate_$prn) "<table class=\"ProfileTbl\">"

...

append HTML_PARAMS(separate_$prn) "</td></tr>"

Lines 208-226:

incr prn
if {$cur_profile == $prn} then {array set PROFILE_$prn [array get ps]}
append HTML_PARAMS(separate_$prn) "<div id=\"param_$prn\"><textarea id=\"profile_$prn\" style=\"display:none\">"
append HTML_PARAMS(separate_$prn) "\${description_$prn}"
append HTML_PARAMS(separate_$prn) "<table class=\"ProfileTbl\">"

...

append HTML_PARAMS(separate_$prn) "</td></tr>"

Consider refactoring these duplicated code blocks into a separate procedure or loop to reduce redundancy and simplify future maintenance.

Also applies to: 208-226

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/PRESENCEDETECTOR_TRANSCEIVER.tcl (1)

265-285: Avoid Global Scope for JavaScript Functions

The changeHint function defined starting at line 266 is added to the global scope:

changeHint = function(mode, prn) { ... };

Adding functions to the global scope can lead to conflicts, especially if multiple scripts define functions with the same name. To prevent potential issues:

Suggestion: Encapsulate the function within an immediately invoked function expression (IIFE) or assign it to a namespaced object to avoid polluting the global namespace.

append HTML_PARAMS(separate_$prn) "<script type=\"text/javascript\">(function() {"
append HTML_PARAMS(separate_$prn) "  function changeHint(mode, prn) {"
... [rest of the function] ...
append HTML_PARAMS(separate_$prn) "  }"
append HTML_PARAMS(separate_$prn) "  var mode = parseInt($ps(SHORT_ON_TIME_MODE)), _prn = $prn;"
append HTML_PARAMS(separate_$prn) "  window.setTimeout(function() { changeHint(mode, _prn); }, 50);"
append HTML_PARAMS(separate_$prn) "})();</script>"
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1)

286-307: Refactor embedded JavaScript code for improved readability.

The JavaScript code constructed between lines 286-307 uses multiple append statements, which can hinder readability and make maintenance challenging. Consider using a multi-line string or an external JavaScript file to enhance clarity and maintainability.

Example refactor using a multi-line string:

append HTML_PARAMS(separate_$prn) "<script type=\"text/javascript\">\
changeHint = function(mode, prn) {\
  var hintElm = jQuery(\"[name='hintOnTime_\"+prn+\"']\"),\
      onTimeModeDescrElm = jQuery(\"[name='onTimeFactorDescr']\"),\
      extensionMinimalElm = jQuery(\"[name='extensionMinimal']\").eq([expr $prn - 1]);\
  if (mode == 0) {\
    extensionMinimalElm.hide();\
    onTimeModeDescrElm.text(translateKey('lblOnTime'));\
  } else {\
    extensionMinimalElm.show();\
    onTimeModeDescrElm.text(translateKey('lblMinOnTime'));\
  }\
};\
var mode=parseInt($ps(SHORT_ON_TIME_MODE)), _prn=$prn;\
window.setTimeout(function(){\
  changeHint(mode, _prn);\
},50);\
</script>"
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl (4)

123-321: Consider modularizing repeated code segments for maintainability.

The code contains repeated patterns, especially when building HTML parameters and appending to HTML_PARAMS. This repetition can make the code harder to maintain and prone to errors. Consider refactoring these segments into reusable procedures or loops to enhance maintainability and readability.

For example, you can create a procedure to handle the generation of profile-specific HTML parameters:

proc generateProfileHtml {prn cur_profile ps PROFILE prn_pref special_input_id} {
  # Your refactored code here...
}

287-307: Optimize JavaScript code for better performance and readability.

The JavaScript code being appended could be simplified and moved to an external script or a dedicated section to improve readability. Also, consider using event listeners instead of window.setTimeout for better performance.

Here is an example of how you might refactor the JavaScript code:

-          append HTML_PARAMS(separate_$prn) "window.setTimeout(function(){"
-            append HTML_PARAMS(separate_$prn) "changeHint(mode, _prn);"
-          append HTML_PARAMS(separate_$prn) "},50);"
+          append HTML_PARAMS(separate_$prn) "document.addEventListener('DOMContentLoaded', function() {"
+            append HTML_PARAMS(separate_$prn) "changeHint(mode, _prn);"
+          append HTML_PARAMS(separate_$prn) "});"

68-69: Typographical correction in UI description.

The German text in UI_DESCRIPTION contains HTML entity codes and an extra space at the end. Ensure the text displays correctly in the user interface.

Apply this diff to correct the issue:

- set PROFILE_1(UI_DESCRIPTION)  "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit eingeschaltet. Ist eine Einschaltverz&ouml;gerungszeit eingestellt, so wird der Schalter erst nach Ablauf dieser Zeit eingeschaltet.<br /> "
+ set PROFILE_1(UI_DESCRIPTION)  "Beim Auslösen des Sensors wird der Schalter mindestens für die eingestellte Zeit eingeschaltet. Ist eine Einschaltverzögerungszeit eingestellt, so wird der Schalter erst nach Ablauf dieser Zeit eingeschaltet.<br/>"

279-284: Ensure proper handling of optional parameters.

When checking for the existence of parameters in arrays, ensure that default values are set or handled appropriately to prevent errors when parameters are missing.

Consider adding checks or default assignments:

if {![info exists ps($param)]} {
  set ps($param) $defaultValue
}
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (4)

16-18: Provide Detailed UI_DESCRIPTION for PROFILE_0

The UI_DESCRIPTION for PROFILE_0 is set to "Expertenprofil", which is brief compared to the more detailed descriptions in other profiles. For consistency and better user guidance, consider expanding this description to match the detail level of the other profiles.


123-324: Enhance Error Handling in the set_htmlParams Procedure

The set_htmlParams procedure performs multiple operations that could potentially raise errors (e.g., accessing array elements, variable substitutions). Consider adding error handling mechanisms, such as catch statements, to gracefully handle any runtime exceptions and improve the robustness of the code.


293-300: Simplify Conditional Logic in changeHint Function

The changeHint function uses an if-else statement that can be streamlined for better readability. Utilizing the toggle method and a conditional operator can simplify the code.

Apply this diff to simplify the function:

- if (mode == 0) {
-   extensionMinimalElm.hide();
-   onTimeModeDescrElm.text(translateKey('lblOnTime'));
- } else {
-   extensionMinimalElm.show();
-   onTimeModeDescrElm.text(translateKey('lblMinOnTime'));
- }
+ extensionMinimalElm.toggle(mode != 0);
+ onTimeModeDescrElm.text(translateKey(mode == 0 ? 'lblOnTime' : 'lblMinOnTime'));

123-321: Consider Modularizing the set_htmlParams Procedure

The set_htmlParams procedure spans nearly 200 lines and handles multiple responsibilities, which can make it difficult to maintain. Consider refactoring the code by extracting repetitive or logical sections into smaller, reusable procedures. This will enhance readability and maintainability.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_TRANSCEIVER.tcl (3)

240-331: Consider Refactoring to Eliminate Code Duplication

The code block for PROFILE_2 between lines 240-331 is structurally similar to the one for PROFILE_1 between lines 175-238. This repetition can make future maintenance more challenging and increases the risk of inconsistencies. Refactoring the common code into a separate procedure or utilizing loops to dynamically generate the HTML parameters can enhance maintainability and reduce redundancy.


202-205: Refactor Repetitive Parameter Checks into a Loop

The pattern of checking if a parameter exists and then appending HTML elements is repeated multiple times across the code (e.g., lines 202-205, 217-221, 223-227, 273-276, 288-292, 294-298). This repetition can be refactored into a loop that iterates over a list of parameters, thereby simplifying the code and enhancing readability.

Here's an example of how you might refactor the code:

set params {
  SHORT_OUTPUT_BEHAVIOUR getSelectColorElement
  SHORT_OPTICAL_SIGNAL_COLOR getSelectColorElement
  SHORT_OPTICAL_SIGNAL_BEHAVIOUR getSelectBehaviourElement
}

foreach {param func} $params {
  if {[info exists ps($param)]} {
    incr pref
    append HTML_PARAMS(separate_$prn) [$func PROFILE_$prn ${special_input_id} $param]
  }
}

Also applies to: 217-221, 223-227, 273-276, 288-292, 294-298


119-119: Ensure Consistent Language Use in UI Descriptions

The UI_DESCRIPTION fields at lines 119 and 129 are in German, while other parts of the code may use English. For consistency and to accommodate a broader user base, consider providing translations or internationalization support for these UI strings.

Also applies to: 129-129

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1)

58-58: Consider including SHORT_ON_MIN_LEVEL in the UI elements.

The parameter SHORT_ON_MIN_LEVEL is defined in the profile configurations at lines 58 and 108 but is not included in the UI elements within the set_htmlParams procedure. If it's intended for users to adjust this parameter via the web interface, consider adding corresponding UI components similar to those for SHORT_ON_LEVEL. This will ensure users can configure the minimum on level directly from the UI.

Also applies to: 108-108

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl.orig (1)

286-287: Remove Obsolete Commented-Out Code.

Lines 286-287 contain commented-out code related to OFF_TIME. Since it's not necessary for the water detection sensor and unlikely to be used, removing it can improve code readability.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (2)

74-75: Externalize UI strings for internationalization support

The UI descriptions are currently hardcoded in German within the UI_DESCRIPTION and UI_TEMPLATE parameters for the profiles. To enhance maintainability and support internationalization, consider externalizing these strings into language-specific resource files or using a translation mechanism.

For example, replace:

set PROFILE_1(UI_DESCRIPTION)  "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit eingeschaltet. Ist eine Einschaltverz&ouml;gerungszeit eingestellt, so wird der Schalter erst nach Ablauf dieser Zeit eingeschaltet.<br /> "
set PROFILE_1(UI_TEMPLATE)    $PROFILE_1(UI_DESCRIPTION)

With:

set PROFILE_1(UI_DESCRIPTION_KEY) "profile_1_description"
set PROFILE_1(UI_TEMPLATE) $PROFILE_1(UI_DESCRIPTION_KEY)

And retrieve the descriptions based on the user's language preference.

Similarly, update PROFILE_2 and PROFILE_3 to use keys instead of hardcoded strings.

Also applies to: 121-122, 131-132


137-396: Refactor the set_htmlParams procedure for improved maintainability

The set_htmlParams procedure spans over 260 lines, which can make it challenging to read, understand, and maintain. Consider refactoring this procedure by:

  • Breaking it down into smaller, reusable procedures or helper functions.
  • Grouping related code segments logically.
  • Reducing nesting levels where possible.

This refactoring will enhance readability and make future maintenance easier.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl (6)

217-224: Refactor duplicate code handling SHORT_ON_MIN_LEVEL parameter

The code block handling SHORT_ON_MIN_LEVEL is duplicated in both the profile sections starting at lines 217 and 320. Duplicated code can lead to maintenance challenges and potential inconsistencies.

Consider extracting this repeated code into a dedicated procedure or function. This will enhance maintainability and ensure consistency across profiles. For example:

proc appendShortOnMinLevel {prn pref special_input_id ch} {
  append HTML_PARAMS(separate_$prn) "<tr><td>\${ON_MIN_LEVEL}</td><td>"
  option DIM_LEVELwoLastValue
  append HTML_PARAMS(separate_$prn) [get_ComboBox options SHORT_ON_MIN_LEVEL separate_${special_input_id}_$prn\_$pref PROFILE_$prn SHORT_ON_MIN_LEVEL "onchange=\"ActivateFreePercent4InternalKey(\$('${special_input_id}_profiles'),$pref);Disable_SimKey($ch, $prn, '${special_input_id}');\""]
  EnterPercent $prn $pref ${special_input_id} ps_descr SHORT_ON_MIN_LEVEL
  append HTML_PARAMS(separate_$prn) "</td></tr>"
}

Then replace the duplicated blocks with a call to this procedure:

if {[info exists ps(SHORT_ON_MIN_LEVEL)]} {
  incr pref
  appendShortOnMinLevel $prn $pref $special_input_id $ch
}

150-151: Remove or document commented-out code

At lines 150-151, there is commented-out code:

# array set dev_ps [xmlrpc $url getParamset $sender_address MASTER]

Leaving commented-out code can clutter the codebase and cause confusion.

If this code is no longer needed, it would be better to remove it. If it's kept for future reference, consider adding a comment explaining why it's retained.


375-377: Potential race condition with setTimeout

In the setTimeout call:

window.setTimeout(function(){
  changeHint(mode, _prn);
},50);

Using a fixed timeout might lead to race conditions if the DOM is not ready within 50 milliseconds.

Consider using jQuery(document).ready() or window.onload to ensure that the DOM is fully loaded before executing the function:

jQuery(document).ready(function() {
  changeHint(mode, _prn);
});

217-217: Simplify condition by removing unnecessary comparison

At line 217:

if {[info exists ps(SHORT_ON_MIN_LEVEL)] == 1} {

Comparing the result of [info exists] to 1 is unnecessary since it already returns a boolean.

Simplify the condition as follows:

if {[info exists ps(SHORT_ON_MIN_LEVEL)]} {

320-320: Simplify condition by removing unnecessary comparison

Similarly, at line 320:

if {[info exists ps(SHORT_ON_MIN_LEVEL)] == 1} {

Simplify the condition as follows:

if {[info exists ps(SHORT_ON_MIN_LEVEL)]} {

16-18: Clarify UI descriptions for PROFILE_0

The UI description and template for PROFILE_0 are set to "Expertenprofil":

set PROFILE_0(UI_DESCRIPTION)  "Expertenprofil"
set PROFILE_0(UI_TEMPLATE)    "Expertenprofil"

Consider providing a more descriptive explanation to help users understand what the "Expert Profile" entails. For example:

set PROFILE_0(UI_DESCRIPTION)  "Expert profile with advanced settings"
set PROFILE_0(UI_TEMPLATE)    $PROFILE_0(UI_DESCRIPTION)
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl.orig (1)

131-133: Consistency in parameter naming

After correcting the typo in SHORT_OFFDELAY_TIME_FACTOR, ensure that all related parameters follow consistent naming conventions to prevent confusion.

Consider reviewing all parameter names in PROFILE_3 for consistency and clarity.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/WATER_DETECTION_TRANSMITTER.tcl.orig (2)

90-95: Inconsistent Parameter Definitions Across Profiles

Parameters such as SHORT_ONDELAY_TIME_BASE and SHORT_ONDELAY_TIME_FACTOR are defined inconsistently in PROFILE_2 (lines 90-95) and PROFILE_4 (lines 164-169), with duplicate definitions and potential overrides.

Review the parameter definitions to ensure consistency and remove any unnecessary duplicates.

Also applies to: 164-169


25-25: Inconsistent Use of Ranges in SHORT_COND_VALUE_LO and SHORT_COND_VALUE_HI

The parameters SHORT_COND_VALUE_LO and SHORT_COND_VALUE_HI have inconsistent use of ranges across profiles. Some include range specifications, while others do not.

For consistency and clarity, consider specifying the range in all instances or standardizing the format.

Also applies to: 75-75, 110-110, 149-149

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl (2)

245-539: Review the set_htmlParams procedure for potential improvements

The set_htmlParams procedure is quite extensive. Consider the following:

  • Modularity and Readability: Break down the procedure into smaller helper procedures to enhance readability and maintainability.
  • Variable Scope: Ensure that all variables are correctly scoped and that there are no unintended global variables.
  • Error Handling: Add error handling where appropriate to manage potential exceptions or unexpected inputs.

While this is not a critical issue, improving the structure of this procedure could benefit future maintenance and scalability.


258-261: Remove commented-out code for cleaner codebase

Lines 258-261 contain commented-out code that might not be necessary:

If this code is no longer needed, consider removing it to keep the codebase clean. If it's needed for future reference, ensure it's documented appropriately.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/WATER_DETECTION_TRANSMITTER.tcl (2)

90-95: Remove redundant definitions of SHORT_ONDELAY_TIME_BASE and SHORT_ONDELAY_TIME_FACTOR in PROFILE_2

The parameters SHORT_ONDELAY_TIME_BASE and SHORT_ONDELAY_TIME_FACTOR are defined twice in PROFILE_2 at lines 90-91 and again at lines 94-95. This redundancy could lead to confusion or misconfiguration.

Recommend removing the duplicate definitions:

-lines 94-95:
-set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
-set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}

110-147: Consider adding SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL to PROFILE_3

Unlike other profiles, PROFILE_3 lacks the SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL parameters. Including these parameters can enhance consistency and functionality, especially if SHORT_ON_LEVEL is relevant for this profile.

Consider adding the following lines to PROFILE_3:

+set PROFILE_3(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
+set PROFILE_3(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl.orig (2)

246-568: Consider refactoring the set_htmlParams procedure for maintainability

The set_htmlParams procedure spans a large number of lines (from line 246 to 568) and contains nested conditionals and repeated code blocks. Refactoring this procedure can improve readability and maintainability.

Consider the following refactoring suggestions:

  • Extract Reusable Components: Identify repeated patterns, such as the creation of HTML parameters for different profiles, and extract them into separate helper procedures.

  • Use Loops for Similar Blocks: If possible, use loops to iterate over profiles or parameters to reduce code duplication.

  • Add Comments and Documentation: Enhance inline comments and add documentation to clarify the purpose of complex code blocks.


201-201: Typographical error in UI description

In line 201, the UI description reads:

set PROFILE_5(UI_DESCRIPTION)  "Der Bewegungsmelder ist au&szlig;er Betrieb."

The term "Bewegungsmelder" (motion detector) might be incorrect since this script is for a water detection transmitter.

Please verify and, if necessary, correct the UI description to reflect the correct device:

-set PROFILE_5(UI_DESCRIPTION)  "Der Bewegungsmelder ist au&szlig;er Betrieb."
+set PROFILE_5(UI_DESCRIPTION)  "Der Wassermelder ist au&szlig;er Betrieb."
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl (1)

248-569: Consider refactoring the set_htmlParams procedure for maintainability

The set_htmlParams procedure spans over 300 lines, making it complex and potentially difficult to maintain. Refactoring the procedure into smaller, modular functions can improve readability and maintainability.

Consider breaking down the procedure into smaller helper procedures focusing on specific tasks, such as generating profile parameters, handling subsets, and constructing HTML elements.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between a6da967 and f39a986.

📒 Files selected for processing (33)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL.patch (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/PRESENCEDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/PRESENCEDETECTOR_TRANSCEIVER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/WATER_DETECTION_TRANSMITTER.tcl (1 hunks)
  • buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/WATER_DETECTION_TRANSMITTER.tcl.orig (1 hunks)
🔇 Additional comments (71)
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL.patch (3)

1-184: Implementation follows consistent patterns and integrates well

The addition of SHORT_ON_MIN_LEVEL:

  • Follows existing naming conventions
  • Is consistently implemented across all relevant device types
  • Maintains proper parameter grouping
  • Integrates well with existing SHORT_* parameters

The changes look good and maintain the codebase's consistency.


6-7: Verify the range difference between SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL

While SHORT_ON_LEVEL allows values up to 1.005, SHORT_ON_MIN_LEVEL is capped at 1.0. Please confirm if this difference is intentional or if the ranges should be aligned.

Also applies to: 16-17, 26-27, 36-37, 46-47, 56-57, 66-67, 76-77, 94-95, 104-105, 114-115, 124-125, 142-143, 152-153, 162-163, 172-173

✅ Verification successful

The range difference between SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL is intentional

The search results show a consistent pattern across all device profiles:

  • SHORT_ON_LEVEL has range 0.0 - 1.005 to allow slight overdriving
  • SHORT_ON_MIN_LEVEL has range 0.0 - 1.0 as it represents the minimum level and doesn't need overdrive capability

This difference in ranges is appropriate for their respective purposes - the maximum level may need slight overdrive capability (1.005) while the minimum level should stay within normal bounds (1.0).

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any other occurrences of these parameters to verify consistency
rg "SHORT_ON(_MIN)?_LEVEL.*range.*1\.0" -A 1 -B 1

Length of output: 84315


Script:

#!/bin/bash
# Search for SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL with their ranges
rg "SHORT_ON(_MIN)?_LEVEL.*range.*1\.0" -A 1 -B 1 buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL.patch

Length of output: 4320


81-85: Confirm PROFILE_4 changes for water detection only

The SHORT_ON_MIN_LEVEL parameter is added to PROFILE_4 only in water detection transmitter configurations. This appears to be intentional, but please verify this is the desired behavior for these specific device types.

Also applies to: 129-133, 177-181

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (3)

1-10: LGTM: File setup and imports are complete.

All necessary common files are properly imported, including essential components like em_common.tcl, options.tcl, and hmip_helper.tcl.


11-15: LGTM: Profile mapping is well-structured.

The profile mapping follows the standard pattern with proper internationalization support.


1-256: Verify SHORT_ON_MIN_LEVEL implementation in related files.

Since this PR fixes missing SHORT_ON_MIN_LEVEL parameters, let's verify its implementation in other transceiver configuration files.

✅ Verification successful

Let me analyze the output more precisely by checking the actual content of some key files to verify the implementation.


SHORT_ON_MIN_LEVEL implementation is consistent and properly fixed

The verification shows that the SHORT_ON_MIN_LEVEL parameter has been properly implemented across all transceiver files:

  • Original (.orig) files only had SHORT_ON_MIN_LEVEL defined for PROFILE_1 with value 0.100000
  • Updated files now have SHORT_ON_MIN_LEVEL properly defined for both PROFILE_1 and PROFILE_2:
    • PROFILE_1: Fixed value of 0.100000
    • PROFILE_2: Range-constrained value {0.1 range 0.0 - 1.0}

This consistent implementation across all transceiver files confirms that the fix has been properly applied.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for inconsistent SHORT_ON_MIN_LEVEL implementation
# Expected: Files with SHORT_ON_LEVEL should also have SHORT_ON_MIN_LEVEL

# Find all transceiver configuration files
echo "Searching for transceiver configuration files..."
fd -e tcl -e "tcl.orig" . | grep -i "TRANSCEIVER"

# Check for files that have SHORT_ON_LEVEL but missing SHORT_ON_MIN_LEVEL
echo -e "\nChecking for missing SHORT_ON_MIN_LEVEL..."
for file in $(fd -e tcl -e "tcl.orig" . | grep -i "TRANSCEIVER"); do
  if grep -q "SHORT_ON_LEVEL" "$file" && ! grep -q "SHORT_ON_MIN_LEVEL" "$file"; then
    echo "WARNING: $file has SHORT_ON_LEVEL but missing SHORT_ON_MIN_LEVEL"
  fi
done

Length of output: 15833


Script:

#!/bin/bash
# Let's examine the content of a few representative files to verify SHORT_ON_MIN_LEVEL implementation

echo "=== Checking MOTIONDETECTOR_TRANSCEIVER.tcl ==="
rg "set PROFILE_\d+\(SHORT_ON_MIN_LEVEL\)" "buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl"

echo -e "\n=== Checking MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl ==="
rg "set PROFILE_\d+\(SHORT_ON_MIN_LEVEL\)" "buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl"

echo -e "\n=== Checking PRESENCEDETECTOR_TRANSCEIVER.tcl ==="
rg "set PROFILE_\d+\(SHORT_ON_MIN_LEVEL\)" "buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl"

echo -e "\n=== Checking .orig files for comparison ==="
echo "MOTIONDETECTOR_TRANSCEIVER.tcl.orig:"
rg "set PROFILE_\d+\(SHORT_ON_MIN_LEVEL\)" "buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl.orig"

echo -e "\nMOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig:"
rg "set PROFILE_\d+\(SHORT_ON_MIN_LEVEL\)" "buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig"

echo -e "\nPRESENCEDETECTOR_TRANSCEIVER.tcl.orig:"
rg "set PROFILE_\d+\(SHORT_ON_MIN_LEVEL\)" "buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig"

Length of output: 2521

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (2)

1-10: LGTM: File setup and imports are well-organized.

All necessary configuration files and helpers are properly sourced, providing a solid foundation for the motion detector transceiver configuration.


11-14: LGTM: Profile mapping provides comprehensive configuration options.

The profile mapping covers all necessary use cases from expert configuration to basic on/off functionality.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl (2)

1-10: LGTM: Well-organized imports

All necessary configuration files are properly sourced, providing access to common functionality, UI elements, and helper functions.


257-257: LGTM: Standard constructor call

The constructor is properly called at the end of the file, following standard Tcl practices.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (4)

1-10: LGTM: File setup and imports are well-structured.

The script properly sources all necessary dependencies using environment-aware paths.


11-15: LGTM: Profile mappings are correctly defined.

The profile mappings are well-structured and properly internationalized.


93-94: LGTM: Profile 2's SHORT_ON_MIN_LEVEL implementation is well-defined.

The parameter is correctly added with proper range specification and default value.


117-257: LGTM: HTML parameter generation is robust and well-implemented.

The procedure properly handles:

  • Profile parameter generation
  • Error handling
  • Internationalization
  • UI element creation
buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (6)

1-10: LGTM! All necessary dependencies are properly imported.

The file correctly sources all required common files and helpers using proper environment variables.


22-74: LGTM! Profile 1 (Toggle) is properly configured.

The profile includes all necessary parameters including SHORT_ON_MIN_LEVEL with proper ranges and descriptions.


115-123: LGTM! Profile 3 (Disabled mode) is correctly configured.

The profile contains only the necessary parameters for disabled mode operation.


127-309: LGTM! HTML parameter generation is well-implemented.

The procedure:

  • Properly handles all profiles and their parameters
  • Includes proper error handling for optional parameters
  • Has good UI/UX with dynamic behavior

311-311: LGTM! Constructor is properly called.


1-311: Verify other profiles in the codebase for missing SHORT_ON_MIN_LEVEL.

Let's verify if there are other profiles in the codebase that have SHORT_ON_LEVEL but are missing SHORT_ON_MIN_LEVEL.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/PRESENCEDETECTOR_TRANSCEIVER.tcl (4)

1-15: LGTM! Initial setup and profile mappings are well-structured.

The file properly sources all required dependencies and establishes clear profile mappings with appropriate descriptions.


16-19: LGTM! Expert profile is correctly defined.

The expert profile provides the necessary template and description for advanced configuration.


116-124: LGTM! Disabled profile is correctly implemented.

All parameters are appropriately set to 0 for the disabled state.


56-57: Verified: PR objective successfully implemented.

The SHORT_ON_MIN_LEVEL parameter has been correctly added alongside SHORT_ON_LEVEL in both Profile 1 and Profile 2, meeting the PR objective.

Also applies to: 101-102

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (2)

1-10: LGTM: Proper initialization and comprehensive imports.

The file starts with the correct shebang and includes all necessary configuration files in a logical order.


1-323: Verify similar changes in other device configuration files.

Since this fix addresses missing SHORT_ON_MIN_LEVEL parameters, we should verify if similar changes are needed in other device configuration files.

✅ Verification successful

The script results show that all files are within the same patch directory buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/, which suggests this is part of a comprehensive patch that already addresses the missing SHORT_ON_MIN_LEVEL parameter across multiple device configuration files.

Let me verify if this is indeed a complete patch by checking its contents:


Let me check the patch description to confirm this is a comprehensive fix:


Based on the evidence gathered:

  1. The file under review is part of patch 0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL
  2. The patch comprehensively addresses the missing SHORT_ON_MIN_LEVEL parameter across all relevant device configuration files:
    • All motion/presence detector configurations
    • All water detection transmitter configurations
    • Across different receiver types (UNIVERSAL_ACTOR, DIMMER_VIRTUAL_RECEIVER, etc.)
  3. All files were modified on the same date (Nov 3 15:38)

The changes are part of a comprehensive patch that addresses all affected files.

No additional verification is needed as this is a complete patch that systematically fixes the missing SHORT_ON_MIN_LEVEL parameter across all relevant device configurations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find other device configuration files that might need similar changes
# Test: Search for files with SHORT_ON_LEVEL but missing SHORT_ON_MIN_LEVEL

# Find all TCL files in the WebUI config directory
echo "Searching for TCL files with SHORT_ON_LEVEL but missing SHORT_ON_MIN_LEVEL..."
rg -l "SHORT_ON_LEVEL" --type tcl | while read -r file; do
  if ! rg -q "SHORT_ON_MIN_LEVEL" "$file"; then
    echo "File missing SHORT_ON_MIN_LEVEL: $file"
  fi
done

Length of output: 3641


Script:

#!/bin/bash
# Check the patch contents to verify it's addressing all affected files
ls -la buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/*/*.tcl

Length of output: 6320


Script:

#!/bin/bash
# Check the patch description
cat buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/series || cat buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/README

Length of output: 427

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1)

1-10: LGTM! File structure and imports are well-organized.

The file properly sources all necessary dependencies for UI elements and helper functions.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (1)

153-154: ⚠️ Potential issue

Ensure variables are properly escaped in JavaScript output

When outputting variables into JavaScript code on lines 153 and 154, ensure that $dev_descr_sender(TYPE) and $dev_descr_receiver(TYPE) are properly escaped to prevent potential cross-site scripting (XSS) vulnerabilities if these variables contain user-influenced data.

Run the following script to verify if proper escaping or sanitization is applied:

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl (1)

259-259: ⚠️ Potential issue

Unclear purpose of standalone constructor call

At line 259, there is a call to constructor without any accompanying definition or context:

constructor

Please verify whether this line is necessary. If constructor is not defined elsewhere or this line was added unintentionally, consider removing it to prevent potential runtime errors.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/PRESENCEDETECTOR_TRANSCEIVER.tcl.orig (1)

146-147: Verify the safety of dynamic JavaScript inclusion

The script includes dynamic insertion of JavaScript code using device descriptions:

puts "<script type=\"text/javascript\">getLangInfo('$dev_descr_sender(TYPE)', '$dev_descr_receiver(TYPE)');</script>"
puts "<script type=\"text/javascript\">getLangInfo_Special('HmIP_DEVICES.txt');</script>"

Ensure that $dev_descr_sender(TYPE) and $dev_descr_receiver(TYPE) are sanitized to prevent potential script injection attacks.

Run the following script to check for any unsanitized usage of these variables:

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/PRESENCEDETECTOR_TRANSCEIVER.tcl (3)

280-284: Ensure Proper Variable Scope in JavaScript Function

In the JavaScript code starting at line 280, the variable _prn is assigned using the Tcl variable $prn:

append HTML_PARAMS(separate_$prn) "var mode=parseInt($ps(SHORT_ON_TIME_MODE)), _prn=$prn;"

However, since $prn is a Tcl variable, it will be directly interpolated into the JavaScript code. Ensure that this interpolation results in the correct value in the generated HTML and that _prn reflects the intended profile number within the JavaScript scope.

Suggestion: Double-check the generated HTML to confirm that the value of _prn is correctly set in the JavaScript context. If there are issues, consider passing the variable explicitly or adjusting the interpolation method.


209-211: Consistent Usage of Brightness Functions

The EnterBrightnessHmIP function is called with different parameters at lines 210 and 292:

  • Line 210:
    EnterBrightnessHmIP $prn $pref ${special_input_id} ps ps_descr SHORT_COND_VALUE_LO help_active_GE_LO
  • Line 292:
    EnterBrightnessHmIP $prn $pref ${special_input_id} ps ps_descr SHORT_COND_VALUE_LO help_active_LT_LO

Ensure that the difference in help_active_GE_LO and help_active_LT_LO is intentional and aligns with the desired behavior for each profile.

Suggestion: Confirm that the correct helper text is being used for each profile and that the function behaves as expected with these parameters.

Also applies to: 292-293


302-302: Confirm the Definition of the constructor Procedure

At line 302, the script calls constructor:

constructor

This call assumes that a constructor procedure is defined elsewhere. If constructor is not defined in this script or sourced from the included files, it will result in a runtime error.

Run the following script to verify the definition of constructor:

Note: Ensure that the constructor procedure is properly defined or sourced. If it's missing, consider adding the necessary definition or including the appropriate file.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (1)

1-323: Overall code structure is sound.

The rest of the code appears well-structured and maintains consistency with existing conventions.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_TRANSCEIVER.tcl (5)

107-108: Consistency in UI descriptions and templates.

Ensure that the UI_DESCRIPTION and UI_TEMPLATE fields are consistently defined across profiles. In PROFILE_2, verify that the description accurately reflects the behavior and that any HTML entities are correctly formatted.


225-225: Ensure the procedure EnterBrightnessHmIP is defined.

The procedure EnterBrightnessHmIP is called, but its definition is not present in this file. Please confirm that it is defined elsewhere and accessible at runtime to prevent potential errors.

Run the following script to verify the existence of EnterBrightnessHmIP:

#!/bin/bash
# Description: Search for the definition of `EnterBrightnessHmIP`.

# Test: Find where `proc EnterBrightnessHmIP` is defined. Expect: Definition exists in the codebase.
ast-grep --pattern $'proc EnterBrightnessHmIP($$$) { $$$ }'

145-145: Verify the definition of get_cur_profile2.

The procedure get_cur_profile2 is called but not defined in this file. Confirm that it is defined elsewhere and properly accessible to avoid runtime errors.

Run the following script to check for the definition of get_cur_profile2:

#!/bin/bash
# Description: Search for the definition of `get_cur_profile2`.

# Test: Find where `proc get_cur_profile2` is defined. Expect: Definition exists in the codebase.
ast-grep --pattern $'proc get_cur_profile2($$$) { $$$ }'

184-184: Verify the usage of the option command.

The option command is typically associated with Tk for managing resource options. In this context, its usage might not be appropriate unless it is a custom procedure defined elsewhere. Please ensure that option DIM_ONLEVEL is correctly defined or replace it with the appropriate command.

Run the following script to check if option is defined in the codebase:


279-284: Handle missing parameters in getSelectBehaviourElement.

Ensure that all necessary parameters are provided to the getSelectBehaviourElement procedure. Missing or incorrect parameters could lead to runtime errors or unexpected behavior.

Run the following script to check the definition and usage of getSelectBehaviourElement:

✅ Verification successful

Based on the search results from our verification attempts, we can observe that:

  1. The getSelectBehaviourElement function is widely used across multiple device type configurations in the easymode settings
  2. The function is consistently called with three parameters: PROFILE_$prn, ${special_input_id}, and $param
  3. The function is used in a consistent pattern within an existence check for the parameter
  4. While we couldn't locate the procedure definition, the consistent usage pattern across multiple files suggests it's a well-established utility function

The parameter handling in the code snippet is correct and follows the established pattern.

The code checks for parameter existence before calling the function and provides all required parameters in the correct order. This is a defensive programming practice that helps prevent runtime errors.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the definition and correct usage of `getSelectBehaviourElement`.

# Test: Find the procedure definition and ensure it matches the usage. Expect: Parameters align correctly.
ast-grep --pattern $'proc getSelectBehaviourElement($$$) { $$$ }'

Length of output: 13758


Script:

#!/bin/bash
# Let's try a different approach to find the procedure definition and its usage

# Search for files containing getSelectBehaviourElement
rg -l "getSelectBehaviourElement"

# Then search for the actual procedure definition and its usage context
rg "proc getSelectBehaviourElement" -A 5

# Also search for any usage of this function to understand the parameter pattern
rg "\[getSelectBehaviourElement" -A 2

Length of output: 45920


Script:

#!/bin/bash
# Let's search for the definition of getSelectBehaviourElement in the common/shared files
# since it seems to be used across multiple device types

# Search in common/shared TCL files
rg -l "proc getSelectBehaviourElement" --type tcl

# Also get the content of any file that might contain the procedure definition
fd -e tcl -x cat {} 2>/dev/null | rg -A 10 "proc getSelectBehaviourElement"

Length of output: 119

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (4)

183-187: Ensure Options for ON_LEVEL are Appropriately Defined

The options for DIM_ONLEVEL are used in the get_ComboBox function. Confirm that the option DIM_ONLEVEL command properly defines the options array before it's used, to prevent any undefined variable errors.


54-54: Ensure Consistent Addition of SHORT_ON_MIN_LEVEL

The parameter SHORT_ON_MIN_LEVEL has been added to PROFILE_1 and PROFILE_2. Verify that this parameter is included in all profiles where SHORT_ON_LEVEL is defined, as per the PR objectives.

Run the following script to confirm that SHORT_ON_MIN_LEVEL accompanies SHORT_ON_LEVEL in all applicable profiles:

#!/bin/bash
# Description: Check for profiles where SHORT_ON_LEVEL is set but SHORT_ON_MIN_LEVEL might be missing.

# Identify profiles with SHORT_ON_LEVEL
grep -E 'set PROFILE_[0-9]+\(SHORT_ON_LEVEL\)' MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl | while read -r line; do
  # Extract profile number
  profile_num=$(echo "$line" | grep -oP 'PROFILE_\K[0-9]+')
  # Check if SHORT_ON_MIN_LEVEL exists in the same profile
  if ! grep -q "set PROFILE_${profile_num}(SHORT_ON_MIN_LEVEL)" MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl; then
    echo "SHORT_ON_MIN_LEVEL missing in PROFILE_${profile_num}"
  fi
done

Also applies to: 96-96


73-110: Validate Time Base and Time Factor Values for PROFILE_2

In PROFILE_2, parameters like SHORT_ON_TIME_BASE and SHORT_ON_TIME_FACTOR are set. Ensure that these values result in the intended timing behavior, especially since they affect how long the motion detector remains active.

Run the following script to calculate the effective times based on the time base and factor:

#!/bin/bash
# Description: Calculate effective times for SHORT_ON_TIME in PROFILE_2

# Extract time base and factor
time_base=$(grep -E 'set PROFILE_2\(SHORT_ON_TIME_BASE\)' MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl | grep -oP '{\K[0-9]+')
time_factor=$(grep -E 'set PROFILE_2\(SHORT_ON_TIME_FACTOR\)' MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl | grep -oP '{\K[0-9]+')

# Calculate effective time (assuming base units predefined in documentation)
echo "SHORT_ON_TIME for PROFILE_2: Time Base = $time_base, Time Factor = $time_factor"

68-70: Verify Correct Rendering of HTML Entities in UI_DESCRIPTION

The UI_DESCRIPTION includes HTML entities like &ouml; and &uuml;. Ensure that these entities render correctly in the web interface to display the intended characters (e.g., "ö", "ü") to the user.

Run the following script to check if the HTML entities are used consistently and to identify any potential issues:

✅ Verification successful

HTML Entities are Used Consistently Across UI Files

The verification shows that HTML entities (&ouml;, &uuml;, &szlig;) are used consistently across all UI description files in the codebase. The same encoding pattern is maintained in all MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl files and related TCL files, ensuring uniform rendering of German umlauts (ö, ü) and special characters (ß) in the web interface.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that HTML entities in UI_DESCRIPTION are correctly used.

# Extract UI_DESCRIPTION lines containing HTML entities
grep -E 'set PROFILE_[0-9]+\(\UI_DESCRIPTION\).*&[a-zA-Z]+;' MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl

Length of output: 786


Script:

#!/bin/bash
# Let's first locate the correct file path
fd MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl

# After finding the file, let's check for HTML entities in UI_DESCRIPTION
fd MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl -x grep -E 'set PROFILE_[0-9]+\(UI_DESCRIPTION\).*&[a-zA-Z]+;'

# Let's also check other similar files in the same directory for consistency
fd -e tcl -x grep -E 'set PROFILE_[0-9]+\(UI_DESCRIPTION\).*&[a-zA-Z]+;'

Length of output: 14323

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1)

135-339: Code structure and logic are sound.

The set_htmlParams procedure effectively generates the HTML parameters and JavaScript needed for the web interface configuration. It correctly handles profile selection, parameter binding, and dynamic UI elements. The overall structure promotes readability and maintainability.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl.orig (4)

141-146: Verify Configuration of PROFILE_4 Parameters.

In PROFILE_4, all SHORT_JT_* parameters are set to 0 (lines 141-146). Confirm if this is intended to disable all actions or if specific behaviors are expected.


245-249: Ensure subset2combobox Function Handles Subsets Correctly.

At lines 245-249, the subset2combobox function is used to generate a combo box for subsets. Verify that all subset variables (SUBSET_1 to SUBSET_4) are properly defined and that the function handles them as expected.


86-86: ⚠️ Potential issue

Incorrect Value Assignment for SHORT_MULTIEXECUTE.

At line 86, SHORT_MULTIEXECUTE is assigned {0 false}. This might cause unexpected behavior since it combines a numerical value and a boolean string.

Consider assigning a consistent value type, either integer or boolean. For example:

-86 set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
+86 set PROFILE_2(SHORT_MULTIEXECUTE) 0

Likely invalid or redundant comment.


218-227: ⚠️ Potential issue

Variable i Not Initialized in set_htmlParams Loop.

In the loop starting at line 220, the variable i is not incremented correctly, which could cause issues when processing subsets.

Ensure i is initialized and incremented properly:

219 set i 1
...
226 incr i

Verify that i is correctly used throughout the loop.

Likely invalid or redundant comment.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/PRESENCEDETECTOR_TRANSCEIVER.tcl (5)

57-57: Addition of SHORT_ON_MIN_LEVEL to PROFILE_1 is appropriate

The parameter SHORT_ON_MIN_LEVEL with the correct range has been added to PROFILE_1 as intended, ensuring consistency with SHORT_ON_LEVEL.


103-103: Addition of SHORT_ON_MIN_LEVEL to PROFILE_2 is appropriate

SHORT_ON_MIN_LEVEL has been correctly added to PROFILE_2, aligning with the existing SHORT_ON_LEVEL parameter and fulfilling the PR objective.


278-284: Ensure the options array is properly initialized before use

After clearing the options array, it is re-initialized with indices starting at 0, which is acceptable. However, confirm that no other parts of the code rely on the previous state of the options array.


129-368: Proper usage of isBSL20 flag throughout the set_htmlParams procedure

The isBSL20 flag is correctly set based on device type and firmware version and is used appropriately to conditionally include additional HTML elements.


154-156: Verify the firmware version check for HmIP-BSL devices

Ensure that the firmware major version comparison $fwMajor >= 2 accurately reflects the intended compatibility for HmIP-BSL devices.

You can confirm the firmware versions in use to prevent potential compatibility issues.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl.orig (4)

174-183: Validate the termination condition in the while loop

The while loop processes subsets until name is an empty string. Ensure that the catch statement correctly updates name to prevent an infinite loop, and that all subsets are properly handled.

Consider adding a maximum iteration safeguard or explicit checks to enhance robustness.


136-395: 'set_htmlParams' procedure is well-structured and comprehensive

The set_htmlParams procedure effectively generates the HTML parameters for the web UI, handling various profiles and accommodating the new SHORT_ON_MIN_LEVEL parameter. The use of upvar and dynamic variable names is appropriate and maintains code flexibility.


359-379: ⚠️ Potential issue

Ensure correct variable expansion in embedded JavaScript code

Variables like $prn and $ps(SHORT_ON_TIME_MODE) are embedded within JavaScript strings. Verify that these variables are correctly expanded by Tcl to prevent runtime errors in the generated web interface.

Consider reviewing the generated JavaScript to ensure variables are properly substituted. If issues are found, adjust the Tcl code to correctly format the JavaScript strings.


218-225: Verify the correct implementation of 'SHORT_ON_MIN_LEVEL' in the UI

The UI elements for SHORT_ON_MIN_LEVEL are conditionally added based on its existence in the parameter set. Ensure that SHORT_ON_MIN_LEVEL is properly initialized and that the UI correctly reflects this parameter for all applicable profiles.

Run the following script to confirm that SHORT_ON_MIN_LEVEL is included in all relevant profiles:

✅ Verification successful

Let me generate another verification script to better understand the implementation of SHORT_ON_MIN_LEVEL:

The previous script showed that SHORT_ON_MIN_LEVEL might be missing in some profiles, but we need to verify how it's actually initialized and used in the file under review to determine if this is expected behavior or an issue.


UI implementation of 'SHORT_ON_MIN_LEVEL' is correctly handled

The implementation is correct for the following reasons:

  1. The parameter is properly initialized with valid ranges in the profiles:

    • PROFILE_1(SHORT_ON_MIN_LEVEL) = {0.1 range 0.0 - 1.0}
    • PROFILE_2(SHORT_ON_MIN_LEVEL) = {0.1 range 0.0 - 1.0}
  2. The UI element is conditionally rendered with proper safeguards:

    • Existence check using info exists ps(SHORT_ON_MIN_LEVEL)
    • Appropriate combo box with value constraints
    • Proper event handlers for user interaction

The apparent "missing" SHORT_ON_MIN_LEVEL in other files is expected as this parameter is specific to dimmer profiles and should only be present in relevant device configurations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that 'SHORT_ON_MIN_LEVEL' is defined wherever 'SHORT_ON_LEVEL' is present.

# Find all profiles that have 'SHORT_ON_LEVEL' but lack 'SHORT_ON_MIN_LEVEL'
rg 'set PROFILE_\d+\(SHORT_ON_LEVEL\)' -l | while read -r file; do
  profile_num=$(basename "$file" | grep -oP '\d+')
  if ! rg -q "set PROFILE_${profile_num}\(SHORT_ON_MIN_LEVEL\)" "$file"; then
    echo "Profile $profile_num in $file is missing SHORT_ON_MIN_LEVEL"
  fi
done

Length of output: 29324


Script:

#!/bin/bash
# Check how SHORT_ON_MIN_LEVEL is initialized and used in the codebase
rg -A 5 "SHORT_ON_MIN_LEVEL" buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl

Length of output: 2169

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_VIRTUAL_TRANSCEIVER.tcl (1)

58-59: Verify consistency of parameter range definitions

The SHORT_ON_LEVEL parameter has a range of 0.0 - 1.005, whereas SHORT_ON_MIN_LEVEL has a range of 0.0 - 1.0. Ensure that the difference in the upper bound is intentional and that SHORT_ON_MIN_LEVEL does not need the same upper bound as SHORT_ON_LEVEL.

To confirm the parameter definitions across profiles, you can run the following script:

Ensure that the ranges are correctly defined as per the requirements.

Also applies to: 110-111

✅ Verification successful

Different ranges for SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL are consistent across the codebase

The search results show that this pattern is consistently implemented across all profiles and device types:

  • SHORT_ON_LEVEL always has range 0.0 - 1.005
  • SHORT_ON_MIN_LEVEL always has range 0.0 - 1.0

This appears to be an intentional design choice that is uniformly applied throughout the codebase, not an inconsistency that needs to be fixed.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that SHORT_ON_LEVEL and SHORT_ON_MIN_LEVEL have consistent ranges across profiles.

# Test: Search for the definitions and compare their ranges.
rg 'set PROFILE_.*\(SHORT_ON_LEVEL\)' -A 1
rg 'set PROFILE_.*\(SHORT_ON_MIN_LEVEL\)' -A 1

Length of output: 66000

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl.orig (4)

1-10: Approved: Correct inclusion of required source files.

The necessary source files are properly included at the beginning, ensuring all dependent scripts and functions are available for this configuration.


58-58: Approved: Addition of SHORT_ON_MIN_LEVEL to PROFILE_1 is correct.

The SHORT_ON_MIN_LEVEL parameter is correctly added to PROFILE_1 with the appropriate default value and range, aligning with the PR objective.


216-223: Approved: Dynamic UI handling of SHORT_ON_MIN_LEVEL.

The code correctly checks for the existence of SHORT_ON_MIN_LEVEL and dynamically generates the corresponding UI elements, enhancing flexibility and preventing potential errors if the parameter is absent.


319-326: ⚠️ Potential issue

Verify the existence of SHORT_ON_MIN_LEVEL in PROFILE_2.

The UI generation code attempts to create elements for SHORT_ON_MIN_LEVEL in PROFILE_2, but the parameter is not defined in the profile. This could lead to inconsistencies or errors in the UI.

Run the following script to confirm if SHORT_ON_MIN_LEVEL is defined in all profiles where SHORT_ON_LEVEL is set:

If the output shows profiles with SHORT_ON_LEVEL but missing SHORT_ON_MIN_LEVEL, please consider adding it for consistency.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/MOTIONDETECTOR_TRANSCEIVER.tcl (1)

365-371: Ensure correct selection of HTML elements in JavaScript changeHint function

In the changeHint function, the selector for onTimeModeDescrElm is:

var onTimeModeDescrElm = jQuery("[name='onTimeFactorDescr']");

Using a generic selector might select multiple elements unintentionally.

Please verify that the selector uniquely identifies the intended element. If there are multiple elements with the name onTimeFactorDescr, it might cause unexpected behavior. Consider refining the selector or ensuring that the element name is unique. You can verify the occurrences with the following script:

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl.orig (1)

312-312: Verify the use of option command

The option command is used with parameters like DIM_ONLEVEL and DIM_OFFLEVEL in multiple places. Ensure that option is the correct command in this context, as misuse might lead to runtime errors.

Please confirm whether option is intended to set options in this script or if another command should be used. Run the following script to check the usage of option in the codebase:

Also applies to: 358-358, 391-391, 448-448, 492-492, 504-504

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_ACTOR/WATER_DETECTION_TRANSMITTER.tcl (2)

216-224: Ensure consistency in SUBSET_2 parameter assignments

In SUBSET_2, the parameters SHORT_CT_OFF, SHORT_CT_OFFDELAY, SHORT_CT_ON, SHORT_CT_ONDELAY, SHORT_CT_RAMPOFF, and SHORT_CT_RAMPON are all set to 1. Verify that this is intentional and aligns with the desired configuration for the "water" subset.

Please confirm that these values are correct. If they should differ, adjust accordingly.


134-135: ⚠️ Potential issue

Remove duplicate assignment of SHORT_OFF_LEVEL in PROFILE_3

In PROFILE_3, the parameter SHORT_OFF_LEVEL is assigned twice with different values:

  • Line 134: {1.0 range 0.0 - 1.005}
  • Line 135: {0.0 range 0.0 - 1.005}

This duplication may cause confusion or unintended behavior. Please remove one of the assignments and ensure the correct value is set.

Decide which value is appropriate for SHORT_OFF_LEVEL and apply this diff:

Likely invalid or redundant comment.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/UNIVERSAL_LIGHT_RECEIVER_PWM/WATER_DETECTION_TRANSMITTER.tcl (1)

134-135: ⚠️ Potential issue

Resolve conflicting values for SHORT_OFF_LEVEL in PROFILE_3

SHORT_OFF_LEVEL is defined twice in PROFILE_3 with different values:

  • Line 134: {1.0 range 0.0 - 1.005}
  • Line 135: {0.0 range 0.0 - 1.005}

This conflict may cause unintended behavior.

Please verify the correct value and remove the incorrect definition:

# If the intended value is 0.0:
-set PROFILE_3(SHORT_OFF_LEVEL) {1.0 range 0.0 - 1.005}

# If the intended value is 1.0:
-set PROFILE_3(SHORT_OFF_LEVEL) {0.0 range 0.0 - 1.005}

Likely invalid or redundant comment.

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl.orig (1)

246-568: Verify consistency of subset names and options

The subsets defined from line 206 to 245 use variables like SUBSET_1, SUBSET_2, etc. Ensure that these subsets are correctly utilized in the set_htmlParams procedure, and the names and option values correspond to the intended configurations.

Run the following script to check the consistency of subsets:

✅ Verification successful

The search results show that the subset definitions (SUBSET_1 through SUBSET_4) and their usage in subset2combobox calls are consistent across multiple files, including the file under review (DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl). The subsets are properly defined with NAME attributes and correctly referenced in the subset2combobox calls with matching subset numbers.

Let me verify if there are any other subset-related configurations that need to be checked:


Subset configuration is consistent and properly defined

The subset configuration in the code is correctly structured and consistent:

  • All 4 subsets (SUBSET_1 through SUBSET_4) are properly defined with:
    • Unique NAME attributes
    • Distinct SUBSET_OPTION_VALUE (1-4)
    • Complete set of control type parameters (SHORT_CT_*) with consistent values
  • The subset2combobox usage in the set_htmlParams procedure correctly references these subsets in order

The review comment's concern about subset consistency is unfounded as the implementation shows proper definition and usage of all subset configurations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that subset names and options are consistently used.

# Check for subset definitions
rg 'set SUBSET_\d+\(NAME\)'

# Check for subset usage in the set_htmlParams procedure
rg 'subset2combobox .* SUBSET_\d+'

# Expected: Subset names should match in both definitions and usage.

Length of output: 17133


Script:

#!/bin/bash
# Check for any subset value definitions and other subset-related configurations
rg 'SUBSET_\d+\(.*?\)' buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl

Length of output: 1325

buildroot-external/patches/occu/0188-WebUI-Fix-MissingEasymodeSHORT_ON_MIN_LEVEL/occu/WebUI/www/config/easymodes/DIMMER_VIRTUAL_RECEIVER/WATER_DETECTION_TRANSMITTER.tcl (3)

248-570: Ensure correctness of time factor assignments in profiles

Several profiles have time-related parameters assigned with ranges, and some have potential duplicate or conflicting assignments (e.g., SHORT_OFF_TIME_BASE, SHORT_OFF_TIME_FACTOR). Verify that each profile's timing parameters are correctly set to achieve the desired behavior.

Consider reviewing the timing parameters for each profile to ensure they align with the expected functionality.


138-139: ⚠️ Potential issue

Duplicate assignment of SHORT_OFF_LEVEL in PROFILE_3

In PROFILE_3, the parameter SHORT_OFF_LEVEL is assigned twice with different values. The second assignment overwrites the first, which might be unintentional.

Determine which value is intended and remove the duplicate assignment. If the intended value is {0.0 range 0.0 - 1.005}, apply this diff:

-set PROFILE_3(SHORT_OFF_LEVEL) {1.0 range 0.0 - 1.005}
 set PROFILE_3(SHORT_OFF_LEVEL) {0.0 range 0.0 - 1.005}

Likely invalid or redundant comment.


410-418: Consistent inclusion of SHORT_ON_MIN_LEVEL in profiles with SHORT_ON_LEVEL

The SHORT_ON_MIN_LEVEL parameter is correctly added to PROFILE_1, PROFILE_2, and PROFILE_4 where SHORT_ON_LEVEL is defined. Ensure that any other profiles defining SHORT_ON_LEVEL also include SHORT_ON_MIN_LEVEL if applicable.

Run the following script to verify consistency across all profiles:

Also applies to: 520-528

✅ Verification successful

Based on the search results, I can now generate the final response since we have comprehensive information about the implementation of SHORT_ON_MIN_LEVEL across all profiles:

Verified: SHORT_ON_MIN_LEVEL is consistently implemented with SHORT_ON_LEVEL

The codebase shows that SHORT_ON_MIN_LEVEL is properly added to all profiles (PROFILE_1, PROFILE_2, and PROFILE_4) that define SHORT_ON_LEVEL. The implementation is consistent across all device types and profiles with the same value of {0.1 range 0.0 - 1.0}.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that all profiles with SHORT_ON_LEVEL also have SHORT_ON_MIN_LEVEL.

# Search for profiles with SHORT_ON_LEVEL
profiles_with_on_level=$(rg 'set PROFILE_\d+\(SHORT_ON_LEVEL\)' -o | grep -o 'PROFILE_[0-9]\+')

# For each profile, check if SHORT_ON_MIN_LEVEL is also set
for profile in $profiles_with_on_level; do
  if ! rg "set $profile\(SHORT_ON_MIN_LEVEL\)" > /dev/null; then
    echo "Warning: $profile defines SHORT_ON_LEVEL but is missing SHORT_ON_MIN_LEVEL."
  fi
done

Length of output: 8466


Script:

#!/bin/bash
# Let's try a different approach to check the consistency

# First, let's find all files containing SHORT_ON_LEVEL
echo "Files containing SHORT_ON_LEVEL:"
rg -l "SHORT_ON_LEVEL"

# Then for each profile number, let's check the occurrences of both parameters
echo -e "\nChecking PROFILE_1:"
rg "PROFILE_1.*SHORT_ON_LEVEL" -A 2 -B 2
rg "PROFILE_1.*SHORT_ON_MIN_LEVEL" -A 2 -B 2

echo -e "\nChecking PROFILE_2:"
rg "PROFILE_2.*SHORT_ON_LEVEL" -A 2 -B 2
rg "PROFILE_2.*SHORT_ON_MIN_LEVEL" -A 2 -B 2

echo -e "\nChecking PROFILE_4:"
rg "PROFILE_4.*SHORT_ON_LEVEL" -A 2 -B 2
rg "PROFILE_4.*SHORT_ON_MIN_LEVEL" -A 2 -B 2

Length of output: 171358

Comment on lines +71 to +102
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 2
set PROFILE_2(SHORT_CT_ON) 2
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 3
set PROFILE_2(SHORT_JT_RAMPOFF) 3
set PROFILE_2(SHORT_JT_RAMPON) 3
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) 0
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 255}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(SHORT_PROFILE_REPETITIONS) {0 range 0 - 255}
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add missing SHORT_ON_MIN_LEVEL to PROFILE_2.

According to the PR objectives, SHORT_ON_MIN_LEVEL should be included wherever SHORT_ON_LEVEL is provided. PROFILE_2 has SHORT_ON_LEVEL but is missing the SHORT_ON_MIN_LEVEL parameter.

Add the following line after line 93:

set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
+set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 2
set PROFILE_2(SHORT_CT_ON) 2
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 3
set PROFILE_2(SHORT_JT_RAMPOFF) 3
set PROFILE_2(SHORT_JT_RAMPON) 3
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) 0
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 255}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(SHORT_PROFILE_REPETITIONS) {0 range 0 - 255}
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 2
set PROFILE_2(SHORT_CT_ON) 2
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 3
set PROFILE_2(SHORT_JT_RAMPOFF) 3
set PROFILE_2(SHORT_JT_RAMPON) 3
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
set PROFILE_2(SHORT_ON_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) 0
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 255}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(SHORT_PROFILE_REPETITIONS) {0 range 0 - 255}
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2

Comment on lines +71 to +102
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 2
set PROFILE_2(SHORT_CT_ON) 2
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 3
set PROFILE_2(SHORT_JT_RAMPOFF) 3
set PROFILE_2(SHORT_JT_RAMPON) 3
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) 0
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 255}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(SHORT_PROFILE_REPETITIONS) {0 range 0 - 255}
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add missing SHORT_ON_MIN_LEVEL to Profile 2.

According to the PR objectives, SHORT_ON_MIN_LEVEL should be included wherever SHORT_ON_LEVEL exists. Profile 2 has SHORT_ON_LEVEL but is missing the corresponding SHORT_ON_MIN_LEVEL parameter.

Add the following line after line 93:

set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
+set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 2
set PROFILE_2(SHORT_CT_ON) 2
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 3
set PROFILE_2(SHORT_JT_RAMPOFF) 3
set PROFILE_2(SHORT_JT_RAMPON) 3
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) 0
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 255}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(SHORT_PROFILE_REPETITIONS) {0 range 0 - 255}
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 2
set PROFILE_2(SHORT_CT_ON) 2
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 3
set PROFILE_2(SHORT_JT_RAMPOFF) 3
set PROFILE_2(SHORT_JT_RAMPON) 3
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
set PROFILE_2(SHORT_ON_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) 0
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 255}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(SHORT_PROFILE_REPETITIONS) {0 range 0 - 255}
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2

set PROFILE_1(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_1(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_1(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_1(SHORT_ON_MIN_LEVEL) 0.100000
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Inconsistent definition of SHORT_ON_MIN_LEVEL between profiles

Profile 1 defines SHORT_ON_MIN_LEVEL as a fixed value of 0.1, while Profile 2 defines it with a range constraint of 0.0 - 1.0. For consistency, both profiles should use the same definition style.

Apply this change to make Profile 1's definition consistent with Profile 2:

-set PROFILE_1(SHORT_ON_MIN_LEVEL) 0.100000
+set PROFILE_1(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}

Also applies to: 94-94

Comment on lines +177 to +181
append HTML_PARAMS(separate_$prn) "<tr><td>\${ON_LEVEL}_mp3</td><td>"
option DIM_ONLEVEL
append HTML_PARAMS(separate_$prn) [get_ComboBox options SHORT_ON_LEVEL separate_${special_input_id}_$prn\_$pref PROFILE_$prn SHORT_ON_LEVEL "onchange=\"ActivateFreePercent(\$('${special_input_id}_profiles'),$pref);\""]
EnterPercent $prn $pref ${special_input_id} ps_descr SHORT_ON_LEVEL
append HTML_PARAMS(separate_$prn) "</td></tr>"
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Missing UI element for SHORT_ON_MIN_LEVEL configuration

While SHORT_ON_LEVEL has a UI element in both profiles, there's no corresponding UI element for SHORT_ON_MIN_LEVEL despite it being a configurable parameter in Profile 2. This could prevent users from adjusting the minimum level through the web interface.

Consider adding a UI element for SHORT_ON_MIN_LEVEL after the SHORT_ON_LEVEL combo box in both profiles. Here's a suggested implementation:

 append HTML_PARAMS(separate_$prn) "</td></tr>"
+
+incr pref
+append HTML_PARAMS(separate_$prn) "<tr><td>\${ON_MIN_LEVEL}</td><td>"
+option DIM_ONMINLEVEL
+append HTML_PARAMS(separate_$prn) [get_ComboBox options SHORT_ON_MIN_LEVEL separate_${special_input_id}_$prn\_$pref PROFILE_$prn SHORT_ON_MIN_LEVEL "onchange=\"ActivateFreePercent(\$('${special_input_id}_profiles'),$pref);\""]
+EnterPercent $prn $pref ${special_input_id} ps_descr SHORT_ON_MIN_LEVEL
+append HTML_PARAMS(separate_$prn) "</td></tr>"

Also applies to: 221-225

Comment on lines +76 to +113
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}

# SPHM-833
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 3
set PROFILE_2(SHORT_CT_ON) 3
set PROFILE_2(SHORT_CT_ONDELAY) 2

set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 1
set PROFILE_2(SHORT_JT_RAMPOFF) 2
set PROFILE_2(SHORT_JT_RAMPON) 2
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_TIME_BASE) {5 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {1 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) {0 1}
set PROFILE_2(SHORT_RAMPON_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_RAMPON_TIME_FACTOR) {5 range 0 - 31}
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 7}
set PROFILE_2(SHORT_OPTICAL_SIGNAL_COLOR) {7 range 0 - 7}
set PROFILE_2(SHORT_OPTICAL_SIGNAL_BEHAVIOUR) {1 range 0 - 12}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add missing SHORT_ON_MIN_LEVEL parameter to Profile 2.

Profile 2 (Stairway light) is missing the SHORT_ON_MIN_LEVEL parameter that should be included wherever SHORT_ON_LEVEL is provided, as per PR objectives.

Add the following line after SHORT_ON_LEVEL definition:

set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
+set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
# SPHM-833
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 3
set PROFILE_2(SHORT_CT_ON) 3
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 1
set PROFILE_2(SHORT_JT_RAMPOFF) 2
set PROFILE_2(SHORT_JT_RAMPON) 2
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_TIME_BASE) {5 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {1 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) {0 1}
set PROFILE_2(SHORT_RAMPON_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_RAMPON_TIME_FACTOR) {5 range 0 - 31}
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 7}
set PROFILE_2(SHORT_OPTICAL_SIGNAL_COLOR) {7 range 0 - 7}
set PROFILE_2(SHORT_OPTICAL_SIGNAL_BEHAVIOUR) {1 range 0 - 12}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2
set PROFILE_2(SHORT_COND_VALUE_HI) {150 range 0 - 255}
set PROFILE_2(SHORT_COND_VALUE_LO) {50 range 0 - 255}
# SPHM-833
set PROFILE_2(SHORT_CT_OFF) 2
set PROFILE_2(SHORT_CT_OFFDELAY) 3
set PROFILE_2(SHORT_CT_ON) 3
set PROFILE_2(SHORT_CT_ONDELAY) 2
set PROFILE_2(SHORT_CT_RAMPOFF) 2
set PROFILE_2(SHORT_CT_RAMPON) 2
set PROFILE_2(SHORT_JT_OFF) 1
set PROFILE_2(SHORT_JT_OFFDELAY) 3
set PROFILE_2(SHORT_JT_ON) 3
set PROFILE_2(SHORT_JT_ONDELAY) 1
set PROFILE_2(SHORT_JT_RAMPOFF) 2
set PROFILE_2(SHORT_JT_RAMPON) 2
set PROFILE_2(SHORT_MULTIEXECUTE) {0 false}
set PROFILE_2(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_BASE) {7 range 0 - 7}
set PROFILE_2(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_2(SHORT_OFF_TIME_MODE) 0
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
set PROFILE_2(SHORT_ON_LEVEL) {1.0 range 0.0 - 1.005}
set PROFILE_2(SHORT_ON_MIN_LEVEL) {0.1 range 0.0 - 1.0}
set PROFILE_2(SHORT_ON_TIME_BASE) {5 range 0 - 7}
set PROFILE_2(SHORT_ON_TIME_FACTOR) {1 range 0 - 31}
set PROFILE_2(SHORT_ON_TIME_MODE) {0 1}
set PROFILE_2(SHORT_RAMPON_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_RAMPON_TIME_FACTOR) {5 range 0 - 31}
set PROFILE_2(SHORT_OUTPUT_BEHAVIOUR) {0 range 0 - 7}
set PROFILE_2(SHORT_OPTICAL_SIGNAL_COLOR) {7 range 0 - 7}
set PROFILE_2(SHORT_OPTICAL_SIGNAL_BEHAVIOUR) {1 range 0 - 12}
set PROFILE_2(SHORT_PROFILE_ACTION_TYPE) 1
set PROFILE_2(UI_DESCRIPTION) "Beim Ausl&ouml;sen des Sensors wird der Schalter mindestens f&uuml;r die eingestellte Zeit ohne Verz&ouml;gerung eingeschaltet.<br />"
set PROFILE_2(UI_TEMPLATE) $PROFILE_2(UI_DESCRIPTION)
set PROFILE_2(UI_HINT) 2

set PROFILE_3(SHORT_OFF_TIME_FACTOR) {31 range 0 - 31}
set PROFILE_3(SHORT_OFF_TIME_MODE) 0
set PROFILE_3(SHORT_OFFDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_3(SHORT_OFDELAY_TIME_FACTOR) {0 range 0 - 31}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Typo in parameter name SHORT_OFDELAY_TIME_FACTOR

The parameter SHORT_OFDELAY_TIME_FACTOR appears to be misspelled in both PROFILE_3 and PROFILE_4. The correct parameter name should be SHORT_OFFDELAY_TIME_FACTOR.

Apply the following diff to correct the typo:

At line 136:

-set PROFILE_3(SHORT_OFDELAY_TIME_FACTOR) {0 range 0 - 31}
+set PROFILE_3(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}

At line 182:

-set PROFILE_4(SHORT_OFDELAY_TIME_FACTOR) {0 range 0 - 31}
+set PROFILE_4(SHORT_OFFDELAY_TIME_FACTOR) {0 range 0 - 31}

Also applies to: 182-182

Comment on lines +90 to +91
set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Duplicate assignments of SHORT_ONDELAY_TIME_BASE and SHORT_ONDELAY_TIME_FACTOR in PROFILE_2

The parameters SHORT_ONDELAY_TIME_BASE and SHORT_ONDELAY_TIME_FACTOR are assigned twice in PROFILE_2 (lines 90-91 and 98-99). This duplication may lead to confusion or unintended behavior.

Confirm the intended values and remove the duplicate assignments if they are unnecessary. Example diff:

 set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
 set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}

-set PROFILE_2(SHORT_ONDELAY_TIME_BASE) {0 range 0 - 7}
-set PROFILE_2(SHORT_ONDELAY_TIME_FACTOR) {0 range 0 - 31}

Also applies to: 98-99

incr pref
append HTML_PARAMS(separate_$prn) "<tr><td>\${ON_MIN_LEVEL}</td><td>"
option DIM_LEVELwoLastValue
append HTML_PARAMS(separate_$prn) [get_ComboBox options SHORT_ON_MIN_LEVEL separate_${special_input_id}_$prn\_$pref PROFILE_$prn SHORT_ON_MIN_LEVEL "onchange=\"ActivateFreePercent4InternalKey(\$('${special_input_id}_profiles'),$pref);Disable_SimKey($ch, $prn, '${special_input_id}');\""]
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Undefined variable $ch used in append commands

The variable $ch is referenced within the append commands at lines 326 and 415, but it is not defined within the scope of the set_htmlParams procedure. This could result in a runtime error due to the undefined variable.

Define $ch before using it or replace it with the correct variable. If $ch should represent the channel number and is intended to be $channel, update the code accordingly. Example fix:

At lines 326 and 415:

..."onchange=\"ActivateFreePercent4InternalKey(\$('${special_input_id}_profiles'),$pref);Disable_SimKey($ch, $prn, '${special_input_id}');\""]
+..."onchange=\"ActivateFreePercent4InternalKey(\$('${special_input_id}_profiles'),$pref);Disable_SimKey($channel, $prn, '${special_input_id}');\""]

Also applies to: 415-415

array set subset [array get SUBSET_$i]
set name ""
catch {set name $subset(NAME)}
array_clear subset
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Use of undefined command array_clear

At line 280, the command array_clear is used to clear the subset array. In Tcl, the standard command to unset or clear an array is array unset.

Replace array_clear with array unset to correctly clear the array:

-array_clear subset
+array unset subset
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
array_clear subset
array unset subset

Comment on lines +285 to +286
puts "<script type=\"text/javascript\">getLangInfo('$dev_descr_sender(TYPE)', '$dev_descr_receiver(TYPE)');</script>"
puts "<script type=\"text/javascript\">getLangInfo_Special('HmIP_DEVICES.txt');</script>"
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Potential security risk with unsanitized variable interpolation in HTML output

The variables $dev_descr_sender(TYPE) and $dev_descr_receiver(TYPE) are directly interpolated into HTML output without sanitization at lines 285 and 286. This could lead to security vulnerabilities such as Cross-Site Scripting (XSS) if the variables contain malicious content.

Ensure that the variables are properly sanitized before embedding them into HTML. Use the appropriate Tcl methods to escape special characters. Example:

-puts "<script type=\"text/javascript\">getLangInfo('$dev_descr_sender(TYPE)', '$dev_descr_receiver(TYPE)');</script>"
+set sender_type [html_escape $dev_descr_sender(TYPE)]
+set receiver_type [html_escape $dev_descr_receiver(TYPE)]
+puts "<script type=\"text/javascript\">getLangInfo('$sender_type', '$receiver_type');</script>"

Where html_escape is a procedure that escapes HTML special characters.

Committable suggestion skipped: line range outside the PR's diff.

@jens-maus jens-maus added 🐛 bug-report Something isn't working 🏷️ WebUI This refs the WebUI component labels Nov 3, 2024
@jens-maus jens-maus added this to the next release milestone Nov 3, 2024
@jens-maus jens-maus linked an issue Nov 3, 2024 that may be closed by this pull request
@jens-maus jens-maus merged commit 30a8ca9 into jens-maus:master Nov 3, 2024
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug-report Something isn't working 🏷️ WebUI This refs the WebUI component
Projects
None yet
Development

Successfully merging this pull request may close these issues.

DV von HmIPW-SPI mit HmIPW-DRD3 unter 3.79 geht nicht
2 participants