DHT20 per i2c in esphome funktionniert nicht

Hallo liebe Community ,
ich habe da ein kleines Problem mit meinem AZ-Delivery DHT20 Temperature and Humidity
Sensor.
Den würde ich gerne in esphome mit meinem AZ-Delivery NodeMCU ESP32S per i2c einbinden.
Das Problem ist das i2c sagt das er an der Adresse 0x38 eine Hardware gefunden hat.
Aber Egal welchen Sensor Typ ich ausprobiere funktioniert es nicht.
Auf der esphomePage steht das der DHT20 eienn AHT20 Chip besitzt.
" The DHT20 (datasheet) sensor has the packaging of the DHT Temperature+Humidity Sensor series, but has the AHT20 inside and is speaking I²C as well."

Kann mir da einer Weiter helfen ?
Lg

@Lice
ohne Code/Logs wird Dir keiner helfen können!
Hast Du schonmal das Forum mit dem Suchbegriff “DHT…” durchsucht? … es gab da schon einige Beiträge.

Gruß
Frank

Ja ich habe das Forum nach DHT durchsucht.

Mein Code:
esphome:
  name: esp32-bad-oben
  friendly_name: esp32_bad_oben

esp32:
  board: nodemcu-32s
  framework:
    type: arduino

i2c:
  sda: 21
  scl: 22
  scan: true

sensor:
  - platform: aht10
    temperature:
      name: "Bad Oben Temperatur"
    humidity:
      name: "Bad Oben Luftfeuchtigkeit"
    update_interval: 15s

Wie geschrieben er findet am i2c an der Adresse 0x38 auch etwas aber den DHT20 kann ich nicht direkt als Platform bestimmen.
Und bei AHT10 sagt er das er ihn nicht findet.
Und aht20 oder dht20 kann ich als Platform nicht eintragen. Da ich dann nicht flashen kann.

:crayon:by HarryP: Codezeilen formatiert (bitte immer in </> einbinden)

@Lice
mich wundert, warum keine i2c Adresse (0x38) im Code steht.
i2c Kommunikation braucht eine Adresse.

versuche mal

..
sensor:
  - platform: aht10
    address: 0x38
    temperature:
...

Gruß
Frank

Ja hatte ich auch drin stehen , aber es funktioniert nicht.

Diesen code hatte ich auch schon probiert.
Aber da stimmt ja der ESP8266 nicht da ich einen ESP32s benutze.

esphome:
  name: dht20
  platform: ESP8266
  board: d1_mini
  includes:
  - ahtx0.h
  libraries:
  - "https://github.com/adafruit/Adafruit_AHTX0"

# wifi, ota, api etc

# not needed for some reason? idk
# i2c:
#   - id: bus_a
#     sda: D2
#     scl: D1
#     scan: True
    
sensor:
  - platform: custom
    lambda: |-
      auto aht20 = new AHTX0Sensor();
      App.register_component(aht20);
      return {aht20->temperature_sensor, aht20->humidity_sensor};
    sensors:
    - name: "Temperature"
      unit_of_measurement: °C
      accuracy_decimals: 2
    - name: "Humidity"
      unit_of_measurement: "%"
      accuracy_decimals: 2

@Lice
ich habe dies gerade noch im Netz gefunden, da ist zumindest eine Adresse drin

# Example config.yaml
i2c:
  sda: 8
  scl: 9
  scan: true
  id: bus_a

sensor:
  - platform: aht10
    variant: aht20
    i2c_id: bus_a
    id: aht_20
    address: 0x38
    temperature:
      id: 'aht_temp'
      name: "Living Room Temperature"
    humidity:
      id: 'aht_humid'
      name: "Living Room Humidity"
    update_interval: 10s

ahhh , ok werde ich mal testen , ist sogar mit der frequency: 200kHz mit drin
Ich hatte gelesen das der DHT20 mit der standart Frequenz nicht zurecht kommt und das man diese anpassen müsste. Hatte aber bei mir auch nicht geklappt.
Ich teste es gleich mal. Ob Dieser Code funktioniert.
Danke erstmal

Beim code eingeben gibt es schon Probleme bei der variant: ath20
esphome meint das variant is a invalid option

Mit diesem Code bekomme ich jetzt schonmal werte vom Sensor.

i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a
  #frequency: 200kHz

sensor:
  - platform: aht10
    variant: aht20
    i2c_id: bus_a
    id: aht_20
    address: 0x38
    temperature:
      id: 'aht_temp'
      name: "Bad Oben Temperatur"
    humidity:
      id: 'aht_humid'
      name: "Bad Oben Luftfeuchtigkeit"
    update_interval: 30s

external_components:
  - source: github://pr#5198
    components: [ aht10 ]

Im Log steht jetzt aber noch drin das der Sensor Busy sei. Aber er schickt Werte.

INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.0.202 using esphome API
INFO Successfully connected to 192.168.0.202 in 7.134s
INFO Successful handshake with 192.168.0.202 in 0.048s
[19:11:58][I][app:102]: ESPHome version 2023.11.6 compiled on Dec  7 2023, 19:11:31
[19:11:58][C][wifi:559]: WiFi:
[19:11:58][C][wifi:391]:   Local MAC: 64:B7:08:C9:AD:0C
[19:11:58][C][wifi:396]:   SSID: 'HOME - MineLice'[redacted]
[19:11:58][C][wifi:397]:   IP Address: 192.168.0.202
[19:11:58][C][wifi:399]:   BSSID: 98:9B:CB:DE:17:51[redacted]
[19:11:58][C][wifi:400]:   Hostname: 'esp32-bad-oben'
[19:11:58][C][wifi:402]:   Signal strength: -39 dB ▂▄▆█
[19:11:58][C][wifi:406]:   Channel: 6
[19:11:58][C][wifi:407]:   Subnet: 255.255.255.0
[19:11:58][C][wifi:408]:   Gateway: 192.168.0.240
[19:11:58][C][wifi:409]:   DNS1: 192.168.0.240
[19:11:58][C][wifi:410]:   DNS2: 0.0.0.0
[19:11:58][C][logger:416]: Logger:
[19:11:58][C][logger:417]:   Level: DEBUG
[19:11:58][C][logger:418]:   Log Baud Rate: 115200
[19:11:58][C][logger:420]:   Hardware UART: UART0
[19:11:58][C][i2c.arduino:053]: I2C Bus:
[19:11:58][C][i2c.arduino:054]:   SDA Pin: GPIO21
[19:11:58][C][i2c.arduino:055]:   SCL Pin: GPIO22
[19:11:58][C][i2c.arduino:056]:   Frequency: 50000 Hz
[19:11:58][C][i2c.arduino:059]:   Recovery: bus successfully recovered
[19:11:58][I][i2c.arduino:069]: Results from i2c bus scan:
[19:11:58][I][i2c.arduino:075]: Found i2c device at address 0x38
[19:11:58][C][aht10:149]: AHT10:
[19:11:58][C][aht10:150]:   Address: 0x38
[19:11:58][C][aht10:154]:   Temperature 'Bad Oben Temperatur'
[19:11:58][C][aht10:154]:     Device Class: 'temperature'
[19:11:58][C][aht10:154]:     State Class: 'measurement'
[19:11:58][C][aht10:154]:     Unit of Measurement: '°C'
[19:11:58][C][aht10:154]:     Accuracy Decimals: 2
[19:11:58][C][aht10:155]:   Humidity 'Bad Oben Luftfeuchtigkeit'
[19:11:58][C][aht10:155]:     Device Class: 'humidity'
[19:11:58][C][aht10:155]:     State Class: 'measurement'
[19:11:58][C][aht10:155]:     Unit of Measurement: '%'
[19:11:58][C][aht10:155]:     Accuracy Decimals: 2
[19:11:58][C][captive_portal:088]: Captive Portal:
[19:11:58][C][mdns:115]: mDNS:
[19:11:58][C][mdns:116]:   Hostname: esp32-bad-oben
[19:11:58][C][ota:097]: Over-The-Air Updates:
[19:11:58][C][ota:098]:   Address: 192.168.0.202:3232
[19:11:58][C][ota:101]:   Using Password.
[19:11:58][C][api:139]: API Server:
[19:11:58][C][api:140]:   Address: 192.168.0.202:6053
[19:11:58][C][api:144]:   Using noise encryption: NO
[19:12:09][D][aht10:096]: AHT10 is busy, waiting...
[19:12:09][D][sensor:094]: 'Bad Oben Temperatur': Sending state 10.48775 °C with 2 decimals of accuracy

[19:16:50][D][esp32.preferences:114]: Saving 1 preferences to flash...
[19:16:50][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[19:17:09][D][aht10:096]: AHT10 is busy, waiting...
[19:17:09][D][sensor:094]: 'Bad Oben Temperatur': Sending state 10.16808 °C with 2 decimals of accuracy
[19:17:09][D][sensor:094]: 'Bad Oben Luftfeuchtigkeit': Sending state 53.77216 % with 2 decimals of accuracy
[19:17:09][W][component:214]: Component aht10.sensor took a long time for an operation (0.09 s).
[19:17:09][W][component:215]: Components should block for at most 20-30ms.


@Lice
das ist ja schonmal erfreulich, Werte!
Schön, das wir das lösen konnten. Mann muss sich manchmal einfach darüber austauschen können.

Das “Busy” wirst Du in der Praxis wohl nicht merken. Temperatur und Feuchte sind eher träge Systeme.

Allerdings verstehe ich hier das Beispiel zum AHT auf esphome nicht, dass der Beispielcode ohne Adressierung ist. i2c ist ein Adressbasiertes Protokoll.

Den Code habe ich auf github in einem PR gefunden.

Gruß
Frank

@Lice
Hi

Warum direkt über I2C ansprechen?
In ESPHome gibt es eine eigene Plattform für den dht:

# D7 Temperatur und Luftfeuchtigkeit
  - platform: dht
    pin: D7
    temperature:
      name: "Temperature"
      filters:
        - multiply: 0.956332
    humidity:
      name: "Humidity"
    model: DHT11    
# ENDE

Ich habe noch einen dht22 der Funktioniert mit deinem Code. Der hat aber in der Regel nur 3 Pins (+ , - und datenport). und kann somit per pin: abgefragt werden.
Der DHT20 (AHT20) hat 4 Pins und kann nur per i2c abgefragt werden.
Und das war halt mein Problem.
Aber das Funktioniert jetzt ja.

dht20 DHT20
dht22 DHT22

Nachtrag:
@FrankS
Vielen lieben Dank .
du hast mir mit dem Code und Link zur Github Seite echt weiter geholfen !!!

:crayon:by HarryP: Zusammenführung Doppelpost

@Lice
markiere es bitte als Lösung.
AHT20 mit i2c sind wohl nicht so geläufig wie DHT’s. Selbst das Beispiel auf esphome.io stimmt ja wohl so nicht.

Gruß
Frank

Interessante Korrespondenz, vielen Dank dafür . Ich versuche gerade den DHT20 mit einem ESP8266-S01 ans Laufen zu bringen, und es will mir noch nicht gelingen.
Vielleicht habt ihr ja dazu noch eine Idee .
Hier mein Code :

i2c:
  id: bus_a
  sda: GPIO0
  scl: GPIO2
  scan: true

sensor:
  - platform: aht10
    variant: aht20
    i2c_id: bus_a
    id: aht_20
    adress: 0x38
    temperature:
      name: "DHT20 Temperature"
    humidity:
      name: "DHT20 Humidity"
    update_interval: 60s


Und hier die Fehlermeldung wenn ich flashe :

INFO ESPHome 2023.12.5
INFO Reading configuration /config/esphome/esp04-aussentemp-feuchte.yaml…
Failed config

sensor.aht10: [source :37]
platform: aht10
variant: aht20
i2c_id: bus_a
id: aht_20

[adress] is an invalid option for [sensor.aht10]. Did you mean [address]?
adress: 56
temperature:
name: DHT20 Temperature
humidity:
name: DHT20 Humidity
update_interval: 60s

Vielen Dank
Gruß
Peter

Hallo ,

Ich weis jetzt nicht 100%tig ob es bei dem esp8266 auch so funktioniert.

Aber hast du diesen Code bei dir auch eingebunden ?

external_components:
  - source: github://pr#5198
    components: [ aht10 ]

Ohne ging es bei meinem esp32 gar nicht.

@peter_mars

wat isses denn nu?

Gruß
Frank

Es ist ein DHT20 , ich hatte verschiedene platform infos einfach mal ausprobiert, weil ich das von oben so interpretiert hatte .

Du hast address falsch geschrieben, steht auch so im Fehler Log :person_shrugging:

Stimmt Du hast in Deinem Code address falsch geschrieben.

Versuch es dann mal so:

i2c:
  id: bus_a
  sda: GPIO0
  scl: GPIO2
  scan: true

sensor:
  - platform: aht10
    variant: aht20
    i2c_id: bus_a
    id: aht_20
    address: 0x38
    temperature:
      name: "DHT20 Temperature"
    humidity:
      name: "DHT20 Humidity"
    update_interval: 60s

external_components:
  - source: github://pr#5198
    components: [ aht10 ]

du hast adress im Code geschrieben. es muss address sein.

änder mal adress auf address

ich tippe auch auf die fehlende externe Bibliothek

Die Fehlermeldung kommt weil es address und nicht adress heißt. Ganz einfach. Er hat es ja auch noch nicht mit address richtig geschrieben versucht…

@Lice hat es erst zum laufen bekommen, als er die externe Biblothek eingetragen hat.
Wir werden sehen …