Pojďme programovat elektroniku

Programování elektroniky: Ovládáme lacinou klimatizaci z příkazové řádky

  • Dnes z počítače ovládneme lacinou mobilní klimatizaci
  • Je totiž vybavená Wi-Fi a napojením do systému Tuya
  • Budeme i zapínat a vypínat v Pythonu

Zatímco jedním z největších spotřebitelských témat v Evropské unii a USA je v posledních letech právo na opravu, my, domácí kutilové, bastlíři a makeři všeho druhu, toužíme možná ještě více po právu na aplikační rozhraní – API.

Kdybychom o světě rozhodovali my, každá chytrá krabička bude povinně nabízet vedle napojení do všemožných systémů chytré domácnosti ještě základní rozhraní pro vývojáře, kteří si chtějí osvětlení, vysavač, lednici a sporák ovládnout po svém.

Nutno podotknout, že i v roce 2022 je to spíše ojedinělý jev a svět komerčního IoT zůstává poměrně uzavřený. Častým argumentem výrobců je bezpečnost, protože API, které nebudou mít plně pod kontrolou, považují jen za další vektor potenciálního kybernetického útoku. Fakt, že si jejich výrobek zakoupila zpravidla dospělá osoba a s vlastní osobní zodpovědností za své činy, je už bohužel tak nezajímá.

Podívejte se na video, jak zapneme klimatizaci z příkazové řádky:

Čínská Tuya dobývá hlavně lacinou elektroniku

Ironií osudu tak svět chytré domácí elektroniky otevírá hlavně kontroverzní Čína a IoT platformy tamních výrobců. Jednou z nich je Tuya, jejíž ekosystém dnes čítá více než 8 400 výrobců. Na seznamu figurují tisíce neznámých asijských značek, stejně tak ale i francouzský Schneider Electric nebo třeba Philips.

Klepněte pro větší obrázek
Mobilní aplikace Tuya Smart a ovládání laciné klimatizace od Sencoru

Tuya už také prosákla do světa laciných a v Evropě tradičně rozšířených značek jako třeba Sencor a stejně tak tvoří jádro levné chytré domácí elektroniky z Lidlu.

Kompatibilitu s evropskou legislativou, co se ochrany dat týče, zajišťuje hned několik serverů na území Evropské unie. Pokud je zvolíte, nemusíte se alespoň podle výrobce obávat, že vaše informace potečou skrze ústředí Komunistické strany Číny.

Cloudový management chytrých krabiček

Nás kutily nicméně spíše než jednotná mobilní aplikace Tuya Smart pro Android a iOS, pomocí které můžete kompletně ovládat celou chytrou domácnost, zajímá vývojářský portál iot.tuya.com.

Ten totiž neslouží jen pro výrobce, kteří by rádi Tuyu implementovali do své elektroniky, ale účet si zde může vytvořit naprosto každý. Třeba právě kutil, který pak se svým cloudovým projektem spáruje skrze mobilní apku koncová zařízení, získá jejich přístupové klíče a může je ovládat svépomocí.

Klepněte pro větší obrázek
Správa zařízení v konzoli pro vývojáře

Slouží k tomu standardní příkazy ve formátu JSON, kterými lze popsat prakticky cokoliv od chytré varné konvice po robotický vysavač, automatické rolety a klimatizaci.

Loni na podzim pak Tuya představila i kompletní SDK pro vývoj v Pythonu, který vlastní integraci elektroniky ještě více zjednoduší a nabízí servis, který bychom u západní konkurence zpravidla hledali jen velmi marně.

Maličká knihovna TinyTuya pro Python

A právě v Pythonu si Tuyu ukážeme i v dnešním článku, namísto oficiálního a košatého SDK nicméně použijeme komunitní knihovnu TinyTuya, která to už podle svého názvu ještě více zjednodušuje. K dispozici je na GitHubu, kde najdete i hromadu příkladů, stejně tak ji ale můžete získat skrze instalátor balíčků pro Python pip.

TinyTuya umožnuje ovládání zařízení v ekosystému Tuya buď skrze cloudové API – tedy přes internet z jakéhokoliv místa na světě –, stejně tak ale nabízí přístup skrze místní síť a UDP. To se hodí pro případy, kdy nebude k dispozici internetové připojení, ale jen LAN.

Kuřáci mě donutili k nákupu klimatizace

Bydlím v pátém patře, všechna okna mám orientovaná směrem na západ a v domě se ke všemu před lety uhnízdilo několik kuřáků, kteří v parném létu obtěžují ostatní obyvatele prakticky nepřetržitým vypouštěním dýmu. Pokud si u nás budete chtít po západu slunce vyvětrat, riskujete zamoření celého bytu nikotinovým kouřem.

Klepněte pro větší obrázek
Teplota vzduchu na mém rozpáleném balkoně za poslední tří měsíce

Aby toho nebylo málo, dispozice domu není zrovna nejvhodnější pro instalaci klasické dvoudílné klimatizační jednotky, která by problém s chlazením alespoň trošku řešila, a tak jsem loni zašel do nejbližšího hobby marketu a přitáhl domů lacinou 1kW mobilní klimatizaci s chobotem, pro který jsem v panelu vysekal větrací šachtu.

Kdejaké laciné zařízení má Wi-Fi

Lepší kousky s kvalitním odvodem horkého vzduchu sice dokážou malý byt zchladit podobně jako menší nástěnná klima, nicméně za cenu vysokého hluku a tvorby podtlaku v místnosti.

Je to prostě kompromis. Na stranu druhou, zhruba od 5 000,- už velmi často nechybí Wi-Fi, mobilní aplikace a napojení do chytrých ekosystémů od Amazonu, Googlu a Applu. U klasických nástěnných klimatizací je to naopak i nadále spíše výjimka.

Klepněte pro větší obrázek
Laciná mobilní klimatizace za pár tisíc s chobotem a Wi-Fi

Toto ale není recenze mobilních klimatizací, rovnou tedy přejdu k tomu podstatnému. Mozkem klimatizace je mezi kutily oblíbený Wi-Fi čip od Espressifu, čili kdybych jednotku demontoval, mohu na mikrokontroler nahrát vlastní firmware třeba z Arduina, anebo některý z těch komunitních. Třeba ESPhome.

V mém případě to ale není třeba, Sencor totiž použil firmware od Tuyi, a tak se s klimatizací spojím přímo pomocí jejího oficiálního API pro vývojáře.

Svůj projekt spáruji se zařízením pomocí QR

Nainstaloval jsem tedy na mobil apku Tuya Smart a spároval v ní klimatizaci. Poté jsem si vytvořil účet na vývojářském portálu Tuya a založil nový projekt v sekci Cloud. Každý takový projekt má své Access ID/Client ID, což je jedinečný identifikátor, a Access Secret/Client Secret, což je zase přístupový klíč.

Klepněte pro větší obrázek
V Tuya IoT Platform jsem vytvořil nový projekt, ve kterém budu spravovat svoje zařízení

Obě hodnoty budu později potřebovat při přístupu k zařízení. Nejprve ale musím nějaké propojit se svým projektem, což provedu v jeho administraci a v sekci Devices. Najdu zde seznam všech svých hraček v ekosystému Tuya, aktuální stav a také tlačítko Add Device. Propojení zařízení s projektem probíhá skrze QR kód.

Klepněte pro větší obrázek
Nové zařízení spáruji s projektem skrze QR kód, který sejmu v mobilní aplikaci Tuya

QR kód mohu samozřejmě předat i někomu jinému a na dálku pak spravovat jeho chytrou elektroniku z jednoho vývojářského pultíku.

Klepněte pro větší obrázek
A už je tam. Mám práva ke čtení a zápisu do zařízení a také k jeho správě

Ovládací instrukce v JSON

Vývojářský dashboard toho umí opravdu hodně. Když si otevřu kartu některého ze zařízení, dozvím se základní informace, příslušnost ke konkrétnímu geografickému datacentru, se kterým komunikuje (můj projekt by měl být v tom stejném), nechybějí ale ani podrobné časové logy všech událostí a konečně záložka Device Debugging.

Klepněte pro větší obrázekKlepněte pro větší obrázek
Grafický a textový terminál pro zasílání instrukcí v JSON

Je to vlastně jakýsi GUI/text terminál pro zasílání JSON příkazů přímo do zařízení skrze cloudové API.

Takže kdybych chtěl svoji klimatizaci zapnout, stačí odeslat instrukci v JSON:

{
    "code": "switch",
    "value": true
}

A kdybych ji chtěl zapnout, ale zároveň nastavit také režim na chlazení, teplotu na 18 °C a ventilátor na nejvyšší otáčky, dávku upravím tímto způsobem:

[
  {
    "code": "switch",
    "value": false
  },
  {
    "code": "mode",
    "value": "cold"
  },
  {
    "code": "temp_set",
    "value": 18
  },
  {
    "code": "fan_speed_enum",
    "value": "high"
  },
]

Díky strukturovanému formátu JSON mohu v jedné zprávě kombinovat celou řadu dílčích příkazů.

Spojíme se s klimatizací skrze TinyTuya

Tak, to by na webu stačilo a hurá na ten Python. Nainstaloval jsem knihovnu TinyTuya na své domácí Raspberry Pi, ke kterému jsem se skrze SSH připojil z bezplatného editoru Visual Studio Code a připravil si první ukázku stručného kódu, který jen ověří spojení s klimatizací skrze cloudové API a vypíše konfiguraci zařízení opět ve formátu JSON.

Klepněte pro větší obrázek
Textový výstup ve spodní části prozrazuje, že jsem se úspěšně spojil s klimatizací a získal její aktuální stav ve formátu JSON

Abych to dokázal, budu potřebovat ony identifikační hodnoty mého projektu (Access ID a Access Secret) a ještě identifikátor zařízení Device ID, který najdu v seznamu spárovaných spotřebičů na webu.

Celý kód bude vypadat takto:

import tinytuya as tt

# Přístup pres Tuya Cloud (internet)
cloud = tt.Cloud(
    apiRegion = "eu", # Geografický region/datacentrum
    apiKey = "sk8uycg7aqood", # Access ID projektu
    apiSecret = "19b1d39c0a784a", # Access Secret
    apiDeviceID = "54766874e86" # Device ID
)

# Pole odpovídajících zařízení
spotrebice = cloud.getdevices()

# Projdu pole
for spotrebic in spotrebice:
    print(f"Název: {spotrebic['name']}")
    print(f"ID: {spotrebic['id']}")

    # Vypíšu surový obsak stavu zařízení v JSON
    stav = cloud.getstatus(spotrebic["id"])
    print(f"\n{stav}")

Funguje to! V terminálu se brzy zobrazí informace o mé klimatizaci. Používám cloudové API, takže to zabere možná pár sekund, spojení totiž probíhá skrze server kdesi v evropském datacentru.

Na stranu druhou, takto se mohu s klimatizací spojit odkudkoliv, i když bude moje chytrá domácnost za NATem routeru a infrastrukturou operátora – i bez veřejné a pevné domácí IP adresy.

Posíláme povely v JSON do klimatizace

Pasivní čtení stavu je ale nuda. Převezmu proto iniciativu a skript výše upravím pro zasílání zpráv. Když přidám terminálový parametr zapni, klimatizace se spustí, no a když vypni, analogicky se zastaví.

Klepněte pro větší obrázek
Zapnutí a vypnutí klimatizace z příkazové řádky pomocí skriptu v Pythonu

Jak už jsme si řekli výše, zprávy se do zařízení zasílají ve formátu JSON a knihovna TinyTuya k tomu má metodu sendcommand(idZařízení, JSON). Upravený kód by proto mohl vypadat třeba takto:

import tinytuya as tt
import sys

# ID naší klimatizace v systému Tuya Cloud
klimatizaceId = "54766874e86"

