Logarithme et puissance pour un filtre de capteur

salut, je cherche a faire un calcule a base de logarithme et puissance pour un filtre de capteur et je ne trouve pas l’ecriture ?

substitutions:
  y: '-0.58'
  ra: '55773'
  la: '1'
sensor:
  - platform: adc
    id: source_sensor
    pin: A0
    update_interval: 20s
  - platform: resistance
    sensor: source_sensor
    configuration: DOWNSTREAM
    resistor: 50kOhm
    name: LDR

ma fomule a utiliser :
=PUISSANCE(10; LOG(la)-(LOG(ra/LDR)/y))

Il aurait fallu utiliser un sensor template et mettre une formule dans le code jinja2. Malheureusement, sauf erreur le jinja2 ne supporte pas les log. Je crains qu’il faille soit trouver une autre formule avec des opérateurs de base, soit écrire du python (script visible alors comme un service). Mais je n’ai pas creusé cette voie.

oui, je voudrais traiter le calcul directement dans l’esp, je vais regarder coté calcule externe

Si tu utilises EPSHome (c’est le cas?), tu peux faire le calcul dans l’ESP : écrire du code lambda (c++) et appeler une fonction de log.

effectivement c’est vers la que je cherche, ca donnerais quelque chose comme ca :

float resLux(float ra, float la, float r, float y) {
  return (pow(10,(log10(la)-(log10(ra/r)/y))))
}

Je vais chercher des exemple de l’application (pas encore fait ça ) a moins que tu ais des exemples (toujours le plus difficile a trouver :wink:

Malheureusement non, pas d’exemples. Après, dans l’ESP tu devrais pouvoir déclarer tes sensors ou variables et les référencer avec des ID. Puis dans le lambda du sensor qui retourne le résultat, réutiliser ces ID. Il n’y aurait alors pas besoins d’une fonction avec passage de paramètres. L’utilisation dans le lambda sera alors id(monID).state

Ok ca marche, merci

Du coups le code pour LDR sur esp8266 :

sensor:
  - platform: adc
    id: source_sensor
    pin: A0
    update_interval: 120s
    name: "Uc"
    filters:
      - multiply: 3
    
  - platform: resistance
    sensor: source_sensor
    configuration: DOWNSTREAM
    resistor: 50kOhm
    name: Resistance
    id: res
    
  - platform: template
    name: Lux
    update_interval: 120s
    lambda: !lambda |-
      return (pow(10,(log10(1)-(log10(55773/id(res).state)/-0.58))));

ps 55773, c’est la valeur de la résistance de la ldr a 1lux (log(1) et -0.58 c’est la valeur gamma

le :

    filters:
      - multiply: 3

est pour corriger une erreur dans la mesure de tension, autrement dit pour calibrer l’adc

Parfait !!! Tu peux rajouter le nombre de décimal retourné par le sensor lux (occurracy-decimals), l’unité de mesure (unit_of_mesurement) et l’icone. Il est toujours mieux de préciser le state_class et le device-class pour être compatible avec la gestion d’historiques long terme de HA (tables statistics).

C’est pour une mesure d’intensité lumineuse en lux ?

les grand esprits … ;-p

  - platform: template
    name: Lux
    unit_of_measurement: lux
    device_class : illuminance
    state_class: measurement
    accuracy_decimals: 1
    update_interval: 120s
    lambda: !lambda |-
      return (pow(10,(log10(1)-(log10(55773/id(res).state)/-0.58))));

Fait hier soir en constatant le résultat sur HA

oui, cette esp vas gérer
un moteur pap de portail mais j’aime pas laisser des pin non utilisé, du coups :

  • capteur fin de course ouvert et fermé
  • capteur lux
  • BME680
  • steper
    -UART
1 « J'aime »

Salut :wave:,

Merci de participer sur le forum :+1:

:information_source: Le forum dispose de catégories afin de renforcer le référencement des sujets.

Nous avons déplacé ton sujet dan #entraide-home-assistant car nous estimions qu’il n’était pas dans la bonne catégorie.

Si tu as un doute la prochaine fois, n’hésite pas à mentionner les @Moderateur.

L’équipe HACF.

:hacf:

pas de problème même s’il n’y a ici que du esphome :wink: