İlan

Ücretsiz her zaman “ödenen kadar iyi değil” anlamına gelmez ve OpenHAB da bir istisna değildir. Açık kaynaklı ev otomasyon yazılımı piyasadaki diğer ev otomasyon sistemlerinin yeteneklerini fazlasıyla aşıyor - ancak kurulumu kolay değil. Aslında, düpedüz sinir bozucu olabilir.

Bu kılavuz ücretsiz PDF olarak indirilebilir. OpenHAB Başlangıç ​​Kılavuzu Bölüm 2'yi indirin: ZWave, MQTT, Kurallar ve Grafikler. Bunu kopyalayıp arkadaşlarınızla ve ailenizle paylaşın.

Rehberin 1. bölümünde, bir Raspberry Pi üzerine OpenHAB kurulumu Raspberry Pi'de OpenHAB Ev Otomasyonuna BaşlarkenOpenHAB, çeşitli donanımlarda çalışan ve agnostik protokolü, yani piyasadaki neredeyse tüm ev otomasyon donanımlarına bağlanabilir bugün. Daha fazla oku , 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
  • Kurallara giriş
  • MQTT ile tanışın ve Pi'nize bir Arduino'daki sensörler ile bir MQTT brokeri kurun
  • Verileri kaydetme ve grafikleme
instagram viewer

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 getirebileceğiniz yüzlerce Z-Wave sensörü vardır. openhab Yapabilmek Z-Wave ile çalışır, ancak kurulumu güçtür ve güvenilirlik garanti edilmez.

Özellikle OpenHAB ile kullanılmak üzere Z-Wave sensörleriyle dolu bir ev satın almayı düşünüyorsanız, tekrar düşünmenizi tavsiye ederim. Sizin için harika olabilir veya küçük ama kalıcı problemlerle boğulmuş olabilir. En azından birkaç deneme yapma şansınız olana kadar sensörlerle dolu bir ev almayın. Z-Wave'i seçmenin tek nedeni,% 100 OpenHAB'a yerleşmediyseniz ve seçeneklerinizi gelecekte açık bırakmak istiyorsanız: Z-Wave, örneğin Samsung SmartThings Ev Otomasyonu için Hangi Akıllı Hub Sizin İçin En İyisidir?Bir süredir insanlar bu fikri hile yapmaktan başka bir şey olarak düşünmedi, ancak son ürün sürümleri akıllı ev otomasyonunun vaatlerini yerine getirmeye başladığını gösterdi. Daha fazla oku Homeseer gibi Z-Wave'e özgü hub'ların yanı sıra, Domoticz.

OpenHAB bir Z-Dalgası bağlama içeriyor olsa da, önce Z-Wave ağını yapılandır, OpenHAB veri için sorgulamaya başlamadan önce. Rasberry denetleyici anakartınız varsa, ağı yapılandırmak için sağlanan bazı yazılımlarınız var, bu yüzden bunu burada ele almayacağız. Bir Aeotec USB Z-Stick kontrol cihazı veya benzeri bir şey satın aldıysanız, muhtemelen herhangi bir yazılımınız yoktur, bu yüzden okumaya devam edin.

Aeotec Z-Stick Gen5, ağ geçidi oluşturmak için Z-Wave Plus USBAeotec Z-Stick Gen5, ağ geçidi oluşturmak için Z-Wave Plus USB Amazon'da Şimdi Satın Al $44.95

Z-Wave ağ kurulumunuz zaten varsa, kontrol cihazınızı Pi'ye bağlayabilir ve ciltleme ve öğeleri yapılandırmaya başlayabilirsiniz. Eğer bu Z-Wave'e ilk baskınınızsa, biraz daha karmaşıktır.

Birincisi, donanım tarafında: her denetleyicinin aygıtlarla 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 yerleştirmek 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 bunun üzerindeki dahil etme düğmesine de basın. (bu da değişecektir: Everspring soketim, düğmenin arka arkaya 3 kez basmasını gerektirir, bu nedenle buradaki ders cihazınızın kılavuzunu okumaktır).

Z-Stick başarıyı göstermek için kısa bir süre yanıp söner. Bu, yeni bir bağlantı noktası atandığı için Pi'ye geri takarken sorunlar yaratır. Dinamik olarak yeniden atanmış olduğunu fark ederseniz Pi'nizi standart bağlantı noktasına sıfırlamak için yeniden başlatın. Daha da iyisi: önce tüm donanım eşleştirmelerini yapana kadar Pi'ye bağlamayın.

