Sdílet prostřednictvím


HomeKit v Xamarin.iOS

HomeKit je architektura Společnosti Apple pro řízení zařízení domácí automatizace. Tento článek představuje HomeKit a popisuje konfiguraci testovacího příslušenství v simulátoru HomeKit Accessory Simulátor a psaní jednoduché aplikace Xamarin.iOS pro interakci s těmito doplňky.

Příklad aplikace s podporou HomeKitu

Apple představil HomeKit v iOSu 8 jako způsob, jak bezproblémově integrovat více zařízení domácí automatizace od různých dodavatelů do jedné koherentní jednotky. Díky podpoře společného protokolu pro zjišťování, konfiguraci a řízení zařízení domácí automatizace homeKit umožňuje, aby zařízení od nesouvisených dodavatelů spolupracovala, a to vše bez toho, aby jednotliví dodavatelé museli koordinovat úsilí.

Pomocí HomeKitu můžete vytvořit aplikaci Xamarin.iOS, která řídí jakékoli zařízení s podporou HomeKitu bez použití rozhraní API nebo aplikací poskytnutých dodavatelem. Pomocí HomeKitu můžete udělat toto:

  • Objevte nová zařízení domácí automatizace s podporou HomeKitu a přidejte je do databáze, která se bude uchovávat na všech zařízeních s iOSem uživatele.
  • Nastavení, konfigurace, zobrazení a řízení libovolného zařízení v databázi HomeKit Home Configuration Database.
  • Komunikujte s jakýmkoli předkonfigurovaným zařízením HomeKit a nařiďte jim, aby prováděly jednotlivé akce nebo fungovaly na koncertě, například zapnutí všech světel v kuchyni.

Kromě poskytování zařízení v domácí konfigurační databázi do aplikací s podporou HomeKit poskytuje HomeKit přístup k hlasovým příkazům Siri. Vzhledem k správně nakonfigurované instalaci HomeKitu může uživatel vydávat hlasové příkazy, jako je "Siri, zapněte světla v obývacím pokoji".

Domovská konfigurační databáze

HomeKit uspořádá všechna automatizační zařízení v daném umístění do domovské kolekce. Tato kolekce poskytuje uživateli způsob, jak seskupit zařízení domácí automatizace do logicky uspořádaných jednotek s smysluplnými a čitelnými popisky pro člověka.

Domovská kolekce je uložená v databázi domovské konfigurace, která se automaticky zálohuje a synchronizuje na všech zařízeních s iOSem uživatele. HomeKit poskytuje následující třídy pro práci s domovskou konfigurační databází:

  • HMHome - Toto je kontejner nejvyšší úrovně, který obsahuje všechny informace a konfigurace pro všechna zařízení domácí automatizace v jednom fyzickém umístění (např. jedno rodinné bydliště). Uživatel může mít více než jedno bydliště, například hlavní dům a prázdninový dům. Nebo mohou mít různé "domy" na stejném pozemku, jako je hlavní dům a penzion přes garáž. V obou směrech musí být aspoň jeden HMHome objekt nastaven a uložen, aby bylo možné zadat všechny ostatní informace o HomeKitu.
  • HMRoom - I když je volitelný, HMRoom umožňuje uživateli definovat konkrétní místnosti uvnitř domova (HMHome), jako jsou kuchyně, koupelna, garáž nebo obývací pokoj. Uživatel může seskupit všechna zařízení domácí automatizace do konkrétního umístění v domě a HMRoom pracovat s nimi jako s jednotkou. Například požádat Siri, aby vypnula garážová světla.
  • HMAccessory – Představuje individuální fyzické automatizační zařízení s podporou HomeKitu, které bylo nainstalováno v uživatelském pobytu (například inteligentní termostat). Každý z nich HMAccessory je přiřazen k .HMRoom Pokud uživatel nenakonfiguroval žádné místnosti, HomeKit přiřadí příslušenství ke speciální výchozí místnosti.
  • HMService - Představuje službu poskytovanou danou HMAccessory, například stav zapnutí/vypnutí světla nebo jeho barvy (pokud je podporována změna barvy). Každý HMAccessory může mít více než jednu službu, například otvírač garážových dveří, který zahrnuje také světlo. Kromě toho může dané HMAccessory prostředí obsahovat služby, jako je aktualizace firmwaru, které nejsou součástí uživatelského ovládacího prvku.
  • HMZone - Umožňuje uživateli seskupit kolekci objektů do logických HMRoom zón, jako jsou například nahoru, dolů nebo sklep. I když je tato možnost volitelná, umožňuje interakce, jako je třeba požádat Siri, aby vypnula všechna světla dolů.

Zřízení aplikace HomeKit

Vzhledem k požadavkům na zabezpečení, které HomeKit vyžaduje, musí být aplikace Xamarin.iOS, která používá architekturu HomeKit, správně nakonfigurovaná na portálu pro vývojáře Apple i v souboru projektu Xamarin.iOS.

Postupujte následovně:

  1. Přihlaste se k portálu Apple Developer Portal.

  2. Klikněte na Certifikáty, identifikátory a profily.

  3. Pokud jste to ještě neudělali, klikněte na Identifikátory a vytvořte ID aplikace (např. com.company.appname), jinak upravte stávající ID.

  4. Ujistěte se, že je služba HomeKit zkontrolována pro dané ID:

    Povolení služby HomeKit pro dané ID

  5. Uložte provedené změny.

  6. Klikněte na Vývoj zřizovacích profilů>a vytvořte pro svou aplikaci nový zřizovací profil vývoje:

    Vytvoření nového zřizovacího profilu pro vývoj pro aplikaci

  7. Stáhněte a nainstalujte nový zřizovací profil nebo použijte Xcode ke stažení a instalaci profilu.

  8. Upravte možnosti projektu Xamarin.iOS a ujistěte se, že používáte profil zřizování, který jste právě vytvořili:

    Výběr právě vytvořeného zřizovacího profilu

  9. Dále upravte soubor Info.plist a ujistěte se, že používáte ID aplikace použité k vytvoření zřizovacího profilu:

    Nastavení ID aplikace

  10. Nakonec upravte soubor Entitlements.plist a ujistěte se, že byl vybrán nárok HomeKitu:

    Povolení nároku HomeKitu

  11. Uložte změny do všech souborů.

S těmito nastaveními je teď aplikace připravená pro přístup k rozhraním API homeKit Framework. Podrobné informace o zřizování najdete v našich průvodcích zřizováním zařízení a zřizováním vašich aplikací.

Důležité

Testování aplikace s podporou HomeKitu vyžaduje skutečné zařízení s iOSem, které bylo správně zřízeno pro vývoj. HomeKit nelze testovat ze simulátoru iOS.

Simulátor příslušenství HomeKit

Pokud chcete poskytnout způsob, jak otestovat všechna možná zařízení a služby domácí automatizace, aniž by musel mít fyzické zařízení, společnost Apple vytvořila simulátor HomeKit Accessory Simulator. Pomocí tohoto simulátoru můžete nastavit a nakonfigurovat virtuální zařízení HomeKit.

Instalace simulátoru

Apple poskytuje simulátor HomeKit Accessory Simulator jako samostatný soubor ke stažení od Xcode, takže ho budete muset před pokračováním nainstalovat.

Postupujte následovně:

  1. Ve webovém prohlížeči navštivte soubory ke stažení pro vývojáře Apple.

  2. Stáhněte si další nástroje pro Xcode xxx (kde xxx je verze Xcode, kterou jste nainstalovali):

    Stažení dalších nástrojů pro Xcode

  3. Otevřete image disku a nainstalujte nástroje v adresáři Aplikace .

S nainstalovaným simulátorem HomeKit Accessory Simulátor lze vytvořit virtuální příslušenství pro testování.

Vytváření virtuálního příslušenství

Pokud chcete spustit simulátor HomeKit Accessory a vytvořit několik virtuálních doplňků, postupujte takto:

  1. Ve složce Aplikace spusťte simulátor HomeKit Accessory:

    Simulátor příslušenství HomeKit

  2. Klikněte na + tlačítko a vyberte New Accessory...:

    Přidání nového přístupového objektu

  3. Vyplňte informace o novém příslušenství a klikněte na tlačítko Dokončit :

    Vyplňte informace o novém příslušenství.

  4. Klikněte na tlačítko Přidat službu.. a v rozevíracím seznamu vyberte typ služby:

    V rozevíracím seznamu vyberte typ služby.

  5. Zadejte název služby a klikněte na tlačítko Dokončit:

    Zadejte název služby.

  6. Volitelné vlastnosti pro službu můžete zadat kliknutím na tlačítko Přidat charakteristiku a konfigurací požadovaných nastavení:

    Konfigurace požadovaných nastavení

  7. Opakováním výše uvedených kroků vytvořte jeden z typů zařízení pro automatizaci virtuálních domů, které HomeKit podporuje.

