OpenHAB Başlangıç ​​Kılavuzu Bölüm 2: ZWave, MQTT, Kurallar ve Grafik

OpenHAB Başlangıç ​​Kılavuzu Bölüm 2: ZWave, MQTT, Kurallar ve Grafik

Ücretsiz her zaman 'ücretli kadar iyi değil' anlamına gelmez ve OpenHAB bir istisna değildir. Açık kaynaklı ev otomasyon yazılımı, piyasadaki diğer ev otomasyon sistemlerinin yeteneklerinin çok üzerindedir – ancak kurulumu kolay değildir. Aslında, düpedüz sinir bozucu olabilir.





Kılavuzun 1. bölümünde, size yol gösterdim OpenHAB'ı bir Raspberry Pi'ye kurmak , OpenHAB'ın temel kavramlarını tanıttı ve ilk öğelerinizi sisteme nasıl ekleyeceğinizi gösterdi. Bugün daha ileri gideceğiz:





  • ZWave cihazları ekleme
  • Harmony Ultimate denetleyicisi ekleme
  • kuralları tanıtmak
  • MQTT'nin tanıtılması ve bir Arduino'daki sensörlerle Pi'nize bir MQTT komisyoncusu kurulması
  • Verileri kaydetme ve grafikleme

Z-Dalgasına Giriş

Z-Wave yıllardır baskın ev otomasyon protokolü olmuştur: güvenilirdir, kapsamlı bir şekilde geliştirilmiştir ve diğer akıllı ev ürünlerinden çok daha uzun bir aralıkta çalışır. Çok çeşitli görevleri yerine getiren yüzlerce Z-Wave sensörü mevcuttur. OpenHAB Yapabilmek Z-Wave ile çalışır, ancak kurulumu zordur ve güvenilirlik garanti edilmez.





Özellikle OpenHAB ile kullanım için Z-Wave sensörleriyle dolu bir ev satın almayı düşünüyorsanız, yeniden düşünmenizi öneririm. Sizin için harika sonuç verebilir veya küçük ama kalıcı sorunlarla boğuşabilir. En azından, birkaçını deneme şansınız olana kadar sensörlerle dolu bir ev satın almayın. Z-Wave'i seçmenin tek nedeni, OpenHAB'a %100 karar vermemeniz ve gelecekte seçeneklerinizi açık bırakmak istemenizdir: Örneğin Z-Wave, Samsung SmartThings hub'ı ve Z-Wave'e özel hub'larla çalışır. Homeseer gibi ve bir dizi başka yazılım seçeneği gibi domoticz .

OpenHAB bir Z-Wave bağlaması içermesine rağmen, yine de önce Z-Wave ağını yapılandırın , OpenHAB veri için sorgulamaya başlamadan önce. Bir Rasberry kontrol kartınız varsa, ağı yapılandırmak için sağlanan bazı yazılımlara sahipsiniz, bu yüzden burada bunu ele almayacağız. Bir Aeotec USB Z-Stick kontrol cihazı veya benzerini satın aldıysanız, muhtemelen herhangi bir yazılımınız yoktur, bu yüzden okumaya devam edin.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus Ağ Geçidi Oluşturmak için USB (Sıradan Beyaz) ŞİMDİ AMAZON'DAN SATIN AL

Zaten bir Z-Wave ağ kurulumunuz varsa , kontrol cihazınızı Pi'ye bağlayabilir ve bağlamayı ve öğeleri yapılandırmaya başlayabilirsiniz. Bu, Z-Wave'e ilk girişinizse, biraz daha karmaşıktır.

İlk olarak, donanım tarafında: her denetleyicinin cihazlarla kendi eşleştirme yolu vardır (teknik olarak, bir düğüm kimliğinin atandığı 'dahil etme modu' olarak bilinir). Aotec Z-Stick durumunda bu, USB bağlantı noktasından çıkarılması ve dahil etme moduna geçirmek için düğmeye bir kez basılması anlamına gelir. Ardından, eşleştirdiğiniz cihazın yanına götürün ve üzerindeki dahil etme düğmesine de basın. (bu da değişecektir: Everspring soketim, düğmeye hızlı bir şekilde arka arkaya 3 kez basılmasını gerektiriyor, bu nedenle buradaki ders, cihazınızın kılavuzunu okumaktır) .





Z-Stick, başarıyı belirtmek için kısa bir süre yanıp söner. Bu, yeni bir bağlantı noktası atandığından, onu Pi'ye geri takarken sorunlar sunar. Dinamik olarak farklı bir bağlantı noktasına atandığını fark ederseniz, standart bağlantı noktasına sıfırlanması için Pi'nizi yeniden başlatın. Daha da iyisi: Önce tüm donanım eşleştirmelerini yapana kadar onu Pi'ye takmayın.

HABmin ve Z-Wave Bağlamalarını Kurma

OpenHAB aslında Z-Wave için bir yapılandırma yardımcı programı olmadığından, bunu yapan başka bir web yönetim aracı yükleyeceğiz – HABmin adında bir şey. Şuraya gidin HABmin Github deposu güncel sürümü indirin. Fermuarını açtıktan sonra, 2'yi bulacaksınız. .kavanoz addons dizinindeki dosyalar – bunlar OpenHAB Home paylaşımınızdaki ilgili addons dizinine yerleştirilmelidir. (Aotec gen5 Z-Stick'i de kullanıyorsanız, Z-Wave bağlamanın en az 1.8 sürümüne sahip olduğunuzdan emin olun) .





Ardından, webapps dizininde yeni bir klasör oluşturun ve buna 'habmin' adını verin (küçük harf önemlidir). İndirilen dosyaların geri kalanını oraya kopyalayın.

Not: Ayrıca bir HABmin 2 aktif geliştirme altında. Kurulum hemen hemen aynıdır, ancak bir ek .jar eklentisi vardır. Hangisini tercih ettiğinizi görmek için ikisini de denemeye değer olabilir.

Henüz yapmadıysanız, kontrol cihazınızı Pi'nize takın. Doğru bağlantı noktasını bulmak için aşağıdakini yazın.

ls /dev/tty*

Adında USB olan herhangi bir şey arıyorsunuz veya benim özel durumumda Z-stick kendini şu şekilde sundu: / dev / ttyACM0 (modem). Komutu prize takmadan önce ve sonra yapmak daha kolay olabilir, böylece emin değilseniz nelerin değiştiğini görebilirsiniz.

OpenHAB yapılandırma dosyasını açın ve Z-Wave'deki bölümü değiştirin, her iki satırın yorumunu kaldırın ve gerçek cihaz adresinizi koyun. Benim için son bir adım, OpenHAB kullanıcısının modeme erişmesine izin vermekti.

sudo usermod -a -G çevirmeli açık alan

Şimdi, her şeyi harekete geçirmek için OpenHAB'ı yeniden başlatın

sudo hizmeti openhab yeniden başlatma

Umarım, hata ayıklama günlüğünü kontrol ediyorsanız, bunun gibi bir şey görürsünüz. Tebrikler, artık Z-Wave'den bahsediyorsunuz. Ayrıca, çeşitli Z-Wave düğümlerinden gelen mesajlarla dolu hata ayıklama günlüğünü de bulabilirsiniz. Ne bulduğunu görmek için HABMIN'i kontrol ederek başlayalım: http://openhab.local:8080/habmin/index.html (openhab.local'ı Raspberry Pi ana bilgisayar adınız veya IP adresinizle değiştirin).

HABMIN'de görülecek çok şey var ama biz sadece Konfigürasyon -> Bağlantılar -> Z-Wave -> Cihazlar sekmesi, aşağıda görebileceğiniz gibi. Referans kolaylığı sağlamak için konumu ve ad etiketini düzenlemek için düğümü genişletin.

Z-Wave Öğelerini Yapılandırma

Her Z-Wave cihazının OpenHAB için özel bir konfigürasyonu olacaktır. Neyse ki, çoğu cihaz zaten keşfedildi ve sizinki için zaten örnekler olacak. Tanınmayan özel aygıtları yapılandırmak bu kılavuzun kapsamı dışındadır, ancak şimdilik desteklendiğini varsayalım.

İlk olarak, Düğüm 3'te temel bir Everspring AN158 güç anahtarına ve ölçüm cihazına sahibim. Bunu şu şekilde uyarladım:

Nem Alıcıyı Değiştir_Switch 'Nem Alıcı' {zwave='3:command=switch_binary'}

Number Dehumidifier_Watts 'Nem alma cihazı güç tüketimi [%.1f W]' { zwave='3:command=meter' }

Kusursuz.

Sırada bir Aeotec Gen5 Çoklu Sensör var.

Aeon Labs Aeotec Z-Wave Gen5 Çoklu Sensör (Z-Wave Plus) ŞİMDİ AMAZON'DAN SATIN AL

Bunun için şu adreste örnek bir yapılandırma buldum: iwasdot.com ve çoklu sensörüm Düğüm 2'de.

Number Hallway_Sıcaklık 'Koridor Sıcaklığı [%.1f °C]' (Koridor, Sıcaklık) {zwave='2:0:command=sensor_multilevel,sensor_type=1,sensor_scale=0'}

Number Hallway_Humidity 'Koridor Nemi [%.0f %%]' (Koridor, Nem) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Number Hallway_Luminance 'Koridor Parlaklığı [%.0f Lux]' (Koridor) {zwave='2:0:command=sensor_multilevel,sensor_type=3'}

İletişim Hallway_Motion 'Koridor Hareketi [%s]' (Koridor, Hareket) {zwave='2:0:command=sensor_binary,respond_to_basic=true'}

Number sensor_1_battery 'Pil [%s %%]' (Hareket) {zwave='2:0:command=battery'}

Bunun formatı size garip geliyorsa, lütfen ilkine geri dönün. Yeni başlayanların rehberi , özellikle öğelerin nasıl eklendiğini açıkladığım Hue bağlama bölümü. Muhtemelen bunun gibi sadece kopyala yapıştır örneklerini kopyalamanız gerekecek, ancak yeni bir cihazınız olması durumunda, ciltleme dokümantasyonu tüm detayları detaylandırıyor. komutlar .

Logitech Uyum Bağlama

Kurallara geçmeden önce, Harmony bağlamasıyla çalışma hakkında kısa bir not eklemek istedim. Ev medya merkezi deneyimini basitleştirmek için Harmony serisi nihai uzaktan kumandaların büyük bir hayranıyım, ancak genellikle akıllı ev içinde ayrı bir sistem olarak duruyorlar. OpenHAB ile Logitech Harmony etkinlikleri ve tam cihaz kontrolü artık merkezi sisteminizin bir parçası olabilir ve hatta otomasyon kurallarına dahil edilebilir.

'Uyum' için arama yapmak için apt-cache kullanarak bulduğunuz üç bağlama dosyasını yükleyerek başlayın:

unutma yemek işiniz bittiğinde tekrar bağlama dizini:

sudo apt-get install openhab-addon-action-harmonyhub

sudo apt-get install openhab-addon-binding-harmonyhub

sudo apt-get install openhab-addon-io-harmonyhub

sudo chown -hR openhab:openhab /usr/share/openhab

Bağlamayı yapılandırmak için openhab.cfg dosyasını açın ve aşağıdaki gibi yeni bir bölüm ekleyin:

########## HARMONY UZAKTAN KUMANDALAR ##########

harmonhub: ana bilgisayar = 192.168.1.181 veya senin ipin

harmonihub:kullanıcı adı= uyum-e-posta-girişiniz

harmonhub:şifre= şifreniz

IP adresi, Harmony hub'ınızın adresidir. Bunu bulmak için bir ağ tarayıcısı kullanın. Ayrıca standart Harmony yapılandırma yardımcı programını başlattığınızda girdiğiniz oturum açma bilgilerinizi de girmeniz gerekecektir. Bu kadar. Hue'nuzu yeniden başlattıktan sonra, hata ayıklama günlüğünüzde bağlamadan ani bir çıktı patlaması olması gerekir.

Bu, gönderilebilecek tüm etkinliklerinizin, cihazlarınızın ve komutlarınızın JSON biçimli bir listesidir. Gelecekte başvurmak üzere bunu kopyalamak iyi bir fikirdir. çevrimiçi bir JSON biçimlendiriciye yapıştırarak daraltılabilir düğümlerle okumayı daha da kolaylaştırabilirsiniz bunun gibi .

Varsayılan olan standart PowerOff etkinliğinin yanı sıra, burada kendi tanımlı etkinliklerinizi ada göre listelenmiş olarak bulacaksınız. Şimdi etkinlikleri başlatmak için basit bir tek düğme kontrolü oluşturalım. İlk olarak, item dosyanıza aşağıdaki satırı ekleyin. İsterseniz grubu ve simgeyi değiştirin.

/* Uyum Merkezi */

String Harmony_Activity 'Uyum [%s]' (Living_Room) {harmonyhub='*[currentActivity]' }

Bu bir iki yönlü String bağlama hem mevcut aktiviteyi getirebilen hem de mevcut aktiviteye başka bir şey olmasını emredebilen . Artık site haritası dosyasında bunun için bir düğme oluşturabiliriz.

Öğeyi değiştir=Harmony_Activity eşlemeleri=[PowerOff='Kapalı',Egzersiz='Egzersiz',13858434='TV',Karaoke='Karaoke']

android'de indirilenleri nerede bulabilirim

Köşeli parantez içinde etiketle birlikte her etkinliği göreceksiniz. Genellikle, uzaktan kumandanızda adlandırdığınız gibi etkinliklere doğrudan başvurabilirsiniz, ancak bulduğum istisna, etkinlik adında 'TV İzle' gibi boşluk olan herhangi bir şeydi. Bu durumda, etkinlik kimliğini kullanmanız gerekir. Yine, kimliği JSON hata ayıklama çıktısında bulabilirsiniz. Arayüzünüzü kaydedin ve yenileyin, buna benzer bir şey görmelisiniz:

Daha sonra göreceğimiz gibi, kurallarınızdaki etkinliklere de başvurabilirsiniz. hakkında daha fazla bilgi için wiki sayfasını okuyun. armoni bağlama .

Kurallara Genel Bir Giriş

Akıllı ev hub'larının çoğu, evdeki sensör verilerine ve olaylara otomatik olarak tepki verebilmeniz için bir tür kural oluşturma içerir. Aslında, gerçekten akıllı bir evin, mobil uygulamalarla etkileşim kurmak için zaman harcamanız gereken bir ev olmadığını iddia ediyorum - bu, son kullanıcı için görünmez ve tamamen otomatik bir evdir. Bu amaçla, OpenHAB ayrıca programlayabileceğiniz, çoğu akıllı ev hub'ının veya IFTTT tariflerinin karmaşıklığının çok ötesine geçen güçlü bir kural betik dili içerir.

Programlama kuralları kulağa olduğundan daha kötü geliyor. Varlık sensörüne bağlı olarak ışığı açan veya kapatan bir çift kuralla başlayalım:

'James oradayken ofis ışığı yanar' kuralı

ne zaman