# Instrukce pro zapnutí
zapni = {
    "commands":[
        {
            "code": "switch",
            "value": True
        }
    ]
}

# Instrukce pro vypnutí
vypni = {
    "commands":[
        {
            "code": "switch",
            "value": False
        }
    ]
}

# Přístup Tuya Cloud (internet)
cloud = tt.Cloud(
    apiRegion = "eu", # Geografický region/datacentrum
    apiKey = "sk8uycg7aqood", # Access ID projektu
    apiSecret = "19b1d39c0a784a", # Access Secret
    apiDeviceID = klimatizaceId # Device ID
)

# Pole odpovídajících zařízení
spotrebice = cloud.getdevices()

# Projdu pole
for spotrebic in spotrebice:
    print(f"ID: {spotrebic['id']}")

    # Vypíšu surový obsak stavu zařízení v JSON
    stav = cloud.getstatus(spotrebic["id"])
    print(f"\n{stav}")

print("")

# Pokud jsem použil parametr zapni, zapnu klimatizaci
if "zapni" in sys.argv:
    print("*** ZAPÍNÁM KLIMATIZACI ***")
    odpoved = cloud.sendcommand(klimatizaceId, zapni)
    print(f"Odpověď: {odpoved}")

# Pokud jsem použil parametr vypni, vypnu klimatizaci
elif "vypni" in sys.argv:
    print("*** VYPÍNÁM KLIMATIZACI ***")
    odpoved = cloud.sendcommand(klimatizaceId, vypni)
    print(f"Odpověď: {odpoved}")

Spouštíme a vypínáme klimu z příkazové řádky

Pokud by se náš skript v Pythonu jmenoval třeba ovladani.py, pro spuštění klimatizace stačí zavolat příkaz:

python3 ovladani.py zapni

No a pro vypnutí:

python3 ovladani.py vypni

Začátečníky v Pythonu pro jistotu upozorním na to, že příkaz výše odpovídá mé konfiguraci interpretu Pythonu. Na vašem počítači se spouštěcí program nemusí jmenovat python3, ale prostě jen python nehledě na jeho verzi.

A když nechceš cloud, můžeš použít LAN a UDP

Stejným způsobem bych mohl klimatizaci předat i jiný a klidně i kombinovaný příkaz, který bude měnit otáčky ventilátoru, cílovou teplotu a další parametry.

A jelikož na platformě Tuya běží i hromada dalších typů elektroniky, analogickým způsobem ovládnu třeba osvětlení, chytré zásuvky a další spotřebiče na identickém protokolu. Jen zvolím adekvátní instrukce v JSON.

Klepněte pro větší obrázek
Ovládání v LAN bez potřeby internetu se liší hlavně jednodušším číselným formátem instrukcí v JSON a klíčem pro lokální spojení se spotřebičem

A pokud bych chtěl celý Tuya Cloud odstřihnout, v TinyTuya mohu nakonec pracovat i se zmíněným přístupem skrze LAN a UDP bez potřeby internetu. Tento krok vyžaduje další stupeň autorizace a odlišný formát příkazů v JSON. Jak na to, se dozvíte přímo na GitHubu knihovny TinyTuya.

Demokratizace integrace je nezbytná

Co napsat na závěr? Je smutné, že podobný vývojářský servis nenabízejí i západní výrobci a majitel spotřebiče se nemůže do nitra krabičky dostat po své vlastní ose. Snad se situace časem zlepší a ekosystémy se otevřou podobným způsobem jako právě Tuya.

Je to nezbytné pro další úroveň demokratizace IoT v budoucnosti – tedy demokratizace jeho integrace.

Diskuze (23) Další článek: Kolo na dvě půlky, a stejně to jede. Jen chceme vidět, až se to rozsynchronizuje…

Témata článku: Google, Apple, Cloud, Internet, Programování, Pojďme programovat elektroniku, USA, Android, Amazon, iOS, Čína, Evropa, Wi-Fi, Python, Evropská unie, GitHub, Raspberry Pi, Arduino, API, Philips, Lidl, Klimatizace, Sencor, Projekt, Tuya, Produkty Apple na jednom místě - Heureka.cz



Sex manželských párů? Jen výjimečně. Ložnice ovládnou roboti s umělou inteligencí

Sex manželských párů? Jen výjimečně. Ložnice ovládnou roboti s umělou inteligencí

** Sex manželských párů jen při zvláštních příležitostech. ** Ložnice ovládnou sexuální roboti s umělou inteligencí. ** I to je jeden ze závěrů Mezinárodní robotické konference.

Filip KůželJiří Liebreich
RobotiSexUmělá inteligence
Tuto českou základnu plnou satelitů nesmíte vidět. V Mapy.cz je každá anténa pečlivě vyretušovaná

Tuto českou základnu plnou satelitů nesmíte vidět. V Mapy.cz je každá anténa pečlivě vyretušovaná

** Zapomeňte na rozčtverečkovaná místa, kterých si každý všimne ** Mapy.cz musely dokonale zakrýt desítky parabol ** Základnou se přitom na webu chlubí i její majitel. Kocourkov

Jakub Čížek
ČeskoMapy.czMapy
Kurvítka v základní výbavě, výrobci mají umělé zastarávání v malíku. Začalo to bateriemi, pokračuje softwarem

Kurvítka v základní výbavě, výrobci mají umělé zastarávání v malíku. Začalo to bateriemi, pokračuje softwarem

** Nejen mobilní výrobci jsou naučeni rok od roku prodávat stále více telefonů ** Tento trend se však zákonitě musí někdy zastavit ** Jenže, co naplat, když jsou starší zařízení „uměle“ nepoužitelná?

Martin Chroust
Prasklý displejBaterieAktualizace softwaru
15 praktických tipů a triků pro Mapy.cz, které možná neznáte

15 praktických tipů a triků pro Mapy.cz, které možná neznáte

** Mapy.cz neslouží jen k zobrazení podkladů a plánování tras ** Nabízejí celou řadu dalších praktických funkcí a možností ** Vybrali jsme 15 tipů a triků, o kterých možná nevíte

Karel Kilián
Mapy.czMapyTipy
Kde se vzala potřeba velkých operačních pamětí v telefonech a kolik RAM zabírá Android?

Kde se vzala potřeba velkých operačních pamětí v telefonech a kolik RAM zabírá Android?

** RAM je po procesoru druhým nejdůležitějším HW parametrem ** Stará se o rychlý multitasking a o svižné načítání dat ** Věděli jste, kolik v RAM průměrně zabírá Android 12?

Martin Chroust
Virtuální RAMOperační paměť
Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

** Google umí kromě vyhledávání i spoustu dalších věcí ** Vybrali jsme více než 15 užitečných funkcí a schopností ** Stačí zadat do vyhledávače ta správná klíčová slova

Karel Kilián
TipyVyhledávačeGoogle
Oppo a OnePlus nesmí v Německu prodávat telefony. Zákaz hrozí i v dalších zemích EU

Oppo a OnePlus nesmí v Německu prodávat telefony. Zákaz hrozí i v dalších zemích EU

** Patentové spory většinou ústí k tomu, že jedna z firem zaplatí ** Oppo ani OnePlus však nechtějí platit 2,50 EUR za každý telefon ** Firmy už v Německu nesní prodávat, a to může platit i o dalších trzích

Martin Chroust
NěmeckoPatentSmartphony
Nastal pravý čas na výměnu telefonu. Jak poznat, že ten váš už dosluhuje?

Nastal pravý čas na výměnu telefonu. Jak poznat, že ten váš už dosluhuje?

** Jak poznat, že váš telefon má nejlepší dny za sebou? ** Vypadá potlučeně, má pavučinu nebo nedostává aktualizace? ** Ukážeme si, kdy má smysl jeho oprava, a kdy už jen koupě nového

Martin Chroust
Prasklý displejVysloužilý mobilSmartphony