
Nos episĂłdios anteriores, eu:
- Comprei dispositivos da Xiaomi para uma casa inteligente e, usando um ferro de soldar, fiz com que funcionassem de forma divertida - sem servidores nativos através do assistente doméstico ( link para o post )
- Envolvido a interface da web do assistente de casa em elétron ( link para a postagem ) com suporte para notificações, menus, tochbar, etc. (código aqui)
- miio ( ) xiaomi_miio.
, . "" IoT lisp-, . .
Xiaomi:
- udp
- ,
- ,
Home Assistant:
- ,
- , Home Assistant
- Single Point of Failure
home assistant — . ~1000, Home Assistant Raspberry PI ~4000, Home Assistant - . .
, CPU, , " — , — " . Home Assistant.
xiaomi , - , json-based dsl ( ).
"" , . zigbee/ble esp32/nrf51 , …
.
Xiaomi CO2, , home assistant , , ….
, , , , , arduino-ide ( -), , , , "" .

Proof of concept:
- CO2 — 1
- — 1
- — 2
- home assistant — 1
- cli — 1
- ,
home-assistant Xiaomi "chuangmi.plug.v3 1.3.0_92 ESP8266 detected". , ESP8266 — (~100/) , . Wi-Fi, I2C/SPI/UART/GPIO. ESP8266 Xtensa 80/160Mhz 32- 112 Tensilica ( - , tensilica 2013, esp8266 2014), 1 , .
. ESP8266 . esp201 — , 2.54mm. arduino …
…
ESP8266. Xtensa Wi-Fi — , - . nrf51 (~150/). , . .
CO2
aliexpress CO2 ( ). CCS811 ( ). (~500/) , CO2 TVOC , , 60, CCS811 .
LED 8x8 max7219 (~100/). ...
hlk-pm03 (~200/). 4- ; 220v AC, 3.3v DC esp8266.
, . . ( - — ).
:
- SensorPack — CCS811 ESP201 I2C ( , )
- Pixel — LED 8x8, max7219 ESP201 SPI
SensorPack

Pixel :

:
- USB/UART
- UART "Hello world!"
- Wi-Fi
- CCS811 UART
- / led
20-50 . .
, :
- /
- /
- DSL /
udp , Xiaomi wi-fi , . — udp , ip/ — udp . — . , — xiaomi , ( ), , / "Faster! Harder! Scooter!" " — !".
python.
python , .
, aes128-cbc :
- 128 — Initialization Vector (IV) aes128
- — , aes128
, IV python arduino api.
python
IV, , replay attack. , xiaomi replay attack, :) , IV IV , . ...
?
, , python-, , . , -. ? FLOPS , , , . , ?! , led , n — .
JS . ESP8266 JS, . Lua, NodeMCU ESP8266. , lua .
lua …
, :
- 1 esp201 lua
- NodeMCU lua , . , , …
lua , .
uLisp
" ?” — , lisp. , , ---- lisp esp8266, uLisp. c — @technoblogy :
- udp
- ulisp
- s-expression
- ip/
- api ulisp CCS811 Max7219
Lua , ulisp arduino ulisp . ulisp , , C++. , lisp arduino.
:
192.168.2.99 — IP SensorBoard
192.168.2.174 — IP Pixel
:
python tools/client.py --ip 192.168.2.99 --message '(+ 1 2)' --key YOUR_AES128_HEX_KEY
>> (+ 1 2)
<< 3
discovery. , ulisp.
python tools/client.py --ip 192.168.2.99 --message '(discovery)' --key YOUR_AES128_HEX_KEY
>> (discovery)
<< ("light-read" "co2-read" "tvoc-read" "humidity-read" "temperature-read")
CCS811
python tools/client.py --ip 192.168.2.99 --message '(list (co2-read) (tvoc-read))' --key YOUR_AES128_HEX_KEY
>> (list (co2-read) (tvoc-read))
<< (840 67)
REPL,
python tools/client.py --ip 192.168.2.174 --message '(discovery)' --key YOUR_AES128_HEX_KEY
>> (discovery)
<< ("show" "request")
show — led
request — , , ,
# led 30
(defun show_sensor (x)
(show
(format nil "CO2=~a TVOC=~a"
(first x)
(second x))
30000))
# 33 , show_sensor
(periodic 33000
(quote
(request
"192.168.2.99"
54321
(quote (list
(co2-read)
(tvoc-read)))
'show_sensor)))
Pixel
$ python tools/client.py --ip 192.168.2.174 --mfile ulisp_scripts/red.ulisp --key YOUR_AES128_HEX_KEY
Pixel SensorPack
lisp . Raspberry PI — . , - Home Assistant lisp . SPoF, Home Assistant.
SensorPack USB Wi-Fi

, , , dsl, lisp . , s-expression ( json, , lisp — s-expression).
Vou esculpir mais outros dispositivos no mesmo protocolo, os prĂłximos da fila sĂŁo ESP32 e NRF51 ...
E ao mesmo tempo vou terminar o firmware para um estado mais mercearia, se vocĂŞ de repente se interessar, participe!
PS Todos os ataques ao Home Assistant são feitos com muito amor, eu até sou um pouco committer nisso.