JamesInOffice öğesi KAPALI iken AÇIK olarak değiştirildi

sonra

sendCommand(Office_Hue,ON)

son

'James ayrıldığında ofis ışığı söner' kuralı

ne zaman

JamesInOffice öğesi AÇIK iken KAPALI olarak değiştirildi

sonra

sendCommand(Office_Hue,KAPALI)

son

İlk olarak, kuralı adlandırıyoruz - açıklayıcı olun, böylece hangi olayın tetiklendiğini bilirsiniz. Ardından, basit kuralımızı söyleyerek tanımlarız. x doğru olduğunda, y yapın . End, söz konusu kuralın kapanışını ifade eder. Kurallarda kullanabileceğiniz bir dizi özel kelime var, ancak şimdilik iki basit sözdizimi ile uğraşıyoruz - Kalem , bir şeyin durumunu sorgulamanıza izin verir; ve gönderKomut , bu tam olarak düşündüğünüzü yapar. Sana bunun kolay olduğunu söylemiştim.

Bir çift kural kullanmak muhtemelen gereksizdir, ancak mantığım daha karmaşık hale geldikçe, alana girip girmediğime göre onları ayırmam faydalı olacaktır - ve bir yere bir ışık sensörü eklemek iyi bir fikir olabilir denklemin içine, böylece gereksiz yere ışıkları açmayız.

Planlanmış bir kural oluşturmak için başka bir örneğe bakalım.

'Her sabah egzersiz yapın' kuralı

ne zaman

Zaman cron '0 0 8 1/1 * ? *'

sonra

uyumStartActivity('Egzersiz')

son

