HomeKit v Xamarin. iOS

HomeKit je rozhraní Apple pro řízení domácích zařízení. Tento článek zavádí HomeKit a popisuje konfiguraci příslušenství testu v simulátoru příslušenství HomeKit a psaní jednoduché aplikace Xamarin. iOS pro interakci s těmito příslušenstvími.

Ukázková aplikace s povoleným HomeKit

Společnost Apple představila HomeKit v systému iOS 8 jako způsob bezproblémové integrace více zařízení domácí automatizace od různých dodavatelů do jedné souvislé jednotky. Díky podpoře společného protokolu pro zjišťování, konfiguraci a řízení domácích zařízení pro automatizaci HomeKit umožňuje, aby zařízení od nesouvisejících dodavatelů vzájemně spolupracovala, a to vše bez jednotlivých dodavatelů, kteří musí koordinovat úsilí.

Pomocí HomeKit můžete vytvořit aplikaci Xamarin. iOS, která řídí libovolné zařízení s povoleným HomeKit bez použití rozhraní API nebo aplikací dodaných dodavatelem. Pomocí HomeKit můžete provést následující akce:

  • Objevte nová zařízení s podporou domácích HomeKit a přidejte je do databáze, která bude zachována napříč všemi zařízeními iOS daného uživatele.
  • Nastavení, konfigurace, zobrazení a řízení libovolného zařízení v databázi HomeKit Home Configuration.
  • Komunikujte s veškerým předem nakonfigurovaným zařízením HomeKit a jejich příkazem proveďte jednotlivé akce nebo pracujte společně, jako je například zapnutí všech světel v kuchyni.

Kromě obsluhy zařízení v domácí konfigurační databázi pro HomeKit povolené aplikace HomeKit poskytuje přístup k Siri hlasovým příkazům. Uživatel, který má patřičně nakonfigurovaný HomeKit instalaci, může vydávat hlasové příkazy, jako je například "Siri", zapnout světla v živé místnosti. "

Domovská konfigurační databáze

HomeKit uspořádá všechna automatizační zařízení v daném umístění do domácí kolekce. Tato kolekce poskytuje způsob, jak může uživatel seskupovat svá domácí automatizační zařízení do logicky seřazených jednotek pomocí smysluplných popisků, které lze snadno přečíst.

Domovská kolekce je uložená v domácí konfigurační databázi, která se automaticky zálohuje a synchronizuje napříč všemi zařízeními iOS daného 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ř. jediného rodinného příslušníka. Uživatel může mít více než jedno bydliště, jako je hlavní domů a dům na dovolenou. Nebo mohou mít různé "domy" na stejné vlastnosti, jako je hlavní dům a hostská dům prostřednictvím garáže. Buď HMHomeHMHome být alespoň jeden objekt nastavený a uložený předtím, než bude možné zadat další informace HomeKit.
  • HMRoom – Pokud je to volitelné, HMRoom umožňuje uživateli definovat konkrétní místnosti v domácnosti (), jako je například HMHome 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 rámci své domu na HMRoom a reagovat na ně jako jednotku. Například dotazování Siri na vypnutí garážových světel.
  • HMAccessory – To představuje individuální zařízení pro automatizaci fyzických HomeKit, která byla nainstalovaná v rámci pobytu uživatele (například inteligentní termostat). Každá HMAccessory je přiřazena k HMRoom . Pokud uživatel nenakonfiguroval žádné místnosti, HomeKit přiřadí příslušenství ke speciálnímu výchozímu místnosti.
  • HMService -Představuje službu poskytnutou daným objektem HMAccessory , například stav zapnuto/vypnuto světla nebo jeho barvu (Pokud je podporována Změna barvy). Každá HMAccessory z nich může mít více než jednu službu, jako je například otevřený garáž dveří, který také obsahuje světlo. Kromě toho HMAccessory může mít daný uživatel služby, jako je například aktualizace firmwaru, které jsou mimo uživatelský ovládací prvek.
  • HMZone – Povolí uživateli seskupit kolekci HMRoom objektů do logických zón, například Upstairs, Downstairs nebo Basement. I když je to volitelné, umožňuje interakci, jako je například dotazování Siri, na vypnutí všech světle Downstairs.

