Skip to content

Commit 9e1832b

Browse files
committed
Add support for number of particles on PMSX003 devices
1 parent 8240561 commit 9e1832b

File tree

5 files changed

+74
-38
lines changed

5 files changed

+74
-38
lines changed

code/espurna/config/progmem.h

+17-5
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ PROGMEM const unsigned char magnitude_decimals[] = {
207207
1, 0, 2, // THP
208208
3, 0, 0, 0, 0, 0, 0, 0, // Power decimals
209209
0, 0, 0, // analog, digital, event
210-
0, 0, 0, // PM
210+
0, 0, 0, // PM1.0, PM2.5, PM10
211+
0, 0, 0, 0, 0, 0, // Particles count
211212
0, 0, 3, 3, 0,
212213
4, 4, // Geiger Counter decimals
213214
0
@@ -231,6 +232,12 @@ PROGMEM const char magnitude_event_topic[] = "event";
231232
PROGMEM const char magnitude_pm1dot0_topic[] = "pm1dot0";
232233
PROGMEM const char magnitude_pm2dot5_topic[] = "pm2dot5";
233234
PROGMEM const char magnitude_pm10_topic[] = "pm10";
235+
PROGMEM const char magnitude_particles_0dot3_topic[] = "particles0dot3";
236+
PROGMEM const char magnitude_particles_0dot5_topic[] = "particles0dot5";
237+
PROGMEM const char magnitude_particles_1_topic[] = "particles1";
238+
PROGMEM const char magnitude_particles_2dot5_topic[] = "particles2dot5";
239+
PROGMEM const char magnitude_particles_5_topic[] = "particles5";
240+
PROGMEM const char magnitude_particles_10_topic[] = "particles10";
234241
PROGMEM const char magnitude_co2_topic[] = "co2";
235242
PROGMEM const char magnitude_lux_topic[] = "lux";
236243
PROGMEM const char magnitude_uv_topic[] = "uv";
@@ -247,6 +254,8 @@ PROGMEM const char* const magnitude_topics[] = {
247254
magnitude_power_factor_topic, magnitude_energy_topic, magnitude_energy_delta_topic,
248255
magnitude_analog_topic, magnitude_digital_topic, magnitude_event_topic,
249256
magnitude_pm1dot0_topic, magnitude_pm2dot5_topic, magnitude_pm10_topic,
257+
magnitude_particles_0dot3_topic, magnitude_particles_0dot5_topic, magnitude_particles_1_topic,
258+
magnitude_particles_2dot5_topic, magnitude_particles_5_topic, magnitude_particles_10_topic,
250259
magnitude_co2_topic, magnitude_lux_topic, magnitude_uv_topic,
251260
magnitude_distance_topic, magnitude_hcho_topic,
252261
magnitude_geiger_cpm_topic, magnitude_geiger_sv_topic,
@@ -270,8 +279,9 @@ PROGMEM const char magnitude_lux[] = "lux";
270279
PROGMEM const char magnitude_uv[] = "uv";
271280
PROGMEM const char magnitude_distance[] = "m";
272281
PROGMEM const char magnitude_mgm3[] = "mg/m³";
273-
PROGMEM const char magnitude_geiger_cpm[] = "cpm"; // Counts per Minute: Unit of local dose rate (Geiger counting)
274-
PROGMEM const char magnitude_geiger_sv[] = "µSv/h"; // µSievert per hour: 2nd unit of local dose rate (Geiger counting)
282+
PROGMEM const char magnitude_geiger_cpm[] = "cpm"; // Counts per Minute: Unit of local dose rate (Geiger counting)
283+
PROGMEM const char magnitude_geiger_sv[] = "µSv/h"; // µSievert per hour: 2nd unit of local dose rate (Geiger counting)
284+
PROGMEM const char magnitude_particles_m3[] = "particles/m³";
275285

276286

277287
PROGMEM const char* const magnitude_units[] = {
@@ -280,10 +290,12 @@ PROGMEM const char* const magnitude_units[] = {
280290
magnitude_watts, magnitude_watts, magnitude_watts,
281291
magnitude_percentage, magnitude_joules, magnitude_joules,
282292
magnitude_empty, magnitude_empty, magnitude_empty,
283-
magnitude_ugm3, magnitude_ugm3, magnitude_ugm3,
293+
magnitude_ugm3, magnitude_ugm3, magnitude_ugm3, // PM1.0, PM2.5, PM10
294+
magnitude_particles_m3, magnitude_particles_m3, magnitude_particles_m3, // Particles
295+
magnitude_particles_m3, magnitude_particles_m3, magnitude_particles_m3, // Particles
284296
magnitude_ppm, magnitude_lux, magnitude_uv,
285297
magnitude_distance, magnitude_mgm3,
286-
magnitude_geiger_cpm, magnitude_geiger_sv, // Geiger counter units
298+
magnitude_geiger_cpm, magnitude_geiger_sv, // Geiger counter units
287299
magnitude_empty
288300
};
289301

code/espurna/config/types.h

+34-28
Original file line numberDiff line numberDiff line change
@@ -274,31 +274,37 @@
274274
// Magnitudes
275275
//--------------------------------------------------------------------------------
276276

277-
#define MAGNITUDE_NONE 0
278-
#define MAGNITUDE_TEMPERATURE 1
279-
#define MAGNITUDE_HUMIDITY 2
280-
#define MAGNITUDE_PRESSURE 3
281-
#define MAGNITUDE_CURRENT 4
282-
#define MAGNITUDE_VOLTAGE 5
283-
#define MAGNITUDE_POWER_ACTIVE 6
284-
#define MAGNITUDE_POWER_APPARENT 7
285-
#define MAGNITUDE_POWER_REACTIVE 8
286-
#define MAGNITUDE_POWER_FACTOR 9
287-
#define MAGNITUDE_ENERGY 10
288-
#define MAGNITUDE_ENERGY_DELTA 11
289-
#define MAGNITUDE_ANALOG 12
290-
#define MAGNITUDE_DIGITAL 13
291-
#define MAGNITUDE_EVENT 14
292-
#define MAGNITUDE_PM1dot0 15
293-
#define MAGNITUDE_PM2dot5 16
294-
#define MAGNITUDE_PM10 17
295-
#define MAGNITUDE_CO2 18
296-
#define MAGNITUDE_LUX 19
297-
#define MAGNITUDE_UV 20
298-
#define MAGNITUDE_DISTANCE 21
299-
#define MAGNITUDE_HCHO 22
300-
#define MAGNITUDE_GEIGER_CPM 23
301-
#define MAGNITUDE_GEIGER_SIEVERT 24
302-
#define MAGNITUDE_COUNT 25
303-
304-
#define MAGNITUDE_MAX 26
277+
#define MAGNITUDE_NONE 0
278+
#define MAGNITUDE_TEMPERATURE 1
279+
#define MAGNITUDE_HUMIDITY 2
280+
#define MAGNITUDE_PRESSURE 3
281+
#define MAGNITUDE_CURRENT 4
282+
#define MAGNITUDE_VOLTAGE 5
283+
#define MAGNITUDE_POWER_ACTIVE 6
284+
#define MAGNITUDE_POWER_APPARENT 7
285+
#define MAGNITUDE_POWER_REACTIVE 8
286+
#define MAGNITUDE_POWER_FACTOR 9
287+
#define MAGNITUDE_ENERGY 10
288+
#define MAGNITUDE_ENERGY_DELTA 11
289+
#define MAGNITUDE_ANALOG 12
290+
#define MAGNITUDE_DIGITAL 13
291+
#define MAGNITUDE_EVENT 14
292+
#define MAGNITUDE_PM1dot0 15
293+
#define MAGNITUDE_PM2dot5 16
294+
#define MAGNITUDE_PM10 17
295+
#define MAGNITUDE_PARTICLES_0dot3 18
296+
#define MAGNITUDE_PARTICLES_0dot5 19
297+
#define MAGNITUDE_PARTICLES_1 20
298+
#define MAGNITUDE_PARTICLES_2dot5 21
299+
#define MAGNITUDE_PARTICLES_5 22
300+
#define MAGNITUDE_PARTICLES_10 23
301+
#define MAGNITUDE_CO2 24
302+
#define MAGNITUDE_LUX 25
303+
#define MAGNITUDE_UV 26
304+
#define MAGNITUDE_DISTANCE 27
305+
#define MAGNITUDE_HCHO 28
306+
#define MAGNITUDE_GEIGER_CPM 29
307+
#define MAGNITUDE_GEIGER_SIEVERT 30
308+
#define MAGNITUDE_COUNT 31
309+
310+
#define MAGNITUDE_MAX 32

code/espurna/sensor.ino

+1-1
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,7 @@ String magnitudeTopicIndex(unsigned char index) {
988988

989989

990990
String magnitudeUnits(unsigned char type) {
991-
char buffer[8] = {0};
991+
char buffer[14] = {0};
992992
if (type < MAGNITUDE_MAX) {
993993
if ((type == MAGNITUDE_TEMPERATURE) && (_sensor_temperature_units == TMP_FAHRENHEIT)) {
994994
strncpy_P(buffer, magnitude_fahrenheit, sizeof(buffer));

code/espurna/sensors/PMSX003Sensor.h

+18-3
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,31 @@
2121
#define PMS_TYPE_5003ST 3
2222

2323
// Sensor type specified data
24-
#define PMS_SLOT_MAX 4
24+
#define PMS_SLOT_MAX 9
2525
#define PMS_DATA_MAX 17
2626
const static struct {
2727
const char *name;
2828
unsigned char data_count;
2929
unsigned char slot_count;
3030
unsigned char slot_types[PMS_SLOT_MAX];
3131
} pms_specs[] = {
32-
{"PMSX003", 13, 3, {MAGNITUDE_PM1dot0, MAGNITUDE_PM2dot5, MAGNITUDE_PM10}},
33-
{"PMSX003_9", 9, 3, {MAGNITUDE_PM1dot0, MAGNITUDE_PM2dot5, MAGNITUDE_PM10}},
32+
{"PMSX003", 13, 9, {
33+
MAGNITUDE_PM1dot0,
34+
MAGNITUDE_PM2dot5,
35+
MAGNITUDE_PM10,
36+
MAGNITUDE_PARTICLES_0dot3,
37+
MAGNITUDE_PARTICLES_0dot5,
38+
MAGNITUDE_PARTICLES_1,
39+
MAGNITUDE_PARTICLES_2dot5,
40+
MAGNITUDE_PARTICLES_5,
41+
MAGNITUDE_PARTICLES_10
42+
}
43+
},
44+
{"PMSX003_9", 9, 3, {
45+
MAGNITUDE_PM1dot0,
46+
MAGNITUDE_PM2dot5,
47+
MAGNITUDE_PM10
48+
}},
3449
{"PMS5003T", 13, 3, {MAGNITUDE_PM2dot5, MAGNITUDE_TEMPERATURE, MAGNITUDE_HUMIDITY}},
3550
{"PMS5003ST", 17, 4, {MAGNITUDE_PM2dot5, MAGNITUDE_TEMPERATURE, MAGNITUDE_HUMIDITY, MAGNITUDE_HCHO}}
3651
};

code/html/custom.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ function magnitudeType(type) {
6060
"Current", "Voltage", "Active Power", "Apparent Power",
6161
"Reactive Power", "Power Factor", "Energy", "Energy (delta)",
6262
"Analog", "Digital", "Event",
63-
"PM1.0", "PM2.5", "PM10", "CO2", "Lux", "UV", "Distance" , "HCHO",
63+
"PM1.0", "PM2.5", "PM10",
64+
"Particles ≧0.3 ﹤0.5µm", "Particles ≧0.5 ﹤1µm", "Particles ≧1 ﹤2.5µm ",
65+
"Particles ≧2.5 ﹤5µm", "Particles ≧5 ﹤10µm", "Particles ≧10µm",
66+
"CO2", "Lux", "UV", "Distance" , "HCHO",
6467
"Local Dose Rate", "Local Dose Rate",
6568
"Count"
6669
];

0 commit comments

Comments
 (0)