#ifndef SPEJSNODE_H #define SPEJSNODE_H #include #include #include #include #include #include #define D0 16 #define D1 5 #define D2 4 #define D3 0 #define D4 2 #define D5 14 #define D6 12 #define D7 13 #define D8 15 class LED { int highState = HIGH; int pin = 2; Timer animateTimer; void animate() { if (millis() % blinkRate > blinkOn) { digitalWrite(pin, !highState); } else { digitalWrite(pin, highState); } } public: unsigned blinkRate = 4000; unsigned blinkOn = 100; LED() { } void config(int pin_, bool highState_ = HIGH) { pin = pin_; highState = highState_; pinMode(pin, OUTPUT); animateTimer.initializeMs(50, [=]() { animate(); }).start(); } void idle() { blinkRate = 4000; } void high() { blinkRate = 300; } }; class SpejsNode { protected: Timer keepaliveTimer; HashMap endpoints; void keepAliveHandler(); void initializeMDNS(); void buildMetadata(JsonObjectStream* stream); void mqttCallback(String, String); void otaUpdateCallback(bool result); void httpFile(HttpRequest &request, HttpResponse &response); void httpConfig(HttpRequest &request, HttpResponse &response); void httpIndex(HttpRequest &request, HttpResponse &response); void systemReady(void); String wifiSSID = WIFI_SSID; String wifiPassword = WIFI_PWD; String brokerURL = "mqtt://" MQTT_BROKER; String brokerClient = ""; bool brokerUseTLS = false; #ifdef ENABLE_SSL SslFingerprints fingerprints; #endif public: MqttClient mqtt; HttpServer http; String deviceID; String deviceType; LED statusLED; void (*onConnectedCallback)(void); void (*onDisconnectedCallback)(void); uint8_t currentSlot; SpejsNode(String _deviceType) : mqtt(), deviceType(_deviceType), onConnectedCallback(NULL) { mqtt.setCallback(MqttStringSubscriptionCallback(&SpejsNode::mqttCallback, this)); }; void onConnected(); void gotIP(IpAddress ip, IpAddress netmask, IpAddress gateway); void init(bool debug=false); bool notify(String key, String value); bool subscribe(String topic); void registerEndpoint(String key, Endpoint* cb); String DEV_TOPIC(String t); void loadJSON(std::vector); }; #endif