S některými ukázkovými virtuálními příslušenstvími HomeKit vytvořenými a nakonfigurovanými teď můžete tato zařízení využívat a ovládat z aplikace Xamarin.iOS.

Konfigurace souboru Info.plist

Nový pro iOS 10 (a vyšší), vývojář bude muset přidat NSHomeKitUsageDescription klíč do souboru aplikace Info.plist a zadat řetězec, který deklaruje, proč chce aplikace získat přístup k databázi HomeKit uživatele. Tento řetězec se uživateli zobrazí při prvním spuštění aplikace:

Dialogové okno oprávnění HomeKit

Pokud chcete nastavit tento klíč, postupujte takto:

  1. Poklikáním na Info.plist soubor v Průzkumník řešení ho otevřete pro úpravy.

  2. V dolní části obrazovky přepněte do zobrazení Zdroj .

  3. Přidejte do seznamu novou položku .

  4. V rozevíracím seznamu vyberte Soukromí – Popis použití HomeKitu:

    Výběr ochrany osobních údajů – Popis použití HomeKitu

  5. Zadejte popis, proč aplikace chce získat přístup k databázi HomeKit uživatele:

    Zadejte popis.

  6. Uložte změny souboru.

Důležité

Když v iOSu Info.plist 10 (nebo novějším) spustíte v systému iOS 10 (nebo novějším), nenastaví se klíč v souboru, že se klíč v souboru nenastavíNSHomeKitUsageDescription, dojde k tichému selhání (zavření systémem za běhu).

Připojení do HomeKitu

Aby vaše aplikace Xamarin.iOS komunikuje s HomeKitem, musí nejprve vytvořit instanci HMHomeManager třídy. Home Manager je centrální vstupní bod do HomeKitu a zodpovídá za poskytování seznamu dostupných domů, aktualizaci a údržbu tohoto seznamu a vrácení primární domovské stránky uživatele.

Objekt HMHome obsahuje všechny informace o darovaném domě včetně všech místností, skupin nebo zón, které mohou obsahovat, spolu s nainstalovaným příslušenstvím pro automatizaci domu. Před provedením jakýchkoli operací v HomeKitu musí být alespoň jedna HMHome vytvořena a přiřazena jako primární domovská stránka.

Vaše aplikace zodpovídá za kontrolu, jestli primární domovská stránka existuje, a pokud ne, vytvoří a přiřadí ji.

Přidání správce domovské stránky

Pokud chcete do aplikace Xamarin.iOS přidat povědomí o HomeKitu, upravte soubor AppDelegate.cs a upravte ho tak, aby vypadal takto:

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");
    };
}

Při prvním spuštění aplikace se uživateli zobrazí dotaz, jestli chce povolit přístup k informacím HomeKitu:

Uživateli se zobrazí dotaz, jestli chce povolit přístup k informacím HomeKitu.

Pokud uživatel odpoví OK, aplikace bude moci pracovat se svým příslušenstvím HomeKit, jinak nebude a žádné volání HomeKitu selže s chybou.

Při použití Správce domovské stránky bude potřeba, aby aplikace viděla, jestli je nakonfigurovaná primární domovská stránka, a pokud ne, poskytnout uživateli způsob, jak ji vytvořit a přiřadit.

Přístup k primární domovské stránce

Jak je uvedeno výše, musí být primární domovská stránka vytvořena a nakonfigurována před tím, než je HomeKit k dispozici, a je zodpovědností aplikace poskytnout uživateli způsob, jak vytvořit a přiřadit primární domovskou stránku, pokud ještě neexistuje.

Když se vaše aplikace poprvé spustí nebo vrátí z pozadí, musí monitorovat DidUpdateHomes událost HMHomeManager třídy, aby zkontrolovala existenci primární domovské stránky. Pokud neexistuje, měl by poskytnout rozhraní, které má uživatel vytvořit.

Následující kód lze přidat do kontroleru zobrazení a zkontrolovat primární domovskou stránku:

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);
    }
};

Když Home Manager vytvoří připojení k HomeKitu, DidUpdateHomes událost se aktivuje, všechny existující domy se načtou do kolekce domů vedoucího a pokud je k dispozici primární domovská stránka, načte se.

Přidání primární domovské stránky

PrimaryHome Pokud vlastnost objektu HMHomeManager je null po DidUpdateHomes události, musíte uživateli před pokračováním poskytnout způsob, jak vytvořit a přiřadit primární domovskou stránku.

Aplikace obvykle zobrazí formulář pro uživatele, který pojmenuje nový domov, který se pak předá Správci domovské stránky, aby se nastavil jako primární domovská stránka. Pro ukázkovou aplikaci HomeKitIntro se v Xcode Interface Builderu vytvořila modální zobrazení a volala AddHomeSegue ji z hlavního rozhraní aplikace.

Poskytuje textové pole pro uživatele, aby zadal jméno pro novou domovskou stránku a tlačítko pro přidání domovské stránky. Když uživatel klepne na tlačítko Přidat domovskou stránku , zavolá následující kód Správci domovské stránky, aby přidal domovskou stránku:

// 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);
});

Metoda AddHome se pokusí vytvořit nový domov a vrátit ho do dané rutiny zpětného volání. error Pokud vlastnost nenínull, došlo k chybě a měla by se zobrazit uživateli. Nejčastější chyby jsou způsobené nevýznamným názvem domovské stránky nebo nemožností komunikovat s HomeKitem.

Pokud byl domov úspěšně vytvořen, musíte volat metodu UpdatePrimaryHome , která nastaví nový domov jako primární domovskou stránku. Znovu, pokud error vlastnost není null, došlo k chybě a měla by být prezentována uživateli.

Měli byste také monitorovat události a DidRemoveHome události Home Manageru DidAddHome a podle potřeby aktualizovat uživatelské rozhraní aplikace.

Důležité

Metoda AlertView.PresentOKAlert použitá v ukázkovém kódu výše je pomocná třída v aplikaci HomeKitIntro, která usnadňuje práci s iOS Alerts.

Najít nové příslušenství

Jakmile je primární domovská stránka definována nebo načtena z Správce domovské stránky, aplikace Xamarin.iOS může volat HMAccessoryBrowser , aby našla jakékoli nové příslušenství domácí automatizace a přidala je do domova.

Zavolejte metodu StartSearchingForNewAccessories , která začne hledat nové příslušenství a metodu StopSearchingForNewAccessories po dokončení.

Důležité

StartSearchingForNewAccessories by nemělo být ponecháno po dlouhou dobu, protože negativně ovlivní životnost baterie i výkon zařízení s iOSem. Apple navrhuje volání StopSearchingForNewAccessories po minutě nebo hledání pouze v případě, že se uživateli zobrazí uživatelské rozhraní Find Accessory.

Událost DidFindNewAccessory bude volána při zjištění nových doplňků a budou přidány do DiscoveredAccessories seznamu v prohlížeči příslušenství.

Seznam DiscoveredAccessories bude obsahovat kolekci HMAccessory objektů, které definují zařízení homeKit s podporou automatizace domácnosti a jeho dostupné služby, jako jsou světla nebo ovládací prvek garážových dveří.

Jakmile se nový přístupový objekt najde, měl by se uživateli zobrazit, aby ho mohl vybrat a přidat ho do domova. Příklad:

Vyhledání nového příslušenství

Zavolejte metodu AddAccessory , která přidá vybrané příslušenství do domácí kolekce. Příklad:

// 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 Pokud vlastnost nenínull, došlo k chybě a měla by se zobrazit uživateli. Jinak se uživateli zobrazí výzva k zadání instalačního kódu pro zařízení, který má přidat:

Zadejte instalační kód pro zařízení, který chcete přidat.

V simulátoru HomeKit Accessory toto číslo najdete v poli Kód nastavení:

Pole Kód nastavení v simulátoru HomeKit Accessory Simulator

Pro skutečné příslušenství HomeKit se instalační kód vytiskne buď na štítku na samotném zařízení, v krabici produktu nebo v uživatelské příručce příslušenství.

Po přidání uživatele do domovské kolekce byste měli monitorovat událost prohlížeče DidRemoveNewAccessory příslušenství a aktualizovat uživatelské rozhraní tak, aby odebralo přístupové objekty z dostupného seznamu.

Práce s příslušenstvím

Po přidání primárního domu a příslušenství k němu můžete uživateli předložit seznam příslušenství (a volitelně i místností), se kterými může uživatel pracovat.

Objekt HMRoom obsahuje všechny informace o dané místnosti a veškeré příslušenství, které do ní patří. Místnosti lze volitelně uspořádat do jedné nebo více zón. A HMZone obsahuje všechny informace o dané zóně a všechny místnosti, které do ní patří.

Pro účely tohoto příkladu budeme udržovat věci jednoduché a pracovat s domácím příslušenstvím přímo, místo aby je uspořádávali do místností nebo zón.

Objekt HMHome obsahuje seznam přiřazených přístupových objektů, které lze uživateli předložit ve své Accessories vlastnosti. Příklad:

Příklad příslušenství

Zde může uživatel vybrat dané příslušenství a pracovat se službami, které poskytuje.

Práce se službami

Když uživatel komunikuje s daným zařízením domácí automatizace s podporou HomeKitu, obvykle se používá prostřednictvím služeb, které poskytuje. Vlastnost ServicesHMAccessory třídy obsahuje kolekci HMService objektů, které definují služby, které zařízení nabízí.

Služby jsou věci, jako jsou světla, termostaty, otvírače garážových dveří, přepínače nebo zámky. Některá zařízení (například otvírač garážových dveří) poskytují více než jednu službu, například světlo a možnost otevřít nebo zavřít dveře.

Kromě konkrétních služeb, které dané příslušenství poskytuje, obsahuje Information Service každý z nich vlastnosti, jako je název, výrobce, model a sériové číslo.

Typy služeb příslušenství

Následující typy služeb jsou k dispozici prostřednictvím výčtu HMServiceType :

  • AccessoryInformation - Poskytuje informace o daném zařízení domácí automatizace (příslušenství).
  • AirQualitySensor – definuje senzor kvality vzduchu.
  • Baterie – Definuje stav baterie příslušenství.
  • CarbonDioxideSensor - definuje senzor oxidu uhličitého.
  • CarbonMonoxideSensor - definuje senzor oxidu uhelnatého.
  • ContactSensor – Definuje senzor kontaktu (například okno, které se otevírá nebo zavírá).
  • Dveře – Definuje senzor stavu dveří (například otevřený nebo uzavřený).
  • Ventilátor – definuje ventilátor s dálkovým ovládáním.
  • GarageDoorOpener - Definuje otvírač garážových dveří.
  • VlhkostSensor – definuje senzor vlhkosti.
  • LeakSensor – definuje senzor úniku (například pro ohřívač teplé vody nebo pračku).
  • Žárovka - Definuje samostatné světlo nebo světlo, které je součástí jiného příslušenství (jako otvírač garážových dveří).
  • LightSensor – definuje světelný senzor.
  • LockManagement – definuje službu, která spravuje automatizovaný zámek dveří.
  • LockMechanism – definuje vzdálený řízený zámek (například zámek dveří).
  • MotionSensor – definuje snímač pohybu.
  • OccupancySensor - Definuje senzor obsazenosti.
  • Zásuvka – definuje zásuvku s ovládáním na dálku.
  • SecuritySystem – Definuje domácí bezpečnostní systém.
  • StatefulProgrammableSwitch – definuje programovatelný přepínač, který po aktivaci zůstane ve stavu give (například přepínač překlopení).
  • BezstavovýProgrammableSwitch – definuje programovatelný přepínač, který se po aktivaci vrátí do počátečního stavu (například tlačítko).
  • SmokeSensor – definuje senzor kouře.
  • Přepínač – Definuje přepínač pro zapnutí/vypnutí, jako je standardní přepínač zdi.
  • TemperatureSensor – definuje senzor teploty.
  • Termostat - Definuje inteligentní termostat použitý k řízení systému TVK.
  • Okno – Definuje automatizované okno, které lze vzdáleně otevřít nebo zavřít.
  • WindowCovering – Definuje vzdáleně řízené kryty oken, jako jsou nevidomé, které lze otevřít nebo zavřít.

Zobrazení informací o službě

Po načtení HMAccessory můžete dotazovat jednotlivé HNService objekty, které poskytuje, a zobrazit informace uživateli:

Zobrazení informací o službě

Před pokusem o Reachable práci s ním byste měli vždy zkontrolovat vlastnost objektu HMAccessory . Příslušenství může být nedostupné, protože uživatel není v dosahu zařízení nebo pokud byl odpojen.

Po výběru služby může uživatel zobrazit nebo upravit jednu nebo více charakteristik této služby, aby monitoroval nebo kontroloval dané zařízení domácí automatizace.

Práce s charakteristikami

Každý HMService objekt může obsahovat kolekci HMCharacteristic objektů, které můžou buď poskytnout informace o stavu služby (například otevření nebo zavření dveří), nebo umožnit uživateli upravit stav (například nastavit barvu světla).

HMCharacteristic poskytuje nejen informace o charakteristikách a jeho stavu, ale také poskytuje metody pro práci se stavem prostřednictvím charakteristických metadat (HMCharacteristisMetadata). Tato metadata můžou poskytovat vlastnosti (například minimální a maximální rozsahy hodnot), které jsou užitečné při zobrazování informací uživateli nebo jejich povolení upravovat stavy.

Výčet HMCharacteristicType poskytuje sadu hodnot charakteristické metadata, které lze definovat nebo upravit následujícím způsobem:

  • Správa OnlyAccess
  • AirParticulateDensity
  • AirParticulateSize
  • AirQuality
  • AudioFeedback
  • BatteryLevel
  • Jas
  • CarbonDioxideDetected
  • CarbonDioxideLevel
  • CarbonDioxidePeakLevel
  • CarbonMonoxideDetected
  • CarbonMonoxideLevel
  • CarbonMonoxidePeakLevel
  • ChargingState
  • ContactState
  • CoolingThreshold
  • CurrentDoorState
  • CurrentHeatingCooling
  • CurrentHorizontalTilt
  • CurrentLightLevel
  • CurrentLockMechanismState
  • CurrentPosition
  • CurrentRelativeHumidity
  • CurrentSecuritySystemState
  • CurrentTemperature
  • CurrentVerticalTilt
  • FirmwareVersion
  • HardwareVersion
  • TopeníCoolingStatus
  • TopeníThreshold
  • HoldPosition
  • Odstín
  • Identifikovat
  • InputEvent
  • LeakDetected
  • LockManagementAutoSecureTimeout
  • LockManagementControlPoint
  • LockMechanismLastKnownAction
  • Protokoly
  • Výrobce
  • Model
  • MotionDetected
  • Název
  • ObstrukceDetected
  • Obsazenost
  • OutletInUse
  • OutputState
  • PositionState
  • PowerState
  • RotationDirection
  • RotationSpeed
  • Sytost
  • SerialNumber
  • SmokeDetected
  • SoftwareVersion
  • StatusActive
  • StavFault
  • StatusJammed
  • StatusLowBattery
  • StatusTampered
  • TargetDoorState
  • TargetHeatingCooling
  • TargetHorizontalTilt
  • TargetLockMechanismState
  • Cílová pozice
  • TargetRelativeHumidity
  • TargetSecuritySystemState
  • TargetTemperature
  • TargetVerticalTilt
  • Jednotky teploty
  • Verze

Práce s hodnotou charakteristické vlastnosti

Abyste zajistili, že aplikace má nejnovější stav dané vlastnosti, zavolejte ReadValue metodu HMCharacteristic třídy. err Pokud vlastnost nenínull, došlo k chybě a může nebo nemusí být uživateli prezentována.

Vlastnost Charakteristické Value obsahuje aktuální stav dané vlastnosti jako znak NSObject, a proto nelze pracovat přímo v jazyce C#.

Ke čtení hodnoty byla do ukázkové aplikace HomeKitIntro přidána následující pomocná třída:

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
    }
}

Používá NSObjectConverter se vždy, když aplikace potřebuje přečíst aktuální stav charakteristické vlastnosti. Příklad:

var value = NSObjectConverter.ToFloat (characteristic.Value);

Výše uvedený řádek převede hodnotu na float hodnotu, kterou pak lze použít v kódu Xamarin C#.

Chcete-li upravit , zavolejte jeho WriteValue metodu HMCharacteristica zabalte novou hodnotu do NSObject.FromObject volání. Příklad:

Characteristic.WriteValue(NSObject.FromObject(value),(err) =>{
    // Was there an error?
    if (err!=null) {
        // Yes, inform user
        AlertView.PresentOKAlert("Update Error",err.LocalizedDescription,Controller);
    }
});

err Pokud vlastnost nenínull, došlo k chybě a měla by se uživateli zobrazit.

Testování změn charakteristických hodnot

Při práci s HMCharacteristics a simulovaným příslušenstvím lze úpravy Value vlastnosti monitorovat v simulátoru HomeKit Accessory Simulator.

S aplikací HomeKitIntro běžící na skutečném hardwaru zařízení s iOSem by se změny hodnoty vlastnosti měly zobrazit téměř okamžitě v simulátoru HomeKit Accessory Simulator. Například změna stavu světla v aplikaci pro iOS:

Změna stavu světla v aplikaci pro iOS

Měl by změnit stav světla v simulátoru HomeKit Accessory. Pokud se hodnota nezmění, zkontrolujte stav chybové zprávy při psaní nových charakteristických hodnot a ujistěte se, že je příslušenství stále dostupné.

Pokročilé funkce HomeKitu

Tento článek popisuje základní funkce potřebné pro práci s příslušenstvím HomeKit v aplikaci Xamarin.iOS. Existuje však několik pokročilých funkcí HomeKitu, které nejsou popsané v tomto úvodu:

  • Pokoje - Příslušenství s podporou HomeKitu lze volitelně uspořádat do místností koncovým uživatelem. Díky tomu může HomeKit prezentovat příslušenství způsobem, který je pro uživatele snadný, aby ho rozuměl a pracoval s tím. Další informace o vytváření a údržbě místností najdete v dokumentaci k HMRoom společnosti Apple.
  • Zóny – Místnosti můžou být volitelně uspořádané do zón koncovým uživatelem. Zóna odkazuje na kolekci místností, se kterými může uživatel zacházet jako s jednou jednotkou. Například: Nahoru, Dolů nebo Sklep. Opět to umožňuje HomeKit prezentovat a pracovat s příslušenstvím způsobem, který dává smysl pro koncového uživatele. Další informace o vytvářeníach
  • Akce a sady akcí – Akce upravují vlastnosti služby příslušenství a lze je seskupit do sad. Sady akcí fungují jako skripty pro řízení skupiny příslušenství a koordinaci jejich akcí. Například skript "Sledovat TELEVIZI" může zavřít slepé, ztlumit světla a zapnout televizi a jeho zvukový systém. Další informace o vytváření a údržbě akcí a sad akcí najdete v dokumentaci K HMAction a HMActionSet společnosti Apple.
  • Triggery – Aktivační událost může aktivovat jednu nebo více sady akcí, pokud byla splněna daná sada podmínek. Zapněte například světlo portchu a zamkněte všechny vnější dveře, když se ztmaví ven. Další informace o vytváření a údržbě triggerů najdete v dokumentaci K HMTrigger společnosti Apple.

Vzhledem k tomu, že tyto funkce používají stejné techniky uvedené výše, měly by být snadno implementované podle příručky HomeKitDeveloper Guide společnosti Apple, pokynů pro uživatelské rozhraní HomeKit a reference k rozhraní HomeKit Framework.

Pokyny pro kontrolu aplikace HomeKit

Před odesláním aplikace Xamarin.iOS s podporou HomeKitu do iTunes Připojení k vydání v iTunes App Storu se ujistěte, že postupujete podle pokynů společnosti Apple pro aplikace s podporou HomeKitu:

  • Primárním účelem aplikace musí být domácí automatizace, pokud používáte architekturu HomeKit.
  • Marketingový text aplikace musí uživatele informovat, že se používá HomeKit a že musí poskytnout zásady ochrany osobních údajů.
  • Shromažďování informací o uživateli nebo používání HomeKitu pro reklamu je přísně zakázáno.

