1077 Commits

Author SHA1 Message Date
Samuel Siburian d7529ccb89 Merge pull request #375 from airgradienthq/feat/sps30-ooa
Add SPS30 PM sensor support for OPEN_AIR_OUTDOOR
3.6.6
2026-05-27 09:31:20 +04:00
samuelbles07 783b765df6 fix(sps30): use explicit GPIO pins for Serial1
Serial1 on ESP32-C3 defaults to wrong GPIOs. SPS30 wrapper
called begin(115200) without pin args, so Serial1 mapped to
floating pins instead of GPIO 0/1 (S8 connector).

Mirror PMS5003T::begin() pattern: Serial0 uses UART0 defaults,
Serial1 uses SenseAirS8 rx/tx pins from BoardDef.
2026-05-26 11:14:44 +04:00
samuelbles07 d47331c9de feat(outdoor): add SPS30 PM sensor support for OPEN_AIR_OUTDOOR
Indoor SPS30 support (a5e3ea2) only covered ONE_INDOOR.
Outdoor needs 1×SPS30, 2×SPS30, or SPS30+PMS5003T mixed configs.

- Rename hasSensorSPS30 → hasSensorSPS30_1, add hasSensorSPS30_2
- Rename sps30 → sps30_1, add sps30_2 instance
- Parameterize updateSPS30() by sensor ref + channel
- Per-port outdoor detection: PMS5003T first, SPS30 fallback
- SGP41 compensation only from PMS5003T T/RH channels;
  skipped entirely for 2×SPS30 (uses default 25°C/50%RH)
- buildOutdoor/OpenMetrics: firmware version field only for
  PMS5003T channels, PM gating broadened for SPS30
2026-05-25 12:25:25 +04:00
Samuel Siburian 1906cc1606 Merge pull request #374 from airgradienthq/feat/go-iaqs
feat(led): add IAQS score LED bar mode
2026-05-22 15:53:17 +04:00
samuelbles07 2829e1f5a8 fix(oled): center IAQS details 2026-05-22 15:34:45 +04:00
samuelbles07 7068ede0fc feat(oled): show IAQS score panel 2026-05-21 00:27:02 +04:00
samuelbles07 733ddf17ef feat(led): 1:1 IAQS score mapping with notification override
- iaqsHandleLeds renders one LED per score tick (score 10 -> 1 LED,
  score 0 -> 11 LEDs); old 9-LED cap removed.
- In IAQS mode, WiFiLost/ServerLost/SensorConfigFailed clear the bar
  and light only LED 0 with the status color, so the notification
  stays visible at any score. PM/CO2 modes keep their overlay path.
