Skip to content

Mijia

Main menu key: m

Local miIO (LAN) and BLE Mijia device control: detail, list, grid, groups, and device hotkeys.

Screenshots

Detail (temp/humidity sensor)

mijia-detail

List / Grid / Group

mijia-listmijia-gridmijia-group

Device detail examples

mijia-light-onmijia-light-offmijia-fan-onmijia-lamp-onmijia-fryer-onmijia-fryer-off

Shortcuts

Common

KeyAction
ESC / GOBack to main menu
hOpen / close Help
oOn
iOff
t / BtnGOToggle
rRefresh status (BLE scan for sensors)
qQuick-select page
Fn + qEdit hotkey for current device
lList view
gGrid view
dGroup view
; , / ↑← · . / / ↓→Switch device / page (depends on view)
[ ]Page grid / quick-select

List

KeyAction
Arrows / ;,. /Page
lBack to detail (or keep list nav; follow tip)
gSwitch to grid

Bottom tip example: page pN/M · arrow page · l · g

Grid

KeyAction
Arrow keysMove selection
[ ]Page
19Select cell directly
o / i / t / BtnGOOn / off / toggle

Group

KeyAction
, .Switch group
o / i / tGroup on / off / toggle
- = / 1 0If all members are lights: brightness / presets
rRefresh
[ ]Page group members

Quick select (q)

KeyAction
qBack
[ ]Page
Configured az / 09Jump to device (q reserved for this page)

Hotkey edit (Fn+q)

KeyAction
az / 09Enter hotkey
BtnGOSave; confirm replace on conflict

Detail · by device type

KeyAction
- =Brightness − / +
1 / 9 / 0Brightness presets (~1% / 90% / 100%)
[ ]Color temperature (CT-capable models)
j kHue (bslamp2 / color8 / color2)

FAN_P5 (dmaker.fan.p5)

KeyAction
- =Speed
wOscillate
mMode
aSwing angle
1 / 9 / 0Level presets

FAN_GENERIC (model contains .fan.)

KeyAction
14Level

Air purifier F20 (dmaker.airpurifier.f20)

KeyAction
15Mode
- =Speed

AIR_FRYER

KeyAction
- =Temperature
[ ]Time

Temp/humidity / BLE event (SENSOR_HT · BLE_EVENT)

KeyAction
rBLE scan refresh

PLUG / other GENERIC

On/off and refresh only.

Usage

Configure devices

In config.json devices[], fill name / name_zh / id / ip / token / model, etc. BLE sensors also need mac and ble.key. You can also manage them in the Config Web UI.

Optional hotkey (az / 09, q reserved) for one-key jump; colored hotkey letters appear next to names in list / grid.

Groups go in device_groups[], members linked by device id.

View switching

  • Detail: full status and type-specific controls for one device
  • List l: dense browsing
  • Grid g: icon grid, good for quick on/off
  • Group d: batch control by room / scene

With no devices, the tip prompts u for setup.

Communication

  • Most Wi-Fi devices: LAN miIO (same subnet as Cardputer)
  • Temp/humidity, motion / remote, etc.: BLE scan of advertisements

Update mechanism

Like Cursor, Mijia runs miIO query / control on a FreeRTOS background task. The main loop handles keys, BLE polling, and partial redraws; never draw from the task. Grid cell refreshes are queued on the main loop.

Background task

ActionBehavior
Enter AppConnect WiFi → pull current device status
Switch device / pageBump gen, invalidate unfinished old work
On / off / brightnessAsync SET, write back to UI when done
Grid / groupQueue in order QUERY or batch SET for page devices
Leave AppCancel work, wait for task exit, turn off WiFi immediately, stop BLE

Single-device query timeout ~2s; late results are dropped and status shows timeout. If a task is already running, new work is staged and chained when it finishes.

Wi-Fi devices (miIO)

  • Entering Mijia auto-connects configured WiFi, only while Mijia is foreground; disconnects on leave.
  • Connect time is not counted in device query timeout; QUERY starts after connect.
  • After control ops (on / off / brightness), devices like air fryers get a delayed QUERY to sync lagging state.

BLE devices

BLE must not scan inside the background task (can crash). The main loop handles it non-blocking:

ModeTriggerNotes
Background listenAuto on enter Mijia~30s per round, rotates BLE ads into per-device cache
Focused scanDetail rInterrupts background; focuses current device ~30s; then resumes background listen

Detail shows cached reading and Xs ago age; with no cache shows listening; r forces refresh. Grid / list BLE cells use cache only, not the miIO queue.

Partial refresh

  • Detail: icon and right control panel redraw separately; prefer dirty regions on status change.
  • Grid: after task write-back, changed cells are queued for main-loop refresh to avoid full-page flicker.
  • Group: bottom on/off / brightness bar can partial refresh; batch ops run member order and summarize success / fail.

Local timer

Air fryer detail: remaining time from the device ticks locally every second in the right panel without waiting for the next QUERY.

Supported device types (model)

Firmware classifies by model string (see mijiaClassifyModel). The table below is by control capability; unlisted models fall into GENERIC (still on/off; matching icons if any).

TypeMatch rule (examples)Capability summaryIcon
LIGHTyeelink.light.*On/off, brightness; some CT / huesee below
FAN_P5exact dmaker.fan.p5Speed, oscillate, mode, swingfan
FAN_GENERICmodel contains .fan.Levels 1–4fan
AIR_PURIFIER_F20exact dmaker.airpurifier.f20Mode, speed, AQI, etc.airpurifier
AIR_FRYERcontains airfryer or .fryer.Temperature, timefryer
PLUGcontains .plug.On/offplug
SENSOR_HTcontains sensor_ht or .ht.BLE temp/humiditysensor_ht
BLE_EVENTcontains .motion. / .remote.BLE event device(default icon)
GENERICotherBasic on/offdefault

Light model notes

model traitExtra capability
yeelink.light.lamp2CT ~2500–4800 K
yeelink.light.lamp1 / lamp4CT ~2700–5000 K
contains .monoFixed CT (not adjustable)
contains bslamp2 / color8 / color2j/k hue

Config examples: yeelink.light.lamp2, miaomiaoce.sensor_ht.t2.

Device icon assets

Icons match model substrings (longer names first). Assets from firmware data/icon/device/:

basenameOffOnTypical model fragment
airpurifieroffonairpurifier
bslamp2offonbslamp2
lamp2offonlamp2
lightoffonfallback for models containing light
fanoffonfan
fryeroffonfryer
plugoffonplug
sensor_htoffonsensor_ht
cameraoffoncamera
cookeroffoncooker
juiceroffonjuicer
wifispeakeroffonwifispeaker
defaultoffonunmatched

Grid / list also use *_25w.png small icons; on device, same-name .rgb565 bake files are preferred for faster draw.

Sparks for M5Stack Cardputer