
Di episode sebelumnya, saya:
- Saya membeli perangkat dari Xiaomi untuk rumah pintar dan, menggunakan besi solder, membuatnya bekerja dengan cara yang menyenangkan - tanpa server asli melalui asisten rumah ( tautan ke pos )
- Membungkus antarmuka web dari asisten rumah menjadi elektron ( tautan ke pos ) dengan dukungan untuk notifikasi, menu, tochbar, dll. (Kode di sini)
- 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).
Saya akan memahat lebih banyak perangkat lain pada protokol yang sama, baris berikutnya adalah ESP32 dan NRF51 ...
Dan pada saat yang sama saya akan menyelesaikan firmware ke status yang lebih grosir, jika Anda tiba-tiba tertarik, bergabunglah!
PS Semua serangan terhadap Asisten Rumah dibuat dengan cinta yang besar, saya bahkan sedikit pelaku di sana.