HABmin ve Z-Wave Ciltlerinin Kurulumu

OpenHAB aslında Z-Wave için bir yapılandırma yardımcı programı olmadığından, HABmin adı verilen başka bir web yönetim aracı yükleyeceğiz. Şuraya gidin HABmin Github deposu geçerli sürümü indirin. Fermuarını açtıktan sonra, 2 .jar eklentiler dizinindeki dosyalar - bunlar OpenHAB Home paylaşımınızdaki ilgili eklentiler dizinine yerleştirilmelidir (Aotec gen5 Z-Stick'i de kullanıyorsanız, Z-Wave ciltlemesinin 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şme altında. Yükleme aynıdır ancak bir ek .jar eklentisiyle. Hangisini tercih ettiğinizi görmek için her ikisini de denemeye değer olabilir.

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

ls / dev / tty *

Adında USB olan herhangi bir şey mi arıyorsunuz, yoksa benim durumumda Z-stick kendisini /dev/ttyACM0 (modem). Komutu takmadan önce ve sonra bir kez yapmak daha kolay olabilir, böylece emin değilseniz hangi değişikliklerin olduğunu görebilirsiniz.

devtty

OpenHAB yapılandırma dosyasını açın ve her iki satırı da kaldırarak ve gerçek aygıt adresinizi koyarak Z-Wave bölümündeki bölümü değiştirin. Benim için son bir adım OpenHAB kullanıcısının modeme erişmesine izin vermekti.

sudo usermod -a -G diyalog openhab

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

sudo hizmet openhab yeniden başlatma

Umarım, hata ayıklama günlüğünü kontrol ediyorsanız, böyle bir şey görürsünüz. Tebrikler, şimdi Z-Wave'den bahsediyorsunuz. Hata ayıklama günlüğünü çeşitli Z-Dalga düğümlerinden gelen mesajlarla dolu bulabilirsiniz. Bulunduğunu görmek için HABMIN'i kontrol ederek başlayalım: http://openhab.local: 8080 / habmin / index.html (openhab.local'ın yerine Raspberry Pi ana bilgisayar adınız veya IP adresiniz kullanılır).

Openwa günlüğüne başlayan zwave

HABMIN'de görülecek çok şey var, ancak yalnızca gerçekten Konfigürasyon -> Bağlamalar -> Z-Dalgası -> Cihazlar sekmesini tıklayın. Referans kolaylığı için konum ve ad etiketini düzenlemek üzere düğümü genişletin.

cihaz adını düzenle

Z-Wave Öğelerini Yapılandırma

Her Z-Wave cihazının OpenHAB için belirli bir yapılandırması olacaktır. Neyse ki, çoğu cihaz zaten keşfedildi ve zaten sizin için örnekler olacak. Tanınmayan özel cihazları 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ı ve ölçer var. Hızlı bir Googling beni Wetwa.re'de örnek bir öğe yapılandırmasıyla bir blog yayınına yönlendirdi. Bunu şu şekilde uyarladım:

Anahtar Nem Alıcısı_Switch "Nem Alıcı" {zwave = "3: command = switch_binary"} Numara Nem Alıcı_Watt "Nem alıcı güç tüketimi [% .1f W]" {zwave = "3: command = meter"}

Mükemmel.

Sıradaki Aeotec Gen5 Çoklu Sensör.

Aeon Labs Aeotec Z-Wave Gen5 Çoklu Sensör (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Çoklu Sensör (Z-Wave Plus) Amazon'da Şimdi Satın Al $69.27

Bunun için örnek bir yapılandırma buldum iwasdot.comve çoklu sensörüm Düğüm 2'de.

Hallway_Temperature Sayısı "Koridor Sıcaklığı [% .1f ° C]" (Koridor, Sıcaklık) {zwave = "2: 0: komut = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} "Koridor Nemi [% .0f %%]" (Koridor, Nem) {zwave = "2: 0: komut = sensor_multilevel, sensor_type = 5"} Sayı Hallway_Luminance "Koridor Parlaklığı [% .0f Lux]" (Koridor) {zwave = "2: 0: komut = sensor_multilevel, sensor_type = 3"} Hallway_Motion "Hallway Motion [% s]" (Koridor, Hareket) {zwave = "2: 0: command = sensor_binary, response_to_basic = true"} ile iletişime geçin Sensör_1_battery "Pil [% s %%]" (Hareket) {zwave = "2: 0: command = battery"}

Bunun biçimi size garip geliyorsa, lütfen ilkine geri dönün Yeni başlayanların rehberi Raspberry Pi'de OpenHAB Ev Otomasyonuna BaşlarkenOpenHAB, çeşitli donanımlarda çalışan ve agnostik protokolü, yani piyasadaki neredeyse tüm ev otomasyon donanımlarına bağlanabilir bugün. Daha fazla oku , özellikle öğelerin nasıl eklendiğini açıkladığım Hue ciltleme bölümü. Muhtemelen böyle sadece yapıştırma örneklerini kopyalamanız gerekecek, ancak yeni bir cihazınız olması durumunda, bağlayıcı belgeler komutlar.

Logitech Harmony Ciltleme

Kurallara girmeden önce, Harmony ciltlemeyle çalışma hakkında hızlı bir not eklemek istedim. Ben büyük bir hayranıyım Harmony serisi nihai uzaktan kumandalar Logitech Harmony Ultimate İnceleme ve HediyeOturma odanız kaos - itiraf et. Hangi cihazın hangi uzaktan kumandaları kontrol ettiğini merak ettiğiniz için affedilirsiniz. TV, amplifikatör, TiVO, BluRay oynatıcı, belki de aydınlatma - anahtarlama faaliyetleri uzun ... Daha fazla oku Ev medya merkezi deneyimini basitleştirmek için, ancak genellikle akıllı ev içinde ayrı bir sistem olarak duruyorlar. OpenHAB ile Logitech Harmony faaliyetleri ve tam cihaz kontrolü artık merkezi sisteminizin bir parçası olabilir ve hatta otomasyon kurallarına dahil edilebilir.

“Armoni” yi aramak için apt-cache kullanarak bulduğunuz üç ciltleme dosyasını yükleyerek başlayın:

openhab apt-cache arama uyum bağlama

Unutma chown işiniz bittiğinde tekrar ciltler dizini:

sudo uygun-get install openhab-addon-action-harmonyhub. sudo uygun-get install openhab-addon-bağlayıcı-harmonyhub. sudo uygun-get install openhab-addon-io-harmonyhub. sudo chown -hR açıkhava: 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 ########## harmonyhub: ana bilgisayar = 192.168.1.181veya ip'iniz
harmonyhub: kullanıcı adı =your-armoni-posta-giriş
harmonyhub: şifre =şifreniz

IP adresi Harmony merkezinizin 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 giriş bilgilerini girmeniz gerekir. Bu kadar. Hue'nuzu yeniden başlattığınızda, hata ayıklama günlüğünüzde ciltten ani bir çıktı patlaması olmalıdır.

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

json biçimlendirilmiş openhab çıktısı

Varsayılan olan standart PowerOff etkinliğinin yanı sıra, burada adıyla listelenen kendi tanımlanmış etkinliklerinizi de bulacaksınız. Şimdi aktiviteleri başlatmak için basit bir düğme kontrolü oluşturalım. İlk olarak, öğeler 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ğlamahem geçerli etkinliği getirir hem de geçerli etkinliğe başka bir şey olarak komut verebilir. Şimdi site haritası dosyasında bunun için bir düğme oluşturabiliriz.

Anahtar öğesi = Harmony_Activity eşlemeleri = [PowerOff = 'Kapalı', Alıştırma = 'Alıştırma', 13858434 = 'TV', Karaoke = 'Karaoke']

Köşeli parantez içinde her etkinliği etiketle birlikte göreceksiniz. Genelde doğrudan uzaktan kumandanızda adlandırdığınız etkinliklere başvurabilirsiniz, ancak bulduğum istisna, etkinlik adında “TV İzle” gibi bir boşluk bulunan 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:

site haritasındaki openhab uyumu

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

Kurallara Genel Bir Giriş

Çoğu akıllı ev hub'ları, 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şime girmek için zaman harcamanız gerekmediğini iddia ediyorum - son kullanıcı tarafından görülemeyen ve tamamen otomatik olan bir ev. Bu amaçla, OpenHAB, programlayabileceğiniz, çoğu kişinin karmaşıklığını aşan çok güçlü bir komut dosyası yazma dili içerir akıllı ev hub Akıllı Ev Merkezleri Savaşı: Dışarıda Neler Var ve Neler Geliyor? Daha fazla oku veya IFTTT tarifleri IFTTT Artık Her Şeye Bağlanıyor: Maker Kanalına GirişIFTTT'nin potansiyel kullanımları sınırsızdır. Ancak şimdiye kadar, kendi donanım projelerinizle arayüz kurmak zor oldu. Bugün, hepsi değişti. Daha fazla oku .

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

"James hazır olduğunda ofis ışığı yanar" Öğe JamesInOffice KAPALI durumundan AÇIK durumuna geçtiğinde. sonra sendCommand (Office_Hue, ON) son kural "James ayrıldığında ofis ışığı kapalı" Öğe JamesInOffice AÇIK'tan KAPALI'ya değiştiğinde. sonra sendCommand (Office_Hue, OFF) son

İlk olarak, kuralı adlandırırız - açıklayıcı olun, böylece hangi etkinliğin tetiklendiğini bilirsiniz. Sonra, basit kuralımızı x doğru olduğunda, y yap. End, söz konusu kuralın kapatıldığını gösterir. Kurallarda kullanabileceğiniz birkaç özel kelime var, ancak şimdilik iki basit sözdizimi parçasını ele alıyoruz. maddebir şeyin durumunu sorgulamanızı sağlar; ve SendCommandki bu tam olarak düşündüğünüzü yapar. Sana bunun kolay olduğunu söyledim.

Muhtemelen bir çift kural kullanmak gereksizdir, ancak mantığım daha karmaşık hale geldikçe, alana girerken veya bölgeden ayrılırken - denklemin içine bir yere bir ışık sensörü eklemek iyi bir fikir olabilir, bu yüzden gereksiz yere açmayız yanar.

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

"Her sabah egzersiz yap" kuralı Zaman cron "0 0 8 1/1 *? *" sonra harmonyStartActivity ("Egzersiz") son.

Yine kuralı, ne zaman ateşleneceğini belirten koşulları ve alınacak eylemleri adlandırıyoruz. Ancak bu durumda bir Zaman modeli tanımlıyoruz. Tırnaklarda 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 ifadesini oluşturmanıza yardımcı olur, ancak ayrıntılı bir açıklama ve daha fazla örnek için biçim kılavuzunu [Artık Kalmadı] da okuyabilirsiniz.

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

Kurallarım basitçe “her sabah 08:00, haftanın her günü, Harmony Ultimate sistemime Egzersiz aktivitesini başlatmasını söyle” diyor, bu da TV'yi, Xbox'ı, amplifikatörü etkinleştirir ve diski sürücüde başlatmak için bir dakika sonra A düğmesine basar.

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

Size göstermek istediğim bir kural daha evimdeki nem seviyelerini yönetmek için kullandığım bir şey. İhtiyaç duyduğum yerde hareket etmem gereken tek bir nem gidericim var, bu yüzden tüm nem sensörlerime bakmaya, hangisinin en yüksek olduğunu bulmaya ve bunu bir değişkente saklamaya karar verdim. Şu anda her dakika tetikleniyor, ancak bu kolayca indirilebilir. İlk önce bir göz atın:

org.openhab.core.library.types dosyasını içe aktarın. * ithalat org.openhab.model.script.actions. * içe aktar java.lang. Dize kuralı "Nem Monitörü" Zaman cron "0 * * * *?" sonra var prevHigh = 0 var highHum = "" Nem? .members.forEach [hum | logDebug ("humidity.rules", hum.name); if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Nem Alma CihazıNeded, 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 kapar; her biri için üzerlerinde yinelenir (muhtemelen aşina olmadığınız ilginç bir köşeli ayraç biçimiyle). Kuralların sözdizimi Xtend'in bir türevidir, böylece Xtend belgeleri uyum sağlayacak bir örnek bulamazsanız.

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

  • Kuralların ayrıntılı açıklaması resmi wiki'de
  • resmi kural örnekleri wiki sayfası
  • Yeni zirvelere kural koyma
  • IngeniousFool.net'te gelişmiş örnekler

OpenHAB ve Nesnelerin İnterneti için MQTT

MQTT, makine-makine iletişimi için hafif bir mesajlaşma sistemidir. Arduinos veya Ahududu Pis birbirleriyle konuşmak için (tabii ki sadece daha fazlası ile çalışır) şunlar). Hızla popülerlik kazanıyor ve genellikle düşük olan Nesnelerin İnterneti cihazlarıyla bir ev buluyor sensör verilerini hub'ınıza geri göndermek veya uzaktan almak için güvenilir bir yola ihtiyaç duyan mikrodenetleyiciler komutlar. Bununla tam olarak ne yapacağız.

Ama tekerleği neden yeniden icat ettiniz?

MQ Telemetri Taşımacılığı, 1999 yılında petrol boru hatlarını yavaş uydu ile bağlamak için icat edildi. hala güvenilir kullanım sağlarken, pil kullanımını ve bant genişliğini en aza indirmek için özel olarak tasarlanmış bağlantılar veri dağıtımı. Yıllar geçtikçe tasarım ilkeleri aynı kaldı, ancak kullanım durumu özel gömülü sistemlerden genel Nesnelerin İnterneti cihazlarına geçti. 2010 yılında protokol telifsiz serbest bırakıldı, herkesin kullanması ve uygulaması için açıktı. Biz özgürlüğü severiz.

Neden başka bir protokolle uğraştığımızı merak ediyor olabilirsiniz - sonuçta zaten HTTP'ye sahibiz - ki bu da her türlü web bağlantılı sistem arasında (OpenHAB ve IFTTT gibi, özellikle yeni yapımcı kanalı IFTTT Artık Her Şeye Bağlanıyor: Maker Kanalına GirişIFTTT'nin potansiyel kullanımları sınırsızdır. Ancak şimdiye kadar, kendi donanım projelerinizle arayüz kurmak zor oldu. Bugün, hepsi değişti. Daha fazla oku ). Ve haklısın. Ancak, bir HTTP sunucusunun işlem yükü oldukça büyüktür - o kadar ki, bir sunucuda kolayca çalıştıramazsınız. Arduino gibi yerleşik mikrodenetleyici (en azından yapabilirsiniz, ancak hiçbir şey için fazla belleğiniz kalmayacak) Başka). MQTT diğer yandan hafiftir, bu nedenle ağınızın etrafında 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) ve bir veya daha fazla istemci gerektirir. Sunucu bir aracı görevi görür, mesajlar alır ve ilgilenen istemcilere yeniden yayınlar.

İle devam edelim Heyecan-için-makineleri analoji olsa. Tıpkı Twitter kullanıcılarının kendi anlamsız 140 karakterini tweetleyebilmeleri ve kullanıcıların küratörlü yayın akışını görmek için diğer kullanıcıları "takip edebilmeleri" gibi, MQTT istemcileri, oradan tüm iletileri almak için belirli bir kanala abone olabilir ve kendi iletilerini buna yayınlayabilir kanal. Bu yayınlama ve abone olma modeli olarak adlandırılır pub / sub, geleneğin aksine müşteri sunucusu HTTP modeli.

HTTP, iletişim kurduğunuz makineye ulaşmanızı gerektirir, örneğin, Merhaba, veri alırken veya koyarken birbirinizi sürekli olarak kabul etmenizi sağlar. Pub / sub ile, yayımlamayı yapan müşterinin hangi istemcilere abone olduğunu bilmesine gerek yoktur: sadece iletileri dışarı pompalar ve aracı onları abone olan istemcilere yeniden dağıtır. Herhangi bir müşteri tıpkı bir Twitter kullanıcısı gibi konuları yayınlayabilir ve bunlara abone olabilir.

Twitter'ın aksine, MQTT 140 karakterle sınırlı değildir. Veri agnostiktir, bu nedenle küçük sayılar veya büyük metin blokları, JSON biçimli datagramlar, hatta resimler ve ikili dosyalar gönderebilirsiniz.

