Skip to content

Instantly share code, notes, and snippets.

@oquno
Created March 28, 2026 05:52
Show Gist options
  • Select an option

  • Save oquno/f67ed48e7833a352afdd91fb1ac20969 to your computer and use it in GitHub Desktop.

Select an option

Save oquno/f67ed48e7833a352afdd91fb1ac20969 to your computer and use it in GitHub Desktop.
LD2450 を ESPHome 使って Home Assistant 連携させたのをLovelaceダッシュボードで可視化するサンプル (表示例 https://gyazo.com/4fc38623cb5080a1b6d160479be8bd32)
type: grid
cards:
- type: heading
heading_style: title
- type: custom:plotly-graph
title: 2階
raw_plotly_config: true
refresh_interval: 1
layout:
height: 500
showlegend: true
margin:
l: 50
r: 20
t: 20
b: 40
xaxis:
type: linear
fixedrange: true
range:
- -3000
- 3000
yaxis:
type: linear
fixedrange: true
range:
- 6000
- 0
entities:
- entity: ""
type: scatter
name: Target1
mode: markers
marker:
size: 12
x: |
$fn ({ hass }) => {
const v = parseFloat(hass.states["sensor.ld2450_1_target_1_x"]?.state);
return Number.isFinite(v) ? [v] : [];
}
"y": |
$fn ({ hass }) => {
const v = parseFloat(hass.states["sensor.ld2450_1_target_1_y"]?.state);
return Number.isFinite(v) ? [v] : [];
}
- entity: ""
type: scatter
name: Target2
mode: markers
marker:
size: 12
x: |
$fn ({ hass }) => {
const v = parseFloat(hass.states["sensor.ld2450_1_target_2_x"]?.state);
return Number.isFinite(v) ? [v] : [];
}
"y": |
$fn ({ hass }) => {
const v = parseFloat(hass.states["sensor.ld2450_1_target_2_y"]?.state);
return Number.isFinite(v) ? [v] : [];
}
- entity: ""
type: scatter
name: Target3
mode: markers
marker:
size: 12
x: |
$fn ({ hass }) => {
const v = parseFloat(hass.states["sensor.ld2450_1_target_3_x"]?.state);
return Number.isFinite(v) ? [v] : [];
}
"y": |
$fn ({ hass }) => {
const v = parseFloat(hass.states["sensor.ld2450_1_target_3_y"]?.state);
return Number.isFinite(v) ? [v] : [];
}
- entity: ""
type: scatter
name: 机
mode: lines
line:
width: 2
color: rgba(0, 160, 255, 0.8)
fill: toself
fillcolor: rgba(0, 160, 255, 0.15)
x: |
$fn ({ hass }) => {
const x1 = parseFloat(hass.states["number.ld2450_1_zone_1_x1"]?.state);
const x2 = parseFloat(hass.states["number.ld2450_1_zone_1_x2"]?.state);
return Number.isFinite(x1) && Number.isFinite(x2) ? [x1, x1, x2, x2, x1] : [];
}
"y": |
$fn ({ hass }) => {
const y1 = parseFloat(hass.states["number.ld2450_1_zone_1_y1"]?.state);
const y2 = parseFloat(hass.states["number.ld2450_1_zone_1_y2"]?.state);
return Number.isFinite(y1) && Number.isFinite(y2) ? [y1, y2, y2, y1, y1] : [];
}
- entity: ""
type: scatter
name: ホットカーペット
mode: lines
line:
width: 2
color: rgba(0, 200, 120, 0.8)
fill: toself
fillcolor: rgba(0, 200, 120, 0.15)
x: |
$fn ({ hass }) => {
const x1 = parseFloat(hass.states["number.ld2450_1_zone_2_x1"]?.state);
const x2 = parseFloat(hass.states["number.ld2450_1_zone_2_x2"]?.state);
return Number.isFinite(x1) && Number.isFinite(x2) ? [x1, x1, x2, x2, x1] : [];
}
"y": |
$fn ({ hass }) => {
const y1 = parseFloat(hass.states["number.ld2450_1_zone_2_y1"]?.state);
const y2 = parseFloat(hass.states["number.ld2450_1_zone_2_y2"]?.state);
return Number.isFinite(y1) && Number.isFinite(y2) ? [y1, y2, y2, y1, y1] : [];
}
- entity: ""
type: scatter
name: 出入口
mode: lines
line:
width: 2
color: rgba(255, 170, 0, 0.8)
fill: toself
fillcolor: rgba(255, 170, 0, 0.15)
x: |
$fn ({ hass }) => {
const x1 = parseFloat(hass.states["number.ld2450_1_zone_3_x1"]?.state);
const x2 = parseFloat(hass.states["number.ld2450_1_zone_3_x2"]?.state);
return Number.isFinite(x1) && Number.isFinite(x2) ? [x1, x1, x2, x2, x1] : [];
}
"y": |
$fn ({ hass }) => {
const y1 = parseFloat(hass.states["number.ld2450_1_zone_3_y1"]?.state);
const y2 = parseFloat(hass.states["number.ld2450_1_zone_3_y2"]?.state);
return Number.isFinite(y1) && Number.isFinite(y2) ? [y1, y2, y2, y1, y1] : [];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment