Indholdsfortegnelse:

Alarm PIR til WiFi (og hjemmeautomatisering): 7 trin (med billeder)
Alarm PIR til WiFi (og hjemmeautomatisering): 7 trin (med billeder)

Video: Alarm PIR til WiFi (og hjemmeautomatisering): 7 trin (med billeder)

Video: Alarm PIR til WiFi (og hjemmeautomatisering): 7 trin (med billeder)
Video: Automatisk kalenderskiftplanlægger i Excel 2024, Juli
Anonim
Image
Image
Alarm PIR til WiFi (og hjemmeautomatisering)
Alarm PIR til WiFi (og hjemmeautomatisering)

Oversigt

Denne instruktør giver dig mulighed for at se den sidste dato/klokkeslæt (og eventuelt en historik over tider) for hvornår din husalarms PIR'er (passive infrarøde sensorer) blev udløst i din hjemmeautomatiseringssoftware. I dette projekt vil jeg diskutere, hvordan man bruger det med OpenHAB (gratis hjemmeautomatiseringssoftware, som jeg personligt bruger), selvom det vil fungere med enhver anden hjemmeautomatiseringssoftware eller -program, der understøtter MQTT (også beskrevet senere i denne artikel). Denne instruktør vil lede dig gennem de nødvendige trin til, hvordan du opretter et printkort og en Wemos D1 mini (et IOT -kort, der anvender en ESP8266 -chip), der tapper ind i alarmzonerne i din alarmkontrolboks, så når en zone (der indeholder en eller flere PIR'er) udløses, sender Wemos en besked trådløst ved hjælp af MQTT -protokollen til din hjemmeautomatiseringssoftware, som igen viser den sidste dato/klokkeslæt for denne trigger. Arduino -kode til programmering af Wemos leveres også.

Introduktion

Billedet ovenfor er det, jeg ser via en af skærmene på OpenHAB -appen på min iPhone. Dato/tid -teksten er farvekodet for at give en hurtigere fremstilling af, hvornår PIR blev udløst - den vil vise rød (udløst inden for det sidste 1 minut), orange (udløst inden for de sidste 5 minutter), grøn (udløst inden for de sidste 30 minutter), blå (udløst inden for den sidste time) eller på anden måde sort. Hvis du klikker på dato/klokkeslæt, vises en historisk visning af PIR -udløsere, hvor et 1 betyder udløst, og 0 er inaktiv. Der er mange anvendelser til dette, for eksempel kan det supplere din hjemmetilstedeværelsesløsning, det kan registrere bevægelse, hvis du er væk og via OpenHAB -regler, sende meddelelser til din telefon, du kan bruge det som jeg gør for at se, om mine børn er står op midt om natten, udløst af et PIR, der bor uden for deres soveværelser!

OpenHAB er simpelthen den hjemmeautomatiseringssoftware, jeg bruger, der er mange andre - og hvis de understøtter MQTT, kan du nemt tilpasse dette projekt, så det passer til den software, du bruger.

Antagelser

Denne instruktive forudsætter, at du allerede har (eller vil konfigurere):

  • Naturligvis et hjemmealarmsystem med PIR'er (passive infrarøde sensorer), og at du har adgang til alarmkontrolboksen for at tilslutte de nødvendige ledninger
  • OpenHAB (gratis open source hjemmeautomatiseringssoftware) kører, selvom det som diskuteret skulle fungere med enhver hjemmeautomatiseringssoftware, der kan indeholde en MQTT -binding. Alternativt kan du selv ændre koden, så den passer til dine egne behov.
  • Mosquitto MQTT (eller lignende) mægler installeret og binding konfigureret med OpenHAB (MQTT er en protokol til abonnement/udgivelse af beskeder, der er let og god til kommunikation mellem enheder)

Hvis du ikke kører OpenHAB og en MQTT -mægler, kan du se denne fremragende artikel på MakeUseOf -webstedet

Hvad skal jeg bruge?

