Ha! Okay, I’m a dumb. It does indeed have an undocumented MicroSD card slot, directly above the Ethernet port – but hidden under the removable vent cover panel.
It isn’t mentioned in the manual, but it is drawn on a schematic view of the device with its vent cover panel removed for sensor installation.
Out of pure curiosity, how did you learn these things will read from the MicroSD slot in this particular way?
Edit: My device did read and execute the script, but it bailed when it found /opt/app/disk/S91smb does not exist. This raises additional questions about why mine would be different. I purchased and installed it in June 2023, and it displays firmware version 2.0.413.
I don’t know what its whole file system looks like. I might have to hack at the script a little to get it to output some more information to the log file about what’s already there. Would be nice to just have a shell so I don’t have to shlep out there sneakernetting the script and its log on an itty bitty flake that really wants to get lost in my garden, but we’ll see. 
Edit 2: Well, that was a learning experience.
I kept a list of all the errata that stopped the script from making it to the end on my device:
/opt/app/disk/S91smb did not exist; fabricating a primitive one similar to the vendor default was sufficient.
/etc/samba/smb.conf had unexpected content: the netbios name of the device had already been set to AVISUAL-<serial>; note the name is written AVISUAL instead of AIRVISUAL.
- The
airvisual user and group already existed as uid/gid 1003.
The script does complete successfully if one accounts for these differences.
I’m also this close to getting SSH access to work but ugh I hate busybox so much and its quirky little syntax variations. Of course it won’t take a password string from stdin. Of course installing an SSH public key in the typical location isn’t sufficient. Off-topic, I know. Rant concluded. Anyway.
Once I moved on from there, I noticed a discrepancy in the HA integration. For some reason, the integration reports particulate matter concentrations for 0.1, 1, and 2.5 microns. The actual device, however – and this is true of both the AirVisual Pro (Indoor) and AirVisual Outdoor – measures the concentrations for 1, 2.5, and 10 microns. I own both, so I am able to confirm this is consistent throughout the IQAir product documentation, the data written to the AirVisual Pro’s storage, and the data displayed on my IQAir account dashboard.
See what happened?
Yeah. Someone moved a decimal.
The AirVisual Pro actually records the measurements under the keys pm01_ugm3, pm10_ugm3, and pm25_ugm3. Obviously this is not the most consistent possible way for the product to name its measurement keys; if you assume the decimal is in the same position for all three, you get the wrong answer. Measurement of 0.1 micron particle sizes is impractical for these devices, and it is not considered part of standard AQI reporting methods.
It’s not so big a deal because the entity with the 0.1 micron particle size can be renamed, but someone who does not know this fact about air quality measurements will be misled.
Since the HA integration is just Python, I can probably fix all this up myself in a weekend and contribute a fix for the mislabeled metric, but I anticipate someone is going to scratch their head and wonder why I’m trying to move a decimal point in one weird place.
Ahhh… stay tuned.
Edit 3: The AirVisual Outdoor contains a barometric pressure sensor. The script here does obtain that measurement, but the HA integration does not use it. I will have to add that in a separate pull request and try to justify its inclusion.