diff --git a/epl-map.yml b/epl-map.yml new file mode 100644 index 00000000..5951bda7 --- /dev/null +++ b/epl-map.yml @@ -0,0 +1,304 @@ +#Card based on athua's code (https://github.com/athua/ha-utils) and https://docs.screek.io/2a/add-a-map-card with some custom modifications It requires Plotly Graph Card from HACS. +#This assumes you havent change entity names. Line 45, 47 and 50 needs to change to match your sensor_id. + +type: custom:plotly-graph +title: $ex "Living Room Map" +refresh_interval: 1 +hours_to_show: current_day +config: + modeBarButtonsToRemove: + - select2d + - lasso2d + - toImage + displaylogo: false +layout: + height: 240 + margin: + l: 40 + r: 20 + t: 20 + b: 55 + showlegend: false + xaxis: + showticklabels: false + dtick: 1000 + gridcolor: RGBA(200,200,200,0.15) + zerolinecolor: RGBA(200,200,200,0.15) + type: number + fixedrange: true + range: + - -4000 + - 4000 + yaxis: + showticklabels: false + dtick: 1000 + gridcolor: RGBA(200,200,200,0.15) + zerolinecolor: RGBA(200,200,200,0.15) + scaleanchor: x + scaleratio: 1 + fixedrange: true + range: + - 7500 + - 0 +entities: + - entity: '' + sensor_suffix: $ex vars.sensor_id = "2fbc58"; + sensor_prefix: >- + $ex vars.sensor_name_prefix = "sensor.everything_presence_lite_" + + vars.sensor_id + "_"; + number_prefix: >- + $ex vars.number_name_prefix = "number.everything_presence_lite_" + + vars.sensor_id + "_"; + units: >- + $ex vars.is_inch_unit = hass.states[vars.sensor_name_prefix + + "target_1_x"].attributes.unit_of_measurement == false; + - entity: '' + name: Target1 + marker: + size: 10 + symbol: star-diamond + line: + shape: spline + width: 5 + x: + - >- + $ex { var x = hass.states[vars.sensor_name_prefix + "target_1_x"].state; + var y = hass.states[vars.sensor_name_prefix + "target_1_y"].state; if (x + == 0 && y == 0) { return -9999 }; if (vars.is_inch_unit) { x = x * 25.4 + }; return x; } + 'y': + - >- + $ex { var x = hass.states[vars.sensor_name_prefix + "target_1_x"].state; + var y = hass.states[vars.sensor_name_prefix + "target_1_y"].state; if (x + == 0 && y == 0) { return -9999 }; if (vars.is_inch_unit) { y = y * 25.4 + }; return y; } + - entity: '' + name: Target2 + marker: + size: 10 + symbol: star-diamond + line: + shape: spline + width: 5 + x: + - >- + $ex { var x = hass.states[vars.sensor_name_prefix + "target_2_x"].state; + var y = hass.states[vars.sensor_name_prefix + "target_2_y"].state; if (x + == 0 && y == 0) { return -9999 }; if (vars.is_inch_unit) { x = x * 25.4 + }; return x; } + 'y': + - >- + $ex { var x = hass.states[vars.sensor_name_prefix + "target_2_x"].state; + var y = hass.states[vars.sensor_name_prefix + "target_2_y"].state; if (x + == 0 && y == 0) { return -9999 }; if (vars.is_inch_unit) { y = y * 25.4 + }; return y; } + - entity: '' + name: Target3 + marker: + size: 10 + symbol: star-diamond + line: + shape: spline + width: 5 + x: + - >- + $ex { var x = hass.states[vars.sensor_name_prefix + "target_3_x"].state; + var y = hass.states[vars.sensor_name_prefix + "target_3_y"].state; if (x + == 0 && y == 0) { return -9999 }; if (vars.is_inch_unit) { x = x * 25.4 + }; return x; } + 'y': + - >- + $ex { var x = hass.states[vars.sensor_name_prefix + "target_3_x"].state; + var y = hass.states[vars.sensor_name_prefix + "target_3_y"].state; if (x + == 0 && y == 0) { return -9999 }; if (vars.is_inch_unit) { y = y * 25.4 + }; return y; } + - entity: '' + name: Zone1 + mode: lines + fill: toself + fillcolor: RGBA(20,200,0,0.06) + line: + color: RGBA(20,200,0,0.2) + shape: line + width: 2 + x: + - $ex hass.states[vars.number_name_prefix + "zone_1_begin_x"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_begin_x"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_end_x"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_end_x"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_begin_x"].state + 'y': + - $ex hass.states[vars.number_name_prefix + "zone_1_begin_y"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_end_y"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_end_y"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_begin_y"].state + - $ex hass.states[vars.number_name_prefix + "zone_1_begin_y"].state + - entity: '' + name: Zone2 + mode: lines + fill: toself + fillcolor: RGBA(200,0,255,0.06) + line: + color: RGBA(200,0,255,0.2) + shape: line + width: 2 + x: + - >- + $ex { var zone2_begin_x = hass.states[vars.number_name_prefix + "zone_2_begin_x"]; + return zone2_begin_x ? zone2_begin_x.state : -9999; } + - >- + $ex { var zone2_begin_x = hass.states[vars.number_name_prefix + "zone_2_begin_x"]; + return zone2_begin_x ? zone2_begin_x.state : -9999; } + - >- + $ex { var zone2_end_x = hass.states[vars.number_name_prefix + "zone_2_end_x"]; + return zone2_end_x ? zone2_end_x.state : -9999; } + - >- + $ex { var zone2_end_x = hass.states[vars.number_name_prefix + "zone_2_end_x"]; + return zone2_end_x ? zone2_end_x.state : -9999; } + - >- + $ex { var zone2_begin_x = hass.states[vars.number_name_prefix + "zone_2_begin_x"]; + return zone2_begin_x ? zone2_begin_x.state : -9999; } + 'y': + - >- + $ex { var zone2_begin_y = hass.states[vars.number_name_prefix + "zone_2_begin_y"]; + return zone2_begin_y ? zone2_begin_y.state : -9999; } + - >- + $ex { var zone2_end_y = hass.states[vars.number_name_prefix + "zone_2_end_y"]; + return zone2_end_y ? zone2_end_y.state : -9999; } + - >- + $ex { var zone2_end_y = hass.states[vars.number_name_prefix + "zone_2_end_y"]; + return zone2_end_y ? zone2_end_y.state : -9999; } + - >- + $ex { var zone2_begin_y = hass.states[vars.number_name_prefix + "zone_2_begin_y"]; + return zone2_begin_y ? zone2_begin_y.state : -9999; } + - >- + $ex { var zone2_begin_y = hass.states[vars.number_name_prefix + "zone_2_begin_y"]; + return zone2_begin_y ? zone2_begin_y.state : -9999; } + - entity: '' + name: Zone3 + mode: lines + fill: toself + fillcolor: RGBA(200,120,55,0.06) + line: + color: RGBA(200,120,55,0.2) + shape: line + width: 2 + x: + - >- + $ex { var zone3_begin_x = hass.states[vars.number_name_prefix + "zone_3_begin_x"]; + return zone3_begin_x ? zone3_begin_x.state : -9999; } + - >- + $ex { var zone3_begin_x = hass.states[vars.number_name_prefix + "zone_3_begin_x"]; + return zone3_begin_x ? zone3_begin_x.state : -9999; } + - >- + $ex { var zone3_end_x = hass.states[vars.number_name_prefix + "zone_3_end_x"]; + return zone3_end_x ? zone3_end_x.state : -9999; } + - >- + $ex { var zone3_end_x = hass.states[vars.number_name_prefix + "zone_3_end_x"]; + return zone3_end_x ? zone3_end_x.state : -9999; } + - >- + $ex { var zone3_begin_x = hass.states[vars.number_name_prefix + "zone_3_begin_x"]; + return zone3_begin_x ? zone3_begin_x.state : -9999; } + 'y': + - >- + $ex { var zone3_begin_y = hass.states[vars.number_name_prefix + "zone_3_begin_y"]; + return zone3_begin_y ? zone3_begin_y.state : -9999; } + - >- + $ex { var zone3_end_y = hass.states[vars.number_name_prefix + "zone_3_end_y"]; + return zone3_end_y ? zone3_end_y.state : -9999; } + - >- + $ex { var zone3_end_y = hass.states[vars.number_name_prefix + "zone_3_end_y"]; + return zone3_end_y ? zone3_end_y.state : -9999; } + - >- + $ex { var zone3_begin_y = hass.states[vars.number_name_prefix + "zone_3_begin_y"]; + return zone3_begin_y ? zone3_begin_y.state : -9999; } + - >- + $ex { var zone3_begin_y = hass.states[vars.number_name_prefix + "zone_3_begin_y"]; + return zone3_begin_y ? zone3_begin_y.state : -9999; } + - entity: '' + name: Zone4 + mode: lines + fill: toself + fillcolor: RGBA(255,0,0,0.15) + line: + shape: line + width: 1 + color: RGBA(255,0,0,0.2) + x: + - >- + $ex { var zone4_begin_x = hass.states[vars.number_name_prefix + "zone_4_begin_x"]; + return zone4_begin_x ? zone4_begin_x.state : -9999; } + - >- + $ex { var zone4_begin_x = hass.states[vars.number_name_prefix + "zone_4_begin_x"]; + return zone4_begin_x ? zone4_begin_x.state : -9999; } + - >- + $ex { var zone4_end_x = hass.states[vars.number_name_prefix + "zone_4_end_x"]; + return zone4_end_x ? zone4_end_x.state : -9999; } + - >- + $ex { var zone4_end_x = hass.states[vars.number_name_prefix + "zone_4_end_x"]; + return zone4_end_x ? zone4_end_x.state : -9999; } + - >- + $ex { var zone4_begin_x = hass.states[vars.number_name_prefix + "zone_4_begin_x"]; + return zone4_begin_x ? zone4_begin_x.state : -9999; } + 'y': + - >- + $ex { var zone4_begin_y = hass.states[vars.number_name_prefix + "zone_4_begin_y"]; + return zone4_begin_y ? zone4_begin_y.state : -9999; } + - >- + $ex { var zone4_end_y = hass.states[vars.number_name_prefix + "zone_4_end_y"]; + return zone4_end_y ? zone4_end_y.state : -9999; } + - >- + $ex { var zone4_end_y = hass.states[vars.number_name_prefix + "zone_4_end_y"]; + return zone4_end_y ? zone4_end_y.state : -9999; } + - >- + $ex { var zone4_begin_y = hass.states[vars.number_name_prefix + "zone_4_begin_y"]; + return zone4_begin_y ? zone4_begin_y.state : -9999; } + - >- + $ex { var zone4_begin_y = hass.states[vars.number_name_prefix + "zone_4_begin_y"]; + return zone4_begin_y ? zone4_begin_y.state : -9999; } + - entity: '' + name: Coverage + mode: lines + fill: tonexty + fillcolor: rgba(168, 216, 234, 0.15) + line: + shape: line + width: 1 + dash: dot + x: + - 0 + - $ex 7500 * Math.sin((2 * Math.PI)/360 * 60) + - 5500 + - 4500 + - 4000 + - 3000 + - 2000 + - 1000 + - 0 + - -1000 + - -2000 + - -3000 + - -4000 + - -4500 + - -5500 + - $ex -7500 * Math.sin((2 * Math.PI)/360 * 60) + - 0 + 'y': + - 0 + - $ex 7500 * Math.cos((2 * Math.PI)/360 * 60) + - $ex Math.sqrt( 7500**2 - 5500**2 ) + - $ex Math.sqrt( 7500**2 - 4500**2 ) + - $ex Math.sqrt( 7500**2 - 4000**2 ) + - $ex Math.sqrt( 7500**2 - 3000**2 ) + - $ex Math.sqrt( 7500**2 - 2000**2 ) + - $ex Math.sqrt( 7500**2 - 1000**2 ) + - 7500 + - $ex Math.sqrt( 7500**2 - 1000**2 ) + - $ex Math.sqrt( 7500**2 - 2000**2 ) + - $ex Math.sqrt( 7500**2 - 3000**2 ) + - $ex Math.sqrt( 7500**2 - 4000**2 ) + - $ex Math.sqrt( 7500**2 - 4500**2 ) + - $ex Math.sqrt( 7500**2 - 5500**2 ) + - $ex 7500 * Math.cos((2 * Math.PI)/360 * 60) + - 0 +raw_plotly_config: true