Compare commits
No commits in common. "main" and "2023.06" have entirely different histories.
|
|
@ -1,181 +0,0 @@
|
|||
esphome:
|
||||
name: humen-sensor-1m
|
||||
comment: Human Sensor 1M
|
||||
friendly_name: Human Sensor 1M
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
project:
|
||||
name: Screek.Human_Sensor
|
||||
version: 1M
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_1w
|
||||
ref: main
|
||||
components: [uart, ld2410]
|
||||
|
||||
esp32:
|
||||
board: lolin_c3_mini
|
||||
framework:
|
||||
type: arduino
|
||||
version: 2.0.9
|
||||
platform_version: 6.3.2
|
||||
|
||||
logger:
|
||||
hardware_uart: uart0
|
||||
|
||||
api:
|
||||
|
||||
ota:
|
||||
password: "YOUR_OTA_PASSWORD"
|
||||
|
||||
wifi:
|
||||
# ssid: !secret wifi_ssid
|
||||
# password: !secret wifi_password
|
||||
# fast_connect: True
|
||||
|
||||
power_save_mode: LIGHT
|
||||
# output_power: 20dB
|
||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR 1M"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: ld2410
|
||||
has_target:
|
||||
name: Presence
|
||||
has_moving_target:
|
||||
name: Moving Target
|
||||
has_still_target:
|
||||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 30s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 10s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 1s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
- platform: ld2410
|
||||
moving_distance:
|
||||
name : Moving Distance
|
||||
id: moving_distance
|
||||
still_distance:
|
||||
name: Still Distance
|
||||
id: still_distance
|
||||
moving_energy:
|
||||
name: Move Energy
|
||||
still_energy:
|
||||
name: Still Energy
|
||||
detection_distance:
|
||||
name: Detection Distance
|
||||
light:
|
||||
name: Sun Light
|
||||
|
||||
light:
|
||||
- platform: status_led
|
||||
name: sys_status
|
||||
pin:
|
||||
number: GPIO8
|
||||
inverted: True
|
||||
internal: True
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: time_now
|
||||
servers:
|
||||
- ntp.aliyun.com
|
||||
|
||||
uart:
|
||||
id: uart_ld2410
|
||||
tx_pin: GPIO4
|
||||
rx_pin: GPIO3
|
||||
baud_rate: 256000
|
||||
parity: NONE
|
||||
stop_bits: 1
|
||||
|
||||
ld2410:
|
||||
timeout: 150s
|
||||
id: ld2410_radar
|
||||
# max_move_distance : 6m
|
||||
# max_still_distance: 0.75m
|
||||
# g0_move_threshold: 10
|
||||
# g0_still_threshold: 20
|
||||
# g1_move_threshold: 10
|
||||
# g1_still_threshold: 20
|
||||
# g2_move_threshold: 20
|
||||
# g2_still_threshold: 21
|
||||
# g3_move_threshold: 30
|
||||
# g3_still_threshold: 31
|
||||
# g4_move_threshold: 40
|
||||
# g4_still_threshold: 41
|
||||
# g5_move_threshold: 50
|
||||
# g5_still_threshold: 51
|
||||
# g6_move_threshold: 60
|
||||
# g6_still_threshold: 61
|
||||
# g7_move_threshold: 70
|
||||
# g7_still_threshold: 71
|
||||
# g8_move_threshold: 80
|
||||
# g8_still_threshold: 81
|
||||
|
||||
button:
|
||||
- platform: template
|
||||
name: "Enable LD2410 BLE"
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2410_radar) -> ble_control(true);
|
||||
- platform: template
|
||||
name: "Disable LD2410 BLE"
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth-off
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2410_radar) -> ble_control(false);
|
||||
- platform: template
|
||||
name: "LD2410 Reboot"
|
||||
icon: mdi:radar
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
lambda: |-
|
||||
// auto* radar = LD2410Component::get(ld2410);
|
||||
// radar -> roboot();
|
||||
id(ld2410_radar) -> reboot();
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
- platform: factory_reset
|
||||
disabled_by_default: True
|
||||
name: Factory Reset
|
||||
id: factory_reset_all
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
# This is a custom firmware for Human Presence Sensor 1U
|
||||
# https://screek.io/1u
|
||||
# https://screek.tech
|
||||
|
||||
esphome:
|
||||
name: screek-humen-sensor-1u
|
||||
|
|
@ -9,10 +9,22 @@ esphome:
|
|||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
board_build.f_cpu: 80000000L
|
||||
on_boot:
|
||||
priority: 900
|
||||
then:
|
||||
lambda: |-
|
||||
// id(wake_up_reason) = esp_sleep_get_wakeup_cause();
|
||||
id(cpu_speed) = ESP.getCpuFreqMHz() ;
|
||||
project:
|
||||
name: Screek.Human_Presence_Sensor
|
||||
version: 1U
|
||||
min_version: 2025.5.1
|
||||
min_version: 2023.6.1
|
||||
|
||||
globals:
|
||||
- id: cpu_speed
|
||||
type: int
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
|
||||
external_components:
|
||||
# - source: github://screek-workshop/custom_components_support_for_screek_1u
|
||||
|
|
@ -20,12 +32,14 @@ external_components:
|
|||
type: git
|
||||
url: https://github.com/screek-workshop/custom_components_support_for_screek_1u
|
||||
ref: master
|
||||
components: [ ld2410 ]
|
||||
# components: [ ld2410, uart ]
|
||||
|
||||
esp32:
|
||||
board: lolin_s2_mini
|
||||
framework:
|
||||
type: esp-idf
|
||||
type: arduino
|
||||
version: 2.0.9
|
||||
platform_version: 6.3.2
|
||||
|
||||
improv_serial:
|
||||
|
||||
|
|
@ -37,15 +51,17 @@ api:
|
|||
# key: "YOUR-API-PASSWORD"
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
# use your own ota password plz. this is a words by Socrates.
|
||||
# This won't work for the original firmware(we use diffrent ota password),
|
||||
# so if you want to turn it into your own OTA,
|
||||
# make sure to completely flash your custom yaml in the firmware once.
|
||||
# after that, you may always ota with your own password.
|
||||
password: "all-things-in-their-being-are-good-for-something" # words by Socrates
|
||||
|
||||
# By automatically importing to the console,
|
||||
# subsequent adjustments can be easily made without having to manually fix a specific name.
|
||||
# dashboard_import:
|
||||
# package_import_url: github://screekworkshop/screek-human-sensor/1u/yaml/Screek-Humen-Dectet-1u.yaml@2023.06
|
||||
# import_full_config: False
|
||||
dashboard_import:
|
||||
package_import_url: github://screekworkshop/screek-human-sensor/1u/yaml/Screek-Humen-Dectet-1u.yaml@2023.06
|
||||
import_full_config: True
|
||||
|
||||
wifi:
|
||||
# power_save_mode: NONE
|
||||
|
|
@ -74,12 +90,29 @@ binary_sensor:
|
|||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: internal_temperature
|
||||
- platform: template
|
||||
name: "ESP Cpu Speed"
|
||||
accuracy_decimals: 0
|
||||
unit_of_measurement: Mhz
|
||||
lambda: |-
|
||||
return (id(cpu_speed));
|
||||
entity_category: "diagnostic"
|
||||
|
||||
# - platform: internal_temperature
|
||||
# id: sys_esp_temperature
|
||||
# name: ESP Temperature
|
||||
# unit_of_measurement: °C
|
||||
# device_class: TEMPERATURE
|
||||
# update_interval: 1s
|
||||
# entity_category: "diagnostic"
|
||||
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 45s
|
||||
update_interval: 5s
|
||||
entity_category: "diagnostic"
|
||||
|
||||
- platform: uptime
|
||||
BIN
1w/case/bottom.stl
Normal file
BIN
1w/case/bottom.stl
Normal file
Binary file not shown.
BIN
1w/case/top.stl
Normal file
BIN
1w/case/top.stl
Normal file
Binary file not shown.
|
|
@ -1,20 +1,16 @@
|
|||
esphome:
|
||||
name: screek-humen-sensor-1w
|
||||
comment: Screek Human Sensor 1W
|
||||
friendly_name: Human Sensor 1W
|
||||
name: screek-humen-dectet-1w
|
||||
comment: Screek Human Presence Sensor 24GHz PS-HPS
|
||||
friendly_name: Screek Human Presence Sensor
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
project:
|
||||
name: Screek.Human_Sensor
|
||||
name: Screek.Human_Presence_Sensor
|
||||
version: 1W
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_1w
|
||||
ref: main
|
||||
components: [uart, ld2410]
|
||||
- source: screek-mod-components
|
||||
|
||||
esp32:
|
||||
board: esp32-c3-devkitm-1
|
||||
|
|
@ -103,7 +99,7 @@ time:
|
|||
- ntp.aliyun.com
|
||||
|
||||
uart:
|
||||
id: uart_ld2410
|
||||
id: uart1
|
||||
tx_pin: GPIO5
|
||||
rx_pin: GPIO4
|
||||
baud_rate: 256000
|
||||
158
1w/yaml/screek-mod-components/ld2410/__init__.py
Normal file
158
1w/yaml/screek-mod-components/ld2410/__init__.py
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome.components import uart
|
||||
from esphome.const import CONF_ID, CONF_TIMEOUT
|
||||
from esphome import automation
|
||||
from esphome.automation import maybe_simple_id
|
||||
|
||||
DEPENDENCIES = ["uart"]
|
||||
CODEOWNERS = ["@sebcaps"]
|
||||
MULTI_CONF = True
|
||||
|
||||
ld2410_ns = cg.esphome_ns.namespace("ld2410")
|
||||
LD2410Component = ld2410_ns.class_("LD2410Component", cg.Component, uart.UARTDevice)
|
||||
LD2410Restart = ld2410_ns.class_("LD2410Restart", automation.Action)
|
||||
CONF_LD2410_ID = "ld2410_id"
|
||||
CONF_MAX_MOVE_DISTANCE = "max_move_distance"
|
||||
CONF_MAX_STILL_DISTANCE = "max_still_distance"
|
||||
CONF_G0_MOVE_THRESHOLD = "g0_move_threshold"
|
||||
CONF_G0_STILL_THRESHOLD = "g0_still_threshold"
|
||||
CONF_G1_MOVE_THRESHOLD = "g1_move_threshold"
|
||||
CONF_G1_STILL_THRESHOLD = "g1_still_threshold"
|
||||
CONF_G2_MOVE_THRESHOLD = "g2_move_threshold"
|
||||
CONF_G2_STILL_THRESHOLD = "g2_still_threshold"
|
||||
CONF_G3_MOVE_THRESHOLD = "g3_move_threshold"
|
||||
CONF_G3_STILL_THRESHOLD = "g3_still_threshold"
|
||||
CONF_G4_MOVE_THRESHOLD = "g4_move_threshold"
|
||||
CONF_G4_STILL_THRESHOLD = "g4_still_threshold"
|
||||
CONF_G5_MOVE_THRESHOLD = "g5_move_threshold"
|
||||
CONF_G5_STILL_THRESHOLD = "g5_still_threshold"
|
||||
CONF_G6_MOVE_THRESHOLD = "g6_move_threshold"
|
||||
CONF_G6_STILL_THRESHOLD = "g6_still_threshold"
|
||||
CONF_G7_MOVE_THRESHOLD = "g7_move_threshold"
|
||||
CONF_G7_STILL_THRESHOLD = "g7_still_threshold"
|
||||
CONF_G8_MOVE_THRESHOLD = "g8_move_threshold"
|
||||
CONF_G8_STILL_THRESHOLD = "g8_still_threshold"
|
||||
|
||||
DISTANCES = [0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6]
|
||||
|
||||
CONFIG_SCHEMA = cv.All(
|
||||
cv.Schema(
|
||||
{
|
||||
cv.GenerateID(): cv.declare_id(LD2410Component),
|
||||
cv.Optional(CONF_MAX_MOVE_DISTANCE, default="4.5m"): cv.All(
|
||||
cv.distance, cv.one_of(*DISTANCES, float=True)
|
||||
),
|
||||
cv.Optional(CONF_MAX_STILL_DISTANCE, default="4.5m"): cv.All(
|
||||
cv.distance, cv.one_of(*DISTANCES, float=True)
|
||||
),
|
||||
cv.Optional(CONF_TIMEOUT, default="5s"): cv.All(
|
||||
cv.positive_time_period_seconds,
|
||||
cv.Range(max=cv.TimePeriod(seconds=32767)),
|
||||
),
|
||||
cv.Optional(CONF_G0_MOVE_THRESHOLD, default=50): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G0_STILL_THRESHOLD, default=0): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G1_MOVE_THRESHOLD, default=50): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G1_STILL_THRESHOLD, default=0): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G2_MOVE_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G2_STILL_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G3_MOVE_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G3_STILL_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G4_MOVE_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G4_STILL_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G5_MOVE_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G5_STILL_THRESHOLD, default=40): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G6_MOVE_THRESHOLD, default=30): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G6_STILL_THRESHOLD, default=15): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G7_MOVE_THRESHOLD, default=30): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G7_STILL_THRESHOLD, default=15): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G8_MOVE_THRESHOLD, default=30): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
cv.Optional(CONF_G8_STILL_THRESHOLD, default=15): cv.int_range(
|
||||
min=0, max=100
|
||||
),
|
||||
}
|
||||
)
|
||||
.extend(uart.UART_DEVICE_SCHEMA)
|
||||
.extend(cv.COMPONENT_SCHEMA)
|
||||
)
|
||||
|
||||
FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
|
||||
"ld2410",
|
||||
baud_rate=256000,
|
||||
require_tx=True,
|
||||
require_rx=True,
|
||||
parity="NONE",
|
||||
stop_bits=1,
|
||||
)
|
||||
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await uart.register_uart_device(var, config)
|
||||
cg.add(var.set_timeout(config[CONF_TIMEOUT]))
|
||||
cg.add(var.set_max_move_distance(int(config[CONF_MAX_MOVE_DISTANCE] / 0.75)))
|
||||
cg.add(var.set_max_still_distance(int(config[CONF_MAX_STILL_DISTANCE] / 0.75)))
|
||||
cg.add(
|
||||
var.set_range_config(
|
||||
config[CONF_G0_MOVE_THRESHOLD],
|
||||
config[CONF_G0_STILL_THRESHOLD],
|
||||
config[CONF_G1_MOVE_THRESHOLD],
|
||||
config[CONF_G1_STILL_THRESHOLD],
|
||||
config[CONF_G2_MOVE_THRESHOLD],
|
||||
config[CONF_G2_STILL_THRESHOLD],
|
||||
config[CONF_G3_MOVE_THRESHOLD],
|
||||
config[CONF_G3_STILL_THRESHOLD],
|
||||
config[CONF_G4_MOVE_THRESHOLD],
|
||||
config[CONF_G4_STILL_THRESHOLD],
|
||||
config[CONF_G5_MOVE_THRESHOLD],
|
||||
config[CONF_G5_STILL_THRESHOLD],
|
||||
config[CONF_G6_MOVE_THRESHOLD],
|
||||
config[CONF_G6_STILL_THRESHOLD],
|
||||
config[CONF_G7_MOVE_THRESHOLD],
|
||||
config[CONF_G7_STILL_THRESHOLD],
|
||||
config[CONF_G8_MOVE_THRESHOLD],
|
||||
config[CONF_G8_STILL_THRESHOLD],
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
CALIBRATION_ACTION_SCHEMA = maybe_simple_id(
|
||||
{
|
||||
cv.Required(CONF_ID): cv.use_id(LD2410Component),
|
||||
}
|
||||
)
|
||||
36
1w/yaml/screek-mod-components/ld2410/binary_sensor.py
Normal file
36
1w/yaml/screek-mod-components/ld2410/binary_sensor.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import esphome.codegen as cg
|
||||
from esphome.components import binary_sensor
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import DEVICE_CLASS_MOTION, DEVICE_CLASS_OCCUPANCY
|
||||
from . import CONF_LD2410_ID, LD2410Component
|
||||
|
||||
DEPENDENCIES = ["ld2410"]
|
||||
CONF_HAS_TARGET = "has_target"
|
||||
CONF_HAS_MOVING_TARGET = "has_moving_target"
|
||||
CONF_HAS_STILL_TARGET = "has_still_target"
|
||||
|
||||
CONFIG_SCHEMA = {
|
||||
cv.GenerateID(CONF_LD2410_ID): cv.use_id(LD2410Component),
|
||||
cv.Optional(CONF_HAS_TARGET): binary_sensor.binary_sensor_schema(
|
||||
device_class=DEVICE_CLASS_OCCUPANCY
|
||||
),
|
||||
cv.Optional(CONF_HAS_MOVING_TARGET): binary_sensor.binary_sensor_schema(
|
||||
device_class=DEVICE_CLASS_MOTION
|
||||
),
|
||||
cv.Optional(CONF_HAS_STILL_TARGET): binary_sensor.binary_sensor_schema(
|
||||
device_class=DEVICE_CLASS_OCCUPANCY
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
async def to_code(config):
|
||||
ld2410_component = await cg.get_variable(config[CONF_LD2410_ID])
|
||||
if CONF_HAS_TARGET in config:
|
||||
sens = await binary_sensor.new_binary_sensor(config[CONF_HAS_TARGET])
|
||||
cg.add(ld2410_component.set_target_sensor(sens))
|
||||
if CONF_HAS_MOVING_TARGET in config:
|
||||
sens = await binary_sensor.new_binary_sensor(config[CONF_HAS_MOVING_TARGET])
|
||||
cg.add(ld2410_component.set_moving_target_sensor(sens))
|
||||
if CONF_HAS_STILL_TARGET in config:
|
||||
sens = await binary_sensor.new_binary_sensor(config[CONF_HAS_STILL_TARGET])
|
||||
cg.add(ld2410_component.set_still_target_sensor(sens))
|
||||
416
1w/yaml/screek-mod-components/ld2410/ld2410.cpp
Normal file
416
1w/yaml/screek-mod-components/ld2410/ld2410.cpp
Normal file
|
|
@ -0,0 +1,416 @@
|
|||
#include "ld2410.h"
|
||||
|
||||
#define highbyte(val) (uint8_t)((val) >> 8)
|
||||
#define lowbyte(val) (uint8_t)((val) &0xff)
|
||||
|
||||
namespace esphome {
|
||||
namespace ld2410 {
|
||||
|
||||
static const char *const TAG = "ld2410";
|
||||
|
||||
void LD2410Component::dump_config() {
|
||||
ESP_LOGCONFIG(TAG, "LD2410:");
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
LOG_BINARY_SENSOR(" ", "HasTargetSensor", this->target_binary_sensor_);
|
||||
LOG_BINARY_SENSOR(" ", "MovingSensor", this->moving_binary_sensor_);
|
||||
LOG_BINARY_SENSOR(" ", "StillSensor", this->still_binary_sensor_);
|
||||
#endif
|
||||
#ifdef USE_SENSOR
|
||||
LOG_SENSOR(" ", "Moving Distance", this->moving_target_distance_sensor_);
|
||||
LOG_SENSOR(" ", "Still Distance", this->still_target_distance_sensor_);
|
||||
LOG_SENSOR(" ", "Moving Energy", this->moving_target_energy_sensor_);
|
||||
LOG_SENSOR(" ", "Still Energy", this->still_target_energy_sensor_);
|
||||
LOG_SENSOR(" ", "Detection Distance", this->detection_distance_sensor_);
|
||||
|
||||
LOG_SENSOR(" ", "Light", this->light_sensor_);
|
||||
#endif
|
||||
this->set_config_mode_(true);
|
||||
this->get_version_();
|
||||
this->set_config_mode_(false);
|
||||
ESP_LOGCONFIG(TAG, " Firmware Version : %u.%u.%u%u%u%u", this->version_[0], this->version_[1], this->version_[2],
|
||||
this->version_[3], this->version_[4], this->version_[5]);
|
||||
}
|
||||
|
||||
void LD2410Component::setup() {
|
||||
ESP_LOGCONFIG(TAG, "Setting up LD2410...");
|
||||
// ESP_LOGCONFIG(TAG, "Apply screek patch...");
|
||||
this->set_config_mode_(true);
|
||||
|
||||
/*
|
||||
this->set_max_distances_timeout_(this->max_move_distance_, this->max_still_distance_, this->timeout_);
|
||||
// Configure Gates sensitivity
|
||||
this->set_gate_threshold_(0, this->rg0_move_threshold_, this->rg0_still_threshold_);
|
||||
this->set_gate_threshold_(1, this->rg1_move_threshold_, this->rg1_still_threshold_);
|
||||
this->set_gate_threshold_(2, this->rg2_move_threshold_, this->rg2_still_threshold_);
|
||||
this->set_gate_threshold_(3, this->rg3_move_threshold_, this->rg3_still_threshold_);
|
||||
this->set_gate_threshold_(4, this->rg4_move_threshold_, this->rg4_still_threshold_);
|
||||
this->set_gate_threshold_(5, this->rg5_move_threshold_, this->rg5_still_threshold_);
|
||||
this->set_gate_threshold_(6, this->rg6_move_threshold_, this->rg6_still_threshold_);
|
||||
this->set_gate_threshold_(7, this->rg7_move_threshold_, this->rg7_still_threshold_);
|
||||
this->set_gate_threshold_(8, this->rg8_move_threshold_, this->rg8_still_threshold_);
|
||||
*/
|
||||
this->get_version_();
|
||||
this->set_config_mode_(false);
|
||||
|
||||
// this->factory_mode(true);
|
||||
|
||||
ESP_LOGCONFIG(TAG, "Firmware Version : %u.%u.%u%u%u%u", this->version_[0], this->version_[1], this->version_[2],
|
||||
this->version_[3], this->version_[4], this->version_[5]);
|
||||
ESP_LOGCONFIG(TAG, "LD2410 setup complete.");
|
||||
}
|
||||
|
||||
void LD2410Component::loop() {
|
||||
const int max_line_length = 80;
|
||||
static uint8_t buffer[max_line_length];
|
||||
|
||||
while (available()) {
|
||||
this->readline_(read(), buffer, max_line_length);
|
||||
}
|
||||
}
|
||||
|
||||
void LD2410Component::send_command_(uint8_t command, uint8_t *command_value, int command_value_len) {
|
||||
// lastCommandSuccess->publish_state(false);
|
||||
|
||||
// frame start bytes
|
||||
this->write_array(CMD_FRAME_HEADER, 4);
|
||||
// length bytes
|
||||
int len = 2;
|
||||
if (command_value != nullptr)
|
||||
len += command_value_len;
|
||||
this->write_byte(lowbyte(len));
|
||||
this->write_byte(highbyte(len));
|
||||
|
||||
// command
|
||||
this->write_byte(lowbyte(command));
|
||||
this->write_byte(highbyte(command));
|
||||
|
||||
// command value bytes
|
||||
if (command_value != nullptr) {
|
||||
for (int i = 0; i < command_value_len; i++) {
|
||||
this->write_byte(command_value[i]);
|
||||
}
|
||||
}
|
||||
// frame end bytes
|
||||
this->write_array(CMD_FRAME_END, 4);
|
||||
// FIXME to remove
|
||||
delay(50); // NOLINT
|
||||
}
|
||||
|
||||
long map(long x, long in_min, long in_max, long out_min, long out_max) {
|
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||
}
|
||||
|
||||
void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
||||
if (len < 12)
|
||||
return; // 4 frame start bytes + 2 length bytes + 1 data end byte + 1 crc byte + 4 frame end bytes
|
||||
if (buffer[0] != 0xF4 || buffer[1] != 0xF3 || buffer[2] != 0xF2 || buffer[3] != 0xF1) // check 4 frame start bytes
|
||||
return;
|
||||
if (buffer[7] != HEAD || buffer[len - 6] != END || buffer[len - 5] != CHECK) // Check constant values
|
||||
return; // data head=0xAA, data end=0x55, crc=0x00
|
||||
|
||||
/*
|
||||
Data Type: 6th
|
||||
0x01: Engineering mode
|
||||
0x02: Normal mode
|
||||
*/
|
||||
// char data_type = buffer[DATA_TYPES];
|
||||
/*
|
||||
Target states: 9th
|
||||
0x00 = No target
|
||||
0x01 = Moving targets
|
||||
0x02 = Still targets
|
||||
0x03 = Moving+Still targets
|
||||
*/
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
char target_state = buffer[TARGET_STATES];
|
||||
if (this->target_binary_sensor_ != nullptr) {
|
||||
this->target_binary_sensor_->publish_state(target_state != 0x00);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
Reduce data update rate to prevent home assistant database size grow fast
|
||||
*/
|
||||
int32_t current_millis = millis();
|
||||
if (current_millis - last_periodic_millis < 1000)
|
||||
return;
|
||||
last_periodic_millis = current_millis;
|
||||
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
if (this->moving_binary_sensor_ != nullptr) {
|
||||
this->moving_binary_sensor_->publish_state(CHECK_BIT(target_state, 0));
|
||||
}
|
||||
if (this->still_binary_sensor_ != nullptr) {
|
||||
this->still_binary_sensor_->publish_state(CHECK_BIT(target_state, 1));
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
Moving target distance: 10~11th bytes
|
||||
Moving target energy: 12th byte
|
||||
Still target distance: 13~14th bytes
|
||||
Still target energy: 15th byte
|
||||
Detect distance: 16~17th bytes
|
||||
*/
|
||||
#ifdef USE_SENSOR
|
||||
if (this->moving_target_distance_sensor_ != nullptr) {
|
||||
int new_moving_target_distance = this->two_byte_to_int_(buffer[MOVING_TARGET_LOW], buffer[MOVING_TARGET_HIGH]);
|
||||
if (this->moving_target_distance_sensor_->get_state() != new_moving_target_distance)
|
||||
this->moving_target_distance_sensor_->publish_state(new_moving_target_distance);
|
||||
}
|
||||
if (this->moving_target_energy_sensor_ != nullptr) {
|
||||
int new_moving_target_energy = buffer[MOVING_ENERGY];
|
||||
if (this->moving_target_energy_sensor_->get_state() != new_moving_target_energy)
|
||||
this->moving_target_energy_sensor_->publish_state(new_moving_target_energy);
|
||||
}
|
||||
if (this->still_target_distance_sensor_ != nullptr) {
|
||||
int new_still_target_distance = this->two_byte_to_int_(buffer[STILL_TARGET_LOW], buffer[STILL_TARGET_HIGH]);
|
||||
if (this->still_target_distance_sensor_->get_state() != new_still_target_distance)
|
||||
this->still_target_distance_sensor_->publish_state(new_still_target_distance);
|
||||
}
|
||||
if (this->still_target_energy_sensor_ != nullptr) {
|
||||
int new_still_target_energy = buffer[STILL_ENERGY];
|
||||
if (this->still_target_energy_sensor_->get_state() != new_still_target_energy)
|
||||
this->still_target_energy_sensor_->publish_state(new_still_target_energy);
|
||||
}
|
||||
if (this->detection_distance_sensor_ != nullptr) {
|
||||
int new_detect_distance = this->two_byte_to_int_(buffer[DETECT_DISTANCE_LOW], buffer[DETECT_DISTANCE_HIGH]);
|
||||
if (this->detection_distance_sensor_->get_state() != new_detect_distance)
|
||||
this->detection_distance_sensor_->publish_state(new_detect_distance);
|
||||
}
|
||||
|
||||
if (this->light_sensor_ != nullptr) {
|
||||
int data_type = buffer[6];
|
||||
int new_light = -1;
|
||||
if (data_type == 0x01){ // 0x01 = 工程模式!
|
||||
new_light = buffer[37];
|
||||
|
||||
new_light = map(new_light, 85, 255, 0, 100);
|
||||
if (new_light < 0){
|
||||
new_light = 0;
|
||||
}
|
||||
if (new_light > 100){
|
||||
new_light = 100;
|
||||
}
|
||||
|
||||
ESP_LOGD(TAG,"LD2410 Sun Light: %d%%", new_light);
|
||||
}else{
|
||||
int32_t now_millis = millis();
|
||||
|
||||
if (now_millis - last_change_fatory_mode_millis > 2000){
|
||||
ESP_LOGD(TAG,"Normal mode no light, change to factory mode");
|
||||
|
||||
this->factory_mode(true);
|
||||
last_change_fatory_mode_millis = now_millis;
|
||||
}
|
||||
}
|
||||
if (this->light_sensor_->get_state() != new_light){
|
||||
this->light_sensor_->publish_state(new_light);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void LD2410Component::handle_ack_data_(uint8_t *buffer, int len) {
|
||||
ESP_LOGV(TAG, "Handling ACK DATA for COMMAND");
|
||||
if (len < 10) {
|
||||
ESP_LOGE(TAG, "Error with last command : incorrect length");
|
||||
return;
|
||||
}
|
||||
if (buffer[0] != 0xFD || buffer[1] != 0xFC || buffer[2] != 0xFB || buffer[3] != 0xFA) { // check 4 frame start bytes
|
||||
ESP_LOGE(TAG, "Error with last command : incorrect Header");
|
||||
return;
|
||||
}
|
||||
if (buffer[COMMAND_STATUS] != 0x01) {
|
||||
ESP_LOGE(TAG, "Error with last command : status != 0x01");
|
||||
return;
|
||||
}
|
||||
if (this->two_byte_to_int_(buffer[8], buffer[9]) != 0x00) {
|
||||
ESP_LOGE(TAG, "Error with last command , last buffer was: %u , %u", buffer[8], buffer[9]);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (buffer[COMMAND]) {
|
||||
case lowbyte(CMD_ENABLE_CONF):
|
||||
ESP_LOGV(TAG, "Handled Enable conf command");
|
||||
break;
|
||||
case lowbyte(CMD_DISABLE_CONF):
|
||||
ESP_LOGV(TAG, "Handled Disabled conf command");
|
||||
break;
|
||||
case lowbyte(CMD_VERSION):
|
||||
ESP_LOGV(TAG, "FW Version is: %u.%u.%u%u%u%u", buffer[13], buffer[12], buffer[17], buffer[16], buffer[15],
|
||||
buffer[14]);
|
||||
this->version_[0] = buffer[13];
|
||||
this->version_[1] = buffer[12];
|
||||
this->version_[2] = buffer[17];
|
||||
this->version_[3] = buffer[16];
|
||||
this->version_[4] = buffer[15];
|
||||
this->version_[5] = buffer[14];
|
||||
|
||||
break;
|
||||
case lowbyte(CMD_GATE_SENS):
|
||||
ESP_LOGV(TAG, "Handled sensitivity command");
|
||||
break;
|
||||
case lowbyte(CMD_QUERY): // Query parameters response
|
||||
{
|
||||
if (buffer[10] != 0xAA)
|
||||
return; // value head=0xAA
|
||||
/*
|
||||
Moving distance range: 13th byte
|
||||
Still distance range: 14th byte
|
||||
*/
|
||||
// TODO
|
||||
// maxMovingDistanceRange->publish_state(buffer[12]);
|
||||
// maxStillDistanceRange->publish_state(buffer[13]);
|
||||
/*
|
||||
Moving Sensitivities: 15~23th bytes
|
||||
Still Sensitivities: 24~32th bytes
|
||||
*/
|
||||
for (int i = 0; i < 9; i++) {
|
||||
moving_sensitivities[i] = buffer[14 + i];
|
||||
}
|
||||
for (int i = 0; i < 9; i++) {
|
||||
still_sensitivities[i] = buffer[23 + i];
|
||||
}
|
||||
/*
|
||||
None Duration: 33~34th bytes
|
||||
*/
|
||||
// noneDuration->publish_state(this->two_byte_to_int_(buffer[32], buffer[33]));
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LD2410Component::readline_(int readch, uint8_t *buffer, int len) {
|
||||
static int pos = 0;
|
||||
|
||||
if (readch >= 0) {
|
||||
if (pos < len - 1) {
|
||||
buffer[pos++] = readch;
|
||||
buffer[pos] = 0;
|
||||
} else {
|
||||
pos = 0;
|
||||
}
|
||||
if (pos >= 4) {
|
||||
if (buffer[pos - 4] == 0xF8 && buffer[pos - 3] == 0xF7 && buffer[pos - 2] == 0xF6 && buffer[pos - 1] == 0xF5) {
|
||||
ESP_LOGV(TAG, "Will handle Periodic Data");
|
||||
this->handle_periodic_data_(buffer, pos);
|
||||
pos = 0; // Reset position index ready for next time
|
||||
} else if (buffer[pos - 4] == 0x04 && buffer[pos - 3] == 0x03 && buffer[pos - 2] == 0x02 &&
|
||||
buffer[pos - 1] == 0x01) {
|
||||
ESP_LOGV(TAG, "Will handle ACK Data");
|
||||
this->handle_ack_data_(buffer, pos);
|
||||
pos = 0; // Reset position index ready for next time
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LD2410Component::set_config_mode_(bool enable) {
|
||||
uint8_t cmd = enable ? CMD_ENABLE_CONF : CMD_DISABLE_CONF;
|
||||
uint8_t cmd_value[2] = {0x01, 0x00};
|
||||
this->send_command_(cmd, enable ? cmd_value : nullptr, 2);
|
||||
}
|
||||
|
||||
void LD2410Component::query_parameters_() { this->send_command_(CMD_QUERY, nullptr, 0); }
|
||||
void LD2410Component::get_version_() { this->send_command_(CMD_VERSION, nullptr, 0); }
|
||||
|
||||
void LD2410Component::set_max_distances_timeout_(uint8_t max_moving_distance_range, uint8_t max_still_distance_range,
|
||||
uint16_t timeout) {
|
||||
uint8_t value[18] = {0x00,
|
||||
0x00,
|
||||
lowbyte(max_moving_distance_range),
|
||||
highbyte(max_moving_distance_range),
|
||||
0x00,
|
||||
0x00,
|
||||
0x01,
|
||||
0x00,
|
||||
lowbyte(max_still_distance_range),
|
||||
highbyte(max_still_distance_range),
|
||||
0x00,
|
||||
0x00,
|
||||
0x02,
|
||||
0x00,
|
||||
lowbyte(timeout),
|
||||
highbyte(timeout),
|
||||
0x00,
|
||||
0x00};
|
||||
this->send_command_(CMD_MAXDIST_DURATION, value, 18);
|
||||
this->query_parameters_();
|
||||
}
|
||||
void LD2410Component::set_gate_threshold_(uint8_t gate, uint8_t motionsens, uint8_t stillsens) {
|
||||
// reference
|
||||
// https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-?spm=a2g0o.detail.1000023.17.93465697yFwVxH
|
||||
// Send data: configure the motion sensitivity of distance gate 3 to 40, and the static sensitivity of 40
|
||||
// 00 00 (gate)
|
||||
// 03 00 00 00 (gate number)
|
||||
// 01 00 (motion sensitivity)
|
||||
// 28 00 00 00 (value)
|
||||
// 02 00 (still sensitivtiy)
|
||||
// 28 00 00 00 (value)
|
||||
uint8_t value[18] = {0x00, 0x00, lowbyte(gate), highbyte(gate), 0x00, 0x00,
|
||||
0x01, 0x00, lowbyte(motionsens), highbyte(motionsens), 0x00, 0x00,
|
||||
0x02, 0x00, lowbyte(stillsens), highbyte(stillsens), 0x00, 0x00};
|
||||
this->send_command_(CMD_GATE_SENS, value, 18);
|
||||
}
|
||||
|
||||
void LD2410Component::factoryReset()
|
||||
{
|
||||
this->set_config_mode_(true);
|
||||
|
||||
uint8_t cmd = 0x00A2;
|
||||
this -> send_command_(cmd, nullptr, 0);
|
||||
}
|
||||
|
||||
void LD2410Component::reboot()
|
||||
{
|
||||
ESP_LOGD(TAG, "reboot ld2410b...");
|
||||
this->set_config_mode_(true);
|
||||
|
||||
uint8_t cmd = 0x00A3;
|
||||
this -> send_command_(cmd, nullptr, 0);
|
||||
// not need to exit config mode because the ld2410 will reboot automatically
|
||||
}
|
||||
|
||||
void LD2410Component::ble_control(bool enable)
|
||||
{
|
||||
this->set_config_mode_(true);
|
||||
uint8_t CMD_BLE_CONF = 0x00A4;
|
||||
uint8_t CMD_REBOOT = 0x00A3;
|
||||
|
||||
uint8_t cmd_value[2] = {0x00, 0x00};
|
||||
|
||||
if (enable){
|
||||
cmd_value[0] = 0x01;
|
||||
|
||||
ESP_LOGD(TAG, "Enable BLE...");
|
||||
}else{
|
||||
ESP_LOGD(TAG, "Disable BLE...");
|
||||
}
|
||||
|
||||
this -> send_command_(CMD_BLE_CONF, cmd_value, 2);
|
||||
|
||||
//this -> send_command_(CMD_REBOOT, nullptr, 0);
|
||||
|
||||
this->set_config_mode_(false);
|
||||
|
||||
this -> reboot();
|
||||
}
|
||||
|
||||
void LD2410Component::factory_mode(bool enable){
|
||||
uint8_t CMD_FACTORY_ON = 0x0062;
|
||||
uint8_t CMD_FACTORY_OFF = 0x0063;
|
||||
this->set_config_mode_(true);
|
||||
|
||||
uint8_t cmd = enable ? CMD_FACTORY_ON: CMD_FACTORY_OFF;
|
||||
|
||||
this->send_command_(cmd, nullptr, 0);
|
||||
|
||||
this->set_config_mode_(false);
|
||||
|
||||
}
|
||||
|
||||
} // namespace ld2410
|
||||
} // namespace esphome
|
||||
158
1w/yaml/screek-mod-components/ld2410/ld2410.h
Normal file
158
1w/yaml/screek-mod-components/ld2410/ld2410.h
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
#pragma once
|
||||
#include "esphome/core/defines.h"
|
||||
#include "esphome/core/component.h"
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
#include "esphome/components/binary_sensor/binary_sensor.h"
|
||||
#endif
|
||||
#ifdef USE_SENSOR
|
||||
#include "esphome/components/sensor/sensor.h"
|
||||
#endif
|
||||
#include "esphome/components/uart/uart.h"
|
||||
#include "esphome/core/automation.h"
|
||||
#include "esphome/core/helpers.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace ld2410 {
|
||||
|
||||
#define CHECK_BIT(var, pos) (((var) >> (pos)) & 1)
|
||||
|
||||
// Commands
|
||||
static const uint8_t CMD_ENABLE_CONF = 0x00FF;
|
||||
static const uint8_t CMD_DISABLE_CONF = 0x00FE;
|
||||
static const uint8_t CMD_MAXDIST_DURATION = 0x0060;
|
||||
static const uint8_t CMD_QUERY = 0x0061;
|
||||
static const uint8_t CMD_GATE_SENS = 0x0064;
|
||||
static const uint8_t CMD_VERSION = 0x00A0;
|
||||
|
||||
// Commands values
|
||||
static const uint8_t CMD_MAX_MOVE_VALUE = 0x0000;
|
||||
static const uint8_t CMD_MAX_STILL_VALUE = 0x0001;
|
||||
static const uint8_t CMD_DURATION_VALUE = 0x0002;
|
||||
// Command Header & Footer
|
||||
static const uint8_t CMD_FRAME_HEADER[4] = {0xFD, 0xFC, 0xFB, 0xFA};
|
||||
static const uint8_t CMD_FRAME_END[4] = {0x04, 0x03, 0x02, 0x01};
|
||||
// Data Header & Footer
|
||||
static const uint8_t DATA_FRAME_HEADER[4] = {0xF4, 0xF3, 0xF2, 0xF1};
|
||||
static const uint8_t DATA_FRAME_END[4] = {0xF8, 0xF7, 0xF6, 0xF5};
|
||||
/*
|
||||
Data Type: 6th byte
|
||||
Target states: 9th byte
|
||||
Moving target distance: 10~11th bytes
|
||||
Moving target energy: 12th byte
|
||||
Still target distance: 13~14th bytes
|
||||
Still target energy: 15th byte
|
||||
Detect distance: 16~17th bytes
|
||||
*/
|
||||
enum PeriodicDataStructure : uint8_t {
|
||||
DATA_TYPES = 5,
|
||||
TARGET_STATES = 8,
|
||||
MOVING_TARGET_LOW = 9,
|
||||
MOVING_TARGET_HIGH = 10,
|
||||
MOVING_ENERGY = 11,
|
||||
STILL_TARGET_LOW = 12,
|
||||
STILL_TARGET_HIGH = 13,
|
||||
STILL_ENERGY = 14,
|
||||
DETECT_DISTANCE_LOW = 15,
|
||||
DETECT_DISTANCE_HIGH = 16,
|
||||
};
|
||||
// 上报数据的固定结构。(23年3月13日_16时54分_)
|
||||
enum PeriodicDataValue : uint8_t { HEAD = 0XAA, END = 0x55, CHECK = 0x00 };
|
||||
|
||||
enum AckDataStructure : uint8_t { COMMAND = 6, COMMAND_STATUS = 7 };
|
||||
|
||||
// char cmd[2] = {enable ? 0xFF : 0xFE, 0x00};
|
||||
class LD2410Component : public Component, public uart::UARTDevice {
|
||||
#ifdef USE_SENSOR
|
||||
SUB_SENSOR(moving_target_distance)
|
||||
SUB_SENSOR(still_target_distance)
|
||||
SUB_SENSOR(moving_target_energy)
|
||||
SUB_SENSOR(still_target_energy)
|
||||
SUB_SENSOR(detection_distance)
|
||||
SUB_SENSOR(light)
|
||||
#endif
|
||||
|
||||
public:
|
||||
void setup() override;
|
||||
void dump_config() override;
|
||||
void loop() override;
|
||||
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
void set_target_sensor(binary_sensor::BinarySensor *sens) { this->target_binary_sensor_ = sens; };
|
||||
void set_moving_target_sensor(binary_sensor::BinarySensor *sens) { this->moving_binary_sensor_ = sens; };
|
||||
void set_still_target_sensor(binary_sensor::BinarySensor *sens) { this->still_binary_sensor_ = sens; };
|
||||
#endif
|
||||
|
||||
void set_timeout(uint16_t value) { this->timeout_ = value; };
|
||||
void set_max_move_distance(uint8_t value) { this->max_move_distance_ = value; };
|
||||
void set_max_still_distance(uint8_t value) { this->max_still_distance_ = value; };
|
||||
void set_range_config(int rg0_move, int rg0_still, int rg1_move, int rg1_still, int rg2_move, int rg2_still,
|
||||
int rg3_move, int rg3_still, int rg4_move, int rg4_still, int rg5_move, int rg5_still,
|
||||
int rg6_move, int rg6_still, int rg7_move, int rg7_still, int rg8_move, int rg8_still) {
|
||||
this->rg0_move_threshold_ = rg0_move;
|
||||
this->rg0_still_threshold_ = rg0_still;
|
||||
this->rg1_move_threshold_ = rg1_move;
|
||||
this->rg1_still_threshold_ = rg1_still;
|
||||
this->rg2_move_threshold_ = rg2_move;
|
||||
this->rg2_still_threshold_ = rg2_still;
|
||||
this->rg3_move_threshold_ = rg3_move;
|
||||
this->rg3_still_threshold_ = rg3_still;
|
||||
this->rg4_move_threshold_ = rg4_move;
|
||||
this->rg4_still_threshold_ = rg4_still;
|
||||
this->rg5_move_threshold_ = rg5_move;
|
||||
this->rg5_still_threshold_ = rg5_still;
|
||||
this->rg6_move_threshold_ = rg6_move;
|
||||
this->rg6_still_threshold_ = rg6_still;
|
||||
this->rg7_move_threshold_ = rg7_move;
|
||||
this->rg7_still_threshold_ = rg7_still;
|
||||
this->rg8_move_threshold_ = rg8_move;
|
||||
this->rg8_still_threshold_ = rg8_still;
|
||||
};
|
||||
int moving_sensitivities[9] = {0};
|
||||
int still_sensitivities[9] = {0};
|
||||
|
||||
int32_t last_periodic_millis = millis();
|
||||
|
||||
int32_t last_change_fatory_mode_millis = 0;
|
||||
|
||||
void factoryReset();
|
||||
|
||||
void reboot();
|
||||
|
||||
void ble_control(bool enable);
|
||||
|
||||
void factory_mode(bool enable);
|
||||
|
||||
protected:
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
binary_sensor::BinarySensor *target_binary_sensor_{nullptr};
|
||||
binary_sensor::BinarySensor *moving_binary_sensor_{nullptr};
|
||||
binary_sensor::BinarySensor *still_binary_sensor_{nullptr};
|
||||
#endif
|
||||
|
||||
std::vector<uint8_t> rx_buffer_;
|
||||
int two_byte_to_int_(char firstbyte, char secondbyte) { return (int16_t)(secondbyte << 8) + firstbyte; }
|
||||
void send_command_(uint8_t command_str, uint8_t *command_value, int command_value_len);
|
||||
|
||||
void set_max_distances_timeout_(uint8_t max_moving_distance_range, uint8_t max_still_distance_range,
|
||||
uint16_t timeout);
|
||||
void set_gate_threshold_(uint8_t gate, uint8_t motionsens, uint8_t stillsens);
|
||||
void set_config_mode_(bool enable);
|
||||
void handle_periodic_data_(uint8_t *buffer, int len);
|
||||
void handle_ack_data_(uint8_t *buffer, int len);
|
||||
void readline_(int readch, uint8_t *buffer, int len);
|
||||
void query_parameters_();
|
||||
void get_version_();
|
||||
|
||||
uint16_t timeout_;
|
||||
uint8_t max_move_distance_;
|
||||
uint8_t max_still_distance_;
|
||||
|
||||
uint8_t version_[6];
|
||||
uint8_t rg0_move_threshold_, rg0_still_threshold_, rg1_move_threshold_, rg1_still_threshold_, rg2_move_threshold_,
|
||||
rg2_still_threshold_, rg3_move_threshold_, rg3_still_threshold_, rg4_move_threshold_, rg4_still_threshold_,
|
||||
rg5_move_threshold_, rg5_still_threshold_, rg6_move_threshold_, rg6_still_threshold_, rg7_move_threshold_,
|
||||
rg7_still_threshold_, rg8_move_threshold_, rg8_still_threshold_;
|
||||
};
|
||||
|
||||
} // namespace ld2410
|
||||
} // namespace esphome
|
||||
70
1w/yaml/screek-mod-components/ld2410/sensor.py
Normal file
70
1w/yaml/screek-mod-components/ld2410/sensor.py
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
import esphome.codegen as cg
|
||||
from esphome.components import sensor
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import (
|
||||
DEVICE_CLASS_DISTANCE,
|
||||
DEVICE_CLASS_ENERGY,
|
||||
UNIT_CENTIMETER,
|
||||
UNIT_PERCENT,
|
||||
STATE_CLASS_NONE,
|
||||
ICON_BRIGHTNESS_5,
|
||||
UNIT_EMPTY,
|
||||
UNIT_LUX,
|
||||
|
||||
)
|
||||
from . import CONF_LD2410_ID, LD2410Component
|
||||
|
||||
DEPENDENCIES = ["ld2410"]
|
||||
CONF_MOVING_DISTANCE = "moving_distance"
|
||||
CONF_STILL_DISTANCE = "still_distance"
|
||||
CONF_MOVING_ENERGY = "moving_energy"
|
||||
CONF_STILL_ENERGY = "still_energy"
|
||||
CONF_DETECTION_DISTANCE = "detection_distance"
|
||||
CONF_LIGHT = "light"
|
||||
|
||||
CONFIG_SCHEMA = {
|
||||
cv.GenerateID(CONF_LD2410_ID): cv.use_id(LD2410Component),
|
||||
cv.Optional(CONF_MOVING_DISTANCE): sensor.sensor_schema(
|
||||
device_class=DEVICE_CLASS_DISTANCE, unit_of_measurement=UNIT_CENTIMETER
|
||||
),
|
||||
cv.Optional(CONF_STILL_DISTANCE): sensor.sensor_schema(
|
||||
device_class=DEVICE_CLASS_DISTANCE, unit_of_measurement=UNIT_CENTIMETER
|
||||
),
|
||||
cv.Optional(CONF_MOVING_ENERGY): sensor.sensor_schema(
|
||||
device_class=DEVICE_CLASS_ENERGY, unit_of_measurement=UNIT_PERCENT
|
||||
),
|
||||
cv.Optional(CONF_STILL_ENERGY): sensor.sensor_schema(
|
||||
device_class=DEVICE_CLASS_ENERGY, unit_of_measurement=UNIT_PERCENT
|
||||
),
|
||||
cv.Optional(CONF_DETECTION_DISTANCE): sensor.sensor_schema(
|
||||
device_class=DEVICE_CLASS_DISTANCE, unit_of_measurement=UNIT_CENTIMETER
|
||||
),
|
||||
|
||||
cv.Optional(CONF_LIGHT): sensor.sensor_schema(
|
||||
device_class=STATE_CLASS_NONE,
|
||||
icon=ICON_BRIGHTNESS_5,
|
||||
unit_of_measurement=UNIT_PERCENT
|
||||
),
|
||||
}
|
||||
|
||||
async def to_code(config):
|
||||
ld2410_component = await cg.get_variable(config[CONF_LD2410_ID])
|
||||
if CONF_MOVING_DISTANCE in config:
|
||||
sens = await sensor.new_sensor(config[CONF_MOVING_DISTANCE])
|
||||
cg.add(ld2410_component.set_moving_target_distance_sensor(sens))
|
||||
if CONF_STILL_DISTANCE in config:
|
||||
sens = await sensor.new_sensor(config[CONF_STILL_DISTANCE])
|
||||
cg.add(ld2410_component.set_still_target_distance_sensor(sens))
|
||||
if CONF_MOVING_ENERGY in config:
|
||||
sens = await sensor.new_sensor(config[CONF_MOVING_ENERGY])
|
||||
cg.add(ld2410_component.set_moving_target_energy_sensor(sens))
|
||||
if CONF_STILL_ENERGY in config:
|
||||
sens = await sensor.new_sensor(config[CONF_STILL_ENERGY])
|
||||
cg.add(ld2410_component.set_still_target_energy_sensor(sens))
|
||||
if CONF_DETECTION_DISTANCE in config:
|
||||
sens = await sensor.new_sensor(config[CONF_DETECTION_DISTANCE])
|
||||
cg.add(ld2410_component.set_detection_distance_sensor(sens))
|
||||
|
||||
if CONF_LIGHT in config:
|
||||
sens = await sensor.new_sensor(config[CONF_LIGHT])
|
||||
cg.add(ld2410_component.set_light_sensor(sens))
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
Experimental YAML Configurations
|
||||
|
||||
The YAML configuration files in this directory are experimental and are intended for testing and exploratory development purposes. They have not undergone comprehensive testing or validation and may contain unresolved bugs and issues. Please use these configurations with caution, keeping in mind that they are meant solely for experimentation and learning, and their functionality and stability cannot be guaranteed.
|
||||
|
|
@ -1,156 +0,0 @@
|
|||
esphome:
|
||||
name: screek-humen-sensor-1wx
|
||||
comment: Screek Human Sensor 1WX
|
||||
friendly_name: Human Sensor 1WX
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
project:
|
||||
name: Screek.Human_Sensor
|
||||
version: 1W
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_1w
|
||||
ref: main
|
||||
components: [esp32, uart]
|
||||
|
||||
esp32:
|
||||
board: esp32-c3-devkitm-1
|
||||
|
||||
logger:
|
||||
|
||||
api:
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "YOUR_OTA_PASSWORD"
|
||||
|
||||
wifi:
|
||||
# ssid: !secret wifi_ssid
|
||||
# password: !secret wifi_password
|
||||
# fast_connect: True
|
||||
|
||||
power_save_mode: NONE
|
||||
# output_power: 20dB
|
||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR 1WX"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: ld2410
|
||||
has_target:
|
||||
name: Presence
|
||||
has_moving_target:
|
||||
name: Moving Target
|
||||
has_still_target:
|
||||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 30s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 10s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 1s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
- platform: ld2410
|
||||
moving_distance:
|
||||
name : Moving Distance
|
||||
id: moving_distance
|
||||
still_distance:
|
||||
name: Still Distance
|
||||
id: still_distance
|
||||
moving_energy:
|
||||
name: Move Energy
|
||||
still_energy:
|
||||
name: Still Energy
|
||||
detection_distance:
|
||||
name: Detection Distance
|
||||
light:
|
||||
name: Sun Light
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: time_now
|
||||
servers:
|
||||
- ntp.aliyun.com
|
||||
|
||||
uart:
|
||||
id: uart_ld2410
|
||||
tx_pin: GPIO7
|
||||
rx_pin: GPIO6
|
||||
baud_rate: 256000
|
||||
parity: NONE
|
||||
stop_bits: 1
|
||||
|
||||
switch:
|
||||
- platform: ld2410
|
||||
engineering_mode:
|
||||
name: "engineering mode"
|
||||
bluetooth:
|
||||
name: "control bluetooth"
|
||||
|
||||
ld2410:
|
||||
id: ld2410_radar
|
||||
|
||||
text_sensor:
|
||||
- platform: ld2410
|
||||
version:
|
||||
name: "firmware version"
|
||||
mac_address:
|
||||
name: "mac address"
|
||||
|
||||
button:
|
||||
- platform: ld2410
|
||||
factory_reset:
|
||||
name: "ld2410 factory reset"
|
||||
restart:
|
||||
name: "LD2410 Reboot"
|
||||
icon: mdi:radar
|
||||
entity_category: "config"
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
- platform: factory_reset
|
||||
disabled_by_default: True
|
||||
name: Factory Reset
|
||||
id: factory_reset_all
|
||||
|
||||
number:
|
||||
- platform: ld2410
|
||||
timeout:
|
||||
name: timeout
|
||||
light_threshold:
|
||||
name: light threshold
|
||||
max_move_distance_gate:
|
||||
name: max move distance gate
|
||||
max_still_distance_gate:
|
||||
name: max still distance gate
|
||||
|
|
@ -1,168 +0,0 @@
|
|||
esphome:
|
||||
name: screek-humen-sensor-1wx
|
||||
comment: Screek Human Sensor 1WX
|
||||
friendly_name: Human Sensor 1WX
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
project:
|
||||
name: Screek.Human_Sensor
|
||||
version: 1W
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_1w
|
||||
ref: main
|
||||
components: [uart, ld2410]
|
||||
|
||||
esp32:
|
||||
board: esp32-c3-devkitm-1
|
||||
|
||||
logger:
|
||||
|
||||
api:
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "YOUR_OTA_PASSWORD"
|
||||
|
||||
wifi:
|
||||
# ssid: !secret wifi_ssid
|
||||
# password: !secret wifi_password
|
||||
# fast_connect: True
|
||||
|
||||
power_save_mode: NONE
|
||||
# output_power: 20dB
|
||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||
ap:
|
||||
ssid: "SCREEK HUMAN-SENSOR"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: ld2410
|
||||
has_target:
|
||||
name: Presence
|
||||
has_moving_target:
|
||||
name: Moving Target
|
||||
has_still_target:
|
||||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 30s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 10s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 1s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
- platform: ld2410
|
||||
moving_distance:
|
||||
name : Moving Distance
|
||||
id: moving_distance
|
||||
still_distance:
|
||||
name: Still Distance
|
||||
id: still_distance
|
||||
moving_energy:
|
||||
name: Move Energy
|
||||
still_energy:
|
||||
name: Still Energy
|
||||
detection_distance:
|
||||
name: Detection Distance
|
||||
light:
|
||||
name: Sun Light
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: time_now
|
||||
servers:
|
||||
- ntp.aliyun.com
|
||||
|
||||
uart:
|
||||
id: uart_ld2410
|
||||
tx_pin: GPIO7
|
||||
rx_pin: GPIO6
|
||||
baud_rate: 256000
|
||||
parity: NONE
|
||||
stop_bits: 1
|
||||
|
||||
ld2410:
|
||||
timeout: 150s
|
||||
id: ld2410_radar
|
||||
# max_move_distance : 6m
|
||||
# max_still_distance: 0.75m
|
||||
# g0_move_threshold: 10
|
||||
# g0_still_threshold: 20
|
||||
# g1_move_threshold: 10
|
||||
# g1_still_threshold: 20
|
||||
# g2_move_threshold: 20
|
||||
# g2_still_threshold: 21
|
||||
# g3_move_threshold: 30
|
||||
# g3_still_threshold: 31
|
||||
# g4_move_threshold: 40
|
||||
# g4_still_threshold: 41
|
||||
# g5_move_threshold: 50
|
||||
# g5_still_threshold: 51
|
||||
# g6_move_threshold: 60
|
||||
# g6_still_threshold: 61
|
||||
# g7_move_threshold: 70
|
||||
# g7_still_threshold: 71
|
||||
# g8_move_threshold: 80
|
||||
# g8_still_threshold: 81
|
||||
|
||||
button:
|
||||
- platform: template
|
||||
name: "Enable LD2410 BLE"
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2410_radar) -> ble_control(true);
|
||||
- platform: template
|
||||
name: "Disable LD2410 BLE"
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth-off
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2410_radar) -> ble_control(false);
|
||||
- platform: template
|
||||
name: "LD2410 Reboot"
|
||||
icon: mdi:radar
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
lambda: |-
|
||||
// auto* radar = LD2410Component::get(ld2410);
|
||||
// radar -> roboot();
|
||||
id(ld2410_radar) -> reboot();
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
- platform: factory_reset
|
||||
disabled_by_default: True
|
||||
name: Factory Reset
|
||||
id: factory_reset_all
|
||||
File diff suppressed because it is too large
Load Diff
37
README.md
37
README.md
|
|
@ -1,37 +0,0 @@
|
|||
# SCREEK Human Sensor DIY Firmware Support
|
||||
|
||||
## About
|
||||
This is the source code for the DIY sensors we make, you are free to modify them and use them, and feel free to provide suggestions to us.
|
||||
|
||||
Consider the current privacy so extravagant, and the severe dependence on cloud services. Open source can bring better privacy, and more personalized customization.
|
||||
|
||||
If you would like to purchase one of our DIY products, or take a look at our documentation, feel free to visit
|
||||
https://www.screek.io/
|
||||
|
||||
Our Store:
|
||||
https://shop.screek.io
|
||||
|
||||
Our eBay Store:
|
||||
https://www.ebay.com/str/screekworkshop
|
||||
|
||||
And Here is A FB Group:
|
||||
https://www.facebook.com/groups/screekworkshop
|
||||
|
||||
And Reddit:
|
||||
https://www.reddit.com/r/screekworkshop/
|
||||
|
||||
Happy DIYing!
|
||||
|
||||
## 🙏
|
||||
The sensor builds and code have gotten a lot of concerted effort, and ingenuity, from many, many people.
|
||||
|
||||
|
||||
## Something else to say
|
||||
|
||||
We insist on keeping our principles of code openness on Home Assistant sensors because we strongly believe in it:
|
||||
- Code that is fully localized to run without malicious behavior and is readily available for everyone to review is more reassuring.
|
||||
- It's great to have the wisdom of everyone working together to improve the source code.
|
||||
|
||||
But at the same time we must apologize that we don't have enough energy to run an open source community at the moment, so our open source code may not be up to date or well commented.
|
||||
|
||||
We hope you'll forgive us for having to spend most of our spare time limited to building and testing hardware, as well as exploring some new areas, and hopefully often getting a chance to take a walk with our families.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
sensor main page: https://docs.screek.io/f2
|
||||
|
||||
The main LD1125F part of the code comes from the LD1125H code driver from [Link_mmWave_Radar_ESPHome](https://github.com/patrick3399/Hi-Link_mmWave_Radar_ESPHome).
|
||||
|
||||
Acknowledgements patrick3399, ssieb.
|
||||
|
|
@ -1,516 +0,0 @@
|
|||
# screek f2 yaml code
|
||||
# main ld1125h code from: https://github.com/patrick3399/Hi-Link_mmWave_Radar_ESPHome
|
||||
#
|
||||
substitutions:
|
||||
devicename: ""
|
||||
upper_devicename: ""
|
||||
|
||||
esphome:
|
||||
name: screek-human-sensor-f2
|
||||
comment: Screek Human Sensor F2
|
||||
friendly_name: Human Sensor F2
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
# board_build.f_cpu: 80000000L
|
||||
project:
|
||||
name: Screek.Human_Presence_Sensor
|
||||
version: F2
|
||||
on_boot:
|
||||
- priority: 100
|
||||
then:
|
||||
lambda: |-
|
||||
id(cpu_speed) = ESP.getCpuFreqMHz();
|
||||
- priority: 300
|
||||
then:
|
||||
lambda: |-
|
||||
id(screek_version).publish_state("Beta_V240708_1");
|
||||
- priority: -200
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th1st = "mth1=" + str_sprintf("%.0f",id(LD1125F_mth1).state) +"\r\n";
|
||||
return std::vector<uint8_t>(th1st.begin(), th1st.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th2st = "mth2=" + str_sprintf("%.0f",id(LD1125F_mth2).state) +"\r\n";
|
||||
return std::vector<uint8_t>(th2st.begin(), th2st.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th3st = "mth3=" + str_sprintf("%.0f",id(LD1125F_mth3).state) +"\r\n";
|
||||
return std::vector<uint8_t>(th3st.begin(), th3st.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string rmaxst = "rmax=" + str_sprintf("%.1f",id(LD1125F_rmax).state) +"\r\n";
|
||||
return std::vector<uint8_t>(rmaxst.begin(), rmaxst.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string utonsst = "utons=" + str_sprintf("%.1f",id(LD1125F_utons).state) +"\r\n";
|
||||
return std::vector<uint8_t>(utonsst.begin(), utonsst.end());
|
||||
|
||||
|
||||
safe_mode:
|
||||
disabled: true
|
||||
|
||||
preferences:
|
||||
flash_write_interval: 5s
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_2a
|
||||
ref: main
|
||||
components: [uart]
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/ssieb/custom_components #Thanks for @ssieb components.
|
||||
components: [ serial ]
|
||||
|
||||
esp32:
|
||||
board: lolin_c3_mini
|
||||
framework:
|
||||
type: arduino
|
||||
version: 2.0.9
|
||||
platform_version: 6.3.0
|
||||
|
||||
globals:
|
||||
- id: cpu_speed
|
||||
type: int
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: last_update_ld2450
|
||||
type: unsigned long
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: init_zone_publish
|
||||
type: bool
|
||||
restore_value: no
|
||||
initial_value: "false"
|
||||
- id: last_illuminance
|
||||
type: float
|
||||
restore_value: no
|
||||
initial_value: "-1"
|
||||
- id: LD1125F_Last_Time
|
||||
type: time_t
|
||||
restore_value: no
|
||||
initial_value: time(NULL)
|
||||
- id: LD1125F_Last_Mov_Time
|
||||
type: time_t
|
||||
restore_value: no
|
||||
initial_value: time(NULL)
|
||||
- id: LD1125F_Clearence_Status
|
||||
type: bool
|
||||
restore_value: no
|
||||
initial_value: "false"
|
||||
|
||||
improv_serial:
|
||||
|
||||
logger:
|
||||
logs:
|
||||
bh1750.sensor: INFO
|
||||
|
||||
debug:
|
||||
update_interval: 30s
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
# encryption:
|
||||
# key: "your-api-key"
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "your-ota-password"
|
||||
|
||||
wifi:
|
||||
# output_power: 15dB
|
||||
power_save_mode: LIGHT
|
||||
# power_save_mode: NONE
|
||||
reboot_timeout: 10min
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR F2"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
name: "SCREEK Version"
|
||||
id: screek_version
|
||||
icon: mdi:information-outline
|
||||
entity_category: "diagnostic"
|
||||
update_interval: never
|
||||
|
||||
- platform: debug
|
||||
reset_reason:
|
||||
name: "ESP Reset Reason"
|
||||
icon: mdi:anchor
|
||||
disabled_by_default: True
|
||||
- platform: wifi_info
|
||||
ip_address:
|
||||
name: ESP IP Address
|
||||
entity_category: "diagnostic"
|
||||
disabled_by_default: True
|
||||
icon: mdi:ip-network
|
||||
mac_address:
|
||||
name: ESP MAC
|
||||
entity_category: "diagnostic"
|
||||
icon: mdi:ip-network
|
||||
disabled_by_default: True
|
||||
- platform: serial
|
||||
uart_id: LD1125F_UART_BUS
|
||||
name: ${upper_devicename} UART Text
|
||||
id: LD1125F_UART_Text
|
||||
icon: "mdi:format-text"
|
||||
entity_category: "diagnostic"
|
||||
internal: False #If Don't Want to See UART Receive Data, Set To True
|
||||
filters:
|
||||
- lambda: |-
|
||||
static std::string last;
|
||||
if (x == last)
|
||||
return {};
|
||||
last = x;
|
||||
return x;
|
||||
on_value:
|
||||
lambda: |-
|
||||
std::string uart_text = id(LD1125F_UART_Text).state;
|
||||
|
||||
if (uart_text == "null"){
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = -1;
|
||||
std::string uart_state = "";
|
||||
if (uart_text.length() > 3) {
|
||||
uart_state = id(LD1125F_UART_Text).state.substr(0,3);
|
||||
if (uart_text.length() >= 9) {
|
||||
if (uart_state == "occ" || uart_state == "mov") {
|
||||
distance = std::stof(uart_text.substr(9));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (uart_state == "occ" && distance > 0) {
|
||||
id(LD1125F_Distance).publish_state(distance);
|
||||
if ((time(NULL)-id(LD1125F_Last_Mov_Time)) >= id(LD1125F_Mov_Time).state) {
|
||||
id(LD1125F_Occupancy).publish_state("Occupancy");
|
||||
if (id(LD1125F_MovOcc_Binary).state == false) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(true);
|
||||
}
|
||||
if (id(LD1125F_Mov_Binary).state == true) {
|
||||
id(LD1125F_Mov_Binary).publish_state(false);
|
||||
}
|
||||
}
|
||||
if (id(LD1125F_MovOcc_Binary).state == false) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(true);
|
||||
}
|
||||
id(LD1125F_Last_Time) = time(NULL);
|
||||
if (id(LD1125F_Clearence_Status) == true) {
|
||||
id(LD1125F_Clearence_Status) = false;
|
||||
}
|
||||
}
|
||||
else if (uart_state == "mov" && distance > 0) {
|
||||
id(LD1125F_Distance).publish_state(distance);
|
||||
id(LD1125F_Occupancy).publish_state("Movement");
|
||||
if (id(LD1125F_MovOcc_Binary).state == false) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(true);
|
||||
}
|
||||
if (id(LD1125F_Mov_Binary).state == false) {
|
||||
id(LD1125F_Mov_Binary).publish_state(true);
|
||||
}
|
||||
id(LD1125F_Last_Mov_Time) = time(NULL);
|
||||
id(LD1125F_Last_Time) = time(NULL);
|
||||
if (id(LD1125F_Clearence_Status) == true) {
|
||||
id(LD1125F_Clearence_Status) = false;
|
||||
}
|
||||
}
|
||||
- platform: template
|
||||
name: ${upper_devicename} Occupancy Status
|
||||
id: LD1125F_Occupancy
|
||||
icon: "mdi:motion-sensor"
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: template
|
||||
name: ${upper_devicename} Occupancy or Movement
|
||||
id: LD1125F_MovOcc_Binary
|
||||
device_class: occupancy
|
||||
publish_initial_state: True
|
||||
- platform: template
|
||||
name: ${upper_devicename} Movement
|
||||
id: LD1125F_Mov_Binary
|
||||
device_class: motion
|
||||
publish_initial_state: True
|
||||
|
||||
sensor:
|
||||
- platform: template
|
||||
name: "ESP CPU Speed"
|
||||
accuracy_decimals: 0
|
||||
icon: mdi:cpu-32-bit
|
||||
unit_of_measurement: Mhz
|
||||
disabled_by_default: True
|
||||
lambda: |-
|
||||
return (id(cpu_speed));
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 600s
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: "°C"
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 45s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: ESP Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 60s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 60s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 60s
|
||||
- platform: template
|
||||
name: ${upper_devicename} Distance
|
||||
id: LD1125F_Distance
|
||||
icon: "mdi:signal-distance-variant"
|
||||
unit_of_measurement: "m"
|
||||
accuracy_decimals: 2
|
||||
# filters: # Use Fliter To Debounce
|
||||
# - sliding_window_moving_average:
|
||||
# window_size: 8
|
||||
# send_every: 2
|
||||
# - heartbeat: 0.2s
|
||||
- platform: bh1750
|
||||
name: "Illuminance"
|
||||
accuracy_decimals: 1
|
||||
id: bh1750_light
|
||||
update_interval: 1s
|
||||
filters:
|
||||
- delta: 0.1
|
||||
|
||||
light:
|
||||
- platform: status_led
|
||||
name: sys_status
|
||||
pin:
|
||||
number: GPIO13
|
||||
ignore_pin_validation_error: true
|
||||
internal: True
|
||||
restore_mode: ALWAYS_OFF
|
||||
- platform: binary
|
||||
name: "Red Info Light"
|
||||
output: board_info_ed
|
||||
entity_category: "config"
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
i2c:
|
||||
sda: GPIO7
|
||||
scl: GPIO11
|
||||
scan: true
|
||||
id: bus_a
|
||||
|
||||
output:
|
||||
- platform: gpio
|
||||
id: board_info_ed
|
||||
pin:
|
||||
number: GPIO12
|
||||
ignore_pin_validation_error: true
|
||||
|
||||
switch:
|
||||
- platform: factory_reset
|
||||
name: Factory Reset
|
||||
disabled_by_default: True
|
||||
icon: mdi:heart-broken
|
||||
|
||||
button:
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
entity_category: diagnostic
|
||||
|
||||
uart:
|
||||
id: LD1125F_UART_BUS
|
||||
rx_pin: GPIO5
|
||||
tx_pin: GPIO4
|
||||
baud_rate: 115200
|
||||
data_bits: 8
|
||||
stop_bits: 1
|
||||
parity: NONE
|
||||
|
||||
interval:
|
||||
- interval: 1s #Clearance Scan Time
|
||||
setup_priority: -200
|
||||
then:
|
||||
lambda: |-
|
||||
if ((time(NULL)-id(LD1125F_Last_Time))>id(LD1125F_Clear_Time).state) {
|
||||
if (id(LD1125F_Distance).state != 0){
|
||||
id(LD1125F_Distance).publish_state(0);
|
||||
}
|
||||
if ((id(LD1125F_Clearence_Status) == false) || (id(LD1125F_Occupancy).state != "Clearance")) {
|
||||
id(LD1125F_Occupancy).publish_state("Clearance");
|
||||
id(LD1125F_Clearence_Status) = true;
|
||||
}
|
||||
if (id(LD1125F_MovOcc_Binary).state == true) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(false);
|
||||
}
|
||||
if (id(LD1125F_Mov_Binary).state == true) {
|
||||
id(LD1125F_Mov_Binary).publish_state(false);
|
||||
}
|
||||
}
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: ${upper_devicename} mth1 #mth1 is 0~2.8m Sensitivity.
|
||||
id: LD1125F_mth1
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "60.0" #Default mth1 Setting
|
||||
min_value: 10.0
|
||||
max_value: 600.0
|
||||
step: 5.0
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th1st = "mth1=" + str_sprintf("%.0f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(th1st.begin(), th1st.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} mth2 #mth2 is 2.8~8m Sensitivity.
|
||||
id: LD1125F_mth2
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "30" #Default mth2 Setting
|
||||
min_value: 5
|
||||
max_value: 300
|
||||
step: 5
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th2st = "mth2=" + str_sprintf("%.0f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(th2st.begin(), th2st.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} mth3 #mth3 is above 8m Sensitivity.
|
||||
id: LD1125F_mth3
|
||||
icon: "mdi:cogs"
|
||||
entity_category: config
|
||||
optimistic: true
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "20" #Default mth3 Setting
|
||||
min_value: 5
|
||||
max_value: 200
|
||||
step: 5
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th3st = "mth3=" + str_sprintf("%.0f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(th3st.begin(), th3st.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} Max Distance #rmax is max detection distance.
|
||||
id: LD1125F_rmax
|
||||
icon: "mdi:cogs"
|
||||
entity_category: config
|
||||
optimistic: true
|
||||
unit_of_measurement: m
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "8" #Default rmax Setting
|
||||
min_value: 0.4
|
||||
max_value: 12
|
||||
step: 0.2
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string rmaxst = "rmax=" + str_sprintf("%.1f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(rmaxst.begin(), rmaxst.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} LD1125F Refresh Rate
|
||||
id: LD1125F_utons
|
||||
icon: "mdi:refresh"
|
||||
entity_category: config
|
||||
optimistic: true
|
||||
unit_of_measurement: ms
|
||||
restore_value: true
|
||||
initial_value: "100"
|
||||
min_value: 100
|
||||
max_value: 5000
|
||||
step: 50
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string utonsst = "utons=" + std::to_string(x) + "\r\n";
|
||||
return std::vector<uint8_t>(utonsst.begin(), utonsst.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} Clearence Time
|
||||
id: LD1125F_Clear_Time
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "5" #LD1125F Mov/Occ > Clearence Time Here
|
||||
min_value: 0.5
|
||||
max_value: 20
|
||||
step: 0.5
|
||||
- platform: template
|
||||
name: ${upper_devicename} Movement Time
|
||||
id: LD1125F_Mov_Time
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "1" #LD1125F Mov > Occ Time Here
|
||||
min_value: 0.5
|
||||
max_value: 10
|
||||
step: 0.5
|
||||
|
|
@ -1,482 +0,0 @@
|
|||
# screek f2 yaml code
|
||||
# main ld1125h code from: https://github.com/patrick3399/Hi-Link_mmWave_Radar_ESPHome
|
||||
#
|
||||
substitutions:
|
||||
devicename: ""
|
||||
upper_devicename: ""
|
||||
|
||||
esphome:
|
||||
name: screek-human-sensor-f2
|
||||
comment: Screek Human Sensor F2
|
||||
friendly_name: Human Sensor F2
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
# board_build.f_cpu: 80000000L
|
||||
project:
|
||||
name: Screek.Human_Presence_Sensor
|
||||
version: F2
|
||||
on_boot:
|
||||
- priority: 300
|
||||
then:
|
||||
lambda: |-
|
||||
id(screek_version).publish_state("V251104_1");
|
||||
- priority: -200
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th1st = "mth1=" + str_sprintf("%.0f",id(LD1125F_mth1).state) +"\r\n";
|
||||
return std::vector<uint8_t>(th1st.begin(), th1st.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th2st = "mth2=" + str_sprintf("%.0f",id(LD1125F_mth2).state) +"\r\n";
|
||||
return std::vector<uint8_t>(th2st.begin(), th2st.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th3st = "mth3=" + str_sprintf("%.0f",id(LD1125F_mth3).state) +"\r\n";
|
||||
return std::vector<uint8_t>(th3st.begin(), th3st.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string rmaxst = "rmax=" + str_sprintf("%.1f",id(LD1125F_rmax).state) +"\r\n";
|
||||
return std::vector<uint8_t>(rmaxst.begin(), rmaxst.end());
|
||||
- delay: 100ms
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string utonsst = "utons=" + str_sprintf("%.1f",id(LD1125F_utons).state) +"\r\n";
|
||||
return std::vector<uint8_t>(utonsst.begin(), utonsst.end());
|
||||
|
||||
|
||||
safe_mode:
|
||||
disabled: true
|
||||
|
||||
preferences:
|
||||
flash_write_interval: 5s
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/ssieb/custom_components #Thanks for @ssieb components.
|
||||
components: [ serial ]
|
||||
|
||||
esp32:
|
||||
board: lolin_c3_mini
|
||||
framework:
|
||||
type: esp-idf
|
||||
# version: 2.0.9
|
||||
# platform_version: 6.3.0
|
||||
|
||||
globals:
|
||||
- id: last_update_ld2450
|
||||
type: unsigned long
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: init_zone_publish
|
||||
type: bool
|
||||
restore_value: no
|
||||
initial_value: "false"
|
||||
- id: last_illuminance
|
||||
type: float
|
||||
restore_value: no
|
||||
initial_value: "-1"
|
||||
- id: LD1125F_Last_Time
|
||||
type: time_t
|
||||
restore_value: no
|
||||
initial_value: time(NULL)
|
||||
- id: LD1125F_Last_Mov_Time
|
||||
type: time_t
|
||||
restore_value: no
|
||||
initial_value: time(NULL)
|
||||
- id: LD1125F_Clearence_Status
|
||||
type: bool
|
||||
restore_value: no
|
||||
initial_value: "false"
|
||||
|
||||
improv_serial:
|
||||
|
||||
logger:
|
||||
|
||||
debug:
|
||||
update_interval: 30s
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
# encryption:
|
||||
# key: "your-api-key"
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "your-ota-password"
|
||||
|
||||
wifi:
|
||||
# output_power: 15dB
|
||||
power_save_mode: LIGHT
|
||||
# power_save_mode: NONE
|
||||
reboot_timeout: 10min
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR F2"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
name: "SCREEK Version"
|
||||
id: screek_version
|
||||
icon: mdi:information-outline
|
||||
entity_category: "diagnostic"
|
||||
update_interval: never
|
||||
|
||||
- platform: debug
|
||||
reset_reason:
|
||||
name: "ESP Reset Reason"
|
||||
icon: mdi:anchor
|
||||
disabled_by_default: True
|
||||
- platform: wifi_info
|
||||
ip_address:
|
||||
name: ESP IP Address
|
||||
entity_category: "diagnostic"
|
||||
disabled_by_default: True
|
||||
icon: mdi:ip-network
|
||||
mac_address:
|
||||
name: ESP MAC
|
||||
entity_category: "diagnostic"
|
||||
icon: mdi:ip-network
|
||||
disabled_by_default: True
|
||||
- platform: serial
|
||||
uart_id: LD1125F_UART_BUS
|
||||
name: ${upper_devicename} UART Text
|
||||
id: LD1125F_UART_Text
|
||||
icon: "mdi:format-text"
|
||||
entity_category: "diagnostic"
|
||||
internal: False #If Don't Want to See UART Receive Data, Set To True
|
||||
on_value:
|
||||
lambda: |-
|
||||
std::string uart_text = id(LD1125F_UART_Text).state;
|
||||
|
||||
if (uart_text == "null"){
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = -1;
|
||||
std::string uart_state = "";
|
||||
if (uart_text.length() > 3){
|
||||
uart_state = id(LD1125F_UART_Text).state.substr(0,3);
|
||||
if (uart_text.length() >= 9) {
|
||||
if (uart_state == "occ" || uart_state =="mov") {
|
||||
distance = std::stof(uart_text.substr(9));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (uart_state == "occ" && distance > 0) {
|
||||
id(LD1125F_Distance).publish_state(distance);
|
||||
if ((time(NULL)-id(LD1125F_Last_Mov_Time))>id(LD1125F_Mov_Time).state) {
|
||||
id(LD1125F_Occupancy).publish_state("Occupancy");
|
||||
if (id(LD1125F_MovOcc_Binary).state == false) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(true);
|
||||
}
|
||||
if (id(LD1125F_Mov_Binary).state == true) {
|
||||
id(LD1125F_Mov_Binary).publish_state(false);
|
||||
}
|
||||
}
|
||||
if (id(LD1125F_MovOcc_Binary).state == false) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(true);
|
||||
}
|
||||
id(LD1125F_Last_Time) = time(NULL);
|
||||
if (id(LD1125F_Clearence_Status) == true) {
|
||||
id(LD1125F_Clearence_Status) = false;
|
||||
}
|
||||
}
|
||||
else if (uart_state == "mov" && distance > 0) {
|
||||
id(LD1125F_Distance).publish_state(distance);
|
||||
id(LD1125F_Occupancy).publish_state("Movement");
|
||||
if (id(LD1125F_MovOcc_Binary).state == false) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(true);
|
||||
}
|
||||
if (id(LD1125F_Mov_Binary).state == false) {
|
||||
id(LD1125F_Mov_Binary).publish_state(true);
|
||||
}
|
||||
id(LD1125F_Last_Mov_Time) = time(NULL);
|
||||
id(LD1125F_Last_Time) = time(NULL);
|
||||
if (id(LD1125F_Clearence_Status) == true) {
|
||||
id(LD1125F_Clearence_Status) = false;
|
||||
}
|
||||
}
|
||||
- platform: template
|
||||
name: ${upper_devicename} Occupancy Status
|
||||
id: LD1125F_Occupancy
|
||||
icon: "mdi:motion-sensor"
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: template
|
||||
name: ${upper_devicename} Occupancy or Movement
|
||||
id: LD1125F_MovOcc_Binary
|
||||
device_class: occupancy
|
||||
- platform: template
|
||||
name: ${upper_devicename} Movement
|
||||
id: LD1125F_Mov_Binary
|
||||
device_class: motion
|
||||
|
||||
sensor:
|
||||
- platform: internal_temperature
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 45s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: ESP Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 60s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 60s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 60s
|
||||
- platform: template
|
||||
name: ${upper_devicename} Distance
|
||||
id: LD1125F_Distance
|
||||
icon: "mdi:signal-distance-variant"
|
||||
unit_of_measurement: "m"
|
||||
accuracy_decimals: 2
|
||||
# filters: # Use Fliter To Debounce
|
||||
# - sliding_window_moving_average:
|
||||
# window_size: 8
|
||||
# send_every: 2
|
||||
# - heartbeat: 0.2s
|
||||
- platform: bh1750
|
||||
name: "Illuminance"
|
||||
accuracy_decimals: 1
|
||||
id: bh1750_light
|
||||
update_interval: 1s
|
||||
filters:
|
||||
- delta: 0.1
|
||||
|
||||
light:
|
||||
- platform: status_led
|
||||
name: sys_status
|
||||
pin:
|
||||
number: GPIO13
|
||||
ignore_pin_validation_error: true
|
||||
internal: True
|
||||
restore_mode: ALWAYS_OFF
|
||||
- platform: binary
|
||||
name: "Red Info Light"
|
||||
output: board_info_ed
|
||||
entity_category: "config"
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
i2c:
|
||||
sda: GPIO7
|
||||
scl: GPIO11
|
||||
scan: true
|
||||
id: bus_a
|
||||
|
||||
output:
|
||||
- platform: gpio
|
||||
id: board_info_ed
|
||||
pin:
|
||||
number: GPIO12
|
||||
ignore_pin_validation_error: true
|
||||
|
||||
switch:
|
||||
- platform: factory_reset
|
||||
name: Factory Reset
|
||||
disabled_by_default: True
|
||||
icon: mdi:heart-broken
|
||||
|
||||
button:
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
entity_category: diagnostic
|
||||
|
||||
uart:
|
||||
id: LD1125F_UART_BUS
|
||||
rx_pin: GPIO5
|
||||
tx_pin: GPIO4
|
||||
baud_rate: 115200
|
||||
data_bits: 8
|
||||
stop_bits: 1
|
||||
parity: NONE
|
||||
|
||||
interval:
|
||||
- interval: 1s #Clearance Scan Time
|
||||
setup_priority: -200
|
||||
then:
|
||||
lambda: |-
|
||||
if ((time(NULL)-id(LD1125F_Last_Time))>id(LD1125F_Clear_Time).state) {
|
||||
if (id(LD1125F_Distance).state != 0){
|
||||
id(LD1125F_Distance).publish_state(0);
|
||||
}
|
||||
if ((id(LD1125F_Clearence_Status) == false) || (id(LD1125F_Occupancy).state != "Clearance")) {
|
||||
id(LD1125F_Occupancy).publish_state("Clearance");
|
||||
id(LD1125F_Clearence_Status) = true;
|
||||
}
|
||||
if (id(LD1125F_MovOcc_Binary).state == true) {
|
||||
id(LD1125F_MovOcc_Binary).publish_state(false);
|
||||
}
|
||||
if (id(LD1125F_Mov_Binary).state == true) {
|
||||
id(LD1125F_Mov_Binary).publish_state(false);
|
||||
}
|
||||
}
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: ${upper_devicename} mth1 #mth1 is 0~2.8m Sensitivity.
|
||||
id: LD1125F_mth1
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "60.0" #Default mth1 Setting
|
||||
min_value: 10.0
|
||||
max_value: 600.0
|
||||
step: 5.0
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th1st = "mth1=" + str_sprintf("%.0f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(th1st.begin(), th1st.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} mth2 #mth2 is 2.8~8m Sensitivity.
|
||||
id: LD1125F_mth2
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "30" #Default mth2 Setting
|
||||
min_value: 5
|
||||
max_value: 300
|
||||
step: 5
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th2st = "mth2=" + str_sprintf("%.0f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(th2st.begin(), th2st.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} mth3 #mth3 is above 8m Sensitivity.
|
||||
id: LD1125F_mth3
|
||||
icon: "mdi:cogs"
|
||||
entity_category: config
|
||||
optimistic: true
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "20" #Default mth3 Setting
|
||||
min_value: 5
|
||||
max_value: 200
|
||||
step: 5
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string th3st = "mth3=" + str_sprintf("%.0f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(th3st.begin(), th3st.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} Max Distance #rmax is max detection distance.
|
||||
id: LD1125F_rmax
|
||||
icon: "mdi:cogs"
|
||||
entity_category: config
|
||||
optimistic: true
|
||||
unit_of_measurement: m
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "8" #Default rmax Setting
|
||||
min_value: 0.4
|
||||
max_value: 12
|
||||
step: 0.2
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string rmaxst = "rmax=" + str_sprintf("%.1f",x) +"\r\n";
|
||||
return std::vector<uint8_t>(rmaxst.begin(), rmaxst.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} LD1125F Refresh Rate
|
||||
id: LD1125F_utons
|
||||
icon: "mdi:refresh"
|
||||
entity_category: config
|
||||
optimistic: true
|
||||
unit_of_measurement: ms
|
||||
restore_value: true
|
||||
initial_value: "100"
|
||||
min_value: 100
|
||||
max_value: 5000
|
||||
step: 50
|
||||
set_action:
|
||||
then:
|
||||
- uart.write:
|
||||
id: LD1125F_UART_BUS
|
||||
data: !lambda |-
|
||||
std::string utonsst = "utons=" + std::to_string(x) + "\r\n";
|
||||
return std::vector<uint8_t>(utonsst.begin(), utonsst.end());
|
||||
- delay: 100ms
|
||||
- uart.write: # save
|
||||
id: LD1125F_UART_BUS
|
||||
data: "save\r\n"
|
||||
- platform: template
|
||||
name: ${upper_devicename} Clearence Time
|
||||
id: LD1125F_Clear_Time
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "5" #LD1125F Mov/Occ > Clearence Time Here
|
||||
min_value: 0.5
|
||||
max_value: 20
|
||||
step: 0.5
|
||||
- platform: template
|
||||
name: ${upper_devicename} Movement Time
|
||||
id: LD1125F_Mov_Time
|
||||
icon: "mdi:cogs"
|
||||
optimistic: true
|
||||
entity_category: config
|
||||
restore_value: true #If you don't want to store the setting at ESP, set it to false.
|
||||
initial_value: "1" #LD1125F Mov > Occ Time Here
|
||||
min_value: 0.5
|
||||
max_value: 10
|
||||
step: 0.5
|
||||
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
sensor main page: https://docs.screek.io/l12
|
||||
|
||||
The ld2412 library is heavily based on @sebcaps’ ld2410 library. Many thanks to him for his outstanding work.
|
||||
We would also like to express our gratitude to all the users who participated in the early testing of the L12 sensor.
|
||||
|
||||
We are excited to have developed a new DIY sensor together.
|
||||
|
|
@ -1,236 +0,0 @@
|
|||
esphome:
|
||||
name: screek-human-sensor-l12
|
||||
comment: Screek Human Sensor L12
|
||||
friendly_name: Human Sensor L12
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
project:
|
||||
name: SCREEK.Human Sensor L12
|
||||
version: 25.12.21-B
|
||||
|
||||
logger:
|
||||
# level: VERY_VERBOSE
|
||||
# level: DEBUG
|
||||
|
||||
preferences:
|
||||
flash_write_interval: 5s
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_l12
|
||||
ref: main
|
||||
components: [ld2412]
|
||||
|
||||
esp32:
|
||||
board: lolin_c3_mini
|
||||
framework:
|
||||
type: esp-idf
|
||||
globals:
|
||||
- id: last_illuminance
|
||||
type: float
|
||||
restore_value: no
|
||||
initial_value: "-1"
|
||||
|
||||
improv_serial:
|
||||
|
||||
debug:
|
||||
update_interval: 30s
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
# encryption:
|
||||
# use you own password
|
||||
# key: "your-api-key"
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "your-ota-password"
|
||||
|
||||
safe_mode:
|
||||
disabled: true
|
||||
|
||||
wifi:
|
||||
# output_power: 15dB
|
||||
power_save_mode: LIGHT
|
||||
# power_save_mode: NONE
|
||||
reboot_timeout: 10min
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR L12"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
name: "SCREEK Version"
|
||||
id: screek_version
|
||||
icon: mdi:information-outline
|
||||
entity_category: "diagnostic"
|
||||
update_interval: never
|
||||
- platform: debug
|
||||
reset_reason:
|
||||
name: "ESP Reset Reason"
|
||||
icon: mdi:anchor
|
||||
disabled_by_default: True
|
||||
- platform: wifi_info
|
||||
ip_address:
|
||||
name: ESP IP Address
|
||||
entity_category: "diagnostic"
|
||||
disabled_by_default: True
|
||||
icon: mdi:ip-network
|
||||
mac_address:
|
||||
name: ESP MAC
|
||||
entity_category: "diagnostic"
|
||||
icon: mdi:ip-network
|
||||
disabled_by_default: True
|
||||
- platform: ld2412
|
||||
version:
|
||||
name: LD2412 FM Version
|
||||
id: ld2412_fm_version
|
||||
mac_address:
|
||||
name: LD2412 Mac
|
||||
id: ld2412_mac
|
||||
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: ld2412
|
||||
has_target:
|
||||
name: Presence
|
||||
has_moving_target:
|
||||
name: Moving Target
|
||||
has_still_target:
|
||||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: internal_temperature
|
||||
name: "ESP Temperature"
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 30s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: ESP Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 60s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 60s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 60s
|
||||
- platform: ld2412
|
||||
moving_distance:
|
||||
name : Moving Distance
|
||||
id: moving_distance
|
||||
still_distance:
|
||||
name: Still Distance
|
||||
id: still_distance
|
||||
moving_energy:
|
||||
name: Move Energy
|
||||
still_energy:
|
||||
name: Still Energy
|
||||
luminance:
|
||||
name: luminance
|
||||
|
||||
light:
|
||||
- platform: status_led
|
||||
name: sys_status
|
||||
pin:
|
||||
number: GPIO13
|
||||
ignore_pin_validation_error: true
|
||||
internal: True
|
||||
restore_mode: ALWAYS_OFF
|
||||
- platform: binary
|
||||
name: "Red Info Light"
|
||||
output: board_info_ed
|
||||
entity_category: diagnostic
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: time_now
|
||||
|
||||
output:
|
||||
- platform: gpio
|
||||
id: board_info_ed
|
||||
pin:
|
||||
number: GPIO12
|
||||
ignore_pin_validation_error: true
|
||||
|
||||
switch:
|
||||
- platform: factory_reset
|
||||
name: "L12 Factory Reset"
|
||||
disabled_by_default: True
|
||||
icon: mdi:heart-broken
|
||||
entity_category: diagnostic
|
||||
|
||||
button:
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
entity_category: diagnostic
|
||||
- platform: template
|
||||
name: "LD2412 BLE Enable"
|
||||
# disabled_by_default: True
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412_radar) -> ble_control(true);
|
||||
- platform: template
|
||||
name: "LD2412 BLE Disable"
|
||||
# disabled_by_default: True
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth-off
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412_radar) -> ble_control(false);
|
||||
- platform: template
|
||||
name: "LD2412 Reboot"
|
||||
icon: mdi:radar
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412_radar) -> reboot();
|
||||
- platform: template
|
||||
name: "LD2412 Factory Reset"
|
||||
icon: mdi:restart
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
- lambda: |-
|
||||
id(ld2412_radar) -> factoryReset();
|
||||
|
||||
uart:
|
||||
id: uart_bus
|
||||
tx_pin:
|
||||
number: GPIO11
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
rx_pin:
|
||||
number: GPIO7
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
baud_rate: 115200
|
||||
parity: NONE
|
||||
stop_bits: 1
|
||||
data_bits: 8
|
||||
|
||||
ld2412:
|
||||
id: ld2412_radar
|
||||
|
|
@ -1,272 +0,0 @@
|
|||
esphome:
|
||||
name: screek-human-sensor-l12
|
||||
comment: Screek Human Sensor L12
|
||||
friendly_name: Human Sensor L12
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
project:
|
||||
name: Screek.Human_Presence_Sensor
|
||||
version: L12
|
||||
on_boot:
|
||||
- priority: 100
|
||||
then:
|
||||
lambda: |-
|
||||
id(cpu_speed) = ESP.getCpuFreqMHz();
|
||||
- priority: 300
|
||||
then:
|
||||
lambda: |-
|
||||
id(screek_version).publish_state("BETA_V240712_2");
|
||||
|
||||
logger:
|
||||
# level: VERY_VERBOSE
|
||||
# level: DEBUG
|
||||
|
||||
preferences:
|
||||
flash_write_interval: 5s
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_l12
|
||||
ref: main
|
||||
components: [uart, ld2412]
|
||||
|
||||
esp32:
|
||||
board: lolin_c3_mini
|
||||
framework:
|
||||
type: arduino
|
||||
version: 2.0.9
|
||||
platform_version: 6.3.0
|
||||
|
||||
globals:
|
||||
- id: cpu_speed
|
||||
type: int
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: last_update_ld2450
|
||||
type: unsigned long
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: init_zone_publish
|
||||
type: bool
|
||||
restore_value: no
|
||||
initial_value: "false"
|
||||
- id: last_illuminance
|
||||
type: float
|
||||
restore_value: no
|
||||
initial_value: "-1"
|
||||
|
||||
improv_serial:
|
||||
|
||||
debug:
|
||||
update_interval: 30s
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
# encryption:
|
||||
# use you own password
|
||||
# key: "your-api-key"
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "your-ota-password"
|
||||
|
||||
safe_mode:
|
||||
disabled: true
|
||||
|
||||
wifi:
|
||||
# output_power: 15dB
|
||||
power_save_mode: LIGHT
|
||||
# power_save_mode: NONE
|
||||
reboot_timeout: 10min
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR L12"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
name: "SCREEK Version"
|
||||
id: screek_version
|
||||
icon: mdi:information-outline
|
||||
entity_category: "diagnostic"
|
||||
update_interval: never
|
||||
- platform: debug
|
||||
reset_reason:
|
||||
name: "ESP Reset Reason"
|
||||
icon: mdi:anchor
|
||||
disabled_by_default: True
|
||||
- platform: wifi_info
|
||||
ip_address:
|
||||
name: ESP IP Address
|
||||
entity_category: "diagnostic"
|
||||
disabled_by_default: True
|
||||
icon: mdi:ip-network
|
||||
mac_address:
|
||||
name: ESP MAC
|
||||
entity_category: "diagnostic"
|
||||
icon: mdi:ip-network
|
||||
disabled_by_default: True
|
||||
- platform: ld2412
|
||||
version:
|
||||
name: LD2412 FM Version
|
||||
id: ld2412_fm_version
|
||||
mac_address:
|
||||
name: LD2412 Mac
|
||||
id: ld2412_mac
|
||||
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: ld2412
|
||||
has_target:
|
||||
name: Presence
|
||||
has_moving_target:
|
||||
name: Moving Target
|
||||
has_still_target:
|
||||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: template
|
||||
name: "ESP CPU Speed"
|
||||
accuracy_decimals: 0
|
||||
icon: mdi:cpu-32-bit
|
||||
unit_of_measurement: Mhz
|
||||
disabled_by_default: True
|
||||
lambda: |-
|
||||
return (id(cpu_speed));
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 600s
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 45s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: ESP Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 60s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 60s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 60s
|
||||
- platform: ld2412
|
||||
moving_distance:
|
||||
name : Moving Distance
|
||||
id: moving_distance
|
||||
still_distance:
|
||||
name: Still Distance
|
||||
id: still_distance
|
||||
moving_energy:
|
||||
name: Move Energy
|
||||
still_energy:
|
||||
name: Still Energy
|
||||
luminance:
|
||||
name: luminance
|
||||
|
||||
light:
|
||||
- platform: status_led
|
||||
name: sys_status
|
||||
pin:
|
||||
number: GPIO13
|
||||
ignore_pin_validation_error: true
|
||||
internal: True
|
||||
restore_mode: ALWAYS_OFF
|
||||
- platform: binary
|
||||
name: "Red Info Light"
|
||||
output: board_info_ed
|
||||
entity_category: diagnostic
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: time_now
|
||||
|
||||
output:
|
||||
- platform: gpio
|
||||
id: board_info_ed
|
||||
pin:
|
||||
number: GPIO12
|
||||
ignore_pin_validation_error: true
|
||||
|
||||
switch:
|
||||
- platform: factory_reset
|
||||
name: "L12 Factory Reset"
|
||||
disabled_by_default: True
|
||||
icon: mdi:heart-broken
|
||||
entity_category: diagnostic
|
||||
|
||||
button:
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
entity_category: diagnostic
|
||||
- platform: template
|
||||
name: "LD2412 BLE Enable"
|
||||
# disabled_by_default: True
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412_radar) -> ble_control(true);
|
||||
- platform: template
|
||||
name: "LD2412 BLE Disable"
|
||||
# disabled_by_default: True
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth-off
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412_radar) -> ble_control(false);
|
||||
- platform: template
|
||||
name: "LD2412 Reboot"
|
||||
icon: mdi:radar
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412_radar) -> reboot();
|
||||
- platform: template
|
||||
name: "LD2412 Factory Reset"
|
||||
icon: mdi:restart
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
- lambda: |-
|
||||
id(ld2412_radar) -> factoryReset();
|
||||
|
||||
uart:
|
||||
id: uart_bus
|
||||
tx_pin:
|
||||
number: GPIO11
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
rx_pin:
|
||||
number: GPIO7
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
baud_rate: 115200
|
||||
parity: NONE
|
||||
stop_bits: 1
|
||||
data_bits: 8
|
||||
|
||||
ld2412:
|
||||
id: ld2412_radar
|
||||
|
|
@ -1,292 +0,0 @@
|
|||
esphome:
|
||||
name: screek-human-sensor-l13
|
||||
comment: Screek Human Sensor L13
|
||||
friendly_name: Human Sensor L13
|
||||
name_add_mac_suffix: True
|
||||
platformio_options:
|
||||
board_build.flash_mode: dio
|
||||
# board_build.f_cpu: 80000000L
|
||||
project:
|
||||
name: Screek.Human_Presence_Sensor
|
||||
version: L13
|
||||
on_boot:
|
||||
- priority: 1000
|
||||
then:
|
||||
- lambda: |-
|
||||
pinMode(2, OUTPUT);
|
||||
digitalWrite(2, LOW);
|
||||
delay(100);
|
||||
- priority: 100
|
||||
then:
|
||||
lambda: |-
|
||||
id(cpu_speed) = ESP.getCpuFreqMHz();
|
||||
|
||||
logger:
|
||||
# level: VERY_VERBOSE
|
||||
# level: DEBUG
|
||||
|
||||
preferences:
|
||||
flash_write_interval: 5s
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: git
|
||||
url: https://github.com/screekworkshop/custom_components_support_for_screek_l12
|
||||
ref: main
|
||||
components: [ld2412]
|
||||
|
||||
esp32:
|
||||
board: lolin_c3_mini
|
||||
framework:
|
||||
type: arduino
|
||||
# version: 2.0.9
|
||||
# platform_version: 6.3.0
|
||||
|
||||
globals:
|
||||
- id: cpu_speed
|
||||
type: int
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: last_update_ld2450
|
||||
type: unsigned long
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
- id: init_zone_publish
|
||||
type: bool
|
||||
restore_value: no
|
||||
initial_value: "false"
|
||||
- id: last_illuminance
|
||||
type: float
|
||||
restore_value: no
|
||||
initial_value: "-1"
|
||||
|
||||
improv_serial:
|
||||
|
||||
debug:
|
||||
update_interval: 30s
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
# encryption:
|
||||
# use you own password
|
||||
# key: "b1b1F1ArnSZmIvk7WLL9oG19gjPTCmBP1irQlSlSDGY="
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "your-ota-password"
|
||||
|
||||
safe_mode:
|
||||
disabled: true
|
||||
|
||||
wifi:
|
||||
# power_save_mode: LIGHT
|
||||
reboot_timeout: 10min
|
||||
ap:
|
||||
ssid: "HUMAN-SENSOR L13"
|
||||
|
||||
captive_portal:
|
||||
|
||||
web_server:
|
||||
port: 80
|
||||
|
||||
text_sensor:
|
||||
- platform: debug
|
||||
reset_reason:
|
||||
name: "ESP Reset Reason"
|
||||
icon: mdi:anchor
|
||||
disabled_by_default: True
|
||||
- platform: wifi_info
|
||||
ip_address:
|
||||
name: ESP IP Address
|
||||
entity_category: "diagnostic"
|
||||
disabled_by_default: True
|
||||
icon: mdi:ip-network
|
||||
mac_address:
|
||||
name: ESP MAC
|
||||
entity_category: "diagnostic"
|
||||
icon: mdi:ip-network
|
||||
disabled_by_default: True
|
||||
- platform: ld2412
|
||||
version:
|
||||
name: LD2412S FM Version
|
||||
id: ld2412_fm_version
|
||||
mac_address:
|
||||
name: LD2412S Mac
|
||||
id: ld2412_mac
|
||||
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: Online
|
||||
id: ink_ha_connected
|
||||
- platform: ld2412
|
||||
has_target:
|
||||
name: Presence
|
||||
has_moving_target:
|
||||
name: Moving Target
|
||||
has_still_target:
|
||||
name: Still Target
|
||||
|
||||
sensor:
|
||||
- platform: template
|
||||
name: "ESP CPU Speed"
|
||||
accuracy_decimals: 0
|
||||
icon: mdi:cpu-32-bit
|
||||
unit_of_measurement: Mhz
|
||||
disabled_by_default: True
|
||||
lambda: |-
|
||||
return (id(cpu_speed));
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 600s
|
||||
- platform: template
|
||||
id: sys_esp_temperature
|
||||
name: ESP Temperature
|
||||
lambda: return temperatureRead();
|
||||
unit_of_measurement: °C
|
||||
device_class: TEMPERATURE
|
||||
update_interval: 45s
|
||||
entity_category: "diagnostic"
|
||||
- platform: uptime
|
||||
name: ESP Uptime
|
||||
id: sys_uptime
|
||||
update_interval: 60s
|
||||
- platform: wifi_signal
|
||||
name: RSSI
|
||||
id: wifi_signal_db
|
||||
update_interval: 60s
|
||||
entity_category: "diagnostic"
|
||||
- platform: template
|
||||
id: esp_memory
|
||||
icon: mdi:memory
|
||||
name: ESP Free Memory
|
||||
lambda: return heap_caps_get_free_size(MALLOC_CAP_INTERNAL) / 1024;
|
||||
unit_of_measurement: 'kB'
|
||||
state_class: measurement
|
||||
entity_category: "diagnostic"
|
||||
update_interval: 60s
|
||||
- platform: ld2412
|
||||
moving_distance:
|
||||
name : Moving Distance
|
||||
id: moving_distance
|
||||
still_distance:
|
||||
name: Still Distance
|
||||
id: still_distance
|
||||
moving_energy:
|
||||
name: Move Energy
|
||||
still_energy:
|
||||
name: Still Energy
|
||||
luminance:
|
||||
name: LD2412S luminance
|
||||
entity_category: diagnostic
|
||||
- platform: bh1750
|
||||
name: "BH1750 Illuminance"
|
||||
address: 0x23
|
||||
update_interval: 1s
|
||||
|
||||
light:
|
||||
- platform: status_led
|
||||
name: sys_status
|
||||
pin:
|
||||
number: GPIO13
|
||||
ignore_pin_validation_error: True
|
||||
internal: True
|
||||
restore_mode: ALWAYS_OFF
|
||||
- platform: binary
|
||||
name: "Red Info Light"
|
||||
output: board_info_ed
|
||||
entity_category: diagnostic
|
||||
restore_mode: ALWAYS_OFF
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: time_now
|
||||
|
||||
output:
|
||||
- platform: gpio
|
||||
id: board_info_ed
|
||||
pin:
|
||||
number: GPIO12
|
||||
ignore_pin_validation_error: True
|
||||
|
||||
esp32_improv:
|
||||
authorizer: none
|
||||
on_start:
|
||||
then:
|
||||
- logger.log: "Improv awaiting authorization/authorized"
|
||||
on_provisioned:
|
||||
then:
|
||||
- logger.log: "Improv provisioned"
|
||||
on_provisioning:
|
||||
then:
|
||||
- logger.log: "Improv provisioning"
|
||||
on_stop:
|
||||
then:
|
||||
- logger.log: "Improv stopped"
|
||||
|
||||
switch:
|
||||
- platform: factory_reset
|
||||
name: "L13 Factory Reset" # 或许最好把雷达模块也重新初始化
|
||||
disabled_by_default: True
|
||||
icon: mdi:heart-broken
|
||||
entity_category: diagnostic
|
||||
|
||||
button:
|
||||
- platform: restart
|
||||
icon: mdi:power-cycle
|
||||
name: "ESP Reboot"
|
||||
entity_category: diagnostic
|
||||
- platform: template
|
||||
name: "LD2412S BLE Enable"
|
||||
# disabled_by_default: True
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412s_radar) -> ble_control(true);
|
||||
- platform: template
|
||||
name: "LD2412S BLE Disable"
|
||||
# disabled_by_default: True
|
||||
entity_category: "config"
|
||||
icon: mdi:bluetooth-off
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412s_radar) -> ble_control(false);
|
||||
- platform: template
|
||||
name: "LD2412S Reboot"
|
||||
icon: mdi:radar
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
lambda: |-
|
||||
id(ld2412s_radar) -> reboot();
|
||||
- platform: template
|
||||
name: "LD2412S Factory Reset"
|
||||
icon: mdi:restart
|
||||
entity_category: "config"
|
||||
on_press:
|
||||
- lambda: |-
|
||||
id(ld2412s_radar) -> factoryReset();
|
||||
|
||||
uart:
|
||||
id: uart_bus
|
||||
tx_pin:
|
||||
number: GPIO11
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
rx_pin:
|
||||
number: GPIO7
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
baud_rate: 115200
|
||||
parity: NONE
|
||||
stop_bits: 1
|
||||
data_bits: 8
|
||||
|
||||
i2c:
|
||||
sda: 10
|
||||
scl: 3
|
||||
scan: True
|
||||
|
||||
ld2412:
|
||||
id: ld2412s_radar
|
||||
Loading…
Reference in New Issue
Block a user