For at oprette den trådløse controller skal du skaffe følgende dele:

  • Wemos D1 mini V2 (har en ESP8266 trådløs CHIP indbygget)
  • En LM339 -komparator (dette udfører kontrollen af PIR inaktiv vs udløst)
  • En 5V DC strømkilde til Wemos (OR, en DC-DC buck converter. Bemærk: en LM7805 spændingsregulator fungerer muligvis ikke til denne applikation som diskuteret senere i dette projekt)
  • To modstande til en spændingsdeler (størrelsen afhænger af dine alarmspændinger, diskuteret senere i projektet)
  • En 1K ohm modstand til at fungere som en pull down modstand til styring af LM339 effekt
  • Én 2N7000 (eller lignende) MOSFET til logisk at tænde LM339 (muligvis valgfri, diskuteret senere i projektet)
  • Et brødbræt i passende størrelse til kredsløbopsætning og test
  • En flok brødbrætstråde til at forbinde alt sammen
  • Nødvendigt værktøj: sideskærere, enkeltkerntråd
  • En DC-multimeter (obligatorisk!)

Trin 1: Alarmsystemets kontrolboks

Alarmsystemets kontrolboks
Alarmsystemets kontrolboks

Først nogle advarsler og ansvarsfraskrivelser

Personligt har jeg et Bosch alarmsystem. Jeg vil meget anbefale dig at downloade den relevante manual til dit særlige alarmsystem og gøre dig bekendt med det, før du starter, da du bliver nødt til at slukke alarmsystemet for at oprette forbindelser til zonerne. Jeg vil også anbefale dig at læse denne artikel i sin helhed, før du starter!

Nedenfor er en liste over et par ting, du bør vide, før du starter - sørg for at læse og forstå hver af dem, før du fortsætter! Jeg tager intet ansvar, hvis du ødelægger dit alarmsystem og/eller skal betale din installatør for at ordne det. Hvis du imidlertid læser og forstår følgende og tager de nødvendige forholdsregler, skal du have det godt:

1. Mit alarmsystem havde et backupbatteri inde i boksen og havde også en sabotagekontakt på indersiden af låget (der giver adgang til alarmsystemkortet), så alarmen slukkes eksternt, når fjernbetjeningens frontpanel fjernes boks det udløste alarmen! For at komme uden om dette, mens jeg arbejdede på projektet, omgåede jeg sabotagebeskyttelsen ved at trække stikket ud og derefter kortslutte sabotagekontakten (den tykke røde ledning som vist på billedet ovenfor)

2. Når alarmsystemet tændes igen, begyndte alarmcentralen efter ca. ~ 12 timer at bippe med fejlkoder. Efter at have fastlagt fejlkoderne via manualen fandt jeg ud af, at det advarede mig om, at:

  • Datoen/klokkeslættet var ikke indstillet (jeg havde brug for masterkoden og nøglesekvensen fra manualen til at omkonfigurere)
  • At backupbatteriet ikke var tilsluttet (nem løsning, jeg havde lige glemt at sætte batteriet i igen)

3. I min alarm er der 4 x zoneforbindelsesblokke (mærket Z1 -Z4), som PIR'erne kan koble til på hovedalarmkortet, men mit alarmsystem er faktisk i stand til 8 zoner. Hver zoneforbindelsesblok kan faktisk køre 2 x zoner hver (Z1 gør Z1 og Z5, Z2 gør Z2 og Z6 og så videre). Alarmsystemet har indbygget manipuleringsbeskyttelse for at stoppe nogen med at sige, åbne låget til alarmsystemet som nævnt ovenfor eller skære ledningerne til et PIR. Det skelner mellem hver zone -manipulation via EOL -modstande (slutningen på linjen). Disse er modstande af særlig størrelse, der ligger i "enden af linjen" - med andre ord inde i PIR (eller kontrolboksens sabotagekontakt eller sirenekasse eller hvad der end er forbundet til den zone) Som nævnt bruges disse modstande som 'manipulering' beskyttelse ' - teknisk set, hvis nogen skærer kablerne til et PIR - fordi alarmsystemet forventer at se en vis modstand fra det PIR, så skal modstanden ændre sig, det antager, at nogen har manipuleret med systemet og vil udløse alarmen.

For eksempel:

