
Günümüzde mikroelektroniğin, iletişim kanallarının, internet teknolojilerinin ve Yapay Zekanın hızla gelişmesi sayesinde akıllı evler konusu giderek daha alakalı hale geliyor. İnsan konutları Taş Devri'nden bu yana önemli değişikliklere uğramış, Sanayi Devrimi 4.0 ve Nesnelerin İnterneti çağında konforlu, işlevsel ve güvenli hale gelmiştir. Bir apartman dairesini veya kır evini dünyanın herhangi bir yerinden akıllı telefon kullanılarak kontrol edilen karmaşık bilgi sistemlerine dönüştüren çözümler pazara geliyor. Üstelik insan-makine etkileşimi artık programlama dilleri bilgisine ihtiyaç duymuyor; konuşma tanıma ve sentez algoritmaları sayesinde kişi akıllı evle kendi ana dilinde konuşuyor.
Şu anda piyasada bulunan bazı akıllı ev sistemleri, geliştiricilerin yalnızca izleme için değil, aynı zamanda uzaktaki nesneleri yönetmek için de kapsamlı bir çözüm ihtiyacını fark ettiği bulut video gözetim sistemlerinin mantıksal bir gelişimidir.
Yazar tarafından kişisel olarak geliştirilen ve devreye alınan bulut akıllı ev sisteminin tüm ana bileşenlerini anlatacak üç makaleden oluşan bir diziyi dikkatinize sunuyoruz. İlk makale, akıllı bir evin içine kurulan terminal istemci ekipmanına, ikincisi bulut depolama ve veri işleme sisteminin mimarisine ve son olarak üçüncüsü, sistemi mobil ve sabit cihazlarda yönetmek için istemci uygulamasına ayrılmıştır.
Akıllı ev ekipmanları
Öncelikle sıradan bir apartman dairesinden, kulübeden veya kır evinden nasıl akıllı bir ev yapılacağından bahsedelim. Bunu yapmak için, kural olarak, aşağıdaki ekipmanın eve yerleştirilmesi gerekir:
- dış ortamın çeşitli parametrelerini ölçen sensörler;
- harici nesnelere etki eden aktüatörler;
- sensör ölçümlerine ve gömülü mantığa göre hesaplamalar yapan ve aktüatörlere komutlar veren bir kontrolör.
Aşağıdaki şekilde banyoda su kaçağı sensörleri (1), yatak odasında sıcaklık (2) ve aydınlatma (3), mutfakta akıllı priz (4) ve mutfakta akıllı priz (5) bulunan bir akıllı evin şeması gösterilmektedir. Koridorda video gözetim kamerası (XNUMX).

Günümüzde RF433, Z-Wave, ZigBee, Bluetooth ve WiFi protokollerini kullanarak çalışan kablosuz sensörler yaygın olarak kullanılmaktadır. Başlıca avantajları kurulum ve kullanım kolaylığının yanı sıra düşük maliyet ve güvenilirliktir, çünkü Üreticiler, cihazlarını kitlesel pazara sunmaya ve onları ortalama kullanıcı için erişilebilir hale getirmeye çalışıyor.
Sensörler ve aktüatörler, kural olarak, kablosuz bir arayüz aracılığıyla, tüm bu cihazları tek bir ağda birleştiren ve onları kontrol eden özel bir mikro bilgisayar olan akıllı ev denetleyicisine (6) bağlanır.
Ancak bazı çözümlerde bir sensör, bir aktüatör ve bir kontrolör aynı anda birleştirilebilir. Örneğin, akıllı bir priz, bir programa göre açılacak veya kapanacak şekilde programlanabilir ve bir bulut video gözetleme kamerası, hareket dedektörü sinyaline göre video kaydedebilir. En basit durumlarda ayrı bir kontrolör olmadan da yapabilirsiniz ancak birçok senaryoya sahip esnek bir sistem oluşturmak gereklidir.
Akıllı ev denetleyicisini küresel ağa bağlamak için, uzun süredir herhangi bir evde yaygın bir ev aleti haline gelen normal bir İnternet yönlendiricisi (7) kullanılabilir. Burada akıllı ev denetleyicisi lehine başka bir argüman daha var - İnternet bağlantısı kesilirse, akıllı ev, bulut hizmetinde değil, denetleyicinin içinde saklanan mantık bloğu sayesinde normal şekilde çalışmaya devam edecektir.
Akıllı ev denetleyicisi
Bu makalede ele alınan bulut akıllı ev sisteminin denetleyicisi, tek kartlı bir mikro bilgisayar temel alınarak geliştirilmiştir. Mart 2018'de piyasaya sürülen ve akıllı ev görevleri için yeterli kaynağa ve performansa sahip olan. 53 bit ARMv64-A mimarisini temel alan, 8 GHz saat hızına sahip dört çekirdekli Cortex-A1.4 işlemcinin yanı sıra 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 ve USB 2.0 üzerinden çalışan bir gigabit Ethernet adaptörü içerir. .

Denetleyicinin montajı çok basittir - mikro bilgisayar (1) plastik bir kasaya (2) takılır, ardından yazılım içeren microSD formatında 8 GB hafıza kartı (3) ve bir USB Z-Wave ağ denetleyicisi (4) takılır. karşılık gelen yuvalar. Akıllı ev denetleyicisi, 5V, 2.1A güç adaptörü (5) ve USB - mikro USB kablosu (6) aracılığıyla güç kaynağına bağlanır. Her denetleyicinin, ilk başlatıldığında yapılandırma dosyasına yazılan ve bulut akıllı ev hizmetleriyle etkileşim için gerekli olan benzersiz bir kimlik numarası vardır.
Akıllı ev denetleyici yazılımı, bu makalenin yazarı tarafından işletim sistemi temel alınarak geliştirilmiştir. Linux Raspbian Streç. Aşağıdaki ana alt sistemlerden oluşur:
- akıllı ev ekipmanı ve bulutla etkileşim için sunucu süreci;
- kontrolörün konfigürasyon ve çalışma parametrelerini ayarlamak için grafik kullanıcı arayüzü;
- Denetleyici yapılandırmasını depolamak için veritabanı.

veritabanı akıllı ev denetleyicisi, yerleşik bir DBMS'ye dayalı olarak uygulanır ve sistem yazılımının bulunduğu SD karttaki bir dosyadır. Denetleyici yapılandırması için bir depolama görevi görür - bağlı ekipman ve mevcut durumu hakkında bilgi, bir mantıksal üretim kuralları bloğu ve ayrıca indeksleme gerektiren bilgiler (örneğin, yerel bir video arşivinin dosya adları). Denetleyici yeniden başlatıldığında bu bilgiler kaydedilerek elektrik kesintisi durumunda denetleyicinin geri yüklenmesine olanak sağlanır.
Grafik arayüzü PHP 7'de bir mikro çerçeve kullanılarak geliştirilen akıllı ev denetleyicisi . Web sunucusu uygulamanın çalıştırılmasından sorumludur. İyi performansı ve düşük kaynak gereksinimleri nedeniyle genellikle gömülü cihazlarda kullanılır.
(Resmin üzerine tıklayarak yüksek çözünürlükte açabilirsiniz)
Grafik arayüzün ana işlevi, akıllı ev ekipmanlarını (IP güvenlik kameraları ve sensörleri) denetleyiciye bağlamaktır. Web uygulaması, denetleyicinin ve ona bağlı cihazların yapılandırmasını ve mevcut durumunu SQLite veritabanından okur. Denetleyici yapılandırmasını değiştirmek için sunucu işleminin RESTful API arayüzü aracılığıyla JSON formatında kontrol komutları gönderir.
Sunucu süreci
Sunucu süreci - akıllı bir evin temelini oluşturan bilgi süreçlerinin otomatikleştirilmesine ilişkin tüm ana çalışmaları gerçekleştiren önemli bir bileşen: duyusal verileri almak ve işlemek, yerleşik mantığa bağlı olarak kontrol eylemleri düzenlemek. Sunucu sürecinin amacı akıllı ev ekipmanıyla etkileşim kurmak, üretim mantıksal kurallarını yürütmek, grafik arayüzden ve buluttan komutlar almak ve işlemektir. Söz konusu akıllı ev denetleyicisindeki sunucu süreci, C++ dilinde geliştirilen ve ayrı bir hizmet olarak başlatılan çok iş parçacıklı bir uygulama olarak uygulanır. systemd işletim sistemi Linux Raspbian.
Sunucu işleminin ana blokları şunlardır:
- Mesaj Yöneticisi;
- IP kamera sunucusu;
- Z-Wave cihaz sunucusu;
- Sunucu üretim mantıksal kuralları;
- Denetleyicinin yapılandırma veritabanı ve mantıksal kurallar bloğu;
- Grafiksel arayüzle etkileşim için RESTful API sunucusu;
- Bulutla etkileşim için MQTT istemcisi.
Sunucu işlem blokları, aralarında JSON formatındaki mesajlar (veya işlem belleğinde bu formatı temsil eden veri yapıları) şeklinde aktarılan ayrı iş parçacıkları olarak uygulanır.

Sunucu sürecinin ana bileşeni mesaj yöneticisiJSON mesajlarını tüm sunucu işlem bloklarına yönlendiren. JSON mesaj bilgi alanlarının türleri ve kabul edebilecekleri değerler tabloda listelenmiştir:
cihaz tipi
protokol
mesaj tipi
cihazDurumu
komuta
kamera
onvif
sensörVerileri
on
akış (Açık/Kapalı)
algılayıcı
z dalgası
komuta
kapalı
kayıt (Açık/Kapalı)
efektör
mqtt
işMantık Kuralı
akış (Açık/Kapalı)
evice(Ekle/Kaldır)
iş mantığı
konfigürasyonVerileri
kayıt (Açık/Kapalı)
Bluetooth
cihazDurumu
hata
kablosuz internet
rf
Örneğin, bir kamera hareket dedektöründen gelen mesaj şuna benzer:
{
"vendor": "*****",
"version": "3.0.0",
"timestampMs": "1566293475475",
"clientType": "gateway",
"deviceId": "1616453d-30cd-44b7-9bf0-************",
"deviceType": "camera",
"protocol": "onvif",
"messageType": "sensorData",
"sensorType": "camera",
"label": "motionDetector",
"sensorData": "on"
}
Üretim mantığı
Göndericiden mesaj almak veya göndermek için sunucu işlem bloğu belirli türdeki mesajlara abone olur. Abonelik, türün üretim mantıksal kuralıdır “Eğer... o zaman...”JSON formatında sunulur ve sunucu işlem bloğunun içindeki mesaj işleyicisine bir bağlantı. Örneğin, IP kamera sunucusunun GUI'den ve buluttan komut almasına izin vermek için aşağıdaki kuralı eklemeniz gerekir:
{
"if": {
"and": [{
"equal": {
"deviceId": "1616453d-30cd-44b7-9bf0-************"
}
},
{
"equal": {
"messageType": "command"
}
}
]
},
"then": {
"result": "true"
}
}
Belirtilen koşullar ise öncül (sol taraf) kurallar doğrudur, o zaman yerine getirilir sonuç olarak (sağ taraf) kuralları belirler ve işleyici, JSON mesajının gövdesine erişim sağlar. Önceki, JSON anahtar/değer çiftlerini karşılaştıran mantıksal işleçleri destekler:
- "eşit"e eşittir;
- "eşit_değil"e eşit değil;
- daha az "daha az";
- daha "daha büyük";
- "less_or_equal" değerinden küçük veya ona eşit;
- "greater_or_equal" değerinden büyük veya ona eşittir.
Karşılaştırma sonuçları Boolean cebir operatörleri kullanılarak birbiriyle ilişkilendirilebilir:
- Ve ve"
- Yada yada";
- "Hayır" DEĞİL.
Böylece operatörleri ve işlenenleri Lehçe notasyonla yazarak, çok sayıda parametreye sahip oldukça karmaşık koşullar oluşturabilirsiniz.
JSON mesajlarına ve JSON formatındaki üretim kurallarına dayanan tam olarak aynı mekanizma, bilgiyi temsil etmek ve akıllı ev sensörlerinden gelen duyusal verileri kullanarak mantıksal çıkarım yapmak için üretim mantığı sunucu bloğunda kullanılır.
Kullanıcı, bir mobil uygulama kullanarak akıllı evin çalışması gereken senaryoları oluşturur. Örneğin: "Ön kapıyı açma sensörü tetiklenirse koridordaki ışığı açın". Uygulama, veri tabanından sensörlerin (açılma sensörü) ve aktüatörlerin (akıllı priz veya akıllı lamba) tanımlayıcılarını okur ve akıllı ev denetleyicisine gönderilen JSON formatında mantıksal bir kural oluşturur. Akıllı ev yönetimine yönelik client uygulamasından bahsedeceğimiz serimizin üçüncü yazısında bu mekanizmayı daha detaylı ele alacağız.
Yukarıda tartışılan üretim mantığı mekanizması kütüphane kullanılarak uygulanır. — C++'da JSON formatı için SAX ayrıştırıcı. Bir dizi üretim kuralının sıralı olarak okunması ve ayrıştırılması, öncüllerin içindeki veri karşılaştırma işlevini kolayca uygulamanıza olanak tanır:
void CRuleEngine::Process(PProperties pFact)
{
m_pActions->clear();
rapidjson::Reader reader;
for(TStringMap::value_type& rRule : m_Rules)
{
std::string sRuleId = rRule.first;
std::string sRuleBody = rRule.second;
CRuleHandler ruleHandler(pFact);
rapidjson::StringStream ruleStream(sRuleBody.c_str());
rapidjson::ParseResult parseResult = reader.Parse(ruleStream, ruleHandler);
if(!parseResult)
{
m_Logger.LogMessage(
NLogger2::ePriorityLevelError,
std::string("JSON parse error"),
"CRuleEngine::Process()",
std::string("RuleId: ") + sRuleId);
}
PProperties pAction = ruleHandler.GetAction();
if(pAction)
{
pAction->Set("ruleId", sRuleId);
m_pActions->push_back(pAction);
}
}
}
öyle pGerçek — JSON mesajındaki anahtar/değer çiftlerini içeren bir yapı, m_Rules — üretim kurallarının dize dizisi. Gelen mesaj ile üretim kuralının karşılaştırılması fonksiyonda gerçekleştirilir. okuyucu.Parse(ruleStream, ruleHandler)Nerede kural İşleyicisi Boolean ve karşılaştırma operatörlerinin mantığını içeren bir nesnedir. sRuleId — Akıllı ev denetleyicisi veritabanında kuralları saklamanın ve düzenlemenin mümkün olduğu benzersiz bir kural tanımlayıcı. m_pActions — mantıksal çıkarım sonuçlarını içeren bir dizi: kural tabanından sonuçları içeren ve abone iş parçacıklarının bunları işleyebilmesi için mesaj yöneticisine gönderilen JSON mesajları.
RapidJSON performansı işlevle karşılaştırılabilir strlen()ve minimum sistem kaynağı gereksinimleri bu kütüphanenin gömülü cihazlarda kullanılmasına izin verir. JSON formatında mesajların ve mantıksal kuralların kullanılması, akıllı ev denetleyicisinin tüm bileşenleri arasında esnek bir bilgi alışverişi sistemi uygulamanıza olanak tanır.
Z-Wave Sensörleri ve Aktüatörler
Akıllı evin temel avantajı, dış ortamın çeşitli parametrelerini bağımsız olarak ölçebilmesi ve duruma bağlı olarak faydalı işlevler gerçekleştirebilmesidir. Bunu yapmak için sensörler ve aktüatörler akıllı ev denetleyicisine bağlanır. Mevcut sürümde bunlar, protokolü kullanarak çalışan kablosuz cihazlardır. özel olarak tahsis edilmiş bir frekansta 869 MHz Rusya için. Çalıştırmak için kapsama alanını artırmak amacıyla sinyal tekrarlayıcılar içeren bir ağ ağı halinde birleştirilirler. Cihazların ayrıca özel bir enerji tasarrufu modu vardır - çoğu zaman uyku modunda geçirirler ve yalnızca durumları değiştiğinde bilgi gönderirler, bu da yerleşik pilin ömrünü önemli ölçüde uzatabilir.

Artık piyasada oldukça fazla sayıda farklı Z-Wave cihazı bulabilirsiniz. Birkaç örneğe göz atalım:
- Zipato PAN16 akıllı priz şu parametreleri ölçebilir: elektrik şebekesindeki elektrik tüketimi (kWh), güç (W), voltaj (V) ve akım (A). Ayrıca bağlı elektrikli cihazı kontrol edebileceğiniz yerleşik bir anahtara da sahiptir;
- Neo Coolcam sızıntı sensörü, uzak probun kontaklarını kapatarak dökülen sıvının varlığını tespit eder;
- Zipato PH-PSG01 duman sensörü, duman parçacıkları gaz analizör odasına girdiğinde tetiklenir;
- Neo Coolcam hareket sensörü, insan vücudunun kızılötesi radyasyonunu analiz eder. Ayrıca bir ışık sensörü (Lx) bulunmaktadır;
- Multisensör Philio PST02-A sıcaklığı (°C), ışığı (%), kapı açıklığını, odada bir kişinin varlığını ölçer;
- Sensörlerin bağlı olduğu Z-Wave USB Stick ZME E UZB1 ağ denetleyicisi.
Cihazların ve kontrolörün aynı frekansta çalışması çok önemlidir, aksi takdirde bağlantı anında birbirlerini görmezler. Bir Z-Wave ağ denetleyicisine 232'ye kadar cihaz bağlanabilir; bu, bir apartman dairesi veya kır evi için oldukça yeterlidir. İç mekanda ağ kapsama alanını genişletmek için sinyal tekrarlayıcı olarak akıllı bir priz kullanılabilir.