Zřízení aplikace pro HomeKit

Z důvodu požadavků na zabezpečení, které jsou uložené v HomeKit, musí být aplikace Xamarin. iOS, která používá rozhraní 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 pro vývojáře Apple.

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

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

  4. Ujistěte se, že je pro dané ID zaškrtnutá služba HomeKit :

    Povolit službu HomeKit pro dané ID

  5. Uložte provedené změny.

  6. Klikněte na zřizování profilů provývoj a vytvořte nový vývojový profil pro vývoj pro vaši aplikaci:

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

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

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

    Vyberte zřizovací profil, který jste právě vytvořili.

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

    Nastavení ID aplikace

  10. Nakonec upravte soubor oprávnění. plist a ujistěte se, že byla vybrána možnost HomeKit nárokování:

    Povolit HomeKit nárok

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

S tímto nastavením je nyní aplikace připravena k přístupu k rozhraním API HomeKit Framework. Podrobné informace o zřizování najdete v našich zřizováních zařízení a zřizování vašich průvodců aplikací.

Důležité

Testování aplikace s povoleným HomeKit vyžaduje reálné zařízení s iOS, které se správně zřídilo pro vývoj. HomeKit se nedá testovat z simulátoru iOS.

Simulátor příslušenství HomeKit

Chcete-li zajistit způsob, jak otestovat všechna možná zařízení a služby pro domácí automatizaci, aniž byste museli mít fyzické zařízení, společnost Apple vytvořila simulátor HomeKit příslušenství. Pomocí tohoto simulátoru můžete nastavit a nakonfigurovat zařízení Virtual HomeKit.

Instalace simulátoru

Apple poskytuje simulátor HomeKit pro příslušenství jako samostatné stažení z Xcode, takže ho budete muset před pokračováním nainstalovat.

Postupujte následovně:

  1. Ve webovém prohlížeči přejděte 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 do adresáře aplikace .

Po instalaci simulátoru příslušenství HomeKit je možné vytvořit virtuální příslušenství pro testování.

Vytváří se virtuální příslušenství.

Pokud chcete spustit simulátor HomeKit příslušenství a vytvořit několik virtuálních příslušenství, udělejte toto:

  1. Ve složce aplikace spusťte simulátor HomeKit příslušenství:

    Simulátor příslušenství HomeKit

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

    Přidat nové příslušenství

  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:

    Vyberte typ služby z rozevíracího seznamu.

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

    Zadejte název služby.

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

    Konfigurace požadovaných nastavení

  7. Opakujte výše uvedené kroky a vytvořte jeden ze všech typů virtuálních domácích zařízení, které podporuje HomeKit.

V případě vytvořených a nakonfigurovaných ukázkových doplňků Virtual HomeKit teď můžete tato zařízení využívat a řídit z vaší aplikace Xamarin. iOS.

Konfigurace souboru info. plist

Novinka pro iOS 10 (a vyšší) bude vývojář potřebovat přidat NSHomeKitUsageDescription klíč do Info.plist souboru aplikace a poskytnout řetězec, který deklaruje, proč aplikace chce 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:

Dialog oprávnění HomeKit

Tento klíč nastavíte takto:

  1. Dvojím kliknutím na Info.plist soubor v Info.plist ho otevřete pro úpravy.

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

  3. Přidá novou položku do seznamu.

  4. V rozevíracím seznamu vyberte soukromí – popis použití HomeKit:

    Vybrat soukromí – popis použití HomeKit

  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é

Nepodaří-li se nastavit NSHomeKitUsageDescription klíč v Info.plist souboru, výsledkem bude, že se aplikace NSHomeKitUsageDescription (bude ukončena systémem za běhu) bez chyby při spuštění v systému iOS 10 (nebo novějším).

Připojování k HomeKit