2026-05-20 23:13:14 +05:00
samuelbles07 0b7c8c0cb7 feat(led): add IAQS score LED bar mode
New 'iaqs' value for ledBarMode renders the GO IAQS Starter Score
(PM2.5 + CO2) on the ONE_INDOOR LED bar. Color from category
(Good/Moderate/Unhealthy), LEDs lit from severity; 9-LED cap
mirrors existing PM/CO2 modes so LEDs 0-1 stay free for
connectivity overlays.
2026-05-18 18:46:09 +05:00
samuelbles07 2fd53ac303 Remove BLE write logs 3.6.5 2026-05-13 12:43:29 +05:00
samuelbles07 1c8fc0ffa2 Remove BLE write logs 2026-05-13 12:41:23 +05:00
samuelbles07 e5a3ddccc4 Prepare release 3.6.5
Exclude update count 0.3 and 5.0 for sps30
Update lib deps on how to compile docs
2026-05-13 12:32:07 +05:00
Samuel Siburian ff61145b16 Merge pull request #373 from airgradienthq/feat/multi-dns-a-record
Bump airgradient-client: multi-A-record DNS failover for WiFi HTTPS client
2026-05-13 11:56:34 +05:00
Samuel Siburian a5e3ea2a7b Merge pull request #370 from airgradienthq/feat/sps30-support
feat: add SPS30 PM sensor support for ONE_INDOOR
2026-05-13 11:56:03 +05:00
Samuel Siburian 0e1b517685 Merge branch 'develop' into feat/sps30-support 2026-05-13 11:51:06 +05:00
samuelbles07 4b24bf8819 Bump airgradient-client: support multi DNS IP record 2026-05-12 22:51:18 +05:00
samuelbles07 63724935d2 Prepare release 3.6.4 3.6.4 2026-05-05 12:50:50 +05:00
samuelbles07 57c58d82fd Merge branch 'develop' 2026-05-05 12:49:50 +05:00
Samuel Siburian 6601f6a728 Merge pull request #372 from airgradienthq/fix/pm-correction-byraw
fix(config): parse scalingFactorViaPm25 for custom_via_pm25_raw algo
2026-05-05 12:47:54 +05:00
samuelbles07 3aefa1f2e2 fix(config): parse scalingFactorViaPm25 for custom_via_pm25_raw algo
Server sends "scalingFactorViaPm25" instead of "scalingFactor"
when correctionAlgorithm is custom_via_pm25_raw. Previous code
always looked for "scalingFactor", causing validation failure.
2026-05-05 12:40:34 +05:00
samuelbles07 4b13136022 Prepare release 3.6.3 2026-05-05 12:20:50 +05:00
Samuel Siburian 134c199392 Merge pull request #371 from airgradienthq/fix/agclient-cellular-flow
OneOpenAir airgradient-client integration of new cellular registration flow
2026-05-05 12:17:51 +05:00
samuelbles07 df3ae7aafa feat(cellular): persist operator scan result across reboots
Skips 10-minute AT+COPS=? scan on boot when prior operator
state exists. Saves serialized operator list and last successful
operator ID to SPIFFS via Configuration class. Restores before
registration in begin() and ensureClientConnection(), saves only
on success.
2026-05-04 23:56:17 +05:00
samuelbles07 907f682462 Update airgradient-client registration flow 2026-05-04 22:50:04 +05:00
samuelbles07 972c72a801 Disables C++ exception support to reduce binary size 2026-05-04 21:37:34 +05:00
samuelbles07 b370f5f245 fix(sps30): support ESP8266 builds and fix detection after PMS5003
- Replace #error with inline stub class on ESP8266 so AirGradient.h
  compiles on all platforms
- Fully reset serial port before SPS30 detection (end/begin cycle,
  flush RX buffer) to clear stale 9600-baud state from PMS5003
- Add deviceReset() call to put sensor in known state before probing
2026-04-30 16:16:21 +05:00
samuelbles07 03789e53ce Add Sensirion SPS30 deps to github action 2026-04-30 15:55:17 +05:00
samuelbles07 8b4bf500a3 style: revert unintended clang-format changes
Keep only the logical SPS30 edits; restore original formatting
in OneOpenAir.ino and AgValue.cpp.
2026-04-30 15:36:31 +05:00
samuelbles07 170cbf753e feat: add SPS30 PM sensor support for ONE_INDOOR
Add Sensirion SPS30 as an alternative PM sensor on the ONE_INDOOR
board, auto-detected at boot when PMS5003 is not found on Serial0.

- Add SPS30 UART wrapper class (src/SPS30/) following PMS5003 pattern
- Auto-detect: try PMS5003 (9600 baud) first, fall back to SPS30
  (115200 baud) on the same serial port
- Map SPS30 mass concentrations to both Ae and SP fields
- Convert SPS30 number concentrations from #/cm³ to #/0.1L (×100)
- PM0.3 and PM5.0 bins set to invalid (SPS30 lacks these)
- Remove bundled SensirionCore v0.6.0 in favor of PlatformIO-managed
  v0.7.3 to avoid duplicate symbol conflicts
