Skip to content

Commit 9f19fec

Browse files
committed
added local rate-limiting
1 parent 76d3099 commit 9f19fec

File tree

5 files changed

+298
-245
lines changed

5 files changed

+298
-245
lines changed

src/ThingESP_32.cpp

Lines changed: 168 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -1,179 +1,168 @@
1-
#pragma once
2-
3-
#if defined(ESP8266)
4-
#include <ESP8266WiFi.h>
5-
#elif defined(ESP32)
6-
#include <WiFi.h>
7-
#endif
8-
9-
#include <stdint.h>
10-
#include <string.h>
11-
12-
#include "PubSubClient/PubSubClient.h"
13-
#include "ArduinoJson.h"
14-
15-
#include "thingesp/Logger.cpp"
16-
#include "thingesp/Device.cpp"
17-
#include "thingesp/RateLimiter.cpp"
18-
19-
String HandleResponse(String query) __attribute__((weak));
20-
21-
class ThingESP32 : public DeviceData, public RateLimiter
22-
{
23-
public:
24-
ThingESP32(const char* _username, const char* _projectName, const char* _credentials) : client(espClient)
25-
{
26-
username = _username;
27-
projectName = _projectName;
28-
credentials = _credentials;
29-
30-
genMetaData();
31-
};
32-
33-
34-
void sendMsg(String number, String msg)
35-
{
36-
if (is_rate_limited()) return;
37-
38-
DynamicJsonDocument data_out(1024);
39-
data_out["action"] = "device_call";
40-
data_out["to_number"] = number;
41-
data_out["msg"] = msg;
42-
String outdata;
43-
serializeJson(data_out, outdata);
44-
publishMSG(outdata.c_str());
45-
}
46-
47-
void initDevice()
48-
{
49-
if (wifi_configured) {
50-
51-
LOG_VALUE("WiFi", "Connecting to: ", ssid)
52-
53-
WiFi.begin(ssid, ssid_password);
54-
55-
while (WiFi.status() != WL_CONNECTED) {
56-
delay(500);
57-
}
58-
59-
LOG("WiFi", "Connected successfully");
60-
LOG_VALUE("WiFi","IP address: ", WiFi.localIP());
61-
62-
63-
}
64-
65-
randomSeed(micros());
66-
67-
client.setServer(MQTT_SERVER, MQTT_PORT);
68-
client.setCallback([this](char *topic, byte *payload, unsigned int length) {
69-
callback(topic, payload, length);
70-
});
71-
}
72-
73-
void Handle()
74-
{
75-
if (!client.connected())
76-
{
77-
while (!client.connected())
78-
{
79-
LOG("SOCKET", "Attempting connection to ThingESP")
80-
81-
if (client.connect(outName.c_str(), outName.c_str(), credentials))
82-
{
83-
LOG("SOCKET", "Connected to ThingESP successfully")
84-
client.subscribe(topic.c_str());
85-
publishMSG(get_rate_limits_msg());
86-
}
87-
else
88-
{
89-
LOG_VALUE("SOCKET", "Error connecting to ThingESP! Error code: ", client.state());
90-
if (client.state() == 5)
91-
LOG("SOCKET","Please check your username, project name or credentials! ")
92-
LOG("SOCKET", "Trying again in 10 seconds..");
93-
delay(10000);
94-
}
95-
}
96-
}
97-
client.loop();
98-
}
99-
100-
101-
void setCallback( String(*clbk)(String) ){
102-
this->callbackFunction = clbk;
103-
}
104-
105-
private:
106-
107-
/*
108-
* the callback function
109-
*/
110-
String (*callbackFunction)(String);
111-
112-
113-
/*
114-
* the WiFi Client
115-
*/
116-
WiFiClient espClient;
117-
118-
119-
120-
/*
121-
* PubSubClient for MQTT
122-
*/
123-
PubSubClient client;
124-
125-
126-
void publishMSG(const char* _msg)
127-
{
128-
client.publish(topic.c_str(), _msg);
129-
}
130-
131-
void callback(char *topic, byte *payload, unsigned int length)
132-
{
133-
String msg;
134-
135-
for (int i = 0; i < length; i++)
136-
msg.concat((char)payload[i]);
137-
138-
onMessage(msg);
139-
}
140-
141-
142-
void onMessage(String& data)
143-
{
144-
145-
DynamicJsonDocument data_in(1024);
146-
DynamicJsonDocument data_out(1024);
147-
deserializeJson(data_in, data);
148-
149-
String incoming_action = data_in["action"];
150-
151-
if (incoming_action == "query")
152-
{
153-
data_out["msg_id"] = data_in["msg_id"];
154-
data_out["action"] = "returned_api_response";
155-
String query = data_in["query"];
156-
157-
#ifndef _DISABLE_LOWER_CASE_
158-
query.toLowerCase();
159-
#endif
160-
161-
LOG_VALUE("MSG", "Query: ", query);
162-
163-
String resp = !!HandleResponse ? HandleResponse(query) : this->callbackFunction(query);
164-
165-
LOG_VALUE("MSG", "Response: ", resp);
166-
167-
data_out["returned_api_response"] = resp;
168-
169-
String out_msg;
170-
serializeJson(data_out, out_msg);
171-
publishMSG(out_msg.c_str());
172-
173-
}
174-
else if (incoming_action == "RATE_LIMITS_INFO"){
175-
set_rate_limit((unsigned int)data_in["delay"]);
176-
}
177-
};
178-
179-
};
1+
//#pragma once
2+
//
3+
//#if defined(ESP8266)
4+
// #include <ESP8266WiFi.h>
5+
//#elif defined(ESP32)
6+
// #include <WiFi.h>
7+
//#endif
8+
//
9+
//#include <stdint.h>
10+
//#include <string.h>
11+
//
12+
//#include "PubSubClient/PubSubClient.h"
13+
//#include "ArduinoJson.h"
14+
//
15+
//#include "thingesp/Logger.cpp"
16+
//#include "thingesp/Device.cpp"
17+
//#include "thingesp/RateLimiter.cpp"
18+
//
19+
//String HandleResponse(String query) __attribute__((weak));
20+
//
21+
//class ThingESP32 : public DeviceData, public RateLimiter
22+
//{
23+
//public:
24+
// ThingESP32(const char* _username, const char* _projectName, const char* _credentials) : client(espClient)
25+
// {
26+
// username = _username;
27+
// projectName = _projectName;
28+
// credentials = _credentials;
29+
//
30+
// genMetaData();
31+
// };
32+
//
33+
//
34+
//
35+
//
36+
// void initDevice()
37+
// {
38+
// if (wifi_configured) {
39+
//
40+
// LOG_VALUE("WiFi", "Connecting to: ", ssid)
41+
//
42+
// WiFi.begin(ssid, ssid_password);
43+
//
44+
// while (WiFi.status() != WL_CONNECTED) {
45+
// delay(500);
46+
// }
47+
//
48+
// LOG("WiFi", "Connected successfully");
49+
// LOG_VALUE("WiFi","IP address: ", WiFi.localIP());
50+
//
51+
//
52+
// }
53+
//
54+
// randomSeed(micros());
55+
//
56+
// client.setServer(MQTT_SERVER, MQTT_PORT);
57+
// client.setCallback([this](char *topic, byte *payload, unsigned int length) {
58+
// callback(topic, payload, length);
59+
// });
60+
// }
61+
//
62+
// void Handle()
63+
// {
64+
// if (!client.connected())
65+
// {
66+
// while (!client.connected())
67+
// {
68+
// LOG("SOCKET", "Attempting connection to ThingESP")
69+
//
70+
// if (client.connect(outName.c_str(), outName.c_str(), credentials))
71+
// {
72+
// LOG("SOCKET", "Connected to ThingESP successfully")
73+
// client.subscribe(topic.c_str());
74+
// publishMSG(get_rate_limits_msg());
75+
// }
76+
// else
77+
// {
78+
// LOG_VALUE("SOCKET", "Error connecting to ThingESP! Error code: ", client.state());
79+
// if (client.state() == 5)
80+
// LOG("SOCKET","Please check your username, project name or credentials! ")
81+
// LOG("SOCKET", "Trying again in 10 seconds..");
82+
// delay(10000);
83+
// }
84+
// }
85+
// }
86+
// client.loop();
87+
// }
88+
//
89+
//
90+
// void setCallback( String(*clbk)(String) ){
91+
// this->callbackFunction = clbk;
92+
// }
93+
//
94+
//private:
95+
//
96+
// /*
97+
// * the callback function
98+
// */
99+
// String (*callbackFunction)(String);
100+
//
101+
//
102+
// /*
103+
// * the WiFi Client
104+
// */
105+
// WiFiClient espClient;
106+
//
107+
//
108+
//
109+
// /*
110+
// * PubSubClient for MQTT
111+
// */
112+
// PubSubClient client;
113+
//
114+
//
115+
// void publishMSG(const char* _msg)
116+
// {
117+
// client.publish(topic.c_str(), _msg);
118+
// }
119+
//
120+
// void callback(char *topic, byte *payload, unsigned int length)
121+
// {
122+
// String msg;
123+
//
124+
// for (int i = 0; i < length; i++)
125+
// msg.concat((char)payload[i]);
126+
//
127+
// onMessage(msg);
128+
// }
129+
//
130+
//
131+
// void onMessage(String& data)
132+
// {
133+
//
134+
// DynamicJsonDocument data_in(1024);
135+
// DynamicJsonDocument data_out(1024);
136+
// deserializeJson(data_in, data);
137+
//
138+
// String incoming_action = data_in["action"];
139+
//
140+
// if (incoming_action == "query")
141+
// {
142+
// data_out["msg_id"] = data_in["msg_id"];
143+
// data_out["action"] = "returned_api_response";
144+
// String query = data_in["query"];
145+
//
146+
// #ifndef _DISABLE_LOWER_CASE_
147+
// query.toLowerCase();
148+
// #endif
149+
//
150+
// LOG_VALUE("MSG", "Query: ", query);
151+
//
152+
// String resp = !!HandleResponse ? HandleResponse(query) : this->callbackFunction(query);
153+
//
154+
// LOG_VALUE("MSG", "Response: ", resp);
155+
//
156+
// data_out["returned_api_response"] = resp;
157+
//
158+
// String out_msg;
159+
// serializeJson(data_out, out_msg);
160+
// publishMSG(out_msg.c_str());
161+
//
162+
// }
163+
// else if (incoming_action == "RATE_LIMITS_INFO"){
164+
// set_rate_limit((unsigned int)data_in["delay"]);
165+
// }
166+
// };
167+
//
168+
//};

0 commit comments

Comments
 (0)