DIY: Byg din egen luftkvalitetsmåler og koble den til Home Assistant

Vidste du, at luften indenfor ofte kan være mere forurenet end storbyens gader? Alligevel er det sjældent, vi tænker over, hvad vi egentlig indånder i stuen, på børneværelset eller på hjemmekontoret. Forestil dig derfor, at du med få komponenter og lidt nørkleri kan bygge din helt egen smart luftkvalitetsmåler – og lade den tale direkte sammen med Home Assistant, så du får advarsler, grafer og automatiseret udluftning helt uden abonnementer eller dyre færdigkøbte bokse.

I denne guide viser Fritid Magasinet dig trin for trin, hvordan du:

  • vælger de rigtige sensorer til partikler, CO2, temperatur, fugt og VOC.
  • samler hardwaren pænt i et kabinet, hvor luftflow og præcision er i fokus.
  • flasher ESPHome-firmware og finpudser kalibreringen, så målingerne bliver til at stole på.
  • bygger et lækkert Home Assistant-dashboard med alarmer, grafer og automatiseringer.

Uanset om du er erfaren maker eller ny i loddekolbe-gamet, får du her en konkret indkøbsliste, praktiske tips og masser af “gotchas”, så du undgår dyre fejlkøb og halve målinger. Resultatet? Et personligt overvågningssystem for indeklimaet, som både forbedrer din hverdag og tilfredsstiller din indre gadget-entusiast.

Lyder det som et projekt for dig? Så find loddekolben frem, hæld en kop kaffe op, og lad os dykke ned i komponenterne!

Komponenter og værktøj: Sensorer, microcontroller, strøm og kabinet

Før du finder loddekolben frem, er det værd at danne sig et hurtigt overblik over de komponenter, der danner kernen i en gør-det-selv luftkvalitetsmåler. Hjern­en i projektet er en ESP-baseret microcontroller. Skal du blot sende få målinger og vil ned i pris, er en klassisk ESP8266 NodeMCU fin – den koster typisk 35-45 kr. og kan købes hos danske forhandlere som Electro Embeds eller på Pricerunner-listede webshops. Har du brug for hurtigere processor, Bluetooth, flere GPIO-ben og OTA-opdateringer uden at ramme hukommelsesloftet, så vælg en ESP32 DevKit-C; prisniveauet ligger omkring 65-85 kr. fra f.eks. Proshop, Elektronik-Lavpris eller Berrybase i Tyskland. ESP32 giver samtidig mulighed for fremtidig udvidelse med f.eks. e-ink-display eller batteriovervågning.

Til selve målingen af partikler i luften er en optisk laserspredningssensor nødvendig. Den kompakte PMS5003 er populær, leverer PM1.0/2.5/10-værdier hvert sekund og har et diskret JST-stik, så tilkoblingen til ESP-boardet er næsten plug-and-play. Den har en forventet levetid på cirka 8 000 driftstimer og ligger i omegnen af 150-200 kr. inkl. dansk moms. Vil du have en sensor der tåler kontinuerlig 24/7-drift, kan SDS011 overvejes – den er fysisk lidt større, suger mere strøm, men klares ofte med større luftflow og fås til omtrent samme pris i EU-shops som Welectron eller Tindie. Nøjagtighedsmæssigt er de to modeller tæt på hinanden ved moderat luftfugtighed, men SDS011 leverer marginalt mere stabilitet i høje koncentrationer, mens PMS5003 støjer mindre ved lave værdier.

Når det gælder kuldioxid er valget reelt mellem NDIR-teknologi i luksusklassen og den acceptable budgetvariant. SCD40/SCD41 fra Sensirion er guldstandarden – de bruger en mikroskopisk NDIR-celle, kræver kun 3,3 V, rummer autokalibrering og måler 0-40 000 ppm med ±(50 ppm + 5 %) nøjagtighed. Prisen afspejler det: 320-380 kr. for et breakout-modul hos Digi-Key, Mouser eller danske Labitat-butikker. I den anden ende finder vi MH-Z19C: lavere opløsning, lidt større formfaktor, men stadig fornuftig til hjemmebrug og fås til omkring 130-160 kr. fra Allectra eller Amazon.de. Begge sensorer taler enten UART eller I2C, så de spiller glimrende sammen med både ESPHome og Tasmota.