Aby bylo možné komunikovat s HomeKit, musí vaše aplikace Xamarin. iOS nejdřív vytvořit instanci instance HMHomeManager třídy. Home Manager je centrální vstupní bod do HomeKit a zodpovídá za poskytnutí seznamu dostupných domů, aktualizace a údržby tohoto seznamu a vrácení primární domovskéstránky uživatele.

HMHomeObjekt obsahuje všechny informace o pojmenování domů včetně všech místností, skupin nebo zón, které může obsahovat, spolu s veškerým nainstalovaným příslušenstvím pro domácí automatizaci. Předtím, než bude možné provádět operace v HomeKit, HMHome musí být vytvořen a přiřazen jako primární Domovská stránka.

Vaše aplikace zodpovídá za kontrolu existence primární domovské stránky a vytvoření a přiřazení jedné z nich, pokud ne.

Přidání správce domů

Pokud chcete do aplikace Xamarin. iOS Přidat povědomí HomeKit, 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 mít přístup k HomeKit informacím:

Uživateli se zobrazí dotaz, jestli chce mít přístup k informacím HomeKit

Pokud uživatel odpoví na OK, aplikace bude moci pracovat s jejich příslušenstvím HomeKit jinak nebude a žádná volání HomeKit selžou s chybou.

V případě, že je správce domů na místě, bude aplikace potřebovat zjistit, jestli byla nakonfigurovaná primární Domovská stránka, a pokud ne, poskytněte uživateli způsob, jak vytvořit a přiřadit ho.

Přístup k primárnímu domovskému

Jak je uvedeno výše, musí být primární Domovská stránka vytvořená a nakonfigurovaná předtím, než bude HomeKit k dispozici, a zajistit tak, aby uživatel mohl 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 a kontrolovat existenci primární domovské stránky. Pokud jeden neexistuje, měl by mu poskytnout rozhraní, které může uživatel vytvořit.

Následující kód lze přidat do kontroleru zobrazení pro kontrolu primární domovské stránky:

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ž domácí správce vytvoří připojení k HomeKit, DidUpdateHomes událost se aktivuje, všechny stávající domy se načtou do kolekce nemovitostí vedoucího a primární domů se načte, pokud je k dispozici.

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

Pokud PrimaryHome je vlastnost typu HMHomeManagernull po DidUpdateHomes události, je nutné zadat způsob, jak může uživatel vytvořit a přiřadit primární domovskou stránku, než budete pokračovat.

Aplikace se obvykle zobrazí pro uživatele, aby pojmenoval novou domovskou stránku, která se pak předá správci domů a nastaví se jako primární Domovská stránka. V případě ukázkové aplikace HomeKitIntro byla v Interface Builder Xcode vytvořena modální zobrazení, které volá Přechod z hlavního rozhraní aplikace.

Pro uživatele je k dispozici textové pole pro zadání názvu nového domů a tlačítka pro přidání domovské stránky. Když uživatel klepne na tlačítko Přidat domů , následující kód zavolá správce domů, 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);
});

AddHomeMetoda se pokusí vytvořit novou domovskou stránku a vrátí ji do daného rutiny zpětného volání. Pokud error vlastnost není null , došlo k chybě a měla by být prezentována uživateli. Nejběžnější chyby jsou způsobeny nejedinečným názvem domů nebo domácím správcem, který není schopen komunikovat s HomeKit.

Pokud se Domovská stránka úspěšně vytvořila, musíte zavolat UpdatePrimaryHome metodu pro nastavení nového domova jako primárního domove. Pokud error vlastnost není null , došlo k chybě a měla by být prezentována uživateli.

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

Důležité

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

Hledání nových příslušenství

Po definování nebo načtení primární domovské stránky z domácího správce může vaše aplikace Xamarin. iOS zavolat na, HMAccessoryBrowser aby vyhledala nové domácí prostředí pro automatizaci a přidalo je na domovskou stránku.

Zavolejte StartSearchingForNewAccessories metodu pro zahájení hledání nového příslušenství a StopSearchingForNewAccessories metody po dokončení.

Důležité