MQTT her şey için HTTP'den daha iyi değil - ama dır-dir evin her yerinde çok sayıda sensöre sahip olacaksak ve sürekli rapor edersek daha uygun olur.

OpenHAB'ın MQTT brokerınız olarak hareket etmeyeceğini bilmek de önemlidir - bunu biraz sonra ele alacağız. Ancak, OpenHAB bir müşteri gibi davranacaktır: hem OpenHAB etkinlik günlüğünüzü yayınlayabilir, hem de belirli Örneğin, belirli bir cihazdaki MQTT iletileri tarafından denetlenen bir anahtarınız olabilir kanal. Bu, sensörlerle dolu bir ev oluşturmak için idealdir.

Mosquitto'yu Pi'nize yükleyin

OpenHAB bir MQTT istemcisi içermesine rağmen, bir konuya abone olabilmeniz ve mesaj yayınlayabilmeniz için sunucu olarak işlemez. Bunun için, web tabanlı bir MQTT broker (ücretli veya ücretsiz) kullanmanız veya ücretsiz yazılımı Pi'nize yüklemeniz gerekir. Her şeyi şirket içinde tutmak istiyorum, bu yüzden Pi'ye Mosquitto'yu yükledim.

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

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key ekleyin mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo uygun-almak yüklemek sivrisinek.

Yerel ağda bir MQTT sunucusunun çalışır durumda olması için tek yapmamız gereken budur. Acenteniz varsayılan olarak 1883 numaralı bağlantı noktasında çalışıyor.

MQTT sunucunuzun çapraz platform olan ücretsiz MQTT.fx dosyasını kullanarak çalışıp çalışmadığını kontrol edin. Yeni bir profil oluşturmak için ayarlar simgesini tıklayın ve Raspberry Pi’nin IP adresini veya adını girin. Kaydet ve bağlan tuşuna bas. Sağ üstteki küçük trafik ışığı yeşile dönerse, gitmekte fayda vardır.

mqttfx örnek profili

Hızlı bir test için "abone ol" sekmesini tıklayın ve şunu yazın inTopic / metin kutusuna, ardından Abone ol buton. Artık 0 mesaj göstermesine rağmen, inTopic adlı konuyla ilgili mesaj almak için abone oldunuz. Yayınlama sekmesine geri dönün, küçük kutuya inTopic yazın ve aşağıdaki büyük metin kutusuna kısa bir mesaj yazın. hit Yayınla birkaç kez tıklayın ve abone olun sekmesine tekrar bakın. Bu konuda birkaç ileti görmeniz gerekir.

inTopic MQTT testi

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 edinmeliyiz. Konu adları büyük / küçük harfe duyarlıdır, $ ile başlamamalı veya boşluk veya ASCII olmayan karakterler içermelidir - gerçekten değişken adları için standart programlama uygulamaları.

/ Separator, hiyerarşik bir konu düzeyini belirtir; örneğin, aşağıdakilerin tümü geçerli konu düzeyleridir.

inTopic / smallSubdivision / evenSmallerSubdivision. Myhome / oturma / sıcaklık. Myhome / oturma / nem. MyHome / mutfak / sıcaklık. Myhome / mutfak / nem

Zaten, bu ağaç yapısının sensörler ve cihazlarla dolu akıllı bir ev için nasıl mükemmel olduğunu görüyor olmalısınız. Tek bir odada birden fazla sensörle kullanım için en iyi uygulama, her sensör değişkenini kendi konu düzeyi olarak yayınlamaktır - daha fazla spesifikliğe (yukarıdaki örneklerde olduğu gibi) ayrılmak - birden fazla sensör türünü aynı şekilde yayınlamak yerine kanal.

Müşteriler daha sonra istedikleri sayıda bireysel konu düzeyini yayınlayabilir veya bunlara abone olabilir veya ağacın üstünden yukarı doğru filtrelemek için bazı özel joker karakterler kullanabilir.

+ Joker karakter, herhangi bir konu düzeyi yerine geçer. Örneğin:

Myhome / + / sıcaklık

her ikisine de abone olur

Myhome / oturma / 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 içeren herhangi bir şeyi alabilirsiniz:

Myhome / oturma / #

Teknik olarak, kök seviyesine de abone olabilirsiniz. brokerden geçiyor, ama bu yüzünüze bir yangın hortumu yapıştırmak gibi olabilir: biraz karşı konulmaz bunaltıcı. HiveMQ'dan herkese açık MQTT aracısına bağlanmayı ve # numarasına abone olmayı deneyin. Müvekkilim çökmeden birkaç saniye içinde yaklaşık 300 mesaj aldım.

MQTT Başlangıç ​​İpucu: “/myHome/” "benim evim/" - başlangıçta bir eğik çizgi eklemek, teknik olarak geçerli olmasına rağmen kafa karıştırıcı olabileceği için önerilmeyen boş bir konu düzeyi oluşturur.

Şimdi teoriyi bildiğimize göre, bir Arduino, Ethernet Shield ve bir DHT11 sıcaklık ve nem sensörü ile gidelim - muhtemelen başlangıç ​​kitinizde bir tane var, ancak değilse, bir hareket sensörü için çevre sensörünü (veya buton).

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

Dahili Wi-Fi veya Ethernet özellikli karma Arduino uyumlu bir cihazınız varsa, bu da işe yarayacaktır. Sonunda her odada bir ağ bağlantısı kullanmak zorunda kalmanın daha iyi / daha ucuz bir iletişim yolunu isteyeceğiz, ancak bu temel bilgileri öğrenmeye hizmet ediyor.

İndirerek başlayın pubsubclient kütüphane ___ 'dan Github. “ZIP olarak indir” düğmesini kullandıysanız, yapı biraz yanlıştır. Sıkıştırmayı açın, klasörü şu şekilde yeniden adlandırın: pubsubclient, ardından iki dosyayı src seçin ve indirilen klasörün köküne bir düzey yukarı taşıyın. Ardından tüm klasörü Arduino / kütüphaneler dizin.

İşte benim adapte edebileceğiniz örnek kodum: DHT11 sinyal çıkışı pin 7'de. Aşağıdaki satırda Pi'nizin sunucusunun IP'sini değiştirin:

client.setServer ("192.168.1.99", 1883);

Maalesef, kolay adını kullanamayız (Benim durumumda OpenHAB.local) Arduino'daki TCP / IP yığını çok basit olduğundan ve Bonjour adlandırma kodunu eklemek, harcamak istemediğimiz çok fazla bellek olacaktır. Sensör verilerinin yayınlandığı konuları değiştirmek için aşağıdaki satırlara gidin:

char tamponu [10]; dtostrf (t, 0, 0, tampon); (Tampon, "openhab / himitsu / sıcaklık") client.publish; dtostrf (h, 0, 0, tampon); client.publish ( "openhab / himitsu / nem" tampon);

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

( "Openhab / himitsu / komut") client.subscribe;

Etraftaki kodu inceleyin; örneğin belirli kanallara komutlar göndererek bir LED'i veya röleyi kolayca kontrol edebileceğinizi görürsünüz. Örnek kodda, sadece komutun alındığını bildiren bir mesaj gönderir.

Kodunuzu yükleyin, Arduino'nuzu ağa bağlayın ve MQTT.fx'i kullanarak # veya openhab / himitsu / # (veya oda adını ne değiştirirseniz değiştirin, ancak sonuna # eklemeyi unutmayın). Çok yakında mesajların geldiğini görmelisiniz; ve komut konusuna AÇIK veya KAPALI gönderirseniz, onayların da geri geldiğini görürsünüz.

mqtt arduino mesajları geri geliyor

OpenHAB için MQTT Bağlama

Denklemdeki 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-ciltleme-mqtt. sudo chown -hR açıkhava: openhab / usr / share / openhab

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

sudo hizmet openhab yeniden başlatma

O zaman bir iki öğe ekleyelim:

/ * MQTT Sensörleri * / Sayı Himitsu_Temp "Himitsu Sıcaklığı [% .1f ° C]"(Himitsu, Sıcaklık) {mqtt = " (Himitsu, Nem) {mqtt = "

Şimdiye kadar formatı anlamalısınız; oluyor Numara öğesi MQTT bağlayıcısından, belirtilen bir konuda. Bu basit bir örnek, wiki sayfasına başvurabilirsiniz. çok daha karmaşık olabilir.

Tebrikler, artık ucuz bir Arduino tabanlı sensör dizisinin temeli var. Bunu gelecekte tekrar gözden geçireceğiz ve Arduino’ları tamamen ayrı RF ağlarına yerleştireceğiz. Ben de özdeş bir versiyon oluşturdum Wizwiki 7500 panoları için eğer bunlardan birine sahipseniz.

Kalıcılık ve Verileri Grafikleme

Şimdiye kadar, muhtemelen Z-Wave veya MQTT çalıştıran özel Arduinos'tan bir grup sensör kuruyorsunuz - böylece bu sensörlerin mevcut durumunu herhangi bir zamanda görüntüleyebilir ve ayrıca kurallar. Ancak sensör değerleri ile ilgili ilginç olan şey genellikle zaman içinde değişmeleridir: kalıcılık ve grafikleme devreye girer. süreklilik OpenHAB'de verilerin zaman içinde kaydedilmesi anlamına gelir. Devam edelim ve veriler yuvarlak bir robin tarzında kaydedildiği için RRD4J'yi (Java için Round Robin Veritabanı) kuralım - veritabanının boyutunu sıkıştırmak için eski veriler atılır.

Rrd4j paketlerini aşağıdaki komutlarla kurun.

sudo apt-get install openhab-addon-persistence-rrd4j. sudo chown -hR openhab: openhab / usr / paylaşım / openhab. 

Sonra adlı yeni bir dosya oluşturun. rrd4j.persist içinde konfigürasyonları / kalıcılık Klasör. Aşağıdakilere yapıştırın:

Stratejiler {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange. } {// Öğeleri, değer güncellendiğinde her şeyi saklar, yalnızca bir varsayılan değerdir ve başlangıçta veritabanından geri yükler *: Strategy = everyChange, restoreOnStartup // sonra Sıcaklık grubundaki herhangi bir şey için everyHour ve nem Sıcaklığı için her dakika özel stratejiler tanımlarız *: strateji = everyHour Nem *: strateji = everyMinute // alternatif olarak buraya // Bedroom_Humidity, JamesInOffice: strateji gibi belirli öğeler ekleyebilirsiniz. = everyMinute. }

Bu dosyanın ilk bölümünde, yalnızca bir CRON ifadesine bir ad vermek anlamına gelen stratejiler tanımlarız. Bu, My ile yaptığımızla aynı. OpenHAB, ancak bu sefer everyDay, everyHour ve everyMinute için kullanabileceğimiz bazı yeni stratejiler oluşturuyoruz. Henüz hepsini kullanmadım, ama gelecekte olabilirim.

Dosyanın ikinci yarısında rr4dj'ye hangi veri değerlerinin kaydedileceğini söyleriz. Varsayılan olarak, her güncelleme yaptığında her şeyi kaydedeceğiz, ancak belirli sensörler için zamana dayalı stratejiler de belirttim. Sıcaklıklar çok fazla rahatsız olmadım, bu yüzden sadece herşeyi kurtarmak için ayarladım, ama 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 özel olarak kaydetmek istediğiniz başka veriler varsa, bunları şimdi buraya ekleyin veya gerektiği gibi ayarlayın.

Not: Verileri de grafiğe dökmek istiyorsanız, en az dakikada bir kez saklamalısınız. Sensör verilerinizin bunu hızlı bir şekilde güncellemesi önemli değildir, rr4dj'ye dakikada bir kez saklamasını söylemeniz yeterlidir.

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

rrd4j veri depolama

Şimdi, tüm bu verilerin bazı güzel grafiklerini 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 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. Belirtilmezse, tam günlük veri için varsayılan olarak D değerini kullanır.

Birden çok öğeden oluşan bir grafik oluşturmak için bunun yerine grup adını grafik haline getirin:

Grafik öğesi = Nem süresi = saat
grafik

Bu grafiği başka bir yerde kullanabileceğinizi bilmek de isteyebilirsiniz; aşağıdaki URL'yi kullanarak bir resim oluşturuyor: http://YOUROPENHABURL: 8080 / grafik? Gruplar = Nem ve süresi = h

Nasıl en Sizin OpenHAB Sistemi Geliyor mu?

Kılavuzun bu bölümü için bu kadar, ancak bunun bizden OpenHAB hakkında en son haber almasını beklemeyin. İnşallah bu ve başlangıç ​​kılavuzu size tam bir OpenHAB sisteminizi geliştirmeniz için sağlam bir temel sağlamıştır - ancak bu hiç bir zaman gerçekten tamamlanmamış bir süreçtir.

Neyse ki, OpenHAB basit cihaz karmaşıklığından ev otomasyonunda son noktaya kadar birkaç cihazdan yüzlerce ölçeğe kadar iyi ölçeklendirilebilir - peki sisteminiz nasıl geliyor? Hangi cihazları seçtiniz? Ele alacağınız bir sonraki büyük proje nedir?

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

James Yapay Zeka alanında lisans derecesine sahiptir ve CompTIA A + ve Network + sertifikalıdır. MakeUseOf'un baş geliştiricisi ve boş zamanlarını VR paintball ve boardgames oynayarak geçiriyor. Çocukluğundan beri bilgisayar yapıyor.