Önceki paragrafta tartışılan akıllı ev denetleyicisi sunucusu sürecinde, Z-Wave sunucusu, Z-Wave cihazlarıyla etkileşimden sorumludur. Sensörlerden bilgi almak için bir kütüphane kullanır Z-Wave ağ USB denetleyicisi ile etkileşim için bir arayüz sağlayan ve çeşitli sensörler ve aktüatörlerle çalışan C++ dilinde. Sensör tarafından ölçülen çevresel parametrenin değeri, Z-Wave sunucusu tarafından bir JSON mesajı biçiminde kaydedilir:
{
"vendor": "*****",
"version": "3.0.0",
"timestampMs": "1566479791290",
"clientType": "gateway",
"deviceId": "20873eb0-dd5e-4213-a175-************",
"deviceType": "sensor",
"protocol": "zwave",
"messageType": "sensorData",
"homeId": "0xefa0cfa7",
"nodeId": "20",
"sensorType": "METER",
"label": "Voltage",
"sensorData": "229.3",
"units": "V"
}
Daha sonra abone iş parçacıklarının alabilmesi için sunucu işleminin mesaj yöneticisine iletilir. Ana abone, mantık kurallarının öncüllerindeki mesaj alanı değerleriyle eşleşen üretim mantık sunucusudur. Kontrol komutlarını içeren çıkarım sonuçları mesaj yöneticisine geri gönderilir ve buradan Z-Wave sunucusuna gider, sunucu da bunları çözer ve Z-Wave ağ USB denetleyicisine gönderir. Daha sonra çevresel nesnelerin durumunu değiştiren aktüatöre giriyorlar ve akıllı ev böylece faydalı işler yapıyor.
(Resmin üzerine tıklayarak yüksek çözünürlükte açabilirsiniz)
Z-Wave cihazlarının bağlanması akıllı ev denetleyicisinin grafik arayüzünde yapılır. Bunu yapmak için, cihaz listesinin bulunduğu sayfaya gidin ve "Ekle" düğmesini tıklayın. RESTful API arayüzü aracılığıyla ekleme komutu, sunucu işlemine girer ve ardından mesaj yöneticisi tarafından Z-Wave sunucusuna gönderilir; bu, Z-Wave ağ USB denetleyicisini cihaz eklemek için özel bir moda geçirir. Daha sonra, Z-Wave cihazında servis düğmesine bir dizi hızlı basmanız (3 saniye içinde 1,5 basma) yapmanız gerekir. USB denetleyicisi cihazı ağa bağlar ve onunla ilgili bilgileri Z-Wave sunucusuna gönderir. Bu da SQLite veritabanında yeni cihazın parametreleriyle yeni bir giriş oluşturur. Belirli bir zaman aralığından sonra grafik arayüz Z-Wave cihaz listesi sayfasına geri döner, veritabanındaki bilgileri okur ve yeni cihazı listede görüntüler. Her cihaz, üretim çıkarımı kurallarında ve bulutta çalışırken kullanılan kendi benzersiz tanımlayıcısını alır. Bu algoritmanın işleyişi UML diyagramında gösterilmektedir:
(Resmin üzerine tıklayarak yüksek çözünürlükte açabilirsiniz)
IP kameraları bağlama
Bu makalede tartışılan bulut akıllı ev sistemi, yine yazar tarafından geliştirilen, birkaç yıldır piyasada bulunan ve Rusya'da birçok kurulumu bulunan bulut video gözetim sisteminin bir yükseltmesidir.
Bulut video gözetim sistemleri için en ciddi sorunlardan biri, entegrasyonun gerçekleştirilebileceği ekipmanın sınırlı seçimidir. Buluta bağlanmaktan sorumlu yazılım, video kameranın içine kuruludur ve bu, donanımına (işlemci ve boş bellek miktarı) anında ciddi talepler getirir. Bu esas olarak bulut CCTV kameralarının normal IP kameralara kıyasla daha yüksek fiyatını açıklamaktadır. Ayrıca, kamera dosya sistemine ve gerekli tüm geliştirme araçlarına erişim sağlamak için CCTV kamera üreten şirketlerle uzun bir müzakere aşaması gerekiyor.

Öte yandan, tüm modern IP kameraların diğer ekipmanlarla (özellikle video kaydedicilerle) etkileşimi için standart protokoller vardır. Böylece, standart bir protokol aracılığıyla bağlanan ve IP kameralardan buluta video akışı yayınlayan ayrı bir denetleyicinin kullanılması, bulut video gözetim sistemleri için önemli rekabet avantajları sağlar. Üstelik, müşteri zaten basit IP kameralara dayalı bir video gözetim sistemi kurduysa, onu genişletmek ve tam teşekküllü bir bulut akıllı eve dönüştürmek mümkün hale gelir.
Artık istisnasız tüm IP kamera üreticileri tarafından desteklenen, IP video gözetim sistemleri için en popüler protokol özellikleri bir web hizmetleri açıklama dilinde mevcut olan . Araç setindeki yardımcı programları kullanma IP kameralarla çalışan servisler için kaynak kodu oluşturmak mümkündür:
$ wsdl2h -o onvif.h
https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl
https://www.onvif.org/ver10/events/wsdl/event.wsdl
https://www.onvif.org/ver10/media/wsdl/media.wsdl
https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl
$ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h
Sonuç olarak, C++'da doğrudan bir uygulamaya veya ayrı bir kitaplığa yerleştirilebilen ve GCC derleyicisi kullanılarak derlenebilen bir dizi başlık "*.h" ve kaynak "*.cpp" dosyaları elde ederiz. Çok sayıda işlev nedeniyle kod büyüktür ve ek optimizasyon gerektirir. Raspberry Pi 3 model B+ mikrobilgisayar bu kodu çalıştırmak için yeterli performansa sahiptir ancak kodun başka bir platforma taşınması gerekiyorsa doğru işlemci mimarisinin ve sistem kaynaklarının seçilmesi gerekir.
ONVIF standardını destekleyen IP kameralar, yerel bir ağ üzerinde çalışırken, adrese sahip özel bir çok noktaya yayın grubuna bağlanır. 239.255.255.250. Bir protokol var Yerel ağdaki cihazların aranmasını otomatikleştirmenize olanak tanır.
Akıllı ev denetleyicisinin grafik arayüzü, PHP'deki IP kameralar için bir arama işlevi uygular; bu, XML mesajları aracılığıyla web hizmetleriyle etkileşimde bulunurken çok kullanışlıdır. Menü öğelerini seçerken Cihazlar > IP Kameralar > Tarama Sonucu bir tablo şeklinde görüntüleyen IP kameraları arama algoritması başlatılır:
(Resmin üzerine tıklayarak yüksek çözünürlükte açabilirsiniz)
Denetleyiciye bir kamera eklediğinizde bulutla etkileşime gireceği ayarları belirleyebilirsiniz. Ayrıca bu aşamada, daha sonra bulut içinde kolayca tanımlanabilecek benzersiz bir cihaz tanımlayıcısı otomatik olarak atanır.

