25#include <SoftwareSerial.h>
27#include "grmcdorman/device/Device.h"
28#include "grmcdorman/device/Accumulator.h"
30namespace grmcdorman::device
65 void setup()
override;
67 bool publish(DynamicJsonDocument &json)
const override;
68 DynamicJsonDocument
as_json()
const override;
92 return pm25.get_last_reading();
95 static constexpr uint16_t vindriktning_message_size = 20;
104 void parse(
const uint8_t *data);
112 bool is_valid_checksum(
const uint8_t *data)
const;
122 const uint8_t *find_message(
const uint8_t *data, uint8_t byte_count)
const;
135 ExclusiveOptionSetting serialDataPin;
136 InfoSettingHtml device_status;
138 ::grmcdorman::SettingInterface::settings_list_t settings;
140 SoftwareSerial sensorSerial;
141 uint32_t last_read_millis = 0;
142 State last_read_state = State::NEVER_READ;
143 static constexpr uint16_t buffer_size = 2 * vindriktning_message_size;
144 uint8_t buffer[buffer_size];
145 uint32_t rxBufIdx = 0;
147 static constexpr uint8_t HEADER_BYTE_0 = 0x16;
148 static constexpr uint8_t HEADER_BYTE_1 = 0x11;
149 static constexpr uint8_t HEADER_BYTE_2 = 0x0B;
151 Accumulator<uint32_t, 5> pm25;
The generic device interface.
Definition: Device.h:46
This class supports the Ikea Vindriktning air quality sensor as a device.
Definition: VindriktningAirQuality.h:61
uint16_t get_pm25() const
Get the last PM 2.5 reading.
Definition: VindriktningAirQuality.h:90
void loop() override
Main loop.
Definition: VindriktningAirQuality.cpp:96
bool publish(DynamicJsonDocument &json) const override
Publish the value and attributes.
Definition: VindriktningAirQuality.cpp:179
virtual String get_status() const
Get a status report.
Definition: VindriktningAirQuality.cpp:203
void setup() override
Setup the device.
Definition: VindriktningAirQuality.cpp:88
DynamicJsonDocument as_json() const override
Get the values, as a JSON document.
Definition: VindriktningAirQuality.cpp:191