27#include <ArduinoJson.h>
29#include "grmcdorman/Setting.h"
31namespace grmcdorman::device
33 class SettingInterface;
54 Device(
const __FlashStringHelper *device_name,
const __FlashStringHelper *device_identifier);
61 static constexpr int D0 = 16;
62 static constexpr int D1 = 5;
63 static constexpr int D2 = 4;
64 static constexpr int D3 = 0;
65 static constexpr int D4 = 2;
66 static constexpr int D5 = 14;
67 static constexpr int D6 = 12;
68 static constexpr int D7 = 13;
69 static constexpr int D8 = 15;
139 virtual const __FlashStringHelper *
get_icon()
const = 0;
147 const __FlashStringHelper *
name()
const
162 return device_identifier;
188 static void set_system_identifiers(
const __FlashStringHelper *firmware_name_value,
const String &system_identifier_value = String());
197 return firmware_name;
207 return system_identifier;
268 virtual bool publish(DynamicJsonDocument &json)
const
284 return DynamicJsonDocument(8);
314 const ::grmcdorman::SettingInterface::settings_list_t &
get_settings()
const
354 void set(
const String &setting,
const String &value);
370 String
get(
const String &setting)
const;
414 is_published =
false;
428 definitions = std::move(definition_list);
429 settings = std::move(setting_list);
468 const __FlashStringHelper *device_name;
469 const __FlashStringHelper *device_identifier;
470 bool is_published =
true;
472 static const __FlashStringHelper *firmware_name;
473 static String system_identifier;
477 ::grmcdorman::SettingInterface::settings_list_t settings;
A sensor definition to be published to MQTT.
Definition: Device.h:79
virtual const __FlashStringHelper * get_unit_of_measurement() const =0
Get the unit of measurement.
virtual const __FlashStringHelper * get_value_template() const =0
Get the value template.
virtual const __FlashStringHelper * get_json_attributes_template() const =0
Get the json attributes template.
virtual const __FlashStringHelper * get_name_suffix() const =0
Get the name suffix.
virtual const __FlashStringHelper * get_unique_id_suffix() const =0
Get the unique id suffix.
virtual const __FlashStringHelper * get_icon() const =0
Get the icon.
The generic device interface.
Definition: Device.h:46
virtual bool publish(DynamicJsonDocument &json) const
Publish the value and attributes.
Definition: Device.h:268
void clear_is_published()
Set the device as not having published readings.
Definition: Device.h:412
const definition_list_t & get_definitions() const
Get the definitions list.
Definition: Device.h:301
const __FlashStringHelper * name() const
Get the device name; used for UI names and IDs.
Definition: Device.h:147
String get(const String &setting) const
Get a setting value, as a string.
Definition: Device.cpp:82
virtual ~Device()
Destroy the Device object.
Definition: Device.h:59
static constexpr int D0
D0 is GPIO16, HIGH at boot, not suitable for most usages.
Definition: Device.h:61
Device(const __FlashStringHelper *device_name, const __FlashStringHelper *device_identifier)
Construct a new Device object.
Definition: Device.cpp:43
virtual void set_devices(const std::vector< Device * > &list)
For devices that support it, add devices to manage.
Definition: Device.h:227
virtual void setup()=0
Setup the device.
static constexpr int D1
D1 is GPIO5; often used as SCL.
Definition: Device.h:62
static const ExclusiveOptionSetting::names_list_t data_line_names
Names for each configurable data line; see settingsMap.
Definition: Device.h:416
virtual void loop()=0
Main loop.
virtual DynamicJsonDocument as_json() const
Get the values, as a JSON document.
Definition: Device.h:281
void set(const String &setting, const String &value)
If possible, set a setting's value.
Definition: Device.cpp:69
static constexpr int D2
D2 is GPIO4; often used as SDA.
Definition: Device.h:63
static void set_system_identifiers(const __FlashStringHelper *firmware_name_value, const String &system_identifier_value=String())
Set the system identifier values.
Definition: Device.cpp:50
static int dataline_to_index(int dataLine)
Convert a data line to an index.
Definition: Device.cpp:98
static constexpr int D7
D7 is GPIO13; SPI (MOSI)
Definition: Device.h:68
const ::grmcdorman::SettingInterface::settings_list_t & get_settings() const
Get the settings list.
Definition: Device.h:314
static const String & get_system_identifier()
Get the system identifier.
Definition: Device.h:205
void set_enabled(bool state)
Set whether this device is enabled.
Definition: Device.h:335
static constexpr int D5
D5 is GPIO14; SPI (SCLK)
Definition: Device.h:66
virtual bool get_is_published() const
Get whether the device readings have been published.
Definition: Device.h:393
virtual void set_defaults()
Set defaults, if necessary.
Definition: Device.h:218
virtual const __FlashStringHelper * identifier() const
Get the device identifier.
Definition: Device.h:160
bool is_enabled() const
Get whether this device is enabled.
Definition: Device.h:325
static constexpr int D3
D3 is GPIO0; pulled up; connected to FLASH button; not for input.
Definition: Device.h:64
static constexpr int D4
D4 is GPIO2; pulled up; HIGH at boot; on-board LED; not for input.
Definition: Device.h:65
static const int settingsMap[6]
The set of data lines usable for communication.
Definition: Device.h:464
ToggleSetting enabled
Whether this device is enabled.
Definition: Device.h:466
virtual String get_status() const
Get a status report.
Definition: Device.h:380
static constexpr int D8
D8 is GPIO15; pulled to GND; SPI (CS); not recommended.
Definition: Device.h:69
void set_is_published()
Set the device as having published readings.
Definition: Device.h:403
void initialize(definition_list_t &&definition_list, ::grmcdorman::SettingInterface::settings_list_t &&setting_list)
Initialize the definition and setting lists.
Definition: Device.h:426
static constexpr int D6
D6 is GPIO12; SPI (MISO)
Definition: Device.h:67
static int index_to_dataline(int index)
Convert a data line index to a ESP data line.
Definition: Device.h:442
static const __FlashStringHelper * get_firmware_name()
Get the firmware prefix.
Definition: Device.h:195
std::vector< const Definition * > definition_list_t
The type containing a list of Definition objects.
Definition: Device.h:291