ESPHome 2026.2.1
Loading...
Searching...
No Matches
pmsx003.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace esphome::pmsx003 {
9
10enum class Type : uint8_t {
11 PMS1003 = 0,
12 PMS3003,
13 PMSX003, // PMS5003, PMS6003, PMS7003, PMSA003 (NOT PMSA003I - see `pmsa003i` component)
18};
19
20enum class Command : uint8_t {
21 MEASUREMENT_MODE = 0xE1, // Data Options: `CMD_MEASUREMENT_MODE_PASSIVE`, `CMD_MEASUREMENT_MODE_ACTIVE`
22 MANUAL_MEASUREMENT = 0xE2,
23 SLEEP_MODE = 0xE4, // Data Options: `CMD_SLEEP_MODE_SLEEP`, `CMD_SLEEP_MODE_WAKEUP`
24};
25
26enum class State : uint8_t {
27 IDLE = 0,
29 WAITING,
30};
31
33 public:
34 PMSX003Component() = default;
35 void setup() override;
36 void dump_config() override;
37 void loop() override;
38
39 void set_update_interval(uint32_t update_interval) { this->update_interval_ = update_interval; }
40
41 void set_type(Type type) { this->type_ = type; }
42
43 void set_pm_1_0_std_sensor(sensor::Sensor *pm_1_0_std_sensor) { this->pm_1_0_std_sensor_ = pm_1_0_std_sensor; }
44 void set_pm_2_5_std_sensor(sensor::Sensor *pm_2_5_std_sensor) { this->pm_2_5_std_sensor_ = pm_2_5_std_sensor; }
45 void set_pm_10_0_std_sensor(sensor::Sensor *pm_10_0_std_sensor) { this->pm_10_0_std_sensor_ = pm_10_0_std_sensor; }
46
47 void set_pm_1_0_sensor(sensor::Sensor *pm_1_0_sensor) { this->pm_1_0_sensor_ = pm_1_0_sensor; }
48 void set_pm_2_5_sensor(sensor::Sensor *pm_2_5_sensor) { this->pm_2_5_sensor_ = pm_2_5_sensor; }
49 void set_pm_10_0_sensor(sensor::Sensor *pm_10_0_sensor) { this->pm_10_0_sensor_ = pm_10_0_sensor; }
50
51 void set_pm_particles_03um_sensor(sensor::Sensor *pm_particles_03um_sensor) {
52 this->pm_particles_03um_sensor_ = pm_particles_03um_sensor;
53 }
54 void set_pm_particles_05um_sensor(sensor::Sensor *pm_particles_05um_sensor) {
55 this->pm_particles_05um_sensor_ = pm_particles_05um_sensor;
56 }
57 void set_pm_particles_10um_sensor(sensor::Sensor *pm_particles_10um_sensor) {
58 this->pm_particles_10um_sensor_ = pm_particles_10um_sensor;
59 }
60 void set_pm_particles_25um_sensor(sensor::Sensor *pm_particles_25um_sensor) {
61 this->pm_particles_25um_sensor_ = pm_particles_25um_sensor;
62 }
63 void set_pm_particles_50um_sensor(sensor::Sensor *pm_particles_50um_sensor) {
64 this->pm_particles_50um_sensor_ = pm_particles_50um_sensor;
65 }
66 void set_pm_particles_100um_sensor(sensor::Sensor *pm_particles_100um_sensor) {
67 this->pm_particles_100um_sensor_ = pm_particles_100um_sensor;
68 }
69
70 void set_formaldehyde_sensor(sensor::Sensor *formaldehyde_sensor) {
71 this->formaldehyde_sensor_ = formaldehyde_sensor;
72 }
73
74 void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; }
75 void set_humidity_sensor(sensor::Sensor *humidity_sensor) { this->humidity_sensor_ = humidity_sensor; }
76
77 protected:
79 void parse_data_();
80 bool check_payload_length_(uint16_t payload_length);
81 void send_command_(Command cmd, uint16_t data);
82 uint16_t get_16_bit_uint_(uint8_t start_index) const {
83 return encode_uint16(this->data_[start_index], this->data_[start_index + 1]);
84 }
85
88 bool initialised_{false};
89 uint8_t data_[64];
90 uint8_t data_index_{0};
91 uint32_t fan_on_time_{0};
92 uint32_t last_update_{0};
93 uint32_t last_transmission_{0};
94 uint32_t update_interval_{0};
95
96 // "Standard Particle"
100
101 // "Under Atmospheric Pressure"
105
106 // Particle counts by size
113
114 // Formaldehyde
116
117 // Temperature and Humidity
120};
121
122} // namespace esphome::pmsx003
sensor::Sensor * pm_10_0_sensor_
Definition pmsx003.h:104
sensor::Sensor * pm_1_0_std_sensor_
Definition pmsx003.h:97
void set_update_interval(uint32_t update_interval)
Definition pmsx003.h:39
sensor::Sensor * pm_particles_100um_sensor_
Definition pmsx003.h:112
void set_pm_particles_03um_sensor(sensor::Sensor *pm_particles_03um_sensor)
Definition pmsx003.h:51
sensor::Sensor * pm_2_5_sensor_
Definition pmsx003.h:103
void set_formaldehyde_sensor(sensor::Sensor *formaldehyde_sensor)
Definition pmsx003.h:70
sensor::Sensor * pm_particles_03um_sensor_
Definition pmsx003.h:107
sensor::Sensor * formaldehyde_sensor_
Definition pmsx003.h:115
void set_pm_particles_25um_sensor(sensor::Sensor *pm_particles_25um_sensor)
Definition pmsx003.h:60
sensor::Sensor * pm_2_5_std_sensor_
Definition pmsx003.h:98
sensor::Sensor * humidity_sensor_
Definition pmsx003.h:119
void set_pm_1_0_sensor(sensor::Sensor *pm_1_0_sensor)
Definition pmsx003.h:47
void set_pm_10_0_std_sensor(sensor::Sensor *pm_10_0_std_sensor)
Definition pmsx003.h:45
void set_temperature_sensor(sensor::Sensor *temperature_sensor)
Definition pmsx003.h:74
sensor::Sensor * pm_1_0_sensor_
Definition pmsx003.h:102
sensor::Sensor * pm_particles_10um_sensor_
Definition pmsx003.h:109
sensor::Sensor * pm_10_0_std_sensor_
Definition pmsx003.h:99
void set_pm_particles_100um_sensor(sensor::Sensor *pm_particles_100um_sensor)
Definition pmsx003.h:66
void set_pm_2_5_sensor(sensor::Sensor *pm_2_5_sensor)
Definition pmsx003.h:48
sensor::Sensor * pm_particles_25um_sensor_
Definition pmsx003.h:110
sensor::Sensor * pm_particles_05um_sensor_
Definition pmsx003.h:108
sensor::Sensor * temperature_sensor_
Definition pmsx003.h:118
void set_pm_particles_50um_sensor(sensor::Sensor *pm_particles_50um_sensor)
Definition pmsx003.h:63
uint16_t get_16_bit_uint_(uint8_t start_index) const
Definition pmsx003.h:82
void send_command_(Command cmd, uint16_t data)
Definition pmsx003.cpp:202
sensor::Sensor * pm_particles_50um_sensor_
Definition pmsx003.h:111
void set_pm_10_0_sensor(sensor::Sensor *pm_10_0_sensor)
Definition pmsx003.h:49
void set_pm_2_5_std_sensor(sensor::Sensor *pm_2_5_std_sensor)
Definition pmsx003.h:44
bool check_payload_length_(uint16_t payload_length)
Definition pmsx003.cpp:181
void set_pm_1_0_std_sensor(sensor::Sensor *pm_1_0_std_sensor)
Definition pmsx003.h:43
void set_pm_particles_10um_sensor(sensor::Sensor *pm_particles_10um_sensor)
Definition pmsx003.h:57
void set_humidity_sensor(sensor::Sensor *humidity_sensor)
Definition pmsx003.h:75
void set_pm_particles_05um_sensor(sensor::Sensor *pm_particles_05um_sensor)
Definition pmsx003.h:54
Base-class for all sensors.
Definition sensor.h:43
uint16_t type
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb)
Encode a 16-bit value given the most and least significant byte.
Definition helpers.h:528