|
streamline_templates: |
|
############## |
|
### LD2410 ### |
|
############## |
|
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: |
|
################### |
|
# Common Funcions # |
|
################### |
|
- $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; |
|
}; |
|
} |
|
################################## |
|
# Radar Engineering Mode Message # |
|
################################## |
|
- $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 # Used 100.3 to avoid the top grid line being cut off. |
|
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_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 |
|
# mm|cm|m|in|ft|yd |
|
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" |
|
# ha_theme: false |
|
refresh_interval: 1 |
|
raw_plotly_config: true |
|
init: |
|
################### |
|
# Common Funcions # |
|
################### |
|
- $ex { |
|
vars.is_valid_uom = (uom) => { |
|
return uom === 'mm' || |
|
uom === 'cm' || |
|
uom === 'm' || |
|
uom === 'in' || |
|
uom === 'ft' || |
|
uom === 'yd'; |
|
}; |
|
|
|
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.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.convert_to_chart_uom = (from_uom, value) => { |
|
let chart_uom_entity = '[[chart_unit_of_measurement_entity]]'; |
|
let input_entity = 'input_entity'; |
|
|
|
vars.chart_uom = '[[chart_unit_of_measurement]]'; |
|
|
|
if (vars.chart_uom === input_entity) { |
|
vars.chart_uom = vars.get_entity_uom(chart_uom_entity, 'cm'); |
|
} |
|
|
|
if (from_uom === vars.chart_uom) return value; |
|
|
|
// Convert each from_uom to the chart_uom (chart_unit_of_measurement) |
|
// mm, cm, m, in, ft, yd |
|
|
|
if (from_uom == 'mm' && vars.chart_uom == 'cm') return value / 10; |
|
if (from_uom == 'mm' && vars.chart_uom == 'm') return value / 1000; |
|
if (from_uom == 'mm' && vars.chart_uom == 'in') return value / 25.4; |
|
if (from_uom == 'mm' && vars.chart_uom == 'ft') return value / 304.8; |
|
if (from_uom == 'mm' && vars.chart_uom == 'yd') return value / 914.4; |
|
|
|
if (from_uom == 'cm' && vars.chart_uom == 'mm') return value * 10; |
|
if (from_uom == 'cm' && vars.chart_uom == 'm') return value / 100; |
|
if (from_uom == 'cm' && vars.chart_uom == 'in') return value / 2.54; |
|
if (from_uom == 'cm' && vars.chart_uom == 'ft') return value / 30.48; |
|
if (from_uom == 'cm' && vars.chart_uom == 'yd') return value / 91.44; |
|
|
|
if (from_uom == 'm' && vars.chart_uom == 'mm') return value * 1000; |
|
if (from_uom == 'm' && vars.chart_uom == 'cm') return value * 100; |
|
if (from_uom == 'm' && vars.chart_uom == 'in') return value * 39.3701; |
|
if (from_uom == 'm' && vars.chart_uom == 'ft') return value * 3.28084; |
|
if (from_uom == 'm' && vars.chart_uom == 'yd') return value * 1.09361; |
|
|
|
if (from_uom == 'in' && vars.chart_uom == 'mm') return value * 25.4; |
|
if (from_uom == 'in' && vars.chart_uom == 'cm') return value * 2.54; |
|
if (from_uom == 'in' && vars.chart_uom == 'm') return value / 39.3701; |
|
if (from_uom == 'in' && vars.chart_uom == 'ft') return value / 12; |
|
if (from_uom == 'in' && vars.chart_uom == 'yd') return value / 36; |
|
|
|
if (from_uom == 'ft' && vars.chart_uom == 'mm') return value * 304.8; |
|
if (from_uom == 'ft' && vars.chart_uom == 'cm') return value * 30.48; |
|
if (from_uom == 'ft' && vars.chart_uom == 'm') return value / 3.28084; |
|
if (from_uom == 'ft' && vars.chart_uom == 'in') return value * 12; |
|
if (from_uom == 'ft' && vars.chart_uom == 'yd') return value / 3; |
|
|
|
if (from_uom == 'yd' && vars.chart_uom == 'mm') return value * 914.4; |
|
if (from_uom == 'yd' && vars.chart_uom == 'cm') return value * 91.44; |
|
if (from_uom == 'yd' && vars.chart_uom == 'm') return value / 1.09361; |
|
if (from_uom == 'yd' && vars.chart_uom == 'in') return value * 36; |
|
if (from_uom == 'yd' && vars.chart_uom == 'ft') return value * 3; |
|
|
|
return value; |
|
}; |
|
|
|
vars.get_occupied_symbol = (entity_state) =>{ |
|
if (entity_state === 'on') { |
|
return "circle"; |
|
} else { |
|
return "circle-open"; |
|
} |
|
} |
|
|
|
} |
|
#################### |
|
# Input Validation # |
|
#################### |
|
- $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); |
|
} |
|
} |
|
#################### |
|
# Common Variables # |
|
#################### |
|
- $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]]'); |
|
} |
|
################## |
|
# Max Gates Bars # |
|
################## |
|
- $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; |
|
} |
|
############## |
|
# Gates Bars # |
|
############## |
|
- $ex { |
|
} |
|
################# |
|
# Distance Bars # |
|
################# |
|
- $ex { |
|
let radar_still_distance_uom = vars.get_entity_uom('sensor.[[device_base_name]]_radar_still_distance'); |
|
let radar_moving_distance_uom = vars.get_entity_uom('sensor.[[device_base_name]]_radar_moving_distance'); |
|
let radar_detection_distance_uom = vars.get_entity_uom('sensor.[[device_base_name]]_radar_detection_distance'); |
|
|
|
vars.radar_still_distance = vars.convert_to_chart_uom(radar_still_distance_uom, vars.get_entity_state('sensor.[[device_base_name]]_radar_still_distance')); |
|
vars.radar_moving_distance = vars.convert_to_chart_uom(radar_moving_distance_uom, vars.get_entity_state('sensor.[[device_base_name]]_radar_moving_distance')); |
|
vars.radar_detection_distance = vars.convert_to_chart_uom(radar_detection_distance_uom, vars.get_entity_state('sensor.[[device_base_name]]_radar_detection_distance')); |
|
} |
|
############# |
|
# Zone Bars # |
|
############# |
|
- $ex { |
|
let radar_zone_1_start_uom = vars.get_entity_uom('number.[[device_base_name]]_radar_zone_1_start'); |
|
let radar_end_zone_1_uom = vars.get_entity_uom('number.[[device_base_name]]_radar_end_zone_1'); |
|
let radar_end_zone_2_uom = vars.get_entity_uom('number.[[device_base_name]]_radar_end_zone_2'); |
|
let radar_end_zone_3_uom = vars.get_entity_uom('number.[[device_base_name]]_radar_end_zone_3'); |
|
|
|
vars.start_zone_1 = vars.convert_to_chart_uom(radar_zone_1_start_uom, vars.get_entity_state('number.[[device_base_name]]_radar_zone_1_start')); |
|
vars.end_zone_1 = vars.convert_to_chart_uom(radar_end_zone_1_uom, vars.get_entity_state('number.[[device_base_name]]_radar_end_zone_1')); |
|
vars.end_zone_2 = vars.convert_to_chart_uom(radar_end_zone_2_uom, vars.get_entity_state('number.[[device_base_name]]_radar_end_zone_2')); |
|
vars.end_zone_3 = vars.convert_to_chart_uom(radar_end_zone_3_uom, vars.get_entity_state('number.[[device_base_name]]_radar_end_zone_3')); |
|
} |
|
################# |
|
# Zone Occupied # |
|
################# |
|
- $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); |
|
} |
|
################ |
|
# Radar Target # |
|
################ |
|
- $ex { |
|
vars.radar_target_size = vars.gate_size * (8/3) * 0.75; |
|
vars.radar_target_spacer_size = vars.gate_size / 2; |
|
vars.radar_target_marker_offset = vars.radar_target_size * 0.13; |
|
|
|
let radar_target_state = vars.get_entity_state('binary_sensor.[[device_base_name]]_radar_target'); |
|
vars.radar_target_occupied_symbol = vars.get_occupied_symbol(radar_target_state); |
|
|
|
let radar_moving_target_state = vars.get_entity_state('binary_sensor.[[device_base_name]]_radar_moving_target'); |
|
vars.radar_target_moving_occupied_symbol = vars.get_occupied_symbol(radar_moving_target_state); |
|
|
|
let radar_still_target_state = vars.get_entity_state('binary_sensor.[[device_base_name]]_radar_still_target'); |
|
vars.radar_target_still_occupied_symbol = vars.get_occupied_symbol(radar_still_target_state); |
|
} |
|
########## |
|
# Layout # |
|
########## |
|
- $ex { |
|
vars.bar_size = parseInt('[[bar_size]]'); |
|
|
|
vars.layout_margin_t = 15; |
|
vars.layout_margin_b = 65; |
|
vars.layout_height = vars.layout_margin_t + vars.layout_margin_b; |
|
|
|
if (vars.show_zones) vars.layout_height += vars.bar_size * 2; |
|
if (vars.show_distance) vars.layout_height += (vars.bar_size * 3); |
|
if (vars.show_gates) vars.layout_height += vars.bar_size; |
|
if (vars.show_max_gates) vars.layout_height += (vars.bar_size * 2); |
|
} |
|
defaults: |
|
entity: |
|
type: bar |
|
showlegend: false |
|
orientation: h |
|
insidetextanchor: "middle" |
|
entities: |
|
################## |
|
# Max Gates Bars # |
|
################## |
|
- 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 |
|
############# |
|
# Gate Bars # |
|
############# |
|
- entity: "" |
|
visible: $ex vars.show_gates |
|
marker: |
|
# Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd |
|
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 |
|
- Gates |
|
################# |
|
# Distance Bars # |
|
################# |
|
- 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.radar_still_distance |
|
- $ex vars.radar_moving_distance |
|
- $ex vars.radar_detection_distance |
|
"y": |
|
- Still |
|
- Moving |
|
- Detection |
|
############# |
|
# Zone Bars # |
|
############# |
|
- 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 |
|
################## |
|
# Zone Occupancy # |
|
################## |
|
- 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 |
|
######################### |
|
# Radar Target Detected # |
|
######################### |
|
- entity: "" |
|
visible: $ex vars.show_radar_targets |
|
text: |
|
- "" |
|
- "Target" |
|
- "" |
|
- "Moving Target" |
|
- "" |
|
- "Still Target" |
|
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": |
|
- Radar |
|
- Radar |
|
- Radar |
|
- Radar |
|
- Radar |
|
- Radar |
|
- 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": |
|
- Radar |
|
- Radar |
|
- Radar |
|
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 |
|
yaxis: |
|
tickangle: -30 |
|
showgrid: false |
|
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; |
|
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 |
|
|
|
ld2410_gate_energy_configuration: |
|
default: |
|
device_title: LD2410 |
|
card: |
|
type: entities |
|
title: "[[device_title]] Gate Config" |
|
entities: |
|
- entity: switch.[[device_base_name]]_radar_engineering_mode |
|
name: Radar Engineering Mode |
|
- entity: button.[[device_base_name]]_restart_radar |
|
name: Restart Radar |
|
- entity: number.[[device_base_name]]_radar_timeout |
|
name: Radar Timeout |
|
- entity: number.[[device_base_name]]_radar_max_move_distance |
|
name: Radar Max Move Distance |
|
- entity: number.[[device_base_name]]_radar_max_still_distance |
|
name: Radar Max Still Distance |
|
- 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: binary_sensor.[[device_base_name]]_radar_target |
|
name: Radar 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 |
|
- 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 |