Let op: Tweakers stopt per 2023 met Tweakblogs. In dit artikel leggen we uit waarom we hiervoor hebben gekozen.

ESP8266 CV temperatuur-sensor

Door S0epkip op vrijdag 4 februari 2022 10:32 - Reacties (15)
Categorie: ESP8266, Views: 5.429

Allereerst credits aan Atomstar om mij te introduceren bij dit onderwerp door middel van zijn reeks blogs en custom PCB voor een door hem genaamde 'BigSensor'.


Dit heeft mij geinspireerd om eens aan de slag te gaan met een ESP8266, door middel van ESPHome via een add-on in Home Assistant. Zelf was ik ook nog een complete noob in zowel ESPHome als HomeAssistant, maar dankzij de voorbeelden en enorme resource op internet is het wel gelukt :).

Mijn blog gaat over het maken van een ESP8266 met twee DS18B20 ('Dallas') temperatuursensors om de aanvoer- en retourtemperatuur van mijn CV installatie in de gaten te houden. Waarom dat handig kan zijn lees je in dit topic op GoT.

Starting with the end in mind:

https://tweakers.net/fotoalbum/image/F7hFbOPqbNNWjugxD6klaOjE.png

Dit heb ik gemaakt door middel van:Enkele notes:
  • Let op dat je een 'korte stekker' aan de micro-USB kant hebt zitten, zodat het geheel in de behuizing past. Elke andere behuizing die je zelf nog hebt liggen of maakt kan je natuurlijk ook toepassen voor dit projectje.
  • De laatste revisie van de Wemos D1 mini (v4) is uitgevoerd met USB-C voor de liefhebber.
HARDWARE INTEGRATIE

De pin header soldeer je aan de 5V kant van je Wemos D1 mini (of andere ESP8266).
Voor mij kwam het zo het netste uit (klikbaar voor groot):



NB: ik ben bepaald geen soldeerkoning, maar deze pins hebben een prima spacing, dus dat lukt je wel!

Vervolgens combineer je de draden van de DS18B20's en verbind je ze onder de scroeven van de pin headers alsvolgt:
  • Rood (Vcc) --- 5V
  • Geel (data) --- D3
  • Wit (of Zwart) (Gnd) --- GND
Zelf heb ik de draadjes samen even 'vertind' zodat ze netjes bij elkaar blijven.
Noot: De DS18B20 werkt volgens een 1-wire protocol. We kunnen dus prima de beide data-draden aan 1 GPIO pin verbinden en vervolgens in de software de twee signalen (digitale signalen) uit elkaar houden door middel van de sensor-adressen welke automatisch worden meegstuurd. It's amazing :)

Dan prop je het geheel met beleid in het huisje. Je kunt de D1 mini met een schroefje aan de behuizing vastmaken zodat eea niet teveel beweegt (nog niet op de foto):



Vervolgens ga je verder met de software integratie en debugging (waar nodig) voordat je het geheel monteert bij je CV ketel:



NB: de sensor zal door het meten van de skin-temp van je pijp natuurlijk wat vertraging hebben. ook de 'waterdichte behuizing' van de DS18B20 die ik hier gebruik is iets 'trager'. In de praktijk echter snel genoeg en sinds het mij met name om de verschiltemperatuur gaat, en beide sensoren even snel/traag reageren, zie ik hier geen enkel probleem in.


SOFTWARE INTEGRATIE


Ik ga er voor het gemak even vanuit dat je zoiets als een ESPHome add-on hebt draaien op Home Assistant of otherwise. Dit lukt een Tweaker wel. Er zijn hier heel veel wegen die naar Rome leiden en Google is je vriend, RTFM, etc.

Je kunt een ESP8266 bordje heel makkelijk verbinden met Home Assistant. Voor de eerste keer programmeren dien je je bouwsel met behulp van USB aan de instance die ESPHome draait te verbinden (e.g. je Raspberry Pi met Home Assistant).

In je ESPHome dashboard maak je een nieuw project aan, geef deze een naam en kies de Wemos D1 mini als bordje. Er wordt dan ongeveer deze YAML aangemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
esphome:
  name: soepkipsensor

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "22cbbfcbd7ecdb5188f629dd4cd5a700"

wifi:
  ssid: "mijn_SSID"
  password: "password"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Soepkipsensor Fallback Hotspot"
    password: "FeIJmlrN4viG"

captive_portal:


In mijn ervaring verbind de Wemos makkelijker (of uberhaupt) met je WifI als je deze een static IP meegeeft. Ook voeg ik een tweede wifi netwerk toe aan de code, dit kun je natuurlijk achterwege laten. We gaan meteen de code toevoegen om de 'Dallas' temperatuursensors uit te lezen.
Ignore het verhaal over 3.3V en de external pull-up resistor. Een DS18B20 kan ook met 5V input omgaan en onze Wemos heeft een internal pull-up die we gaan activeren :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
esphome:
  name: soepkipsensor
  platform: ESP8266
  board: d1_mini

wifi:
  networks:
  - ssid: "netwerk1"
    password: "password1"
  - ssid: "netwerk2"
    password: "password2"

  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.161
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
    
  #fast_connect: True # Required to connect to hidden SSIDs and only with one network
  domain: ".lan"

  # reboot_timeout: 0s # Do not reboot if no wifi (can be useful for offline use)

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: CV Temp Fallback Hotspot
    password: password123

logger:

# Enable Home Assistant API for logging over wifi.
# Disable reboot loop by setting reboot_timeout to 0s!
api:
  reboot_timeout: 0s

# Disable webserver, Can be useful for diagnostics, but takes up quite some memory
# web_server:
#   port: 80

# Allow OTA updates
ota:

# For Dallas temp sensors connected to pin GPIO0 = D3, enable internal pull-up
# resistor
dallas:
  pin:
    number: GPIO0 
    # D3 = GPIO 0
    # inverted: True
    mode: INPUT_PULLUP
  update_interval: 1s #adjust to your own preference


Push de code naar je Wemos en als het goed is verbind hij nu met je WiFi en gaat hij logging uitspugen.

Je zou nu sensor-adressen moeten kunnen vinden in je logging, ongeveer zoiets:



Deze adressen gebruiken we vervolgens om software-matige sensoren te definiëren die data uitspugen richting Home Assistant (MQTT kan ook).


Uiteindelijke YAML code


De finale code is dan iets als:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
esphome:
  name: soepkipsensor
  platform: ESP8266
  board: d1_mini

wifi:
  networks:
  - ssid: "netwerk1"
    password: "password1"
  - ssid: "netwerk2"
    password: "password2"

  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.161
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
    
  #fast_connect: True # Required to connect to hidden SSIDs and only with one network
  domain: ".lan"

  # reboot_timeout: 0s # Do not reboot if no wifi (can be useful for offline use)

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: CV Temp Fallback Hotspot
    password: password123

logger:

# Enable Home Assistant API for logging over wifi.
# Disable reboot loop by setting reboot_timeout to 0s!
api:
  reboot_timeout: 0s

# Disable webserver, Can be useful for diagnostics, but takes up quite some memory
# web_server:
#   port: 80

# Allow OTA updates
ota:

# For Dallas temp sensors connected to pin GPIO0 = D3, enable internal pull-up
# resistor
dallas:
  pin:
    number: GPIO0 
    # D3 = GPIO 0
    # inverted: True
    mode: INPUT_PULLUP
  update_interval: 1s #adjust to your own preference


sensor:
  - platform: dallas
    address: 0x280000000b333728
    name: "CV_supply_temp"
    id: CV_supply_temp
    
  - platform: dallas
    address:  0x590000000e2e4c28
    name: "CV_return_temp"
    id: CV_return_temp
    
  - platform: template
    id: CV_delta_temp
    name: "CV_delta_temp"
    unit_of_measurement: °C
    update_interval: 1s
    lambda: 'return id(CV_supply_temp).state - id(CV_return_temp).state;'


Upload de code (wirelessly, of via USB) naar je Wemos, en Home Assistant zal je verzelf vertellen dat hij nieuwe sensors heeft gevonden ;)


RESULT

https://tweakers.net/fotoalbum/image/hR3zttoWPksht8vxLQikkQbb.png


https://tweakers.net/fotoalbum/image/F7hFbOPqbNNWjugxD6klaOjE.png


IDEAS

Misschien nog een derde DS18B20 toevoegen aan de warmwaterleiding; vervolgens je badkamerventilator starten/harder laten draaien na x minuten warm-water?

De mogelijkheden zijn zo groot als je fantasie (ok, en tijd...).


TOT SLOT

Dit is mijn eerste Tweakblog. Trying to give back to the community. Be gentle :)

Reacties


Door Tweakers user NKR, vrijdag 4 februari 2022 10:48

Hee leuke blog! Nog even een tipje voor als je een (paar jaar oudere) bosch of nefit ketel hebt: Er is een open source project wat ems-esp heet. Dat kan de bus van je ketel uitlezen en deze informatie daar uit halen en op mqtt zetten richting home assistant. Je kunt dan ook meteen je thermostaat aansturen enzo.

Je kunt hiervoor zelf solderen, maar er zijn ook mensen die kant en klaar bordjes aanbieden om te koppelen.

Door Tweakers user S0epkip, vrijdag 4 februari 2022 10:51

NKR schreef op vrijdag 4 februari 2022 @ 10:48:
Hee leuke blog! Nog even een tipje voor als je een (paar jaar oudere) bosch of nefit ketel hebt: Er is een open source project wat ems-esp heet. Dat kan de bus van je ketel uitlezen en deze informatie daar uit halen en op mqtt zetten richting home assistant. Je kunt dan ook meteen je thermostaat aansturen enzo.

Je kunt hiervoor zelf solderen, maar er zijn ook mensen die kant en klaar bordjes aanbieden om te koppelen.
Thanks voor de reactie! Hier helaasch niks uit te lezen volgens mij (Intergas uit 2005); tenzij ik de Opentherm bus zou kunnen snoopen ofzo.. De ketel zelf meet natuurlijk ook deze temperaturen voor de brander-automaat. Maarja... zelf bouwen is ook leuk :)

Door Tweakers user Marq, vrijdag 4 februari 2022 11:19

Leuke blog! Echt tweakerprojectje :)
tenzij ik de Opentherm bus zou kunnen snoopen ofzo..
Dat kan! Er is een open hardware design voor een OpenTherm Gateway (otgw). Deze gateway zet je op de draad tussen je ketel en thermostaat, waarna hij al het verkeer kan uitlezen en manipuleren.Ik heb zelf hier de gateway besteld in combinatie met de Wemos-chip, zodat ik het via via WiFi met behulp van deze firmware op MQTT (inclusief HomeAssistant auto discovery) kan ontsluiten: https://github.com/rvdbreemen/OTGW-firmware
Heb hem nog niet aangesloten, dat wacht nog op tot ik een keertje tijd heb.

Voordeel van de NodoShop variant vind ik dat deze z'n stroom via USB krijgt. Ik vind het wel een fijn idee als m'n 'zelfbouw' electronica niet met 220v werkt.

[Reactie gewijzigd op vrijdag 4 februari 2022 13:43]


Door Tweakers user Veelstekel, dinsdag 8 februari 2022 11:39

Leuk! Ik gebruik zelf de Out-of-the-box oplossing ;-)

Een Plugwise Anna thermostaat die communiceert via Opentherm met de boiler.
Home-Assistant heeft een standaard Plugwise integratie (https://www.home-assistant.io/integrations/plugwise/) die vervolgens de volgende output geeft:

Auxiliary Dhw State: binary_sensor.auxiliary_dhw_state
Auxiliary Intended Boiler Temperature: sensor.auxiliary_intended_boiler_temperature
Auxiliary Modulation Level: sensor.auxiliary_modulation_level
Auxiliary Return Temperature: sensor.auxiliary_return_temperature
Auxiliary Water Pressure: sensor.auxiliary_water_pressure
Auxiliary Water Temperature sensor.auxiliary_water_temperature

Door Tweakers user ma3d1um, dinsdag 25 oktober 2022 12:38

Mooie tutorial, dank! Ik had een soortegelijke setup die 2 jaar probleemloos heeft gedraaid, maar toen maakte ik de fout om in het ESPHome dashboard op "Update" te klikken. Blijkbaar is iets veranderd aan de Dallas-integratie, want sindsdien doet de D18b20 het niet meer en krijg ik de melding "Scratch pad config register invalid!". (De sensor wordt wel gewoon gedetecteerd, maar dus geen output).

Toen dacht ik: ik ga @S0epkip zijn projectje gewoon identiek nabouwen, maar helaas: dezelfde melding :-(.
Ik las ergens dat anderen het nog hebben kunnen oplossen door een oudere versie van ESPHome te installeren (of nog een backup hadden van hun oudere .bin-firmware-bestand), maar dat krijg ik niet voor elkaar.

Bij dezen de waarschuwing & als iemand een oplossing weet, dan hoor ik het graag!

Door Tweakers user S0epkip, dinsdag 25 oktober 2022 14:16

ma3d1um schreef op dinsdag 25 oktober 2022 12:38:
Mooie tutorial, dank! Ik had een soortegelijke setup die 2 jaar probleemloos heeft gedraaid, maar toen maakte ik de fout om in het ESPHome dashboard op "Update" te klikken. Blijkbaar is iets veranderd aan de Dallas-integratie, want sindsdien doet de D18b20 het niet meer en krijg ik de melding "Scratch pad config register invalid!". (De sensor wordt wel gewoon gedetecteerd, maar dus geen output).

Toen dacht ik: ik ga @S0epkip zijn projectje gewoon identiek nabouwen, maar helaas: dezelfde melding :-(.
Ik las ergens dat anderen het nog hebben kunnen oplossen door een oudere versie van ESPHome te installeren (of nog een backup hadden van hun oudere .bin-firmware-bestand), maar dat krijg ik niet voor elkaar.

Bij dezen de waarschuwing & als iemand een oplossing weet, dan hoor ik het graag!
Hmm, das irritant!

En als je tot de 1 na laatste code snippet gaat, kun je dan sensors vinden?

Klinkt alsof de adressen van de Dallas sensors niet goed staan..

Bij mij draait ie gewoon nog, maar heb inderdaad niet recent geüpdatet.

Door Tweakers user ma3d1um, donderdag 27 oktober 2022 13:36

Ja, hij vindt de sensor gewoon:
[13:24:42][D][dallas.sensor:082]: Found sensors:
[13:24:42][D][dallas.sensor:084]: 0x8d06473XXXXXXXX

Maar daarna krijg ik ipv de temperatuurmetingen de foutmeldingen:
[13:35:16][W][dallas.sensor:263]: 'Pompschakelaar aanvoer' - Scratch pad config register invalid!
[13:35:16][D][sensor:126]: 'Pompschakelaar aanvoer': Sending state nan °C with 1 decimals of accuracy

Echt megafrutstrerend...

Door Tweakers user ma3d1um, donderdag 27 oktober 2022 15:30

OK, de aanhouder wint ;-), ik heb de D18b20 weer aan de praat door de Dallas component van ESPHome-versie 2022.6.3 te sideloaden als External Component (https://esphome.io/components/external_components.html)

Grofweg zijn de stappen:
(1) in esphome-map (waar de YAMLs staan) een mapje "my_components" aanmaken met daarin een map "dallas"
(2) esphome-versie 2022.6.3 downloaden https://github.com/esphome/esphome/releases?page=3 en uitpakken
(3) van daaruit alle bestanden uit de map esphome > components > dallas naar je map "dallas" uit stap (1) kopiëren
(4) In de YAML van je esp device het volgende opnemen:
external_components:
- source:
type: local
path: my_components
components: [ dallas ]

Door Tweakers user S0epkip, donderdag 27 oktober 2022 15:37

ma3d1um schreef op donderdag 27 oktober 2022 15:30:
OK, de aanhouder wint ;-), ik heb de D18b20 weer aan de praat door de Dallas component van ESPHome-versie 2022.6.3 te sideloaden als External Component (https://esphome.io/components/external_components.html)

Grofweg zijn de stappen:
(1) in esphome-map (waar de YAMLs staan) een mapje "my_components" aanmaken met daarin een map "dallas"
(2) esphome-versie 2022.6.3 downloaden https://github.com/esphome/esphome/releases?page=3 en uitpakken
(3) van daaruit alle bestanden uit de map esphome > components > dallas naar je map "dallas" uit stap (1) kopiëren
(4) In de YAML van je esp device het volgende opnemen:
external_components:
- source:
type: local
path: my_components
components: [ dallas ]
Nice, bedankt voor de feedback!

(En jammer dat Tweakblogs weggaat.... Je hebt me wel een idee gegeven voor een ESP pompschakelaar :) Vraag me alleen af hoe lang de Grundfoss z'n settings onthoudt)

Door Tweakers user ma3d1um, vrijdag 28 oktober 2022 11:43

Ja, ik heb idd een pompschakelaar nagebouwd om m'n (domme) Grundfoss alleen in te schakelen bij bepaalde aanvoertemperaturen. Heb jij dan een digitale Grundfoss oid die misschien z'n settings niet onthoudt?

Door Tweakers user S0epkip, vrijdag 28 oktober 2022 12:24

ma3d1um schreef op vrijdag 28 oktober 2022 11:43:
Ja, ik heb idd een pompschakelaar nagebouwd om m'n (domme) Grundfoss alleen in te schakelen bij bepaalde aanvoertemperaturen. Heb jij dan een digitale Grundfoss oid die misschien z'n settings niet onthoudt?
Ik heb een Grundfoss Alpha die onthoudt op welke stand hij stond als hij uit is geweest. (Bijvoorbeeld constante druk, stand 2). Ik weet niet hoe lang hij dat onthoudt...

Door Tweakers user Martijn02, woensdag 16 november 2022 08:40

ma3d1um schreef op donderdag 27 oktober 2022 15:30:
OK, de aanhouder wint ;-), ik heb de D18b20 weer aan de praat door de Dallas component van ESPHome-versie 2022.6.3 te sideloaden als External Component (https://esphome.io/components/external_components.html)

Grofweg zijn de stappen:
(1) in esphome-map (waar de YAMLs staan) een mapje "my_components" aanmaken met daarin een map "dallas"
(2) esphome-versie 2022.6.3 downloaden https://github.com/esphome/esphome/releases?page=3 en uitpakken
(3) van daaruit alle bestanden uit de map esphome > components > dallas naar je map "dallas" uit stap (1) kopiëren
(4) In de YAML van je esp device het volgende opnemen:
external_components:
- source:
type: local
path: my_components
components: [ dallas ]
Ik heb net dit project nagebouwd. (Goed idee, duidelijk opgeschreven, ging probleemloos). Voor mij was het met ESPHome 2022.8.3 niet meer nodig om een oude dallas module te side-loaden. De stappen in het blog volgen was voor mij voldoende om het ding te laten werken.

Door Tweakers user S0epkip, woensdag 16 november 2022 09:51

Leuk om te horen, thanks voor je feedback!

Door Tweakers user tiesvts, maandag 12 december 2022 11:31

Ik ben op al tijdje aan het zoeken naar een oplossing om mijn cv leidingen temperatuur te meten in home assistant..Dat lijkt met deze oplossing te lukken. Echter lees ik op veel fora etc dat ze gebruik maken van een weerstand. Dat zie ik niet in dit artikel? Dat is niet nodig of?
...nevermind...Beter lezen..

[Reactie gewijzigd op maandag 12 december 2022 11:38]


Door Tweakers user S0epkip, maandag 12 december 2022 21:00

tiesvts schreef op maandag 12 december 2022 11:31:
Ik ben op al tijdje aan het zoeken naar een oplossing om mijn cv leidingen temperatuur te meten in home assistant..Dat lijkt met deze oplossing te lukken. Echter lees ik op veel fora etc dat ze gebruik maken van een weerstand. Dat zie ik niet in dit artikel? Dat is niet nodig of?
...nevermind...Beter lezen..
De DS18B20 zijn de temperatuursensors :)

Om te kunnen reageren moet je ingelogd zijn. Via deze link kun je inloggen als je al geregistreerd bent. Indien je nog geen account hebt kun je er hier één aanmaken.