spejsiot/spejsiot/SpejsNode.h

124 lines
2.5 KiB
C++

#ifndef SPEJSNODE_H
#define SPEJSNODE_H
#include <user_config.h>
#include <common_config.h>
#include <SmingCore.h>
#include <Endpoint.h>
#include <JsonObjectStream.h>
#include <vector>
#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<String, Endpoint*> 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<EndpointInitializer>);
};
#endif