Yine kuralı, ne zaman tetiklenmesi gerektiğini ve yapılması gerekenleri belirtiriz. Ama bu durumda, bir Zaman kalıbı tanımlıyoruz. Alıntılarda gördüğünüz komik kod, Quartz Scheduler için bir CRON ifadesidir (format, normal bir CRONtab'dan biraz farklıdır). kullandım cronmaker.com ifadeyi oluşturmaya yardımcı olur, ancak ayrıntılı bir açıklama ve daha fazla örnek için [Artık Mevcut Değil] biçim kılavuzunu da okuyabilirsiniz.

CronMaker.com, doğru biçimlendirilmiş Cron ifadesini oluşturmak için kullanılır

Kurallarım basitçe 'haftanın her günü sabah 8'de Harmony Ultimate sistemime Egzersiz etkinliğini başlatmasını söyle' diyor, bu da TV'yi, Xbox'ı, amplifikatörü etkinleştiriyor ve bir dakika sonra başlatmak için A düğmesine basıyor sürücüdeki disk.

Ne yazık ki, OpenHAB henüz egzersizi benim için yapamıyor.

Size göstermek istediğim bir kural daha, evimdeki nem seviyelerini yönetmek için kullandığım bir kural. Tek bir nem alma cihazım var ve ihtiyaç duyduğum her yerde hareket etmem gerekiyor, bu yüzden tüm nem sensörlerime bakmaya, hangisinin en yüksek olduğunu bulmaya ve bunu bir değişkende saklamaya karar verdim. Şu anda her dakika tetikleniyor, ancak bu kolayca düşürülebilir. Önce bir göz atın:

org.openhab.core.library.types'yi içe aktarın.*

org.openhab.model.script.actions'ı içe aktarın.*

java.lang.String'i içe aktar

kural 'Nem Monitörü'

Zaman cron'u '0 * * * * ?'

sonra

var prevHigh = 0

var highHum = ''

Nem?.members.forHer[hum|

logDebug('humidity.rules', hum.name);

if(hum.state as DecimalType > prevHigh){

prevHigh = hum.durum

highHum = hum.name + ': ' + hum.state + '%'

}

android telefondan silinen fotoğrafları kurtar

]

logDebug('humidity.rules', highHum);

postUpdate(Dehumidifier_Needed,highHum);

son

Kuralın özü, Nem?.members.foreach hat. Nem, nem sensörlerim için bir grup adıdır; .üyeler o gruptaki tüm öğeleri alır; her biri için üzerlerinde yinelenir (muhtemelen aşina olmadığınız ilginç bir köşeli parantez biçimiyle). Kuralların sözdizimi Xtend'in bir türevidir, böylece aşağıdakileri okuyabilirsiniz. Xtend belgeleri uyarlayacak bir örnek bulamazsanız.

Muhtemelen buna ihtiyacınız olmayacak - orada yüzlerce örnek kural var:

OpenHAB ve Nesnelerin İnterneti için MQTT

MQTT, makineler arası iletişim için hafif bir mesajlaşma sistemidir - Arduino'larınız veya Raspberry Pis'inizin birbirleriyle konuşması için bir tür Twitter (elbette bunlardan çok daha fazlasıyla çalışır). Hızla popülerlik kazanıyor ve sensör verilerini hub'ınıza geri iletmek veya uzaktan komutlar almak için güvenilir bir yola ihtiyaç duyan genellikle düşük kaynaklı mikro denetleyiciler olan Nesnelerin İnterneti cihazlarıyla kendine bir yuva buluyor. Onunla yapacağımız şey tam olarak bu.

Ama neden tekerleği yeniden icat ettin?

MQ Telemetry Transport, 1999 yılında petrol boru hatlarını yavaş uydu bağlantıları aracılığıyla bağlamak için icat edildi, özellikle pil kullanımını ve bant genişliğini en aza indirirken aynı zamanda güvenilir veri iletimi sağlamak için tasarlandı. Yıllar boyunca tasarım ilkeleri aynı kaldı, ancak kullanım durumu özel gömülü sistemlerden genel Nesnelerin İnterneti cihazlarına kaydı. 2010 yılında protokol, herkesin kullanmasına ve uygulamasına açık, telifsiz olarak yayınlandı. Bedava severiz.

Neden başka bir protokolle uğraştığımızı bile merak ediyor olabilirsiniz - sonuçta zaten HTTP'ye sahibiz - bu, her türlü web bağlantılı sistem arasında hızlı mesajlar göndermek için kullanılabilir (OpenHAB ve IFTTT gibi, özellikle yeni yapımcı kanalıyla). ). Ve haklı olurdun. Bununla birlikte, bir HTTP sunucusunun işlem yükü oldukça büyüktür - o kadar ki, Arduino gibi yerleşik bir mikro denetleyicide kolayca çalıştıramazsınız (en azından yapabilirsiniz, ancak başka hiçbir şey için fazla belleğiniz kalmaz. ). MQTT ise hafiftir, bu nedenle ağınızın etrafına mesaj göndermek boruları tıkamaz ve küçük Arduino bellek alanımıza kolayca sığabilir.

MQTT Nasıl Çalışır?

MQTT, hem bir sunucu ('aracı' olarak adlandırılır) hem de bir veya daha fazla istemci gerektirir. Sunucu, mesajları alan ve ilgilenen müşterilere yeniden yayınlayan bir aracı görevi görür.

ile devam edelim Makineler için Twitter benzetme ama. Twitter kullanıcılarının kendi anlamsız 140 karakterlerini tweetleyebilmeleri ve kullanıcıların küratörlüğünde bir gönderi akışını görmek için diğer kullanıcıları 'takip edebilmeleri' gibi, MQTT istemcileri de oradan tüm mesajları almak ve kendi mesajlarını yayınlamak için belirli bir kanala abone olabilir. o kanala. Bu yayınlama ve abone olma kalıbına şu ad verilir: pub / alt geleneğin aksine müşteri sunucusu HTTP'nin modeli.

HTTP, iletişim kurduğunuz makineye ulaşmanızı, Merhaba demenizi ve ardından veri alırken veya koyarken birbirinizi sürekli olarak onaylamanızı gerektirir. pub/sub ile, yayınlamayı yapan istemcinin hangi istemcilerin abone olduğunu bilmesi gerekmez: yalnızca mesajları pompalar ve aracı, bunları abone olunan istemcilere yeniden dağıtır. Herhangi bir müşteri, tıpkı bir Twitter kullanıcısı gibi konuları hem yayınlayabilir hem de bunlara abone olabilir.

Twitter'ın aksine, MQTT 140 karakterle sınırlı değildir. Veriden bağımsızdır, böylece küçük sayılar veya büyük metin blokları, JSON biçimli datagramlar ve hatta görüntüler ve ikili dosyalar gönderebilirsiniz.

MQTT her şey için HTTP'den daha iyi değil - ama NS Evin her yerinde sürekli rapor veren çok sayıda sensör olacaksa daha uygun.

OpenHAB'ın MQTT aracınız olarak hareket etmeyeceğini bilmek de önemlidir – bu konuya daha sonra değineceğiz. Bununla birlikte, OpenHAB bir istemci görevi görecektir: hem OpenHAB aktivite günlüğünüzü yayınlayabilir hem de belirli kanalları cihazlara bağlayabilir, böylece örneğin belirli bir kanalda MQTT mesajları tarafından kontrol edilen bir anahtarınız olabilir. Bu, sensörlerle dolu bir ev yaratmak için idealdir.

Pi'nize Mosquitto yükleyin

OpenHAB, bir konuya abone olabilmeniz ve ayrıca mesaj yayınlayabilmeniz için bir MQTT istemcisi içermesine rağmen, sunucu görevi görmez. Bunun için ya web tabanlı bir MQTT aracısı (ücretli veya ücretsiz) kullanmanız veya ücretsiz yazılımı Pi'nize yüklemeniz gerekir. Hepsini şirket içinde tutmak istiyorum, bu yüzden Pi'ye Mosquitto kurdum.

Ne yazık ki, her zamanki apt-get aracılığıyla sunulan sürüm tamamen güncel değil. Bunun yerine en son kaynakları ekleyelim.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key mosquitto-repo.gpg.key ekle

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get kurulum sivrisinek

Bir MQTT sunucusunun yerel ağda çalışır durumda olması için tek yapmamız gereken bu. Aracınız varsayılan olarak 1883 numaralı bağlantı noktasında çalışır.

MQTT sunucunuzun, platformlar arası ücretsiz MQTT.fx'i kullanarak çalışıp çalışmadığını kontrol edin. Yeni bir profil oluşturmak için ayarlar simgesine tıklayın ve Raspberry Pi'nizin IP adresini veya adını girin. Kaydet ve bağlan'a basın. Sağ üstteki küçük trafik ışığı yeşile dönerse, gitmeye hazırsınız.

Hızlı bir test için 'abone ol' sekmesine tıklayın ve yazın inKonu / metin kutusuna girin, ardından Abone ol buton. Artık inTopic adlı konuda mesaj almak için abone oldunuz, ancak 0 mesaj gösterecek. Yayınla sekmesine dönün, küçük kutuya inTopic yazın ve aşağıdaki büyük metin kutusuna kısa bir mesaj yazın. Vurmak Yayınla birkaç kez ve abone sekmesine tekrar bakın. Bu konuda birkaç mesajın göründüğünü görmelisiniz.

Ağımıza bazı gerçek sensörler eklemeden önce, MQTT ağını yapılandırmamızı ve filtrelememizi sağlayan konu seviyeleri hakkında bilgi edinmemiz gerekiyor. Konu adları büyük/küçük harf duyarlıdır, $ ile başlamamalı veya boşluk veya ASCII olmayan karakterler içermemelidir - değişken adları için standart programlama uygulamaları, gerçekten.

/ ayırıcısı, hiyerarşik olan bir konu seviyesini belirtir, örneğin aşağıdakilerin tümü geçerli konu seviyeleridir.

inTopic / smallSubdivision / hattaSmallerSubdivision

myHome/livingRoom/sıcaklık

myHome/livingRoom/nem

myHome/mutfak/sıcaklık

myHome/mutfak/nem

Bu ağaç yapısının sensörler ve cihazlarla dolu akıllı bir ev için ne kadar mükemmel olduğunu şimdiden görmüş olmalısınız. Tek bir odada birden fazla sensörle kullanım için en iyi uygulama, aynı kanala birden fazla sensör türü yayınlamaya çalışmak yerine, her sensör değişkenini kendi konu düzeyinde yayınlamaktır - daha fazla spesifikliğe (yukarıdaki örneklerde olduğu gibi) dallara ayrılarak - .

Müşteriler daha sonra herhangi bir sayıda bireysel konu düzeyi yayınlayabilir veya bunlara abone olabilir veya ağacın daha yukarılarından filtrelemek için bazı özel joker karakterler kullanabilir.

+ joker karakter, herhangi bir konu seviyesinin yerine geçer. Örneğin:

myHome/+/sıcaklık

müşteriyi her ikisine de abone olur

myHome/livingRoom/sıcaklık

myHome/mutfak/sıcaklık

...ama nem seviyeleri değil.

#, çok düzeyli bir joker karakterdir, bu nedenle, LivingRoom sensör dizisinden aşağıdakileri kullanarak her şeyi alabilirsiniz:

myHome/livingRoom/#

Teknik olarak, aynı zamanda, komisyoncudan geçen her şeyi kesinlikle elde ettiğiniz kök seviyesine # abone olabilirsiniz, ancak bu, yüzünüze bir yangın hortumu sokmak gibi olabilir: biraz bunaltıcı. HiveMQ'dan genel MQTT aracısına bağlanmayı ve #'a abone olmayı deneyin. Müvekkilim çökmeden birkaç saniye önce yaklaşık 300 mesaj aldım.

MQTT Başlangıç ​​İpucu: ' /benim evim/' ' için farklı bir konudur benim evim/' – başlangıçta bir eğik çizgi eklemek, teknik olarak geçerli olsa da kafa karıştırıcı olabileceğinden önerilmeyen boş bir konu düzeyi oluşturur.

Artık teoriyi bildiğimize göre, hadi bir Arduino, Ethernet Kalkanı ve bir DHT11 sıcaklık ve nem sensörü ile başlayalım - muhtemelen başlangıç ​​kitinizde bir tane var, ancak değilse, hareket için çevre sensörünü değiştirin. sensör (veya hatta bir düğme).

Ethernet Bağlantılı Bir Arduino'dan MQTT Yayınlama

Dahili Wi-Fi veya Ethernet'e sahip hibrit Arduino uyumlu bir cihazınız varsa, bu da çalışmalıdır. Sonunda, her odada bir ağ bağlantısı kullanmak zorunda kaldığımız için daha iyi/daha ucuz bir iletişim yolu isteyeceğiz, ancak bu temel bilgileri öğrenmeye yarar.

İndirerek başlayın Github'dan pubsubclient kitaplığı . Eğer 'ZIP Olarak İndir' butonunu kullandıysanız, yapı biraz yanlıştır. Sıkıştırılmış dosyayı açın, klasörü yalnızca pubsubclient , ardından iki dosyayı kaynak klasörünü seçin ve bunları bir seviye yukarı, indirilen klasörün kök dizinine taşıyın. Ardından tüm klasörü kendinize taşıyın. Arduino/kütüphaneler dizin.

İşte uyarlayabileceğiniz örnek kodum : DHT11 sinyal çıkışı pin 7'dedir. Pi'nizinki için sunucu IP'sini aşağıdaki satırda değiştirin:

client.setServer('192.168.1.99', 1883);

Ne yazık ki, dostu adını kullanamıyoruz (Benim durumumda OpenHAB.local) Arduino'daki TCP/IP yığını çok basit olduğundan ve Bonjour adlandırma kodunu eklemek, boşa harcamak istemediğimiz çok fazla bellek olacaktır. Sensör verilerinin yayınlandığı konuları değiştirmek için şu satırlara ilerleyin:

karakter arabelleği[10];

dtostrf(t,0, 0, arabellek);

client.publish('openhab/himitsu/temperature',buffer);

dtostrf(h,0, 0, arabellek);

client.publish('openhab/himitsu/nem',tampon);

Kod ayrıca bir komut kanalına aboneliği de içerir. Aşağıdaki satırı bulun ve ayarlayın:

client.subscribe('openhab/himitsu/command');

Oradaki kodu inceleyin ve örneğin belirli kanallara komutlar göndererek bir LED'i veya röleyi kolayca kontrol edebileceğinizi göreceksiniz. Örnek kodda, sadece komutun alındığını onaylayan bir mesaj gönderir.

Kodunuzu yükleyin, Arduino'nuzu ağa bağlayın ve MQTT.fx kullanarak ikisinden birine abone olun. # veya openhab / himitsu / # (veya oda adını ne olarak değiştirdiyseniz, ancak sonuna # eklemeyi unutmayın). Çok yakında mesajların geldiğini göreceksiniz; ve komut konusuna AÇIK veya KAPALI gönderirseniz, teşekkürlerin de geri geldiğini göreceksiniz.

OpenHAB için MQTT Bağlama

Denklemin son adımı, bunu OpenHAB'a bağlamaktır. Bunun için elbette bir bağlamaya ihtiyacımız var.

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab:openhab /usr/share/openhab

Ve bağlamayı etkinleştirmek için yapılandırma dosyasını düzenleyin.

mqtt:broker.url=tcp://localhost:1883

mqtt:broker.clientId=openhab

OpenHAB'ı yeniden başlatın

sudo hizmeti openhab yeniden başlatma

Sonra bir veya iki öğe ekleyelim:

/* MQTT Sensörleri */

Sayı Himitsu_Temp 'Himitsu Sıcaklık [%.1f °C]' (Himitsu,Sıcaklık) {mqtt='<[broker:openhab/himitsu/temperature:state:default]'}

Sayı Himitsu_Humidity'Himitsu Nem [% .1f %%]' (Himitsu, Nem) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Şimdiye kadar formatı anlamalısınız; bir oluyor Numara öğesi belirli bir konuda MQTT bağlamasından. Bu basit bir örnek, nerede olduğu wiki sayfasına başvurmak isteyebilirsiniz. çok daha karmaşık hale gelebilir .

Tebrikler, artık Arduino tabanlı ucuz bir sensör dizisinin temeline sahipsiniz. Bunu gelecekte tekrar gözden geçireceğiz ve Arduino'ları tamamen ayrı RF ağlarına yerleştireceğiz. Ben de aynı sürümü oluşturdum Wizwiki 7500 panoları için eğer bunlardan birine sahipsen.

Kalıcılık ve Grafik Verileri

Şimdiye kadar muhtemelen Z-Wave veya MQTT çalıştıran özel Arduinos'tan bir grup sensör kurdunuz - böylece bu sensörlerin mevcut durumunu istediğiniz zaman görüntüleyebilirsiniz ve ayrıca kurallardaki değerlerine tepki vermelisiniz. Ancak sensör değerleriyle ilgili ilginç olan şey, genellikle zamanla değişmeleridir: işte burada ısrar ve grafik oluşturma devreye girer. kalıcılık OpenHAB'da zaman içinde verilerin kaydedilmesi anlamına gelir. Devam edelim ve RRD4J'yi (Java için Yuvarlak Robin Veritabanı) kuralım, çünkü veriler bir kez tekrarlanarak kaydedilir - eski veriler veritabanının boyutunu sıkıştırmak için atılır.

Aşağıdaki komutlarla rrd4j paketlerini kurun.

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

Ardından adlı yeni bir dosya oluşturun. rrd4j.kalıcı içinde konfigürasyonlar/kalıcılık dosya. Aşağıdakileri yapıştırın:

stratejiler {

her Dakika : '0 * * * * ?'

her Saat : '0 0 * * * ?'

hergün : '0 0 0 * * ?'

varsayılan = EveryChange

}

Öğeler {

// değer güncellendiğinde her şeyi devam ettir, sadece bir varsayılan ve başlangıçta onları veritabanından geri yükle

* : strateji = EveryChange, restoreOnStartup

// sonra Sıcaklık grubundaki herhangi bir şey için her Saat ve Nem için her dakika için özel stratejiler tanımlarız

hp dizüstü bilgisayarda baskı ekranı düğmesi olmadan ekran görüntüsü nasıl alınır

Sıcaklık* : strateji = her Saat

Nem* : strateji = her Dakika

// alternatif olarak buraya belirli öğeleri ekleyebilirsiniz, örneğin

//Yatak Odası_Nem,JamesInOffice : strateji = herMinute

}

Bu dosyanın ilk bölümünde, sadece bir CRON ifadesine bir isim vermek anlamına gelen stratejileri tanımlıyoruz. Bu, My.OpenHAB ile zaten yaptığımızla aynı, ancak bu sefer hergün, her saat ve her dakika kullanabileceğimiz bazı yeni stratejiler oluşturuyoruz. Henüz hepsini kullanmadım ama ileride olabilirim.

Dosyanın ikinci yarısında rr4dj'ye hangi veri değerlerinin kaydedileceğini söylüyoruz. Varsayılan olarak, her güncellemede her şeyi kaydedeceğiz, ancak belirli sensörler için zamana dayalı stratejiler de belirledim. Sıcaklıklar beni çok rahatsız etmiyor, bu yüzden bunu yalnızca her Saati kaydetmeye ayarladım, ancak nem benim için büyük bir endişe, bu yüzden her dakika nasıl değiştiğini görmek istiyorum. Belirli zamanlarda özellikle kaydetmek istediğiniz başka veriler varsa, bunları şimdi buraya ekleyin veya gerektiği gibi ayarlayın.

Not: Verilerin grafiğini de çıkarmak istiyorsanız, en az dakikada bir kaydetmeniz ZORUNLUDUR. Sensör verilerinizin bu kadar hızlı güncellenmesinin bir önemi yok, sadece rr4dj'ye dakikada bir kaydetmesini söylemeniz yeterli.

Bu tanımlandığında, değerlerin saklandığını söyleyen bazı hata ayıklama çıktılarını görmeye başlamalısınız.

Sırada, tüm bu verilerden bazı güzel grafikler yapalım. Gerçekten çok kolay. Tek bir sensörün grafiğini oluşturmak için site haritanıza aşağıdakileri ekleyin:

Grafik öğesi=Yatak Odası_Nem süresi=saat

Kelimenin tam anlamıyla ihtiyacınız olan tek şey bu. Dönem için geçerli değerler h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; bunların ne anlama geldiği açık olmalıdır. Belirtilmemişse, tam günlük veri için varsayılan olarak D'dir.

Birden çok öğe içeren bir grafik oluşturmak için, bunun yerine grup adının grafiğini oluşturmanız yeterlidir:

Grafik öğesi=Nem süresi=saat

Bu grafiği başka yerlerde de kullanabileceğinizi bilmek ilginizi çekebilir; aşağıdaki URL'yi kullanarak bir resim oluşturuyor: http://YOUROPENHHABURL:8080/chart?groups=Nem&period=h

nasıl Sizin OpenHAB Sistemi Geliyor mu?

Kılavuzun bu bölümü bu kadar, ancak bunun OpenHAB hakkında bizden duyacağınız son haber olacağını beklemeyin. Umarız bu ve başlangıç ​​kılavuzu size kendi eksiksiz OpenHAB sisteminizi geliştirmeniz için sağlam bir temel sağlamıştır - ancak bu, asla gerçekten tamamen bitmeyen bir süreçtir.

Neyse ki OpenHAB, basit kural karmaşıklığından en üst düzey ev otomasyonuna kadar birkaç cihazdan yüzlerce cihaza kadar ölçeklenebilir – peki sisteminiz nasıl gidiyor? Hangi cihazları seçtiniz? Üstesinden geleceğiniz bir sonraki büyük proje nedir?

Yorumlarda konuşalım – ve lütfen, bu kılavuzu faydalı bulduysanız, arkadaşlarınıza kendi OpenHAB sistemlerini nasıl kurabileceklerini anlatmak için bu paylaşım düğmelerini tıklayın.

Önerdiğimiz ve tartıştığımız öğeleri beğeneceğinizi umuyoruz! MUO'nun bağlı kuruluş ve sponsorlu ortaklıkları vardır, bu nedenle bazı satın alımlarınızdan elde edilen gelirden pay alırız. Bu, ödediğiniz fiyatı etkilemez ve en iyi ürün önerilerini sunmamıza yardımcı olur.

Paylaş Paylaş Cıvıldamak E-posta Konuşmayı Canlandırmak İçin Yeni Başlayanlar Kılavuzu

Konuşmayı canlandırmak zor olabilir. Projenize diyalog eklemeye hazırsanız, süreci sizin için özetleyeceğiz.

Sonrakini Oku
İlgili konular
  • kendin yap
  • Akıllı ev
  • Arduino
  • Ev otomasyonu
  • uzun biçim
  • Uzun Biçimli Kılavuz
Yazar hakkında James Bruce(707 Makale Yayınlandı)

James, Yapay Zeka alanında lisans derecesine sahiptir ve CompTIA A+ ve Network+ sertifikalıdır. Donanım İncelemeleri Editörü olarak meşgul olmadığı zamanlarda LEGO, VR ve masa oyunlarından hoşlanır. MakeUseOf'a katılmadan önce aydınlatma teknisyeni, İngilizce öğretmeni ve veri merkezi mühendisiydi.

James Bruce'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın