Google | Android | Chytrá domácnost

Android Things: Další pokus Googlu ovládnout svět internetu věcí

  • Zkoušel to před lety s Android@Home
  • Pak zkusil projekt Brillo
  • Nyní to je Android Things

Je to už více než pět let, co Google s velkou pompou představil svoji iniciativu Android@Home a věstil, že to bude právě jeho mobilní platforma, která ovládne chytrou domácnost.

Roky plynuly a plynuly, nicméně domy a byty ovládly namísto Googlu především drobné cetky od hromady výrobců počínaje LED žárovkami ovládanými z mobilu a konče chytrými zásuvkami s Wi-Fi.

Co je to vlastně chytrá domácnost?

Ani v tomto případě se však nejedná o chytrou domácnost v pravém slova smyslu, ta totiž předpokládá, že všechny tyto prvky budou navzájem komunikovat skrze nějaký centrální bod třeba v podobě brány podobné W-Fi routeru a jednotné mobilní aplikace na všechno. Namísto toho máme často na každou chytrou věc jednu chytrou aplikaci, což ani v nejmenším není… Chytré.

Tento problém částečně řeší zastřešující ovládací systémy jako třeba Fibaro, který jsme si vyzkoušeli letos na jaře, ani jeden z nich však není natolik chytrý, abych se jej odvážil doporučit třeba svým rodičům a otravoval jim život složitým nastavováním všemožných rolí chytrých žárovek a dalších modulů.

429661459 243031234 522436108 61754663 628133113
Chytrá domácnost integrovaná podle Fibara: K routeru připojíte centrální jednotku Home Center a nakoupíte elektroniku s podporou bezdrátového protokolu Z-WAVE. Třeba ovladač topení nebo RGB LED žárovku. Poté vše spárujete s centrální jednotkou a můžete ostatní prvky ovládat a programovat z webového prohlížeče a centrální mobilní aplikace.

Největším úskalím každého systému pro chytrou domácnost je totiž opravdu to, aby ta chytrost nakonec nespočívala v tom, že to bude náramně komplikovanéSheldon Cooper Certified. Koncept chytré domácnosti předpokládá, že když do ní připojíte nový inteligentní prvek, třeba tu RGB žárovku, prostě ji zašroubujete do závitu, načež se sama během okamžiku spojí s ovládací jednotkou, vysvětlí ji, co umí (zhasnout, rozsvítit, nastavit barvu aj.) a ve vašem mobilu se v aplikaci pro chytrou domácnost rázem objeví nové světlo.

U žárovek to s podobnou ergonomií dnešní systémy jako třeba zmíněné Fibaro opravdu zvládnou, jakmile se však jedná o sofistikovanější prvek, už to tak slavné není. A hlavně, komponenta chytrého systému musí umět s řídící jednotkou také komunikovat, což znamená, že musí mluvit srozumitelným jazykem – tedy protokolem. Fibaro používá bezdrátový protokol Z-WAVE, který je sice úsporný, takže leckterý prvek může dlouhé měsíce běžet i na baterii, ovšem stinnou stránkou věci je fakt, že si tím pádem musíte pořídit vše výhradně s podporou tohoto protokolu. Žárovka s Bluetooth vám bude k ničemu.

Suma sumárum, naprosto hloupá domácnost s vypínačem světel na stěně má i po letech zdaleka nejpřímočařejší ergonomii. Prostě to sakra funguje.

Brillo a Weave

Těch pár odstavců výše mělo především podtrhnout, proč Android@Home ve své rané fázi selhal. Postavit opravdu funkční ekosystém chytré domácnosti je prostě oříšek, na kterém si zatím všichni hráči spolehlivě vylámali zuby, a vítězí proto uzavřené a přímočaré systémy malých výrobců, jejichž vypínače a žárovky fungují, a tak se na scéně prostě etablovaly.

Google si však nenechal zajít chuť, svůj systém dále rozpracovával a před dvěma lety na I/O 2015 představil projekt Brillo a komunikační protokol Weave. Zatímco Brillo měl být operační systém pro sofistikovanější chytrou elektroniku internetu věcí, Weave onen komunikační protokol, kterým se budou jednotlivé komponenty domlouvat.

751468782
Textový protokol Weave má mezi jednotlivými prvky chytré domácnosti přenášet příkazy i údaje o tom, co která věc umí: „Ahoj, já jsem nová žárovka a rozumím příkazům ZAPNOUT, VYPNOUT, BARVA a JAS.“ Není to nový koncept, je ale jednodušší a Google si věří, že je dost velký, aby dokázal prosadit právě svoji podobu.

Google svůj systém Brillo rozvíjel a dušoval se, že do něj nažene právě klíčové výrobce oněch drobných komponent. Pokud by takový Belkin a jeho WeMo, TP-Link, Honeywell a další skutečně začali podporovat Weave, mohlo by to konečně znamenat určitý zlom, Weave je totiž na rozdíl od Z-WEAVE především datový protokol – softwarový. Až tak neřeší, jestli informace poputuje skrze Wi-Fi, Bluetooth nebo jiný transportní protokol, pokud jej samozřejmě podporuje nějaká hypotetická centrální jednotka.

Po čase však i Brillo pomalu začínalo připomínat mnohé zapomenuté experimenty. Utekl jeden rok, pak druhý a systém byl stále ve fázi uzavřeného testování, aniž by si jej mohl vyzkoušet kdejaký bastlíř s deskou Arduina doma na stole.

Android Things

Krátce před Vánocemi se však vše změnilo a Google na svém vývojářském blogu oznámil, že je Brillo již dostatečně daleko, aby jej mohl alespoň stále v rané verzi představit široké vývojářské komunitě.

A aby dal svým slovům ještě větší váhu, rozloučil se se značkou Brillo a dal systému mnohem smysluplnější název Things, Android Things.

53063690
Struktura systému Android Things. Zcela dole je linuxové jádro, pak knihovny a pojítka na služby Googlu a jeho cloud a zcela nahoře stejně jako na jiných androidech program v Javě.

Firma z amerického Mountain View tedy uzavírá kruh, vrací se i terminologicky ke kořenům vize Android@Home a rozšiřuje své portfolio. Android může běžet na telefonech, tabletech i větších počítačích, může běžet v automobilech, na zápěstí uvnitř chytrých hodinek a nyní bude moci běžet i v drobnější elektronice internetu věcí. Jeho hlavní výhodou oproti konkurenci má být nativní napojení do ekosystému Googlu. Android Things tedy přináší do světa IoT nativní podporu technologií a API Googlu. Chytrá krabička tedy bude moci posílat data přímo do cloudu, bude se moci napojit na chytrou asistenční službu Google Home, bude podporovat Play Services aj.

388206308
Google představil první veřejnou verzi systému Android Things

To vše bude zastřešovat důraz na bezpečnost – přímá OTA aktualizace ze serverů Googlu, aniž by docházelo k fragmentaci verzí jako ve světě telefonů s Androidem, šifrovaná komunikace aj.

516621047 393210552 959011791
Google zatím připravil Android Things ve formě firmwaru jen pro Intel Edison, Raspberry Pi 3 a NXP Pico. Právě tato trojice prototypovacích desek slouží pro testování nového systému. Já mám k dispozici Intel Edison a při pokusu o flash Android Things jsem jej briknul, ačkoliv jsem postupoval přesně dle návodu... Mám tedy program pro nadcházející dny a musím jej znovu oživit.

Android Things je však opravdu na začátku. Aktuálně je k dispozici jako firmware pro prototypovací desky Intel Edison (x86 Atom), NXP Pico (ARM Cortex A7) a také pro populární mikropočítač Raspberry Pi 3 (ARM Cortex A53). Zacílení systému je tedy podobné jako v případě Windows IoT, které nabízejí firmware téměř pro totožný hardware.

A co Arduino a další drobná elektronika?

Android Things stejně jako Windows IoT není odpovědí třeba na jednoduchá Arduina s čipy ATmega, populární programovatelné Wi-Fi čipy ESP8266 a ARMy z kategorie Cortex M (zejména čipy STM32), protože tato nejdrobnější elektronika, které se věnuji v našem seriálu Pojďme programovat elektroniku, se programuje přímo a bez potřeby mnohovrstevnatého a v tomto měřítku obrovského operačního systému. Přitom toho ale po připojení třeba do Wi-Fi zvládnou poměrně hodně.

661682321
Android Things není odpovědí na nejjednodušší prototypovací elektroniku internetu věcí. Například mezi bastlíři velmi oblíbené programovatelné Wi-Fi čipy ESP8266 stojí pár dolarů a základní práci (odeslání dat kamsi na sever) zvládnou také dobře.

Ze stejného důvodu asi Android Things jen tak nepoběží na oněch chytrých žárovkách, protože je skutečně zbytečné, aby elektronika s takto jednoduchou logikou musela mít ve svém nitru linuxový kernel, nad kterým běží každý Android včetně toho pro internet věcí.

Android Things a protokol Weave by ale měly do světa IoT přinést tak zoufale chybějící bezpečnost komunikace a šifrování, která se na této nejjednodušší úrovni skutečně zatím příliš neřeší, protože jednoduché mikrokontrolery nemají po ruce adekvátní kryptografické obvody a dostatečný výkon pro čistě softwarové šifrování.

Možná tedy bude nakonec zajímavější sledovat, jak a jestli vůbec Android Things a jeho iniciativa propojit veškerý domácí IoT svým protokolem Weave nepromění i tuto scénu. Třeba tak, že nové generace mikrokontrolerů a jejich knihoven budou vysněný protokol Googlu nabízet také.

Na stranu druhou, o IoT nerozhodují bastlíři a jejich Arduina, ale výrobci komerční elektroniky. Jestli se tedy protokol Weave a Android Things prosadí, bude záležet nakonec výhradně na tom, jestli se je Googlu opravdu podaří přesvědčit. A tím nemyslím jednoho, dva, ale všechny velké, na jejichž chytré žárovky a další cetky narazíte na každém e-shopu. Pokud ne, bude to opět jen zajímavá věc pro pár early-adopterů, firem a skalních nadšenců do technologií Googlu.


Na závěr a pod čarou se podívejte, jak vypadá na Android Things klasický demonstrační program, který nedělá nic jiného, než že rozbliká připojenou LED diodu.

Pro srovnání nejprve standardní kód pro Arduino a kompatibilní platformy, který vždy na sekundu světýlko na pinu 13 rozsvítí a na sekundu zhasne:

void setup(){
 pinMode(13, OUTPUT);
}

void loop(){
 digitalWrite(13, HIGH);
 delay(1000);
 digitalWrite(13, LOW);
 delay(1000);
}

A nyní kód pro Android Things v Javě, který dělá to samé:

/*
 * Copyright 2016, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.androidthings.simplepio;

import android.app.Activity;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.PeripheralManagerService;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

import java.io.IOException;

/**
 * Sample usage of the Gpio API that blinks an LED at a fixed interval defined in
 * {@link #INTERVAL_BETWEEN_BLINKS_MS}.
 *
 * Some boards, like Intel Edison, have onboard LEDs linked to specific GPIO pins.
 * The preferred GPIO pin to use on each board is in the {@link BoardDefaults} class.
 *
 */
public class BlinkActivity extends Activity {
 private static final String TAG = BlinkActivity.class.getSimpleName();
 private static final int INTERVAL_BETWEEN_BLINKS_MS = 1000;

 private Handler mHandler = new Handler();
 private Gpio mLedGpio;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Log.i(TAG, "Starting BlinkActivity");

 PeripheralManagerService service = new PeripheralManagerService();
 try {
 String pinName = BoardDefaults.getGPIOForLED();
 mLedGpio = service.openGpio(pinName);
 mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
 Log.i(TAG, "Start blinking LED GPIO pin");
 // Post a Runnable that continuously switch the state of the GPIO, blinking the
 // corresponding LED
 mHandler.post(mBlinkRunnable);
 } catch (IOException e) {
 Log.e(TAG, "Error on PeripheralIO API", e);
 }
 }

 @Override
 protected void onDestroy() {
 super.onDestroy();
 // Remove pending blink Runnable from the handler.
 mHandler.removeCallbacks(mBlinkRunnable);
 // Close the Gpio pin.
 Log.i(TAG, "Closing LED GPIO pin");
 try {
 mLedGpio.close();
 } catch (IOException e) {
 Log.e(TAG, "Error on PeripheralIO API", e);
 } finally {
 mLedGpio = null;
 }
 }

 private Runnable mBlinkRunnable = new Runnable() {
 @Override
 public void run() {
 // Exit Runnable if the GPIO is already closed
 if (mLedGpio == null) {
 return;
 }
 try {
 // Toggle the GPIO state
 mLedGpio.setValue(!mLedGpio.getValue());
 Log.d(TAG, "State set to " + mLedGpio.getValue());

 // Reschedule the same runnable in {#INTERVAL_BETWEEN_BLINKS_MS} milliseconds
 mHandler.postDelayed(mBlinkRunnable, INTERVAL_BETWEEN_BLINKS_MS);
 } catch (IOException e) {
 Log.e(TAG, "Error on PeripheralIO API", e);
 }
 }
 };
}
Diskuze (25) Další článek: 5 praktických tipů, které využijete při sestavování rodokmenu na internetu

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,