2026-04-30 15:27:31 +05:00
samuelbles07 68ee315352 build: add -fno-exceptions to reduce binary size
Firmware exceeded the 1.87 MB app partition (by ~5 KB) after
adding SPS30 library. Disabling C++ exceptions saves ~185 KB.
2026-04-30 15:24:36 +05:00
Samuel Siburian 5dc04de964 Merge pull request #368 from airgradienthq/fix/revert-back-refresh-display
Remove display re-init scheduler
2026-04-07 12:24:52 +05:00
samuelbles07 a4cf0cbec7 Remove display re-init scheduler 2026-04-07 12:16:13 +05:00
samuelbles07 55e84589e7 Revert actual build flag 2026-03-30 19:30:58 +05:00
samuelbles07 d105cc9c64 Fix OneOpenAir ArduinoJson build compatibility 2026-03-30 19:29:25 +05:00
samuelbles07 1b90b7b814 Add ArduinoJson deps to CI 2026-03-30 19:12:54 +05:00
samuelbles07 1d9b3958bd Disables C++ exception support to reduce binary size 2026-03-30 18:55:55 +05:00
samuelbles07 cfec1d3a54 Add depedency for ArduinoJson from AirgradientClient 2026-03-30 18:55:24 +05:00
samuelbles07 939f9bbfbb Integrate airgradient-client with new CE registration flow 2026-03-30 18:53:25 +05:00
samuelbles07 5b1b7e700c Prepare release 3.6.3 3.6.3 2026-03-25 15:04:08 +05:00
Samuel Siburian 2943fce318 Merge pull request #366 from airgradienthq/fix/display-recover
Soft reset display every 30 minutes
2026-03-25 14:52:15 +05:00
samuelbles07 40dd07641e Soft reset display every 30 minutes 2026-03-25 02:15:35 +05:00
Samuel Siburian 7fb756bfdc Merge pull request #365 from airgradienthq/fix/co2
Drain S8 RX buffer before send read command
2026-03-25 00:08:12 +05:00
samuelbles07 56862632d8 revert back serialprint to aglog 2026-03-24 23:26:19 +05:00
Samuel Siburian 844176bbf1 Merge pull request #363 from BkSouX/fix/pm-algorithm-factory-calibration
fix: include factory_calibration in PM correction algorithm matching
2026-03-08 22:48:55 +05:00
BkSouX 120ce29abf fix: derive algorithm enum size from names array
Use sizeof on the names arrays instead of hardcoding the last enum
value. Prevents the loop from missing new algorithms when the enum
is extended. Also fixes the same pattern in matchTempHumAlgorithm.
2026-03-08 17:45:54 +01:00
BkSouX f81f2cb106 fix: include factory_calibration in PM correction algorithm matching
The loop bound in matchPmAlgorithm was set to COR_ALGO_PM_SLR_CUSTOM + 1,
which excluded COR_ALGO_PM_SLR_FACTORY_CALIBRATION from being matched.
Devices configured with factory calibration silently fell back to
COR_ALGO_PM_UNKNOWN, resulting in uncorrected PM2.5 readings.
2026-03-08 13:30:02 +01:00
samuelbles07 a326708e63 Drain rx buffer before send read command 2026-03-04 21:42:52 +05:00
Samuel Siburian 9e2b9c67cc Merge pull request #361 from petercrona/fix/sgp41-rh-t-compensation
Supply real RH/T when calling measureRawSignals
2026-02-27 14:36:25 +05:00
Samuel Siburian b8eea56459 Merge pull request #362 from airgradienthq/feat/correction-by-pm-raw
PM2.5 correction by PM2.5 Raw
2026-02-24 02:31:37 +07:00
samuelbles07 220b09c2af Fix batch correction 2026-02-24 00:19:09 +05:00
samuelbles07 85c7909e73 Add correction by PM 2.5 raw
Add dedicated function for correction by 0.3 particle count
2026-02-24 00:17:51 +05:00