İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Standart sel sensörlerine sahip olmak, evinize veya iş yerinize büyük zarar gelmesini önlemek için harikadır.
Ama alarma katılmak için evde değilseniz, bu zorlaştırır.
Tabii ki akıllı olanları satın alabilirsin
Bu taşkın alarm sistemi, herhangi bir sıvıyı algılar ve alarmı tetikler ve dünyanın her yerinden erişilebilen, ister tatilde ister iş yerinde, evinizin durumunu öğrenmek istediğinizde sel ile ilgili web sayfasını günceller.
Gereçler
Raspbian çalıştıran Raspberry pi (model 3 B+ kullanıyorum)
Parçacık Argon
Koru Su Sensörü
Raspi Kamera
zil
Atlama telleri
Adım 1: Su Sensörünü Parçacıklara Bağlayın
su sensörünün GND, VCC, NC ve SIG olmak üzere 4 pini vardır ve bunlardan sadece üçünü kullanacağız.
SIG pinini Argon'da D2'ye bağlıyorum.
Şimdi, kodu yazmak ve Argon'a flash yapmak için Particle Web IDE'yi başlatabilirsiniz.
Bu nedenle, Particle function Liquid'i kaydettik ve Particle Console'dan çağrılabilen ve isFloodPresent'in boole değerini elde edebilen bir değişken isFloodPresent tanımladık ve ayrıca giriş olarak 1 değerini alan, yani mevcut sel (su) için doğru anlamına gelen sahte test için sıvı işlevini çağırdık..
Parçacık Cihazınızın Parçacık Konsolundan bu işlevi ve değişkeni görebildiğinizden emin olun.
Adım 2: Alarm Kaynağını Raspberry'ye Bağlayın
Breadboard'da Buzzer'ı Raspberry'nin GPIO pinine bağlayabilirsiniz.
Buzzer'ın daha küçük ucunu GND'ye (PIN 6) ve daha uzun ucunu ahudududaki pim 7'ye bağladım.
Şimdi görmek için kodu çalıştırın. Web sunucusundan tetikleyicileri alabilmesi ve buna göre yanıt verebilmesi için bu python dosyasının her zaman çalışıyor olmasına ihtiyacımız olacak.
Alternatif olarak, /etc/systemd dosyasını düzenleyerek yapabileceğiniz ahududunuzda başlangıçta bu dosyayı çalıştırabilirsiniz.
ve bu dosya apache sunucunuzun cgi klasörüne yerleştirilecektir, /var/www/html/ içinde yeni bir flood-cgi dizini oluşturdum ve cgi betiğim ile iletişim kuracak bu.py dosyasını yerleştirdim
3. Adım: Apache Sunucusunu Yapılandırın
apache sunucusunu sudo apt-get install apache2 yazarak kurabilirsiniz.
kurulduğunda, hostname -I yazarak doğrulayabilirsiniz.
ve yerel IP adresinizi alacaksınız ve tarayıcınıza gidebilir ve sunucunun çalıştığını görmelisiniz.
Adım 4: Apache'de CGI'yı etkinleştirin
sudo a2enmod cgi yazarak cgi'yi etkinleştirebilirsiniz
Varsayılan olarak apache'nin cgi_bin'i /usr/lib/cgi-bin içinde bulunur
burası, cgi'yi etkinleştirdikten sonra cgi betiklerinizi koyabileceğiniz yerdir.
efekti almak için apache sunucusunu yeniden başlatmanız gerekir
Cgi betiklerim için özel bir dizin istedim, bu yüzden /var/www/html/ içinde flood-cgi adında bir dizin oluşturdum
bu dizini etkinleştirmek için yazarak conf dosyası yapmak zorunda kaldım
sudo nano /etc/apache2/conf-available/flood-cgi.conf
ve ekran görüntüsünde gösterildiği gibi komut ekleme
daha sonra yazarak bu dizini etkinleştirin
var/www/html $ sudo a2enconf flood-cgi
şimdi apache sunucunuzu yeniden başlatabilirsiniz ve bu klasördeki tüm cgi'ler izin alındıktan sonra apache tarafından okunabilir.
Adım 5: Web Sayfasını Ayarlayın
Bu basit web hizmeti için HTML, Javascript, CSS, jquery ve ajax kullanıyorum.
Tıklanabilir beş kontrol etiketim var, Web sayfasından fotoğraf çek tıklandığında fotoğraf buton tıklama fonksiyonunu tetikleyecek ve bu fonksiyon şu şekilde görünecektir.
$("#photobutton").click(function () { var floodDate = new Date();
var floodImageName = "Flood_IMG_" + floodDate.toLocaleTimeString();
$.ajax({
url: 'flood-cgi/flood_cgi.py', yöntem: 'gönder', veri: { name_for_image: floodImageName }, başarı: işlev (veri) {
uyarı(veri, durum)
$("#recentpic").attr("src", "flood-cgi/" + floodImageName + ".jpg");
}
})
});
bu, fotoğraf çekmek için flood_cgi.py komut dosyasını çağırır ve resmi geçerli tarih ve saat tarafından oluşturulan özel adla kaydeder ve sayfaya ajax yüklenir.
Alarm durumunda bu fonksiyonu kullanabiliriz.
function callAlarm(alarmType) {
$.ajax({
url: 'sel-cgi/alarm.cgi', yöntem: 'gönder', veri: { alarm_type: alarmType }, başarı: işlev (veri) { uyarı (veri)
}, hata: function (XMLHttpRequest, textStatus, throwError) { alert(throwError) } });
}
Buzzer etiketine tıklandığında callAlarm fonksiyonu çağrılır, $("#buzzer").click(function () { callAlarm("test");
})
aşağıdaki kod, sahte sel'e tıklamak, yani Parçacık API'sini çağırmak ve işlevi çağırmak ve sıvı değerini 1 değiştirmek ve sahte bir sel olayı gerçekleştirerek sistemin tamamının beklendiği gibi çalışıp çalışmadığını kontrol etmek istediğiniz zamandır.
$("#mockFlood").click(function () { console.log("sahte sel istedi");
var selVal = 1;
$("#signal2").css("yazı tipi boyutu", "küçük");
var varName = "isFloodPresent";
var deviceID = "CİHAZ KİMLİĞİNİZ";
var accessToken = "ERİŞİM TOKENİNİZ";
if (floodVal) {
$.post("https://api.particle.io/v1/devices/" + deviceID + "/liquid?access_token=" + accessToken, { sıvı: floodVal }, işlev (veri, durum) {
if (durum == "başarılı") {
alert("Mock Flood yapıldı!!!");
} Başka {
alert("Üzgünüz, bir sorun oluştu");
}
});
}
});
Bunlar, ahududu pi ve parçacık aygıtınız Argon'un iletişim kurabilmesi için Particle Api ve ahududunuzla bağlantı kurmanız gereken ana işlevlerdir.
not: Tüm kodu yüklemek istedim, ancak.html dosyasını yüklememe izin vermiyor
Adım 6: Raspi Kamera için Komut Dosyası Oluşturun
görüntü yakalamak için basit.py oluşturuyoruz ve bu, üzerinde geçerli tarih ve saatin ek açıklamasına sahip olacak.
sonra cgi betiği flood_cgi.py oluşturacağız, böylece web'den çağrılacak ve bu.py dosyasına fotoğraf çekme komutu verecek.
cgi betiğini # ile başlattığınızdan emin olun! /usr/bin/env piton
ve ayrıca bu dosyaları çalıştırmak için apache'ye izin verin.
apache sunucusu www-data kullanıcısı üzerinde çalışır, bu nedenle.py veya.cgi dosyasını oluşturduğumuzda, apache'nin dosyanın sahibi olması gerekir
sudo chown pi: www-data flood-cgi.py
ve yürütme izni verin
sudo chmod a+x flood-cgi.py
apache sunucusundan çalıştırılması gereken tüm dosyalar için bunu yapmanız gerekecek.
NOT: Ahududunuzu internete maruz bırakmak ve tüm bu izinleri vermek, ahududunuzu güvenlik nedeniyle çok savunmasız hale getirir, bu nedenle katı kullanıcı ve izinlere uyulmalı ve karmaşık olmayan güvenlik duvarı (ufw) gibi güvenlik duvarı kurulmalıdır.