dhewg / esphome-miot Goto Github PK
View Code? Open in Web Editor NEWESPHome components for MIoT devices
License: Other
ESPHome components for MIoT devices
License: Other
For the Smart Pet Food Feeder (mmgg.feeder.fi1), there's a physical/manual feed button that when pressed generates a number of messages from the MCU in the form event_occured 4 3 5 255
.
This seems to conform to the message format that I read in https://blakadder.github.io/miot/#event_occured , even though the device spec page doesn't list any events.
For this device, I haven't found a cumulative "portions dispensed today/total" property so counting the portions as they're dispensed is useful for deriving state.
I'm not sure if this is already considered in the TODO comment,
* add "access" to components? read/write/notify
* automations?
But leaving this here just in case it's useful.
I would deduce the below event stream to be
Example short press.
[20:25:21][V][miot:091]: Received MCU message 'event_occured 4 3 5 255'
[20:25:21][W][miot:297]: Unknown command 'event_occured'
[20:25:21][V][miot:174]: Sending reply 'ok' to MCU
[20:25:21][V][miot:091]: Received MCU message 'net'
[20:25:21][V][miot:174]: Sending reply 'cloud' to MCU
[20:25:21][V][miot:091]: Received MCU message 'get_down'
...
[20:25:24][V][miot:174]: Sending reply 'down none' to MCU
[20:25:24][V][miot:091]: Received MCU message 'event_occured 4 2 4 1 5 255'
[20:25:24][W][miot:297]: Unknown command 'event_occured'
[20:25:24][V][miot:174]: Sending reply 'ok' to MCU
[20:25:24][V][miot:091]: Received MCU message 'get_down'
[20:25:24][V][miot:174]: Sending reply 'down none' to MCU
[20:25:24][V][miot:091]: Received MCU message 'event_occured 4 1 4 1 5 255'
[20:25:24][W][miot:297]: Unknown command 'event_occured'
[20:25:24][V][miot:174]: Sending reply 'ok' to MCU
[20:25:24][V][miot:091]: Received MCU message 'properties_changed 4 9 0'
[20:25:24][V][miot.binary_sensor:011]: MCU reported sensor 4:9 is: OFF
Pressing and holding down the feed button:
[19:56:38][V][miot:174]: Sending reply 'down none' to MCU
[19:56:38][V][miot:091]: Received MCU message 'event_occured 4 3 5 255'
[19:56:38][W][miot:297]: Unknown command 'event_occured'
[19:56:38][V][miot:174]: Sending reply 'ok' to MCU
[19:56:38][V][miot:091]: Received MCU message 'get_down'
...
[19:56:45][V][miot:174]: Sending reply 'down none' to MCU
[19:56:45][V][miot:091]: Received MCU message 'event_occured 4 2 4 3 5 255'
[19:56:45][W][miot:297]: Unknown command 'event_occured'
[19:56:45][V][miot:174]: Sending reply 'ok' to MCU
[19:56:45][V][miot:091]: Received MCU message 'get_down'
[19:56:45][V][miot:174]: Sending reply 'down none' to MCU
[19:56:45][V][miot:091]: Received MCU message 'event_occured 4 1 4 3 5 255'
[19:56:45][W][miot:297]: Unknown command 'event_occured'
[19:56:45][V][miot:174]: Sending reply 'ok' to MCU
[19:56:45][V][miot:091]: Received MCU message 'properties_changed 4 9 0'
[19:56:45][V][miot.binary_sensor:011]: MCU reported sensor 4:9 is: OFF
[19:56:45][V][miot:174]: Sending reply 'ok' to MCU
Pressing for even longer:
[20:10:07][V][miot:091]: Received MCU message 'event_occured 4 3 5 255'
[20:10:07][W][miot:297]: Unknown command 'event_occured'
[20:10:07][V][miot:174]: Sending reply 'ok' to MCU
[20:10:07][V][miot:091]: Received MCU message 'get_down'
...
[20:10:16][V][miot:174]: Sending reply 'down none' to MCU
[20:10:16][V][miot:091]: Received MCU message 'event_occured 4 2 4 5 5 255'
[20:10:16][W][miot:297]: Unknown command 'event_occured'
[20:10:16][V][miot:174]: Sending reply 'ok' to MCU
[20:10:16][V][miot:091]: Received MCU message 'get_down'
[20:10:16][V][miot:174]: Sending reply 'down none' to MCU
[20:10:16][V][miot:091]: Received MCU message 'event_occured 4 1 4 5 5 255'
[20:10:16][W][miot:297]: Unknown command 'event_occured'
[20:10:16][V][miot:174]: Sending reply 'ok' to MCU
[20:10:16][V][miot:091]: Received MCU message 'properties_changed 4 9 0'
[20:10:16][V][miot.binary_sensor:011]: MCU reported sensor 4:9 is: OFF
I'll be available for testing this on the real device if/when this is implemented.
Hi! I was wondering if it supports zhimi.airp.rma2
(https://home.miot-spec.com/s/zhimi.airp.rma2), I don't know exactly what are the differences with the supported rmb1
Hi, I have flashed the firmware on Mi Purifier 3C (single core ESP32), and it's experiencing a bootloop.
The flash chip was erased completely before proceeding.
[C][api:140]: Address: purifier.local:6053
[C][api:142]: Using noise encryption: YES
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.
Core 0 register dump:
PC : 0x40001277 PS : 0x00060f30 A0 : 0x800db40b A1 : 0x3ffbccb0
A2 : 0x00000000 A3 : 0x3f405006 A4 : 0x3ffbccf8 A5 : 0x00000004
A6 : 0x00ff0000 A7 : 0xff000000 A8 : 0x8000c71a A9 : 0x3ffbcc80
A10 : 0x00000000 A11 : 0x3f41f66b A12 : 0x3ffbccf8 A13 : 0x00000001
A14 : 0x00ff0000 A15 : 0xff000000 SAR : 0x0000000a EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000000 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xffffffff
Backtrace: 0x40001274:0x3ffbccb0 0x400db408:0x3ffbccc0 0x400db5b1:0x3ffbcd20 0x4015f91d:0x3ffbcd50 0x4015f9a5:0x3ffbcd70 0x400e2020:0x3ffbcd90 0x400e4862:0x3ffbcdc0 0x400d9242:0x3ffbcde0
Decoded stack trace below:
0x400db408: esphome::miot::Miot::process_message_(char*) at /config/.esphome/build/purifier/src/esphome/components/miot/miot.cpp:324
0x400db5b1: esphome::miot::Miot::loop() at /config/.esphome/build/purifier/src/esphome/components/miot/miot.cpp:96
0x4015f91d: esphome::Component::call_loop() at /config/.esphome/build/purifier/src/esphome/core/component.cpp:76
0x4015f9a5: esphome::Component::call() at /config/.esphome/build/purifier/src/esphome/core/component.cpp:98
0x400e2020: esphome::Application::loop() at /config/.esphome/build/purifier/src/esphome/core/application.cpp:74
0x400e4862: loop() at /config/.esphome/build/purifier/zhimi.airp.mb4a.yaml:44
0x400d9242: esphome::loop_task(void*) at /config/.esphome/build/purifier/src/esphome/components/esp32/core.cpp:69
The specs for Smart Pet Food Feeder (mmgg.feeder.fi1) use a uint8 0 ~ 1
value instead of a boolean true ~ false
to read or control the status of some properties, for example SIID 6 PIID 1 (Child Lock)
, SIID 3 PIID 1 (Indicator Lights)
, SIID 4 PIID 8 (Food outlet door)
and SIID 4 PIID 9 (Food storage cover)
.
I'm not really sure if this should be handled as a configuration option in this component or if it's better to leave it as a combination of filters in the esphome config (or I missed some obvious solution, in which case I'm sorry for the time waste!).
I have the following configuration:
binary_sensor:
- platform: "miot"
miot_siid: 4
miot_piid: 9
name: "Top Lid"
device_class: opening
- platform: "miot"
miot_siid: 4
miot_piid: 8
name: "Food door"
device_class: opening
switch:
- platform: "miot"
miot_siid: 3
miot_piid: 1
name: "Indicator lights"
icon: mdi:lightbulb
entity_category: config
- platform: "miot"
miot_siid: 6
miot_piid: 1
name: "Child Lock"
icon: mdi:lock
inverted: yes
entity_category: config
For the Child lock switch, here's a verbose log for triggering it via the mcu_command service with command: "set_properties 6 1 0"
[19:14:19][D][miot:125]: Queuing MCU command 'set_properties 6 1 0'
[19:14:19][V][miot:091]: Received MCU message 'get_down'
[19:14:19][V][miot:174]: Sending reply 'down set_properties 6 1 0' to MCU
[19:14:19][V][miot:091]: Received MCU message 'result 6 1 0'
[19:14:19][V][miot:174]: Sending reply 'ok' to MCU
[19:14:19][V][miot:091]: Received MCU message 'properties_changed 6 1 0'
[19:14:19][V][miot.switch:011]: MCU reported switch 6:1 is: OFF
[19:14:19][V][miot:174]: Sending reply 'ok' to MCU
The inverted switch is now on in the UI, and toggling it back off results in the following verbose log
[19:16:18][D][switch:016]: 'Child Lock' Turning OFF.
[19:16:18][V][miot.switch:017]: Setting switch 6:1 ON
[19:16:18][D][miot:125]: Queuing MCU command 'set_properties 6 1 true'
[19:16:18][D][switch:055]: 'Child Lock': Sending state OFF
[19:16:18][V][miot:091]: Received MCU message 'get_down'
[19:16:18][V][miot:174]: Sending reply 'down set_properties 6 1 true' to MCU
[19:16:19][V][miot:091]: Received MCU message 'result 6 1 0'
[19:16:19][V][miot:174]: Sending reply 'ok' to MCU
[19:16:19][V][miot:091]: Received MCU message 'properties_changed 6 1 0'
[19:16:19][V][miot.switch:011]: MCU reported switch 6:1 is: OFF
[19:16:19][D][switch:055]: 'Child Lock': Sending state ON
[19:16:19][V][miot:174]: Sending reply 'ok' to MCU
For the read-only top lid state, here's the verbose log when I physically open it:
[19:18:33][V][miot:091]: Received MCU message 'properties_changed 4 8 1'
[19:18:33][V][miot.binary_sensor:011]: MCU reported sensor 4:8 is: OFF
[19:18:33][V][miot:174]: Sending reply 'ok' to MCU
and when I physically close it back:
[19:19:35][V][miot:091]: Received MCU message 'properties_changed 4 8 0'
[19:19:35][V][miot.binary_sensor:011]: MCU reported sensor 4:8 is: OFF
[19:19:35][V][miot:174]: Sending reply 'ok' to MCU
ESPHome 2023.12.9
esphome-miot@5bff0dc
Any chance to get a bit more details about the Xiaomi Smart Air Purifier 4 Lite steps?
I am trying to get my heads around with the "power on the board" step.
I tried either power on the whole unit (3 beeps from the purifier and not connecting to my UART) - since nowhere mentioned HOW should we power on the board.
And also tried directly connecting the 3V from my UART to the ESP32 chip leg (still not connecting somehow for me)
The board layout is slightly different then the previous version, so those guides doesn't really help me with the 4 Lite.
(PS: strange to me that whenever I plug the TX/RX to my UART, the power led lights up on it)
Thank you
Blind attempt to add support for Mi Air Purifier 3C (zhimi.airp.mb4a):
zhimi.airp.mb4a.yaml.txt
I can't tell if this works, but please try and report back (with logs if possible):
cc @daniel-dona @gfduszynski
I have flashed successfully Xiaomi Air Purifier 3H (zhimi.airpurifier.mb3) and everything works without any issues.
While I was monitoring the logs, I saw that the below error occurs very often:
[17:37:38][W][miot:295]: MCU time request: no time source available
It doesn't cause any negative effect, but I wanted to make sure that there are no issues before I prepare a PR with the config file and the wiki page for that particular model.
Does anyone know what can cause those errors?
When we recieve a result
message after dispatching an action
, it's in a different form than get_properties
/set_properties
/properties_changed
.
More specifically, there is only one SIID
, one AIID
and one code
, but then multiple piid
+value
pairs belonging to the same service, and the update_properties
function expects the pairs to always be siid
+piid
I believe the same will happen for event_changed
messages when those are implemented.
For convenience:
Get Properties Spec
Return value:result <siid> <piid> <code> [value] ... <siid> <piid> <code> [value]
Return value: result <siid> <piid> <code> ... <siid> <piid> <code>
format:properties_changed <siid> <piid> <value> ... <siid> <piid> <value>
Return value:result <siid> <aiid> <code> <piid> <value> ... <piid> <value>
and Event Occurred Spec (With the same format as action
)
format:event_occured <siid> <eiid> <piid> <value> ... <piid> <value>
I pushed a fix in my repo here, but I'm a noob at C++ and figured you might have a better approach to this. I also didn't add the event_occurred
case as I just realized the similarity while writing this issue.
main branch:
[20:20:48][D][miot:125]: Queuing MCU command 'action 5 6'
[20:20:49][V][miot:091]: Received MCU message 'get_down'
[20:20:49][V][miot:171]: Sending reply 'down action 5 6' to MCU
[20:20:49][V][miot:091]: Received MCU message 'result 5 6 0 12 "0,255,255,255,255,1,255,255,255,255,2,8,0,5,0,3,255,255,255,255,4,255,255,255,255"'
[20:20:49][W][miot:183]: Received property value without component: 5 6 12
[20:20:49][V][miot:171]: Sending reply 'ok' to MCU
My branch:
[20:13:21][D][miot:125]: Queuing MCU command 'action 5 6'
[20:13:22][V][miot:091]: Received MCU message 'get_down'
[20:13:22][V][miot:171]: Sending reply 'down action 5 6' to MCU
[20:13:22][V][miot:091]: Received MCU message 'result 5 6 0 12 "0,255,255,255,255,1,255,255,255,255,2,8,0,5,0,3,255,255,255,255,4,255,255,255,255"'
[20:13:22][V][miot.text_sensor:011]: MCU reported text sensor 5:12 is: 0,255,255,255,255,1,255,255,255,255,2,8,0,5,0,3,255,255,255,255,4,255,255,255,255
[20:13:22][V][text_sensor:013]: 'Feed Plan': Received new state 0,255,255,255,255,1,255,255,255,255,2,8,0,5,0,3,255,255,255,255,4,255,255,255,255
[20:13:22][D][text_sensor:064]: 'Feed Plan': Sending state '0,255,255,255,255,1,255,255,255,255,2,8,0,5,0,3,255,255,255,255,4,255,255,255,255'
[20:13:22][V][miot:171]: Sending reply 'ok' to MCU
YAML (both):
- platform: "miot"
miot_siid: 5
miot_piid: 12
miot_poll: false
name: "Feed Plan"
icon: mdi:calendar
I'm trying to create a config for Smart Pet Food Feeder (mmgg.feeder.fi1) which doesn't need a heartbeat SIID/PIID and discovered that even though miot_heartbeat_siid
and miot_heartbeat_piid
are defined as Optional in the config validator schema, they don't have a default set in __main__.py
.
With the following yaml I get no editor warnings but the below error on compilation.
external_components:
source: github://dhewg/esphome-miot@main
# ...
miot:
id: miot_main
# ...
INFO ESPHome 2023.12.9
INFO Reading configuration /config/pet-feeder.yaml...
INFO Generating C++ source...
Traceback (most recent call last):
File "/usr/local/bin/esphome", line 33, in <module>
sys.exit(load_entry_point('esphome', 'console_scripts', 'esphome')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/esphome/esphome/__main__.py", line 1041, in main
return run_esphome(sys.argv)
^^^^^^^^^^^^^^^^^^^^^
File "/esphome/esphome/__main__.py", line 1028, in run_esphome
rc = POST_CONFIG_ACTIONS[args.command](args, config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/esphome/esphome/__main__.py", line 407, in command_compile
exit_code = write_cpp(config)
^^^^^^^^^^^^^^^^^
File "/esphome/esphome/__main__.py", line 192, in write_cpp
generate_cpp_contents(config)
File "/esphome/esphome/__main__.py", line 204, in generate_cpp_contents
CORE.flush_tasks()
File "/esphome/esphome/core/__init__.py", line 679, in flush_tasks
self.event_loop.flush_tasks()
File "/esphome/esphome/coroutine.py", line 246, in flush_tasks
next(task.iterator)
File "/esphome/esphome/__main__.py", line 184, in wrapped
await coro(conf)
File "/config/.esphome/external_components/b0e0b644/components/miot/__init__.py", line 34, in to_code
cg.add(var.set_heartbeat_config(config[CONF_MIOT_HEARTBEAT_SIID], config[CONF_MIOT_HEARTBEAT_PIID]))
~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'miot_heartbeat_siid'
This yaml snippet works as intended though and no heartbeat message is being sent to the MCU.
# ...
miot:
id: miot_main
miot_heartbeat_siid: 0
miot_heartbeat_piid: 0
# ...
ESPHome 2023.12.9
esphome-miot@d64d16b
P.S. Thanks for this repo! I already have some parts of the config working beatifully for my device.
Hello,
I have a Air Purifier 4 Compact (zhimi.airp.cpa4) with a ESP32-WROOM-32D that I successfully flashed using the toolchain. However, it doesn't seem to work as expected. At first, I noticed that the buttons didn't light and the initial beep would not be heard as with the stock firmware.
In the logs, I noticed that the firmware would constantly repeat over and over the same sequences:
[21:48:16][D][miot:139]: Queuing MCU command 'get_properties 2 1 2 2 2 4 3 4 4 1 4 3 4 4 6 1 8 1 9 1 9 11 13 2'
[21:48:39][D][miot:139]: Queuing MCU command 'set_properties 11 4 60'
[21:49:16][D][miot:139]: Queuing MCU command 'get_properties 2 1 2 2 2 4 3 4 4 1 4 3 4 4 6 1 8 1 9 1 9 11 13 2'
[21:49:39][D][miot:139]: Queuing MCU command 'set_properties 11 4 60'
It seems no action are being taken into account.
I was wondering if the communication with the MCU is operational. I noticed that if I invert the UART pins for MCU serial communication I obtain the same output.
For those who are interested, here's a picture of my board, with the mandatory flashing pins highlighted.
Not seen on the photo the board model: AC-M18-SC_B01
I also join with this issue the stock firmware logs and the complete ESPHome firmware logs:
logs_zhimi.airp.cpa4_run.log
stock_firmware_ac-m18-sc.log
Also the MIOT specs:
https://home.miot-spec.com/spec/zhimi.airp.cpa4
Here's the config used for this project:
# https://home.miot-spec.com/spec/zhimi.airp.cpa4
external_components:
source: github://dhewg/esphome-miot@main
esphome:
name: purifier
friendly_name: Air Purifier
comment: Xiaomi Smart Air Purifier 4 Compact (zhimi.airp.cpa4)
project:
name: "dhewg.esphome-miot"
version: "zhimi.airp.cpa4"
esp32:
board: esp32dev
framework:
type: esp-idf
sdkconfig_options:
CONFIG_FREERTOS_UNICORE: y
advanced:
ignore_efuse_mac_crc: true
logger:
level: DEBUG
api:
encryption:
key: !secret api_encryption_key
reboot_timeout: 0s
services:
- service: mcu_command
variables:
command: string
then:
- lambda: 'id(miot_main).queue_command(command);'
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
password: !secret wifi_ap_password
captive_portal:
uart:
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 115200
miot:
id: miot_main
miot_heartbeat_siid: 11
miot_heartbeat_piid: 4
switch:
- platform: "miot"
miot_siid: 2
miot_piid: 1
name: "Power"
icon: mdi:power
- platform: "miot"
miot_siid: 6
miot_piid: 1
name: "Notification Sounds"
icon: mdi:volume-high
entity_category: config
- platform: "miot"
miot_siid: 8
miot_piid: 1
name: "Child Lock"
icon: mdi:lock
entity_category: config
select:
- platform: "miot"
miot_siid: 2
miot_piid: 4
name: "Mode"
options:
0: "Auto"
1: "Sleep"
2: "Favorite"
- platform: "miot"
miot_siid: 13
miot_piid: 2
name: "Display Brightness"
icon: mdi:brightness-6
entity_category: config
options:
0: "Off"
1: "Low"
2: "High"
text_sensor:
- platform: "miot"
miot_siid: 1
miot_piid: 5
miot_poll: false
name: "Serial Number"
icon: mdi:numeric
entity_category: diagnostic
- platform: "miot"
miot_siid: 2
miot_piid: 2
name: "Device Fault"
icon: mdi:fan-alert
entity_category: diagnostic
filters:
- map:
- "0 -> No Faults"
- "2 -> Motor Stop"
- "3 -> Sensor Lost"
number:
- platform: "miot"
miot_siid: 9
miot_piid: 11
name: "Favorite Level"
icon: mdi:speedometer
min_value: 0
max_value: 14
step: 1
- platform: "miot"
miot_siid: 9
miot_piid: 9
name: "Manual Level"
icon: mdi:speedometer
min_value: 1
max_value: 11
step: 1
sensor:
- platform: "miot"
miot_siid: 3
miot_piid: 4
name: "PM2.5 Density"
unit_of_measurement: "µg/m³"
device_class: pm25
state_class: "measurement"
- platform: "miot"
miot_siid: 4
miot_piid: 1
name: "Filter Life Level"
unit_of_measurement: "%"
icon: mdi:air-filter
- platform: "miot"
miot_siid: 4
miot_piid: 3
name: "Filter Used Time"
entity_category: diagnostic
unit_of_measurement: "h"
icon: mdi:air-filter
- platform: "miot"
miot_siid: 4
miot_piid: 4
name: "Filter Lifetime Remaining"
entity_category: diagnostic
unit_of_measurement: "d"
icon: mdi:air-filter
- platform: "miot"
miot_siid: 9
miot_piid: 1
name: "Motor Speed"
unit_of_measurement: "rpm"
icon: mdi:fan
button:
- platform: "miot"
miot_siid: 2
miot_aiid: 1
name: "Toggle Power"
icon: mdi:power
- platform: "miot"
miot_siid: 9
miot_aiid: 1
name: "Toggle Mode"
icon: mdi:cached
Got 2 Air Purifier 4 Lite, Firmware updated both of them, but one of the unit keeps "disconnecting" from the network (like the Wifi signal goes off on the OLED display)
Still, I am able to update the firmware via Wifi-OTA from ESPHome, it is "alive", but no information sent to ESPHome. Based on log the device goes into "cloud mode" which as I remember happened similarly when I blocked the net with the original firmware. (now there is no block on these models).
When I do a power cycle it start sending again data, can control it and so on, but after a while It goes off again. First I set up a reboot upon network lost, but obviously this is not the case here since I can still access it and can see the log files.
Attached the latest log. (bedroom which do this issue) and for reference the good one (living room)
logs_air-purifier-bedroom_run.txt
logs_air-livingroom_logs.txt
Thanks
Hi,
I have here a dmaker.fan.p18 and a dmaker.fan.p33 (Mi Smart Standing Fan 2 and Mi Smart Standing Fan 2 Pro). Difference between the two is that one has a battery, otherwise they should be the same. The specs differ slightly though:
https://home.miot-spec.com/s/dmaker.fan.p18
https://home.miot-spec.com/spec?type=urn:miot-spec-v2:device:fan:0000A005:dmaker-p18:1
https://home.miot-spec.com/s/dmaker.fan.p33
https://home.miot-spec.com/spec?type=urn:miot-spec-v2:device:fan:0000A005:dmaker-p33:1
Screenshots of the app show that there are differences regarding accessible controls through the app. The control name for speed adjustment differs:
(dmaker.fan.p18 / Mi Smart Standing Fan 2)
(dmaker.fan.p33 / Mi Smart Standing Fan 2 Pro)
These are pictures of the dmaker.fan.p33 / Mi Smart Standing Fan 2 Pro version (for the other one I haven't done the sull teardown yet but I could see inside that it's an ESP-WROOM-02D for both):
Unlike the Air Purifier devices that are already supported in this project these fans don't seem to have an easily accessible UART port so one probably has to flash directly on the pins of the ESP-WROOM-02D.
I checked plenty of contacts combinations for continuity but for the ESP-WROOM-02D I could only find test points for IO13 and IO15 on the backside of the PCB (marked in the pictures above) + 3.3V and GND. My hope is that IO13 and IO15 would work if I use them in the ESPHome config:
uart:
tx_pin: GPIO15
rx_pin: GPIO13
baud_rate: 115200
For Air Purifier 4 Lite the config looks like this:
uart:
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 115200
and the docucmentation (ESP32-WROOM-32D - https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf) states this :
This is from the ESP-WROOM-02D documentation ( https://www.espressif.com/sites/default/files/documentation/esp-wroom-02u_esp-wroom-02d_datasheet_en.pdf ):
As a next step I will try backing up the original firmware and flashing the chip with ESPHome, starting with only a basic config and as a next step I would try if e.g. a switch added to the config would work. I'd be happy though if - in the meantime - maybe one of the pros here could share their opinion if these things I've summarized here make sense. Thank you!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.