På min alarm har zone "Z4" 2 ledninger i den, den ene går ud til PIR'en på min gang og den ene går til alarmkontrolboksens sabotagekontakt. Inde i gangen PIR har den en 3300 ohm modstand. Den anden ledning, der løber til kontrolboksens sabotagekontakt, har en 6800 ohm modstand, der er forbundet i serie. Sådan skelner alarmsystemet (logisk) mellem "Z4" og "Z8" sabotage. Ligeledes har zone "Z3" et PIR (med 3300 ohm modstand i det) og også sirenens sabotagekontakt (med 6800 ohm modstand i den), der udgør "Z7". Alarminstallatøren ville have forudkonfigureret alarmsystemet, så det ved, hvilken enhed der er forbundet til hver zone (og ændret størrelsen på EOL-modstanden, så den passer, fordi alarmsystemet er programmeret til at vide, hvilken størrelse de forskellige EOL-modstande er. Under under ingen omstændigheder bør du ændre værdien af disse modstande!)

Så baseret på ovenstående, fordi hver zone også kan have flere enheder tilsluttet (med forskellige modstandsværdier) og huske formlen V = IR (spænding = ampere x modstand), så kan det også betyde, at hver zone kan have forskellige spændinger. Hvilket fører os videre til det næste trin og måler hver zone IDLE vs TRIGGERED spænding …

Trin 2: Måling af alarmzonespænding

Måling af alarmzonespænding
Måling af alarmzonespænding
Måling af alarmzonespænding
Måling af alarmzonespænding

Når du har fået adgang til hovedkortet på dit alarmsystem (og omgået sabotagekontakten, hvis du har en i henhold til det foregående trin), tænd dit alarmsystem igen. Vi er nu nødt til at måle hver zones spænding, når dens tomgang (ingen bevægelse foran PIR) vs TRIGGERED (PIR har registreret bevægelse) Tag en pen og et papir, så du kan skrive dine spændingsaflæsninger ned.

ADVARSEL: Størstedelen af dit alarmsystem kører højst sandsynligt på 12V DC, men det vil have sin oprindelige strømtilførsel ved 220V (eller 110V) AC, med en transformer, der konverterer strøm fra AC til DC. LÆS manualen og tag ekstra forholdsregler, så du IKKE måler nogen AC -terminaler !!! I henhold til skærmbilledet af mit alarmsystem på denne side kan du se, at selve bunden af billedet er vekselstrøm, transformeret til 12V DC. Vi måler 12V DC i de røde felter markeret. Rør aldrig ved vekselstrømmen. Vær ekstrem forsigtig!

Måling af PIR -spænding

Jeg har 4 x PIR'er forbundet til Z1 til og med Z4. Mål hver af dine zoner som følger.

  1. Identificer først GND -terminalen og zoneterminalerne på alarmpanelet. Jeg har fremhævet disse på billedet vist fra manualen til min Bosch -alarm.
  2. Tag fat i dit multimeter og indstil din spændingsmåling til 20V DC. Tilslut det sorte (COM) kabel fra dit multimeter til GND -terminalen på alarmen. Placer den røde (+) ledning fra dit multimeter på første zone - i mit tilfælde mærket "Z1". Skriv spændingsaflæsningen ned. Udfør de samme trin for de resterende zoner. Mine spændingsmålinger er som følger:
  • Z1 = 6,65V
  • Z2 = 6,65V
  • Z3 = 7,92V
  • Z4 = 7,92V

I henhold til ovenstående har mine første to zoner kun PIR'er tilknyttet også. De to sidstnævnte zoner har både PIR'er og sabotagebeskyttelse forbundet til dem (Z3 -kontrolboks -sabotage, Z4 -sirene -sabotage) Bemærk spændingsforskellene.

3. Du har sandsynligvis brug for 2 personer til dette næste trin. Du skal også vide, hvilken PIR der er i hvilken zone. Gå tilbage og læs spændingen på den første zone. Få nu en i dit hus til at gå foran PIR'en, spændingen skal falde. Bemærk den nye spændingsaflæsning. I mit tilfælde læses spændingerne som følger, når PIR'erne udløses:

  • Z1 = 0V
  • Z2 = 0V
  • Z3 = 4,30V
  • Z4 = 4,30V

I henhold til ovenstående kan jeg se, at når zone 1 og 2 udløses, falder spændingen fra 6,65V til 0V. Når zone 3 og 4 udløses, falder spændingen imidlertid fra 7,92V til 4,30V.

Måler 12V strømforsyning