StartSearchingForNewAccessories neměl by zůstat spuštěný po dlouhou dobu, protože by negativně ovlivnil výdrž baterií i výkon zařízení s iOS. Apple navrhuje zavolat StopSearchingForNewAccessories po minutě nebo jenom vyhledává, když se uživatelské rozhraní najít příslušenství prezentuje uživateli.

DidFindNewAccessoryUdálost bude volána, když budou zjištěna nová příslušenství a budou přidána do DiscoveredAccessories seznamu v prohlížeči příslušenství.

DiscoveredAccessoriesSeznam bude obsahovat kolekci HMAccessory objektů, které definují HomeKit s povoleným domácím automatizací a jeho dostupné služby, například světla nebo řízení řídicích dveří.

Jakmile se nové příslušenství najde, měl by se uživateli prezentovat, aby ho mohl vybrat a přidat na domovskou stránku. Příklad:

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

Voláním AddAccessory metody přidejte vybrané příslušenství do kolekce domů. Napří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);
    }
});

Pokud err vlastnost není null , došlo k chybě a měla by být prezentována uživateli. V opačném případě bude uživatel vyzván k zadání instalačního kódu pro zařízení, které chcete přidat:

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

V simulátoru příslušenství HomeKit se toto číslo dá najít v poli instalační kód :

Pole kód instalace v simulátoru HomeKit příslušenství

V případě programu Real HomeKit se kód instalace buď vytiskne na štítku na samotném zařízení, v poli produktu nebo v uživatelské příručce pro uživatele tohoto příslušenství.

Měli byste monitorovat událost v prohlížeči příslušenství DidRemoveNewAccessory a aktualizovat uživatelské rozhraní, aby bylo možné odebrat příslušenství ze seznamu dostupných, jakmile ho uživatel přidal do své domovské kolekce.

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

Po přidání primární domů a zřízení a přidání příslušenství k němu můžete zobrazit seznam příslušenství (a volitelně místnosti), se kterým uživatel pracuje.

HMRoomObjekt obsahuje všechny informace o dané místnosti a všech příslušenstvích, která do ní patří. Místnosti mohou být volitelně uspořádány do jedné nebo více zón. HMZoneObsahuje všechny informace o dané zóně a všech místnostech, které do ní patří.

V tomto příkladu budeme uchovávat věci jednoduché a pracují s domácím příslušenstvím přímo místo jejich uspořádání do místností nebo zón.

HMHomeObjekt obsahuje seznam přiřazeného příslušenství, který lze uživateli předložit ve své Accessories Vlastnosti. Například:

Ukázkové příslušenství

Sem 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 HomeKit zařízením Home Automation, většinou se jedná o služby, které poskytuje. ServicesVlastnost HMAccessory třídy obsahuje kolekci HMService objektů, které definují služby, které zařízení nabízí.

Služby jsou věci jako světla, termostaty, otevírající se garáže, přepínače nebo zámky. Některá zařízení (jako je například otevřená odřízená dvířka) poskytují více než jednu službu, jako je například světlo a možnost otevřít nebo zavřít dvířka.

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

Typy služeb pro příslušenství

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

  • AccessoryInformation – poskytuje informace o daném domácím automatizačním zařízení (příslušenství).
  • AirQualitySensor – definuje senzor kvality ovzduší.
  • Baterie – definuje stav baterie příslušenství.
  • CarbonDioxideSensor – definuje senzor oxidu uhličitého.
  • CarbonMonoxideSensor – definuje senzor uhelnatý.
  • ContactSensor – definuje senzor kontaktu (například otevřené nebo uzavřené okno).
  • Dveře – definuje senzor stavu dveří (například otevřený nebo uzavřený).
  • Ventilátor – definuje vzdáleně řízený ventilátor.
  • GarageDoorOpener – definuje otevřené garáže.
  • HumiditySensor – definuje senzor vlhkosti.
  • LeakSensor – definuje senzor nevracení (jako horkou ohřívač nebo Pračkový počítač).
  • Žárovky – definuje samostatný světlo nebo světlo, které je součástí jiného příslušenství (jako je například přídavná dvířka garáže).
  • LightSensor – definuje světelný senzor.
  • LockManagement – definuje službu, která spravuje Automatický zámek dvířek.
  • LockMechanism – definuje vzdálený řízený zámek (jako zámek dvířek).
  • MotionSensor – definuje snímač pohybu.
  • OccupancySensor – definuje senzor obsazení.
  • Zásuvky – definuje dálkový řízený výstup na zeď.
  • SecuritySystem – definuje systém zabezpečení doma.
  • StatefulProgrammableSwitch – definuje programovatelný přepínač, který zůstane ve stavu po aktivaci (jako přepínač překlopení).
  • StatelessProgrammableSwitch – definuje programovatelné přepínač, který se po aktivaci vrátí do svého počátečního stavu (jako tlačítko push).
  • SmokeSensor – definuje senzor kouře.
  • Switch – definuje přepínač on/off jako standardní přepínač na zdi.
  • Senzor teploty – definuje teplotní senzor.
  • Termostat – definuje inteligentní termostat pro řízení systému TVK.
  • Window – definuje automatické okno, které třtina vzdáleně otevřelo nebo zavřelo.
  • WindowCovering – definuje vzdáleně řízené okno, které pokrývá, podobně jako nevidomé, které se dají otevřít nebo zavřít.

Zobrazení informací o službě

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

Zobrazení informací o službě

Před pokusem o práci s vlastností byste vždy měli ReachableHMAccessory zkontrolovat vlastnost . Příslušenství může být nedostupné, pokud 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 a monitorovat nebo řídit dané zařízení domácí automatizace.

Práce s charakteristikami

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

HMCharacteristic poskytuje nejen informace o charakteristikě a jejím stavu, ale také metody pro práci se stavem prostřednictvím HMCharacteristic ( HMCharacteristisMetadata ). Tato metadata mohou poskytovat vlastnosti (například minimální a maximální rozsahy hodnot), které jsou užitečné při zobrazování informací uživateli nebo při povolování jejich úpravy stavů.

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

  • AdminOnlyAccess
  • AirParticulateDensity
  • AirParticulateSize
  • AirQuality
  • Funkce AudioFeedback
  • Úroveň baterie
  • Jas
  • Zjištěná emise uhlíku
  • CarbonDileveleLevel
  • CarbonDi přidchytápeakLevel
  • Zjištěna chyba CarbonMonmone
  • CarbonMon zachycovateLevel
  • CarbonMon zachycovatePeakLevel
  • ChargingState (Stav zpoplatnění)
  • ContactState (Stav kontaktu)
  • CoolingThreshold
  • CurrentDoorState
  • CurrentHeatingCooling
  • CurrentHorizontalTilt
  • Aktuální úroveň
  • CurrentLockMechanismState
  • CurrentPosition (Aktuální pozice)
  • CurrentRelativeHumidity
  • CurrentSecuritySystemState
  • CurrentTemperature (Aktuální teplota)
  • CurrentVerticalTilt
  • FirmwareVersion
  • HardwareVersion
  • HeatingCoolingStatus
  • HeatingThreshold
  • HoldPosition
  • Odstín
  • Identifikovat
  • InputEvent
  • Zjištění nevrácené paměti
  • LockManagementAutoSecureTimeout
  • LockManagementControlPoint
  • LockMechanismLastKnownAction
  • Protokoly
  • Manufacturer
  • Modelování
  • Zjištěný pohyb
  • Název
  • Zjištěná obstrukce
  • OccupancyDetected
  • OutletInUse
  • OutputState (Výstupní stav)
  • PositionState
  • Stav napájení
  • RotationDirection (Obousměrný otočení)
  • Rychlost otáčení
  • Sytost
  • SerialNumber
  • SmokeDetected
  • SoftwareVersion
  • StatusActive
  • StavFault
  • StavJammed
  • StatusLowBattery
  • StatusTampered (Stav podle stavu)
  • TargetDoorState
  • TargetHeatingCooling
  • TargetHorizontalTilt
  • TargetLockMechanismState
  • TargetPosition (Cílová pozice)
  • TargetRelativeHumidity
  • TargetSecuritySystemState
  • TargetTemperature (Teplota cíle)
  • TargetVerticalTilt
  • TemperatureUnits
  • Verze

