En magnetkontakt på døren kan gi et pip når garasjen åpnes, sende beskjed over WiFi eller inngå i en alarm med Home Assistant. Her bygger du tre løsninger: en enkel døralarm uten kode, en nettverkstilkoblet dørsensor med M5Stack og en liten alarmsentral på Raspberry Pi. Det samme prinsippet virker på et vindu, et skap eller en boddør.
Et byggeprosjekt, ikke en godkjent innbruddsalarm
Bruk løsningene til læring og ekstra varsling. De erstatter ikke et sertifisert alarmsystem. Kortsluttet sensorkabel, strømbrudd eller svikt i nettverket kan skjule en hendelse. Prosjektene bruker 3,3 V og 5 V, med 12 V til den valgfrie varsellampen. Ingen av kretsene du bygger, skal kobles til 230 V.
Om utprøvingen: Koblinger og programmer er kontrollert mot dokumentasjon og med programvaretester. Prosjektene er ennå ikke bygget og prøvd på fysisk maskinvare. Følg testpunktene på benken før du monterer noe.
Velg din døralarm med magnetkontakt
| Prosjekt | Resultat | Du lærer | Begrensning |
|---|---|---|---|
| 1. Summer og transistorer | Lyd så lenge døren er åpen | Reedkontakt, basestrøm og transistorbryter | Ingen forsinkelse, fjernvarsling eller alarmminne |
| 2. AtomS3 Lite og MQTT | OPEN/CLOSED til en mottaker på lokalnettet | GPIO, kontaktstøy, WiFi og meldinger | Korte åpninger kan gå tapt under nettverksbrudd |
| 3. ESPHome og Home Assistant | Selvstendig sensor, alarmtilstander og mobilvarsel | Lokal smarthusstyring og feiltilstander | Server og nettverk må ha strøm; mobilvarsel kan kreve internett |
Bygg ett nivå om gangen. Prosjekt 2 og 3 bruker samme sensor og AtomS3 Lite, men forskjellig programvare: når du legger inn ESPHome, erstatter det UIFlow. Du trenger ikke kjøpe to kontrollere for å prøve begge.
Slik virker en magnetisk dørkontakt
En reedkontakt er en bryter som påvirkes av en magnet. Den trenger ikke egen strømforsyning. Magnetfeltet beveger små metallkontakter inne i sensoren; elektronikken utenfor må avgjøre hva et åpent eller lukket kontaktpar betyr.
Vi bruker magnetkontakten MR-00148 med magnet og monteringsskruer. For dette oppsettet skal den lede når magneten er nær, og bryte når magneten fjernes. Mål med multimeter før du bygger. Med magneten nær skal du måle lav motstand. Når magneten flyttes bort, skal måleren vise brudd. Produktkortet oppgir omtrent 200 Ω intern motstand, så multimeterets kontinuitetssummer er ikke alltid nok til å bedømme kontakten.
| Dør | Magnet | Kontakt | GPIO med pull-up |
|---|---|---|---|
| Lukket | Nær sensoren | Leder | 0 / LOW |
| Åpen | Borte fra sensoren | Brudd | 1 / HIGH |
| Kabelbrudd | Uansett | Brudd | 1 / HIGH |
Monter sensoren på den faste karmen og magneten på den bevegelige delen. Prøv plasseringen med tape før du skrur fast. Avstanden må gi stabilt lukket signal også når døren beveger seg litt i trekken. Metall rundt en garasjeport kan endre magnetfeltet; test på selve monteringsstedet.
Prosjekt 1: enkel alarm med aktiv summer
En aktiv summer har tonegenerator inni og lager lyd når den får likespenning. En passiv summer trenger et vekslende styresignal og kan ikke settes rett inn i samme krets. MR-00118 bruker 5 V og trekker høyst 30 mA etter produktopplysningene.
- BC547B, pakke med femBruk to: Q1 snur signalet, Q2 driver summeren.Bipolar NPN-transistor i TO-92, 45V og 0,1A, 5 stk.På lagerkr 29,00
- Motstandssett med 16 verdierBruk én 10 kΩ, én 100 kΩ og én 1 kΩ, alle 0,25 W.Motstandssett med 160 THT-motstander i 16 verdier, 0,25 WPå lagerkr 149,00
- 1N4007-dioderBruk én over summeren, med stripen mot +5 V.Likeretterdiode 1N4007, 1A/1000V, 10-pakningPå lagerkr 25,00
- Koblingsbrettsett med strømmodul og ledninger830 hull og 65 hann-hann-ledninger. Kontroller inngangen på strømmodulen; nettadapter følger ikke nødvendigvis med.Koblingsbrettsett med 830 hull, strømmodul og ledningerPå lagerkr 219,00
Til første benktest bruker du en regulert laboratorieforsyning på 5,0 V med strømgrense på omtrent 0,10 A. Har du allerede et koblingsbrett og ledninger, trenger du ikke et nytt sett. En MB102-modul må få riktig likespenning på DC-inngangen og ha jumperen på 5 V; USB-A-kontakten på modellen i butikken er oppgitt som utgang, ikke som inngang. Bruk aldri et løst nettspenningskort for dette prosjektet.
Hvorfor to transistorer?
Magnetkontakten leder når døren er lukket. Setter du den bare i serie med summeren, får du lyd på feil tidspunkt. Her slår den på Q1 i lukket tilstand. Q1 holder basen til Q2 lav, slik at Q2 og summeren er av. Når døren åpnes, slås Q1 av; 1 kΩ-motstanden gir basestrøm til Q2, og summeren får strøm.
To trinn tar også hensyn til motstanden i kontakten. En snarvei der en slik kontakt skal kortslutte basen til én transistor, kan gi for høy basespenning og svak lyd selv med lukket dør. I koblingen under går bare rundt 0,4 mA gjennom kontakten. Summerens strøm går gjennom Q2.
Koble kretsen uten strøm
BC547B har tilkoblingene kollektor (C), base (B) og emitter (E). Kontroller databladet for transistoren du har; ikke bytt til en annen type ut fra at plastkapslingen ser lik ut. Skjemaet viser elektriske forbindelser, ikke plasseringen av beina. Sett hvert bein i en egen kontaktgruppe på koblingsbrettet. MR-00148 har to skrueklemmer under dekselet. Skru en hann-hann-ledning fast i hver klemme og sett de andre endene i koblingsbrettet. Kontakten har ingen polaritet, så det spiller ingen rolle hvilken klemme som går til +5 V.
| Fra | Til | Rolle |
|---|---|---|
| +5 V | Kontaktens første skrueklemme | Strøm til styretrinnet |
| Kontaktens andre skrueklemme | 10 kΩ, deretter Q1 base | Begrenser basestrøm |
| Q1 base | 100 kΩ til GND | Holder Q1 av ved brudd |
| Q1 emitter og Q2 emitter | GND | Felles minus |
| Q1 kollektor | Q2 base | Snur signalet |
| +5 V | 1 kΩ, deretter Q2 base | Slår Q2 på når Q1 er av |
| Summer + / summer − | +5 V / Q2 kollektor | Lydutgang |
| 1N4007 katode / anode | +5 V / Q2 kollektor | Stripen på dioden mot pluss |
- Mål motstandene før du setter dem inn. Kontroller at pluss- og minusskinnene ikke er kortsluttet.
- Koble etter tabellen. Har strømskinnene et brudd midt på brettet, må du koble de delene du bruker sammen.
- Hold magneten nær sensoren og slå på 5 V. Summeren skal være stille.
- Flytt magneten bort. Summeren skal gi en jevn tone. Før magneten tilbake: lyden skal stoppe.
- Koble fra én sensorledning mens forsyningen er på. Lyden skal komme tilbake. Slå av forsyningen før du endrer andre koblinger.
Prøv selv: Sett inn en bryter i 5 V-ledningen, slik at du kan slå alarmen av og på manuelt. Alarmen har ikke minne: den blir stille når døren lukkes. Den slutter også å virke hvis strømmen forsvinner.
Hvis summeren alltid piper eller aldri piper
Alltid lyd: undersøk sensorledningen, Q1 og forbindelsen fra Q1 kollektor til Q2 base. Ingen lyd: mål 5 V, sjekk summerens polaritet og kontroller C, B og E på Q2. En diode som står feil vei, kan kortslutte forsyningen gjennom Q2; slå av straks hvis strømgrensen slår inn. Kontroller også at du har en aktiv summer.
Vil du forstå beregningen bak basestrømmen, fortsett med guiden om BJT og MOSFET. For en fast installasjon erstattes løse koblingsbrettforbindelser med ordentlige tilkoblinger og strekkavlastning.
Prosjekt 2: M5Stack sender dørstatus over WiFi
MQTT er en måte å sende små meldinger via en sentral mottaker, en broker. Enheten publiserer for eksempel OPEN på emnet verksted/dor/state. Et annet program abonnerer på emnet og kan vise status, logge åpninger eller aktivere noe. Du binder dermed ikke sensoren til én bestemt app.
På AtomS3 Lite er lederen ved siden av den røde GPIO2, og den svarte er GND. I MR-01369 er GPIO2-lederen blå. Koble kontakten mellom disse: løsne skruene under dekselet, tvinn de tynne trådene i hver lederende sammen, stikk dem inn i hver sin klemme og skru til. Trekk lett i lederne for å kontrollere at de sitter. Den røde lederen er 5 V, og den gule lederen ytterst er GPIO1. Begge skal være frakoblet og isolert i dette prosjektet. M5Stacks egne HY2.0-kabler har andre farger: gul for GPIO2 og hvit for GPIO1. Følg derfor plasseringen i pluggen, ikke bare fargen. Koblingen er ikke lik på eldre Atom Lite. Ikke koble 5 V fra prosjekt 1 til GPIO2.
Den interne pull-up-motstanden trekker GPIO2 mot 3,3 V når kontakten bryter. Med lukket kontakt trekkes inngangen mot GND. Bruk en kort sensorledning på arbeidsbenken. Lange kabler ut til en garasje trenger ekstra beskyttelse og vurdering av støy; dette er ikke et ferdig oppsett for lange utendørs strekk.
1. Gjør MQTT-mottakeren klar
- Bruk en eksisterende lokal MQTT-broker, eller installer Eclipse Mosquitto på en datamaskin som skal stå på. Lag en egen mappe for benktesten. Ikke endre en broker som allerede styrer huset.
- Opprett passordfilen fra denne mappen med kommandoen under. Verktøyet spør etter et passord; bruk en egen konto til prosjektet.
- Lagre konfigurasjonen som
mosquitto.confi samme mappe og start Mosquitto derfra. Port 1883 må være ledig. Tillat innkommende trafikk bare fra det betrodde lokalnettet i datamaskinens brannmur. - Finn datamaskinens lokale IPv4-adresse i nettverksinnstillingene. Reserver adressen i ruteren. Kortet og mottakeren må kunne nå hverandre; et isolert gjestenett virker vanligvis ikke.
mosquitto_passwd -c passwd dorvarsler
mosquitto -c mosquitto.conf -v
listener 1883
allow_anonymous false
password_file ./passwd
persistence false
Bruk -c bare når du oppretter en ny passordfil; på en eksisterende fil ville den slette de andre brukerne. Kjør testbrokeren som din vanlige bruker fra prosjektmappen, ikke med administratorrettigheter. Konfigurasjonen passer Mosquitto 2.x. Dersom installasjonen allerede kjører som en tjeneste, bruk den tjenestens dokumenterte oppsett i stedet for å starte en ekstra broker på samme port.
2. Legg inn UIFlow og prøv blokkprogrammet
- Åpne M5Burner, velg AtomS3 Lite og installer UIFlow 2-firmware for akkurat denne modellen. Bruk en datakabel. Hvis porten ikke dukker opp, hold resetknappen inne i omtrent to sekunder til enheten går i nedlastingsmodus, slik M5Stacks veiledning beskriver.
- Åpne UIFlow 2, velg samme modell og koble til via USB. Begynn med programmet under, som bare leser kontakten og skriver til WebTerminal.
- Åpne og lukk kontakten. Vent på
OPENogCLOSED. Signalet skal ha vært stabilt gjennom omtrent 60 ms før det godtas. - Lagre prosjektet på maskinen. Bruk Run Once under utprøving og Run Always først når du har kontrollert oppførselen.
UIFlow-guiden med M5Burner, blokker og WebTerminal forklarer oppkoblingen grundigere. Her er hele avlesningsprogrammet; nettverksdelen kommer i neste trinn.
Last ned blokkprosjekt og kildekode
Pakk ut ZIP-filen, åpne magnetkontakt-atoms3-lite-blokker.m5f2 fra filmenyen i UIFlow 2 og velg AtomS3 Lite. Python-koden under følger samme logikk. Blokkfilens struktur er kontrollert mot offisielle M5Stack-eksempler; faktisk import og kjøring må fortsatt prøves på ditt oppsett.
# MRSMART: same algorithm as the accompanying UIFlow2 blocks.
# AtomS3-Lite, UIFlow2. Reed between GPIO2 and GND (blue and black lead on MR-01369).
import M5
from hardware import Pin
import time
M5.begin()
pin2 = Pin(2, mode=Pin.IN, pull=Pin.PULL_UP)
sample = -1
stable = -1
count = 0
while True:
M5.update()
raw = pin2.value()
if raw == sample:
if count < 3:
count += 1
else:
sample = raw
count = 0
if count >= 3 and raw != stable:
stable = raw
if stable == 1:
print("OPEN")
else:
print("CLOSED")
time.sleep_ms(20)
Send MQTT med ekte UIFlow-blokker
Vil du prøve hele meldingsveien med blokker, åpner du magnetkontakt-atoms3-lite-wifi-blokker.m5f2 fra ZIP-filen. Dette er et eget program; det erstatter det lille avlesningsprogrammet. I Setup fyller du ut WIFI_SSID, WIFI_PASSWORD, MQTT_HOST, MQTT_USER og MQTT_PASSWORD. Gi hver enhet sin egen CLIENT_ID, for eksempel mrsmart-dor-benktest-1. Sett STATE_TOPIC til hele emnet, for eksempel verksted/dor/state.
Start mottakeren før du kjører blokkprogrammet. Etter WiFi- og MQTT-tilkoblingen publiserer det OPEN eller CLOSED når den filtrerte tilstanden endres, og omtrent hvert femte sekund mens forbindelsen fungerer. Den tilhørende filen magnetkontakt-atoms3-lite-wifi-blokker.py inneholder Python-koden fra de samme blokkene. Bruk testene for lukket dør, åpen dør og kontaktstøy fra forrige trinn.
Se hele blokkprogrammet for WiFi og MQTT
3. Legg inn innstillingene dine for WiFi og MQTT
Øverst i programmet under står seks innstillinger: navnet på WiFi-nettet, WiFi-passordet, brokerens lokale IPv4-adresse, MQTT-brukeren, MQTT-passordet og emnet. Kopier programmet og erstatt verdiene med dine egne. Bruk en privat adresse på lokalnettet, for eksempel 192.168.1.50, og et eget emne for hver dør.
Skriv verdiene som Python-strenger. Anførselstegn inne i strengen og omvendte skråstreker må skrives med en ekstra omvendt skråstrek foran. Filen inneholder da passordene dine; oppbevar den trygt og ikke del den med andre.
# AtomS3 Lite / UIFlow 2: GPIO2 to reed contact to GND.
# Local MQTT only. Do not expose port 1883 to the internet.
import time
import network
import machine
import ubinascii
import M5
from hardware import Pin
from umqtt.simple import MQTTClient, MQTTException
WIFI_SSID = "DITT_WIFI"
WIFI_PASSWORD = "DITT_WIFI_PASSORD"
MQTT_HOST = "192.168.1.50"
MQTT_USER = "dorvarsler"
MQTT_PASSWORD = "DITT_MQTT_PASSORD"
TOPIC = "verksted/dor"
M5.begin()
reed = Pin(2, mode=Pin.IN, pull=Pin.PULL_UP)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
client_id = b"dor-" + ubinascii.hexlify(machine.unique_id())
state_topic = (TOPIC + "/state").encode()
availability_topic = (TOPIC + "/availability").encode()
client = None
raw = reed.value()
stable = None
changed_at = time.ticks_ms()
last_wifi = time.ticks_add(changed_at, -10000)
last_mqtt = time.ticks_add(changed_at, -5000)
last_sent = time.ticks_add(changed_at, -15000)
pending = True
while True:
M5.update()
now = time.ticks_ms()
value = reed.value()
if value != raw:
raw = value
changed_at = now
if time.ticks_diff(now, changed_at) >= 50 and raw != stable:
stable = raw
pending = True
print("OPEN" if stable else "CLOSED")
if not wlan.isconnected():
if client is not None:
try:
client.sock.close()
except Exception:
pass
client = None
if time.ticks_diff(now, last_wifi) >= 10000:
last_wifi = now
try:
wlan.disconnect()
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
except OSError as error:
print("WiFi:", error)
elif client is None and stable is not None:
if time.ticks_diff(now, last_mqtt) >= 5000:
last_mqtt = now
candidate = None
try:
candidate = MQTTClient(client_id, MQTT_HOST, port=1883,
user=MQTT_USER.encode(), password=MQTT_PASSWORD.encode(), keepalive=60)
candidate.set_last_will(availability_topic, b"offline", retain=True)
candidate.connect(timeout=3)
candidate.sock.settimeout(3)
client = candidate
# Re-sample after connect: never publish an old state as current.
raw = reed.value()
stable = None
changed_at = time.ticks_ms()
pending = True
print("MQTT connected")
except (OSError, ValueError, MQTTException) as error:
print("MQTT:", error)
if candidate is not None:
try:
candidate.sock.close()
except Exception:
pass
elif client is not None and stable is not None:
if pending or time.ticks_diff(now, last_sent) >= 15000:
try:
client.publish(state_topic, b"OPEN" if stable else b"CLOSED", retain=True)
client.publish(availability_topic, b"online", retain=True)
last_sent = time.ticks_ms()
pending = False
except OSError as error:
print("MQTT send:", error)
try:
client.sock.close()
except Exception:
pass
client = None
last_mqtt = time.ticks_ms()
time.sleep_ms(20)
Programmet krever UIFlow 2-fastvare 2.4.0 eller nyere, fordi programmet setter tidsavbrudd på MQTT-tilkoblingen. På eldre fastvare stopper det med en TypeError; installer i så fall en nyere versjon med M5Burner. Kopier hele programmet til Python-editoren i UIFlow for AtomS3 Lite, og kjør det med WebTerminal åpen. Dette er tekstprogrammet med nettverkslogikk; det blir ikke automatisk gjort om til vanlige grafiske blokker. Bruk først Run Once. Når testen under er bestått, last det ned med Run Always og koble USB-strømmen fra og til for å kontrollere automatisk oppstart.
Hva gjør programmet?
Pin.PULL_UP gir inngangen en bestemt hvileverdi. Tidskontrollen på 50 ms filtrerer korte sprett når kontakten skifter. Programmet skriver til WebTerminal når den stabile tilstanden endres, og sender samme tilstand på MQTT.
En retained-melding betyr at brokeren beholder siste verdi til neste mottaker kobler til. Det er ikke bevis på at sensoren fortsatt lever. Derfor sendes også online, mens brokerens Last Will blir offline når forbindelsen forsvinner uventet. Ved manglende meldinger må en mottaker bruke en tidsgrense, ikke anta at en gammel CLOSED-melding betyr at døren fortsatt er lukket.
Koden sender oppdatering hvert 15. sekund og prøver nettverket igjen etter feil. Nettverksoperasjoner har tidsavbrudd, men et tilkoblingsforsøk kan stanse avlesningen i flere sekunder; dette er en statusvarsler, ikke en garantert hendelseslogger. Raske åpninger under nettverksbrudd eller tilkoblingsforsøk kan gå tapt. Etter ny tilkobling leses kontakten på nytt før neste melding.
4. Se meldingene og prøv en feil
Installer en MQTT-klient, for eksempel MQTT Explorer fra prosjektets eget nettsted. Opprett en forbindelse til den samme lokale IP-adressen, port 1883 og brukeren dorvarsler. Bruk passordet du opprettet. Abonner på verksted/dor/#, eller det emnet du valgte i skjemaet.
verksted/dor/state CLOSED
verksted/dor/availability online
verksted/dor/state OPEN
Trekk USB-kabelen ut av AtomS3 Lite og la brokeren stå på. Etter brokerens frist for manglende kontakt skal availability bli offline; det er ikke et øyeblikkelig signal. Koble strømmen tilbake og kontroller at den faktiske dørtilstanden kommer tilbake. Stans deretter brokeren og start den igjen: kortet skal koble til på nytt uten omprogrammering.
Prøv selv: bruk et eget emne for vinduet i boden, for eksempel bod/vindu. En mottaker kan abonnere på begge, men hver enhet må ha sitt eget emne. Kortet lager allerede en unik MQTT-klient-ID fra maskinvaren.
Prosjekt 3: Home Assistant som alarmsentral
Nå får døren en rolle i en liten alarmsentral. Du kan være hjemme uten alarm, aktivere anlegget med tid til å gå ut, og få 15 sekunder til å slå det av når du kommer tilbake. Sensoren sender status direkte til Home Assistant med ESPHome; MQTT-brokeren fra nivå 2 trengs ikke til denne varianten.
1. Installer serveren på Raspberry Pi
- Ta sikkerhetskopi av filene du vil beholde på microSD-kortet. Neste trinn sletter innholdet. Åpne Raspberry Pi Imager, velg riktig Pi-modell og Home Assistant OS under andre spesialoperativsystemer. Velg microSD-kortet og skriv operativsystemet til kortet.
- Sett kortet i Pi-en, koble Ethernet til ruteren og bruk strømforsyningen fra settet. Du trenger ikke skjerm eller tastatur for dette oppsettet.
- Vent til første oppstart er ferdig, og åpne
http://homeassistant.local:8123på samme nett. Hvis navnet ikke virker, finn Pi-ens IP-adresse i ruteren og bruk den med port 8123. - Opprett eierkonto, velg sted og tidssone, og ta en sikkerhetskopi etter grunnoppsettet. Reserver også Pi-ens IP-adresse i ruteren.
Følg Home Assistants egen installasjonsveiledning for modellvalget. Operativsystemet som eventuelt følger med kortet i startsettet, erstattes med Home Assistant OS.
2. Gjør AtomS3 Lite til en ESPHome-sensor
Installer ESPHome Device Builder fra Home Assistants appbutikk, start den og åpne nettgrensesnittet. Opprett en enhet med navnet dor-node. Lagre API-krypteringsnøkkelen fra veiviseren og et eget OTA-passord i ESPHomes secrets.yaml, sammen med WiFi-opplysningene. Dette er ESPHomes fil, ikke Home Assistants fil med samme navn.
wifi_ssid: "DITT_WIFI"
wifi_password: "DITT_WIFI_PASSORD"
dor_api_key: "KOPIER_DEN_GENERERTE_API_NOKKELEN"
dor_ota_password: "VELG_ET_EGET_LANGT_PASSORD"
Erstatt verdiene med dine egne. API-nøkkelen skal være en gyldig base64-kodet 32-byte-nøkkel, ikke et vanlig passord. Behold nøkkelen som veiviseren lager. Er WiFi-feltene allerede i filen, rediger dem uten å legge inn samme nøkkel to ganger.
esphome:
name: dor-node
friendly_name: Dørnode
esp32:
board: esp32-s3-devkitc-1
flash_size: 8MB
framework:
type: esp-idf
logger:
api:
encryption:
key: !secret dor_api_key
ota:
- platform: esphome
password: !secret dor_ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
binary_sensor:
- platform: gpio
name: Kontakt
id: door_contact
device_class: door
pin:
number: GPIO2
mode:
input: true
pullup: true
filters:
- delayed_on: 50ms
- delayed_off: 50ms
- Erstatt innholdet i enhetens YAML med filen over. Kontakten skal fortsatt være mellom GPIO2 og GND.
- Kjør Validate i ESPHome. Velg Install og førstegangsinstallasjon med USB. Bruk veiviserens nedlasting og nettleserbaserte opplasting dersom USB-kabelen står i PC-en, mens Device Builder kjører på Pi-en.
- Velg riktig serieport. Hold om nødvendig resetknappen inne for å gå i nedlastingsmodus. Dette erstatter UIFlow-programmet.
- Åpne loggen etter oppstart. I Home Assistant legger du til den oppdagede ESPHome-enheten og oppgir den samme API-nøkkelen.
- Finn Kontakt-entiteten og endre entitets-ID til
binary_sensor.verksted_dor. Bekreft at lukket dør giroff, åpen gironog frakoblet node til slutt girunavailable.
Ikke legg inn inverted: true i denne koblingen: HIGH er åpen dør. Kontroller at statusen skifter både når du åpner døren og når du lukker den.
3. Legg til alarm, utgang og mobilvarsel
Installer Companion-appen og koble den til serveren. Tillat varsler og send et manuelt testvarsel fra Utviklerverktøy → Handlinger. Navnet er vanligvis notify.mobile_app_…. Noter det faktiske navnet; det varierer fra telefon til telefon.
Bruk File editor-appen eller en annen støttet filredigerer i Home Assistant. Legg dette inn under eksisterende homeassistant: i configuration.yaml. Har du ikke den delen fra før, opprett den én gang:
homeassistant:
packages: !include_dir_named packages
Opprett mappen packages ved siden av configuration.yaml. I Home Assistants secrets.yaml legger du inn verksted_alarm_code: "DIN_EGEN_PIN" med din egen PIN-kode. Ikke bruk eksempelkoden som alarmkode.
Lagre filen under som packages/verksted-alarm.yaml. Opprett deretter varselgruppen i samme fil med utdraget som følger. Her er hele alarmoppsettet, inkludert kontroll av åpen eller utilgjengelig sensor etter at utgangstiden er over.
# Home Assistant package: /config/packages/verksted-alarm.yaml
# Rename the ESPHome contact entity to binary_sensor.verksted_dor first.
# Create the notify group named verksted_push as described in the guide.
alarm_control_panel:
- platform: manual
name: Verksted
arming_states:
- armed_away
- armed_home
code: !secret verksted_alarm_code
arming_time: 30
delay_time: 15
trigger_time: 180
disarmed:
trigger_time: 0
armed_home:
arming_time: 0
delay_time: 0
input_boolean:
verksted_testlys:
name: Verksted testlys
icon: mdi:alarm-light-outline
script:
verksted_arm:
alias: Aktiver verkstedalarm
sequence:
- condition: state
entity_id: binary_sensor.verksted_dor
state: "off"
- action: alarm_control_panel.alarm_arm_away
target:
entity_id: alarm_control_panel.verksted
data:
code: !secret verksted_alarm_code
automation:
- id: verksted_contact_alarm
alias: Verksted - kontakt eller bortfall
triggers:
- trigger: state
entity_id: binary_sensor.verksted_dor
to: "on"
- trigger: state
entity_id: binary_sensor.verksted_dor
to: "unavailable"
- trigger: state
entity_id: binary_sensor.verksted_dor
to: "unknown"
- trigger: state
entity_id: alarm_control_panel.verksted
to: "armed_away"
- trigger: state
entity_id: alarm_control_panel.verksted
to: "armed_home"
conditions:
- condition: template
value_template: >-
{{ states('alarm_control_panel.verksted') in ['armed_away', 'armed_home']
and not is_state('binary_sensor.verksted_dor', 'off') }}
actions:
- action: alarm_control_panel.alarm_trigger
target:
entity_id: alarm_control_panel.verksted
mode: single
- id: verksted_alarm_output
alias: Verksted - varsle og vis alarm
triggers:
- trigger: state
entity_id: alarm_control_panel.verksted
to: "triggered"
actions:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.verksted_testlys
- action: persistent_notification.create
data:
title: Verkstedalarm
message: Døren er åpnet, eller kontakten har mistet forbindelsen.
- action: notify.verksted_push
data:
title: Verkstedalarm
message: Kontroller døren og sensorforbindelsen.
mode: single
- id: verksted_alarm_reset
alias: Verksted - slå av testlyset
triggers:
- trigger: state
entity_id: alarm_control_panel.verksted
to: "disarmed"
actions:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.verksted_testlys
Legg dette til nederst i samme pakkefil. Erstatt mobile_app_din_telefon med handlingsnavnet du testet, uten notify. foran:
notify:
- platform: group
name: verksted_push
services:
- action: mobile_app_din_telefon
Kjør Home Assistants konfigurasjonskontroll før omstart. Etter omstart legger du alarmkortet for alarm_control_panel.verksted, sensoren, skriptet «Aktiver verkstedalarm» og input_boolean.verksted_testlys på et kontrollpanel. Bruk aktiveringsskriptet til å aktivere alarmen når du går hjemmefra. Skriptet starter bare alarmen når sensoren bekrefter at døren er lukket. Alarmkortet brukes til å slå av med PIN-koden.
Testlyset er en synlig virtuell utgang, ikke en fysisk sirene. Når alt virker, kan du legge til en handling for en eksisterende lampe eller en ferdig integrert sirene i automasjonen «varsle og vis alarm». Lag også en tilsvarende av-handling i «slå av testlyset». Ikke koble en kraftig sirene direkte til GPIO.
Valgfritt: en fysisk varsellampe på 12 V
Vil du se alarmen uten å se på telefonen? Den oransje varsellampen MR-01592 blinker når den får 12 V likespenning. Produktopplysningene angir omtrent 150 mA. La Grove MOSFET MR-00899 slå lampen av og på. AtomS3 Lite sender bare styresignalet; lampestrømmen kommer fra en egen forsyning.
Deler, kobling og kode for varsellampen
Du trenger lampen, MOSFET-modulen, én 10 kΩ-motstand fra settet i prosjekt 1, en ekstra Grove-kabel MR-01369 (i tillegg til den fra prosjekt 2), en kort ledning og to koblingsklemmer med spak fra settet MR-00478: én med tre og én med fire innganger. Bruk den lukkede 12 V-forsyningen MR-00764 med en passende 5,5 × 2,1 mm DC-skruklemme, ledninger beregnet for minst 0,5 A og en 0,5 A likestrømssikring nær forsyningens pluss. Kontakten har pluss i midten; kontroller polariteten med multimeter. Forsyningen skal stå tørt innendørs. Til benktesten kan du bruke en regulert 12 V-laboratorieforsyning med strømgrense i stedet.
Kontroller at selve lampen er merket 12 V DC, og finn dokumentert pluss og minus før du kobler til. Nettbutikkens bilder kan vise en annen variant; ikke bestem polariteten ut fra ledningsfargen. Mangler merkingen, må leverandøren avklare den. MR-01594 er 230 V-varianten og hører ikke til denne koblingen.
Koble fra begge strømforsyningene. Magnetkontakten er fortsatt koblet til GPIO2, og GPIO1 skal styre lampen gjennom MOSFET-modulen. En vanlig Grove-kabel mellom Atom og modulen ville koblet G1 til SIG. Da ville du ikke fått koblet magnetkontakten til G2 og GND, og 5 V fra Atom ville gått til modulens VCC. Sett derfor én MR-01369 i Atom og én i MOSFET-modulen, og skjøt lederne i klemmene: gul G1 fra Atom skal til gul SIG på MOSFET-modulen. Den svarte lederen fra Atom flyttes fra magnetkontakten til GND-klemmen, og den korte ledningen går fra magnetkontaktens ledige skrueklemme til samme klemme. Den blå G2-lederen blir sittende i magnetkontakten. Koble etter signalnavnene i tabellen.
| Fra | Til |
|---|---|
| Atom G1 og MOSFET SIG, begge gule ledere | Klemme 1 med tre innganger (SIG) |
| Atom GND, svart leder, og MOSFET GND, svart leder | Klemme 2 med fire innganger (GND) |
| 10 kΩ-motstand | Fra klemme 1 til klemme 2; holder SIG lav når GPIO1 ikke styrer |
| Atom G2, blå leder | Magnetkontaktens første skrueklemme, som i prosjekt 2 |
| Magnetkontaktens andre skrueklemme | Klemme 2, med den korte ledningen |
| Atom 5 V og MOSFET VCC, røde ledere | Ingen tilkobling; isoleres hver for seg |
| MOSFET NC, blå leder | Ingen tilkobling; isoleres |
| 12 V-forsyning + / − | VIN+ via sikringen / VIN− |
| VOUT+ / VOUT− | Lampens bekreftede + / − |
Modulen trenger ikke 5 V fra Atom når lampen får 12 V på VIN. Inne i modulen går Grove-VCC via en diode til VIN. Er de røde lederne isolert, kan 5 V fra USB derfor ikke drive lampen hvis 12 V-forsyningen er koblet fra.
Atom får fortsatt strøm gjennom USB-C. Koble aldri 12 V til Atom eller GPIO-pinnene. Modulen har felles jord, ikke galvanisk skille. Vi bruker den under produsentens grense på 2 A; den høyere strømgrensen i transistorens datablad gjelder ikke for hele modulen. Vurderingen av 3,3 V-styring følger produsentens koblingsskjema. Schottky-dioden på modulens VIN-inngang gir et lite spenningsfall: mål VOUT og kontroller at lampen blinker stabilt.
Bruk dor-node-varsellampe.yaml fra ZIP-filen i stedet for dor-node.yaml. Den komplette filen beholder dørsensoren og legger til koden under. En lokal tidsgrense slår lampen av etter omtrent 180 sekunder, også om nettverket faller ut, så lenge fastvaren kjører som den skal. ALWAYS_OFF setter av-tilstanden når fastvaren starter; det garanterer ikke en helt pulsfri oppstart.
# Optional 12 V lamp via Grove MOSFET MR-00899.
# Atom GPIO1 (yellow on MR-01369, white on M5Stack cables) -> module SIG (yellow); external 10k SIG-to-GND.
# GPIO2 remains the reed input. Never connect external 12 V to the Atom.
script:
- id: beacon_timeout
mode: restart
then:
- delay: 180s
- switch.turn_off: varsellys
switch:
- platform: gpio
id: varsellys
name: Varsellys
pin:
number: GPIO1
inverted: false
restore_mode: ALWAYS_OFF
on_turn_on:
- script.execute: beacon_timeout
on_turn_off:
- script.stop: beacon_timeout
Etter opplasting finner du den nye bryteren i Home Assistant. Endre entitets-ID-en til switch.verksted_varsellys. Legg følgende fil i /config/packages/verksted-varsellampe.yaml, i tillegg til alarmfilen du allerede har. Kjør konfigurasjonskontrollen og start Home Assistant på nytt. Home Assistant slår lampen på når alarmen går til triggered, og av i de andre alarmtilstandene. Det virtuelle testlyset beholdes.
# Optional Home Assistant package: /config/packages/verksted-varsellampe.yaml
# Use together with verksted-alarm.yaml, not instead of it.
# Rename the new ESPHome switch to switch.verksted_varsellys first.
automation:
- id: verksted_physical_beacon
alias: Verksted - fysisk varsellampe
triggers:
- trigger: state
entity_id: alarm_control_panel.verksted
- trigger: homeassistant
event: start
- trigger: state
entity_id: switch.verksted_varsellys
from: [unavailable, unknown]
to: ["on", "off"]
actions:
- choose:
- conditions:
- condition: state
entity_id: alarm_control_panel.verksted
state: triggered
sequence:
- action: switch.turn_on
target:
entity_id: switch.verksted_varsellys
default:
- action: switch.turn_off
target:
entity_id: switch.verksted_varsellys
mode: restart
- La 12 V være frakoblet først. Slå på Atom og mål at GPIO1 er lav. Kontroller koblingen og isolasjonen før du kobler til lampestrømmen.
- Slå lampen på og av med bryteren i Home Assistant. Kontroller at den blinker stabilt. Hvis sikringen går eller strømgrensen nås, slå av og undersøk årsaken.
- Utløs alarmen med døren. Lampen skal starte ved
triggeredog stoppe når du slår alarmen av. Prøv også kaldstart, reset og en fastvareoppdatering før fast montering. - Slå på lampen og bryt WiFi. Den lokale tidsgrensen skal stoppe den etter omtrent 180 sekunder fra innkobling. Etter strømbrudd skal den starte avslått. Hvis alarmen fortsatt står i triggered når forbindelsen kommer tilbake, kan Home Assistant starte en ny blinkeperiode. Et vellykket programkall bekrefter ikke at selve lampen lyser.
Dette skjer i de ulike tilstandene
| Tilstand | Hva skjer? | Hva gjør du? |
|---|---|---|
| disarmed | Dørstatus vises uten å utløse alarm | Lukk døren og aktiver med skriptet |
| arming | 30 sekunder utgangstid | Gå ut og lukk døren |
| armed_away | Åpen eller utilgjengelig sensor utløser ventetid | Ved hjemkomst: slå av innen 15 sekunder |
| pending | 15 sekunder før alarm | Slå av med PIN; å lukke døren alene avbryter ikke |
| triggered | Testlyset slås på og varsler sendes | Undersøk årsaken og slå av alarmen |
Etter 180 sekunder går alarmen tilbake til aktivert tilstand hvis du ikke har slått den av. Er sensoren fortsatt åpen eller utilgjengelig, begynner en ny varsling. Testlyset blir stående på til du slår av. En serveromstart gir ikke garanti for at den tidligere alarmtilstanden gjenopprettes: kontroller og aktiver anlegget på nytt.
Det innebygde manuelle alarmpanelet gir nok funksjoner for dette prosjektet. Flere soner kan få hver sin node og hver sin entitet. Utvid triggerlisten og betingelsen samlet, slik at ingen sone glemmes. Se guiden om smarthusprotokoller hvis du vil blande WiFi med Zigbee eller andre ferdige sensorer.
Test hele kjeden før du monterer
| Prøve | Forventet resultat |
|---|---|
| Åpne og lukk ti ganger | Riktig retning hver gang; ingen flimring ved lukket dør |
| Start med døren åpen | Prosjekt 1 gir lyd; prosjekt 2 sender OPEN; aktiveringsskriptet i prosjekt 3 stanser |
| Aktiver, men la døren stå åpen etter utgangstiden | Prosjekt 3 går videre til ventetid og alarm |
| Slå av under ventetiden | Ingen triggered-varsling; testlyset forblir av |
| Trekk ut sensorledningen | Oppfattes som åpen dør |
| Koble fra node eller WiFi | Mottakeren viser bortfall etter sin tidsgrense; aktivert HA-alarm reagerer på unavailable |
| Start broker, node og server på nytt hver for seg | Status kommer tilbake; kontroller og aktiver serveralarmen på nytt |
| Prøv mobilvarsel på WiFi og mobilnett | Du vet hvilke varsler som kommer fram hjemme og borte |
En ledningssløyfe med bare to tilstander kan oppdage brudd, men ikke skille brudd fra åpen dør. En kortslutning kan se ut som lukket dør. For et mer robust anlegg trengs blant annet overvåket sløyfe, sabotasjevern, reservestrøm og kontrollert kommunikasjon. Det er et eget prosjekt, ikke noe en ekstra linje kode løser.
Vanlige spørsmål
Kan jeg koble magnetkontakten rett til summeren?
Bare hvis kontaktens faktiske funksjon og belastningsgrenser passer. MR-00148 leder med magneten nær, så en enkel seriekobling ville pipe når døren er lukket. Transistortrinnet snur funksjonen og lar sensoren styre en liten strøm.
Er dette også en alarm for et åpent vindu?
Ja. Prinsippet er det samme, men plasseringen må gi stabil kontakt i den lukkede stillingen du vil overvåke. Luftestilling kan gi åpent signal. Bestem på forhånd om det er ønsket.
Kan M5Stack sende e-post?
Det er mulig, men dette prosjektet sender status på lokalnettet og lar en mottaker håndtere varsler. Da trenger ikke sensoren lagre passordet til e-postkontoen. Home Assistant kan bruke SMTP-integrasjonen for e-postvarsler som et alternativ til mobilvarselet; kontoinnstillingene må passe e-postleverandøren.
Virker alarmen uten internett?
Prosjekt 1 er helt uten nettverk. MQTT og forbindelsen mellom ESPHome og Home Assistant kan fungere på lokalnettet uten internett. Fjernvarsling til mobil eller e-post kan likevel kreve internett og en ekstern tjeneste. Test nettverksbrudd og strømbrudd hver for seg.
Kan jeg bruke batteri?
Ikke legg til et løst litiumbatteri i koblingen. WiFi-koden er laget for kontinuerlig USB-strøm og går ikke i dvale. Batteridrift krever riktig strømforsyning, beskyttelse, lavt hvileforbruk og en bevisst løsning for hvordan åpninger registreres mens enheten sover.
Vil du oppdage bevegelse inne i rommet, se prosjektene med PIR-bevegelsessensor.
Kilder og videre bygging
Pinnevalg og opplasting følger M5Stacks dokumentasjon for AtomS3 Lite og UIFlow 2 for samme kort. Transistorvalget er kontrollert mot onsemis BC547-datablad. Kontroller alltid databladet til delene du faktisk bruker.
Nettverkskoden bruker M5Stacks MQTT-klient. Oppsettet bygger videre på dokumentasjonen for ESPHome GPIO-sensorer, Home Assistants manuelle alarmpanel og mobilvarsler i Companion.
Start med å få én kontakt til å virke på benken. Når koblingen og feilprøvene er forstått, velger du om du trenger bare en lyd, en WiFi-melding eller en lokal alarmsentral. Du finner flere monteringsformer i utvalget av magnetkontakter, og flere programmeringsveier i oversikten over ESP32 og M5Stack.