Vi vil bruge 12V DC -terminalen fra alarmstyringsboksen til at drive vores projekt. Vi skal måle spændingen fra 12V DC feed på alarmen. Selvom der allerede står 12V, skal vi kende en mere præcis aflæsning. I mit tilfælde læser den faktisk 13.15V. Skriv dette ned, du skal bruge denne værdi i det næste trin.

Hvorfor måler vi spænding?

Grunden til, at vi skal måle spænding for hver PIR, er på grund af det kredsløb, vi vil oprette. Vi vil bruge en LM339 quad differential-komparatorchip (eller quad op-amp-komparator) som den elektriske kerneelement til dette projekt. LM339 har 4 uafhængige spændingskomparatorer (4 kanaler), hvor hver kanal tager 2 x indgangsspændinger (en inverterende (-) og en ikke-inverterende (+) indgang, se diagram) Hvis spændingen for den inverterende indgangsspænding skal falde lavere end den ikke-inverterende spænding, så vil dens relaterede output trækkes til jorden. På samme måde, hvis den ikke-inverterende indgangsspænding falder lavere end den inverterende indgang, trækkes udgangen op til Vcc. Praktisk set har jeg i mit hus 4 x alarm PIR'er/zoner - derfor bliver hver zone forbundet til hver kanal på komparatoren. Hvis du har mere end 4 x PIR'er, skal du bruge en komparator med flere kanaler eller en anden LM339!

Bemærk: LM339 bruger strøm i nano-ampere, så det påvirker ikke EOL-modstanden i det eksisterende alarmsystem.

Hvis dette er forvirrende, skal du fortsætte til næste trin alligevel, det vil begynde at give mere mening, når vi kabler det op!

Trin 3: Oprettelse af en spændingsdeler

Image
Image

Hvad er en spændingsdeler?

En spændingsdeler er et kredsløb med 2 x modstande (eller flere) i serie. Vi leverer spænding i (Vin) til den første modstand (R1) Det andet ben på R1 forbinder det første ben i den anden modstand (R2), og den anden ende af R2 tilsluttes GND. Vi tager derefter en udgangsspænding (Vout) fra forbindelsen mellem R1 og R2. Denne spænding bliver vores referencespænding for LM339. For mere information om, hvordan spændingsdelere fungerer, se Adohms youtube -video

(Bemærk: modstande har ikke polaritet, så de kan forbindes på begge måder)

Beregning af vores referencespænding

Hvis vi antager, at spændingen falder, når din PIR udløses (dette burde være tilfældet for de fleste alarmer), så er det, vi forsøger at opnå, at få en spændingsaflæsning, der stort set er halvvejs mellem vores laveste inaktiv spænding og vores højeste udløste spænding, dette bliver vores referencespænding.

Tager min alarm som et eksempel …

Zone tomgangsspændinger var Z1 = 6,65V, Z2 = 6,65V, Z3 = 7,92V, Z4 = 7,92V. Den laveste tomgangsspænding er derfor 6,65V

De zoneudløste spændinger var: Z1 = 0V, Z2 = 0V, Z3 = 4,30V, Z4 = 4,30V. Den højeste udløste spænding er derfor 4,30V

Så vi skal vælge et tal halvvejs mellem 4,30V og 6,65V (behøver ikke at være præcist, bare nogenlunde) I mit tilfælde skal min referencespænding være omkring 5,46V. Bemærk: Hvis den laveste inaktiv og højeste udløste spænding er meget tæt på hinanden på grund af flere zoner, der forårsager en række forskellige spændinger, skal du muligvis oprette 2 eller flere spændingsdelere.

Beregning af vores modstandsværdier for spændingsdeleren

Nu har vi en referencespænding, vi skal beregne hvilken størrelse modstande vi har brug for for at oprette en spændingsdeler, der vil levere vores referencespænding. Vi vil bruge 12V DC spændingskilden (Vs) fra alarmen. Men i henhold til det foregående trin, da vi målte 12V DC -foderet, fik vi faktisk 13,15V. Vi skal beregne spændingsdeleren ved hjælp af denne værdi som kilde.

Beregn Vout ved hjælp af ohm lov …

Vout = Vs x R2 / (R1 + R2)

… eller brug en online spændingsdelerberegner:-)

Du bliver nødt til at eksperimentere med modstandsværdierne, indtil du opnår det ønskede output. I mit tilfælde fungerede det med R1 = 6,8k ohm og R2 = 4,7K ohm, beregnet i lang form som følger:

Vout = Vs x R2 / (R1 + R2)

Vout = 13,15 x 4700 / (6800 + 4700)

Vout = 61, 805 /11, 500

Vout = 5,37V

Trin 4: Tilslut LM339

Tilslutning af Wemos D1 Mini
Tilslutning af Wemos D1 Mini

Spændingsdeler til LM339 inverterende indgange

Som diskuteret tidligere vedrørende LM339 -komparatoren, vil den tage 2 x input. Den ene vil være en spænding fra hver PIR til hver kanals ikke-inverterende (+) terminal, den anden vil være vores referencespænding til vores inverterende (-) terminal. Referencespændingen skal fodre alle 4 komparatorinverteringsindgange. Sluk for dit alarmsystem, før du udfører disse trin.

  • Kør en ledning fra 12V DC -blokken på alarmsystemet til + skinnen på dit brødbræt *
  • Kør en ledning fra GND -blokken på alarmsystemet til - skinnen på dit brødbræt **
  • Installer LM339 -komparatoren i midten af brødbrættet (hakket angiver tættest på pin 1)
  • Installer de 2 x modstande for at oprette et spændingsdelerkredsløb og ledning til opdelt spænding
  • Kør ledninger fra den 'spændingsdelte' Vout til hver LM339 inverterterminal

* TIP: Brug et alligatorklip til strømmen, hvis det er muligt, da dette gør det lettere at levere ON/OFF -strøm til dit projekt ** VIGTIGT! En MOSFET kan være påkrævet, hvis du driver Wemos fra alarmpanelet! I mit tilfælde modtager LM339, Wemos og Alarm alle strøm fra den samme kilde (dvs. selve alarmsystemet) Dette giver mig mulighed for at tænde for alt med en enkelt strømforbindelse. Som standard er GPIO -benene på Wemos defineret som "INPUT" -stifter - hvilket betyder, at de tager den spænding, der kastes på dem, og stoler på, at kilden giver korrekte spændingsniveauer (min/max -niveauer), så Wemos vandt ' t styrter eller brænder ud. I mit tilfælde får alarmsystemet sin strøm og begynder at starte sin opstartsekvens meget hurtigt - så hurtigt faktisk, at det gør dette, før Wemos kan starte op og erklære GPIO -benene som "INPUT_PULLUP" (spændingen trækkes op internt i chip). Det betyder ikke, at spændingsforskellene ville få Wemos til at gå ned, når hele systemet fik strøm. Den eneste vej udenom det ville være at slukke og tænde Wemos manuelt. For at løse dette tilføjes en MOSFET og fungerer som en "logisk switch" til tænding af LM339. Dette gør det muligt for Wemos at starte op, indstille sine 4 x komparator GPIO -ben som "INPUT_PULLUP's", forsinke et par sekunder og SÅ (via en anden GPIO pin D5 defineret som en OUTPUT) sende "HIGH" signal via GPIO pin D5 til MOSFET, som logisk tænder LM339. Jeg vil anbefale tilslutning som ovenfor, men HVIS du opdager, at Wemos går ned som jeg gjorde, så bliver du nødt til at inkludere MOSFET med en 1k ohm pull down -modstand. For mere information om, hvordan du gør dette, se afslutningen på denne instruktive.

Alarmzoner til LM339 ikke-inverterende indgange

Vi er nu nødt til at føre ledninger fra hver zone på alarmcentralen til LM339 -komparatorindgange. Når alarmsystemet stadig er slukket, skal der i hver zone tilføres en ledning til hver ikke-inverterende (+) indgang på LM339-komparatoren. For eksempel i mit system:

  • Wire fra Z1 går til LM339 input 1+
  • Wire fra Z2 går til LM339 input 2+
  • Wire fra Z3 går til LM339 input 3+
  • Wire fra Z4 går til LM339 input 4+

Se pin-out af LM339 under trin 3, hvis du er en påmindelse (den er farvekodet med billedet på brødbrættet). Når det er gjort, skal dit brødbræt ligne det billede, der blev vist i dette trin.

Tænd alarmsystemet, og mål spændingen, der kommer ud af spændingsdeleren, for at sikre, at det svarer til din referencespænding som beregnet tidligere.

Trin 5: Tilslutning af Wemos D1 Mini