Práce s hodnotou charakteristik

Pokud chcete zajistit, aby aplikace měla nejnovější stav dané charakteristiky, zavolejte ReadValue metodu HMCharacteristic třídy . Pokud vlastnost není , došlo k chybě a může nebo errnull nemusí být zobrazena uživateli.

Vlastnost charakteristik obsahuje aktuální stav dané charakteristiky jako , a proto nelze pracovat přímo ValueNSObject 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 charakteristiky. Příklad:

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

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

Chcete-li HMCharacteristic upravit , zavolejte její WriteValue metodu a 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);
    }
});

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

Testování změn charakteristické hodnoty

Při práci se simulačním příslušenstvím je možné monitorovat úpravy vlastnosti v simulátoru HMCharacteristicsValue příslušenství HomeKit.

Když je aplikace HomeKitIntro spuštěná na skutečném hardwaru zařízení s iOSem, měly by se změny hodnoty charakteristik zobrazit téměř okamžitě v simulátoru příslušenství HomeKitu. 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 doplňku HomeKit. Pokud se hodnota nezmění, zkontrolujte stav chybové zprávy při psaní nových hodnot charakteristik a ujistěte se, že je příslušenství stále dosažitelné.

Pokročilé funkce HomeKit

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

  • Místnosti – příslušenství s povoleným HomeKit může volitelně organizovat do místností koncovým uživatelem. Díky tomu může HomeKit prezentovat příslušenství způsobem, který uživatelům umožňuje pochopit a pracovat s nimi. 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 v případě koncového uživatele uspořádány do zón. Zóna odkazuje na kolekci místností, které může uživatel považovat za jednu jednotku. Například: Upstairs, Downstairs nebo Basement. To umožňuje, aby HomeKit k dispozici a pracoval s příslušenstvím způsobem, který dává koncovému uživateli smysl. Další informace o vytváření a údržbě zón najdete v dokumentaci k HMZone společnosti Apple.
  • Akce a sady akcí – akce upraví charakteristiky doplňkové služby a dají se seskupit do sad. Sady akcí fungují jako skripty pro řízení skupiny příslušenství a koordinaci jejich akcí. Například skript sledování televizního vysílání může uzavřít rolety, ztlumit světla a zapnout televizor a jeho zvukový systém. Další informace o vytváření a správě 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 sad akcí, když byla splněna daná sada podmínek. Například zapněte portch světlo a zamkněte všechny externí dveře, když se dostanou tmavé mimo. 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é postupy, které jsou uvedené výše, měli byste je snadno implementovat pomocí příručky HomeKitDeveloperspolečnosti Apple, pokynů pro uživatelské rozhraní HomeKit a Referenční příručka pro HomeKit Framework.

Pokyny k revizi aplikace HomeKit

před odesláním HomeKit povolené aplikace Xamarin. iOS do itunes Připojení pro vydání v itunes app storu se ujistěte, že dodržujete pokyny společnosti Apple pro aplikace s podporou HomeKit:

  • Pokud používáte rozhraní HomeKit, musí být primárním účelem aplikace automatizace domácnosti.
  • Marketingový text aplikace musí informovat uživatele, že se HomeKit používá, a musí poskytovat zásady ochrany osobních údajů.
  • Shromažďování informací o uživateli nebo použití HomeKit pro inzerci je čistě zakázané.

Pokyny k úplné kontrole najdete v tématu pokyny pro kontrolu obchodu s aplikacemispolečnosti Apple.

Co je nového v iOS 9

