Smart Home–tip na nějakou SM Gateway
Po nějaké době (psáno původně na FB, na blogu jsem ještě o smart home asi nepsal) zase něco ke "smart home" zařízením.
Neměl byste někdo vyzkoušenou nějakou smart home bránu, která:
1) Dokáže se připojit do WIFI sítě. Ale snesu i RJ45 konektor.
2) Mohou se k ní připojit bluetooth a bluetooth low energy (BLE) zařízení. A BLE má co největší dosah.
3) Podporuje ZigBee. Sice žádné ZigBee zařízení zatím nemám, ale to se asi brzy změní.
4) Podporuje zařízení od různých výrobců.
5) Nabízí nějaké rozumné API - je mi jedno, jestli půjde o REST API nebo o nějaké C/C++ SDK.
Můj původní záměr, že budu pořizovat zařízení jen od jednoho výrobce, vzal už dávno za své. Nedávno jsem si pořídil několik bluetooth teploměrů od XIAOMI (na AliExpressu jsou ještě levnější). Vím, XIAOMI byste doma nechtěli, ale nemusíte se bát, komunikaci teploměrů jsem prozkoumal fakt důkladně, doma nás nešpehují, nic důvěrného nikam neposílají a i když s gustem proklínáte (nejen čínské) komunisty, tak se žádné pekelné cenzorské moduly neaktivují. :) Tyhle teploměry za pár desetikorun (viz odkaz v komentářích) mají v sobě i bluetooth LE.
Sice se mi daří na Raspberry PI 4 odchytávat bluetooth komunikaci mezi dvěma patry (sleduju jen 'advertisements', nepřipojuju se k teploměru, abych nevybíjel baterii), ale spousta paketů se asi na cestě ztratí. Pakety jsou kryptované přes AES CCM, ale stačilo odchytit "bind key", přes který komunikuje aplikace od XIAOMI, podívat se, co XIAOMI aplikace dělá a klíč pro AES CCM byl na světě - pro fajnšmekry dodávám, že auth tag jsou 4 poslední bajty v paketu, AAD je poněkud lamerská fixní hodnota 0x11 a je třeba sestavit nonce.
Prototyp funguje dobře, nepotvrdilo se, že RPI 4 komunikuje s BT se zařízením do maximální vzdálenosti jednoho metru, ale stejně bych raději měl nějakou spolehlivější gateway.
A nějaká "relay" zařízení (ESP32) umístěná blízko teploměru, ve kterých odchytím BT pakety a přes LAN je přepošlu do své aplikace, bych bral jako poslední možnost. Máte někdo třeba XIAOMI BT gateway (3) a mohli byste napsat, jaký je jeji skutečný dosah přes BT?
Tady je vidět, že pakety chytám a můj BT sniffer na RPI 4 funguje.
Veškeré nápady, tipy, triky, zkušenosti jsou vítány. Díky.
Friday, October 22, 2021 11:27:14 AM (Central Europe Standard Time, UTC+01:00)
Tip na knihu: Crafting Interpreters od Roberta Nystroma
Kniha Crafting Interpreters od Roberta Nystroma, kterou jsem o víkendu dočetl, je dílem, které by se mohlo stát klasikou.
Pro koho kniha je? Chtěli jste někdy vytvořit svůj vlastní programovací jazyk, nebo mít jednoduchý "embedovaný" skriptovací jazyk v aplikaci ? Moc ambiciózní a vy jste spokojeni se stávajícími jazyky? Hráli jste si třeba s C# Roslyn SDK, nebo jste použili C# generators a zhrozili jste se, jak amatérsky a nevzhledně vypadá generátor kódu? Samozřejmě ne ten váš generátor, ale generátor kolegy? Tedy generátor zní pořád až příliš vznešeně, co jsem tak různě viděl, spíš spojování stringů na steroidech, u pokročilejších s využitím StringBuilderu?
V knize Crafting Intepreters Robert Nystrom navrhne jazyk Lox. Lox je taková mini-Java (mini-C#, prostě jazyk s C like syntaxí), ale i přes nehezké přízvisko mini, které jsem použil v předchozí větě, LOX podporuje i OOP nebo closures - funkce, které zachytí proměnné ve svém okolí.
V první části knihy autor nejprve napíše jednoduchý parser, lexer a interpreter Loxu v Javě.
V druhé a pro mě zajímavější části autor napíše pro LOX (stack based) virtuální stroj v jazyce C včetně jednoduchého, ale plně funkčního garbage collectoru (jednovláknový, nekonkurenční, "stop the world"). A vytvoříte všechny instrukce pro virtuální stroj včetně vlastního disassembleru. A když když máte VM v C, portování Loxu na další HW platformy je hračka.
Je poněkud tragické vidět vývojáře, kteří třeba intermediate language (IL) a VM v .NET považují za černé skříňky, kterým nemusejí vůbec rozumět. Do určité míry je to pravda, ale u každé netriviální aplikace potřebujete znát trochu více než syntaxi zvoleného programovacího jazyka a pár knihoven. A někdy ani nestačí, že jako firemní vývojářské eso rozpoznáte, kde je vyhledávací pole na StackOverflow, kam posléze vložíte své zoufalé a bezradné skřeky.
Na knize je skvělé, že obsahuje kompletní zdrojový kód. Ne útržky, ne odkazy na github. Veškerý výklad je prokládán kódem a je docela úleva číst knihu, ve které nejsou jen neoptimalizované fragmenty kódu, ale autor si dá práci, aby před vámi neskrýval žádné kroky, svůj kód před vámi vyladil a upozornil na typické chyby, kterých se dopustí asi každý, pokud píše třeba parser poprvé.
Zvláštní cenu autor dostává za to, že nepoužívá trapné věty typu "tuto funkci už psát nebudeme, ponecháme ji jako cvičení pro bystré čtenáře." Moudří vědí, že jako cvičení pro čtenáře se často nechávají úlohy, které autor knihy nezvládne. Tento otravný a trapný trik asi autoři knih převzali od přednášejících mdlého ducha, kteří mají času dost, ale stejně ve stanoveném čase nestihnou vykoktat penzum znalostí, které si sami čerstvě osvojili den před svou přednáškou na konferenci, a s chutí přehazují povinnosti na posluchače.
Také oceňuji, že kniha pro Kindle má všechny výpisy kódu čitelné. Pořád nejde o samozřejmost. Sami jste asi také narazili na odbornou eknihu, která byla formátována tak, že zdrojový kód nebo tabulky nebylo možné přečíst bez opičích chvatů (podržením prstu zvětším grafický objekt a skroluji tam a zpátky).
Za tuhle knihu si autor zaslouží zaplatit, ale kdybyste byli i po mé nadšené anotaci na vážkách, nebo máte zrovna hluboko do kapsy, kniha je na webu zdarma.
Monday, October 4, 2021 6:08:50 PM (Central Europe Standard Time, UTC+01:00)