Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Mít standardní povodňové senzory je skvělé, aby se zabránilo masivnímu poškození vašeho domova nebo pracoviště.
Ale dělá to těžké, pokud nejste doma, abyste se zúčastnili alarmu.
Samozřejmě si můžete koupit ty chytré
Tento povodňový poplachový systém detekuje jakoukoli kapalinu a spustí poplach a aktualizuje webovou stránku o povodni, ke které je možné přistupovat kdekoli na světě, ať už trávíte odpočinkovou dovolenou nebo právě v práci a chcete vědět o stavu svého domu.
Zásoby
Raspberry pi (používám model 3 B+) se systémem Raspbian
Částice Argon
Senzor vody Grove
Fotoaparát Raspi
Bzučák
Propojovací vodiče
Krok 1: Připojte vodní senzor k částici
vodní senzor má 4 piny, které jsou GND, VCC, NC a SIG a použijeme pouze tři z nich
Připojuji SIG pin k D2 na Argonu.
Nyní můžete spustit Particle Web IDE pro napsání kódu a flash pro Argon
Zaregistrovali jsme tedy funkci Particle liquid a definovali jsme proměnnou isFloodPresent, kterou lze volat z konzoly Particle Console a získat booleovskou hodnotu isFloodPresent a také volat funkční kapalinu pro falešné testování, které bere hodnotu 1 jako vstup, což znamená true pro přítomnou povodeň (vodu).
ujistěte se, že vidíte tuto funkci a proměnnou z konzoly Particle ve vašem zařízení s částicemi.
Krok 2: Připojte zdroj alarmu k Raspberry
Na prkénku můžete připojit Buzzer ke kolíku GPIO Raspberry
Připojil jsem menší konec bzučáku na GND (PIN 6) a delší konec na pin 7 na malině.
Nyní spusťte kód a podívejte se. Budeme potřebovat, aby byl tento soubor pythonu stále spuštěný, aby mohl přijímat spouštěcí události z webového serveru a odpovídajícím způsobem reagovat.
Alternativně můžete tento soubor spustit při spuštění na malině, což lze provést úpravou souboru /etc /systemd
a tento soubor bude umístěn do složky cgi vašeho serveru apache, Vytvořil jsem nový adresář flood-cgi uvnitř/var/www/html/a umístil tento soubor.py, který bude komunikovat s mým skriptem cgi
Krok 3: Konfigurace serveru Apache
server apache můžete nainstalovat zadáním sudo apt-get install apache2
když je nainstalován, můžete ověřit zadáním názvu hostitele -I
a dostanete svou místní IP adresu a můžete zamířit do svého prohlížeče a měli byste vidět spuštěný server
Krok 4: Povolte CGI na Apache
cgi můžete povolit zadáním sudo a2enmod cgi
Ve výchozím nastavení se cgi_bin apache nachází v/usr/lib/cgi-bin
zde můžete vkládat skripty cgi po povolení cgi
aby se účinek projevil, je třeba restartovat server apache
Chtěl jsem vlastní skript pro své cgi skripty, takže jsem vytvořil adresář v/var/www/html/nazvaný flood-cgi
pro povolení tohoto adresáře jsem musel vytvořit soubor conf zadáním
sudo nano /etc/apache2/conf-available/flood-cgi.conf
a přidávání příkazů podle obrázku
pak povolte tento adresář zadáním
var/www/html $ sudo a2enconf flood-cgi
nyní můžete restartovat server apache znovu a všechny cgi z této složky budou čitelné pomocí apache po povolení.
Krok 5: Nastavení webové stránky
Pro tuto jednoduchou webovou službu používám HTML, Javascript, CSS, jquery a ajax.
Mám pět ovládacích štítků, na které lze kliknout, V případě, že na webovou stránku kliknete na fotografii, spustí se funkce kliknutí na tlačítko fotografie a tato funkce vypadá takto
$ ("#photobutton"). klikněte (funkce () {var floodDate = new Date ();
var floodImageName = "Flood_IMG_" + floodDate.toLocaleTimeString ();
$.ajax ({
URL: 'flood-cgi/flood_cgi.py', metoda: 'post', data: {name_for_image: floodImageName}, úspěch: funkce (data) {
výstraha (data, stav)
$ ("#recentpic"). attr ("src", "flood-cgi/" + floodImageName + ".jpg");
}
})
});
toto zavolá skript flood_cgi.py k pořízení fotografie a uloží obrázek s vlastním názvem generovaným aktuálním datem a časem a načte se ajax až na stránku.
v případě alarmu můžeme tuto funkci použít
funkce callAlarm (alarmType) {
$.ajax ({
URL: 'flood-cgi/alarm.cgi', metoda: 'post', data: {alarm_type: alarmType}, úspěch: funkce (data) {upozornění (data)
}, chyba: funkce (XMLHttpRequest, textStatus, throwError) {alert (throwError)}});
}
funkce callAlarm bude vyvolána po kliknutí na štítek bzučáku, $ ("#bzučák"). klikněte (funkce () {callAlarm ("test");
})
níže uvedený kód je, když chcete kliknout na falešnou záplavu, tj. volat API pro částice a zavolat funkci a změnit hodnotu kapaliny 1 a zkontrolovat systém, pokud celý funguje podle očekávání provedením falešné povodňové události
$ ("#mockFlood"). click (funkce () {console.log ("falešná záplava si vyžádala");
var floodVal = 1;
$ ("#signal2"). css ("velikost písma", "malá");
var varName = "isFloodPresent";
var deviceID = "ID VAŠEHO ZAŘÍZENÍ";
var accessToken = "VAŠE PŘÍSTUPOVÉ TOKEN";
if (floodVal) {
$.post ("https://api.particle.io/v1/devices/" + deviceID + "/liquid? access_token =" + accessToken, {liquid: floodVal}, funkce (data, stav) {
if (status == "success") {
alert („Falešná povodeň provedla !!!“);
} else {
alert („Omlouváme se, došlo k problému“);
}
});
}
});
Toto jsou hlavní funkce, které potřebujete k navázání spojení s Particle Api a vaší malinou, aby vaše Raspberry Pi a částicové zařízení Argon mohly komunikovat.
poznámka: Chtěl jsem nahrát veškerý kód, ale nedovoluje mi to nahrát soubor.html
Krok 6: Vytvořte skript pro kameru Raspi
vytváříme jednoduchý.py pro zachycení obrázku, který bude obsahovat anotaci aktuálního data a času.
poté vytvoříme skript cgi flood_cgi.py, takže bude volán z webu a tím se přikáže soubor.py k pořízení fotografie.
ujistěte se, že spustíte skript cgi s #! /usr/bin/env python
a také dát Apache povolení ke spuštění těchto souborů.
server apache běží na uživatelských www datech, takže jakmile vytvoříme soubor.py nebo.cgi, apache musí být vlastníkem souboru
sudo chown pi: www-data flood-cgi.py
a dát povolení k provedení
sudo chmod a+x flood-cgi.py
budete to muset udělat pro všechny soubory, které je třeba spustit ze serveru apache.
POZNÁMKA: vystavení vaší maliny internetu a poskytnutí všech těchto oprávnění činí vaši malinu velmi zranitelnou z bezpečnostních důvodů, takže byste měli dodržovat přísná oprávnění uživatelů a instalovat firewall jako nekomplikovaný firewall (ufw)