Tilslutning af Wemos D1 mini

Nu har vi taget hånd om alle LM339 -input, vi skal nu tilslutte Wemos D1 mini. Hver LM339 output pin går til en Wemos GPIO (general input/output) pin, som vi vil betegne via kode som en input pullup pin. Wemos tager op til 5V maksimum som sin Vcc (input kilde) spænding (selvom den regulerer dette internt til 3,3V) Vi vil bruge en meget almindelig LM7805 spændingsregulator (EDIT: se nedenfor) til at tabe 12V skinnen på brødbrættet ned til 5V til at drive Wemos. Databladet til LM7805 angiver, at vi har brug for en kondensator tilsluttet på hver side af regulatoren for at udjævne strømmen, som vist på brødbrætbilledet. Kondensatorens længere ben er positivt (+), så sørg for, at dette er forbundet til den rigtige måde.

Spændingsregulatoren tager spænding ind (venstre sidestift), jord (midterste pin) og spænding ud (højre sidestift) Dobbelttjek pin-out, hvis din spændingsregulator varierer fra LM7805.

(EDIT: Jeg fandt forstærkere, der kom fra alarmpanelet, var for høje til, at LM7805 kunne håndtere. Dette forårsagede meget varme i LM7805's lille køleplade og fik den til at gå i stykker og fik igen Wemos til at stoppe Jeg udskiftede LM7805 og kondensatorer med en DC-DC buck-konverter i stedet for og har ikke haft nogen problemer siden. Disse er meget lette at tilslutte. Tilslut simpelthen indgangsspændingen fra alarmen, tilslut først til et multimeter og brug potentiometerskruen og juster, indtil udgangsspændingen er ~ 5V)

GPIO indgangsstifter

Til dette projekt bruger vi følgende pins:

  • zone Z1 => pin D1
  • zone Z2 => pin D2
  • zone Z3 => pin D3
  • zone Z4 => pin D5

Led outputene op fra LM339 til de relaterede GPIO -ben på Wemos -kortet i henhold til brødbrætbilledet, der er vist i dette trin. Igen har jeg farvekodet input og matchende output, for at gøre det lettere at se, hvad der refererer til hvad. Hver GPIO -pin i Arduino er defineret som en 'INPUT_PULLUP', hvilket betyder, at de vil blive trukket op til 3,3V ved normal brug (IDLE), og LM339 vil trække dem ned til jorden, hvis PIR'en bliver udløst. Koden registrerer ændringen HIGH to LOW og sender en besked trådløst til din hjemmeautomatiseringssoftware. Hvis du har problemer med dette arbejde, er det muligt, at du har dine inverterende vs ikke-inverterende indgange den forkerte vej (hvis spændingen fra dit PIR går højt, når det udløses, som det sker med de fleste hobby-PIR'er, så vil du have forbindelserne til anden vej rundt)

Arduino IDE

Fjern Wemos fra brødbrættet, vi skal nu uploade kode til den (alternativt link her) Jeg vil ikke gå i detaljer om, hvordan du gør dette, da der er masser af artikler på nettet om upload af kode til Wemos eller andre ESP8266 typetavler. Tilslut dit USB -kabel til Wemos -kortet og til din pc, og fyr Arduino IDE op. Download koden, og åbn den i dit projekt. Du skal sikre, at det korrekte kort er installeret og indlæst til dit projekt, samt at den korrekte COM -port er valgt (Værktøjer, Port). Du skal også installere de relevante biblioteker (PubSubClient, ESP8266Wifi) For at få Wemos -kortet inkluderet i din skitse, se denne artikel.

Du bliver nødt til at ændre følgende kodelinjer og erstatte med dit eget SSID og adgangskode til din trådløse forbindelse. Skift også IP -adressen for at pege på din egen MQTT -mægler.

// Trådløst internet

const char* ssid = "din_wifi_ssid_her"; const char* password = "your_wifi_password_here"; // MQTT Broker IPAddress MQTT_SERVER (172, 16, 223, 254)

Når den er ændret, skal du bekræfte din kode og derefter uploade til Wemos -kortet via et USB -kabel.

