Xamarin.iOS'ta HomeKit
HomeKit, Apple'ın ev otomasyonu cihazlarını denetleme çerçevesidir. Bu makale HomeKit'i tanıtır ve HomeKit Accessory Simulator'da test donatılarını yapılandırmayı ve bu donatılarla etkileşim kurmak için basit bir Xamarin.iOS uygulaması yazmayı kapsar.
Apple, çeşitli satıcılardan gelen birden çok ev otomasyonu cihazlarını tek ve tutarlı birimde sorunsuz bir şekilde tümleştirebilecek bir yol olarak iOS 8'de HomeKit'i tanıtmıştır. HomeKit, ev otomasyonu cihazlarını keşfetmeye, yapılandırmaya ve denetlemeye yönelik ortak bir protokolün tanıtarak, ilgili olmayan satıcıların cihazlarının birlikte çalışmasına olanak tanır ve tüm bunların tek tek satıcıların çabalarını koordine etmek zorunda kalmadan çalışmasına olanak tanır.
HomeKit ile, satıcı tarafından sağlanan API'leri veya uygulamaları kullanmadan HomeKit özellikli herhangi bir cihazı kontrol eden bir Xamarin.iOS uygulaması oluşturabilirsiniz. HomeKit kullanarak şunları yapabilirsiniz:
- Yeni HomeKit özellikli 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ı kurma, yapılandırma, görüntüleme ve denetleme.
- Önceden yapılandırılmış herhangi bir HomeKit cihazıyla iletişim kurarak tek tek eylemleri gerçekleştirmeleri veya mutfak ışıklarını açma gibi birlikte çalışmalarını komut edin.
HomeKit, Ev Yapılandırma Veritabanı'nda cihazları HomeKit özellikli uygulamalara sunan cihazlara ek olarak Siri sesli komutlarına erişim sağlar. Uygun şekilde yapılandırılmış bir HomeKit kurulumuyla, kullanıcı "Siri, canlı odada lambayı aç" gibi sesli komutlar verebiliyor.
Giriş Yapılandırma Veritabanı
HomeKit, verilen bir konumdaki tüm otomasyon cihazlarını bir Ev Koleksiyonunda organize ediyor. Bu koleksiyon, kullanıcının ev otomasyonu cihazlarını anlamlı, insanlar tarafından okunabilir etiketlerle mantıksal olarak düzenlenmiş birimlerde grup oluşturması için bir yol sağlar.
Giriş Koleksiyonu, kullanıcının tüm iOS cihazlarında otomatik olarak desteklenen ve eşitlenen bir Ev Yapılandırma Veritabanı'da depolanır. HomeKit, Giriş Yapılandırma Veritabanı ile çalışmak için aşağıdaki sınıfları sağlar:
HMHome- Bu, tüm ev otomasyonu cihazlarına ilişkin tüm bilgileri ve yapılandırmaları tek bir fiziksel konumda tutan üst düzey kapsayıcıdır (örneğin, tek bir aile yanız). Kullanıcının ana evi ve tatil evi gibi birden fazla ev olabilir. Veya ana ev ve evin üzerinde konuk evi gibi aynı özellikte farklı "evlere" sahip olabilir. Her iki durumda da, diğerHMHomeHomeKit bilgileriHMHomegirimeden önce en az bir nesnenin ayarlanmış ve depolanmış olması gerekir.HMRoom- İsteğe bağlı olarak, kullanıcının bir ev içinde ( ) şöyle belirli odaları tanımlamalarınıHMRoomHMHomesağlar: Mutfak, Mutfak, Mutfak veya Yaşam Odası. Kullanıcı, tüm ev otomasyonu cihazlarını kendi evlerinde belirli bir konumda bir olarak gruplayabilir ve birHMRoombirim olarak bu cihazlara göre hareket ediyor olabilir. Örneğin Siri'den turna ışıklarını kapatmalarını isteme.HMAccessory- Bu, kullanıcının cihazında (akıllı termostat gibi) yüklenmiş bireysel, fiziksel HomeKit özellikli bir otomasyon cihazı temsil eder. HerHMAccessorybiri bir 'aHMRoomatanır. Kullanıcı hiçbir oda yapılandırmamışsa HomeKit, özel bir varsayılan odaya accessories atar.HMService- Açık/kapalı durumu veya rengi (renk değişikliği destek veriliyorsa) gibi belirli bir tarafından sağlananHMAccessorybir hizmeti temsil eder. Her biri, bir ışık içeren bir açık kapı açıcı gibiHMAccessorybirden fazla hizmete sahip olabilir. Buna ek olarak,HMAccessorybelirli bir kullanıcının denetimi dışında olan üretici yazılımı güncelleştirmesi gibi hizmetleri olabilir.HMZone- Kullanıcının bir nesne koleksiyonunu Yalıtma, Aşağı Yasla veya Mücadele gibiHMRoommantıksal bölgelere gruplaymalarına izin verir. İsteğe bağlı olarak, siri'den tüm ışık aşağı atlarını kapatması gibi etkileşimlere olanak sağlar.
HomeKit Uygulaması Sağlama
HomeKit tarafından dayatılan güvenlik gereksinimleri nedeniyle, HomeKit çerçevesini kullanan bir Xamarin.iOS uygulamasının hem Apple Geliştirici Portalı hem de Xamarin.iOS proje dosyasında düzgün yapılandırılması gerekir.
Şunları yapın:
AppleGeliştirici Portalı.
Sertifikalar, Tanımlayıcılar Profilleri'ne tıklayın.
Henüz bunu yapmadıysanız Tanımlayıcılar'a tıklayın ve uygulama için bir kimlik oluşturun (ör. ), yoksa mevcut kimliğinizi düzenleyin.
HomeKit hizmetinin verilen kimlik için denetlen olduğundan emin olun:
Yaptığınız değişiklikleri kaydedin.
Sağlama Profilleri Geliştirme'yetıklayın ve uygulamanıza yeni bir geliştirme sağlama profili oluşturun:
Yeni sağlama profilini indirip yükleyin veya profili indirip yüklemek için Xcode kullanın.
Xamarin.iOS proje seçeneklerinizi düzenleyin ve yeni oluşturduğunuz sağlama profilini kullanmaya devam etmek için:
Ardından Info.plist dosyanızı düzenleyin ve sağlama profilini oluşturmak için kullanılan Uygulama Kimliğini kullanmaya devam edin:
Son olarak, Entitlements.plist dosyanızı düzenleyin ve HomeKit yetkilendirmesi'nin 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 Uygulamalarınızı Sağlama ve Cihaz Sağlama kılavuzlarımıza bakın.
Önemli
HomeKit özellikli bir uygulamayı test etmek için geliştirme için düzgün bir şekilde sağlanan gerçek bir iOS cihazı gerekir. HomeKit, iOS Simülatöründen test edilebilir.
The HomeKit Accessory Simulator
Apple, fiziksel cihaza sahip olmak zorunda kalmadan tüm olası ev otomasyonu cihazlarını ve hizmetlerini test etmek için HomeKit Accessory Simulator'ı oluşturdu. Bu simülatörü kullanarak, sanal HomeKit cihazları kurabilirsiniz 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.
Şunları yapın:
Bir web tarayıcısında Apple Geliştiricileri için İndirmeler sayfasını ziyaret edin
Xcode xxx için Ek Araçlar'ı indirin (burada xxx, yüklü Xcode sürümüdür):
Disk görüntüsünü açın ve araçları Applications dizininize yükleyin.
HomeKit Accessory Simulator yüklendikten sonra test için sanal donatılar oluşturulabilir.
Sanal Donatılar Oluşturma
HomeKit Accessory Simulator'i başlatmak ve birkaç sanal donatı oluşturmak için şunları yapın:
Uygulamalar klasöründen HomeKit Accessory Simulator'i açın:
Düğmesine tıklayın + ve Yeni +
Yeni erişimciyle ilgili 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ıklar ve gerekli ayarları yapılandırarak bir hizmet için isteğe bağlı özellikler sebilirsiniz:
HomeKit'in desteklediği her sanal ev otomasyon cihazı türünden birini oluşturmak için yukarıdaki adımları tekrarlayın.
Bazı örnek sanal HomeKit donatıları oluşturularak ve yapılandırıldığında, artık bu cihazları Xamarin.iOS uygulamanıza kullanabilir ve kontrol edersiniz.
Info.plist Dosyasını Yapılandırma
iOS 10 (ve daha yeni) için yeni olan geliştiricinin, anahtarı uygulamanın dosyasına eklemesi ve uygulamanın kullanıcının HomeKit veritabanına neden erişmek istediğini bildiren bir dize NSHomeKitUsageDescriptionInfo.plist sağlaması gerekir. Bu dize, uygulamayı ilk kez çalıştıran kullanıcıya sunulacak:
Bu anahtarı ayarlamak için şunları yapın:
Dosyanın düzenleme
Info.plistiçinInfo.plistÇözüm Gezgini çift tıklayın.Ekranın alt kısmında Kaynak görünümüne geçişin.
Listeye yeni bir Giriş ekleyin.
Açılan listeden Gizlilik - HomeKit Kullanım Açıklaması'ı seçin:
Uygulamanın kullanıcının HomeKit veritabanına neden erişmek istediğini görmek için bir açıklama girin:
Dosyadaki değişiklikleri kaydedin.
Önemli
Dosyadaki anahtarı ayarlama hatası NSHomeKitUsageDescriptionInfo.plist , iOS 10 ' da (veya üzeri) çalıştırıldığında hata olmadan uygulamanın NSHomeKitUsageDescription neden olur (çalışma zamanında sistem tarafından kapatılıyor).
HomeKit 'e bağlanma
HomeKit ile iletişim kurmak için, Xamarin. iOS uygulamanızın sınıfının bir örneğini örneği oluşturmanız gerekir HMHomeManager . Ana Yönetici, HomeKit ' e bir merkezi giriş noktasıdır ve kullanılabilir evlerin bir listesini sağlamaktan, bu listenin güncelleştirilmesi ve saklanması ve kullanıcının birincil evsinidöndürmesinden sorumludur.
HMHomeNesnesi, yüklenmiş herhangi bir giriş otomasyon donatılarıyla birlikte, içerebileceği tüm odalar, gruplar veya bölgeler dahil olmak üzere bir giriş hakkındaki tüm bilgileri içerir. HomeKit içinde herhangi bir işlem yapılmadan önce, en az bir tane HMHome oluşturulmalı ve birincil giriş olarak atanmalıdır.
Uygulamanız, birincil bir evin mevcut olup olmadığını ve yoksa bir tane oluşturup atamayı denetmaktan sorumludur.
Giriş Yöneticisi ekleme
Bir Xamarin. iOS uygulamasına HomeKit tanıma eklemek için Appdelegate. cs dosyasını düzenleyerek bunu 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 çalıştırıldığında, kullanıcıya HomeKit bilgilerine erişmesine izin vermek isteyip istemediğiniz sorulur:
Kullanıcının Tamamyanıtı varsa, uygulama HomeKit donatılarıyla birlikte çalışabilir, aksi takdirde bir hata ile başarısız olur.
Giriş yöneticisiyle birlikte, uygulamanın bir birincil ana evin yapılandırılıp yapılandırılmadığını bilmesi ve yoksa, kullanıcının bir tane oluşturup atayabilmesi için bir yol sağlayın.
Birincil ana girişe erişme
Yukarıda belirtildiği gibi, HomeKit kullanılabilir hale gelmeden önce birincil ana giriş oluşturulup yapılandırılmalı ve uygulamanın, zaten mevcut değilse birincil giriş oluşturması ve ataması için bir yöntem sağlaması gerekir.
Uygulamanız ilk kez başlatıldığında veya arka plandan geri döndüğünde, DidUpdateHomesHMHomeManager birincil evin varlığını denetlemek için sınıfın olayını izlemesi gerekir. Bir tane yoksa, kullanıcının bir tane oluşturması için bir arabirim sağlaması gerekir.
Aşağıdaki kod, birincil ana girişi denetlemek için bir görünüm denetleyicisine 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);
}
};
Giriş Yöneticisi HomeKit ile bir bağlantı yaptığında, DidUpdateHomes olay tetiklenir, mevcut tüm bağlantılar yöneticinin ev koleksiyonuna yüklenir ve varsa birincil giriş yüklenir.
Birincil giriş ekleme
PrimaryHomeÖğesinin özelliği HMHomeManagernull bir olaydan sonra ise, DidUpdateHomes devam etmeden önce kullanıcının birincil giriş oluşturup atayabilmesi için bir yol sağlamanız gerekir.
Genellikle uygulama, kullanıcının yeni bir giriş adıyla, daha sonra ana giriş olarak kurulum yapmak üzere giriş yöneticisine geçirildiği bir form sunar. HomeKitIntro örnek uygulaması Için, xcode Interface Builder içinde bir kalıcı görünüm oluşturulmuştur ve uygulamanın ana arabiriminden bu durum çağırılır.
Kullanıcının yeni giriş için bir ad girmesi için bir metin alanı ve giriş eklemek için bir düğme sağlar. Kullanıcı giriş Ekle düğmesine dokunduğunda, aşağıdaki kod giriş Yöneticisi 'ni çağırarak girişi ekler:
// 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);
});
AddHomeYöntemi, yeni giriş oluşturmayı dener ve bunu verilen geri arama yordamına döndürür. errorÖzellik değilse null , bir hata meydana geldi ve kullanıcıya sunulmalıdır. En yaygın hatalar, benzersiz olmayan bir ana ad veya giriş yöneticisinin HomeKit ile iletişim kuramamasının nedeni olabilir.
Giriş başarıyla oluşturulduysa, UpdatePrimaryHome yeni ana giriş olarak ayarlamak için yöntemini çağırmanız gerekir. Yine, error özelliği değilse null , bir hata meydana geldi ve kullanıcıya sunulmalıdır.
Ayrıca, giriş Yöneticisi 'nin DidAddHome ve DidRemoveHome olaylarını izlemeniz ve uygulamanın kullanıcı arabirimini gerektiği şekilde güncelleştirmeniz gerekir.
Önemli
AlertView.PresentOKAlertYukarıdaki örnek kodda kullanılan yöntemi, HomeKitIntro uygulamasındaki ve IOS uyarıları ile çalışmayı kolaylaştıran bir yardımcı sınıftır.
Yeni aksesuarlar bulma
Birincil ana giriş, giriş yöneticisinden tanımlandıktan veya yüklendikten sonra, Xamarin. iOS uygulamanız HMAccessoryBrowser Yeni bir giriş Otomasyon aksesuarları bulmak ve bunları bir girişe eklemek için ' i çağırabilir.
StartSearchingForNewAccessoriesYeni aksesuarları ve bittiğinde yöntemi aramaya başlamak için yöntemini çağırın StopSearchingForNewAccessories .
Önemli
StartSearchingForNewAccessories , iOS cihazının hem pil ömrünü hem de performansını olumsuz yönde etkilediği için uzun süreler boyunca çalışmadığından ayrılmamalıdır. Apple StopSearchingForNewAccessories , bir dakikadan sonra veya yalnızca Kullanıcı tarafından sunulan donatı Kullanıcı arabirimi görüntülendiğinde aramayı önerir.
DidFindNewAccessoryBu olay yeni aksesuar keşfedildiğinde çağrılır ve bu, DiscoveredAccessories donatı tarayıcısında listeye eklenir.
DiscoveredAccessoriesListe, HMAccessory HomeKit etkin bir giriş Otomasyonu cihazını ve ışıkları veya garaj kapısı denetimi gibi kullanılabilir hizmetlerini tanımlayan bir nesne koleksiyonu içerir.
Yeni donatı bulunduktan sonra, Kullanıcı tarafından sunulmalı ve bunu seçip bir girişe ekleyebilmeleri gerekir. Örnek:
AddAccessorySeçili donatıyı evin koleksiyonuna eklemek için yöntemini çağırın. Örnek:
// 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Özellik değilse null , bir hata meydana geldi ve kullanıcıya sunulmalıdır. Aksi takdirde, kullanıcıdan eklenecek cihaz için kurulum kodunu girmesi istenir:
HomeKit donatı Benzeticisinde bu numara Kurulum kodu alanı altında bulunabilir:
Gerçek HomeKit aksesuarları için, kurulum kodu cihazdaki bir etikette, ürün kutusunda veya donatı Kullanıcı el kitabınızda yazdırılır.
DidRemoveNewAccessoryKullanıcı, ev koleksiyonuna eklendikten sonra, donatı tarayıcısının olayını izlemeniz ve Kullanıcı arabirimini, kullanılabilir listeden bir aksesuar kaldırmak için güncelleştirmeniz gerekir.
Aksesuarlar ile çalışma
Birincil ev ve başlangıç ve aksesuar eklendiğinde, kullanıcının birlikte çalışması için aksesuarlar (ve isteğe bağlı odalar) listesini sunabilirsiniz.
HMRoomNesnesi, belirli bir oda ve kendisine ait olan 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 kendisine ait tüm odalar hakkındaki tüm bilgileri içerir.
Bu örneğin, bu örnek için, öğeleri odalar veya bölgeler halinde organize etmek yerine, bir evin doğrudan bir evliğine sahip olmak ve bu donatılarla çalışmak istiyoruz.
HMHomeNesnesi, özelliğinde kullanıcıya sunulabilen bir atanan donatı listesi içerir Accessories . Örnek:
Burada form, Kullanıcı belirli bir donatıyı seçip sağladığı hizmetlerle çalışabilir.
Hizmetlerle çalışma
Kullanıcı belirli bir HomeKit etkin giriş otomasyon aygıtıyla etkileşime geçtiğinde, genellikle sağladığı hizmetler üzerinden olur. ServicesSınıfının özelliği, HMAccessoryHMService bir cihazın sunduğu hizmetleri tanımlayan bir nesne koleksiyonu içerir.
Hizmetler ışıklar, termostats, garaj kapısı openers, anahtarlar veya kilitler gibi şeylerdir. Bazı cihazlar (bir garaj kapısı Opener gibi), hafif ve kapıya açma ya da kapatma özelliği gibi birden fazla hizmet sağlayacaktır.
Belirli bir donatıcıdaki belirli hizmetlere ek olarak, her aksesuar Information Service adı, üreticisi, modeli ve seri numarası gibi özellikleri tanımlayan bir içerir.
Donatı hizmeti türleri
Aşağıdaki hizmet türleri enum aracılığıyla kullanılabilir HMServiceType :
- Accessori bilgileri -verilen giriş otomasyon aygıtı (donatı) hakkında bilgi sağlar.
- AirQualitySensor -bir hava kalitesi algılayıcısı tanımlar.
- Pil -aksesuar pili durumunu tanımlar.
- Carbondioxıdealgılayıcı -bir karbon dioksit algılayıcı tanımlar.
- Carbonmonoxıdealgılayıcı -bir karbon MONOXIDE algılayıcısı tanımlar.
- Contactsensör -bir iletişim algılayıcısı tanımlar (açılan pencere veya kapatma gibi).
- Kapı -bir kapı durumu algılayıcısı tanımlar (örneğin, açık veya kapalı).
- Fan -uzaktan denetlenen bir fanı tanımlar.
- GarageDoorOpener -bir garaj kapısı Opener tanımlar.
- Humidtysensörü -bir nem algılayıcısı tanımlar.
- Taakalgılayıcı -bir sızıntı algılayıcısı tanımlar (bir sıcak su veya yıkama makinesi gibi).
- Ampul-tek başına ışığı veya başka bir donatıcının parçası olan bir ışığı tanımlar (bir garaj kapısı Opener gibi).
- Lightsensör -bir hafif algılayıcı tanımlar.
- Lockmanagement -otomatik kapılı kilidi yöneten bir hizmeti tanımlar.
- Lockdüzeneði -uzaktan denetlenen bir kilit tanımlar (kapılı bir kilit gibi).
- Motionsensörü -bir hareket algılayıcısı tanımlar.
- Çoklu sanal algılayıcı -bir issör algılayıcısı tanımlar.
- Çıkış -uzaktan denetlenen bir duvar çıkışı tanımlar.
- SecuritySystem -ev güvenlik sistemini tanımlar.
- StatefulProgrammableSwitch -bir kez tetiklendiğinde (bir ters çevirme anahtarı gibi) bir verme durumunda kalan programlanabilir bir anahtarı tanımlar.
- StatelessProgrammableSwitch -tetiklendikten sonra ilk durumuna döndüren programlanabilir bir anahtarı tanımlar (bir push düğmesi gibi).
- SmokeSensor -bir duman algılayıcısı tanımlar.
- Anahtar -standart bir duvar anahtarı gibi bir açık/kapalı anahtarı tanımlar.
- Sıcaklık algılayıcısı -bir sıcaklık algılayıcısı tanımlar.
- Termostat -HVAC sistemini denetlemek için kullanılan bir akıllı termostat tanımlar.
- Pencere -uzaktan açılan veya kapatılan otomatik bir pencere tanımlar.
- Windowkapsayan -açık veya kapalı gibi görünen perdeler gibi uzaktan denetlenen bir pencere tanımlar.
Hizmet bilgilerini görüntüleme
' Yi yükledikten sonra, HMAccessoryHNService sağladığı nesneleri sorgulayabilir ve bu bilgileri kullanıcıya görüntüleyebilirsiniz:
Reachableİle çalışmayı denemeden önce her zaman öğesinin özelliğini denetlemeniz gerekir HMAccessory . Bir aksesuar, kullanıcının cihaz aralığı içinde olmaması veya söküme olmaması durumunda ulaşılamaz olabilir.
Bir hizmet seçildikten sonra, Kullanıcı belirli bir giriş otomasyon cihazını izlemek veya denetlemek için o hizmetin bir veya daha fazla özelliğini görüntüleyebilir veya değiştirebilir.
Özelliklerle çalışma
Her HMService nesne, HMCharacteristic hizmetin durumu (açılmakta olan veya kapatılan bir kapı gibi) hakkında bilgi sağlayabilen ya da kullanıcının bir durumu ayarlamasına izin veren bir nesne koleksiyonu içerebilir (bir ışığın rengini ayarlamak gibi).
HMCharacteristic yalnızca bir özellik ve durumu hakkında bilgi sağlamaz, ancak HMCharacteristic () aracılığıyla durumla çalışmaya yönelik yöntemler de sağlar HMCharacteristisMetadata . Bu meta veriler, kullanıcıya bilgi görüntülerken veya durumları değiştirmesine izin verirken yararlı olan Özellikler (minimum ve maxhayvan değer aralıkları gibi) sağlayabilir.
HMCharacteristicTypeSabit listesi, tanımlanabilir veya değiştirilebilen bir dizi özellik meta veri değerini aşağıdaki şekilde sağlar:
- AdminOnlyAccess
- AirParticulateDensity
- AirParticulateSize
- Uçak kalitesi
- AudioFeedback
- Batteryılevel
- Parlaklık
- Carbondıoxıdealgılanan
- CarbonDioxideLevel
- CarbonDioxidePeakLevel
- Carbonmonoxıdealgılanan
- Carbonmonoxidelepri
- CarbonMonoxidePeakLevel
- ChargingState
- ContactState
- CoolingThreshold
- CurrentDoorState
- CURREN, Tingsoğutma
- CurrentHorizontalTilt
- CurrentLightLevel
- CurrentLockMechanismState
- CurrentPosition
- Currentrelativenem
- CurrentSecuritySystemState
- Currentsıcaklık
- Currentverticaleğim
- FirmwareVersion
- HardwareVersion
- HeatingCoolingStatus
- HeatingThreshold
- HoldPosition
- Renk
- Tanıtan
- Inputevent
- Liakış algılandı
- LockManagementAutoSecureTimeout
- LockManagementControlPoint
- LockMechanismLastKnownAction
- Günlükler
- Üretici
- Modelleme
- Motionalgılandı
- Name
- Obstructionalgılandı
- Marancyalgılandı
- Outletınuse
- OutputState
- PositionState
- PowerState
- RotationDirection
- RotationSpeed
- Doygunluğu
- SerialNumber
- Smokealgılandı
- SoftwareVersion
- Durumetkin
- StatusFault
- StatusJammed
- Statuslowpili
- Durumda oynanmış
- TargetDoorState
- Targete Tingsoğutma
- TargetHorizontalTilt
- TargetLockMechanismState
- TargetPosition
- Targetrelativenem
- TargetSecuritySystemState
- Targetsıcaklık
- Targetverticaleğ
- TemperatureUnits
- Sürüm
Bir özelliğin değeri ile çalışma
Uygulamanızın belirli bir özelliğin en son durumuna sahip olduğundan emin olmak için, ReadValue sınıfının yöntemini çağırın HMCharacteristic . errÖzellik değilse null bir hata oluşmuştur ve kullanıcıya sunulmayabilir veya sunulmayabilir.
ValueÖzelliğin özelliği, belirtilen özelliğin geçerli durumunu bir olarak içerir NSObject ve bu nedenle doğrudan C# dilinde Çalışılamıyor.
Değeri okumak için, HomeKitIntro örnek uygulamasına aşağıdaki yardımcı sınıfı eklenmiştir:
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
}
}
NSObjectConverterUygulamanı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, float daha sonra Xamarin C# kodunda kullanılabilecek değeri bir öğesine dönüştürür.
Bir değiştirmek için HMCharacteristic , yöntemini çağırın WriteValue ve yeni değeri bir çağrıda sarın NSObject.FromObject . Ö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Özellik değilse null bir hata oluşmuştur ve kullanıcıya sunulmalıdır.
Özellik değeri değişikliklerini test etme
HMCharacteristicsVe sanal donatılarla çalışırken, özellikte yapılan değişiklikler Value HomeKit donatı simülatörü içinde izlenebilir.
Gerçek iOS cihaz donanımında çalışan HomeKitIntro uygulaması ile, bir özelliğin değerindeki değişiklikler HomeKit donatı benzeticisinde neredeyse anında görülebilmelidir. Örneğin, iOS uygulamasında bir ışığın durumunu değiştirme:
HomeKit donatı Benzeticisinde ışığın durumunu değiştirmeli. Değer değişmezse, yeni özellik değerleri yazarken hata iletisinin durumunu kontrol edin ve aksesuar hala erişilebilir olduğundan emin olun.
Gelişmiş HomeKit Özellikleri
Bu makalede bir Xamarin.iOS uygulamasında HomeKit donatıları ile çalışmak için gereken temel özellikler ele alınmıştır. Ancak, HomeKit'in bu giriş kapsamında yer alan birkaç gelişmiş özelliği vardır:
- Oda - HomeKit özellikli donatılar, isteğe bağlı olarak son kullanıcı tarafından oda olarak düzenlenmiş olabilir. Bu sayede HomeKit, donatıları kullanıcının kolayca anlayacaktır ve birlikte çalışabilirsiniz. Oda oluşturma ve bakım 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ölgelere göre düzenlenmiş olabilir. Bölge, kullanıcının tek bir birim olarak davranduğu bir oda koleksiyonunu ifade eder. Örneğin: Komşu, Aşağıkser veya Katser. Bu da HomeKit'in son kullanıcıya anlamlı bir şekilde donatılar sunarak ve bu şekilde çalışmalarına olanak 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, erişimci hizmet özelliklerini değiştirir ve kümeler olarak grup olabilir. Eylem Kümeleri, bir grup donatıyı kontrol etmek ve eylemlerini koordine etmek için betik olarak hareket edin. Örneğin, bir "Watch TV" betiği körleri kapatır, işıkları soluk ve televizyon ile ses sistemini açılabilir. Eylemler ve Eylem Kümeleri oluşturma ve koruma hakkında daha fazla bilgi için Apple'ın HMAction ve HMActionSet belgelerine bakın.
- Tetikleyiciler - Bir tetikleyici, verilen koşullar karşılendiğinde bir veya daha fazla Eylem Kümesi'ne etkinleştir olabilir. Örneğin, bağlantı noktası ışığını açın ve dışarıda koyu olduğunda 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ı kullanır, apple'ın HomeKitDeveloper Guide, HomeKit Kullanıcı Arabirimi Guidelines ve HomeKit Framework Reference yönergelerini kullanarak kolayca uygulanmalıdır.
HomeKit Uygulama Gözden Geçirme Yönergeleri
iTunes App Store'de yayın yapmak üzere iTunes Bağlan'a HomeKit özellikli bir Xamarin.iOS uygulaması göndermeden önce, Apple'ın HomeKit özellikli uygulamalar için yönergelerini izleyin:
- HomeKit çerçevesi kullanılırsa, uygulamanın birincil amacı ev otomasyonu olması gerekir.
- Uygulamanın pazarlama metni, kullanıcılara HomeKit'in kullanılıyor olduğunu bildirmeli ve bir gizlilik ilkesi sağla kullanılmalıdır.
- Kullanıcı bilgilerini toplamak veya Reklam için HomeKit kullanmak kesinlikle yasaktır.
Gözden geçirme yönergelerinin tamamını görmek için lütfen Apple'ın App Store gözden geçirme yönergelerine bakın.
iOS 9'daki YeniLer
Apple, iOS 9 için HomeKit'e aşağıdaki değişiklikleri ve eklemeleri yaptı:
- Mevcut Nesneleri Koruma - Mevcut bir erişimci değiştirilirse, Giriş Yöneticisi ( ) değiştirilen belirli bir öğeyi size bilgi verir.
- Kalıcı Tanımlayıcılar - Tüm ilgili HomeKit sınıfları artık HomeKit özellikli uygulamalarda (veya aynı uygulamanın örneklerde) verilen öğeyi benzersiz olarak tanımlamak için bir özellik içerir.
- Kullanıcı Yönetimi - Birincil kullanıcının giriş cihazı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 donatılarda hangi işlevleri kullanabileceğini kontrol etmek için bir ayrıcalık kümesine sahiptir. Uygulamanız yalnızca geçerli kullanıcıya uygun özellikleri görüntülemeli. Örneğin, yalnızca yöneticilerin diğer kullanıcıları koruyabilecek olması gerekir.
- Önceden Tanımlanmış Sahneler - Ortalama HomeKit kullanıcısı için oluşan dört yaygın olay için önceden tanımlanmış sahneler oluşturuldu: Get Up, Leave, Return, Go to Home. Önceden tanımlanmış bu sahneler bir evden silinemez.
- Sahneler ve Siri - Siri, iOS 9'da Sahneler için daha derin destek sağlar ve HomeKit'te tanımlanan herhangi bir Sahnenin adını tanıyıcıdır. Kullanıcı yalnızca adını Siri'ye konuşarak bir sahneyi yürüter.
- Erişimci Kategorileri - Tüm Accessories'lara önceden tanımlanmış bir kategori kümesi eklenmiştir ve Bir Giriş'e eklenen veya uygulamanın içinde üzerinde çalışan Erişimci türünü tanımlamaya yardımcı olur. Bu yeni kategoriler, Erişimci kurulumu sırasında kullanılabilir.
- Apple Watch Desteği - HomeKit artık watchOS için kullanılabilir ve Apple Watch, watch'a yakın bir iPhone olmadan HomeKit özellikli cihazları kontrol iPhone mümkün olacak. watchOS için HomeKit şu özellikleri destekler: Ev görüntüleme, Donatıları 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 Erişimci Durumuna (algılayıcı verileri gibi) veya coğrafi konumlara dayalı Olay Tetikleyicilerini de destekliyor. Olay Tetikleyicileri,
NSPredicatesyürütme koşullarını ayarlamak için kullanır. - Uzaktan Erişim - Uzaktan Erişim sayesinde kullanıcı artık uzak bir konumdaki evden uzaktayken HomeKit özellikli Ev Otomasyonu Donatılarını kontrol altına alıyor. iOS 8'de bu yalnızca kullanıcının evde 3. nesil bir Apple TV'si varsa desteklenmişti. iOS 9'da bu sınırlama kaldırıldı ve uzaktan erişim iCloud ve HomeKit Erişim Protokolü (HAP) aracılığıyla desteklenir.
- Yeni Bluetooth Düşük Enerji (BLE) Özellikleri - HomeKit artık düşük enerji (BLE) protokolü aracılığıyla iletişim kuracak daha fazla Bluetooth türler destekliyor. BIR HomeKit Erişimcisi, HAP Güvenli Tüneli kullanarak Bluetooth (Wi-Fi aralığı dışında ise) başka bir Bluetooth ortaya çıkarır. iOS 9'da BLE Accessories, bildirimler ve meta veriler için tam destek sunar.
- Yeni ErişimCihaz Kategorileri - Apple iOS 9'da şu yeni ErişimCihaz Kategorilerini ekledi: Pencere Kaplamaları, Motorize Kapı ve Windows, Alarm Sistemleri, Algılayıcılar ve Programlanabilir Anahtarlar.
iOS 9'daki yeni HomeKit özellikleri hakkında daha fazla bilgi için lütfen Apple'ın HomeKit Dizini ve HomeKit'te Neler Var videosuna bakın.
Özet
Bu makalede Apple'ın HomeKit ana otomasyon çerçevesi tanıtıldı. HomeKit Accessory Simulator'ı kullanarak test cihazlarını ayarlamayı ve yapılandırmayı ve HomeKit kullanarak ev otomasyonu cihazlarını bulmak, iletişim kurmak ve kontrol etmek için basit bir Xamarin.iOS uygulaması oluşturmayı gösterdi.





















