DSB18B20 an ESP8266 und Platformio

Oti1608

New member
Kann mir da jemand auf die Sprünge helfen? Bastele gerade unter Platformio mit 3 DS18B20 an einer Frühbeetsteuerung für meine Frau. auf der Basis von https://randomnerdtutorials.com/guide-for-ds18b20-temperature-sensor-with-arduino/.
So weit so gut es funktioniert alles. Ich stolpere über die Anweisung:zum Speichern der Adresse des Sensors (z.B. 0x28, 0x6F, 0xB2, 0x57, 0x04, 0xE1, 0x3C, 0x59). im Sketch:

"DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address"

DeviceAddress dürfte ein Array sein. Nur fehlen mir dort die []-Klammern in der Anweisung. Auch in der One-Wire Bibliothek finde ich nichts entsprechendes.
Also wie ich befürchte, bin ich zu doof dafür.
Danke und Rosenmontag allen.

M.
 
Bin imo mit der doftware glaube ich schon zu weit. Mit HA hatte ich erst im Winter angefangen und mit dem ESPHome so meine Huddelein gehabt. Konnte ihn nicht immer ins Netz bringen. über die Add Funktien.
 
Hallo @Oti1608,

willst Du mit dem Sensor erst einmal nur die Temperatur erfassen, dann gehe einfach in ESPHome.

Wenn Du den Sensor so gebaut hast wie in der verlinkten Anleitung, dann müsste ESPHome diesen auch finden.
Aber vorher im ersten Schritt musst Du den mit einem USB Kabel mit HomeAssistant auch verbinden.
Später geht das dann erst über OTA.

Wenn das alles gemacht ist, dann gehe in ESPHome und nimm unten rechts das "+ NEW DEVICE"
Dann geht ein neues Fenster auf und legst dann den Namen fest.

Gehe mal vorher die Beschreibung durch, da ist das relativ gut erklärt:
https://be-jo.net/2022/04/esphome-temperaturmessung-mit-ds18b20-fuer-home-assistant/

Ich habe Dir mal eine blanco_test angelegt, wie das aussehen könnte.

Beim Board konnte ich am Anfang nur den esp8266 auswählen, ich habe aber einen D1-Mini als Grundlage.
Bitte alle Befehle in kleinen Buchstaben schreiben.
Deswegen kam dann das hier in der yaml:

esp8266:
board: esp01_1m

das habe ich dann händisch umgeschrieben in:

esp8266:
board: d1_mini

Beim compillieren lädt er dann das richtige Board herunter.
Achso, wenn er mit Fehlern beim compillieren dauernd abbricht,
Einfach alle nicht benötigten Prozesse im Hintergrund stoppen.
Unter Einstellungen --> Add-ons --> dann die aktuell nicht benötigten Dienste stoppen, wie z.B. terminal&ssh, usw.
Nur nicht den Editor, der wird ja gebraucht.

Später nicht vergessen die Prozesse zu aktivieren, bzw. wird ja bei dem Neustart von HA sowieso gemacht, wenn das eingestellt wurde.

YAML:
esphome:
  name: blanco-test
  friendly_name: blanco_test

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "Wird bei Dir automatisch erstellt="

ota:
  password: "Wird bei Dir automatisch erstellt="

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Blanco-Test-Yaml"
    password: "Wird bei Dir automatisch erstellt="

captive_portal:

#Das musst Du nach dem ersten erstellen der *.yaml noch einfügen unter das captive_portal:#

YAML:
dallas:
  - pin: 2

  # Individual sensors

- pin: 2 = Deine verwendete Pin hier einsetzen. - gpio hat er bei mir nicht wollen, deswegen pin


YAML:
esphome:
  compile_process_limit: 1
  name: fruehbeet
  friendly_name: fruehbeet

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "Wird bei Dir automatisch erstellt="

ota:
  password: "Wird bei Dir automatisch erstellt="

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "fruehbeet Fallback Hotspot"
    password: "Wird bei Dir automatisch erstellt="

captive_portal:

dallas:
  - pin: 2

  # Individual sensors

Teil 2

Die Adresse bekommst Du beim ersten Log angezeigt, siehe Anleitung ganz unten beim Bild.
In der Logdatei sieht man (in der letzten Zeile) die Adresse des Sensors. Diesen notiert man sich.
Danach must Du nochmal die erstellte *.yaml öffnen.
und das unten einfügen mit der neuen eigenen Adresse

YAML:
sensor:
  - platform: dallas
    address: 0x hier die neue Adresse von Dir eintragen
    name: "fruehbeet temperature"
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-minus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2

Danach die Vallidierung durchführen, wenn die ok ist, dann das Board flashen/installieren drücken und dann müsste er mit compillieren beginnen.

Ich hoffe Du kommst jetzt mit dem ESPHome klar..... und ich habe das für Dich verständlich erklärt.
 
Zuletzt bearbeitet:
Danke Dir, habe ich verstanden und es mir kopiert für die Gelegenheit, wenn ich mit dem Auslesen meines Zähler (E, Gas, Wasse) anfange. Gefunden habe ich ein Beispiel, demnach ist es ein Array in derOneWire Bibliothek (DeviceAddress). tempDeviceAddress ist das eigene Array zb. MyDS18B20. So funktioniert das wenigsten. Da die Adressanzahl im Bus beschränkt ist muss auch die Größe nicht angegeben werden, insofern kann man sich die [] sparen.
Bin mit Platformio gut weitergekommen und werde es so auch fertig stellen.
Wünsche Dir ein schönes WE

MIchael
 
Hallo zusammen,

jetzt bräuchte ich mal wieder Euer Schwarmwissen.
Ich müsste die erfasste Temperatur um ca. ein Grad erhöhen bzw. 0,5°C.
Mit welchem Codeschnipsel muss ich diese Beispiel.yaml ergänzen und an welcher Stelle?

YAML:
sensor:
  - platform: dallas
    address: 0x hier die neue Adresse von Dir eintragen
    name: "fruehbeet temperature"
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-minus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2

Hat das schon mal einer gemacht von Euch?

Gehen tut das mit Sicherheit.
Gemessener Wert DS18B20 z.B.: 19,5°C
Istwert: 20,5°C mit einem kalibrierten Gerät gemessen.
Sollwert nach Korrektur: 19,5°C + 1,0°C = 20,5°C.
 
template.yaml
Code:
  - sensor:
    - name: "Gefrierschrank temperatur berechnet"
      unique_id: "Gefrierschrank temperatur berechnet"
      state: >
        {{ states(('sensor.gefrierschrank_temperatur')) | float - 5.0| float }}
Name und unique_id kannst Du deinen Wünschen entsprechend setzen.
Den sensor natürlich auf deinen Temperatursensor setzen und dann mit dem Wert hinter float einstellen, wie viel Grad Plus oder Minus.
 
Hallo @RudiP,

wie immer bin ich noch nicht so bewandert mit dem Thema HomeAssistant.
wenn ich Deinen Code eingebe, dann kommt natürlich eine Fehlermeldung.
[state] is an invalid option for [sensor.dallas]. Did you mean [state_topic], [state_class]?

YAML:
sensor:
  - platform: dallas
    address: 0x hier die neue Adresse von Dir eintragen
    name: "fruehbeet temperature"
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-minus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2
    state: >
        {{ states(( 'sensor.fruehbeet temperature' )) | float - 5.0| float }}

Wo mache ich den Fehler?
 
Den fehle rmachst Du, in dem Du meine aller erste Zeile ignoriert hast.
template.yaml.
Heißt, öffne die template.yaml in einem Editor, setze obige Zeilen da rein, speichern, einmal Entwicklerwerkzeuge -> yaml -> Neu starten und "Schnelles neu laden" und dann sollte die neue Entität, deren Namen Du ja selbst festlegen kannst, verfügbar sein.
 
Hallo @RudiP,

vermutlich denkst Du was für ein DAU.
Aber ich habe versucht das umzusetzen, was Du mir versuchst zu erklären.
Für Dich und andere vermutlich alles logisch, nur aktuell breche ich mir noch einen ab....
Also ich fange nochmals an.
Hier meine ESPHome Config, welche bis dato auch perfekt funktioniert.
YAML:
esphome:
  compile_process_limit: 1
  name: ha-d1-mini
  friendly_name: ha_d1_mini

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "bVQMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="

ota:
  password: "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Ha-D1-Mini Fallback Hotspot"
    password: "Qxxxxxxxxxxxxxxxxxxx"

captive_portal:

dallas:
  - pin: 2

  # Individual sensors
sensor:
  - platform: dallas
    address: 0xc10xxxxxxxxxxxxxxxx
    name: "Mobil Room Temperature"
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-minus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2

Hier die Config.yaml der Eintrag zu template
YAML:
template: !include_dir_merge_list templates/

Dann habe ich einen Template-Ordner.
Darin wie gewünscht die neue
/homeassistant/templates/mobil_temperatur_kalibrieren.yaml angelegt.

YAML:
 - sensor:
    - name: "mobil_temperatur_berechnet"
      unique_id: "mobil_temperatur_berechnet"
      state: >
        {{ states(('sensor.ha-d1-mini')) | float - +5.0| float }}
ich habe das auch mit dem versetzten PIPE Strich hinter der +5,0 versucht, geht auch nicht.

YAML:
 - sensor:
    - name: "mobil_temperatur_berechnet"
      unique_id: "mobil_temperatur_berechnet"
      state: >
        {{ states(('sensor.ha-d1-mini')) | float - +5.0 | float }}

Neustart von Homeassistant habe ich durchgeführt.

Was mache ich hier immer noch falsch?

Irgendwo mache ich einen grundsätzlichen Fehler, nur wo weiß ich nicht.
 
Die Datei heißt "template.yaml" und nicht irgendwie anders.
Ich habe in meiner config.yaml diesen Eintrag:
template: !include template.yaml
der die template.yaml lädt.
Dein Eintrag sollte eigentlich das selbe bewirken, ob das dann mit einer Datei mit anderem Namen als "template.yaml" auch so klappt, kann ich nicht sagen.

Weiterhin ist es quatsch "- + 5.0" zu schreiben. Ent oder weder, aber nicht beides.
Und ich sehe gerade, das letzte float ist zu viel. Ist mir nie aufgefallen.
Code:
      state: >
        {{ states(('sensor.ha-d1-mini')) | float - 5.0 }}
Also so, um von dem Meßwert 5.0 abzuziehen.

Die Frage ist ja auch, kommt bei Dir ein Fehler oder was funktioniert nicht ?
Was mir in deiner ESPHome Config noch aufgefallen ist.
Code:
  name: ha-d1-mini
  friendly_name: ha_d1_mini
Der eine mit Bindestrich, der andere mit Unterstrich. Soll das so sein ?
 
Hallo @RudiP,

Danke, Danke, Du bist der Beste..... Ausgeschlafen geht es halt doch wieder besser...
Dank Deiner unermüdlichen Hilfe hat es doch noch perfekt geklappt.
Hier meine Ergebnisse, damit andere auch noch was lernen können, an meinen Verständnisproblemen und Fehlern.....

Ich habe vorher meinen Code in den Entwicklerwerkzeugen/Template auf Richtigkeit überprüft und dann auch gleich die Fehler oder Ergebnis gesehen. Seht meine angehängten Bilder.
Ich habe aktuell den Test mit + 10°C erhöhen gemacht, damit das Ergebnis gleich sichtbarer wird.
Diese Veränderung passiert nicht in ESPHome, sondern extra in einer template.yaml Datei im template-Ordner.

Ich musste den kalibrierten/justierten Sensor dann auch als neue Identität anlegen.

YAML:
#-----------------------------------------------------------
# ha_d1_mini kalibrieren/justieren
#-----------------------------------------------------------
- sensor:
    - name: "ha_d1_mini_kalibrieren"
      unique_id: "ha_d1_mini_kalibrieren"
      state: >
         {{ states(('sensor.ha_d1_mini_mobil_room_temperature')) | float + 10.0 }}

Bitte keine Grundsatzdiskussionen über kalibrieren/justieren.
Ich weiß, ich habe meinen Sensor nur justiert.... und nicht kalibriert.
Kalibrieren kann nur die Eichbehörde....

Nachtrag: Man muss den HomeAssistant nicht mehr neu starten, wenn man die Korrekturzahl im Template für den Sensor neu vergibt.
Es reicht wenn man die Template-Entität prüft und dann der grüne Haken für ok erscheint.
Siehe Anhang-Bild (3).
Die neue Zahl wird direkt übernommen.
 

Anhänge

  • Entwicklerwerkzeuge_Template_Code_pruefen.png
    Entwicklerwerkzeuge_Template_Code_pruefen.png
    77,3 KB · Aufrufe: 1
  • Mobil_Room_Sensor_kalibriert.png
    Mobil_Room_Sensor_kalibriert.png
    16,3 KB · Aufrufe: 2
  • Template-Entitäten.png
    Template-Entitäten.png
    3,7 KB · Aufrufe: 1
Zuletzt bearbeitet:
Hallo @u5zzug,

ich dachte mir, dass es mehrere Wege nach Rom gibt.
Für Euch ist das alles so einfach zu verstehen und umzusetzen.
Wenn ich Deinem Link folge, welchen ich auch schon mal in der Hand hatte.
Verstehe ich aktuell leider (noch) Bahnhof, Abfahrt und Koffer klauen.....
Da ich neu in der Materie bin, habe ich leider da etwas Verständnisprobleme das einfach so umzusetzen.
Welchen yaml Code baue ich jetzt an welcher Stelle ein?

Das wäre jetzt der aktuelle ESPHome Code:
YAML:
esphome:
  compile_process_limit: 1
  name: ha-d1-mini
  friendly_name: ha_d1_mini

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "bVQMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="

ota:
  password: "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Ha-D1-Mini Fallback Hotspot"
    password: "Qxxxxxxxxxxxxxxxxxxx"

captive_portal:

dallas:
  - pin: 2

  # Individual sensors
sensor:
  - platform: dallas
    address: 0xc10xxxxxxxxxxxxxxxx
    name: "Mobil Room Temperature"
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-minus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2

Füge ich dann den Code so ein zum testen,

YAML:
  # Individual sensors
sensor:
  - platform: dallas
    address: 0xc10xxxxxxxxxxxxxx
    name: "Mobil Room Temperature"
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-minus"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2
filters:
  - offset: 2.0
  - multiply: 1.2

kommt diese Fehlermeldung:

INFO ESPHome 2024.2.0INFO Reading configuration /config/esphome/ha-d1-mini.yaml...Failed configfilters: [source /config/esphome/ha-d1-mini.yaml:45] Component not found: filters. - offset: 2.0 - multiply: 1.2

Wie und an welcher Stelle mach ich den Fehler?
Es kann mit mir nur besser werden, ihr Profis lacht Euch mit Sicherheit das Brett. Wie kann man "Sich" nur so anstellen.....
 
Zuletzt bearbeitet:
Hallo @u5zzug,

leider bin ich aktuell mit Deiner Aussage "weiter einrücken" und malnehmen von der Temperatur auch nicht klüger geworden.
Egal was ich bei mir probiere kommt beim Validieren immer eine eine Fehlermeldung, das es so nicht geht.....
TaDa TaDa TaDa....

Da Du ja mein Problem scheinbar kennst, wäre mir doch mit einer Hilfestellung schon mal geholfen... und Du wirfst mir einen gezielten Codeschnipsel vor, an welcher Stelle und wie eingerückt ich den einbauen muss, so das beim validieren keine Fehlermeldung kommt.

@RudiP hat mich doch auch mit einer Lösung unterstützt. Das ist auf alle Fälle mein Backup und Workaround.
Da hat man Ruckzuck in kurzer Zeit den Sensorwert angepasst.

Du selber hast mich ja auf das Thema gestoßen mit der Aussage "Ich würde das ja im ESP lösen." und dann für mich noch nicht durchsteigbaren Link versehen.

Ich gebe Dir nachher wenn es funktioniert auch ein großes Lob.

Ich bin vermutlich nicht der einzige, der sich mit so Problemen herum schlägt und zu kämpfen hat.
Nur geben vermutlich die anderen irgendwann genervt auf und lassen es halt so wie es ist.

Nach dem Motto, wer viel misst, misst viel Mist.....
 
du sollst den filter Block 4 Zeichen nach rechts rücken... (nein, ich probiere das jetzt nicht irgendwo aus.)
 
Zurück
Oben