Apollo MSR-2 Tuning Dashboard

TLDR: Does anyone know how to add multiple presence detectors to the MSR-2 Tuning Dashboard?

I created a “Presence Detection” dashboard on my HA instance and was able to add one MSR-2 device to it via the Apollo configurator…

I have 10 MSR-2 devices so I’d like to add the other 9 devices to my “Presence Detection” dashboard but I have not been able to figure out how to do that. I could create 10 different dashboards, but that would be kind of ridiculous… I’m hoping to avoid that. Any helpl would be appreciated.

OK I was able to figure out how to get different views for each radar sensor on the same dashboard! Only the top section of code is for the named sensors, the bottom part is for the layout. In the example below sensor YYYYYY is in the Master Bedroom and sensor XXXXXX is in the Kitchen. When viewed on the iPad and Android Home Assistant applications the dashboard has 2 tabs, with one sensor on each tab.

Here’s the upper code specific to each sensor…

  - type: sections
    max_columns: 4
    title:  Master Bedroom 
    path: Master Bedroom 
    sections:
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_controls
            variables:
              device_base_name: apollo_msr_2_YYYYYYY
          - type: custom:streamline-card
            template: ld2410_zone_configuration
            variables:
              device_base_name: apollo_msr_2_YYYYYY
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_distances_chart
            variables:
              device_base_name: apollo_msr_2_YYYYYY
              chart_unit_of_measurement: in
          - type: custom:streamline-card
            template: ld2410_occupancy_history
            variables:
              device_base_name: apollo_msr_2_YYYYYY
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_gate_energy_chart
            variables:
              device_title: Gate Energy Chart
              device_base_name: apollo_msr_2_YYYYYY
          - type: custom:streamline-card
            template: ld2410_zone_occupancy
            variables:
              device_base_name: apollo_msr_2_YYYYYY
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_gate_energy_configuration
            variables:
              device_base_name: apollo_msr_2_YYYYYY

  - type: sections
    max_columns: 4
    title: KITCHEN
    path: KITCHEN
    sections:
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_controls
            variables:
              device_base_name: apollo_msr_2_XXXXX
          - type: custom:streamline-card
            template: ld2410_zone_configuration
            variables:
              device_base_name: apollo_msr_2_XXXXX
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_distances_chart
            variables:
              device_base_name: apollo_msr_2_XXXXX
              chart_unit_of_measurement: in
          - type: custom:streamline-card
            template: ld2410_occupancy_history
            variables:
              device_base_name: apollo_msr_2_XXXXX
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_gate_energy_chart
            variables:
              device_title: Gate Energy Chart
              device_base_name: apollo_msr_2_XXXXX
          - type: custom:streamline-card
            template: ld2410_zone_occupancy
            variables:
              device_base_name: apollo_msr_2_XXXXX
      - type: grid
        cards:
          - type: custom:streamline-card
            template: ld2410_gate_energy_configuration
            variables:
              device_base_name: apollo_msr_2_XXXXX

Then below that the common code that provides the layout of the dashboard.

streamline_templates:
  ld2410_controls:
    default:
      device_title: LD2410  Controls
    card:
      type: entities
      title: '[[device_title]]'
      entities:
        - entity: switch.[[device_base_name]]_radar_engineering_mode
          name: Radar Engineering Mode
        - entity: switch.[[device_base_name]]_ld2410_bluetooth
          name: LD2410 Bluetooth
        - entity: button.[[device_base_name]]_restart_radar
          name: Restart Radar
        - entity: button.[[device_base_name]]_factory_reset_radar
          name: Factory Reset Radar
        - entity: button.[[device_base_name]]_esp_reboot
          name: ESP Reboot
  ld2410_distances_chart:
    default:
      device_title: LD2410
      move_bar_color: '#4b0082'
      still_bar_color: '#274e13'
      detection_bar_color: '#8b0000'
      show_radar_targets: true
      show_zones: true
      show_distance: true
      show_gates: true
      show_max_gates: true
      bar_size: 35
      chart_unit_of_measurement: input_entity
      chart_unit_of_measurement_entity: input_select.ld2410_distances_chart_unit_of_measurement
    card:
      type: custom:plotly-graph
      title: '[[device_title]] Distances'
      refresh_interval: 1
      raw_plotly_config: true
      init:
        - >-
          $ex { vars.is_valid_uom = (uom) => { return uom === 'mm' || uom ===
          'cm' || uom === 'm' || uom === 'in' || uom === 'ft' || uom === 'yd';
          };

          vars.get_entity_uom = (entity, default_uom) => { let entity_obj =
          hass.states[entity];

          if (entity_obj === undefined) { if (default_uom === undefined) { throw
          new TypeError("UOM entity not found -> " + entity); }

          return default_uom; }

          var uom = undefined;

          if (entity_obj.attributes !== undefined &&
          entity_obj.attributes.unit_of_measurement !== undefined) { uom =
          entity_obj.attributes.unit_of_measurement; } else { uom =
          entity_obj.state; }

          if (uom === undefined || !vars.is_valid_uom(uom)) { if (default_uom
          === undefined) { throw new TypeError("Entity UOM is invalid -> " +
          entity + " === " + uom); }

          return default_uom; }

          return uom; };

          vars.conversionTable = [ ['mm_cm', 0.1], ['mm_m', 0.001], ['mm_in',
          1/25.4], ['mm_ft', 1/304.8], ['mm_yd', 1/914.4], ['cm_mm', 10],
          ['cm_m', 0.01], ['cm_in', 1/2.54], ['cm_ft', 1/30.48], ['cm_yd',
          1/91.44], ['m_mm', 1000], ['m_cm', 100], ['m_in', 39.3701], ['m_ft',
          3.28084], ['m_yd', 1.09361], ['in_mm', 25.4], ['in_cm', 2.54],
          ['in_m', 1/39.3701], ['in_ft', 1/12], ['in_yd', 1/36], ['ft_mm',
          304.8], ['ft_cm', 30.48], ['ft_m', 1/3.28084], ['ft_in', 12], ['ft_yd',
          1/3], ['yd_mm', 914.4], ['yd_cm', 91.44], ['yd_m', 1/1.09361], ['yd_in',
          36], ['yd_ft', 3] ];

          vars.chart_uom = '[[chart_unit_of_measurement]]';

          if (vars.chart_uom === 'input_entity') { let chart_uom_entity =
          '[[chart_unit_of_measurement_entity]]'; vars.chart_uom =
          vars.get_entity_uom(chart_uom_entity, 'cm'); }

          if (!vars.is_valid_uom(vars.chart_uom)) { vars.chart_uom = "cm"; }

          vars.convert_to_chart_uom = (from_uom, value) => { if (from_uom ===
          vars.chart_uom) return value;

          let key = from_uom + '_' + vars.chart_uom; for (let i = 0; i <
          vars.conversionTable.length; i++) { if (vars.conversionTable[i][0] ===
          key) { return value * vars.conversionTable[i][1]; } }

          return value; };

          vars.get_entity_state = (entity, default_state) => { let entity_obj =
          hass.states[entity];

          if (entity_obj === undefined) { if (default_state === undefined) {
          throw new TypeError("Entity not found -> " + entity); }

          return default_state; }

          var state = entity_obj.state;

          if (state === undefined || state === null) { if (default_state ===
          undefined) { throw new TypeError("Entity state is undefined or null ->
          " + entity); }

          return default_state; }

          return state; };

          vars.entity_to_chart_uom_value = (entity_name) => { return
          vars.convert_to_chart_uom(vars.get_entity_uom(entity_name),
          vars.get_entity_state(entity_name, 0)); };

          vars.get_occupied_symbol = (entity_state) =>{ if (entity_state ===
          'on') { return "circle"; } else { return "circle-open"; } }; }
        - >-
          $ex { let chart_uom = '[[chart_unit_of_measurement]]';

          if (chart_uom !== 'input_entity' && !vars.is_valid_uom(chart_uom)) {
          throw new TypeError("Invalid chart_unit_of_measurement [valid -
          mm|cm|m|in|ft|yd], " + chart_uom); } }
        - >-
          $ex { let gate_size_str =
          vars.get_entity_state('select.[[device_base_name]]_ld2410_gate_size',
          '0.75m'); vars.gate_size = vars.convert_to_chart_uom('m',
          parseFloat(gate_size_str.replace(/[^0-9.]/g, '')));
          vars.max_detection_range = vars.gate_size * 8;

          vars.marker_symbol_size = 10;

          vars.show_radar_targets = Boolean('[[show_radar_targets]]');
          vars.show_zones = Boolean('[[show_zones]]'); vars.show_distance =
          Boolean('[[show_distance]]'); vars.show_gates =
          Boolean('[[show_gates]]'); vars.show_max_gates =
          Boolean('[[show_max_gates]]'); }
        - >-
          $ex { vars.radar_max_still_gate =
          vars.get_entity_state('number.[[device_base_name]]_radar_max_still_distance');
          vars.radar_max_still_distance = vars.radar_max_still_gate *
          vars.gate_size;

          vars.radar_max_move_gate =
          vars.get_entity_state('number.[[device_base_name]]_radar_max_move_distance');
          vars.radar_max_move_distance = vars.radar_max_move_gate *
          vars.gate_size; }
        - >-
          $ex { vars.start_zone_1 =
          vars.entity_to_chart_uom_value('number.[[device_base_name]]_radar_zone_1_start');
          vars.end_zone_1 =
          vars.entity_to_chart_uom_value('number.[[device_base_name]]_radar_end_zone_1');
          vars.end_zone_2 =
          vars.entity_to_chart_uom_value('number.[[device_base_name]]_radar_end_zone_2');
          vars.end_zone_3 =
          vars.entity_to_chart_uom_value('number.[[device_base_name]]_radar_end_zone_3');
          }
        - >-
          $ex { vars.zone_marker_symbol_offset = vars.gate_size * 0.22;

          let zone_1_occupied_state =
          vars.get_entity_state('binary_sensor.[[device_base_name]]_radar_zone_1_occupancy');
          vars.zone_1_occupied = vars.show_zones && zone_1_occupied_state ===
          'on'; vars.zone_1_occupied_symbol =
          vars.get_occupied_symbol(zone_1_occupied_state);

          let zone_2_occupied_state =
          vars.get_entity_state('binary_sensor.[[device_base_name]]_radar_zone_2_occupancy');
          vars.zone_2_occupied = vars.show_zones && zone_2_occupied_state ===
          'on'; vars.zone_2_occupied_symbol =
          vars.get_occupied_symbol(zone_2_occupied_state);

          let zone_3_occupied_state =
          vars.get_entity_state('binary_sensor.[[device_base_name]]_radar_zone_3_occupancy');
          vars.zone_3_occupied = vars.show_zones && zone_3_occupied_state ===
          'on'; vars.zone_3_occupied_symbol =
          vars.get_occupied_symbol(zone_3_occupied_state); }
      defaults:
        entity:
          type: bar
          showlegend: false
          orientation: h
          insidetextanchor: middle
      entities:
        - entity: ''
          visible: $ex vars.show_max_gates
          texttemplate:
            - $ex 'G' + ~~vars.radar_max_still_gate
            - $ex 'G' + ~~vars.radar_max_move_gate
          marker:
            color:
              - '[[still_bar_color]]'
              - '[[move_bar_color]]'
          x:
            - $ex vars.radar_max_still_distance;
            - $ex vars.radar_max_move_distance;
          'y':
            - Max Still
            - Max Move
        - entity: ''
          visible: $ex vars.show_gates
          marker:
            colorscale: Portland
            color:
              - 0
              - 1
              - 2
              - 3
              - 4
              - 5
              - 6
              - 7
          texttemplate:
            - G1
            - G2
            - G3
            - G4
            - G5
            - G6
            - G7
            - G8
          x:
            - $ex vars.gate_size
            - $ex vars.gate_size
            - $ex vars.gate_size
            - $ex vars.gate_size
            - $ex vars.gate_size
            - $ex vars.gate_size
            - $ex vars.gate_size
            - $ex vars.gate_size
          'y':
            - Gates
            - Gates
            - Gates
            - Gates
            - Gates
            - Gates
            - Gates
            - Gates
        - entity: ''
          visible: $ex vars.show_distance
          texttemplate: $ex '%{x:.2f} ' + vars.chart_uom
          marker:
            color:
              - '[[still_bar_color]]'
              - '[[move_bar_color]]'
              - '[[detection_bar_color]]'
          x:
            - >-
              $ex
              vars.entity_to_chart_uom_value('sensor.[[device_base_name]]_radar_still_distance');
            - >-
              $ex
              vars.entity_to_chart_uom_value('sensor.[[device_base_name]]_radar_moving_distance');
            - >-
              $ex
              vars.entity_to_chart_uom_value('sensor.[[device_base_name]]_radar_detection_distance');
          'y':
            - Still
            - Moving
            - Detection
        - entity: ''
          visible: $ex vars.show_zones
          marker:
            color:
              - '#00000000'
              - red
              - blue
              - green
          texttemplate:
            - ''
            - Zone 1
            - Zone 2
            - Zone 3
          x:
            - $ex vars.start_zone_1;
            - $ex (vars.end_zone_1 - vars.start_zone_1);
            - $ex (vars.end_zone_2 - vars.end_zone_1);
            - $ex (vars.end_zone_3 - vars.end_zone_2);
          'y':
            - Zones
            - Zones
            - Zones
            - Zones
        - entity: ''
          visible: $ex vars.show_zones
          type: scatter
          mode: markers
          marker:
            color: '#FFFFFFFF'
            symbol:
              - $ex vars.zone_1_occupied_symbol
              - $ex vars.zone_2_occupied_symbol
              - $ex vars.zone_3_occupied_symbol
            size: $ex vars.marker_symbol_size
          x:
            - $ex (vars.end_zone_1 - vars.zone_marker_symbol_offset);
            - $ex (vars.end_zone_2 - vars.zone_marker_symbol_offset);
            - $ex (vars.end_zone_3 - vars.zone_marker_symbol_offset);
          'y':
            - Zones
            - Zones
            - Zones
        - entity: ''
          visible: $ex vars.show_radar_targets
          text:
            - ''
            - Detected
            - ''
            - Moving
            - ''
            - Still
          insidetextanchor: start
          marker:
            color:
              - '#00000000'
              - '#000000E6'
              - '#00000000'
              - '#000000E6'
              - '#00000000'
              - '#000000E6'
          x:
            - $ex vars.radar_target_spacer_size
            - $ex vars.radar_target_size
            - $ex vars.radar_target_spacer_size
            - $ex vars.radar_target_size
            - $ex vars.radar_target_spacer_size
            - $ex vars.radar_target_size
          'y':
            - Target
            - Target
            - Target
            - Target
            - Target
            - Target
        - entity: ''
          visible: $ex vars.show_radar_targets
          type: scatter
          mode: markers
          marker:
            color: '#FFFFFFFF'
            symbol:
              - $ex vars.radar_target_occupied_symbol
              - $ex vars.radar_target_moving_occupied_symbol
              - $ex vars.radar_target_still_occupied_symbol
            size: $ex vars.marker_symbol_size
          x:
            - >-
              $ex (vars.radar_target_spacer_size + vars.radar_target_size -
              vars.radar_target_marker_offset);
            - >-
              $ex (vars.radar_target_spacer_size * 2 + vars.radar_target_size *
              2 - vars.radar_target_marker_offset);
            - >-
              $ex (vars.radar_target_spacer_size * 3 + vars.radar_target_size *
              3 - vars.radar_target_marker_offset);
          'y':
            - Target
            - Target
            - Target
      layout:
        height: $ex vars.layout_height
        dragmode: false
        hovermode: false
        barmode: relative
        margin:
          t: $ex vars.layout_margin_t;
          l: 60
          r: 30
          b: $ex vars.layout_margin_b
        xaxis:
          dtick: $ex (vars.max_detection_range / 8);
          ticksuffix: $ex ' ' + vars.chart_uom
          tickangle: 60
          fixedrange: true
          range:
            - 0
            - $ex vars.max_detection_range * 1.003;
        yaxis:
          tickangle: -30
          showgrid: false
      config:
        displayModeBar: false
        disablePinchToZoom: true
  ld2410_gate_energy_chart:
    default:
      device_title: LD2410
      move_bar_color: '#4b0082'
      move_threshold_color: '#9467bd'
      still_bar_color: '#274e13'
      still_threshold_color: '#8cb640'
    card:
      type: custom:plotly-graph
      title: '[[device_title]] Gate Energy'
      refresh_interval: 1
      raw_plotly_config: true
      init:
        - >-
          $ex { vars.get_entity_state = (entity, default_state) => { let
          entity_obj = hass.states[entity];

          if (entity_obj === undefined) { if (default_state === undefined) {
          throw new TypeError("Entity not found -> " + entity); }

          return default_state; }

          var state = entity_obj.state;

          if (state === undefined || state === null || state === 'unknown') { if
          (default_state === undefined) { throw new TypeError("Entity state is
          undefined or null -> " + entity); }

          return default_state; }

          return state; }; }
        - >-
          $ex { let radar_engineering_mode =
          vars.get_entity_state('switch.[[device_base_name]]_radar_engineering_mode');
          vars.show_radar_engineering_mode_on = radar_engineering_mode === 'on';
          }
      defaults:
        entity:
          texttemplate: '%{y}'
          x:
            - G0
            - G1
            - G2
            - G3
            - G4
            - G5
            - G6
            - G7
            - G8
      entities:
        - entity: ''
          name: Move Energy
          legendgroup: Move
          type: bar
          marker:
            color: '[[move_bar_color]]'
          'y':
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g0_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g1_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g2_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g3_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g4_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g5_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g6_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g7_move_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g8_move_energy',
              0)
        - entity: ''
          name: Move Threshold
          legendgroup: Move
          visible: $ex vars.show_radar_engineering_mode_on
          type: scatter
          mode: markers
          marker:
            symbol: arrow-right
            size: 15
            color: '[[move_threshold_color]]'
          'y':
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g0_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g1_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g2_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g3_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g4_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g5_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g6_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g7_move_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g8_move_threshold')
        - entity: ''
          name: Still Energy
          legendgroup: Still
          type: bar
          marker:
            color: '[[still_bar_color]]'
          'y':
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g0_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g1_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g2_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g3_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g4_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g5_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g6_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g7_still_energy',
              0)
            - >-
              $ex
              vars.get_entity_state('sensor.[[device_base_name]]_g8_still_energy',
              0)
        - entity: ''
          name: Still Threshold
          legendgroup: Still
          visible: $ex vars.show_radar_engineering_mode_on
          type: scatter
          mode: markers
          marker:
            symbol: arrow-left
            size: 15
            color: '[[still_threshold_color]]'
          'y':
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g0_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g1_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g2_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g3_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g4_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g5_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g6_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g7_still_threshold')
            - >-
              $ex
              vars.get_entity_state('number.[[device_base_name]]_g8_still_threshold')
      layout:
        barmode: group
        dragmode: false
        hovermode: false
        legend:
          itemsizing: constant
          orientation: h
        margin:
          t: 15
          l: 30
          r: 10
        xaxis:
          showgrid: false
          tickfont:
            size: 20
        yaxis:
          dtick: 10
          fixedrange: true
          range:
            - 0
            - 100.3
        annotations:
          - text: Turn on "Radar Engineering Mode"<br>to see the gate energy values.
            visible: $ex !vars.show_radar_engineering_mode_on
            showarrow: false
            x: G4
            'y': 50
            font:
              size: 20
              color: '#FFFFFF'
            borderpad: 16
            bgcolor: '#000000BB'
      config:
        displayModeBar: false
        disablePinchToZoom: true
  ld2410_occupancy_history:
    default:
      device_title: LD2410
      hours_to_show: 1
    card:
      type: history-graph
      title: '[[device_title]] Occupancy History'
      hours_to_show: '[[hours_to_show]]'
      entities:
        - entity: binary_sensor.[[device_base_name]]_radar_target
          name: Detected
        - entity: binary_sensor.[[device_base_name]]_radar_zone_1_occupancy
          name: Zone 1
        - entity: binary_sensor.[[device_base_name]]_radar_zone_2_occupancy
          name: Zone 2
        - entity: binary_sensor.[[device_base_name]]_radar_zone_3_occupancy
          name: Zone 3
        - entity: number.[[device_base_name]]_g0_move_threshold
          name: G0 move threshold
        - entity: number.[[device_base_name]]_g0_still_threshold
          name: G0 still threshold
        - entity: number.[[device_base_name]]_g1_move_threshold
          name: G1 move threshold
        - entity: number.[[device_base_name]]_g1_still_threshold
          name: G1 still threshold
        - entity: number.[[device_base_name]]_g2_move_threshold
          name: G2 move threshold
        - entity: number.[[device_base_name]]_g2_still_threshold
          name: G2 still threshold
        - entity: number.[[device_base_name]]_g3_move_threshold
          name: G3 move threshold
        - entity: number.[[device_base_name]]_g3_still_threshold
          name: G3 still threshold
        - entity: number.[[device_base_name]]_g4_move_threshold
          name: G4 move threshold
        - entity: number.[[device_base_name]]_g4_still_threshold
          name: G4 still threshold
        - entity: number.[[device_base_name]]_g5_move_threshold
          name: G5 move threshold
        - entity: number.[[device_base_name]]_g5_still_threshold
          name: G5 still threshold
        - entity: number.[[device_base_name]]_g6_move_threshold
          name: G6 move threshold
        - entity: number.[[device_base_name]]_g6_still_threshold
          name: G6 still threshold
        - entity: number.[[device_base_name]]_g7_move_threshold
          name: G7 move threshold
        - entity: number.[[device_base_name]]_g7_still_threshold
          name: G7 still threshold
        - entity: number.[[device_base_name]]_g8_move_threshold
          name: G8 move threshold
        - entity: number.[[device_base_name]]_g8_still_threshold
          name: G8 still threshold
  ld2410_zone_configuration:
    default:
      device_title: LD2410
    card:
      type: entities
      title: '[[device_title]] Zone Config'
      entities:
        - entity: number.[[device_base_name]]_radar_timeout
          name: Radar Timeout
        - entity: number.[[device_base_name]]_radar_zone_1_start
          name: Start Zone 1
        - entity: number.[[device_base_name]]_radar_end_zone_1
          name: End Zone 1
        - entity: number.[[device_base_name]]_radar_end_zone_2
          name: End Zone 2
        - entity: number.[[device_base_name]]_radar_end_zone_3
          name: End Zone 3
  ld2410_zone_occupancy:
    default:
      device_title: LD2410
    card:
      type: entities
      title: '[[device_title]] Target / Occupancy'
      entities:
        - entity: binary_sensor.[[device_base_name]]_radar_target
          name: Radar Target
        - entity: binary_sensor.[[device_base_name]]_radar_moving_target
          name: Radar Moving Target
        - entity: binary_sensor.[[device_base_name]]_radar_still_target
          name: Radar Still Target
        - entity: binary_sensor.[[device_base_name]]_radar_zone_1_occupancy
          name: Radar Zone 1 Occupancy
        - entity: binary_sensor.[[device_base_name]]_radar_zone_2_occupancy
          name: Radar Zone 2 Occupancy
        - entity: binary_sensor.[[device_base_name]]_radar_zone_3_occupancy
          name: Radar Zone 3 Occupancy
  ld2410_gate_energy_configuration:
    default:
      device_title: LD2410
    card:
      type: entities
      title: '[[device_title]] Gate Config'
      entities:
        - entity: number.[[device_base_name]]_radar_max_move_distance
          name: Max Move Gate
        - entity: number.[[device_base_name]]_radar_max_still_distance
          name: Max Still Gate
        - entity: number.[[device_base_name]]_g0_move_threshold
          name: G0 move threshold
        - entity: number.[[device_base_name]]_g0_still_threshold
          name: G0 still threshold
        - entity: number.[[device_base_name]]_g1_move_threshold
          name: G1 move threshold
        - entity: number.[[device_base_name]]_g1_still_threshold
          name: G1 still threshold
        - entity: number.[[device_base_name]]_g2_move_threshold
          name: G2 move threshold
        - entity: number.[[device_base_name]]_g2_still_threshold
          name: G2 still threshold
        - entity: number.[[device_base_name]]_g3_move_threshold
          name: G3 move threshold
        - entity: number.[[device_base_name]]_g3_still_threshold
          name: G3 still threshold
        - entity: number.[[device_base_name]]_g4_move_threshold
          name: G4 move threshold
        - entity: number.[[device_base_name]]_g4_still_threshold
          name: G4 still threshold
        - entity: number.[[device_base_name]]_g5_move_threshold
          name: G5 move threshold
        - entity: number.[[device_base_name]]_g5_still_threshold
          name: G5 still threshold
        - entity: number.[[device_base_name]]_g6_move_threshold
          name: G6 move threshold
        - entity: number.[[device_base_name]]_g6_still_threshold
          name: G6 still threshold
        - entity: number.[[device_base_name]]_g7_move_threshold
          name: G7 move threshold
        - entity: number.[[device_base_name]]_g7_still_threshold
          name: G7 still threshold
        - entity: number.[[device_base_name]]_g8_move_threshold
          name: G8 move threshold
        - entity: number.[[device_base_name]]_g8_still_threshold
          name: G8 still threshold