#pragma once #include #include #include class DigitalOutputIoT : public IoTComponent { public: DigitalOutputIoT(); ~DigitalOutputIoT(); bool begin(ExpansionCard *card, void (*publishRelative)(uint8_t, char *, char *), PubSubClient *mqtt, char *base_topic); void handleMqttMessage(char *topic, char *payload); void publishDigitalOutputs(); void publishDigitalOutput(uint8_t pin); void publishDigitalOutputState(uint8_t pin); void publishDigitalOutputValue(uint8_t pin); void setDigitalOutputsPublishEnabled(bool enabled); void handleValueChange(uint8_t pin, bool state, uint16_t value); void registerValueChangeCallback(void (*callback)(uint8_t, bool, uint16_t)); void deregisterValueChangeCallback(); void publishReport(); uint8_t getType(); private: bool digital_outputs_publish_enabled = false; bool processSetStateMessage(char *topic, char *payload, uint8_t topic_length); bool processSetValueMessage(char *topic, char *payload, uint8_t topic_length); bool processRequestStateMessage(char *topic, char *payload, uint8_t topic_length); void (*value_change_callback)(uint8_t, bool, uint16_t); DigitalOutputCard *card; char *state_report_topic; char *value_report_topic; uint8_t set_state_length; uint8_t set_value_length; uint8_t state_length; uint8_t value_length; uint8_t request_state_length; uint8_t publish_enable_length; };