@@ -103,29 +103,27 @@ sensor:
103103 filters :
104104 - skip_initial : 1 # Need valid data from PM 2.5 sensor before able to calculate
105105 lambda : |-
106+ // 2024 update from EPA https://www.epa.gov/system/files/documents/2024-02/pm-naaqs-air-quality-index-fact-sheet.pdf
106107 // https://en.wikipedia.org/wiki/Air_quality_index#Computing_the_AQI
107108 // Borrowed from https://github.com/kylemanna/sniffer/blob/master/esphome/sniffer_common.yaml
108- if (id(pm_2_5).state <= 12 .0) {
109+ if (id(pm_2_5).state <= 9 .0) {
109110 // good
110- return((50.0 - 0.0) / (12 .0 - 0.0) * (id(pm_2_5).state - 0.0) + 0.0);
111+ return((50.0 - 0.0) / (9 .0 - 0.0) * (id(pm_2_5).state - 0.0) + 0.0);
111112 } else if (id(pm_2_5).state <= 35.4) {
112113 // moderate
113- return((100.0 - 51.0) / (35.4 - 12 .1) * (id(pm_2_5).state - 12 .1) + 51.0);
114+ return((100.0 - 51.0) / (35.4 - 9 .1) * (id(pm_2_5).state - 9 .1) + 51.0);
114115 } else if (id(pm_2_5).state <= 55.4) {
115116 // usg
116117 return((150.0 - 101.0) / (55.4 - 35.5) * (id(pm_2_5).state - 35.5) + 101.0);
117- } else if (id(pm_2_5).state <= 150 .4) {
118+ } else if (id(pm_2_5).state <= 125 .4) {
118119 // unhealthy
119- return((200.0 - 151.0) / (150 .4 - 55.5) * (id(pm_2_5).state - 55.5) + 151.0);
120- } else if (id(pm_2_5).state <= 250 .4) {
120+ return((200.0 - 151.0) / (125 .4 - 55.5) * (id(pm_2_5).state - 55.5) + 151.0);
121+ } else if (id(pm_2_5).state <= 225 .4) {
121122 // very unhealthy
122- return((300.0 - 201.0) / (250 .4 - 150 .5) * (id(pm_2_5).state - 150 .5) + 201.0);
123- } else if (id(pm_2_5).state <= 350 .4) {
123+ return((300.0 - 201.0) / (225 .4 - 125 .5) * (id(pm_2_5).state - 125 .5) + 201.0);
124+ } else if (id(pm_2_5).state <= 325 .4) {
124125 // hazardous
125- return((400.0 - 301.0) / (350.4 - 250.5) * (id(pm_2_5).state - 250.5) + 301.0);
126- } else if (id(pm_2_5).state <= 500.4) {
127- // hazardous 2
128- return((500.0 - 401.0) / (500.4 - 350.5) * (id(pm_2_5).state - 350.5) + 401.0);
126+ return((500.0 - 301.0) / (325.4 - 225.5) * (id(pm_2_5).state - 225.5) + 301.0);
129127 } else {
130128 return(500);
131129 }
0 commit comments