Úplné pokyny pro revize najdete v App Storu společnosti Apple.

Novinky v iOSu 9

Apple provedl následující změny a doplňky HomeKitu pro iOS 9:

  • Údržba existujících objektů – Pokud je existující příslušenství změněno, správce domovské stránky (HMHomeManager) vás informuje o konkrétní položce, která byla změněna.
  • Trvalé identifikátory – Všechny relevantní třídy HomeKit teď obsahují UniqueIdentifier vlastnost, která jednoznačně identifikuje danou položku v aplikacích s podporou HomeKitu (nebo instancích stejné aplikace).
  • Správa uživatelů – Přidání integrovaného kontroleru zobrazení pro zajištění správy uživatelů uživatelů, kteří mají přístup k zařízením HomeKit na domovské stránce primárního uživatele.
  • Možnosti uživatele – Uživatelé HomeKitu teď mají sadu oprávnění, která řídí, jaké funkce můžou používat v příslušenství HomeKit a HomeKit. Aplikace by měla zobrazovat jenom relevantní funkce pro aktuálního uživatele. Jiní uživatelé by například měli mít možnost udržovat jenom správce.
  • Předdefinované scény – předdefinované scény byly vytvořeny pro čtyři běžné události, ke kterým dochází pro průměrného uživatele HomeKitu: Get Up, Leave, Return, Go to Bed. Tyto předdefinované scény nelze odstranit z domova.
  • Scény a Siri – Siri má hlubší podporu pro scény v iOSu 9 a dokáže rozpoznat název libovolné scény definované v HomeKitu. Uživatel může scénu spustit jednoduše tak, že vyslechá její jméno siri.
  • Kategorie příslušenství – Sada předdefinovaných kategorií byla přidána do všech doplňků a pomáhá identifikovat typ doplňku, který se přidává do domovské stránky nebo pracuje z vaší aplikace. Tyto nové kategorie jsou k dispozici během instalace přístupového objektu.
  • Podpora Apple Watch – HomeKit je nyní k dispozici pro watchOS a Apple Watch bude moct ovládat zařízení s podporou HomeKitu bez i Telefon být blízko hodinky. HomeKit pro watchOS podporuje následující funkce: Zobrazení domů, ovládání příslušenství a spouštění scén.
  • Nový typ triggeru události – Kromě triggerů typu časovače podporovaných v iOSu 8 teď iOS 9 podporuje triggery událostí na základě stavu přístupového objektu (například dat snímačů) nebo geografické polohy. Triggery událostí slouží NSPredicates k nastavení podmínek pro jejich spuštění.
  • Vzdálený přístup – Pomocí vzdáleného přístupu teď uživatel může ovládat příslušenství domácí automatizace s podporou HomeKitu, když jsou mimo dům na vzdáleném místě. V iOSu 8 to bylo podporováno pouze v případě, že uživatel měl doma Apple TV třetí generace. V iOSu 9 se toto omezení zvedne a vzdálený přístup se podporuje prostřednictvím iCloudu a protokolu HAP (HomeKit Accessory Protocol).
  • Nové možnosti Bluetooth Low Energy (BLE) - HomeKit nyní podporuje více typů příslušenství, které mohou komunikovat prostřednictvím protokolu Bluetooth Low Energy (BLE). Pomocí zabezpečeného tunelování HAP může HomeKit Accessory vystavit další příslušenství Bluetooth přes Wi-Fi (pokud je mimo rozsah Bluetooth). V iOSu 9 mají příslušenství BLE plnou podporu pro oznámení a metadata.
  • Nové kategorie příslušenství - Apple přidal následující nové kategorie příslušenství v iOS 9: okenní kryty, motorizované dveře a okna, alarmové systémy, senzory a programovatelné přepínače.

Další informace o nových funkcích HomeKitu v iOSu 9 najdete ve videu HomeKit od Společnosti Apple.

Shrnutí

Tento článek představil architekturu domácí automatizace HomeKit společnosti Apple. Ukázalo se, jak nastavit a nakonfigurovat testovací zařízení pomocí simulátoru HomeKit Accessory a jak vytvořit jednoduchou aplikaci Xamarin.iOS pro zjišťování, komunikaci se zařízeními domácí automatizace a ovládání pomocí HomeKitu.