Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Standardni senzorji za poplave so odlični za preprečevanje velikih poškodb vašega doma ali delovnega mesta.
Toda oteži se, če se niste udeležili alarma, če niste doma.
Seveda bi jih lahko kupili pametne
Ta alarmni sistem za poplave zazna kakršno koli tekočino in sproži alarm ter posodobi spletno stran o poplavah, do katere lahko dostopate kjer koli po svetu, ne glede na to, ali imate sproščujoče počitnice ali samo v službi in želite vedeti o stanju svoje hiše.
Zaloge
Raspberry pi (uporabljam model 3 B+), ki teče raspbian
Delci Argon
Senzor vode Grove
Kamera Raspi
Zvočni signal
Mostične žice
1. korak: Senzor vode priključite na delce
senzor vode ima 4 zatiče, ki so GND, VCC, NC in SIG in uporabili jih bomo le tri
Priključujem pin SIG na D2 na Argonu.
Zdaj lahko zaženete Particle Web IDE, da napišete kodo in utripate v Argon
Tako smo registrirali funkcijo delcev tekočino in definirali spremenljivko isFloodPresent, ki jo lahko pokličemo iz konzole Particle Console in pridobimo logično vrednost isFloodPresent ter tudi pokličemo funkcijo liquid za lažno testiranje, ki za vnos vzame vrednost 1, kar pomeni, da je za poplavo (voda) prisotna.
Poskrbite, da boste lahko videli to funkcijo in spremenljivko iz konzole Particle vaše naprave za delce.
Korak: Priključite vir alarma na Raspberry
Na matični plošči lahko Buzzer povežete z Raspberryjevim zatičem GPIO
Manjši konec sirene sem priključil na GND (PIN 6), daljši konec pa na pin 7 na malini.
Zdaj zaženite kodo, da vidite. To datoteko python bomo morali ves čas izvajati, da lahko sprejme sprožilce s spletnega strežnika in se ustrezno odzove.
Druga možnost je, da to datoteko zaženete ob zagonu v svoji malini, kar lahko storite tako, da uredite /etc /systemd
in ta datoteka bo postavljena v mapo cgi vašega strežnika apache, Naredil sem nov imenik flood-cgi znotraj/var/www/html/in postavil to datoteko.py, ki bo komunicirala z mojim skriptom cgi
3. korak: Konfigurirajte strežnik Apache
strežnik apache lahko namestite tako, da vnesete sudo apt-get install apache2
ko je nameščen, lahko preverite tako, da vnesete ime gostitelja -I
in dobili boste lokalni naslov IP in se lahko odpravite v brskalnik in videli boste, da strežnik deluje
4. korak: Omogočite CGI v Apacheju
cgi lahko omogočite tako, da vnesete sudo a2enmod cgi
Privzeto je cgi_bin apache v/usr/lib/cgi-bin
tukaj lahko po vklopu cgi postavite svoje skripte cgi
Če želite doseči učinek, morate znova zagnati strežnik apache
Želel sem imenik po meri za svoje skripte cgi, zato sem ustvaril imenik v/var/www/html/, imenovan flood-cgi
Za omogočanje tega imenika sem moral z vnosom vnesti datoteko conf
sudo nano /etc/apache2/conf-available/flood-cgi.conf
in dodajanje ukazov, kot je prikazano na posnetku zaslona
nato omogočite ta imenik z vnosom
var/www/html $ sudo a2enconf flood-cgi
zdaj lahko znova zaženete strežnik apache in vse cgi iz te mape bo po dovoljenju bral apache.
5. korak: Nastavite spletno stran
Za to preprosto spletno storitev uporabljam HTML, Javascript, CSS, jquery in ajax.
Imam pet kontrolnih oznak, ki jih je mogoče klikniti, V primeru, da na spletni strani kliknete fotografijo, se bo sprožila funkcija klika na gumb za fotografijo in ta funkcija izgleda tako
$ ("#photobutton"). click (function () {var floodDate = nov datum ();
var floodImageName = "Flood_IMG_" + floodDate.toLocaleTimeString ();
$.ajax ({
url: 'flood-cgi/flood_cgi.py', metoda: 'objava', podatki: {name_for_image: floodImageName}, uspeh: funkcija (podatki) {
opozorilo (podatki, stanje)
$ ("#recentpic"). attr ("src", "flood-cgi/" + floodImageName + ".jpg");
}
})
});
to bo poklicalo skript flood_cgi.py za fotografiranje in shrani sliko z imenom po meri, ki ga ustvarijo trenutni datum in čas, ajax pa se naloži do strani.
v primeru alarma lahko uporabimo to funkcijo
function callAlarm (alarmType) {
$.ajax ({
url: 'flood-cgi/alarm.cgi', metoda: 'objava', podatki: {alarm_type: alarmType}, uspeh: funkcija (podatki) {opozorilo (podatki)
}, error: function (XMLHttpRequest, textStatus, throwError) {alert (throwError)}});
}
funkcija callAlarm bo poklicana, ko kliknete na oznako brenčalnika, $ ("#buzzer"). click (function () {callAlarm ("test");
})
spodnja koda je, če želite klikniti namišljeno poplavo, tj. poklicati API za delce in poklicati funkcijo ter spremeniti vrednost tekočine 1 in preveriti, ali celota deluje po pričakovanjih z izvedbo lažnega dogodka poplave
$ ("#mockFlood"). click (function () {console.log ("zahtevana je lažna poplava");
var floodVal = 1;
$ ("#signal2"). css ("velikost pisave", "majhna");
var varName = "isFloodPresent";
var deviceID = "ID VAŠE NAPRAVE";
var accessToken = "VAŠ ŽEZEN ZA DOSTOP";
if (floodVal) {
$.post ("https://api.particle.io/v1/devices/" + ID naprave + "/tekočina? access_token =" + accessToken, {tekočina: floodVal}, funkcija (podatki, stanje) {
if (status == "uspeh") {
alert ("Mock Flood je izveden !!!");
} drugo {
alert ("Oprostite, prišlo je do težave");
}
});
}
});
To so glavne funkcije, ki jih potrebujete za vzpostavitev povezave z Particle Api in vašo malino, da lahko komunicira vaš malina pi in naprava z delci Argon.
opomba: želel sem naložiti vso kodo, vendar mi ne dovoljuje nalaganja datoteke.html
6. korak: Ustvarite skript za kamero Raspi
ustvarjamo preprosto datoteko.py za zajem slike, ki bo imela opombo o trenutnem datumu in času.
nato bomo ustvarili skript cgi flood_cgi.py, tako da bo poklican s spleta in to bo ukazalo datoteko.py za fotografiranje.
zagotovo zaženite skript cgi z #! /usr/bin/env python
in tudi dovolite apacheju za izvajanje teh datotek.
strežnik apache deluje na uporabniških www-podatkih, zato mora biti apache, ko ustvarimo datoteko.py ali.cgi, lastnik datoteke
sudo chown pi: www-data flood-cgi.py
in da dovoljenje za izvedbo
sudo chmod a+x flood-cgi.py
to boste morali narediti za vse datoteke, ki jih je treba zagnati s strežnika apache.
OPOMBA: zaradi izpostavljanja vaše maline internetu in dajanja vseh teh dovoljenj je vaša malina zaradi varnostnih razlogov zelo ranljiva, zato je treba upoštevati stroge uporabnike in dovoljenja ter namestiti požarni zid kot nezapleten požarni zid (ufw)