Společnost Apple provedla následující změny a dodatky do HomeKit pro iOS 9:

  • Zachování existujících objektů – Pokud se změní existující příslušenství, správce distribuce ( ) bude informovat o konkrétní položce, která byla změněna.
  • Trvalé identifikátory – všechny relevantní třídy HomeKit nyní obsahují vlastnost k jednoznačné identifikaci dané položky napříč HomeKit aplikacemi (nebo instancemi stejné aplikace).
  • Správa uživatelů – Přidali jste integrovaný kontroler zobrazení, který uživatelům poskytuje správu uživatelů, kteří mají přístup k zařízením HomeKit v domovské stránce primárního uživatele.
  • Uživatelské možnosti – HomeKit uživatelé teď mají sadu oprávnění, která řídí, jaké funkce můžou používat v příslušenství HomeKit a HomeKit. Vaše aplikace by měla pro aktuálního uživatele zobrazit pouze relevantní možnosti. Například Správci by měli být schopni udržovat jiné uživatele.
  • Předdefinované scény – předdefinované scény se vytvořily pro čtyři běžné události, ke kterým dochází pro průměrného uživatele HomeKit: získat nahoru, opustit, vrátit, přejít na postel. Tyto předdefinované scény nelze odstranit z domovské stránky.
  • Scény a Siri -Siri mají hlubší podporu pro scény v iOS 9 a můžou rozpoznat název libovolné scény definované v HomeKit. Uživatel může jednoduše spustit scénu, a to tak, že ho mluví a Siri.
  • Kategorie příslušenství – sada předdefinovaných kategorií byla přidána do všech příslušenství a pomáhá identifikovat typ příslušenství přidávaného do domácnosti nebo z vaší aplikace, na kterém jste pracovali. Tyto nové kategorie jsou k dispozici při nastavení příslušenství.
  • Apple Watch Support – HomeKit je teď k dispozici pro watchOS a Apple Watch bude moct kontrolovat zařízení s povoleným HomeKit, aniž by byl poblíž tohoto kukátka iPhone. HomeKit for watchOS podporuje následující funkce: zobrazení domů, řízení příslušenství a provádění scén.
  • Nový typ triggeru události – navíc k aktivačním událostem typu časovače podporovaným v iOS 8, iOS 9 teď podporuje triggery událostí na základě stavu příslušenství (například dat ze senzorů) nebo geografického umístění. Aktivační procedury událostí slouží NSPredicates k nastavení podmínek pro jejich spuštění.
  • Vzdálený přístup – se vzdáleným přístupem uživatel teď může řídit své HomeKité příslušenství pro domácí automatizaci, když jsou od domu na vzdáleném místě. V systému iOS 8 to bylo podporováno pouze v případě, že uživatel měl na domovském zařízení Apple pro vytváření třetích generací. V systému iOS 9 je toto omezení zrušeno a vzdálený přístup je podporován prostřednictvím iCloud a protokolu HomeKit (HAP).
  • nové možnosti Bluetooth s nízkou spotřebou energie (HomeKit) teď podporují více typů příslušenství, které mohou komunikovat prostřednictvím Bluetoothho protokolu s nízkou spotřebou energie (). při použití zabezpečeného tunelování v HAP může HomeKit příslušenství vystavovat další Wi-Fi Bluetooth přes (pokud se nejedná o Bluetoothý rozsah). V systému iOS 9 má příslušenství v systému na bázi a úplnou podporu pro oznámení a metadata.
  • nové kategorie příslušenství – společnost Apple přidala následující kategorie příslušenství v systému iOS 9: pokrytí oken, motorové dveře a Windows, poplašné systémy, senzory a programovatelné přepínače.

Další informace o nových funkcích HomeKit v iOS 9 najdete v článku o HomeKit indexu společnosti Apple a novinky v HomeKit videu.

Souhrn

Tento článek zavedl rozhraní HomeKit pro domácí automatizaci společnosti Apple. Ukázal, jak nastavit a nakonfigurovat testovací zařízení pomocí simulátoru příslušenství HomeKit a jak vytvořit jednoduchou aplikaci Xamarin. iOS pro zjišťování, komunikaci s a řízení zařízení s domácím automatizací pomocí HomeKit.