Temperatur, fugt og VOC-indeks håndteres ofte af ét integreret modul. Ønsker du kun temperatur og relativ fugtighed, er BME280 fremragende, billig (ca. 40 kr.) og ekstremt veldokumenteret. Har du lyst til at se formaldehyd- og VOC-tendenser, så opgradér til BME680. Den er dyrere – 95-110 kr. – men giver til gengæld IAQ-score og gasresistans, som Home Assistant kan omsætte til alarm­notifikationer om kemisk afgasning fra møbler eller madlavning.

Alle ovenstående sensorer kører på 3,3 V logik, men flere har behov for 5 V til selve laseren/NDIR-cellen. Den mest problemfri strøm­løsning er en 5 V 2 A USB-strømforsyning (gammel mobiloplader fungerer fint) kombineret med en step-down régulator, der leverer stabil 3,3 V til ESP-printet. Husk fælles jord (GND) mellem alle delsystemer for at undgå fantom­målinger.

Kabler kan klares med Dupont-ledninger til prototyping; ønsker du høj drifts­sikkerhed, skift til JST-XH-ledninger eller lod direkte på et lille perfboard. Et breadboard er fint til første opkobling, men permanent brug bør ske med lodning og eventuel krympeflex for trækaflastning. Af værktøj er en temperatur­regulerbar loddekolbe, stander, tinned wire og en simpel multimeter næsten nødvendigt. Har du adgang til en 3D-printer, kan du designe et kabinet i PETG eller ASA, hvor der er separate kamre og luftsluser, der fører en kontrolleret luftstrøm forbi sensorerne uden at eksponere dem for ekstreme trykændringer. Laver du et udendørs kabinet, er et groft støvfilter før partikelsensorens indtag en billig forsikring mod edderkopper og pollenpropper; et stykke skum fra et gammelt pc-filter klippet til formål­et virker forbavsende godt.

Prismæssigt kan et komplet sæt dele således svinge fra cirka 350 kr. (ESP8266, PMS5003, MH-Z19C, BME280) til 700 kr. og opefter, hvis du går all-in på ESP32, SCD41 og BME680. Alle nævnte dele kan bestilles inden for EU, hvilket både forkorter leveringstiden og eliminerer told­overraskelser, og flere danske makerspaces fører allerede sensor-moduler på hylden, hvis du vil samle kittet i aften. Når alt er i hus, er du klar til næste skridt: at få elektronikken til at snakke sammen og sende de første målinger ud i æteren.

Hardware-samling trin for trin: Tilslutninger, luftflow og første test

Start på et breadboard, så du kan flytte om på ledningerne uden at hive pad’ene af printet. Brug farvekodede dupont-kabler – f.eks. rød til 5 V, orange til 3,3 V, sort til GND, blå til SDA og gul til SCL – så er fejlfinding senere meget lettere.

Typisk pinout på en ESP32 DevKit v1
Funktion ESP32-pin Sensor-side
I2C SDA GPIO 21 SDA
I2C SCL GPIO 22 SCL
UART RX GPIO 16 TX fra partikelsensor
UART TX GPIO 17 RX fra partikelsensor
5 V out VIN PMS5003/SDS011 + evt. SCD41
3,3 V out 3V3 BME680, MH-Z19C (logik)
GND GND Alle sensorer
  1. BME680/BME280 (temp/fugt/VOC): Kør 3,3 V til VCC, SDA til GPIO 21, SCL til GPIO 22, og husk fælles GND.
  2. CO₂-sensor (SCD40/SCD41): Tåler 5 V, men bruger 3,3 V logik. Hvis du forsyner med 5 V, lad I2C-linjerne gå direkte til ESP’en – chippen har level-shiftere indbygget.
  3. Partikelsensor (PMS5003, SDS011): Brug 5 V-pinsen. Kryds RX/TX (ESP TX → sensor RX, ESP RX → sensor TX). Træk SET-benet højt, hvis du ikke vil bruge sleep-funktionen.

Hold alle jordforbindelser korte og stjerneformede for at minimere støjsløjfer. Hvis du ender med at lodde, sæt krympeslange på alle blottede stikben.

2. Luftflow og kabinet – Mål luften, ikke elektronikken

En tæt plast- eller 3D-printet kasse med to små labyrint-lufthuller (ind og ud) giver roligt flow uden direkte lys. Partikelsensoren skal have sin egen kanal, så luft suges gennem dens indbyggede blæser, mens de øvrige sensorer placeres i den generelle luftstrøm.

  • Skum eller silikone-fødder: dæmper vibrationer, så PMS5003’ens laserdiode ikke måler støv fra dine egne resonanser.
  • Lysafskærmning: En indvendig, sort PLA-skærm over fotodioder mindsker falske peaks fra sollys.
  • Servicelåg for filter: Vil du senere sætte et G4-præfilter på indtaget, så print et klik-låg, der kan skiftes uden skruer.

3. Placering i rummet

Sæt måleren i åndehøjde (ca. 1,5 m), mindst 50 cm fra væg og ikke ved vinduer, radiatorer eller direkte sol. Har du mekanisk udsugning, prøv at placere den i “den snavsede ende” af luftstrømmen for at fange partikler, før de når resten af boligen.

4. Første røgtest – Taler sensorerne sammen?

  1. Seriemonitor: Åbn Arduino IDE eller ESPHome-log-viewer og se live-data. Du bør få læsninger hvert 2-10 sek. Kommer der nuller eller -1, er det typisk en forkert baudrate (UART) eller bytning af SDA/SCL.
  2. Kortslut ikke strømmen: Hvis ESP’en rebooter, når PMS5003 starter, mangler du strømreserve. Skift til 1 A 5 V-forsyning eller sæt et 220 µF kondensatorpar mellem 5 V og GND.
  3. Røgtest: Hold en tændt tændstik 30 cm fra indtaget i 2-3 sek. PM2.5 bør stige eksplosivt (f.eks. 10 → 300 µg/m³) og falde igen på 1-2 min. Temperaturen bør stige < 0,5 °C, ellers er luftflowet for lille.
  4. CO₂-respons: Pust let mod indtaget. Værdien skal hoppe 200-500 ppm og falde til baseline inden for 5-10 min. Ingen reaktion? Tjek om sensoren er i altitude-kompensation eller mangler 5 V.

5. Fejlfinding af støj og falske data

Ser du skæve værdier i takt med Wi-Fi-transmissioner, så tilføj et lille LC-filter (100 µH + 10 µF) på sensorer, der kører 3,3 V. Du kan også sætte I2C-pull-ups til 2,2 kΩ i stedet for de typiske 4,7 kΩ for at få skarpere kanter på lange ledninger.

Når tallene opfører sig logisk, og enheden holder forbindelsen i mindst en time, er hardwaren klar til firmware-delen.

Firmware og konfiguration: ESPHome/Tasmota, kalibrering og opdateringer

Når hardwaren er samlet, er næste skridt at give din ESP32/ESP8266 hjerne og sprog. De to mest populære open-source firmwares er ESPHome og Tasmota. Begge kan sende data til Home Assistant, men ESPHome har den klare fordel, at integrationen sker automatisk, alt konfigureres i ren YAML, og du slipper for håndskrevne MQTT-topics.

1. Vælg og flash firmware

Anbefalet arbejdsgang med ESPHome:

  1. Installer ESPHome-add-on i Home Assistant (Supervisor → Add-on Store) eller hent ESPHome-CLI på din computer.
  2. Slut microcontrolleren til USB og vælg “New Device”. Guiden spørger om Wi-Fi-SSID, adgangskode, enhedens navn og eventuel OTA-/API-adgangskode.
  3. Når YAML-skabelonen er genereret, tryk “InstallPlug into this computer”. Første upload foregår via USB-seriel (115 200 baud). Efterfølgende sker opdateringer trådløst (OTA).

Foretrækker du Tasmota? Flash-processen er næsten identisk (bruger f.eks. tasmotizer). Fordelen er en web-GUI med indbygget kalibrering; ulempen er, at du manuelt skal mappe hver måling til MQTT og konfigurere Home Assistant.

2. Grundlæggende yaml-konfiguration

Nedenfor ses et kondenseret eksempel, der dækker PMS5003 (partikler), SCD40 (CO₂), og BME680 (temp/fugt/VOC). Tilpas GPIO-numre efter dit board.

esphome: name: luftmaaler platform: ESP32 board: nodemcu-32swifi: ssid: "DitWiFi" password: "hemmeligt123" ap: # fallback-hotspot ssid: "Luftmaaler Fallback" password: "fallback123"api: encryption: key: "GENERERET_API_NØGLE"ota: password: "opdatermig"logger: baud_rate: 0 # sluk kerne-UART for at frigive RX/TXuart: - id: uart_pms tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 9600sensor: - platform: pmsx003 # PMS5003 / PMS7003 / SDS011 type: PMSX003 uart_id: uart_pms update_interval: 60s pm_2_5: name: "PM2.5" filters: - median: window_size: 5 send_every: 1 pm_10_0: name: "PM10" - platform: scd4x co2: name: "CO2" accuracy_decimals: 0 filters: - sliding_window_moving_average: window_size: 5 temperature: name: "SCD40 Temp" humidity: name: "SCD40 Hum" update_interval: 60s automatic_self_calibration: true - platform: bme680 temperature: name: "Rumtemp" humidity: name: "Relativ Fugt" pressure: name: "Tryk" gas_resistance: name: "VOC (gas ohm)" address: 0x76 update_interval: 60s iir_filter: 2text_sensor: - platform: wifi_info ip_address: name: "IP-adresse"

3. Finjuster måleintervaller og filtrering

Partikelsensorer reagerer hurtigt på støv eller røg, mens CO₂ ændrer sig langsommere. Et update_interval på 60 sekunder er ofte en god balance mellem strømforbrug, datamængde og respons. Brug:

  • median til at fjerne spikes på partikelmålinger.
  • sliding_window_moving_average eller exponential_moving_average til CO₂ for roligere grafer.

4. Kalibrering

CO₂ (SCD40/SCD41, MH-Z19C)
Sensorerne har indbygget autotune (ASC). Den virker kun, hvis måleren oplever frisk luft (~400 ppm) mindst én gang i døgnet. Placer derfor enheden udendørs i nogle timer den første uge, eller brug ESPHome-kommandoen scd4x.perform_forced_recalibration med kendt reference.

VOC (BME680)
Chippen kræver “burn-in” på 24-48 timer, før modstandsværdier bliver stabile. Lad den køre i normal drift; ESPHome håndterer selv baseline-beregningen.

Partikler
Undgå at montere sensoren i et helt lukket kabinet. Sørg for roligt luftflow igennem målekammeret, ellers bliver PM-tallene for lave.

5. Sikkerhed og backup

  • Angiv encryption.key under api: og stærk ota.password. Derved forhindrer du fremmede i at flashe eller aflæse data.
  • Skjul Wi-Fi-adgangskoder via secrets.yaml. ESPHome understøtter samme teknik som Home Assistant.
  • Gem YAML-filerne i et git-repository (GitHub, GitLab eller lokal). Så kan du altid genetablere enheden eller duplikere den på nye boards.
  • Lav en fuld SD-kort-backup af Home Assistant, så grafhistorik og dashboards følger med, hvis serveren crasher.

Når firmwaren er uploadet, genstarter ESP-enheden, tilslutter sig Wi-Fi og melder straks alle sensorer ind i Home Assistant via native API. Fem minutter senere bør du have friske verdier i dit Lovelace-dashboard – klar til automatiseringer og nørdet datanørderi.

Home Assistant: Integration, dashboards, alarmer og automatiseringer

Har du valgt ESPHome på din ESP32/8266 er resten næsten plug-and-play:

  1. Sørg for, at api: og ota: er aktiveret i din ESPHome-YAML.
  2. Genstart firmwaren. Home Assistant popper nu op med en meddelelse: “Ny ESPHome-enhed fundet”. Klik Konfigurer » Tilknyt.
  3. Alle sensorer (CO₂, PM2.5, temperatur osv.) bliver nu oprettet som entiteter (sensor.luftmaaler_co2, sensor.luftmaaler_pm25 …).

Hvis du bruger Tasmota eller MQTT, skal du sikre dig, at MQTT Discovery er slået til under Indstillinger » System » Integrations. Sensorerne dukker herefter op på samme måde.

2. Byg et overskueligt lovelace-dashboard

Nøglen er at kombinere Gauge-, Statistics Graph– og Entity-kort, så du både får øjebliksbillede og trend.

type: gaugeentity: sensor.luftmaaler_co2name: CO₂min: 400max: 3000needle: trueseverity: green: 400 yellow: 1000 red: 1500

Til partikler giver et “Statistisk graf”-kort hurtigt overblik:

type: statistics-graphentities: - sensor.luftmaaler_pm25period: hourstat_types: - mean - max

Afslut med et “Status”-kort, der samler alle værdier, så de let kan overvåges fra mobilen.

3. Automatiseringer: Notifikationer og ventilation

Under Automatiseringer & Scener kan du klikke “Opret” og bruge UI-guiden, men YAML-eksemplerne herunder er hurtigst at kopiere.

alias: Advarsel - CO2 over 1500 ppmtrigger: - platform: numeric_state entity_id: sensor.luftmaaler_co2 above: 1500for: minutes: 5action: - service: notify.mobile_app_min_telefon data: title: "Dårlig luftkvalitet" message: "CO₂ er nu {{ states('sensor.luftmaaler_co2') }} ppm - luft ud!"

3.2 tænd luftrenser pr. Smart-stik ved høj pm2.5

alias: Start luftrensertrigger: - platform: numeric_state entity_id: sensor.luftmaaler_pm25 above: 35condition: []action: - service: switch.turn_on target: entity_id: switch.luftrenser_stuemode: single

Lav en tilsvarende automation der slukker igen, når værdien har været under 15 µg/m³ i fx 10 minutter.

4. Datahistorik og nørdemode

  • Recorder: Sæt purge_keep_days til 30 dage for at spare plads.
  • InfluxDB-add-on: Gem rådata uden nedrundinger – perfekt til langtidstrends.
  • Grafana-add-on: Lav dashboards med døgnmiddeltal, ugemønstre og korrelation mellem temperatur og CO₂.
# configuration.yamlrecorder: purge_keep_days: 30 include: entities: - sensor.luftmaaler_co2 - sensor.luftmaaler_pm25influxdb: host: a0d7b954-influxdb username: homeassistant password: !secret influx_pass include: entity_globs: - sensor.luftmaaler_*

5. Vedligehold, privatliv og fejlfinding

  1. Firmware-opdateringer: Brug OTA i ESPHome » (Enhed) » Overstrygningsopdater – kræver ingen fysisk adgang.
  2. Sensor-kalibrering: Kør CO₂-autokalibrering udendørs én gang hvert halve år, og blæs trykluft gennem partikelsensorens indtag for at fjerne støv.
  3. Privatliv: Del kun grafer via Home Assistant Cloud eller VPN. Lad være med at eksponere instansen direkte til internettet.
  4. Fejlfind: Se Indstillinger » Enheder & Services » ESPHome » Log for sensor-timeouts, og brug ping-sensor til at overvåge Wi-Fi-stabilitet.

Med integration, et skarpt dashboard og automatiseringer på plads får du ikke bare tal for luftkvaliteten – du får et intelligent hjem, der selv reagerer, før luften bliver dårlig. God kodning og ren luft!