je désactive l’affichage des targets pour voir et je posterais le résultat
merci pour l’info je regarde cela de plus prêt
@jerome6994
quand tu parles du firmeware, est-ce que tu parles de 1 ou de 2 ?
je ne trouve pas le champs Firmware
Je viens de mettre à jour mon github pour corriger le problème qu’ont rencontré @jerome6994 et @iGil
Et merci encore à @WarC0zes pour avoir clarifié l’écriture automatique des IDs
Je ne reposte pas ici le code pour éviter des lourdeurs de lecture
voila j’ai tester en désactivant target enable mais du coup ma lumière met une plombe a s’allumée
Je comprends pas la logique de ce qui t’arrive…
Il te reste à essayer le lien de WarC0zes. Ou de revenir à l’ancienne version.
J’y ai encore réfléchis et je résume :
- Avec le code « à plat », tu avais déjà des faux positifs
- Avec le code « à 45° » :
- Avec l’affichage des cibles actif, tu as plus de faux positifs
- En rebootant l’esp tu réduis les faux positifs
- Avec l’affichage des cibles inactif, tu n’as plus de faux positifs mais une détection ralentie
Et si tu essayais avec un (ou deux) autre ESP ? Et si tu peux tester avec un autre LD2450 ?
je n’ai plus de ld2450 pour tester, mais j’ai dégager mon frigo d’une zone peut être que ca venais de la, encore une fois difficile de voir d’où viens la faux positif… ou alors dans les log on sait voir l’endroit exact qui a déclenché le target ( je n’ai pas creusé)
pour le lien de WarC0zes, mon papa planche dessus mais a première vue ce n’est pas pour des esp 32 wroom mais j’attend sont retour.
Je pense que quelque chose sature dans mon esp car mon capteur de luminosité me sort une valeur farfelue toutes les x secondes.
Pour localiser le ou les faux positifs, il faut aller dans l’historique. Mais dans ce cas, il faut activer les cibles.
Ça va ressembler à peu près à ça :
Dans l’exemple ci dessus, mes cibles sont désactivées. Leurs courbes restent donc constantes. Mais chez toi, là où la zone devient active, les valeurs des cibles X et Y vont changer. Tu sauras alors la position à l’origine du faux positif.
Tu recommences cette opération pour chaque faux positif. Si la position est toujours sensiblement la même alors tu trouveras ce qui le déclenche. Ensuite tu mettras une zone d’exclusion à cette endroit et le tour est joué. (Attention les chats et les chiens peuvent êtres détectés)
Essai de le remplacer. Il y a de grande chance que ce soit lui la cause du problème.
yes tu as raison, mon esp était dead que c’est rapide maintenant
Trop content pour toi !
Salut Yannick,
Je déterre le point que tu évoques à l’époque à l’époque car je l’ai aussi chez moi malgré tous mes efforts. As-tu trouvé une solution de ton côté ?
J’ai peut-être une idée… Jusqu’ici le programme de détection de zone fonctionne en regardant l’une après l’autre chacune des zones à tester ; et si il y a une cible à l’intérieur il l’active sinon le minuteur qui lui est associé est alors déclenchée et quand il arrive à sa fin, la zone est alors réellement déclaré vide et il publie ces informations à Home assistant.
Mon idée serait de considérer une zone comme vide que s’il y a de l’activités autour de cette zone.
Mais cette idée à ses limites :
Par exemple il y a dans une même pièce deux personnes qui travaillent sur deux bureaux séparés avec chacun une ampoule connectée sur leur bureau et une zone pour chacun. L’un est plus tôt du style à bouger beaucoup et l’autre à rester immobile.
S’ils avaient été dans deux pièces séparées et mon idée associé à leur configuration, le problème était résolu. Mais dans leurs cas, la personne qui bouge va troubler la détection de la personne qui ne bouge pas et donc on revient au point de départ…
dans la doc, ca parle pas de limitation de board. Ta des options spécifique au esp32 ou esp8266, mais rien ne parle de ESP32 Wroom.
Le lien que j’ai mis d’un post de @Bob , il utiliser un esp32 wroom.
Salut à toi, alors pour l’instant pour contourner le probleme, j’ai ajouter un LD1125H sur le meuble tv qui pointe vers le canapé
Je me langui de prendre 5 min pour installer ton programme ESP Home
l’idée dont je t’ai parlé n’est encore qu’une réflexion. Je l’ai testé dans un proto mais ça ne marche pas.
Pour le LD1125H, peux-tu partagé le lien du code que tu as utilisé ?
Je fais une compilation des capteur à onde millimétrique de HLK ainsi que leurs codes sources
ld1125h
voici le code que j’utilise, j’ai pas paufiné les reglages
substitutions:
devicename: "ld1125htv" #Rename the device what you want.
upper_devicename: ld1125h tv #Rename the device what you want.
esphome:
name: $devicename
on_boot: #LD1125H Initial Setting
priority: -200
then:
- uart.write:
id: LD1125H_UART_BUS
data: !lambda |-
std::string th1st = "mth1=" + str_sprintf("%.0f",id(LD1125H_mth1).state) +"\r\n";
return std::vector<uint8_t>(th1st.begin(), th1st.end());
- uart.write:
id: LD1125H_UART_BUS
data: !lambda |-
std::string th2st = "mth2=" + str_sprintf("%.0f",id(LD1125H_mth2).state) +"\r\n";
return std::vector<uint8_t>(th2st.begin(), th2st.end());
- uart.write:
id: LD1125H_UART_BUS
data: !lambda |-
std::string th3st = "mth3=" + str_sprintf("%.0f",id(LD1125H_mth3).state) +"\r\n";
return std::vector<uint8_t>(th3st.begin(), th3st.end());
- uart.write:
id: LD1125H_UART_BUS
data: !lambda |-
std::string rmaxst = "rmax=" + str_sprintf("%.1f",id(LD1125H_rmax).state) +"\r\n";
return std::vector<uint8_t>(rmaxst.begin(), rmaxst.end());
esp32:
board: esp32dev
framework:
type: arduino #Suggest Use ESP-IDF Framework, or Plug Out the UART Cable Might Cause ESP32 Hang.
version: recommended
external_components:
- source:
type: git
url: https://github.com/ssieb/custom_components #Thanks for @ssieb components.
components: [ serial ]
logger:
level: DEBUG #You Can Use "INFO" Level
baud_rate: 0
api:
ota:
password: !secret ota_password
i2c:
sda: 21
scl: 22
id: bus_a
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: LIGHT
manual_ip:
# Set this to the IP of the ESP
static_ip: 10.20.1.53
# Set this to the IP address of the router. Often ends with .1
gateway: 10.20.1.1
# The subnet of the network. 255.255.255.0 works for most home networks.
subnet: 255.255.255.0
captive_portal:
web_server:
port: 80
uart:
id: LD1125H_UART_BUS
rx_pin: GPIO16 #For ESP32, you can use any pin, Recommend Use UART_2, Don't use UART_0, It might Cause Boot Fail or System Hang
tx_pin: GPIO17 #For ESP32, you can use any pin, Recommend Use UART_2, Don't use UART_0, It might Cause Boot Fail or System Hang
baud_rate: 115200
data_bits: 8
stop_bits: 1
parity: NONE
# debug:
# direction: BOTH
# dummy_receiver: false
# after:
# delimiter: "\n"
# sequence:
# - lambda: UARTDebug::log_string(direction, bytes);
globals:
- id: LD1125H_Last_Time
type: time_t
restore_value: no
initial_value: time(NULL)
- id: LD1125H_Last_Mov_Time
type: time_t
restore_value: no
initial_value: time(NULL)
- id: LD1125H_Clearence_Status
type: bool
restore_value: no
initial_value: "false"
status_led:
pin:
number: GPIO2 #ESP32 OnBroad LED
inverted: false
#web_server: #Avoid Using Web Server To Prevent Hang
# port: 80
interval:
- interval: 1s #Clearance Scan Time
setup_priority: -200
then:
lambda: |-
if ((time(NULL)-id(LD1125H_Last_Time))>id(LD1125H_Clear_Time).state) {
if ((id(LD1125H_Clearence_Status) == false) || (id(LD1125H_Occupancy).state != "Clearance")) {
id(LD1125H_Occupancy).publish_state("Clearance");
id(LD1125H_Clearence_Status) = true;
}
if (id(LD1125H_MovOcc_Binary).state == true) {
id(LD1125H_MovOcc_Binary).publish_state(false);
}
if (id(LD1125H_Mov_Binary).state == true) {
id(LD1125H_Mov_Binary).publish_state(false);
}
}
number:
- platform: template
name: ${upper_devicename} LD1125H mth1 #mth1 is 0~2.8m Sensitivity.
id: LD1125H_mth1
icon: "mdi:cogs"
optimistic: true
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: LD1125H_UART_BUS
data: !lambda |-
std::string th1st = "mth1=" + str_sprintf("%.0f",x) +"\r\n";
return std::vector<uint8_t>(th1st.begin(), th1st.end());
- platform: template
name: ${upper_devicename} LD1125H mth2 #mth2 is 2.8~8m Sensitivity.
id: LD1125H_mth2
icon: "mdi:cogs"
optimistic: true
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: LD1125H_UART_BUS
data: !lambda |-
std::string th2st = "mth2=" + str_sprintf("%.0f",x) +"\r\n";
return std::vector<uint8_t>(th2st.begin(), th2st.end());
- platform: template
name: ${upper_devicename} LD1125H mth3 #mth3 is above 8m Sensitivity.
id: LD1125H_mth3
icon: "mdi:cogs"
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: LD1125H_UART_BUS
data: !lambda |-
std::string th3st = "mth3=" + str_sprintf("%.0f",x) +"\r\n";
return std::vector<uint8_t>(th3st.begin(), th3st.end());
- platform: template
name: ${upper_devicename} LD1125H rmax #rmax is max detection distance.
id: LD1125H_rmax
icon: "mdi:cogs"
optimistic: true
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: LD1125H_UART_BUS
data: !lambda |-
std::string rmaxst = "rmax=" + str_sprintf("%.1f",x) +"\r\n";
return std::vector<uint8_t>(rmaxst.begin(), rmaxst.end());
- platform: template
name: ${upper_devicename} LD1125H Clearence Time
id: LD1125H_Clear_Time
icon: "mdi:cogs"
optimistic: true
restore_value: true #If you don't want to store the setting at ESP, set it to false.
initial_value: "5" #LD1125H Mov/Occ > Clearence Time Here
min_value: 0.5
max_value: 20
step: 0.5
- platform: template
name: ${upper_devicename} LD1125H Movement Time
id: LD1125H_Mov_Time
icon: "mdi:cogs"
optimistic: true
restore_value: true #If you don't want to store the setting at ESP, set it to false.
initial_value: "1" #LD1125H Mov > Occ Time Here
min_value: 0.5
max_value: 10
step: 0.5
sensor:
- platform: template
name: ${upper_devicename} LD1125H Distance
id: LD1125H_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: "Light Sensor"
address: 0x23
update_interval: 5s
text_sensor:
- platform: serial
uart_id: LD1125H_UART_BUS
name: ${upper_devicename} LD1125H UART Text
id: LD1125H_UART_Text
icon: "mdi:format-text"
internal: False #If Don't Want to See UART Receive Data, Set To True
on_value:
lambda: |-
if (id(LD1125H_UART_Text).state.substr(0,3) == "occ") {
id(LD1125H_Distance).publish_state(atof(id(LD1125H_UART_Text).state.substr(9).c_str()));
if ((time(NULL)-id(LD1125H_Last_Mov_Time))>id(LD1125H_Mov_Time).state) {
id(LD1125H_Occupancy).publish_state("Occupancy");
if (id(LD1125H_MovOcc_Binary).state == false) {
id(LD1125H_MovOcc_Binary).publish_state(true);
}
if (id(LD1125H_Mov_Binary).state == true) {
id(LD1125H_Mov_Binary).publish_state(false);
}
}
if (id(LD1125H_MovOcc_Binary).state == false) {
id(LD1125H_MovOcc_Binary).publish_state(true);
}
id(LD1125H_Last_Time) = time(NULL);
if (id(LD1125H_Clearence_Status) == true) {
id(LD1125H_Clearence_Status) = false;
}
}
else if (id(LD1125H_UART_Text).state.substr(0,3) == "mov") {
id(LD1125H_Distance).publish_state(atof(id(LD1125H_UART_Text).state.substr(9).c_str()));
id(LD1125H_Occupancy).publish_state("Movement");
if (id(LD1125H_MovOcc_Binary).state == false) {
id(LD1125H_MovOcc_Binary).publish_state(true);
}
if (id(LD1125H_Mov_Binary).state == false) {
id(LD1125H_Mov_Binary).publish_state(true);
}
id(LD1125H_Last_Mov_Time) = time(NULL);
id(LD1125H_Last_Time) = time(NULL);
if (id(LD1125H_Clearence_Status) == true) {
id(LD1125H_Clearence_Status) = false;
}
}
- platform: template
name: ${upper_devicename} LD1125H Occupancy Status
id: LD1125H_Occupancy
icon: "mdi:motion-sensor"
binary_sensor:
- platform: template
name: ${upper_devicename} LD1125H Occupancy or Movement
id: LD1125H_MovOcc_Binary
device_class: occupancy
- platform: template
name: ${upper_devicename} LD1125H Movement
id: LD1125H_Mov_Binary
device_class: motion
J’ai le plaisir de vous présenter une nouvelle version pour améliorer le comportement du ld2450 !
C’est la fonctionnalité dont nous parlions avec @Yannickinlive26
J’ai ajouté une options pour la zone 1 et 2. On l’active grâce à un interrupteur nommé Target must leave ZoneX
. Une fois activée, cette option change le comportement de la zone. Il faudra que la cible sorte de la zone pour qu’elle soit désactivée. Mais si la cible reste dans la zone sans bouger au point de ne plus être détecté, la zone restera active.
Voici un exemple de son utilisation la zone 1 n’a pas l’option activée, contrairement à la zone 2. J’ai réglé le Time Out à 5 secondes.
On voit bien sur la période affichée que la zone 1 se désactive beaucoup plus que la zone 2.
Bonjour et super travaille,
j’ai fait de copier/coller des code et au moment de compiler j’ai une erreur.
En effet, j’ai oublié de mettre à jour le fichier zone.h
L’erreur est maintenant corrigée. Remplace le fichier zone.h et le problème sera résolu.
Merci de ton retour
En effet, ça fonctionne mieux.
Par contre faut le mettre dans quel sens le détecteur.