Daha sonra, eklenen kameranın tüm parametrelerini içeren JSON formatında bir mesaj oluşturulur ve RESTful API komutu aracılığıyla akıllı ev denetleyicisinin sunucu sürecine gönderilir; burada kamera parametrelerinin kodu çözülür ve dahili SQLite veritabanına kaydedilir ve ayrıca aşağıdaki işleme iş parçacıklarını başlatmak için de kullanılır:
- video ve ses akışlarını almak için bir RTSP bağlantısı kurmak;
- G.711 mu-Law, G.711 A-Law, G.723 vb. formatlardan sesin kod dönüştürmesi. AAC formatına;
- H.264 formatındaki video akışlarının ve AAC formatındaki sesin bir FLV konteynerine dönüştürülmesi ve RTMP protokolü aracılığıyla buluta iletilmesi;
- ONVIF protokolü aracılığıyla IP kamera hareket dedektörünün uç noktasıyla bağlantı kurulması ve periyodik olarak yoklanması;
- periyodik olarak bir küçük resim önizleme görüntüsü oluşturmak ve bunu MQTT protokolü aracılığıyla buluta göndermek;
- Video ve ses akışlarının MP4 formatında ayrı dosyalar halinde akıllı ev denetleyicisinin SD veya Flash kartına yerel olarak kaydedilmesi.

Sunucu sürecinde kameralarla bağlantı kurmak, video akışlarını dönüştürmek, işlemek ve kaydetmek için kütüphanedeki işlevler kullanılır 4.1.0
Performans testi deneyinde denetleyiciye 3 kamera bağlandı:
- HiWatch DS-I114W (çözünürlük - 720p, sıkıştırma formatı - H.264, bit hızı - 1 Mb/s, ses G.711 mu-Kanun);
- Microdigital MDC-M6290FTD-1 (çözünürlük - 1080p, sıkıştırma formatı - H.264, bit hızı - 1 Mb/s, ses yok);
- Dahua DH-IPC-HDW4231EMP-AS-0360B (çözünürlük - 1080p, sıkıştırma formatı - H.264, bit hızı - 1.5 Mb/s, AAC ses).

Üç akışın tümü aynı anda buluta çıktı, ses kod dönüştürmesi yalnızca bir kameradan gerçekleştirildi ve yerel arşiv kaydı devre dışı bırakıldı. CPU yükü yaklaşık %5, RAM kullanımı 32 MB (işlem başına), 56 MB (işletim sistemi dahil toplam) idi.
Bu nedenle, çözünürlük ve bit hızına bağlı olarak yaklaşık 20-30 kamera, üç katlı bir ev veya küçük bir depo için video gözetim sistemi için yeterli olan akıllı ev kontrol ünitesine bağlanabilir. Daha yüksek performans gerektiren görevler için, çok çekirdekli Intel işlemci ve işletim sistemine sahip bir nettop kullanılabilir. Linux Debian Çavuş. Kontrol cihazı şu anda deneme aşamasındadır ve performans verileri güncellenecektir.
Bulutla etkileşim
Bulut tabanlı bir akıllı ev, kullanıcı verilerini (video ve sensör ölçümleri) bulutta depolar. Bulut depolama mimarisi serimizin bir sonraki makalesinde daha detaylı olarak ele alınacaktır. Şimdi akıllı ev kumandasından bilgi mesajlarını buluta iletmek için kullanılan arayüzden bahsedelim.
Bağlı cihazların durumları ve sensör ölçümleri protokol aracılığıyla iletilir Sadeliği ve enerji verimliliği nedeniyle Nesnelerin İnterneti projelerinde sıklıkla kullanılmaktadır. MQTT, istemcilerin aracı içindeki belirli konulara abone olduğu ve mesajlarını yayınladığı bir istemci-sunucu modelini kullanır. Aracı, tüm abonelere QoS (Hizmet Kalitesi) seviyesinin belirlediği kurallara göre mesajlar gönderir:
- QoS 0 - maksimum bir kez (teslimat garantisi yok);
- QoS 1 - en az bir kez (teslimat onayı ile);
- QoS 2 - tam olarak bir kez (ek teslimat onayıyla).
Bizim durumumuzda kullanıyoruz . Konu adı, akıllı ev denetleyicisinin benzersiz tanımlayıcısıdır. Sunucu işlemi içindeki MQTT istemcisi bu konuya abone olur ve mesaj yöneticisinden gelen JSON mesajlarını bu konuya çevirir. Tersine, MQTT aracısından gelen mesajlar mesaj yöneticisine iletilir ve daha sonra bu mesajlar sunucu işlemi içindeki abonelerine çoğaltılır:

Akıllı ev denetleyicisinin durumuyla ilgili mesajları iletmek için kayıtlı mesajların mekanizması kullanılır MQTT protokolü. Bu, elektrik kesintileri sırasında yeniden bağlantıların zamanlamasını doğru bir şekilde izlemenizi sağlar.
MQTT istemcisi kütüphane uygulaması temel alınarak geliştirildi C++ dilinde.
H.264 + AAC medya akışları, RTMP protokolü aracılığıyla buluta gönderilir; burada bir medya sunucusu kümesi, bunların işlenmesinden ve depolanmasından sorumludur. Yükü kümede en iyi şekilde dağıtmak ve en az yüklü medya sunucusunu seçmek için akıllı ev denetleyicisi, bulut yük dengeleyicisine bir ön talepte bulunur ve ancak bundan sonra medya akışını gönderir.
Sonuç
Makale, Z-Wave protokolü aracılığıyla bilgi alabilen, işleyebilen ve ekipmanı kontrol edebilen, ONVIF protokolü aracılığıyla IP kameralarla etkileşime girebilen ve ayrıca veri ve veri alışverişi yapabilen Raspberry Pi 3 B+ mikrobilgisayarını temel alan bir akıllı ev denetleyicisinin özel bir uygulamasını inceledi. MQTT ve RTMP protokolleri aracılığıyla bulut hizmetiyle komutlar. JSON formatında sunulan mantıksal kurallar ve gerçeklerin karşılaştırılmasına dayalı olarak bir üretim mantığı motoru geliştirilmiştir.
Akıllı ev denetleyicisi şu anda Moskova ve Moskova bölgesindeki çeşitli tesislerde deneme işletiminden geçiyor.
Denetleyicinin bir sonraki sürümü diğer cihaz türlerini (RF, Bluetooth, WiFi, kablolu) bağlamayı planlıyor. Kullanıcıların rahatlığı için sensörleri ve IP kameraları bağlama prosedürü mobil uygulamaya aktarılacaktır. Sunucu işlem kodunu optimize etmek ve yazılımı işletim sistemine taşımak için de fikirler vardır. . Bu, ayrı bir denetleyiciden tasarruf etmenize ve akıllı evin işlevselliğini normal bir ev yönlendiricisine aktarmanıza olanak tanır.
Kaynak: habr.com