Bemærkninger:

  • Hvis du bruger forskellige GPIO -porte, skal du justere koden. Hvis du bruger flere eller færre zoner end jeg har, skal du også justere koden og TOTAL_ZONES = 4; konstant til at passe.
  • Under opstart af mit alarmsystem ville alarmsystemet lave en strømtest til alle 4 x PIR'er, som trak alle tilsluttede GPIO til jorden, hvilket fik Wemos til at tro, at zoner blev udløst. Koden ignorerer afsendelse af MQTT -meddelelser, hvis den ser alle 4 x zoner aktive på samme tid, da den antager, at alarmsystemet starter.

Alternativt downloadlink til kode HER

Trin 6: Test og OpenHAB -konfiguration

Test og OpenHAB -konfiguration
Test og OpenHAB -konfiguration

MQTT -test

MQTT er et "abonnér / udgiv" meddelelsessystem. En eller flere enheder kan tale med en "MQTT -mægler" og "abonnere" på et bestemt emne. Alle indgående meddelelser fra enhver anden enhed, der er "offentliggjort" til det samme emne, vil blive skubbet ud af mægleren til alle enheder, der har abonneret på den. Det er en ekstremt let og brugervenlig protokol og perfekt som et simpelt udløsende system som det her. Til test kan du se indgående MQTT -meddelelser fra Wemos til din MQTT -mægler ved at køre følgende kommando på din Mosquitto -server (Mosquitto er en af mange tilgængelige MQTT Broker -software). Denne kommando abonnerer på indgående keepalive -meddelelser:

myg_sub -v -t openhab/alarm/status

Du bør se indgående meddelelser, der kommer ind fra Wemos hvert 30. sekund eller deromkring med tallet "1" (hvilket betyder "Jeg lever") Hvis du ser konstante "0'er" (eller intet svar), er der ingen kommunikation. Når du ser tallet 1 komme ind, betyder det, at Wemos kommunikerer med MQTT -mægleren (søg "MQTT Last Will and Testament" for at få flere oplysninger om, hvordan dette fungerer, eller se dette virkelig gode blogindlæg)

