Skip to content

Commit

Permalink
Added POST functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
edememinov committed May 28, 2022
1 parent 5661d69 commit 9f25652
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 18 deletions.
Binary file modified ActionHandler.h.d1.bin
Binary file not shown.
4 changes: 2 additions & 2 deletions ButtonHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ void handlePress(int keyNumber) {
handleSocketCommand(buttons["pages"][page]["buttons"][keyNumber - 1]["command_id"].as<String>());
} else if (buttons["pages"][page]["buttons"][keyNumber - 1]["type"].as<String>() == "apiCall") {
if (buttons["pages"][page]["buttons"][keyNumber - 1].containsKey("fingerprint")) {
handleApiCall(buttons["pages"][page]["buttons"][keyNumber - 1]["url"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["fingerprint"].as<String>());
handleApiCall(buttons["pages"][page]["buttons"][keyNumber - 1]["url"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["requestType"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["headers"].to<JsonArray>(), buttons["pages"][page]["buttons"][keyNumber - 1]["body"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["fingerprint"].as<String>());
} else {
handleApiCall(buttons["pages"][page]["buttons"][keyNumber - 1]["url"].as<String>());
handleApiCall(buttons["pages"][page]["buttons"][keyNumber - 1]["url"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["requestType"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["headers"].to<JsonArray>(), buttons["pages"][page]["buttons"][keyNumber - 1]["body"].as<String>());
}
}else if(buttons["pages"][page]["buttons"][keyNumber - 1]["type"].as<String>() == "mqtt"){
callMqttCommand(buttons["pages"][page]["buttons"][keyNumber - 1]["topic"].as<String>(), buttons["pages"][page]["buttons"][keyNumber - 1]["payload"].as<String>());
Expand Down
54 changes: 50 additions & 4 deletions ExecutionHandler.h
Original file line number Diff line number Diff line change
@@ -1,16 +1,62 @@
//Executes the API call with a provided fingerprint
void handleApiCall(String url, String fingerprint = configJson["fingerprint"]) {
void addHeadersToCall(HTTPClient& http, JsonArray httpHeaders){
for(JsonVariant v : httpHeaders){
http.addHeader(v["headerKey"].as<String>(), v["headerValue"].as<String>());
}
}


void handleGETRequest(String url, JsonArray httpHeaders, String fingerprint){
if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
HTTPClient http; //Declare an object of class HTTPClient
http.begin(url, fingerprint); //Specify request destination
if(fingerprint != ""){
http.begin(url, fingerprint); //Specify request destination
}
else{
http.begin(url); //Specify request destination
}

if(httpHeaders.size() > 0){
addHeadersToCall(http, httpHeaders);
}
int httpCode = http.GET(); //Send the request
if (httpCode > 0) { //Check the returning code
String payload = http.getString(); //Get the request response payload
}
http.end(); //Close connection
http.end();
}
}

void handlePOSTRequest(String url, String body, JsonArray httpHeaders, String fingerprint){
if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
HTTPClient http; //Declare an object of class HTTPClient
if(fingerprint != ""){
http.begin(url, fingerprint); //Specify request destination
}
else{
http.begin(url); //Specify request destination
}
if(httpHeaders.size() > 0){
addHeadersToCall(http, httpHeaders);
}
int httpCode = http.POST(body); //Send the request
if (httpCode > 0) { //Check the returning code
String payload = http.getString(); //Get the request response payload
}
http.end();
}
}



//Executes the API call with a provided fingerprint
void handleApiCall(String url, String requestType, JsonArray httpHeaders, String body, String fingerprint = configJson["fingerprint"]) {
if(requestType == "POST"){
handlePOSTRequest(url, body, httpHeaders, fingerprint);
}
else{
handleGETRequest(url, httpHeaders, fingerprint);
}
}

//Handles the changing of the pages
void handleBoardChange(int keyNumber) {
Expand Down
2 changes: 1 addition & 1 deletion SysVariables.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//All availables variables are here
#define ServerVersion "1.0"
#define FirmwareVersion "v 0.4"
#define FirmwareVersion "v 0.5"
String webpage = "";
bool SD_present = false;

Expand Down
31 changes: 20 additions & 11 deletions macrodeck.ino
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,22 @@ void setup() {
buttons = doc.as<JsonObject>();
if (!buttons.isNull()) {
buttonConfigJson = buttonConfigDoc.as<JsonObject>();
client.begin(configJson["socketHost"].as<char*>(), configJson["socketPort"].as<int>(), path);
mqttClient.setServer(configJson["mqttBroker"].as<char*>(), configJson["mqttPort"].as<int>());
while (!mqttClient.connected()) {
String client_id = configJson["mqttClientID"].as<String>();
if (mqttClient.connect(client_id.c_str(), configJson["mqttUsername"].as<char*>(), configJson["mqttPassword"].as<char*>())) {
} else {
tft.print("failed with state ");
tft.print(mqttClient.state());
delay(2000);
if (configJson["deckboardConnection"].as<bool>()){
client.begin(configJson["socketHost"].as<char*>(), configJson["socketPort"].as<int>(), path);
}
if (configJson["mqttConnection"].as<bool>()){
mqttClient.setServer(configJson["mqttBroker"].as<char*>(), configJson["mqttPort"].as<int>());
while (!mqttClient.connected()) {
String client_id = configJson["mqttClientID"].as<String>();
if (mqttClient.connect(client_id.c_str(), configJson["mqttUsername"].as<char*>(), configJson["mqttPassword"].as<char*>())) {
} else {
tft.print("failed with state ");
tft.print(mqttClient.state());
delay(2000);
}
}
}

setCurrentBoard();
interateOverButtonsOnPage();
}
Expand Down Expand Up @@ -142,8 +147,12 @@ void loop() {
tft.println("development is missing. Please update the configuration through the app");
}
delay(100);
client.loop();
mqttClient.loop();
if (configJson["deckboardConnection"].as<bool>()){
client.loop();
}
if (configJson["mqttConnection"].as<bool>()){
mqttClient.loop();
}
webserver.handleClient();
tft.setTextColor(TFT_WHITE, TFT_BLACK);

Expand Down

0 comments on commit 9f25652

Please sign in to comment.