Xamarin.iOS'ta HomeKit
HomeKit, Apple'ın ev otomasyon cihazlarını denetleme çerçevesidir. Bu makale HomeKit'i tanıtır ve HomeKit Donatı Simülatörü'nde test donatılarını yapılandırmayı ve bu aksesuarlarla etkileşime geçmek için basit bir Xamarin.iOS uygulaması yazmayı kapsar.
Apple, çeşitli satıcılardan gelen birden çok ev otomasyonu cihazını tek ve tutarlı bir ünitede sorunsuz bir şekilde tümleştirmenin bir yolu olarak iOS 8'de HomeKit'i tanıttı. HomeKit, ev otomasyonu cihazlarını bulmak, yapılandırmak ve denetlemek için ortak bir protokolü teşvik ederek, birbiriyle ilgili olmayan satıcıların cihazlarının tek tek satıcıların çabalarını koordine etmek zorunda kalmadan birlikte çalışmasına olanak tanır.
HomeKit ile, satıcı tarafından sağlanan API'leri veya uygulamaları kullanmadan HomeKit özellikli tüm cihazları denetleyebilen bir Xamarin.iOS uygulaması oluşturabilirsiniz. HomeKit kullanarak aşağıdakileri yapabilirsiniz:
- HomeKit özellikli yeni ev otomasyonu cihazlarını keşfedin ve bunları kullanıcının tüm iOS cihazlarında kalıcı olacak bir veritabanına ekleyin.
- HomeKit Giriş Yapılandırma Veritabanı'nda herhangi bir cihazı ayarlayın, yapılandırın, görüntüleyin ve denetleyin.
- Önceden yapılandırılmış herhangi bir HomeKit cihazıyla iletişim kurun ve tek tek eylemler gerçekleştirmelerini veya mutfaktaki tüm ışıkları açma gibi konserlerde çalışmalarını isteyin.
HomeKit özellikli uygulamalarda Ev Yapılandırma Veritabanı'ndaki cihazlara hizmet vermeye ek olarak, HomeKit Siri sesli komutlarına erişim sağlar. Uygun şekilde yapılandırılmış bir HomeKit kurulumu göz önüne alındığında, kullanıcı "Siri, oturma odasındaki ışıkları aç" gibi sesli komutlar verebilir.
Giriş Yapılandırma Veritabanı
HomeKit, belirli bir konumdaki tüm otomasyon cihazlarını Ev Koleksiyonu'nda düzenler. Bu koleksiyon, kullanıcının ev otomasyonu cihazlarını anlamlı, okunabilir etiketlerle mantıksal olarak düzenlenmiş birimler halinde gruplandırmasını sağlar.
Ev Koleksiyonu, kullanıcının tüm iOS cihazlarında otomatik olarak yedeklenecek ve eşitlenecek bir Ev Yapılandırma Veritabanında depolanır. HomeKit, Ev Yapılandırma Veritabanı ile çalışmak için aşağıdaki sınıfları sağlar:
HMHome
- Bu, tüm ev otomasyon cihazları için tüm bilgileri ve yapılandırmaları tek bir fiziksel konumda (tek bir aile konağı gibi) tutan en üst düzey kapsayıcıdır. Kullanıcının ana evi ve tatil evi gibi birden fazla ikametgahı olabilir. Ya da aynı mülkte ana ev ve garajın üzerindeki bir konuk evi gibi farklı "evleri" olabilir. Her iki durumda da, diğer HomeKit bilgilerinin girilmesi için en az birHMHome
nesnenin ayarlanması ve depolanması gerekir .HMRoom
- İsteğe bağlı olarak,HMRoom
kullanıcının bir evinHMHome
() içinde mutfak, banyo, garaj veya oturma odası gibi belirli odaları tanımlamasına izin verir. Kullanıcı, evindeki belirli bir konumdaki tüm ev otomasyon cihazlarını birHMRoom
içinde gruplandırabilir ve bir birim olarak üzerinde işlem yapabilir. Örneğin Siri'nin garaj ışıklarını kapatmasını isteme.HMAccessory
- Bu, kullanıcının ikametgahında (akıllı termostat gibi) yüklenmiş bireysel, fiziksel HomeKit özellikli otomasyon cihazını temsil eder. HerHMAccessory
biri birHMRoom
öğesine atanır. Kullanıcı herhangi bir oda yapılandırmadıysa, HomeKit aksesuarları özel bir varsayılan odaya atar.HMService
- Bir ışığın veya renginin açık/kapalı durumu (renk değişikliği destekleniyorsa) gibi belirliHMAccessory
bir tarafından sağlanan bir hizmeti temsil eder. HerHMAccessory
birinde aynı zamanda ışık içeren garaj kapısı açıcı gibi birden fazla hizmet bulunabilir. Ayrıca, belirliHMAccessory
bir hizmette kullanıcı denetiminin dışında olan üretici yazılımı güncelleştirmesi gibi hizmetler olabilir.HMZone
- Kullanıcının bir nesne koleksiyonunuHMRoom
Üst Kat, Alt Kat veya Bodrum gibi mantıksal bölgeler halinde gruplandırmasına izin verir. İsteğe bağlı olsa da bu, Siri'nin alt kattaki tüm ışığı kapatmasını isteme gibi etkileşimlere olanak tanır.
HomeKit Uygulaması Sağlama
HomeKit tarafından uygulanan güvenlik gereksinimleri nedeniyle, HomeKit çerçevesini kullanan bir Xamarin.iOS uygulamasının hem Apple Geliştirici Portalı'nda hem de Xamarin.iOS proje dosyasında düzgün yapılandırılması gerekir.
Aşağıdakileri yapın:
Apple Geliştirici Portalı'na giriş yapın.
Sertifikalar, Tanımlayıcılar ve Profiller'e tıklayın.
Henüz yapmadıysanız, Tanımlayıcılar'a tıklayın ve uygulamanız için bir kimlik oluşturun (örneğin),
com.company.appname
yoksa mevcut kimliğinizi düzenleyin.Verilen kimlik için HomeKit hizmetinin denetlendiğinden emin olun:
Değişikliklerinizi kaydedin.
Sağlama Profilleri>Geliştirme'ye tıklayın ve uygulamanız için yeni bir geliştirme sağlama profili oluşturun:
Yeni sağlama profilini indirip yükleyin veya Xcode kullanarak profili indirip yükleyin.
Xamarin.iOS proje seçeneklerinizi düzenleyin ve az önce oluşturduğunuz sağlama profilini kullandığınızdan emin olun:
Ardından Info.plist dosyanızı düzenleyin ve sağlama profilini oluşturmak için kullanılan Uygulama Kimliğini kullandığınızdan emin olun:
Son olarak, Entitlements.plist dosyanızı düzenleyin ve HomeKit yetkilendirmesinin seçildiğinden emin olun:
Değişiklikleri tüm dosyalara kaydedin.
Bu ayarlar hazır olduğunda uygulama artık HomeKit Framework API'lerine erişmeye hazırdır. Sağlama hakkında ayrıntılı bilgi için lütfen Cihaz Sağlama ve Uygulamanızı Sağlama kılavuzlarımıza bakın.
Önemli
HomeKit özellikli bir uygulamanın test edilmesi için geliştirme için düzgün bir şekilde sağlanmış gerçek bir iOS cihazı gerekir. HomeKit, iOS Simülatöründen test edilemez.
HomeKit Aksesuar Simülatörü
Fiziksel bir cihaza sahip olmak zorunda kalmadan tüm olası ev otomasyonu cihazlarını ve hizmetlerini test etmek için bir yol sağlamak için Apple, HomeKit Accessory Simulator'ı oluşturdu. Bu simülatörü kullanarak sanal HomeKit cihazları ayarlayabilir ve yapılandırabilirsiniz.
Simülatörü Yükleme
Apple, HomeKit Accessory Simulator'ı Xcode'dan ayrı bir indirme olarak sağlar, bu nedenle devam etmeden önce yüklemeniz gerekir.
Aşağıdakileri yapın:
Web tarayıcısında Apple Geliştiricileri için İndirmeler'i ziyaret edin
Xcode xxx için Ek Araçlar'ı indirin (burada xxx, yüklediğiniz Xcode sürümüdür):
Disk görüntüsünü açın ve araçları Uygulamalar dizininize yükleyin.
HomeKit Donatı Simülatörü yüklüyken test için sanal aksesuarlar oluşturulabilir.
Sanal Donatılar Oluşturma
HomeKit Donatı Simülatörü'ne başlamak ve birkaç sanal donatı oluşturmak için aşağıdakileri yapın:
Uygulamalar klasöründen HomeKit Accessory Simulator'ı başlatın:
Düğmeye + tıklayın ve Yeni Aksesuar... öğesini seçin:
Yeni aksesuar hakkındaki bilgileri doldurun ve Son düğmesine tıklayın:
Hizmet Ekle.. düğmesine tıklayın ve açılan listeden bir hizmet türü seçin:
Hizmet için bir Ad girin ve Son düğmesine tıklayın:
Özellik Ekle düğmesine tıklayıp gerekli ayarları yapılandırarak bir hizmet için isteğe bağlı özellikler sağlayabilirsiniz:
HomeKit'in desteklediği her sanal ev otomasyonu cihazından birini oluşturmak için yukarıdaki adımları yineleyin.
Bazı örnek sanal HomeKit donatıları oluşturulup yapılandırıldığında, artık Xamarin.iOS uygulamanızdan bu cihazları kullanabilir ve denetleyebilirsiniz.
Info.plist Dosyasını Yapılandırma
iOS 10 (ve üzeri) için yeni olan geliştiricinin NSHomeKitUsageDescription
anahtarı uygulamanın dosyasına eklemesi ve uygulamanın Info.plist
neden kullanıcının HomeKit veritabanına erişmek istediğini belirten bir dize sağlaması gerekir. Bu dize, uygulamayı ilk kez çalıştırıldığında kullanıcıya sunulacaktır:
Bu anahtarı ayarlamak için aşağıdakileri yapın:
Çözüm Gezgini dosyaya çift tıklayarak
Info.plist
düzenlemek üzere açın.Ekranın alt kısmında Kaynak görünümüne geçin.
Listeye yeni bir Girdi ekleyin.
Açılan listede Gizlilik - HomeKit Kullanım Açıklaması'nı seçin:
Uygulamanın kullanıcının HomeKit veritabanına neden erişmek istediğini açıklayan bir açıklama girin:
Dosyadaki değişiklikleri kaydedin.
Önemli
Dosyadaki anahtarın ayarlanamaması Info.plist
NSHomeKitUsageDescription
, iOS 10'da (veya daha büyük) çalıştırıldığında uygulamanın hatasız bir şekilde sessizce başarısız olmasına (çalışma zamanında sistem tarafından kapatılmasına) neden olur.
HomeKit'e Bağlan
HomeKit ile iletişim kurmak için Xamarin.iOS uygulamanızın önce sınıfının bir örneğini oluşturması HMHomeManager
gerekir. Home Manager, HomeKit'in merkezi giriş noktasıdır ve kullanılabilir evlerin listesini sağlamak, bu listeyi güncelleştirmek ve korumak ve kullanıcının Birincil Giriş'ini döndürmekle sorumludur.
HMHome
nesnesi, bir ev ile ilgili tüm bilgileri içerir; içerebileceği odalar, gruplar veya bölgeler ve yüklenmiş olan ev otomasyonu aksesuarları da dahil. HomeKit'te herhangi bir işlemin gerçekleştirilebilmesi için en az birinin HMHome
oluşturulması ve Birincil Giriş olarak atanması gerekir.
Uygulamanız Birincil Giriş'in var olup olmadığını denetlemek ve yoksa bir giriş oluşturup atamakla sorumludur.
Ev Yöneticisi Ekleme
Xamarin.iOS uygulamasına HomeKit farkındalığı eklemek için AppDelegate.cs dosyasını düzenleyerek düzenleyin ve aşağıdaki gibi görünmesini sağlayın:
using HomeKit;
...
public HMHomeManager HomeManager { get; set; }
...
public override void FinishedLaunching (UIApplication application)
{
// Attach to the Home Manager
HomeManager = new HMHomeManager ();
Console.WriteLine ("{0} Home(s) defined in the Home Manager", HomeManager.Homes.Count());
// Wire-up Home Manager Events
HomeManager.DidAddHome += (sender, e) => {
Console.WriteLine("Manager Added Home: {0}",e.Home);
};
HomeManager.DidRemoveHome += (sender, e) => {
Console.WriteLine("Manager Removed Home: {0}",e.Home);
};
HomeManager.DidUpdateHomes += (sender, e) => {
Console.WriteLine("Manager Updated Homes");
};
HomeManager.DidUpdatePrimaryHome += (sender, e) => {
Console.WriteLine("Manager Updated Primary Home");
};
}
Uygulama ilk kez çalıştırıldığında, kullanıcıya HomeKit bilgilerine erişmesine izin vermek isteyip istemediği sorulur:
Kullanıcı Tamam'ı yanıtlarsa, uygulama HomeKit Donatıları ile çalışabilir, aksi takdirde çalışmaz ve HomeKit'e yapılan çağrılar bir hatayla başarısız olur.
Ev Yöneticisi'nin hazır olmasıyla, uygulamanın bir Birincil Giriş'in yapılandırılıp yapılandırılmadığını görmesi ve yapılandırılmamışsa kullanıcının oluşturması ve ataması için bir yol sağlaması gerekir.
Birincil Girişe Erişme
Yukarıda belirtildiği gibi, HomeKit kullanılabilir duruma gelmeden önce bir Birincil Giriş oluşturulup yapılandırılmalıdır ve kullanıcının önceden mevcut değilse Birincil Giriş oluşturması ve ataması için bir yol sağlamak uygulamanın sorumluluğundadır.
Uygulamanız arka planda ilk kez başlatıldığında veya geri döndüğünde, Birincil Giriş'in HMHomeManager
varlığını denetlemek için sınıfın olayını izlemesi DidUpdateHomes
gerekir. Yoksa, kullanıcının oluşturması için bir arabirim sağlamalıdır.
Birincil Giriş'i denetlemek için bir görünüm denetleyicisine aşağıdaki kod eklenebilir:
using HomeKit;
...
public AppDelegate ThisApp {
get { return (AppDelegate)UIApplication.SharedApplication.Delegate; }
}
...
// Wireup events
ThisApp.HomeManager.DidUpdateHomes += (sender, e) => {
// Was a primary home found?
if (ThisApp.HomeManager.PrimaryHome == null) {
// Ask user to add a home
PerformSegue("AddHomeSegue",this);
}
};
Ev Yöneticisi HomeKit ile bağlantı kurarken olay DidUpdateHomes
tetiklenir, mevcut tüm evler yöneticinin ev koleksiyonuna yüklenir ve varsa Birincil Ev yüklenir.
Birincil Giriş Ekleme
özelliğinin PrimaryHome
HMHomeManager
bir olaydan sonra DidUpdateHomes
olması null
durumunda, devam etmeden önce kullanıcının Birincil Giriş oluşturması ve ataması için bir yol sağlamanız gerekir.
Genellikle uygulama, kullanıcının yeni bir ev adlandırması için bir form sunar ve ardından Birincil Giriş olarak ayarlamak üzere Ev Yöneticisi'ne geçirilir. HomeKitIntro örnek uygulaması için, Xcode Interface Builder'da kalıcı bir görünüm oluşturuldu ve uygulamanın ana arabiriminden segue tarafından AddHomeSegue
çağrıldı.
Kullanıcının yeni giriş için bir ad ve giriş ekleyebilmek için bir düğme girmesi için bir metin alanı sağlar. Kullanıcı Giriş Ekle düğmesine dokunduğunda, aşağıdaki kod giriş eklemek için Giriş Yöneticisi'ni çağırır:
// Add new home to HomeKit
ThisApp.HomeManager.AddHome(HomeName.Text,(home,error) =>{
// Did an error occur
if (error!=null) {
// Yes, inform user
AlertView.PresentOKAlert("Add Home Error",string.Format("Error adding {0}: {1}",HomeName.Text,error.LocalizedDescription),this);
return;
}
// Make the primary house
ThisApp.HomeManager.UpdatePrimaryHome(home,(err) => {
// Error?
if (err!=null) {
// Inform user of error
AlertView.PresentOKAlert("Add Home Error",string.Format("Unable to make this the primary home: {0}",err.LocalizedDescription),this);
return ;
}
});
// Close the window when the home is created
DismissViewController(true,null);
});
AddHome
yöntemi yeni giriş oluşturmayı ve verilen geri çağırma yordamına döndürmeyi dener. error
özelliği değilsenull
, bir hata oluştu ve kullanıcıya sunulmalı. En yaygın hatalar, benzersiz olmayan bir giriş adından veya Home Manager'ın HomeKit ile iletişim kuramamasından kaynaklanıyor.
Ev başarıyla oluşturulduysa, yeni evi Birincil Giriş olarak ayarlamak için yöntemini çağırmanız UpdatePrimaryHome
gerekir. Yine özelliği değilse error
null
bir hata oluştu ve kullanıcıya sunulmalı.
Ayrıca Home Manager'ın ve olaylarını DidAddHome
izlemeli ve DidRemoveHome
uygulamanın kullanıcı arabirimini gerektiği gibi güncelleştirmelisiniz.
Önemli
AlertView.PresentOKAlert
Yukarıdaki örnek kodda kullanılan yöntem, HomeKitIntro uygulamasında iOS Uyarıları ile çalışmayı kolaylaştıran bir yardımcı sınıftır.
Yeni Aksesuarlar Bulma
Birincil Ev tanımlandıktan veya Home Manager'dan yüklendikten sonra, Xamarin.iOS uygulamanız yeni ev otomasyonu donatılarını bulmak ve bunları bir eve eklemek için öğesini çağırabilir HMAccessoryBrowser
.
StartSearchingForNewAccessories
Yeni donatıları aramaya başlamak için yöntemini ve bittiğinde yöntemi çağırınStopSearchingForNewAccessories
.
Önemli
StartSearchingForNewAccessories
iOS cihazının hem pil ömrünü hem de performansını olumsuz etkileyeceğinden uzun süre çalışır durumda bırakılmamalıdır. Apple, bir dakika sonra veya StopSearchingForNewAccessories
yalnızca Kullanıcıya Aksesuar Bul kullanıcı arabirimi sunulduğunda arama yapmanızı önerir.
Olay DidFindNewAccessory
, yeni aksesuarlar bulunduğunda çağrılır ve Aksesuar Tarayıcısı'ndaki listeye eklenir DiscoveredAccessories
.
Liste, DiscoveredAccessories
HomeKit özellikli bir ev otomasyonu cihazı ve ışıklar veya garaj kapısı denetimi gibi kullanılabilir hizmetlerini tanımlayan bir nesne koleksiyonu HMAccessory
içerir.
Yeni aksesuar bulunduktan sonra kullanıcıya sunulmalı ve böylece bunu seçip bir eve ekleyebilmeleri gerekir. Örnek:
Seçili aksesuarı AddAccessory
evin koleksiyonuna eklemek için yöntemini çağırın. Örneğin:
// Add the requested accessory to the home
ThisApp.HomeManager.PrimaryHome.AddAccessory (_controller.AccessoryBrowser.DiscoveredAccessories [indexPath.Row], (err) => {
// Did an error occur
if (err !=null) {
// Inform user of error
AlertView.PresentOKAlert("Add Accessory Error",err.LocalizedDescription,_controller);
}
});
err
özelliği değilsenull
, bir hata oluştu ve kullanıcıya sunulmalı. Aksi takdirde kullanıcıdan cihazın ekleneceği kurulum kodunu girmesi istenir:
HomeKit Donatı Simülatörü'nde bu numara Kurulum Kodu alanında bulunabilir:
Gerçek HomeKit aksesuarları için kurulum kodu cihazın üzerindeki bir etikete, ürün kutusuna veya aksesuarın kullanım kılavuzuna yazdırılır.
Aksesuar Tarayıcısı'nın DidRemoveNewAccessory
olayını izlemeniz ve kullanıcı, bir aksesuarı Ev Koleksiyonuna ekledikten sonra kullanılabilir listeden kaldırmak için kullanıcı arabirimini güncelleştirmeniz gerekir.
Aksesuarlarla Çalışma
Birincil Ev kurulduktan ve donatılar eklendikten sonra, kullanıcının birlikte çalışacağı aksesuarların (ve isteğe bağlı odaların) listesini sunabilirsiniz.
Nesne, HMRoom
belirli bir oda ve ona ait tüm aksesuarlar hakkındaki tüm bilgileri içerir. Odalar isteğe bağlı olarak bir veya daha fazla bölgede düzenlenebilir. , HMZone
belirli bir bölge ve bu bölgeye ait tüm odalar hakkındaki tüm bilgileri içerir.
Bu örnek için, işleri basit tutacağız ve ev aksesuarlarıyla doğrudan çalışmak yerine bunları odalara veya bölgelere böleceğiz.
nesnesi, HMHome
özelliğinde Accessories
kullanıcıya sunulabilecek atanmış aksesuarın listesini içerir. Örneğin:
Burada, kullanıcı belirli bir aksesuarı seçebilir ve sağladığı hizmetlerle çalışabilir.
Hizmetlerle Çalışma
Kullanıcı belirli bir HomeKit özellikli ev otomasyonu cihazıyla etkileşime geçtiğinde, genellikle sağladığı hizmetler aracılığıyla olur. Services
sınıfının özelliğiHMAccessory
, bir cihazın sunduğu hizmetleri tanımlayan bir nesne koleksiyonu HMService
içerir.
Hizmetler ışıklar, termostatlar, garaj kapısı açıcıları, anahtarlar veya kilitler gibi öğelerdir. Bazı cihazlar (garaj kapısı açıcı gibi) ışık ve bir kapıyı açma veya kapatma gibi birden fazla hizmet sağlar.
Belirli bir aksesuarın sağladığı belirli hizmetlere ek olarak, her aksesuar Ad, Üretici, Model ve Seri Numarası gibi özellikleri tanımlayan bir Information Service
içerir.
Aksesuar Hizmet Türleri
Aşağıdaki Hizmet Türleri sabit listesi aracılığıyla HMServiceType
kullanılabilir:
- AccessoryInformation - Verilen ev otomasyon cihazı (aksesuar) hakkında bilgi sağlar.
- AirQualitySensor - Bir hava kalitesi sensörü tanımlar.
- Pil - Aksesuar pilinin durumunu tanımlar.
- CarbonDioxideSensor - Bir karbonDioksit Sensörü tanımlar.
- CarbonMonoxideSensor - Bir Karbon Monoksit Algılayıcısı tanımlar.
- ContactSensor - Kişi algılayıcısı (açılan veya kapatılan pencere gibi) tanımlar.
- Kapı - Bir kapı durumu algılayıcısı (açık veya kapalı gibi) tanımlar.
- Fan - Uzaktan kumandalı bir fan tanımlar.
- GarageDoorOpener - Garaj kapısı açıcısını tanımlar.
- HumiditySensor - Nem algılayıcısı tanımlar.
- LeakSensor - Bir sızıntı sensörü tanımlar (sıcak su ısıtıcısı veya çamaşır makinesi gibi).
- Ampul - Tek başına bir ışık veya başka bir aksesuarın parçası olan bir ışık (garaj kapısı açıcı gibi) tanımlar.
- LightSensor - Bir ışık algılayıcısı tanımlar.
- LockManagement - Otomatik kapı kilidini yöneten bir hizmet tanımlar.
- LockMechanism - Uzaktan kumandalı kilit (kapı kilidi gibi) tanımlar.
- MotionSensor - Hareket algılayıcısı tanımlar.
- OccupancySensor - Bir doluluk algılayıcısı tanımlar.
- Çıkış - Uzaktan kumandalı bir priz tanımlar.
- SecuritySystem - Bir ev güvenlik sistemi tanımlar.
- StatefulProgrammableSwitch - Tetiklendiğinde verme durumunda (çevirme anahtarı gibi) kalan programlanabilir bir anahtar tanımlar.
- StatelessProgrammableSwitch - Tetiklendikten sonra ilk durumuna geri dönen programlanabilir bir anahtar tanımlar (anında iletme düğmesi gibi).
- SmokeSensor - Duman algılayıcısı tanımlar.
- Anahtar - Standart duvar anahtarı gibi bir açma/kapatma anahtarı tanımlar.
- TemperatureSensor - Sıcaklık algılayıcısı tanımlar.
- Termostat - HVAC sistemini kontrol etmek için kullanılan akıllı bir termostat tanımlar.
- Pencere - Uzaktan açılabilir veya kapatılabilir otomatik bir pencere tanımlar.
- WindowCovering - Açılabilir veya kapatılabilir perdeler gibi uzaktan denetlenen bir pencere kaplaması tanımlar.
Hizmet Bilgilerini Görüntüleme
Yükledikten HMAccessory
sonra sağladığı nesneleri tek tek HNService
sorgulayabilir ve bu bilgileri kullanıcıya görüntüleyebilirsiniz:
Ile çalışmaya çalışmadan önce her zaman özelliğini HMAccessory
denetlemeniz Reachable
gerekir. Bir aksesuara ulaşılamıyor olabilir ve kullanıcının cihazın aralığında olmaması veya cihazın fişinin takılı olmaması olabilir.
Bir hizmet seçildikten sonra, kullanıcı belirli bir ev otomasyonu cihazını izlemek veya denetlemek için bu hizmetin bir veya daha fazla özelliğini görüntüleyebilir veya değiştirebilir.
Özelliklerle Çalışma
Her HMService
nesne, hizmetin durumu hakkında bilgi sağlayan (açılan veya kapatılan bir kapı gibi) veya kullanıcının durumu ayarlamasına (ışığın rengini ayarlama gibi) izin veren bir nesne koleksiyonu HMCharacteristic
içerebilir.
HMCharacteristic
yalnızca bir özellik ve durumu hakkında bilgi sağlamakla kalmaz, aynı zamanda Özellik Meta Verileri (HMCharacteristisMetadata
) aracılığıyla durumla çalışmaya yönelik yöntemler de sağlar. Bu meta veriler, kullanıcıya bilgi görüntülerken veya durumları değiştirmelerine izin verirken yararlı olan özellikler (en düşük ve en yüksek değer aralıkları gibi) sağlayabilir.
sabit HMCharacteristicType
listesi, aşağıdaki gibi tanımlanabilir veya değiştirilebilen bir Dizi Karakteristik Meta Veri değeri sağlar:
- Yönetici OnlyAccess
- AirParticulateDensity
- AirParticulateSize
- AirQuality
- AudioFeedback
- BatteryLevel
- Parlak -lık
- CarbonDioxide Algılandı
- CarbonDioxideLevel
- CarbonDioxidePeakLevel
- CarbonMonoxide Algılandı
- CarbonMonoxideLevel
- CarbonMonoxidePeakLevel
- ChargingState
- ContactState
- CoolingThreshold
- CurrentDoorState
- CurrentHeatingCooling
- CurrentHorizontalTilt
- CurrentLightLevel
- CurrentLockMechanismState
- Currentposition
- CurrentRelativeHumidity
- CurrentSecuritySystemState
- CurrentTemperature
- CurrentVerticalTilt
- FirmwareVersion
- HardwareVersion
- HeatingCoolingStatus
- HeatingThreshold
- HoldPosition
- Ton
- Tanımla
- InputEvent
- Sızıntı Algılandı
- LockManagementAutoSecureTimeout
- LockManagementControlPoint
- LockMechanismLastKnownAction
- Günlükler
- Üretici
- Model
- Hareket Algılandı
- Veri Akışı Adı
- Engel Algılandı
- Doluluk Algılandı
- OutletInUse
- OutputState
- PositionState
- PowerState
- RotationDirection
- RotationSpeed
- Doygun -luk
- SerialNumber
- Duman Algılandı
- SoftwareVersion
- StatusActive
- StatusFault
- StatusJammed
- StatusLowBattery
- StatusTampered
- TargetDoorState
- TargetHeatingCooling
- TargetHorizontalTilt
- TargetLockMechanismState
- TargetPosition
- TargetRelativeHumidity
- TargetSecuritySystemState
- TargetTemperature
- TargetVerticalTilt
- TemperatureUnits
- Sürüm
Bir Özelliğin Değeriyle Çalışma
Uygulamanızın belirli bir özelliğin en son durumuna sahip olduğundan emin olmak için sınıfının yöntemini çağırın ReadValue
HMCharacteristic
. err
özelliği değilsenull
, bir hata oluştu ve kullanıcıya sunulabilir veya sunulmayabilir.
Özelliği Value
, verilen özelliğin geçerli durumunu olarak NSObject
içerir ve bu nedenle doğrudan C# ile çalışılamaz.
Değeri okumak için HomeKitIntro örnek uygulamasına aşağıdaki yardımcı sınıf eklendi:
using System;
using Foundation;
using System.Globalization;
using CoreGraphics;
namespace HomeKitIntro
{
/// <summary>
/// NS object converter is a helper class that helps to convert NSObjects into
/// C# objects
/// </summary>
public static class NSObjectConverter
{
#region Static Methods
/// <summary>
/// Converts to an object.
/// </summary>
/// <returns>The object.</returns>
/// <param name="nsO">Ns o.</param>
/// <param name="targetType">Target type.</param>
public static Object ToObject (NSObject nsO, Type targetType)
{
if (nsO is NSString) {
return nsO.ToString ();
}
if (nsO is NSDate) {
var nsDate = (NSDate)nsO;
return DateTime.SpecifyKind ((DateTime)nsDate, DateTimeKind.Unspecified);
}
if (nsO is NSDecimalNumber) {
return decimal.Parse (nsO.ToString (), CultureInfo.InvariantCulture);
}
if (nsO is NSNumber) {
var x = (NSNumber)nsO;
switch (Type.GetTypeCode (targetType)) {
case TypeCode.Boolean:
return x.BoolValue;
case TypeCode.Char:
return Convert.ToChar (x.ByteValue);
case TypeCode.SByte:
return x.SByteValue;
case TypeCode.Byte:
return x.ByteValue;
case TypeCode.Int16:
return x.Int16Value;
case TypeCode.UInt16:
return x.UInt16Value;
case TypeCode.Int32:
return x.Int32Value;
case TypeCode.UInt32:
return x.UInt32Value;
case TypeCode.Int64:
return x.Int64Value;
case TypeCode.UInt64:
return x.UInt64Value;
case TypeCode.Single:
return x.FloatValue;
case TypeCode.Double:
return x.DoubleValue;
}
}
if (nsO is NSValue) {
var v = (NSValue)nsO;
if (targetType == typeof(IntPtr)) {
return v.PointerValue;
}
if (targetType == typeof(CGSize)) {
return v.SizeFValue;
}
if (targetType == typeof(CGRect)) {
return v.RectangleFValue;
}
if (targetType == typeof(CGPoint)) {
return v.PointFValue;
}
}
return nsO;
}
/// <summary>
/// Convert to string
/// </summary>
/// <returns>The string.</returns>
/// <param name="nsO">Ns o.</param>
public static string ToString(NSObject nsO) {
return (string)ToObject (nsO, typeof(string));
}
/// <summary>
/// Convert to date time
/// </summary>
/// <returns>The date time.</returns>
/// <param name="nsO">Ns o.</param>
public static DateTime ToDateTime(NSObject nsO){
return (DateTime)ToObject (nsO, typeof(DateTime));
}
/// <summary>
/// Convert to decimal number
/// </summary>
/// <returns>The decimal.</returns>
/// <param name="nsO">Ns o.</param>
public static decimal ToDecimal(NSObject nsO){
return (decimal)ToObject (nsO, typeof(decimal));
}
/// <summary>
/// Convert to boolean
/// </summary>
/// <returns><c>true</c>, if bool was toed, <c>false</c> otherwise.</returns>
/// <param name="nsO">Ns o.</param>
public static bool ToBool(NSObject nsO){
return (bool)ToObject (nsO, typeof(bool));
}
/// <summary>
/// Convert to character
/// </summary>
/// <returns>The char.</returns>
/// <param name="nsO">Ns o.</param>
public static char ToChar(NSObject nsO){
return (char)ToObject (nsO, typeof(char));
}
/// <summary>
/// Convert to integer
/// </summary>
/// <returns>The int.</returns>
/// <param name="nsO">Ns o.</param>
public static int ToInt(NSObject nsO){
return (int)ToObject (nsO, typeof(int));
}
/// <summary>
/// Convert to float
/// </summary>
/// <returns>The float.</returns>
/// <param name="nsO">Ns o.</param>
public static float ToFloat(NSObject nsO){
return (float)ToObject (nsO, typeof(float));
}
/// <summary>
/// Converts to double
/// </summary>
/// <returns>The double.</returns>
/// <param name="nsO">Ns o.</param>
public static double ToDouble(NSObject nsO){
return (double)ToObject (nsO, typeof(double));
}
#endregion
}
}
NSObjectConverter
, uygulamanın bir özelliğin geçerli durumunu okuması gerektiğinde kullanılır. Örneğin:
var value = NSObjectConverter.ToFloat (characteristic.Value);
Yukarıdaki satır değeri, daha sonra Xamarin C# kodunda kullanılabilecek bir float
değerine dönüştürür.
değiştirmek HMCharacteristic
için yöntemini çağırın WriteValue
ve yeni değeri bir NSObject.FromObject
çağrıya sarmalar. Örneğin:
Characteristic.WriteValue(NSObject.FromObject(value),(err) =>{
// Was there an error?
if (err!=null) {
// Yes, inform user
AlertView.PresentOKAlert("Update Error",err.LocalizedDescription,Controller);
}
});
err
özelliği değilsenull
, bir hata oluştu ve kullanıcıya sunulmalı.
Özellik Değeri Değişikliklerini Test Etme
Aksesuarlarla ve simülasyon aksesuarlarıyla HMCharacteristics
çalışırken, özellikte yapılan değişiklikler Value
HomeKit Donatı Simülatörü içinde izlenebilir.
HomeKitIntro uygulaması gerçek iOS Cihaz Donanımı üzerinde çalışırken, bir özelliğin değerinde yapılan değişiklikler HomeKit Donatı Simülatörü'nde neredeyse anında görülmelidir. Örneğin, iOS uygulamasında ışığın durumunu değiştirme:
HomeKit Aksesuar Simülatörü'nde ışığın durumunu değiştirmelidir. Değer değişmezse, yeni özellik değerleri yazarken hata iletisinin durumunu denetleyin ve aksesuara hala ulaşılabilir olduğundan emin olun.
Gelişmiş HomeKit Özellikleri
Bu makalede, Xamarin.iOS uygulamasında HomeKit donatılarıyla çalışmak için gereken temel özellikler ele alınmıştır. Ancak, HomeKit'in bu girişte ele alınmayan birkaç gelişmiş özelliği vardır:
- Odalar - HomeKit özellikli aksesuarlar isteğe bağlı olarak son kullanıcı tarafından odalar halinde düzenlenebilir. Bu, HomeKit'in aksesuarları kullanıcının anlaması ve çalışması kolay bir şekilde sunmasını sağlar. Oda oluşturma ve bakımını yapma hakkında daha fazla bilgi için Apple'ın HMRoom belgelerine bakın.
- Bölgeler - Odalar isteğe bağlı olarak son kullanıcı tarafından bölgeler halinde düzenlenebilir. Bölge, kullanıcının tek bir birim olarak değerlendirebileceği oda koleksiyonunu ifade eder. Örneğin: Üst Kat, Alt Kat veya Bodrum. Bu da HomeKit'in son kullanıcıya anlamlı bir şekilde aksesuarlar sunmasını ve aksesuarlarla çalışmasını sağlar. Bölgeleri oluşturma ve koruma hakkında daha fazla bilgi için Apple'ın HMZone belgelerine bakın.
- Eylemler ve Eylem Kümeleri - Eylemler aksesuar hizmeti özelliklerini değiştirir ve kümeler halinde gruplandırılabilir. Eylem Kümeleri, bir aksesuar grubunu denetlemek ve eylemlerini koordine etmek için betik görevi görür. Örneğin, "TV İzle" betiği perdeleri kapatabilir, ışıkları karartabilir ve televizyonu ve ses sistemini açabilir. Eylemleri ve Eylem Kümelerini oluşturma ve sürdürme hakkında daha fazla bilgi için Apple'ın HMAction ve HMActionSet belgelerine bakın.
- Tetikleyiciler - Bir tetikleyici, belirli bir koşul kümesi karşılandığında bir veya daha fazla Eylem Kümesini etkinleştirebilir. Örneğin, bağlantı noktası ışığını açın ve dışarısı karardığında tüm dış kapıları kilitleyin. Tetikleyici oluşturma ve koruma hakkında daha fazla bilgi için Apple'ın HMTrigger belgelerine bakın.
Bu özellikler yukarıda sunulan tekniklerin aynısını kullandığından, Apple'ın HomeKitDeveloper Kılavuzu, HomeKit Kullanıcı Arabirimi Yönergeleri ve HomeKit Framework Başvurusu'nu izleyerek kolayca uygulanmalıdır.
HomeKit Uygulaması Gözden Geçirme Yönergeleri
HomeKit özellikli bir Xamarin.iOS uygulamasını iTunes App Store'da yayımlanmak üzere iTunes Bağlan göndermeden önce Apple'ın HomeKit özellikli uygulamalarla ilgili yönergelerine uyduğunuzdan emin olun:
- HomeKit çerçevesi kullanılıyorsa uygulamanın birincil amacı ev otomasyonu olmalıdır .
- Uygulamanın pazarlama metni, HomeKit'in kullanıldığını kullanıcılara bildirmeli ve bir gizlilik ilkesi sağlamalıdır.
- Kullanıcı bilgilerini toplamak veya HomeKit'i reklam için kullanmak kesinlikle yasaktır.
Tam inceleme yönergeleri için lütfen Apple'ın App Store Gözden Geçirme Yönergeleri'ne bakın.
iOS 9'daki Yenilikler
Apple, iOS 9 için HomeKit'e aşağıdaki değişiklikleri ve eklemeleri yaptı:
- Mevcut Nesneleri Koruma - Mevcut bir aksesuar değiştirilirse, Ev Yöneticisi (
HMHomeManager
) değiştirilen belirli öğeyi size bildirir. - Kalıcı Tanımlayıcılar - Tüm ilgili HomeKit sınıfları artık HomeKit özellikli uygulamalarda (veya aynı uygulamanın örneklerinde) belirli bir öğeyi benzersiz olarak tanımlamak için bir özellik içeriyor
UniqueIdentifier
. - Kullanıcı Yönetimi - Birincil kullanıcının evindeki HomeKit cihazlarına erişimi olan kullanıcılar üzerinde kullanıcı yönetimi sağlamak için yerleşik bir görünüm denetleyicisi eklendi.
- Kullanıcı Özellikleri - HomeKit kullanıcıları artık HomeKit ve HomeKit özellikli aksesuarlarda hangi işlevleri kullanabileceklerini denetleyebilen bir ayrıcalık kümesine sahiptir. Uygulamanız yalnızca geçerli kullanıcıya uygun özellikleri görüntülemelidir. Örneğin, yalnızca bir yöneticinin diğer kullanıcıları koruyabilmesi gerekir.
- Önceden Tanımlanmış Sahneler - Ortalama HomeKit kullanıcısı için gerçekleşen dört yaygın olay için önceden tanımlanmış sahneler oluşturulmuştur: Kalk, Ayrıl, Dön, Yatağa Git. Önceden tanımlanmış bu sahneler bir evden silinemez.
- Sahneler ve Siri - Siri, iOS 9'da Sahneler için daha derin desteğe sahiptir ve HomeKit'te tanımlanan herhangi bir Sahnenin adını tanıyabilir. Kullanıcı, siri ile adını konuşarak bir sahneyi yürütebilir.
- Aksesuar Kategorileri - Tüm Aksesuarlara önceden tanımlanmış bir kategori kümesi eklenmiştir ve bir Giriş'e eklenen veya uygulamanızın içinden üzerinde çalışılan Aksesuar türünü tanımlamaya yardımcı olur. Bu yeni kategoriler Aksesuar kurulumu sırasında kullanılabilir.
- Apple Watch Desteği - HomeKit artık watchOS için kullanılabilir ve Apple Watch, i Telefon saatin yakınında olmadan HomeKit özellikli cihazları denetleyebilecek. watchOS için HomeKit şu özellikleri destekler: Evleri Görüntüleme, Aksesuarları Denetleme ve Sahneleri Yürütme.
- Yeni Olay TetikleyiciSi Türü - iOS 8'de desteklenen zamanlayıcı türü tetikleyicilerine ek olarak, iOS 9 artık Donatı Durumuna (algılayıcı verileri gibi) veya coğrafi konum temelinde Olay Tetikleyicilerini destekliyor. Olay Tetikleyicileri, yürütme koşulları ayarlamak için kullanır
NSPredicates
. - Uzaktan Erişim - Uzaktan Erişim sayesinde kullanıcı artık EvKit özellikli Ev Otomasyonu Donatılarını uzak bir konumda evden uzaktayken denetleyebiliyor. iOS 8'de bu yalnızca kullanıcının evde 3. nesil bir Apple TV'ye sahip olduğu durumlarda destekleniyordu. iOS 9'da bu sınırlama kaldırılır ve iCloud ve HomeKit Aksesuar Protokolü (HAP) aracılığıyla uzaktan erişim desteklenir.
- Yeni Bluetooth Düşük Enerji (BLE) Yetenekleri - HomeKit artık Bluetooth Düşük Enerji (BLE) protokolü aracılığıyla iletişim kurabilen daha fazla aksesuar türünü destekliyor. HAP Secure Tunneling kullanarak HomeKit Accessory, Wi-Fi üzerinden başka bir Bluetooth Aksesuarını kullanıma açabilir (Bluetooth aralığının dışındaysa). iOS 9'da BLE Donatıları bildirimler ve meta veriler için tam desteğe sahiptir.
- Yeni Aksesuar Kategorileri - Apple, iOS 9'da şu yeni Aksesuar Kategorilerini ekledi: Pencere Kaplamaları, Motorlu Kapılar ve Pencereler, Alarm Sistemleri, Algılayıcılar ve Programlanabilir Anahtarlar.
iOS 9'da HomeKit'in yeni özellikleri hakkında daha fazla bilgi için lütfen Apple'ın HomeKit Dizini ve HomeKit'teki Yenilikler videosuna bakın.
Özet
Bu makalede Apple'ın HomeKit ev otomasyonu çerçevesi tanıtılmıştır. HomeKit Donatı Simülatörü'ni kullanarak test cihazlarını ayarlama ve yapılandırma ve HomeKit kullanarak ev otomasyonu cihazlarını keşfetmek, iletişim kurmak ve denetlemek için basit bir Xamarin.iOS uygulamasının nasıl oluşturulacağını gösterdi.