Når du har bevist, at kommunikationen er funktionel, kan vi teste, at en zontilstand bliver rapporteret via MQTT. Abonner på følgende emne (# er et wildcard)

myg_sub -v -t openhab/alarm/#

De sædvanlige statusmeddelelser bør komme ind, ligesom IP -adressen på selve Wemos. Gå foran et PIR, og du skal også se zoneoplysningerne komme ind, hvilket angiver, at den er ÅBEN, derefter et sekund eller deromkring senere, at den er LUKKET, svarende til følgende:

openhab/alarm/status 1

openhab/alarm/zone1 ÅBEN

openhab/alarm/zone1 LUKKET

Når dette virker, kan vi konfigurere OpenHAB til at have dette pænt repræsenteret i GUI.

OpenHAB -konfiguration

Følgende ændringer er nødvendige for OpenHAB:

'alarm.map' transformeringsfil: (valgfri, til test)

CLOSED = IdleOPEN = TriggeredNULL = Ukendt- = Ukendt

'status.map' transformeringsfil:

0 = mislykkedes

1 = Online -= NED! NULL = ukendt

'items' fil:

String alarmMonitorState "Alarm Monitor [MAP (status.map):%s]" {mqtt = "<[mqttbroker: openhab/alarm/status: state: default]"} String alarmMonitorIPAddress "Alarm Monitor IP [%s]" {mqtt = "<[mqttbroker: openhab/alarm/ipaddress: state: default]"} Number zone1_Chart_Period "Zone 1 Chart" Contact alarmZone1State "Zone 1 State [MAP (alarm.map):%s]" {mqtt = "<[mqttbroker: openhab/alarm/zone1: state: default "} String alarmZone1Trigger" Lounge PIR [%1 $ ta%1 $ tr] "Number zone2_Chart_Period" Zone 2 Chart "Contact alarmZone2State" Zone 2 State [MAP (alarm.map):% s] "{mqtt =" <[mqttbroker: openhab/alarm/zone2: state: default "} String alarmZone2Trigger" First Hall PIR [%1 $ ta %1 $ tr] "Number zone3_Chart_Period" Zone 3 Chart "Contact alarmZone3State" Zone 3 Angiv [MAP (alarm.map):%s] "{mqtt =" <[mqttbroker: openhab/alarm/zone3: state: default "} String alarmZone3Trigger" Soveværelse PIR [%1 $ ta%1 $ tr] "Antal zone4_Chart_Period "Zone 4 Chart" Kontakt alarmZone4State "Zone 4 State [MAP (alarm.map):%s]" {mqtt = "<[mqttbroker: openha b/alarm/zone4: state: default "} String alarmZone4Trigger" Main Hall PIR [%1 $ ta %1 $ tr]"

'sitemap' -fil (inklusive rrd4j -graf):

Tekstelement = alarmZone1Trigger valuecolor = [<= 60 = "#ff0000", <= 300 = "#ffa500", <= 600 = "#008000", 3600 = "#000000"] {Frame {Switch item = zone1_Chart_Period label = "Period" mappings = [0 = "Time", 1 = "Day", 2 = "Week"] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone1_Chart_Period == 0, zone1_Chart_Period = = Uinitialiseret] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone1_Chart_Period == 1] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone1_Chart_Period == 2]}} Tekstelement = alarmZone2Trigger valuecolor = [<= 60 = "#ff0000", <= 300 = "#ffa500", <= 600 = "#008000", 3600 = "#000000"] {Frame {Switch item = zone2_Chart_Period label = "Period" mappings = [0 = "Time", 1 = "Day", 2 = "Week"] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone2_Chart_Period == 0, zone2_Chart_Period == Uinitialiseret] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone2_Chart_Period == 1] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone2_Chart_Period == 2]}} Tekstelement = alarmZone3Trigger valuecolor = [<= 60 = "#ff0000", <= 300 = "#ffa500", <= 600 = "#008000", 3600 = "#000000"] {Frame {Switch item = zone3_Chart_Period label = "Period" kortlægninger = [0 = "Time", 1 = "Dag", 2 = "Uge"] Billede url = "https:// localhost: 8080/rrdchart.png" visibility = [zone3_Chart_Period == 0, zone3_Chart_Period == Uinitialiseret] billede url = "https:// localhost: 8080/rrdchart.png" visibility = [zone3_Chart_Period == 1] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone3_Chart_Period == 2]}} Tekst item = alarmZone4Trigger valuecolor = [<= 60 = "#ff0000", <= 300 = "#ffa500", <= 600 = "#008000", 3600 = "#000000"] {Frame {Switch item = zone4_Chart_Period label = " Periode "mappings = [0 =" Time ", 1 =" Day ", 2 =" Week "] Image url =" https:// localhost: 8080/rrdchart.png "visibility = [zone4_Chart_Period == 0, zone4_Chart_Period == Uinitialiseret] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone4_Chart_Period == 1] Image url = "https:// localhost: 8080/rrdchart.png" visibility = [zone4_Chart_Period == 2] }} // VALGFRIT, men praktisk til diagnosticering af status og IP -adresse ss Text item = alarmMonitorState Text item = alarmMonitorIPAddress

'regler' fil:

regel "Alarm Zone 1 tilstandsændring"

når Item alarmZone1State ændret til OPEN derefter postUpdate (alarmZone1Trigger, ny DateTimeType ()) alarmZone1State.state = LUKKET slut

regel "Alarmzone 2 tilstandsændring"

når Item alarmZone2State ændret til OPEN derefter postUpdate (alarmZone2Trigger, ny DateTimeType ()) alarmZone2State.state = LUKKET slut

regel "Alarm Zone 3 tilstandsændring"

når Item alarmZone3State ændret til OPEN derefter postUpdate (alarmZone3Trigger, ny DateTimeType ()) alarmZone3State.state = LUKKET slut

regel "Alarmzone 4 tilstandsændring"

når Item alarmZone4State ændret til OPEN derefter postUpdate (alarmZone4Trigger, ny DateTimeType ()) alarmZone4State.state = LUKKET slut

Du skal muligvis ændre ovenstående OpenHAB -konfiguration lidt, så den passer til din egen opsætning.

Hvis du har problemer med at PIR'er udløses, skal du starte fra begyndelsen og måle spændinger for hver del af kredsløbet. Når du er tilfreds med det, skal du kontrollere dine ledninger, sikre, at der er en fælles grund, kontrollere meddelelser på Wemos via en seriel fejlfindingskonsol, kontrollere MQTT -kommunikation og kontrollere syntaksen for din transformation, varer og sitemapfiler.

Held og lykke!

Anbefalede: