Afficher sur LCD 2x16 La valeur de deux DS18B20

J’ai deux capteurs de temp sur le meme bus et je ne trouve pas la solution pour recuperer la valeur de ces deux capteurs pour les afficher sur un LCD


# Capteurs Temperature Air et Eau
dallas:
  - pin: 23

sensor:

- platform: dallas
  address: 0x8a3c01d607d30e28
  name: "Temperature Air"
- platform: dallas
  address: 0x713c01d607410428
  name: "Temperature Eau" 


# Example configuration entry
i2c:
  sda: GPIO21
  scl: GPIO22

display:
  - platform: lcd_pcf8574
    dimensions: 16x2
    address: 0x27
    lambda: |-
      it.print(0,0,"Temp Eau :");    
      it.print(0,1,"Temp Air :");


Sur mon dashboard , les temperatures sont bien affichées , c’est sur mon afficheur LCD que je n’y parviens pas.

Avez vous une piste ?

Ma configuration


[center]## System Information

version core-2023.5.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.11
os_name Linux
os_version 6.1.21-v8
arch aarch64
timezone Europe/London
config_dir /config
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 10.1
update_channel stable
supervisor_version supervisor-2023.04.1
agent_version 1.5.1
docker_version 23.0.3
disk_total 57.8 GB
disk_used 4.9 GB
healthy true
supported true
board rpi3-64
supervisor_api ok
version_api ok
installed_addons ESPHome (2023.5.3), File editor (5.6.0)
Dashboards
dashboards 1
resources 0
mode auto-gen
Recorder
oldest_recorder_run 23 mai 2023 à 20:35
current_recorder_run 24 mai 2023 à 16:50
estimated_db_size 0.51 MiB
database_engine sqlite
database_version 3.40.1
[/center]

Avec une recherche, tu tombes sur un sujet, par exe Ecran OLED et Polices ttf - #6 par vincen
Donc (avec la correction de la syntaxe yaml)

# Capteurs Temperature Air et Eau
dallas:
  - pin: 23

sensor:
  - platform: dallas
    address: 0x8a3c01d607d30e28
    name: "Temperature Air"
    id: t_air
  - platform: dallas
    address: 0x713c01d607410428
    name: "Temperature Eau" 
    id: t_eau

# Example configuration entry
i2c:
  sda: GPIO21
  scl: GPIO22

display:
  - platform: lcd_pcf8574
    dimensions: 16x2
    address: 0x27
    lambda: |-
      it.print(0,0,"Temp Eau : %.2f", id(t_air).state);
      it.print(0,1,"Temp Air : %.2f", id(t_eau).state);

Super merci , j’essaie ca tout de suite

Bon ben y a un probleme

src/esphome/components/lcd_base/lcd_display.h:39:8: note:   candidate expects 1 argument, 4 provided
src/esphome/components/lcd_base/lcd_display.h:41:8: note: candidate: 'void esphome::lcd_base::LCDDisplay::print(const string&)'
   void print(const std::string &str);
        ^~~~~
src/esphome/components/lcd_base/lcd_display.h:41:8: note:   candidate expects 1 argument, 4 provided
/config/esphome/esp-aquaponie.yaml:105:52: error: no matching function for call to 'esphome::lcd_pcf8574::PCF8574LCDDisplay::print(int, int, const char [17], float&)'
       it.print(0,1,"Temp Air : %2.0f", id(t_eau).state);
                                                    ^
In file included from src/esphome.h:33,
                 from src/main.cpp:3:
src/esphome/components/lcd_base/lcd_display.h:35:8: note: candidate: 'void esphome::lcd_base::LCDDisplay::print(uint8_t, uint8_t, const char*)'
   void print(uint8_t column, uint8_t row, const char *str);
        ^~~~~
src/esphome/components/lcd_base/lcd_display.h:35:8: note:   candidate expects 3 arguments, 4 provided
src/esphome/components/lcd_base/lcd_display.h:37:8: note: candidate: 'void esphome::lcd_base::LCDDisplay::print(uint8_t, uint8_t, const string&)'
   void print(uint8_t column, uint8_t row, const std::string &str);
        ^~~~~
src/esphome/components/lcd_base/lcd_display.h:37:8: note:   candidate expects 3 arguments, 4 provided
src/esphome/components/lcd_base/lcd_display.h:39:8: note: candidate: 'void esphome::lcd_base::LCDDisplay::print(const char*)'
   void print(const char *str);
        ^~~~~
src/esphome/components/lcd_base/lcd_display.h:39:8: note:   candidate expects 1 argument, 4 provided
src/esphome/components/lcd_base/lcd_display.h:41:8: note: candidate: 'void esphome::lcd_base::LCDDisplay::print(const string&)'
   void print(const std::string &str);
        ^~~~~
src/esphome/components/lcd_base/lcd_display.h:41:8: note:   candidate expects 1 argument, 4 provided
*** [/data/esp-aquaponie/.pioenvs/esp-aquaponie/src/main.cpp.o] Error 1
========================= [FAILED] Took 35.14 seconds =========================

voila le fichier log

Essaye en corrigeant par

pas mieux

Regarde bien

Merci ça marche , j’ai regardé la doc , bien regardé la doc , recommencé et recommencé :face_exhaling:

et puis trouvé

voici le code ,

i2c:
sda: GPIO21
scl: GPIO22

display:

    platform: lcd_pcf8574
    dimensions: 16x2
    address: 0x27
    lambda: |-
    it.print(0,0,« Temp Eau : »);
    it.print(0,1,« Temp Air : »);

    it.printf(12,0,« %.1f », id(t_eau).state);
    it.printf(12,1,« %.1f », id(t_air).state);

1 « J'aime »

Tu peux combiner les 2 (tout dans un printf, j’avais juste oublié de corriger la syntaxe

    lambda: |-
      it.printf(0,0,"Temp Eau : %.2f", id(t_air).state);
      it.printf(0,1,"Temp Air : %.2f", id(t_eau).state);

Dans ton cas, par contre ça utile tout l’espace du LCD (puisque tu mets les valeurs en position 12), à toi de voir ce que tu préfères

Oui j’ai bien compris cette façon d’ecrie

lambda: |-
      it.printf(0,0,"Temp Eau : %.2f", id(t_air).state);
      it.printf(0,1,"Temp Air : %.2f", id(t_eau).state);

mais je reste comme j’ai ecris pour la claretée et bien comprendre la difference entre print et printf, si j’ai besoin d’y revenir dans 6 mois.

Merci encore