Je viens de publier un nouvel article sur notre portail.
Venez le découvrir dès maintenant !
Merci pour vos commentaires et retours.
Bonne lecture !
Je viens de publier un nouvel article sur notre portail.
Venez le découvrir dès maintenant !
Merci pour vos commentaires et retours.
Bonne lecture !
Salut
Excellent article et très bien documenté
Vincèn
Super taf @freetronic et @Gael
sorry j’ai pas eu le temps de lire avant la publication
Mais c’est toujours un super travail donc j’avais pas trop de soucis sur la version final
la c’est pas moi, juste @freetronic
J’ai juste survolé l’article rapidement et, franchement, il me tarde de me poser pour le lire.
Merci d’avance pour cette lecture qui, en ce moment, occupe une partie de mon temps libre.
Bonjour,
tu ne parles pas du mode engineering et du capteur de lumière sur le LD2410. A moins que j’ai mal lu.
Je le trouve pratique quand on n’a pas de capteur de luminosité, pour faire des scenarios.
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
on_boot:
then:
- switch.turn_on: engineering_mode_on
sensor:
- platform: ld2410
light: #intensité lumineuse
name: light
id: lightintensite
switch:
- platform: ld2410
engineering_mode:
name: engineering mode
id: engineering_mode_on
entity_category: "diagnostic"
- platform: ld2410
has_target: #Présence
name: Presence
on_press:
- if:
condition:
lambda: return id(lightintensite).state < 95;
then:
- homeassistant.action:
action: light.turn_on
data:
entity_id: light.0x00158d000501ccd9
on_release:
- if:
condition:
text_sensor.state:
id: hotteaspirante
state: 'off'
then:
- homeassistant.action:
action: light.turn_off
data:
entity_id: light.0x00158d000501ccd9
Hello,
J’en parle très succinctement, merci du complément
Le ld2410 a un capteur de luminosité intégré, mais, il ne fonctionne qu’en mode engineering
cdt
Re,
Bon maintenant que c’est la fin du week, et que vous aurez moins de temps, vous êtes parés pour la suite qui arrive? on a posé les bases avec les détections de présence, et on va se servir de cette détection… on va gentiment monter dans les tours d’ici quelques temps avec cette suite dont je tairai la fonction… (il faut garder un peu de suspens )
Alors il est pas beau mon teasing?
A vos ESP, prêts, partez!!!
cdt
non, pas ça, y a trop de suspens maintenant, a quoi pourrait bien servir la présence ???
A détecter la fin du cycle de la machine à laver ?
Hello,
Beeep !! non, merci d’avoir jouer avec nous
cdt
Re,
Et voilà maintenant vous connaissez la suite [Article] Notifications dynamiques en fonction de la pièce occupée
bonne lecture
cdt
Re,
**Attention je viens de me rendre compte que le schéma de câblage du 1750 sur le gif est faux, il faut bien prendre le schéma en image en dessous ( le même que dans l’article ) **
gif corrigé
cdt
Refais le gif et change-le
Re,
Oui c’est dans la todo, mais j’ai mis une rustine en attendant
Re,
Voilà c’est corrigé dans l’article et j’ai complété le message au dessus avec le bon gif
cdt
Re,
Si ça intéresse du monde je me suis penché sur une custom:button-card, avec les infos cliquable pour les esp
Je ne sais pas si j’ai le meilleur code du monde mais c’est fonctionnel
wifi 3 couleurs fixes vert orange rouge, suivant la valeur
température mesurée via capteur, 5 couleurs suivant la valeur
uptime tjs en blanc
température interne esp 3 couleurs vert fixe orange fixe rouge cligotant, suivant la valeur
lux mesurée via capteur 3 couleurs fixes noir jaune blanc de plus sombre au plus lumineux
detection radar via 2010 vert fixe rouge clignotant avec changement d’icone status vert si connecté, orange clignotant si unavailable rouge clignotant si off 3 icones
memoire dispo sur l’esp vert, orange rouge clignotant suivant la valeur
Le code est un peu copieux par contre, et je n’ai pas la version finale sur ma page surveillance matérielle
type: custom:button-card
name: Entree1
show_name: false
styles:
card:
- background: rgba(var(--rgb-secondary-text-color), 0.2) !important
- padding: 0px
- border-radius: 15px !important
- box-shadow: none
grid:
- grid-template-areas: |
"name wifi temp uptime intern_temp"
"name lux radar status mem"
- grid-template-columns: 80px 0.54fr 0.43fr 1.0fr 0.43fr
- grid-template-rows: auto auto
custom_fields:
name: |
[[[
return `<div style="text-align:left; font-size:12px; font-weight:bold; padding:2px 8px; display:flex; align-items:center; white-space:nowrap;">Entree1</div>`;
]]]
wifi:
card:
type: custom:button-card
entity: sensor.esp1_entree_wifi_signal_strength
icon: mdi:wifi
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
color: |
[[[
const s = states['sensor.esp1_entree_wifi_signal_strength'];
if (!s || s.state === 'unavailable') return "grey";
const value = parseInt(s.state);
return value <= -70 ? "red" : value <= -55 ? "orange" : "green";
]]]
state_display: |
[[[
const s = states['sensor.esp1_entree_wifi_signal_strength'];
if (!s || s.state === 'unavailable') return "N/A";
return Math.round(parseFloat(s.state)) + "dB";
]]]
styles:
card:
- box-shadow: none
- background: rgba(0,0,0,0.5)
- border-radius: 10px
- padding: 0px 2px
- cursor: pointer
- height: 20px
- min-height: 22px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
state:
- font-size: 12px
- font-weight: bold
- white-space: nowrap
temp:
card:
type: custom:button-card
entity: sensor.esp1_entree_temperature1
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: |
[[[
return "mdi:thermometer";
]]]
color: |
[[[
const s = states['sensor.esp1_entree_temperature1'];
if (!s || s.state === 'unavailable') return "grey";
const value = parseFloat(s.state);
if (value <= 15) return "skyblue";
else if (value <= 20) return "green";
else if (value <= 25) return "orange";
else if (value <= 29) return "red";
else return "brown";
]]]
state_display: |
[[[
const s = states['sensor.esp1_entree_temperature1'];
if (!s || s.state === 'unavailable') return "N/A";
return parseFloat(s.state).toFixed(1) + "°";
]]]
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 4px
- padding: 1px 2px
- cursor: pointer
- height: 24px
- min-height: 24px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
- animation: |
[[[
const s = states['sensor.esp1_entree_temperature1'];
if (!s || s.state === 'unavailable') return "none";
const value = parseFloat(s.state);
return value >= 65 ? "blink 1s infinite" : "none";
]]]
state:
- font-size: 12px
- font-weight: bold
uptime:
card:
type: custom:button-card
entity: sensor.esp1_entree_uptime_jours_heures_et_minutes
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: mdi:timer-outline
color: white
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 6px
- padding: 2px
- cursor: pointer
- height: 28px
- min-height: 28px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 4px
state:
- font-size: 12px
- font-weight: bold
intern_temp:
card:
type: custom:button-card
entity: sensor.esp1_entree_intern_temp
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: |
[[[
return "mdi:thermometer";
]]]
color: |
[[[
const s = states['sensor.esp1_entree_intern_temp'];
if (!s || s.state === 'unavailable') return "grey";
const value = parseFloat(s.state);
return value >= 65 ? "red" : value >= 50 ? "orange" : "green";
]]]
state_display: |
[[[
const s = states['sensor.esp1_entree_intern_temp'];
if (!s || s.state === 'unavailable') return "N/A";
return parseFloat(s.state).toFixed(1) + "°";
]]]
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 4px
- padding: 1px 2px
- cursor: pointer
- height: 24px
- min-height: 24px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
- animation: |
[[[
const s = states['sensor.esp1_entree_intern_temp'];
if (!s || s.state === 'unavailable') return "none";
const value = parseFloat(s.state);
return value >= 65 ? "blink 1s infinite" : "none";
]]]
state:
- font-size: 12px
- font-weight: bold
lux:
card:
type: custom:button-card
entity: sensor.esp1_entree_lumiere1
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: mdi:brightness-5
color: |
[[[
const s = states['sensor.esp1_entree_lumiere1'];
if (!s || s.state === 'unavailable') return "grey";
const value = parseInt(s.state);
return value <= 100 ? "black" : value <= 200 ? "yellow" : "white";
]]]
state_display: |
[[[
const s = states['sensor.esp1_entree_lumiere1'];
if (!s || s.state === 'unavailable') return "N/A";
return Math.round(parseInt(s.state)) + "lux";
]]]
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 4px
- padding: 1px 2px
- cursor: pointer
- height: 24px
- min-height: 24px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
state:
- font-size: 12px
- font-weight: bold
radar:
card:
type: custom:button-card
entity: binary_sensor.esp1_entree_radar_target
show_state: false
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: |
[[[
const s = states['binary_sensor.esp1_entree_radar_target'];
if (!s || s.state === 'unavailable') return "mdi:help-network-outline";
return s.state === 'on' ? "mdi:account-alert" : "mdi:account";
]]]
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 4px
- padding: 1px 2px
- cursor: pointer
- height: 24px
- min-height: 24px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
- color: |
[[[
const s = states['binary_sensor.esp1_entree_radar_target'];
if (!s || s.state === 'unavailable') return "grey";
return s.state === 'on' ? "red" : "green";
]]]
- animation: |
[[[
const s = states['binary_sensor.esp1_entree_radar_target'];
if (!s || s.state === 'unavailable' || s.state === 'off') return "none";
return "blink 1s infinite";
]]]
status:
card:
type: custom:button-card
entity: binary_sensor.esp1_entree_status
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: |
[[[
const s = states['binary_sensor.esp1_entree_status'];
if (!s || s.state === 'unavailable') return "mdi:help-network-outline";
return s.state === 'on' ? "mdi:check-network-outline" : "mdi:close-network-outline";
]]]
state_display: |
[[[
const s = states['binary_sensor.esp1_entree_status'];
if (!s || s.state === 'unavailable') return "Inconnu";
return s.state === 'on' ? 'Connecté' : 'Hors ligne';
]]]
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 4px
- padding: 1px 2px
- cursor: pointer
- height: 24px
- min-height: 24px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
- color: |
[[[
const s = states['binary_sensor.esp1_entree_status'];
if (!s || s.state === 'unavailable') return "orange";
return s.state === 'on' ? "green" : "red";
]]]
- animation: |
[[[
const s = states['binary_sensor.esp1_entree_status'];
if (!s || s.state === 'unavailable' || s.state === 'off') return "blink 1s infinite";
return "none";
]]]
state:
- font-size: 12px
- font-weight: bold
mem:
card:
type: custom:button-card
entity: sensor.esp1_entree_esp_free_memory
show_state: true
show_name: false
show_icon: true
layout: icon_state
tap_action:
action: more-info
icon: mdi:memory
color: |
[[[
const s = states['sensor.esp1_entree_esp_free_memory'];
if (!s || s.state === 'unavailable') return "grey";
const value = parseInt(s.state);
return value < 80 ? "red" : value < 160 ? "orange" : "green";
]]]
state_display: |
[[[
const s = states['sensor.esp1_entree_esp_free_memory'];
if (!s || s.state === 'unavailable') return "N/A";
return Math.round(parseFloat(s.state)) + "KB";
]]]
styles:
card:
- box-shadow: none
- background: transparent
- border-radius: 4px
- padding: 1px 2px
- cursor: pointer
- height: 24px
- min-height: 24px
- display: flex
- align-items: center
- justify-content: flex-start
icon:
- width: 17px
- height: 17px
- margin-right: 3px
- animation: |
[[[
const s = states['sensor.esp1_entree_esp_free_memory'];
if (!s || s.state === 'unavailable') return "none";
const value = parseInt(s.state);
return value < 80 ? "blink 1s infinite" : "none";
]]]
state:
- font-size: 12px
- font-weight: bold
cdt